Ask HN: Switching from Java Back end dev to systems programming dev?

19 points by 3a2d29 ↗ HN
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)

15 comments

[ 3.2 ms ] story [ 61.5 ms ] thread
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.

Maybe it's obvious to others, but what are you actually suggesting?
I think they are suggesting going to school and/or specializing intensely.

Which seems weird, bc I think that OP is still in the explore portion of their career, as opposed to the exploit portion.

More formal education? Planning 20 years ahead? Every part of this is counterproductive advice for somebody in OP’s situation.
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.

Thanks! I will try the Game Boy emulator
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)

This is an interesting approach. I'm taking some CS courses starting from this summer (advanced programming this summer and data structure this fall) and hopefully can get to either compiler or OS next year, probably both actually.

I think porting a niche language to a MCU or write a tiny OS for it could be bery approachable.

For the former definition I'd even treat say developing Airflow operators to be sort of sys prog. It's stretchy but gives me the same kind of satisfaction. Not sure if OP agrees though.

Interesting this was mentioned. I was wondering whether to try a class rather than do it on myself. Are you taking these at a local university or online?
On local. However I believe taking material from a respected university (MIT/Berkeley/CMU) and work on oneself is a way better option, if you can grit through.

It's just a few courses TBH: one for programming (can skip if already know), one for comp arch, one for data structure and you are done with the basics (drop in either a discrete math course if you have no exposure to it, which I do, or a computer language theory class if you want to do compiler). You can then take advanced courses e.g. Operating system or Compiler theories.

I'm always thinking about going that route, saving some $$$ yet learn more than from mediocre local universities. Tried a few times but never get past the data structure course.

Ping me if you want to do it altogether. It's probably easier when studying in a group.

edit Just realized you are a backend developer so you are probably better than me. I mean you can probably skip more courses :)

Thanks! Yeah I'll think it over. Thats sort of what I was thinking, surely all the textbooks and knowledge is out there, so I could teach it to myself, but having a structured class is nice.

I'll let you know. If I decide to go down the study group route, I'll ping you. I have already taken a data structures course, but nothing close to Operating Systems or Compiler Theory.

Thanks I appreciate the advice. Yeah I think I haven’t really dived deep enough into the area to know if either of those is what I prefer, but I’ll give both a go.
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 :)

Thanks! I’ll try getting involved.