
Ask HN: How can I transition to be a systems programmer? - ginsurge
I&#x27;m a software engineer with around 10 years of experience but I&#x27;ve spent most of my time in the application space - building web applications, using languages such as Java, Scala, Javascript etc.<p>I&#x27;m really keen to move into a systems programming role where I can do things like build databases, work on middleware infrastructure etc but I&#x27;m really not sure how to make the switch or where to start.<p>There are projects like Netty and Kafka which use Java and Scala, do I need to learn C or another systems programming language?
======
davismwfl
IMO, you should learn at least C and likely C++ if systems level programming
is your goal.

That isn't to say that there aren't successful databases, queues etc written
in Java or other managed languages, but there are serious tradeoffs both ways.
Good C/C++ is safe and very performant, bad C/C++ is dangerous and can perform
poorly. Good Java/C# etc is safe and performs well with experienced hands at
the wheel, bad Java/C# is just as dangerous as bad C. People focus on memory
management, but honestly that isn't the only thing to worry about, security
holes come from lots of places other than just forgetting to deallocate memory
or doing so unexpectedly. Hence, managed languages might help protect you from
poor memory management to a degree but you can still shoot yourself in the
foot and wind up with tons of security holes etc which make your system
software worthless.

In the end it will depend on what your goals are really. C/C++ are both still
very viable languages and are still the core of most system level programming,
at least in my experience. And honestly, I wouldn't consider anyone a system
level programmer if they didn't know, at least, C, doesn't mean they are
actively working in it, but they at least know it and know the tradeoffs
between C and other options.

I have been programming C/C++ since the early 90's, my most active language in
the past 3 years has been Javascript (node.js) with C/C++ being very close
seconds. C/C++ is dominating my work right now though as more people are
wanting the raw performance and more IoT/embedded projects are out there
wanting that skill. And I frankly love C/C++. At the same time though, I will
fully admit that I am more productive for business level applications in C# or
even node.js.

------
fiedzia
You can write databases and other things in java/scala and people sometimes do
so (though often use lower level languages for more control), but to do it
efficiently you'll need deeper understanding of how whole stack works,
including (at least) how it interfaces with operating system, how memory is
organized and managed and what os and hardware can/can't do for you. I suggest
to pick some project that interests you and get familiar with how it works,
why it does so and how you could contribute. C/C++ are popular choices, though
recently I am learning rust and that brings a tons of low-level knowledge with
nice safety net (c is a language that preys on your mistakes, rust will not
let you compile them).

