Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedded Developer, what skills are important [closed]

I want to make a list of things that need to learn that is valuable for my career. What skills do you think are vital for an embedded developer, now and the distant future?

I have become quite proficient with C and ARM assembler through working with embedded Linux kernel and I'm about to dive into Linux drivers. However I can't help to think that I'm maybe narrowing my skill set to much. I want to keep working with embedded systems in the future but you never know the job market (paranoid that I'm going to be outsourced to China and India).

I feel that I'm currently quite weak with C++ and Java, I would also like to learn the Android kernel in the future. I also don't know any scripting languages.

Can anyone who has worked with embedded systems for a while, give some input on what skills/languages they think is vital for an embedded developer? Should I continue to only hone my C skills or should I learn new things.

like image 836
MrGigu Avatar asked Jun 20 '13 09:06

MrGigu


People also ask

What is an embedded skill?

Embedded software engineer skills include a solid understanding of programming languages optimised for embedded systems such as C, C++ and Assembly. Understanding of both hardware and software systems is also crucial for the work of embedded software engineers.

What are important features of embedded?

Embedded systems can either have no user interface or possess highly advanced graphical interfaces. It mainly depends on the purpose of the device or the function it is designed to carry out. Simple embedded systems use LEDs, buttons or LCD displays with simple menu options.


1 Answers

Here's my list:

  • C essentials
  • OOP/ C++ - classes, encapsulation, polymorphism, overloading/ overriding, templates
  • Algorithms - search, sort, b-trees
  • Design Patterns - factory, observer, singleton etc.
  • Real Time Operating Systems - primitives (semaphore, mutex), scheduling techniques, user/ kernel space
  • Linux fundamentals, driver writing, shell
  • microprocessor fundamentals - interrupt processing, registers, assembly code, etc.
  • microcontroller fundamentals - ADC, DAC, Timers, PWM, DMA, watchdog, etc.
  • Memory - NOR, NAND, SRAM, DRAM, wear levelling
  • Basic protocols - I2C, SPI, UART, LIN
  • Advanced protocols - SATA, PCIE, USB, CAN, MOST
  • Concurrent/ parallel programming - MPI for SMP etc.
  • UML - class diagram, component diagram, state diagram, sequence diagram
  • Perl or Python for scripting, for e.g. to modify simple text files.
  • Java and Android
  • Basic electronics - schematics reading, using oscilloscope, multimeter, soldering iron
  • Specialized techniques for embedded programming e.g. debouncing of switches, resistive ladder switches, rotary encoders, etc.
  • software engineering - SDLC, CMMI, agile methods e.g. SCRUM, version control (ClearCase, git, svn), bug tracking (JIRA?), static code checking, Lint, unit testing, continuous integration
  • build environments - makefile, cmake
  • Basic FPGA/ ASIC design, basic DSP
like image 193
ruben2020 Avatar answered Oct 01 '22 22:10

ruben2020