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
I dunno, man. What do you enjoy?
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.
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.
Game development is super fun. Especially if you make one for android or ios and let your friends play it on their phones. Feels very rewarding. It's also quite challenging to get the feel of a game right. So there is lot's to learn as a programmer.
I wasn't feeling fulfilled by my work either, so I started working on a side project to scratch my creative itch.
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.
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.
I would encourage everyone to give an Arduino a go. You can pick them up for a few bucks each, and even kits full of sensors and hookup wires are quite cheap. The range of micros available now is huge, and many of them have useful stuff like built in WiFi (like an ESP8266). You need very little electronics knowledge to do a whole heap of fun things, and tutorials and libraries are absolutely everywhere.
In the world of $5 Raspberry PI Zero Ws with BT/Wifi/Full Distro why even consider Arduino anymore?
You can get an Arduino Nano clone for considerably less than $5 on eBay. The cheapest price I can find a local Pi Zero for on eBay is $24 AUD (without an SD card).
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.
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.
To get started with an Arduino you install the IDE and plug it into a USB cable, load Blink and hoorah your first program is already running. By comparison a PI is far more mucking around https://projects.raspberrypi.org/en/projects/raspberry-pi-se...
Because Rpis and Arduinos are completely different. Arduinos have a microcontroller onboard, not a microprocessor. Along with ADC and PWM to simulate DAC. You need a real-time system like Arduino in order to properly interface with sensors and actuators.
"challenge, mission, technologies, or quality"
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)
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)
Getting a bit more meta, are you task-oriented, goal-oriented, people-oriented? What truly makes 40 hours a week more pleasant for you?
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.
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.
I can definitely relate. I was a web developer for years before transitioning to Android and iOS development, which was way more challenging and rewarding. I gradually shifted away from UI altogether and focused on mobile infrastructure. And nowadays I have shifted away from that and work on ML. So anything is possible.
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
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
> Get out of web dev and frontend at all costs.
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.
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.
OP is already doing frontend work and has grown tired of it.
Creating new programming languages! Maybe just for fun, as in https://esolangs.org/wiki/Main_Page - or to find the syntax & semantics combinations that best match your intuition and preferences.
Definitely try some different things and see what you like, but if you're looking for mission and impact I wouldn't completely dismiss web development. The web browser is a stupendously powerful tool for "getting things in front of people", and the combination of that plus some understanding of another area can achieve a lot. There could be opportunities to branch into scientific computing, fairly complex distributed systems, and more. Pretty much every area of computing except maybe hard-core embedded systems have a web component nowadays (and the "softer" end of the embedded market could have some good opportunities... can you imagine a consumer router with an actually-nice management interface? That's primarily a web-development problem!)
It's more about how you do it, not what you do.
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.
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.
Digital signal processing http://dspguide.com
I think programming is fun, but yes doing a lot of corporate projects for a long time can get tiresome.
Try going for lighthearted - automate a silly thing for yourself. Something to make your life 0.002% easier. Sure the cost benefit is not going to make you rich, but doing something for yourself is quite different and can be a bit of fun.
My best silly program is called 'heater' - I was coding a lot at night and in winter it was pretty cold. Heater was simply a loop with a lot of maths calculations on repeat which increased the load on the (high end at the time) PC. It had a nice little gui which allowed you to set the temp you wanted.
Try going for lighthearted - automate a silly thing for yourself. Something to make your life 0.002% easier. Sure the cost benefit is not going to make you rich, but doing something for yourself is quite different and can be a bit of fun.
My best silly program is called 'heater' - I was coding a lot at night and in winter it was pretty cold. Heater was simply a loop with a lot of maths calculations on repeat which increased the load on the (high end at the time) PC. It had a nice little gui which allowed you to set the temp you wanted.
The things I find really fun are things that my coworkers have expressed seem tedious to them. For example, I work in a very large code base, and I enjoy various refactoring and integration tasks. It forces me to debug and learn the code, and at the same time when you get a nice engine upgrade from the dev line in for a certain package/module/whatever it feels like an accomplishment which will make our life easier in the future. I like various other cleanup and test related tasks for largely the same reason - feels like you're improving stuff for the long term.
Have only played it twice over Xmas. But there was much about Beat Saber that really stuck in my mind. If nothing else, it certainly sets the heart racing and adrenaline pumping. But more than that, it feels like the delivery on a promised future. Immersive and entertaining for both player and spectator. Combines a potent admixture of LAN party play and physicality. And will certainly inspire the next wave of arcade oriented VR gamedev ;)
What have you worked on?
The 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.
The 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.
What I'm working on right now is a project to decode a certain technical book publisher's output of their books. They provide free views of all the chapters of their books with words below a certain length having their letters consistently (but randomly per word) replaced with other letters. Words over a certain length have their letters not replaced but shuffled. Things like punctuation are left unchanged.
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.
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.
Definitely try programming something visual or something that uses graphics. Its really fun and there's sometimes hilarious results when regular software bugs are immediately visible in the output on your screen.
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.
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.
+1 for Three.js - its API is very accessible and easy to understand even for people without prior graphics experience.
Unfortunately I don't think there are too many shortcuts. You really have to figure out what is important to you and try to stand by that. Doing something new can help you turn the page, but if it doesn't change your perspective you might end up with the same problems. It could also be that you are in the wrong environment.
I really like the feeling when you are learning a new language and you build something and it works.
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.
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.
I personally love interactive data visualizations. It's easy to pile on dimensions to a plot; it's much harder to make it fun, interesting and usable. It's nice mix of the artistic side of my brain and the analytic side, too.
I find embedded systems to (often) be both challenging and satisfying.
Came here to say this.
I find integrating a new API into an existing app fun. It allows me to learn something new while adding more functionality into software I'm already vested in.
>interesting, impactful, challenging, lighthearted, or otherwise more satisfying areas
These things are mostly subjective, I think - different for everyone. But still, good question!
These things are mostly subjective, I think - different for everyone. But still, good question!
It's boring to only ask questions with objective answers! The opinion section of the newspaper is often my favorite. I'm enjoying people's responses.
>It's boring to only ask questions with objective answers!
Yeah, the questions closed for being opinion-based on the StackExchanges are the best. Like Best books on subject X.
Yeah, the questions closed for being opinion-based on the StackExchanges are the best. Like Best books on subject X.
Visual Effects !! lots of python and C++ to generate amazing pictures, lots of CPU power (50k+ cores on prems in a big studio) and I/O transfer (100 tbs a day)
Functional. I favour Elixir, but any flavour's fun after years of procedural or OO. Kind of feels like the future and the deep past all at once.
I find the 2-3 feet opposite the monitor and 16 inches from the keyboard and mouse to be my most fun area. But hey, I have tried others and myriad postures to boot.
:)
:)
Visual programming is fun.
Audio programming is fun.
Hence, programming microcontrollers with visual and auditory outputs is also fun.
Shaders are cool. https://shadertoy.com
This website crashed my chrome, my laptop is not that powerful, beware if you have a slow machine.
I created https://shadergif.com which has similar features (bonus: p5.js coding). I render gifs in the feed though, preventing most laptop crashes. We are a very tiny community now, but we have fun! (like 3 actually active monthly users)
Anything but web development is fun :)
Unless you write the web-server, or course. That is fun.
Unless you write the web-server, or course. That is fun.
In my opinion, building data pipelines