HACKER Q&A
📣 3a2d29

Switching from Java Back end dev to systems programming dev?


Hello all,

Curious how hard it is to move from a generic web backend engineering job to a systems programming job.

I am currently a junior with 1.5 YOE. I took a few cs classes in C++ and have messed around on GitHub with C and Rust.

I enjoyed the extra challenge of memory management and thinking more of performance / memory safety. While I want to try and program an emulator or some sort of systems project (recommendations welcome / textbooks to read welcome) before I definitely decide to move into that area, I was curious how hard it is.

I’m sure companies aren’t thrilled to hire juniors with no systems or embedded experience. Would it be better to move to a company with low-level programming teams as a Java dev and then transfer to those teams? (Current employer does basically no low level work anywhere on any team)


  👤 anyfoo Accepted Answer ✓
I don't have a clear path for you, but my feeling is that you might already have developed a taste for systems programming, and Java backend development is not going to keep you happy. Of course I could be totally wrong, but it sounds a little bit like you care about being close to the metal and the challenges it presents, while most "Java backend" jobs will keep you working on a very high level, often programming CRUD apps and other "business logic" that may be interesting from a business perspective, but not necessarily from a programming one.

Definitely a good idea to try writing an emulator, though. Writing a Game Boy emulator is popular: It's just at the right intersection to be a simple enough architecture to get results very quickly, but with enough intricacies if you dive deeper to keep it interesting.


👤 avl999
The term "Systems Programming" is pretty wide and encompasses everything from databases and distributed systems which can and are written in Java (eg Cassandra, Zookeeper, Kafka) to really low level embedded devices with only a few kb of memory.

I am not sure if you are committed to the later but for the former you can do that in Java by the finding the right company. I also think (but don't have anything to back it up other than anecdotes) that the job market for the former is much bigger than if you solely restrict yourself to embedded systems, not just in Java but also in Rust/Go where a lot of companies are making that type of software.

For embedded device playing around, you could do some fun projects with micro-controllers (eg Raspberry Pico or ESP32):

* Write tiny db library (think sqlite with a smaller set of features)

* Write a multitasking OS for the Pico (easier than writing an os for traditional machines as you don't really have to support peripherals, you could look at FreeRTOS api and try to implement something that looks like it)


👤 imhoguy
The area which may get you closer to low-level system programming as Java backend dev is HFT work, eventually OpenJDK/JVM contributions but that is very niche. Still it may be quite far from firmware/OS/bare-metal systems programming.

Anyway 1.5yoe is still early in the career. For junior roles companies may rather seek enthusiastic candidates with self-learning potential to grow in their environment and some commercial experience may be just nice to have.

I would scratch my itch with side-projects - demos, blogs, community activity to show off to prospective companies. I did it like that in the past to get foot into Java shop doors, 22yoe Java dev here :)


👤 w10-1
I can understand seeking to improve your lot over the next couple years.

But I encourage you to think instead about the next 20+ years.

What would make you a valuable contributor in that time frame? Much, much more education. Self-taught/experience along might have worked in 1980's-90's, but 2035 will demand deep training and initiative.

So don't just do your future self a favor; make a life-changing commitment.

If it seems not financially feasible, or you don't actually know what you want, just realize: (1) the longer you wait, the worse it gets (and the more confused you are); and (2) when you make that commitment, you'll start to put everything else into place. The commitment is the hardest part.

What might get you off the fence? Think of the coolest thing you want to see in the future, and work towards that.