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.
Developing for retro hardware can be fun too, for similar reasons.
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.
Making projects that anyone can pull up on nearly any device via their browser, without installing anything, is so incredibly satisfying. You can make anything run in browser these days including games and full fledged applications. You can make art and interactive experiences, or you can share minimalist text based content, and either way it's very open for people of all walks to browse and experience how they like.
In some ways I was raised on free internet experiences, from early flash games, to IRC, to forums and boards, to wikipedia, to youtube, eventually to HN... we really are blessed with so much stuff that is so accessible and I love to contribute even small things to the massive ecosystem.
When I was bitbanging wires to talk (in a simple way) to another chip the first few times it was exciting. Now it's open schematics, figure out what to connect, do simple tests, get it to work.
On the other hand, if you don't do your favorite niche for your day job and you have limited time to work on it, it can keep you entertained for years.
Things I consider fun to do but haven't ever done:
- my own programming language
- a non trivial game from start to finish
- some kind of database/knowledge storage thing (this is fuzzy)
- other stuff related to carrying bits across wires and machines (even more fuzzy, but I do seem to like moving people's bits around)
Tools have evolved a lot now, so there's less stuff to script for but still I like it.
When I open my PC my browser, mails, text editor, slack, teams etc will load up. Browser will have few tabs opened.
My current development project will be up and running.
My machine will ping another machine which will note the time I came in and when it's time to go that will be noted too. Helps to know time spent.
When I was in corporate, our office required 2 punch ins, 1 for general entrance into building and 1 for office timings. It was okay if sometimes you forgot to punch in for office as they had agreement with building staff that allowed them access to our office staff entry exit stamp. But if you don't put in office punch in and do the punch out it'd create false entry and one had to go to HR office to get things correctly set.
I found that office punch in machine was on network, by asking to networking and hardware team I got proper code to do remote punch ins. Never had any missing punch after that.
There's also a script which does a routine check on all my clients website like, ping them, login, check 1-2 page and logout. Do it twice a day. Once when machine is started and once in middle of the day. It has saved me countless times when some code is pushed and if that breaks I usually have enough time to fix it before someone from client side notices it.
Had WhatsApp message related script too before they banned other tools access on the app. But I hear now API is allowing that automation again, haven't tried to do it though..
Used to have a script in js for browser console to read HN in dark mode, but had to put it every time a page loaded so have given up on it.
Usually I make them in python or shell. supervisor has been a gift as well.
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?
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.
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.
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.
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.)
Weirdly I find it very relaxing.
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.
I'm mostly interested in turn based games where everything can be made simpler by leveraging the fact that it's OK to have a computational spike in response to a player input.
I once had a system where expressing game components and game states was so straightforward that writing tests felt like playing the game, because 95% of my effort in writing a test was in creatively thinking about game states and components and 5% translating it to data. I normally find writing tests very unpleasant but in this case it wasn't just tolerable, but actually fun.
For work, I like the infrastructure as code space. Bringing order to chaos.
This is the thing I wish to do full time, but even if not is so interesting! Is not just "making a programming language" is that it touch parts of "make a in-memory database" + "array programming for the masses" that makes it more challenging!
also, accessibility tools. largely pragmatic, since my limbs are slowly betraying me, but I genuinely enjoy the bootstrapping aspect, and the empowerment.
3 files changed, 35 insertions(+), 562 deletions(-)
I 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.
Some examples-
1. Artificial life design and simulation
2. Biological systems simulation and research, like, computational neuro science
3. Implememting math. The "science" in computer science
4. Deep Reinforcement Learning
5. Designing and implementing algorithms
6. Simulating physical systems
7. Computational Math
So, "modeling" in general, loosely. Also "optimization".
Other than these:
I like edge devices and microcomputers. I love everything about them.
Other niches that I exposed myself to, but didn't like:
1. Programming art (NOT ai art like Stable Diffusion, GANs, etc.)- I never found it that good.
2. Networking.
3. Databases.
Kinda neutral about frontend. Don't like, don't dislike.
Seems interesting now, but I know little to nothing about:
1. Cryptography
2. Quantum Information and Computation
For examples: www.shadertoy.com For learning: thebookofshaders.com
For fun: Emulation! I’ve only written one emulator so far (Gameboy Color), but I’ll probably do more in the future :)
https://www.google.com/search?q=bytebeat
P2P protocols, networking in general
I've started hacking on my own container format (yeah, I know, xkcd927), after finding it super frustrating to embed arbitrary time-synched data streams into mp4/matroska/ogg/etc. Also it bugs me how crusty, complicated, and arcane mp4 is, and at the same time, mastroska and ogg are weirdly opaque given how they are supposed to be open standards.
If anyone is curious, here's my container format I've been developing: https://github.com/xkortex/sito
some have really interesting approaches on storing different types of data.