Ask HN: What's your favorite programmer niche?
With so many 'sub genres' in programming (machine learning, networking, frontend, etc.), what's your favorite one? For me, I really like sockets/TCP type programming in Rust and C but I'm curious what people like to code in free time.
111 comments
[ 2.7 ms ] story [ 189 ms ] threadI love almost every aspect of computing, from software to hardware.
Distributed systems, networking, single-machine vertical scaling, graphics programming, statistics and ML, NLP, vision, frontend.
Also love server hardware, grew up water-cooling and overclocking systems in the late nineties and early 00s.
I also find it fulfilling to help friends and family resolve their computer problems.
I'd like to learn more about embedded systems, I fantasize about creating my own devices stop esp32, but haven't gotten close to having time to explore this yet.
I will learn and use whatever language it takes to get the outcome I wish :)
I will also say that as I'm getting a bit older, I'm a little sick of the physically boring aspect of sitting in front of a computer for many hours on end. No longer appealing.
Cheers.
you ever try a standing desk?
Developing for retro hardware can be fun too, for similar reasons.
Not so satisfying when seeing the pay-grade compared to other CS fields.
PS…we’re hiring firmware engineers to bring hardware to life.
Who is "we"? Your profile doesn't say.
You'll see various folks publish their xv6 modifications on Github.
BTW, my daily work is mobile app dev (mostly Kotlin, sometimes Flutter). Totally unrelated, eh?
I like this as well, so my guess is that some people grew with an interest in game development, and they still find it interesting to explore it.
Game algorithms were also "not easy" in the 90s, but since the codebases were overall smaller, they're more approachable then modern ones.
I'm using them for a game I will be releasing. I think very few games these days regardless of engine used or graphical style has a chance of a net positive return, so that part doesn't bother me.
I have a small library of books from the era on 3D graphics that are fun to read through (I especially like the speculation on how DOOM achieved its speed and "realism"). Andre LaMothe and Christopher Lampton have some good stuff, plus the black book of Michael Abrash.
I tried doing indie gamedev as a full time job for a year a while back, learned that was a quick way to lose all my savings :) so now I do it as a side project while having a full time job. If any of my games bring in some pocket change, all the better. Less stress for sure but also much slower progress. My brother does the music and sounds, and I do the code and graphics (plus some commissioned assets).
2) Trying/inspecting all sorts of Lisps out there. There are so many crazy ideas tried and implemented over the last 40-50 years that IMHO, any new modern language feature probably already exists in some form in some Lisp compiler or interpreter.
This includes pretty much every aspect of the rendering process - how often are elements updated, textures, masking, interpolation, fonts and making sure that nothing renders more often than it should. It's a challenging but pleasant process as the result of experimentation is usually easy to measure (FPS + memory usage).
PS. If you're into it as well - try Safari's web inspector for measuring performance and investigating which frames were dropped. I found it much easier to use for debugging than Chrome.
While on meeting many people are in mute. In that case something of the sort can be done that position/part of people on mute is rendered less frequently.
And people who don't have their camera on are only rendered once
P2P protocols, networking in general
But I seem to gravitate towards writing code to decode various file formats. Over the years I've reverse engineered Apple Notes database, written code to read the realm database backing Craft.app, code to read couchdb files, lucene files, git pack files, sqlite databases (I have js code that runs queries against raw database files), etc.
I'm also interested in compression and cryptography. (Implementing toy systems to learn how stuff works.)
I do have some brief notes on the "Notes.app" format here:
https://github.com/dunhamsteve/notesutils/blob/master/notes....
But I didn't discuss my methodology -- Generic decoding of protobuf, building up a schema as you go -- the tricky part there is that a byte array and a substructure look the same, so you have to try to decode it, and if successful, try that schema on the next example.
Here is another fun technique - scanning through a disassembly of an Apple framework looking for assembly patterns that match the protobuf compiler output (this was dependent on which language was targeted by protobuf):
https://gist.github.com/dunhamsteve/224e26a7f56689c33cea4f0f...
So you find the serializer / deserializer code and figure out what the original protbuf spec looked like.
SQLite got me a little experience with b-trees (as did couch), and I got to write a little query planner.
Lucene was interesting because it was compact, had some skip lists for fast lookup, and was a log-structured merge tree. I borrowed bits of it for an index in a binary file format for work.
For realmdb / couchdb, I looked at the source code.
I did realm so I could extract my Craft.app docs. It's interesting because it's a column structured database, so I got to learn a little bit about that. I also learned that C++ had changed a bit since I last used it (lambdas!).
And couch is an append-only btree. I got to learn to read Erlang with that project.
I've also have a web scraper that reads from the Chrome cache (whose format keeps changing). I archive things like recipes that show up in the cache.
And I've got code on github that decodes iOS desktop backups, which some people have found useful. (Written mainly so I could poke around in various applications' data and extract stuff from my keychain.)
As I said, it's way out of my wheelhouse, but I'm planning on spending some time in the next months on trying to merge a decrypted backup of old iOS Signal chat history into the decrypted backup of current Android chat history and trying to restore from that (re-encrypted) backup (there is no native iOS to Android transfer on Signal yet), so I'm starting to look into any learning material that will allow me to not fail within the first 2 minutes of trying :).
Definitely do start writing this stuff up!
It's nice to have a coding-related outlet that also produces something tangible you can hold in your hand or put on a wall.
Gotcha!
I usually end up writing simple native apps to ease silly pain points in my day-to-day life - low cognitive load, high perceived benefit. I try to get raw sockets involved whenever possible. There’s something satisfying about moving bytes around yourself. Kinda like DIY home projects.
For examples: www.shadertoy.com For learning: thebookofshaders.com
Neural networks are the famous example of this, of course -- but this can be extended to all of scientific computing. ODE/SDE solvers, root-finding algorithms, LQP, molecular dynamics, ...
These days I'm doing all my work in JAX. (E.g. see Equinox or Diffrax: https://github.com/patrick-kidger/equinox, https://github.com/patrick-kidger/diffrax). A lot of modern work is now based around hybridising such techniques with neural networks.
I'd really encourage anyone interested to learn how JAX works under-the-hood as well. (Look up "autodidax") Lots of clever/novel ideas in its design.
I like the fact that Mother Nature ultimately conducts my performance review. She doesn't care about tech fads, personality test scores, or office politics. She doesn't tire of proving me wrong, over and over again.
Germane to other comments in the thread, I'm aware of the salary disparities in the different castes of tech workers. On the other hand, unless someone is exceptionally disciplined and motivated, it takes something more than pay to propel a career.
While in college, I had a summer internship in a computer facility. My present job is in a building with a large team of devs. I get to see what they actually do.
I've wondered to myself if I'd be happy enough as a developer to do it for as long as I've done my present job, or if I'd just get bored and burn out, or start to misbehave.
I credit it for being one of the reasons I learned to code because it made me think about how cool it was that somebody built that. (I was ~9 years old.)
Now I think I'll have to go finally reimplement that site from memory! I'm sure I can brute force the math with the help of Copilot :P