Ask HN: What are the most fun areas of programming?
I'm not satisfied with the challenge, mission, technologies, or quality of the projects I've done web development for. Are there more interesting, impactful, challenging, lighthearted, or otherwise more satisfying areas of programming?
43 comments
[ 1.9 ms ] story [ 98.2 ms ] threadThe healthcare sector can be impactful, but not particularly challenging. I personally find anything working with an assembly language to be challenging, and I'm sure you could think of something where that would be impactful.
Do you have any hobbies or interests outside of tech that you could apply your skills toward? That would help fulfill the interesting, and satisfying criteria you are looking for.
This is an interesting problem that requires good data structures, good input data (n-gram statistics), can be improved with skills in lexing and parsing. It's just a really neat problem.
I don't mind buying the books, but present an interesting challenge and I'm hooked.
My job is actually pretty nice. I genuinely like my coworkers and I work remotely. I just get bored and frustrated with the way web dev goes.
Don't want to say more than that.
On the other hand, I find programming cool, when you are building your own stuff. You design it, you put constraints on it and then you develop it and it works! Not only it works in terms of 200 status, but also it does fix your problem.
:)
Pick a project to work on in your free time. A game, an audio synthesizer, a web application, maybe a character or world generator for a tabletop game you enjoy.
Work on it for however small a timeslice you want, while still working on it. Half an hour every weekend, I don't know. Who cares. Just spend that little bit of time solving a problem you care about and see if your enjoyment of programming improves.
I like to write games. From scratch. Well, I use libraries or platforms to do things like load bitmaps and draw to the display, but I don't use Unity, Unreal, or one of those. It's relaxing. I can do things like REFACTOR THE WHOLE DAMN CODEBASE if I want to without stepping on any toes. There's no JIRA, no standups, no coworkers looking at me funny because I use Emacs for all the things, no BAs or PMs telling me "that's out of scope for this sprint--no wait, it must be finished by sprint's end" two days before the sprint ends (actually happened once on the job). There's just me, my goals, and the code.
But that's my jam, yo. You need to find the problems you enjoy solving, then solve them your own way on your own time.
Over the last few years I've been building a sequencer (https://github.com/sparkled/sparkled) that synchronises LEDs to music. I love both the artistic and architectural challenges it presents.
In my day job, I love it when I can add tests to existing code or refactor code to be more readable/maintainable/performant. I'm currently working as a contract software engineer, so I get to move between projects quite a bit, and I find that helps to keep things interesting.
Csikszentmihalyi brought up that flow happens when you work on something difficult but have the skill level for it.
Typical flow activities are mountain climbing and motorcycle riding.
Two of the symptoms of flow is losing yourself and losing track of time. This happens when you do something difficult enough that you can't focus on anything else. All other input is turned off, it's just you and the problem. With extreme sports, losing focus means death or injury. With programming it's not automatic to forget everything and just code.
But a condition of flow is that you have to do it for its own sake. Not for money, recognition, or even to help someone. These can be side effects but not the main focus. You program for the sake of programming itself.
You can probably even get this kind of buzz from doing Hackerrank, but any side project will do.
It's difficult to optimize this many different things at once. Odds are, when you have multiple opportunities, no single opportunity will be the best in each category. I care about "interesting/challenging" (I find challenging things interesting :P) and "impactful" and picking between the two can be a source of stress for me.
Getting a bit more meta, are you task-oriented, goal-oriented, people-oriented? What truly makes 40 hours a week more pleasant for you?
To actually answer your question, I enjoy performance engineering (impact: $$$) and distributed systems engineering / SRE (impact: availability, and the headcount you need to run the system). So I enjoy working on a large video platform. Large cloud providers in general seem like a fit.
Alternatively, to get the same kicks, I'd consider scientific computing (it has the same economics, it's worth doing clever technical things to save $$$), or embedded/gamedev (where you want to do as much as you can within limited constraints)
This question really resonated. Do you have any advice to someone who's pretty strongly down the "goal-oriented" end of this? Fundamentally, I enjoy the work, but do find a queue of 20 JIRA tickets (which I imagine to be the the "task-oriented" way) drastically less appetising than a few meaty problems to dig into.
These things are mostly subjective, I think - different for everyone. But still, good question!
Yeah, the questions closed for being opinion-based on the StackExchanges are the best. Like Best books on subject X.
If you're a webdev I'd try messing around with Three.JS or even just the HTML canvas element if you want to just do something 3D.
You can't effectively battery-power a Pi and they can overheat without ventilation, so for wearables, Pi isn't even a choice.
Arduinos come in a lot of flavors, and many have features that Pi doesn't, like lots of analogue inputs for example.
And cost IS still a factor. A $5 pi requires an SD card at a minimum. You can get Chinese arduinos for like $2 apiece.
I use Arduinos and similar boards to drive addressable LED strips. A lot of these strips require extremely precise timing, which is difficult or impossible to get from a Pi for some strips.
From another perspective, the limitations of the Arduino boards (e.g. RAM measured in kilobytes) force you to think harder about how you want to solve a problem, which can be quite an enjoyable challenge.
Get out of web dev and frontend at all costs. I have found every other area programming much more fulfilling and challenging. Including embedded and game programming, which I'll do outside of work. Web dev is just too high level and too basic. There are way more interesting problems out there than mangling CSS to do what you want.
Re: lighthearted. Procedural programming for games. Mazes, cellular automata, terrain etc. This book is a good place to start: https://pragprog.com/book/jbmaze/mazes-for-programmers
Or don't. Frontend dev is the most fun I have while programming because I feel it's more rewarding.
Just try everything and see what you like. Don't listen to people telling you not to try new things.
Unless you write the web-server, or course. That is fun.