Career Advice for Embedded Programmers [SOLVED]

Thread Starter

Pushkar1

Joined Apr 5, 2021
324
I am university student. I want a better career as embedded programmer. The job market is constantly moving towards C++, ARM, RTOS, Python, Linux , IoT etc. I only know the C language, I write c code for embedded system. I am not expert in it but I am not a beginner either. Should I learn C++, ARM, RTOS, Python, Linux. I really have no idea what linux means in job market. I know Linux is an operating system so is this Linux system used to develop embedded products? or Do embedded programmers write application programs that run on Linux OS for embedded systems.

what advice would you like to give
 
Last edited:

dl324

Joined Mar 30, 2015
13,328
My advice is to first learn how to program well in any language. Learning new programming languages doesn't take much time. When I was still working, we learned how to use most of the capabilities of a new language in a week; time was usually evenly divided between lecture and lab. Using it afterwards helps what you learned sink in. That's how I learned C, Perl, Skill, Mainsail, and a number of specialized languages for checking and manipulating IC layout (polygon) data.

When I finally decided to finally learn Python few weeks ago, I skimmed a 200 page quick start in a couple days to get familiar with the language capabilities and highlighted the things that were different in Python. I haven't tried writing any code from scratch yet, but hacking on existing scripts makes a lot more sense now. I really hate the dependence on indentation instead of using curly braces; it interferes with my style.

Embedded can have so many meanings. Systems could be running Linux, an RTOS, or be bare metal.

Once you learn one Unix variant, you can quickly learn any of them. I started with BSD, then learned The Wollongong Group's Unice emulator that ran under VMS, then DEC's version called Ultrix, followed by NCR's version (can't remember its name), IBM's AIX, SunOS, and HP's HP-UX; there were probably others that I've forgotten.

Linux is a mish mash of both main variants of Unix (System V from AT&T and BSD from UC Berkeley). I'm an EE, so I didn't learn about the Unix kernel until a decade after I first started using Unix. I was a sysadmin at the time and could do admin functions, but didn't really understand the nuts and bolts of Unix. When I started doing more coding in C, I read The Design of the Unix Operating System by Maurice Bach and things became clearer.
 

Thread Starter

Pushkar1

Joined Apr 5, 2021
324
Once you learn one Unix variant, you can quickly learn any of them. that I've forgotten.
Thanks @dl324 for giving the right career advice. I don't understand why you mentioned the unix. What exactly is your point to learn Unix? Unix is an operating system. Embedded system can be developed on Linux or Windows OS. I have Windows operating system on which I write C programs for embedded systems. I've never written any C code to develop any embedded system on Linux operating systems. Do you mean I should learn how develop embedded systems by writing code on Linux operating system?
 

dl324

Joined Mar 30, 2015
13,328
I don't understand why you mentioned the unix. What exactly is your point to learn Unix? Unix is an operating system.
You mentioned Linux as one of the things the market is moving towards. My point is that Linux is derived from System V and BSD Unix and if you learn any of the Unix flavors, you can pretty much work with any of them - from a user perspective. If you want to modify the kernel, then you need to study the specifics for the variant you're using.

I have Windows operating system on which I write C programs for embedded systems.
Why aren't you using WSL? With WSL2, Linux support is fairly complete. With WSL1, I couldn't run pishrink.sh to shrink Raspberry Pi images. With WSL2, I can. It doesn't support mounting extr partitions and might not ever because Microsoft has released Win11 and it looks like development on Win10 is dead.

Initially Microsoft supported Ubuntu. Now they support many Linux variants. I'm using Debian.
 

click_here

Joined Sep 22, 2020
444
My advice is master the C language - Not just the language itself, but the abstract data types and grasping different basic applications. (encryption, sorting algorithms, web server/client)

From there look at a job site.

There is no point in learning a language that has no demand. If a job comes up for it, chances are someone with experience from when the language was relevant will get the job.

https://m.statisticstimes.com/tech/top-computer-languages.php
 

Thread Starter

Pushkar1

Joined Apr 5, 2021
324
You mentioned Linux as one of the things the market is moving towards. My point is that Linux is derived from System V and BSD Unix and if you learn any of the Unix flavors, you can pretty much work with any of them - from a user perspective. If you want to modify the kernel, then you need to study the specifics for the variant you're using.
@dl324

I'm getting a bit confused. I don't really understand what Linux means in job market. Linux is an operating system created by programmers by writing program. It is common that Linux is installed on the PC on which application programs are run written by programmers. I once installed Ubuntu on my PC. As far as I know linux os are used in many organization's for file sharing, security purpose.

I don't understand how Linux is used in embedded systems. It seems to me that Linux is a program, runs on a processor. The embedded system which we have developed runs the Linux program if we want to connect any external device to be connected to the system then we need to modify the Linux kernel and we have to write the application program.
 

dl324

Joined Mar 30, 2015
13,328
I'm getting a bit confused. I don't really understand what Linux means in job market. Linux is an operating system created by programmers by writing program.
You caused this confusion by mentioning Linux and RTOS in your list.
The job market is constantly moving towards C++, ARM, RTOS, Python, Linux , IoT etc. I only know the C language, I write c code for embedded system.
It is common that Linux is installed on the PC on which application programs are run written by programmers.
Most developers would choose to develop on the target platform. If that's Windows, then using a Windows based PC would make sense. When I ported C code that I wrote on HP-UX (and AIX and others) to ARM, I had to change the includes for Debian and Ubuntu (which is a Debian derivative) for trivial things like exit().
As far as I know linux os are used in many organization's for file sharing, security purpose.
It's used for just about everything important (aside from management tasks). At my last job, we all had Windows based laptops that were used to login remotely to a compute server farm. We used Windows for email and MS Office. All of our "real" work was done via VNC on a compute server running Unix. Large companies will use the computer manufacturer's version of Unix so they can have formal support.
I don't understand how Linux is used in embedded systems. It seems to me that Linux is a program, runs on a processor.
Linux is a program, but we think of it as an operating system who's job is to manage system resources. User programs don't do privileged operations; those are done by the kernel for us. RTOS is an operating system written for applications that require things to happen in real time (i.e. a program can control when it will give up the CPU). Linux can force any process to give up the CPU. Linux supports just about any programming language you can think of.
if we want to connect any external device to be connected to the system then we need to modify the Linux kernel and we have to write the application program.
That will only be the case if the peripheral is so new that a driver hasn't been included with Linux.
 

Ian Rogers

Joined Dec 12, 2012
935
Simply put.... If you are looking to be a "lone" developer, no one will care what you develop your system with.

If you are joining a team of developers, then your code needs to work with theirs..

I have made many systems and I'm a lone programmer.. ASM and C is all I ever needed... I can make all my variables global if I want because abstraction, inheritance, polymorphism and encapsulation are NOT on my "give a toss" list

C++ is absolutely vital when working with "Mr Perfecto's".. But I don't need him..

As all before me have stated... Look at the job.. You decide... IF!! you need OOP then grab an Arduino and have a play... Not exactly C++ more like C#, python and java... Tiniest bit of OOP..

OOP = Object Orientated Programming..
 

nsaspook

Joined Aug 27, 2009
8,786
Abstraction, inheritance, polymorphism and encapsulation are all structured programming concepts (that pre-date OOP) that can be used in ASM and C. Once they become second nature in embedded programming projects it makes programming more like a hardware engineering task instead an artistic exercise in making X work.
 

Ian Rogers

Joined Dec 12, 2012
935
Abstraction, inheritance, polymorphism and encapsulation are all structured programming concepts (that pre-date OOP) that can be used in ASM and C. Once they become second nature in embedded programming projects it makes programming more like a hardware engineering task instead an artistic exercise in making X work.
Yeah! I know... no matter how high level you go, its still made into machine code... You're missing my point... These things make learning C++ and such languages dire.. BUT!! OOP languages base themselves on these attributes... A lone programmer doesn't need to learn these things..
 

nsaspook

Joined Aug 27, 2009
8,786
Yeah! I know... no matter how high level you go, its still made into machine code... You're missing my point... These things make learning C++ and such languages dire.. BUT!! OOP languages base themselves on these attributes... A lone programmer doesn't need to learn these things..
C++ is a monstrosity. You're right, a lone programmer doesn't need to learn these things in a specific language but they should learn the principles of structured programming (abstraction, inheritance, polymorphism and encapsulation) for procedural programming that's normally used in controller sized projects. OOP is a just subset of the entire subject, it's not the answer to all programming problems.

https://academind.com/tutorials/functional-vs-oop-vs-procedural

5:40
 

Ian Rogers

Joined Dec 12, 2012
935
Most C programmers do without knowing it... Every time they use a library, it becomes objective.. I, myself, group aspects of code together.. A graphical device... I have low level code in one file, high level in another so the main doesn't access the low level at all.. This is encapsulation in its basic form... We all do this now..
 

nsaspook

Joined Aug 27, 2009
8,786
Most C programmers do without knowing it... Every time they use a library, it becomes objective.. I, myself, group aspects of code together.. A graphical device... I have low level code in one file, high level in another so the main doesn't access the low level at all.. This is encapsulation in its basic form... We all do this now..
That's exactly right. Most of the things that are today seen as the realm of OOP are actually common structured programming practices most of us use after years of experience. OOP languages are just a formalization of the process into systems that forces (in varying degrees per language) that structure on the programmer in the very beginning of the learning process.
 
Top