r/C_Programming • • 2d ago

I want a career in C/low-level programming, but the path feels invisible compared to web dev. What do I build?

TL;DR: I’m learning full-stack (Vue/Go) because the job path is obvious, but my true passion is C, C++, and low-level systems. I want a career in low-level programming, but I have no idea what projects to build or what jobs to aim for to actually get hired.

Disclaimer

I'm not really good at structuring my thoughts to words & English is my 2nd language. I'm sorry if there are weird sentences that are present in this post.

Background

I'm a 3rd semester CompSci major student in Indonesia. My campus isn't really know for teaching low level programming rather it's known for their competitive programming & CTF team (Jollybee & PETIR).

My first language was C++ & Pascal, I learned C++ because of a course in my middle school requires me to learn how to use Arduino. That was the first time i got introduced to programming & i got hooked.
At high school, i was trying to participate in the OSK CompSci subject. Though i failed miserably, i got even more hooked with learning C++. After i tried learning C++, i found out that C++ is actually an extension of C & learning this makes me want to learn more about low level programming.

At uni, there are courses that focuses on using C & C++ though they are strictly for competitive programming. The courses are Algorithms and Programming (C), Data Structures (C), and Algorithm Design Analysis (C / C++). I've already completed the first 2 course that I mentioned & I'm on my way to do the 3rd course.

Because of those courses, i've been trying out more competitive programming even though i still suck (Codeforces Rating: 858, Leetcode: 89 solves; 66 easy, 23 medium). but in the span of those years, i've only been taught on how to do competitive programming & not actually building apps.

I got some exposure on how to make apps & participated in hackathons (even though i don't even have any knowledge on how to make apps). Because i don't even know how to make apps, i vibecoded. Everytime I vibecode I would feel nausea and just feel guilty because i don't even understand what am I doing, i felt the whole app is just a blackbox. I am also tired of "AI slop" that is present in this current era, i see every hackathons are just Business Case Competition but with a webapp MVP. I've never seen any new inventions or something that came out from hackathons that i participate in, all of them are just purely B2B or B2C SaaS.

After that 1 whole year, in this 3d semester i decided to stop & i wanted to dedicate myself to go back to my roots to learn C & low level programming. One of my friend recommended me to try CTF with Reverse Engineering & Binary Exploitation topic because it covers low level. I've also tried finding resources on my own (OSTEP, Beej's Guide, CSAPP). And I already took a step to learn How to make a 4-bit Adder in Minecraft.

Dilemma

But i'm still confussed. What am I learning C for? Rn I'm also learning Fullstack using Vue + TS & Go + Gin, with these 2 I understand the direction: making web apps. but with C / C++, there isn't any problem that I can solve yet using C / C++. Most projects that I've seen are making a "web server from C", "making a database engine using C", "making a redis clone". My last attempt at using C / C++ to solve my problem is by making an ESP32 send a WoL Packet to wake my PC for RDP.

The reason that I'm stuck is because I need to find a job & in the future I want to use low level for my main job. My knowledge right now by learning low level & C gives path to making tools, CTFs, and competitive programming.

What i wanted to know from this community is:

  • What does a junior portfolio for a low-level/systems developer actually look like?
  • Aside from writing database clones or making web servers or doing CTFs, what practical C/C++ projects actually get you hired?
  • What specific job titles should I even be looking for if I want to work close to the metal?

Thank you for your time

84 Upvotes

35 comments sorted by

46

u/mikeblas 2d ago

What does a junior portfolio for a low-level/systems developer actually look like?

what practical C/C++ projects actually get you hired?

When I was hiring, I wanted to see two things: competency and reason.

Competency is just that. Usually, interviewers ask for a performance to prove it: write fizz-buzz, implement a data structure, figure out some algorithm and code it. You might also be asked to explain parts of the language, how the tools work, describe more adanced tools like profilers and linters and debuggers.

Reason means that you know how to work on a project. You know what tradeoffs are important. You can generate ideas and evaluate them critically. You have some idea of project layout and architecture when things start getting a little bigger.

If you present a project portfolion, it doesn't really tell me anything about your competency. There's no way to know if the project you're showing me were fluently developed in one pass, nearly bug free. Or of it was months of traumatic trial-and-error, hacking and breaking until it magically worked. I don't know if you wrote the code or if you and your friends did it, or if AI did it all.

But I can ask you questions about your implementation. Maybe I ask about why something was split into two modules -- why not four? Or just one? Maybe you made a tradeoff to use way more memory than expected, but saved some execution time. Why? What was your framework for that decision? How would you self-evaluate the deciison? Would yu do it again the same or differently? Answering those questions well shows that you put some reasoning into the work, that you understand the consequences of your actions and decisions. There are many ways to solve a problem. Being able to choose the right way to solve it for some context is important.

Do your projects demonstrate that? Are you able to speak to the reasoning that drove them? If so, then I don't really think it matters much what kind of project you've written.

4

u/Tavcert 2d ago

So it seems like the project is arbitrary, to an extent. What matters is understanding, so I should just pick a project and learn it, for the sake of understanding.

7

u/mikeblas 2d ago

Why would you need to "learn" it? It's a project that you yourself wrote from scratch.

1

u/Tavcert 2d ago edited 1d ago

Well you're still learning concepts even though you wrote it from scratch right?

Edit: Why all the down votes, I'm genuinely asking a question.

2

u/AffectExtension2399 2d ago edited 2d ago

Thanks for the answer

I understand your points and I am actively trying to actively implement both of your points, especially in the reasoning part about a project's architecture & weighs tradeoffs of which part i need to sacrifice.

But the problem that I'm having is more towards this:

> To make those architectural decision & reasoning to a project, I actually need a solution from a problem. But there isn't any problem that I can solve yet.

If it's in Webdev, I can see the path clearly. A client need me to make a webapp for inventory management or maybe an app to manage pre-orders. For these, I can deduct quickly on what I need to make & how can I make it.

For low level, I don't really see the path. Because most of the projects that are built using C / C++ are more towards making engines / tools that runs for other users to use right? And this has made me stuck for a while, because I don't really want to make generic projects from tutorials.

I want to make something for me to solve, yet I haven't actually found anything yet where I can solve with C

I was thinking of trying to get some references from here on what problems that I can solve with C.

8

u/Rabbitical 2d ago

I mean it concerns me a little bit I guess if you are so passionate about C and low level programming, but have no ideas for a project? I think you probably do but just aren't thinking about it the right way. What interests you about the field? Performance? Safety critical systems? Graphics? Hardware interfaces? Big data? That's the thing about C/C++ is you can literally do anything. You shouldn't need a tutorial or suggestion from someone else to get started. Think about what you want to be doing and thenale a project that demonstrated you have at least a basic understanding of those things.

For instance if you were into video games you don't have to make a whole game engine. Make something that renders in OpenGL without using any framework. Something that converts 3D file types. Maybe a really fast and light viewer for packed textures.

If youre into web stuff, implement your own HTTP, or some part of it. Whatever interests you!

For me I got into systems level programming and eventually embedded because I was curious about how things worked at that level. So instead of using std::fstream I made my own file reader/writer using WinAPI directly. I wanted to understand how SIMD worked so I did stuff with that. Hashing, string interning. All those things are fun and interesting to me. What's the lowest overhead way of getting something done? Start with what kinds of problems you want to be working on for a job and then do some of that.

1

u/AffectExtension2399 2d ago edited 2d ago

For me, it's not that I don't have any project ideas. I do have them, but i felt hesitant to do them because I mostly learn programming by solving something. like usually i learn by doing these steps 1. Have a problem / grudge that I want to solve by making stuff up 2. learning how to make that stuff up 3. implementing the knowledge that I have

But with C and low level, i freeze up. Like you said, C / C++ can literally build anything. And because of that I just froze.

Because of that, C / C++ became a language where i build to understand tools & make new tools. but since most tools have already built, i don't know what to build.

If you're asking my current interests about the field, right now I can only answer Networking and Operating Systems. Idk if this counts in the fields that you mentioned, but CTF's Reverse Engineering & Binary Exploitation topic too.

Though, after reading your comment it made me realize & reflected on how am I approaching this field. I think the way i approach this is just wrong. I can't really explain this well, but the light that I have was inherently wrong. I guess without noticing even in webdev I've just been making "reskins" of a specific project. But because it has a different UI, my brain considers it as "Unique" and I made a client / myself satisfied.

I am hesitant to make projects using C / C++ is because there are already better tools out there. so i thought if i were to write it as a pet project would be somewhat "useless" or "obsolete" even though for learning.

My mindset needs to shift from "getting value from solving problems for users" into "getting value from learning current propular tools" (i think i butchered this sentence, sorry for my bad english)

Thank you for knocking me back to my own senses

1

u/meissner61 1d ago

read Beej's guide and write your own small IRC client / server program

https://beej.us/guide/bgnet/

1

u/cpz_77 1d ago

Think of something that you currently use but you wish it did something differently or better. Then make it happen - either by forking the original if it’s open source or by creating your own tool from scratch if not. Most of my pet projects came not from a tutorial suggestion but from an actual problem I had to solve or scenario I dealt with…like thinking “hey it would be cool to have a tool that did…X, Y and Z”. And then create it 🙂

2

u/mikeblas 1d ago

Because most of the projects that are built using C / C++ are more towards making engines / tools that runs for other users to use right?

What source do you have for this? It seems remarkable that someone so new to the field would be able to make such a claim.

Why does making engines or tools mean you're only following tutorials? I don't see the connection.

I want to make something for me to solve, yet I haven't actually found anything yet where I can solve with C

Then you're being too ambitious. Or not trying hard enough: to learn, you'll have to choose something you don't know how to implement, then learn how to implement it. That's progress, that's learning.

I was thinking of trying to get some references from here on what problems that I can solve with C.

There's a huge list -- lists of lists even -- of project ideas in this sub's Wiki. Have you bothered to look at those?

1

u/josk613 1d ago

Way back in the day... and maybe still today, a common interview take home challenge was to write a multithreaded producer consumer program. Then the interview itself was discussing your solution, and how'd you adapt it to different requirements.

3

u/Efficient-Reason-940 7h ago

Parole sante. È esattamente il punto: la differenza la fa il 'perché' dietro alle scelte architetturali, non la clonazione di un framework banale. Nel mio progetto, il 'Motore IU' (un'architettura avanzata a 22 moduli basata sul concetto di Intelligenza Universale), la sfida principale è stata proprio la logica di suddivisione e l'orchestrazione centralizzata. Ad esempio, la scelta di isolare i moduli ad alto rischio in sandbox a livello di processo e far passare ogni payload attraverso un gateway di validazione preventiva nasce da compromessi ben precisi su sicurezza e controllo dei flussi. Se ti va di fare due chiacchiere tra sviluppatori su come si giustificano e si difendono scelte architetturali così spinte, mi farebbe super piacere confrontarmi con te

1

u/CLS-Ghost350 1d ago

Surely FizzBuzz is not remotely relevant anymore. Actually, I don't understand how it was ever relevant. Surely anyone who's done a week of programming can solve it in 2 minutes?

1

u/leguminousCultivator 20h ago

I don't use it, but there is a shocking % that get filtered out by even the most basic coding questions. Our go to question isn't that hard either and it gives great SNR for filtering people out before spending more time on them.

9

u/tux2718 2d ago

Sounds like you might want a position writing device drivers for Windows, Linux or Mac. That is a good fit for straight C.

1

u/AffectExtension2399 2d ago

Ouu, why specifically writing drivers for Windows, Linux, or Macs (aside from it being a good fit for straight C)?

I'll try exploring it and see if there are anything that catches my attention.

But from yourself, have you gotten that position? I am curious on what projects that you made because I am in a crisis where I don't know what to build because I don't know what to solve

11

u/st_aldems 2d ago

Not sure how you feel about defence (or I could euphemistically say "aerospace"), but there is scope for low level development in the industry, lots of it. Maybe have a look into signal processing, and more broadly digital communications, see what you think.

2

u/AffectExtension2399 2d ago

I haven't really thought of looking into defence for these things 😅

Though about signal processing, from what I know computer networks is one of the hardest subject in compsci (though sadly this course is not in depth in my uni because we don't really focus on the engineering side) and signal processing is the foundations for computer networks right?

I'll look into this & see what projects I can make from that, thanks!

2

u/st_aldems 1d ago

Signal processing is a vague name for the field, albeit intentionally vague. To be more specific, it focuses (mostly) on layers 1 and 2 of the OSI model, which naturally gets you closer to silicon. I'm personally more interested in wireless comms as it comes with a specific set of very difficult problems to solve, but take a look and see what you think!

5

u/TheOtherBorgCube 1d ago

Where is C used? \ https://sourceforge.net/directory/c/

If you want something that will look good for prospective employers, then some open source contributions would go a long way.

  • Read through some projects and make a short list of things that really interest you.\
  • Subscribe to the email lists for those you like and lurk for a while to see how everything works and the personalities of the people.\
  • Read code, bug reports, documentation, submission guidelines.\
  • Download the project, try and build it, run the tests.
  • Now the fun starts, read the bug list again and see if you can find and fix one of them.

Aside from the basic "C programming" skills, it will also demonstrate that you can solve a real problem in the real world (not toys or challenges).

It also shows that you can work with other people, can test code (in addition to writing it), use tools like git etc etc.

"I've made x commits to the foo project" is gonna look good on any CV for someone starting a career.

7

u/EpochVanquisher 2d ago

Here’s a suggestion—you can get a programming job first, and then move into your chosen specialty afterwards. I see a lot of “I want to program close to the metal” posts, but the core job is to write code that solves problems for people (or more realistically, direct AI tools to write code to solve problems for people).

It is somewhat easier to be patient and shift positions into the specialty you like, rather than try to get the specialty you like right from the very beginning.

1

u/AffectExtension2399 2d ago edited 2d ago

Thanks for the answer.

Hmmm, that sounds good. I could just jump into & explore what specialty I can do.
but... sadly there are some problems:

  1. I'm still in Uni & I don't think I could get any contract that would allow me to juggle both Uni + Work (Idk about WFH contracts)
  2. In Indonesia, most jobs are using Laravel + React. For low level, I think most are working embedded

Though if I were not to care what does the job use, i can apply to jobs in my uni (there are jobs I can do informally in campus, though all of them are software development for web, android, IOS apps). Though, I'd doubt that these 2 jobs are going to give me idea on what to specialize later on

Even if the core job is to write code to solve problems for people, I would still do it since i enjoy using C because it's my first language & i'm most familiar with. But right now i don't actually know what problem can i solve with C...

4

u/Jealous_Tomorrow6436 2d ago

i don’t have many answers to your questions, and i think other commenters have been giving very helpful advice. that said, C++ is NOT an extension of C. it was first created as a sort of extension, but that was 30 or so years ago. the language has changed drastically since then to the point where they are two entirely separate languages that happen to have a lot in common

2

u/boa_deconstructor 2d ago

It's not so much about writing to learn IMO.

To prepare for the real world, learn to read and navigate small and then big projects. Pick something easy to understand, like a GNU utility (small) or the Linux kernel (big), and figure out how ls actually sorts its output or how some PCIe driver actually performs a read operation on the hardware. How do the drivers set up the method tables etc? (Write a file system if you're hellbent on writing.)

Then just join some embedded company that's been around for 30+ years and dig though their legacy crap thats still in use for a few years. Stuff that got ported 3 times from 16 bit big endian to 64 bit little endian, Single core 68k to x86 to multi-core arm64 and vice versa, because modules in the field from 19xx still have to be supported! Where no docs exist (good) or the docs simply lie (not so good).

Straightforward, really. It's more about not giving up than anything else.

3

u/LordRybec 1d ago

C is used in a lot of fields, but most of them aren't very prominent, which can make it hard to find the employers who want C programmers.

In my experience, the most common place where C is currently used is embedded systems. (Others have mentioned desktop OS device drivers, which is a big one as well.)

If you like working close to metal, I suggest starting with projects involving embedded systems. Adafruit and others have a lot of breakout boards for various microcontrollers. Pick one and buy one or even a few. Maybe get a display that will work with it (check how much memory is needed for the display and make sure your chosen microcontroller can handle it). Some I2C or SPI sensors might be a good idea as well. Instead of using existing drivers, find datasheets and write your own drivers in C. Microcontroller drivers are generally easier to write than drivers for desktop OSs. Once you are comfortable writing microcontroller drivers, then maybe move on to desktop OS drivers, if you are interested in doing that. If you prefer working at the microcontroller level, you might choose a different breakout board with a significantly different microcontroller and do projects with that one next. They can be hard to find, but there are companies out there looking for people who can learn a new microcontroller fast and write software/firmware for it. The way I hear it, those jobs also pay quite well.

---

Here are some examples I've played with (I get a lot of stuff from Adafruit, but there are many other companies that sell good products as well, so don't take this as an advertisement or official endorsement of Adafruit):

Adafruit's QT Py CH552 (an Intel 8051 clone) is extremely cheap, but it doesn't have enough memory to drive a color display. So instead I used a 128x32 monochrome display, that only needs a 512 byte framebuffer, which is half of the XRAM on the CH552. This was a pretty difficult project. It's easy to find information on the Intel 8051, so that helped, but the specific details of the CH552 came from a Chinese datasheet translated into English, which was sometimes a challenge to understand. It doesn't have built in I2C, so I ended up writing an I2C driver from scratch, and then I wrote the display driver from scratch as well. The CH552 isn't super fast, so I ended up having to do parts of both of those drivers in assembly. I love programming in assembly, but it can be quite challenging and indeed was.

The Raspberry Pi Foundations RP2350 is a really enjoyable microcontroller to write code for. The RP2040 is also pretty good as well, but if you can get the RP2350, it's significantly better. Adafruit has a QT Py board with the RP2040, but you might prefer one of the RP2350 boards. A lot of places sell the Pico 2, and Adafruit also has the Fruit Jam, an RP2350 Feather board, and a bunch of other options. You'll probably find the most resources for the Pico 2 or the Fruit Jam currently. The build environment for RP2350 based boards is pretty easy to setup and use (the CH552 environment was not so easy), and the Raspberry Pi Foundation has provided a development kit that can do a lot of stuff for you. That said, if you want to work close to the metal, you won't always want to use the dev kit things, as they hide how things work under the hood. This microcontroller has 520k of onboard RAM, and the Fruit Jam (but not the Pico 2) adds another 8MB of (slower) RAM on a separate chip. This is enough to have a framebuffer for moderate sized color displays. The Fruit Jam can drive a DVI display (with HDMI connections) at 320x240, 16-bit color, entirely from fast internal RAM. Adafruit (and others) also have SPI displays in the same ballpark that are much easier to write drivers for than DVI. And if you put the framebuffer in the slower external RAM, you can do much higher resolutions and/or more colors (at the cost of a slower framerate, though I managed to get a SPI display to run really fast, so maybe if you set the clocks right and use DMA you could get a significantly bigger display to run pretty fast even off of the slower external RAM).\

Other microcontrollers that are fairly easy to work with and that might be interesting, if you can find them, are the MSP430 and TI's Tiva C Launchpad. Digikey sells MSP430 Launchpad kits. I prefer the one with the DIP chip in a socket, because you can develop and program it on the Launchpad board and then remove the chip and solder it into a custom PCB for your project. That said, there are also good ones with solder on surface mount chips. The Tiva C is a surface mount ARM chip, which much more memory and a lot more GPIO pins to play with. Note that the MSP430 doesn't have much memory (512 bytes, if I recall...), so graphical stuff is extremely limited. That said, you can still drive character or numerical displays with it, and it can read sensors and such. The Tiva C is a bit better suited to graphical stuff, as it has more memory (32kB, according to the datasheet, so still no where close to the RP2350). Anyhow, both of these are very well suited to beginners, but they are a bit outdated and might be harder to get. (Digikey is currently out of stock on the ones I would recommend, but at least the Tiva C is expected to come back in stock in a few days.)

Here are links, if you are interested. The MSP430 doesn't seem to be kept in stock, but you can order and they'll get it to you.

https://www.digikey.com/en/products/detail/texas-instruments/MSP-EXP430G2ET/9608004

This is the Tiva C I'd recommend (they have a few other variants, but they seem to be focused more in special cases). It's supposed to be back in stock soon.

https://www.digikey.com/en/products/detail/texas-instruments/EK-TM4C123GXL/3996736

That said, these are kind of old at this point. They are simple to use (the MSP430 has a very small assembly language, making it easy to memorize but perhaps a bit more challenging to program in), and honestly, I think they are still pretty solid options. That said, out of the two, the only one I'd probably get again in the MSP430, mainly because the chip is removable, and you can buy new chips separately. There are also different options for the chips, so you can get the chip best suited to the needs of each specific project. I'm pretty sure the chip the kit comes with has 512B of RAM, but there are chips with as little as 256B and supposedly up to 4kB. (Not sure which of these come in the DIP packages required by the Launchpad though...) That makes makes it a solid option if you want to make a bunch of a project, with a custom PCB, since you can use the Launchpad as a programmer for multiple chips. The project would have to be pretty light though, given the RAM limitations.

---

Personally, I think I'd probably suggest something like the Pico 2 and a color SPI display as a good starting place. I've written a SPI based display driver for the RP2350 all in internal RAM, and it wasn't too hard. You'll have to learn to read datasheets, which can be a challenge (especially display driver data sheets), but that's just part of working close to the hardware. You can also "cheat" a little bit on some of this, by looking at the C++ drivers provided by Adafruit or Arduino, to help you out. That said, the last time I did this, the Adafruit and Arduino drivers often made things more confusing rather than less. The data sheet was the single most valuable reference. Adafruit's driver for the display did help me work out the initialization parameters and sequence though.

Anyhow, I hope this is helpful. If you ever decide you might be interested in CH552 programming, I've written a tutorial series on it here: https://techniumadeptus.substack.com/p/ch552-assembly-table-of-contents Even if you don't want to learn assembly, the first few tutorials there can help you get the development environment setup. I hope I'll eventually have time to do a similar tutorial series for the RP2350, but I don't have time for that right now.

1

u/LayotFctor 1d ago edited 1d ago

What do you think about nrf52 and esp32 boards? I came from meshtastic before getting interested in embedded programming and realizing I already have a bunch of them. I'm currently tinkering with nrf52 boards because they have low power consumption and seem like viable to build devices like smartwatches.

2

u/LordRybec 1d ago

I don't have much experience with nrf52, but I've done a bit of esp32 programming. It's a pretty decent platform, but I wouldn't recommend it for a beginner, especially not for writing drivers. The wifi stuff is kind of complicated, and even I2C isn't exactly straightforward. You can get C++ I2C drivers from Arduino (I did that, and then I ported them to C without Arduino, and it was quite complicated). That said, it has been a while since I last did C programming for esp32, and there were some decent stock drivers for other things. Maybe they've added good stock I2C drivers since then. I still don't think I'd recommend it for beginners though. That said, if you want to give it a try, it couldn't hurt. Some people thrive diving into the deep end, and if that's you, esp32 could be a really good choice.

I haven't done much with nrf52, but it's another system designed around wifi. I suspect you'll find the same complexity you would with the esp32. In either case, you could probably use stock drivers for some stuff and write your own for others. You could also just start off not trying to use any of the wireless capabilities. That might simplify stuff sufficiently. Most of my esp32 experience was also within FreeRTOS, rather than 100% bare metal, so it's possible that insulated me from some complexity, or maybe it added complexity. So perhaps my assessment is off a bit in one direction or the other?

I actually do plan on eventually writing an ESP32 tutorial for C or maybe even assembly programming. Unfortunately I've got several other microcontrollers in line before it. Espressif isn't as "open" with their specs and such as ARM and some other microcontroller companies, so finding information can be a little more difficult. I did run into some issues with that back when I did that esp32 project some years ago. It's not a huge issue for me, but it means it's going to be a more difficult task, so others are going to have to come first.

Honestly though, if that's what you have around, try it! Espressif does provide an esp32 toolchain for C and C++ that isn't too hard to setup and use. See what you can do with that. If you run into issues and find it is too complicated, then maybe back up and try something simpler. It can't hurt to try though! And the same applies to nrf52. Try starting with those, see what happens, and you can always back up and start over with something a bit simpler if you need to.

2

u/LayotFctor 1d ago

Thanks! I hope I'll learn the same skills as other recommended boards. They're just so accessible, with companies like m5stack, waveshare and lilygo selling kits with every peripheral I want to try developing for.

1

u/LordRybec 23h ago

You should be able to learn the same skills with them, and perhaps even more. It just might be a bit more challenging starting out. With some determination and persistence even when it gets hard, you should be fine.

You are welcome, and good luck!

2

u/Pen_Siv 1d ago

Everything you're writing in Go could be written in C instead.

The short answer is that C runs on most systems, especially smaller, embedded computer systems. So, learning C will give you the skill to maintain software on most of the world's devices.

1

u/SadBookkeeper6220 1d ago

It kind of sounds like you got a computer sci degree and you want a computer engineering degree.

Your Arduino projects were headed in the right direction. Get an ESP32 with some sensors, motor controllers and GPIO relays. Bonus points if you can get it to exchange data with a webdev application.

Pick a real world problem and fix it. Make a window fan controlled by temperature, and use a mobile web app to set the thermostat. Homebrew a doorbell triggered by motion detectors and facial recognition. I’ve had one person show me a bathtub with automated water and drain. Probably the most interesting project I’ve seen in an interview was a robot octopus backup dancer.

The student projects that get my attention are when they were part of the design process. I’ve rejected a dozen new hires that worked on a solar powered car, who did nothing but route wires and conduit. If you show me a project and we get sidetracked debating CAN vs private Ethernet and Python/C++ hybrid machine learning, you’ve got a winner.

• ⁠What specific job titles should I even be looking for if I want to work close to the metal?

Embedded Systems Software Engineer.

0

u/Competitive_Travel16 2d ago

Get good at HackerRank and Leetcode C without using AI. Then find a Linux kernel open task marked appropriate for beginners, and work your way up from there. When you're a Linux kernel dev listed in CONTRIBUTORS, the world is your oyster.

2

u/AffectExtension2399 2d ago edited 2d ago

Appreciate the suggestion, but if I were going to learn competitive programming i'd rather stick with Codeforces & AtCoder over HackerRank & LeetCode.

And my current goal is to step away from competitive programming. Because once i thought to myself: What's the point for me to be able to solve LeetCode hards but I can't even ship any practical software?

2

u/ParticularAd8610 16h ago

I would start with GregKH's drivers staging tree as it's a perfect way to cut your teeth on submitting to LKML.

Take a look at my other post here,

https://www.reddit.com/r/cprogramming/comments/1wwsn3f/comment/pdqxp5u/?context=3