I feel like reading HN sometimes there is the assumption that everyone who is a programmer by default works on web stuff (front end/back end).
I'm curious to hear about what other jobs/domains exist outside of this and how it is working on non-web stuff.
I used to work in web dev, but I enjoy my current work a lot more. Most of my web role was just taking mockups from the UX team and translating them into code which felt mindless. Now I get handed a system and am asked to squeeze as much performance out of it as possible which I find much more interesting.
On the software/networking side of things the biggest change is working with protocols other than http.
The work can be interesting, but intense when in the thick of building a system. There is less competition for jobs compared to pure web/programming, but also less jobs in total. The option is always there to take a web/programming gig if the specialised work is hard to get. Potentially pay is lower than some of the big US web companies, but that's probably as much from me not chasing dollars to the exclusion of all else. Some people/companies don't see this work as deserving of the same/better compensation as web/programming, as it is not as easy to understand and they won't pay for what they don't understand. Find the right employer/client and it can be lucrative.
I was once in a group that was switched away from the work we were doing and repurposed to do web work. It was a bad experience, but not because it was web work. The code base we were given was in terrible shape and we weren't allowed the time to adequately fix issues. Thankfully I no longer work there.
I'm self taught when it comes to computers and software development. For years before I landed a paying development job I did a lot of hobby projects. When I decided to take the leap and landed my first development job I took a fairly steep cut in pay. I was single, could afford the cut and was doing something I really wanted to do. It got the experience I needed and after the first year and changing jobs, my pay substantially increased.
I realize not everyone can take the approach I took. It may not even work these days. I did this 38 years ago when the industry was a bit more accepting of developers without a college degree.
Addendum: I also networked. I went to the equivalent of meet ups of the day. Talked with other developers, showed them my work, etc. This is how I found my first job.
With ~17 years of experience already, start with the study of the structure of C programs. Recreate some of it manually, build it, and research the things that do not behave as expected.
Bonus of using an open source kernel is they have a lot of eyeballs on them. They will be pretty dialed in versus studying random Github projects that happen to be written in C.
Would recommend avoiding cognitive overload, wait until you get into comfortable flow writing, building, fixing as needed, simple programs before you dive into lower level debugging, trying to grasp assembly structures that a compiler spits out.
LLMs can also help you break into C development by a large degree. But they still get overwhelmed on a sufficiently large C codebase just like any other language. Your mileage may vary there.
K&R is a great intro.
If you want a book that digs deeper, try Modern C by Jens Gustedt. It’s update for C23 this year, and it’s CC (free).
If you want to make something like TigerBeetle or Redis, that’s sort of just specialised back-end development.
You can also do embedded in C. And you can make operating systems.
What people often do when they want a career change is: they work on New Thing in their spare time; they find this little niche at work where New Thing could fit; they find that there’s a limit to how much workplace will let them prioritise New Thing; they start applying for jobs where New Thing is a focus point, with a non-empty resume.
All of this is done in a Python environment with usage of Rust for speeding up critical code/computations. (The rust code is delivered as Python modules.)
The work is interesting and different challenges arise when having to process and compute datasets that are updated with 10s of TBs of fresh data daily.
About how long do these typically take to execute? Minute, Tens of Minutes, Hours?
My work if very iterative where the feedback loop is only a few minutes long.
Earlier it was geodata imports from OSM or private sources. Now it's mostly routers and GPS tracks. Interfacing with OSRM & Valhalla via C bindings. Road graph analysis and algorithms. I wrote a router myself, comparing different routing algorithms. I also developed a pedestrian traffic model for entire cities, for retail. I also did various ML models. My languages are Python w/ GeoPandas & CatBoost, Rust, Go.
I've mostly set aside the languages and tools I used to use, and I'm learning Haiku's variant of C++ to write some native-mode Haiku application software.
The first version of the code looks like this, https://youtube.com/watch?v=rJuRTZOE99g
The new version is much more feature rich, catering towards the user. Unreal use in Python is now native and users can launch a dedicated server.
The development process can be slow, lots of waiting on compiling and cooking. The Python part of this project is great. Code is very simple and readable and I'm building out a renderer for the geometric algebra package I'm using, Kingdon. This lets users quickly visualize 3D elements, lines, points, planes, and shapes. Working on non-web stuff is great. I love building out UI and text in 3D, it feels like the final form of UI and is a lot more expressive than web UI. Controlling objects in 3D let's you do a lot more. Everything feels right.
Web stuff will burn you out. In my case, that happened 10+ years ago and I've never desired to go back [to building web products].