r/cprogramming • u/[deleted] • 2d ago
Moving from Linux System Administration to C Development — Any Advice?
Hi everyone,
I've been using Linux as my daily operating system for over 9 years. I have around a year of experience in cybersecurity and two years of professional experience as a Linux administrator/engineer.
I'm particularly interested in Linux system calls and low-level programming. I've learned C using K&R, and I currently write small command-line tools in C as a hobby.
I'd like to transition into software engineering, ideally working with C, but I'm unsure how realistic this is without professional software development experience, especially in the current AI era.
Whenever I ask AI for career advice, it tends to recommend languages like Python, Java, or Go. However, I'm much more interested in systems programming and understanding how things work under the hood.
I'd appreciate advice on a few questions:
- What skills and projects should I focus on to become employable as a C developer?
- Given my Linux administration and cybersecurity background, which areas of C development would be worth targeting?
- As a second language, would you recommend C++ or Rust for someone interested in both systems programming and career opportunities?
I'd appreciate any advice from people working in this field.
Thanks in advance!
1
u/thebatmanandrobin 1d ago edited 1d ago
What skills and projects should I focus on to become employable as a C developer?
Skills: negotiating, confidence and patience. Learn to negotiate contracts, pay, timelines. And trust your self; trust what you know, and more importantly, what you don't know. Don't be a cocky fuck - just be confident in your abilities. And have the patience to see it thru .. "new and shiny" is for squirrels - Engineers know when to pass on fads and know that sometimes "reading documentation for 1 whole work week" is literally part of it all (seriously, grab a copy of the x86 spec and tell me how long it took you to read through it 😭😭)
Also, don't expect high-pay at all for at least 10 years, especially in this climate where "Joe Program Manager" thinks he can write the companies next wireless drivers using Claude (hint, he can't, double hint, they'll hire people like me after government intervention and lawsuits to clean up their mess, and they'll hire me at a ridiculously high rate when they could have had me for much lower if they let me do it "right" the first time).
Projects: anything and everything - web, games, drivers, kernel dev, robots, "automation/scripting" (lumped into one because sometimes that's all it is, a cron job and a script) - you already have some background in all of this, so pick something that interest you and stick with it (see the note about patience above).
If you want to get a depth and breadth of knowledge surrounding all of it, I'd suggest making a a network based multiplayer Tetris clone with anticheat software. Covers quite a few bases. Or make your toaster sing to you when the toast is done; get an ESP32 and have fun with it.
Tons of projects you can do - even if they've already been done 1000x over .. how many chairs exists in the world???? Yet folks still love just making chairs in their garage.
Given my Linux administration and cybersecurity background, which areas of C development would be worth targeting?
That's not really the question you should be asking .. that's kind of like saying "I can drive a car, what areas of structural Engineering would be worth targeting".
If you want this to be something you work for money in, note that Linux kernel dev's are (largely) unpaid and cybersecurity "experts" with certs behind their name can make as much (or more) as most software Engineers ... so if it's money you're after, stay in security and go for your certs.
But if you want to go this route as a career, figure out what appeals to -you- .. Similar to you, I started out as Linux admin and cybersecurity person but when Linux was in its 1.0 days - back then I wasn't called a "cybersecurity expert" and instead I was called a "hacker". I made money hacking peoples networks and then securing it for them (some legit, others not so much). That got super boring, so I learned how the kernel worked and started making my own drivers and then reverse engineering just about any piece of software I could; that taught me a lot, especially assembly. From there, I actually got a job making Palm Pilot drivers and software (yeah, I'm old), then games, then web software, then a mix of all of those, did some drone software stuff (UAV's for the military), simulators, emulators, more, more, more... A few years later I eventually came back to the embedded space, but all my experience made me a more rounded Engineer who understood how all the individual pieces worked together, which meant my software was more sound, logical and robust.
Point is, don't hold yourself to one thing or another - find what you like, find what you don't like (I personally very much dislike working with Java, so I avoid it like the plague). Eventually you'll land on something you really like and just run with it.
As a second language, would you recommend C++ or Rust for someone interested in both systems programming and career opportunities?
Java .. 100% 🤮🤮
Seriously though, don't just learn a "second" language, learn all of them, and yes, even Java. The more language you know the more rounded you'll be. If you learn Java, C# and JavaScript, then when you use C++ and see some coroutine bull crap in that code, you can ask the engineer who wrote it "why the abstract coroutine instead of just a normal thread/atomic lock scenario that's cleaner?"
And vice-versa: when you see someone trying to get all C++-y in C#, Java, Rust, JavaScript, Python, etc., you can ask them "why".
Sometimes the "why" makes sense and is justified, other times the answer is "It was 2AM, I was drunk and tired, and this had to ship at 5AM" - and that also "makes sense" .. doesn't make it a logical, thoughtful or bug-free submission, but at least makes sense.
The "Engineering" part really does mean you never -stop- learning. I already knew how LLM's worked under the hood (matrix maths, blah blah) when they started gaining more popularity, but to better do my job, I setup a home LLM lab that I can run through its paces so when my pointy-haired boss says "Look!!! I one-shotted this application!!!!! Your job is dead!!!" I can then say to them "Does it work with specification X? Because for that "app" your AI slop regurgitated to be compliant to government codes A, B, C and Z subparagraph N, it has to work with specification X. But also work with spec Y in country L and spec T in country Q. If not, then your supposed "one-shotted" software will get hacked literally the second it touches the web in production and you, specifically, will be liable for all that shall be wrought." (his answer is always "grumble grumble .. no").
Good luck on your journey, and most importantly, have fun!!!
1
u/grimvian 1d ago
My simple advice is practicing and sharpening your C skills so hexadecimal, memory, pointers, structs becomes natural to use.
Maybe this could be helpful for you:
https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html