Hacker News new | ask | show | jobs
Ask HN: How do I get back into systems programming after 7 years away?
19 points by siwtcher00 2884 days ago
At 40 I'm getting back into IC-style systems programming at the POSIX and Kernel level after being away for more than 7 years doing managerial stuff. I'm finding it super hard to get back into it. I've forgotten most of the information that was on my fingertips such as the semantics of calls, the arguments, data structures etc (I spent the last day reminding myself of the pthreads API for example). I'm also super rusty on operations such as bit-hacks to check for alignment etc. I never even used to think about these sorts of things, they were muscle memory. I'm wondering if I've permanently lost it. I feel like I'm having to relearn everything from scratch. Any tips on how I can fix this/move faster or am I just past it?
9 comments

You will still benefit from your past experience. Novices don't know what to pursue, so they waste a lot of time. You're past that, you have the luxury of just knowing which fluff to ignore.

As to how to get back into it: it's the same way as you get into any other non-trivial field. Starts working on a small but concrete problem, and then just build from there. That's the only way to accomplish anything non-trivial.

I'm currently relearning how to write memory efficient code for first time in ... 12 years? It takes a little time, but it will all come back, don't worry.

If you have the time/resources, I hear Recurse Center is nice place to go take some time to (re)learn some skills - https://www.recurse.com/

You can't move faster. You're also not past it. You're going to have to relearn it, but relearning it is faster than learning it the first time. It's going to be frustrating at first, but it's going to come faster than you fear it is.
Sorry for not answering your question, but how do you get a job like that?

I miss that stuff so much. Did it from my late teens (yep, professionally) to mid twenties, then moved to America and all my jobs here have been services related in .NET or Java.

Any one of the vendor companies churning out products (software or hardware) will have a need for people who do systems. It's not glamorous or overly well paying but its enjoyable
Two things;

1. For bit hacks, consult (but be careful not to drown in) https://graphics.stanford.edu/~seander/bithacks.html and http://www.catonmat.net/blog/low-level-bit-hacks-you-absolut...

2. From the perspective of writer's block, your 7 years are an elongated period of the kind of absolute/perfect refreshment we sometimes long for: you literally cannot remember how to ride the bicycle. This is awesome! If you make the effort to relearn some things "from scratch", as in putting the effort in without trying to tickle your memories to kick in, you'll fold the last 7 years of managerial knowledge and experience into your new mental models. Everything has a flip side.

You've probably already had a look at the Arduino model. Dropping the Java IDE (and API) in the nearest bin in favor of C and your own preferred text editor is probably not the worst decision - but the clones are cheap, the bootloader makes it that much harder to knock completely over, so there's that.

POSIX is, for what it's worth, slowly fading in popularity. Enterprise/business still favors it a lot, and maybe you'll find somewhere that will find it relevant for the next 10 years, but I have (at 27) some hesitancy. Learning how Linux specifically does things may pay off more, for better or worse; I don't consider Linux to be the best-of-the-best, but it's what most people reach for the most nowadays. So learning other systems (the BSDs, etc) may also be useful and come in handy for environments that prefer alternatives.

If you're interested in the IC level, picking up Lua, Python and JavaScript may come in handy.

The cheapness of >100MHz and >8MB RAM means that what was done with assembly language years ago is often either

a) done on a 250MHz-500MHz chip running Linux with an interpreted language doing the "not-so-heavy" parts of the lifting

b) done with Lua or a lightweight Python or JavaScript implementation

At the end of the day this does make maintenance viable for a wider range of developers, and decrease iteration time on top of that.

For reference, this was written from the perspective of universality/relevance to the widest range of opportunities. It's not exhaustive, just an overview.

Andrew Morton should be your role model. He left mgmt. to become a linux kernel maintainer, and ended up at Google:

https://en.wikipedia.org/wiki/Andrew_Morton_(computer_progra...

I like the other advice here a lot and echo it, but I want to add one thing: don't panic! If you panic, it will actually slow you down and reduce your ability to concentrate. Just relax and accept that it may take time, and by just relaxing and not worrying about it, you will go faster :)
You might be slower now but you will get up to speed again, and those management skills will also make you better. You'll be better than if you had stayed doing the same thing the whole time.
You know what you forgot. Most others don't even know what they don't know.

If it's the kind of work you want to do, I'd say stick with it.