4 months of being a firmware programmer
Published: 2023-04-28 16:05:00

Back in January, I transitioned from working in a high-level programming job (making apps in Unity) to a slightly more low-level job, which includes engineering ESP microcontroller firmware. Some may call it a leap of faith, because the difference is like night and day, but I felt like I needed a change and had a desire to improve my knowledge in different fields of computer engineering.

## First impressions
Coming from C#, I had little to no knowledge of C++. But being fairly proficient in C#, I felt confident about the idea of learning a whole new programming language. So it started, I found my old and dusted ESP32, which was lying around my table, and flashed my very first C++ Arduino firmware onto it. I knew some stuff about microcontrollers, as I had experimented with them a little about 4 years earlier. 

I created a few example programs, such as making the onboard LED blink every 2 seconds, or initializing a BLE (Bluetooth Low Energy) advertisement and being able to connect to it from my phone. All this was pretty exciting stuff. I felt a totally different feeling while working on this very tiny computer, contrary to developing software that runs on normal personal computers.

It felt impressive to me to be able to hold something so small and see my code running on that tiny engineering masterclass. After my "being in absolute awe" phase, it was about time to get back into reality and discover even more interesting stuff about these microcontrollers.

## Actual work
I had been interested in microcontrollers for some time prior to this work opportunity. Albeit, the job itself was really the reason why I got interested in this field of computer engineering once again.

I cannot disclose much about the job itself, except it being a firmware programming job. When I joined the company, the product had been in development for over 3 years, which meant I had a lot of catching up to do. I would lie if I said that I was not shocked by the sheer amount of code, that had already been produced by my colleagues.

Fast-forward a few weeks, my onboarding has been going on pretty well. I was getting familiar with more code every day and I was ready to get into programming new features and squashing bugs.

## Summarized feelings after 4 months
All I can say is that I thoroughly like the job and I enjoy working in this field of IT. 

The essential difference (except that it is a completely different programming language) is the environment that it is set in. Back in my old Unity and C# days, I did not really care about the code optimization or speed, as it was always running on a machine that consisted of about 16 gigabytes of RAM, which was more than enough to execute my code. 

On the other hand, when working with an ESP, you are given about 1 megabyte of RAM. That is about `16 384 times` less. Therefore, you attempt to write the most lightweight code possible, and I enjoy thinking outside of the box to achieve this ultimate goal. I also feel that this harsh environment pushes me to my limits every day, and evolves me as a programmer.

## Outlook on the future
I am looking forward to discovering more interesting pieces of information about the microcontroller world. At the same time, I want to push myself out of my comfort zone to gain more valuable experience as a programmer and a hardware engineer.

Now, I shall focus on developing my skills again. This journey has been very fun so far, and I cannot wait to see what the future brings. See you soon!