Fellow presentation and intro to your career path
Growing up in Indonesia, I was always fascinated with technology. Though my dad does not have an Engineering degree or even a high school degree, he loves to tinker. He would often take things apart, reason how it would work, and then put it all back together. Sometimes, things worked better than they did. Some other times, they broke apart as they were being taken apart. Being by his side through this process, I found learning together with him how different things work from the inside fueled my passion for technology.
Knowing that I have a passion for tech, I decided to take a career in engineering. I was unsure what kind of engineering I would like to do, but I know I want to pursue it. My interest in smartphones helped me choose a specific engineering major. I was gifted an iPhone when I was young—a computer that condensed into the palm of my hand. With the ability to download apps, you can do almost anything. Your phone can be your camera, gaming device, GPS navigation, voice recorder, flashlight, wallet, car keys, etc. Knowing there is a great deal of utility in these devices, this kind of technology has become a significant point of interest. I decided to take Electrical Engineering in college.
I did not know what things they would teach me as an Electrical Engineering student. Maybe it was due to my lack of research, but all I knew was that I would be taught things that allow me to do electronics. Turns out the Electrical Engineering field is vast. I expected that circuits and computers would be part of it, but there was much more. There were other significant areas, such as signals, communication, power, and VLSI, to say a few. This was a pleasant surprise as these areas of study are what allow us to create functional, powerful, small devices such as our smartphones. My focus within the broad field of Electrical Engineering was Embedded Systems, which requires knowledge of various aspects of Electrical Engineering to create dedicated computer systems to fulfill a specific function. I took both my bachelor's and master's in embedded systems.
My professional career started being employed in a four-person start-up. Our goal was to create a non-contact power meter. This required me to use a broad spectrum of skills within embedded systems, such as hardware integration and design, signals, power, and software. With my wide range of skills from taking a career in embedded systems, I took another job later focused as an embedded software engineer. In this article, we will go through the various career paths that come from knowing embedded systems and talk about the skills I use as an embedded software engineer.
Embedded Systems career options
Having some skills in embedded systems means having a wide range of skills from hardware, software, communication protocols, product design, etc. This skill set opens many job roles for designing and developing specialized devices and systems as everything plays together. In the career paths listed below, you will realize many overlaps between parts, specializing in a specific task or skill. Having embedded systems skills means you are a jack of all trades. The different career paths listed show how designing a complete embedded system is rarely a one-person job. Depending on the product, it might require various specialties.
- Embedded firmware/Software Engineer
Someone in this role will write, optimize, and test software on a resource and time-constraint device. This role includes writing hardware drivers and firmware and working on real-time operating systems.
- Embedded Hardware Engineer
This role focuses on the hardware side of embedded systems. Someone in this role designs, lays out, tests, and validates electrical printed circuit boards and can write simple code to validate a component.
- Embedded System Engineer
This role designs, develops, and manages the entire embedded system. They work with software engineers, hardware engineers, and the mechanical design team to create a product.
- Embedded System Test Engineer
This role is to design and test embedded systems to meet quality standards. Their part is to improve the reliability of the embedded system through collaborating with developers.
- Embedded Systems Security Engineer
Someone specializing in security may be desirable in embedded systems that do an essential function. They work with the software and hardware teams to find and patch up security flaws from hardware and software attacks.
- Automotive Embedded Engineer
This role specializes in designing embedded systems for automotive applications such as infotainment, safety features, and vehicle control. This role usually requires knowledge of automotive standards and regulations.
- IoT Engineer
This role specializes in designing embedded systems connected to the internet. This involves working with various communication protocols and cloud integration.
- Application Engineer
This role is the bridge between the customer and the engineering teams. They require a great understanding of a product and the ability to design it to meet the customer’s needs.
- VLSI Engineer
This role is focused more on the electrical engineering side of embedded systems. Someone in this role designs and creates microchips and integrated circuits. A good understanding of electrical circuits is needed to create a wide range of integrated circuits.
Main hard skills you use on daily basis in your current job
Most of the embedded development uses C. We mainly use it because it is fast, portable, and gives the programmer complete control. I first learned C at the beginning of my college career and have used it ever since. Though computers are getting faster each year, as an embedded software engineer, I want to make a memory and computation efficient programs. With C, everything that the code does is presented to the user. This makes it easy to control our program’s memory usage and figure out its computation complexity, which determines the code’s performance. One task that all embedded programmers will need to work on will be writing to specific regions in memory to control certain CPU functions and peripherals. C allows easy bit-level manipulation to perform such tasks. One of the products I’ve worked on requires me to process data coming 50,000 times a second. This is where having fast and consistent code performance is necessary.
Embedded devices today need to perform computation. One of the simplest ways is by programming a microcontroller that performs various functions depending on its input. Although not all microcontrollers are the same, most of its functionality is similar. Knowing how one microcontroller functions will make it much easier to understand other microcontrollers. Before starting to code for a specific device, learning the details of the microcontroller's capabilities is wise. This might decide whether the task is possible on such hardware and inform the programmer how to program the device effectively, making the program run more efficiently. An Arduino is a great gateway to dive into the topic of microcontrollers. It is a simple but capable microcontroller with abundant documentation to be searched for online.
Though I do not use Python for embedded programming, Python is still a valuable tool for writing scripts to test out your device or prove a concept. With the number of libraries and modules Python supports, it is easy to write basic scripts that interface through commonly used communication protocols. One personal example of using Python is reading data sent from my microcontroller. I can read, analyze, and interact with the microcontroller to validate communication protocols and how it processes data. Python also provides a way to verify various math proofs of concept before coding it into a microcontroller without being limited by variable sizes, as in C.
Many embedded systems development uses Linux as it is free, easy to customize, and versatile. An operating system such as Linux is preferred, especially when developing more complex embedded systems that require support for integration and networking. Although running an operating system such as Linux has its downsides, such as a larger memory footprint, higher power consumption, and lack of ability to handle certain real-time constraints, it does ease development and development time as it has extensive driver support and is widely tested by millions worldwide. I got started with Linux by messing around with a Raspberry Pi. It is a great tool to learn how computers, with their operating system, can control various external peripherals to perform multiple tasks.
- Version control system
With any large-scale code base, this is an integral tool to maintain and scale the code. An example of this is Git. Git makes the code manageable as it keeps track of all the code's changes over time. There are many times when I run an earlier version of the code to compare how recent changes affected the code. One crucial feature of Git is the ability to collaborate with other programmers. Each code push (an upload to the repository) is linked to a specific user. So, changes to the code base can be easily verified by others before contributing to the main code. Though each company might use a different version control system, a popular service that I got started with is GitHub. It might take a while to get used to, but many resources online can help perform some of the more complicated tasks.
Soft skills you use on daily basis in your current job
- Problem Solving
Most of the time, my job requires me to fix and squash bugs within our system. Having good problem-solving skills is necessary as it enables you to dig into the bug's root. Embedded systems are often very complex, with problems coming from various sources, such as the interaction of different software components to, even at times, the hardware. Things would appear to be working until it does not. That is why having the ability to solve problems at its root is so critical. These problem-solving skills are not a given. My problem-solving skills come from experience working on my past projects and solving bugs within them.
- Critical Thinking
Another essential skill to have is the ability to think critically. Within programming, in general, there are many situations where we are required to design and within specific requirements. This is especially the case when computer resources are not always a given. I must think outside the box and decide how to implement certain features that would work together with the rest of the system. Even though it is hard to develop critical thinking skills, designing your projects provides good practice in implementing and structuring the moving pieces together.
- Attention to Detail
The most challenging bugs to squash can often have the most straightforward fix. Tiny errors from using the wrong variable or index can lead to difficult-to-solve bugs in an embedded system. Excellent attention to detail can prevent hours of debugging as it can be caught early before a piece of code is committed. Using version control systems like Git can help catch this as it allows the programmer to double-check the changes being made. With fewer bugs, the system will be much more reliable.
- Time Management
Sometimes, the job of an embedded software engineer can get demanding. The duration of a debugging session is unpredictable. Sometimes, it can take much longer than expected; other times, there might be a much higher-priority task that needs to be dealt with instead. As an embedded software engineer, you will need to manage your work and be able to switch contexts when it is necessary. Thinking ahead and preparing specific tasks when time allows will help free up sometimes when a sudden high-priority job arises. Doing so helps to deliver projects on time.
Your personal path
Even though many people did not get a job that they imagined themselves working at, I was fortunate enough to land one aligned with my interests and studies. The job searching process requires some luck and perseverance. My career path started with a rocky start. When all companies struggled to handle the coronavirus pandemic, it was my time to start my career path as a fresh graduate from graduate school. Aside from the frustration of being stuck at home, I was presented with the challenge of doing a job search and applying to companies that became more reserved for who they would hire.
Each day, I would spend my afternoon looking for jobs that would suit me in several job portals such as LinkedIn and Indeed. I made it a goal to apply to at least one company daily, with each application requiring a tailored resume and cover letter. As each day went by, I expanded my search, applying to jobs further away than where I was located and may only fit my profile partially. This went on for about a half a year.
Of all the applications I applied for and sent out, only a handful got back saying they found a more suited applicant. It was an experience that was not easy emotionally and mentally. It was very easy to think that I was not good enough, and the fear of the future gave me anxiety. I am thankful for the friends and family members who encouraged and supported me during those times. Their support gave me the strength to persevere until the end.
Thankfully, through a submission of my application to an unknown company that is based almost on the other side of the country, I was contacted back for an interview. This company was a four-person start-up that wanted to bring up an idea from a research paper to the market. Thankfully enough, my experience working on a project under my professor from college brought a lot of appeal. Not only that but one of the start-up's founders worked with my professor when he was teaching at the university.
This unexpected connection landed me a Job that uses all my knowledge of embedded systems from all my class work and projects I was working on. Although the work was demanding, the daily collaboration with my small team enriched my embedded hardware and software knowledge. I am proud of how far we got and the accomplishments we reached. Unfortunately, things did not last, as we were struggling with funding, leading me to get back to the job market, but now armed with many valuable skills from working in a start-up.
Even though my current job now focuses more on the software, the knowledge of working on the hardware side of embedded proves to be valuable. It allowed me to understand concepts and the unique tricks used due to the hardware's limitations. It also made it easy to be familiar with the hardware that we are currently working on.
Although my story might be unique compared to others, I hope that my experience navigating the job searching process and my first job experience could encourage those starting their careers. For most people, the process will not be easy, but with continued perseverance, valuable support from others, and a bit of luck, I hope the doors will open, leading to a fulfilling career that you will learn to love.
What would you tell your younger you regarding building your current career?
Looking back, I would want to let my younger self know a couple of things. One of which is to be bold and start personal projects. During my college years, I was always hesitant to start a personal project with thoughts of it being a waste of money or the fear of being unable to finish it. I could only wonder what kind of experience and enjoyment I would have gained if I were to tackle and work on those personal projects. As someone in the embedded systems field, hands-on experience is precious. It is usually only through those experiences that teach us valuable skills such as critical thinking and problem-solving and adding to our hard skills.
I would also want to let my younger self know to value the friends and people I meet along the way. If it weren’t for my embedded systems advisor allowing me to be involved in some of his projects, I would not have found the opportunity as unique as my first full-time job, which gave me a good set of skills for my professional career. As often as people say it, there are some truths about the importance of networking.
Final tips and insights
I hope this article gave you an idea of what pursuing a career within embedded systems would be like. Embedded systems is such a broad field that pursuing different tracks means having different focuses. Everyone’s career path will look unique, as my career path differs from others. The experience that we go through shapes our career path. We might have childhood experiences that made us pursue specific interests, we might have experience working in certain jobs that draw us into or drive us away from particular industries, we might enroll in specific coursework that makes us excited about a particular topic, or we might meet certain people that enabled us to take various opportunities in our career. But when you find a path, you want to pursue, don’t hold back but follow it with all you have. Take upon yourself exciting projects that will make you learn more and keep yourself excited about the field.