Ask HN: How can I transition to be a systems programmer?
I'm a software engineer with around 10 years of experience but I've spent most of my time in the application space - building web applications, using languages such as Java, Scala, Javascript etc.
I'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'm really not sure how to make the switch or where to start.
There are projects like Netty and Kafka which use Java and Scala, do I need to learn C or another systems programming language?
2 comments
[ 3.4 ms ] story [ 13.8 ms ] threadThat 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.