Does Anyone Find Joy in Programming

34 points by davey_the_dog ↗ HN
I've been programming for twenty years, and looking back on it all, I can't think of anytime when programming was fun.

Really I gotta ask, and this is an honest question: does anyone find programming fun? Can anyone find joy in an activity so full of frustration?

Programming seems like arguing with a petty opponent that won't give you even an inch. Every damn little thing from a semicolon to a typo results in a big bzzzt! Hundreds of times a day I get told I am wrong in the most petty, pedantic way by a dead lifeless piece of metal.

Also, I think it's not hard to argue that a lot of code out there is crap. Over the years I must have seen gigabytes of horrible corporate code.

And in the open source world it's hardly better. There was the Openssl fiasco we had a few years ago, and now that we know about Spectre and Meltdown we're not even safe on the hardware level!

Doesn't it make you wonder: what the heck have we built? Does any of this have any value? Aren't we just producing codified frustration and pain =for another programmer to slog though after us?

On the physical side, programming is a sedentary activity that over time moulds your body into the shape of a chair. Twenty years spent squirming on a rack and worried about nonsense that I can't even remember the day after.

When I walk past a roomful of programmers, I don't see too many smiles. Instead what I mostly see are expressions that are at best blank, but more often confused, frustrated or angry.

I envy musicians, fiction writers, at least their work gives people joy, and maybe gives them joy as well.

43 comments

[ 1.9 ms ] story [ 75.1 ms ] thread
Yes I do. I enjoy the frustration and the feeling of overcoming it. That strange sense of disbelief when your program finally actually works. It's the same reason I like old video games. I find programming to be very similar to playing music. Putting a program together from functions or objects built from primitives is very similar to building chords and bars out of notes.
>Doesn't it make you wonder: what the heck have we built? Does any of this have any value? Aren't we just producing codified frustration and pain =for another programmer to slog though after us?

This is rather insightful. Does it ever end?

Yes, though not as a professional programmer, but as someone who's used programming to help with tasks in my actual jobs (such as journalism). Or for personal interests, like writing a simple scraper to gather and organize Craigslist apartment listings when looking for places to live.

As I've gotten more experienced in programming I've learned to accept that lack of permanence is the tradeoff for the dynamic and adaptable power of programming. I do take joy in increasing and perfecting my software engineering capabilities -- it's good intellectual work, and it further improves my abilities in hacking for personal purposes.

But when I've had to build and maintain apps and software for public use, I've been much less happy, for the reasons you've mentioned, and particularly because of the constant breakage and maintenance work.

Yes, but I've been super skeptical of the latest fad for most of my career.

Nowadays, I'm working on improving areas that I have neglected, and following my instincts of trying to program with as little 'baggage' as possible.

My project of the last week or so has been a program to generate colorbars according to the cubehelix technique, and I'm using this as a UI testbed for doing all the latest hi-dpi hi-jinks to support nice screens in Windows 10.

I'm also programming in the Petzold-98 style, with nothing much more than the Windows headers, using VS Code with MSYS2, g++, gdb and the stl.

It is certainly refreshing, and relatively joyful to be free of the various layers of crap that are usually pasted into your programming life, obscuring the relatively simple Windows API.

The Advent of Code also has been a total high spot of the year. I completed it, and whilst not getting any actually leaderboard point, I did write code for all the challenges, and managed to develop as programmer whilst doing it.

Advent of Code is great. I've not actually finished it yet, but I keep doing a challenge here and there when I feel like it. I might go back and do some of the earlier years when I'm done with 2017.
I do. I seldom find frustration when I am programming. It's very rare that I come across an error that isn't entirely my fault. A flaw in my understanding is a learning experience. A mistake in my typing takes a simple correction, and perhaps an improvement in my tools to highlight or even automatically correct the mistake in future. I don't find this annoying.

Occasionally an issue presents itself that requires more than a simple tweak to fix. Sometimes these issues require totally rethinking my view of the problem. I find enjoyment in problem-solving.

On the rare occasion that a problem lies within a tool or library I'm using, at the very least I can usually raise it as an issue somewhere. In some cases I have been able to fix the problem myself and submit a pull request for it.

Sometimes frustration happens. I find it helps a lot to walk away from my desk for a few minutes, and come back later with fresh eyes and a clear head. Talking through a problem with someone else often highlights flaws in my logic.

Have you ever worked in an organization where you were strongly discouraged from refactoring, or otherwise touching, the code without a change request? And if the answer is yes how did you deal with that?
Thankfully I have not. I currently work in a small team (<10 developers). We try not to change things just for the sake of changing them, but when there is a good reason to do so then we can. Our code base is far from perfect but I am content with our ability to fix issues that would make it painful to work with.

I don't think I would be happy in a job where I didn't have this freedom.

Valuable work is often not easy. If it were so easy that you could do it with a genuine smile then a lot more people would be doing it and then those smiles would be fake.
Yes. But there's a big difference between 'have to' programming, and 'fun' programming.

Just like a man who earns his living being an airline pilot might relax by being a train driver with a community's tourist railway at the weekends.

You'd probably be able to find lots of musicians who don't particularly enjoy playing their instruments every night.

I do, primarily in the things I am able to do with the programs that I have written. Also occasionally by refactoring old code or by finding and fixing bugs.
>Does any of this have any value?

What's 'this'? The programming you've done?

Q. What programming have you done? What have you spent 20 years doing?

or you mean, all the programming all programmers have done?

I meant all the programs we collectively have done, to me its all a bunch of vexations.
Ah ok. In your comments on this page, you are mostly talking about your own lack of satisfaction in programming as a career. Maybe that's infecting your feeling about the whole computery enterprise.

Personally, I've been an amateur programmer for 35+ years, I've always loved it. I read about stuff, then write a program to do it, and experiment with my own ideas, from fractals to neural nets, anything.

I started a computer science degree once, so I could get programming work I guess. But I went to a programmer friend's place of work - he was working on the accounts software for some company - and it was all so awfully depressing I quit my course. Maybe most programmers' work is like that, I don't know.

I've been programming for 47 years and I love it. There have been bad times, like the 3 times I fought compiler errors, or the 2 times the hardware bugs made life difficult. But it's been a constant learning experience. I've done everything from building a computer and operating system from scratch to creating expert systems to programming FPGAs and creating really complex software.

I tell everyone who has ever asked "Should I learn to program?" that they need to know if they can handle being constantly frustrated, puzzled, and confused. Do they know that they'll spend a week on a bug, fix it with a rush of success, only to be on to the next problem minutes later? Can they handle losing a weeks worth of work because the hard drive crashed?

It really isn't about programming, It's about facing yourself in the mirror that programming represents. Are you happy being alone with your own thoughts and facing your own limitations and flaws? Writers face the same problem, alone in a room with blank paper.

Mirrors are terrible things. The joy is in the struggle.

I love the designing most, and the programming second; brainstorming is also fun. Debugging is okay. I'd say I dread marketing... but its necessary.
Yes, oh yes. When I actually get to work with code, it's sublime. I had a quiet day today, and I got to fix a buggy module, refactoring out into cleaner pieces, building out a test suite to verify its correctness, shaping and molding a hairy, slapped-together piece of trash into something I may never have to touch again. On the best days, it's like code is clay in my hands, and I just sculpt it.

It makes all the rest of the time I spend frigging around with customers, tracking down environmental weirdness, ttading emails, herding cats, frustrating ops work, and fighting to be allowed to actually do anything worth it. Sometimes all that overhead overwhelms me, but the fleeting moments of solitude in the IDE, bringing form out of the elemental chaos, restores me.

For me the joy has been fading over the years. I was super excited about it as a kid learning BASIC, and C later in high school. College was exciting but the frustration started there.

I’m frustrated most of the time working in the industry. I find a certain amount of joy when I have ownership of a piece of a system and can mold it according to my wishes. The joy instantly fades away when I have to collaborate with people that I know don’t give a damn, just want to get a ticket completed, and will totally crap on the code to get there.

I used to find joy in my personal projects. But that has faded away too since I started switching to more modern stuff so I stay up to date. Everything these days seem to require a humongous amount of environment set up.

When I started off, I used to enjoy all programming regardless of whom I did it for.

Now, 20 years later, I enjoy only the programming that I do for my own ideas/projects/business, and don't enjoy the programming I sometimes have to do for others.

Another aspect that impacts the enjoyment for me is the part of the architecture I'm programming. I enjoy everything server-side or analytics related, especially if it's in Python / Java / C++. But I don't enjoy front-end activities like HTML/CSS web designs, javascript, or android front-end. I find front-end coding frustrating because doing it well sucks up too much time for little value and not much learning I can use in future, but cutting corners is also not an option because it's glaringly obvious and off-putting to users.

So it's a mixed bag. In my case, I'd say I enjoy 80 percent of all the programming I do.

You might be suffering from burnout or depression. If you think you started to have such feeling a lot recently, you might want to talk to a doctor, or at least reduce the amount of work you do and just walk outside more (or find some other stuff to relax your mind). Regular exercise would definitely help.

Feel free to disregard this if I was widely off the mark.

I'm in the "love it" camp. Most of the time, anyway. I guess everyone has a bad day every now and then. To me, it seems like getting paid to solve puzzles.

Writing new code is way more fun that maintaining old code. Creating a new application is almost like a form of art.

(comment deleted)
Oh god I love programming. I love it to death. I can't think of anything else that has given me more joy than programming.

Instead of thinking like "arguing with a petty opponent" I would say to me it's more like physics where there are rules that can bend but not break and you have to figure out how to do it within those constrains and when you do, it's pure just bliss.

Fortunately I've never had to do it in a job. Started my own thing after college and only worked in languages I liked. Turned down a huge project once just because it was Java and I hated Java at that time.

I guess the only time I didn't like it is when I was freelancing at the start of my career. Working on other people's idea is certainly not fun.

I completely agree with the sentiment. To me we are destroying society for ads and likes. We value moving homescreen backdrops more than long lasting batteries, useless web games more than reliable medical applications, mining crypto currencies more than curing cancer with scientific computing. Our tools are boring and lack imagination, our hardware architectures and the way we program them are the same dead horse beaten to death.

We branched off somewhere in the 80s and forgot that there is a timeline where things just work, where they serve a purpose for the greater good and where form follows function.

Programming right now is 90% wasting everybodies time by creating stuff that nobody really needs in a way that nobody really deserves.

But it's a hole we dug ourselves.

Afterthought-

I find it telling that everybody in this thread exclaims that they love "the puzzle" or "facing themselves in times of hardship", but nobody talks about creating stuff. Programming shouldn't be a crossword puzzle that you do for it's own sake, it should be a means to reach a goal, and produce something meaningfull. And as with every means the less you have to do of it, the better.

The best line of code is the one never written.

Oh I know EXACTLY how you feel. I also happen to agree a lot with what you say.

I do also think things have got worse. There was a time when with a copy of TurboBasic, a list of BIOS and DOS interrupts, you could do ANYTHING. I once wrote a complete oil rig data acquisition system in TurboBasic with nothing more than a copy of Peter Norton's guide to the IBM PC and the F1 key. And it was fun. But then software became a real thing and lots of money was at stake and everything became so much more bloated and so much more complex, and less fun too.

I remember the software company I worked for, some years ago now, had a "charity in the community day" when we went out and chopped down invasive trees and burned them, and in five years working there it was the best day I'd had. I went home sunburnt and physically tired, but mentally fired up and happy.

Once I gave an impromptu English class in a primary school in Thailand back in 2003 where a friend was a teacher, and it was one of the most unforgettable experiences I've ever had. I envied my friend who'd escaped the stale grey corporate world and was living under blue skies and surrounded by happy children day after day. I once asked him if he'd ever go back to his old life. He told me he'd only go back there in a box.

I still code, and sometimes it's fun, and sometimes it's not, but I try to have long breaks between coding, and working, and just do other things.

I love it, it is like playing with Lego but with infinite blocks and for free. And you have cool modules already built on GitHUB for free again.

It's the neverending joy :)

It’s like anything: if you do the same thing over and over, you’re going to get bored. If you’re a cookie cutter Java web developer then the way you’re feeling is understandable.

I get my enjoyment out of learning and applying what I’ve learnt to create something that others find useful. The true satisfaction comes from architectural design that is creative and inspirational. The more I learn about supporting technologies that I then apply to enhance the design of a system or tool, the more I love working with code.

For me, the key is in making a difference.

I enjoy programming. I do not work on huge, complex systems though. Not directly, anyway. I mainly work to automate things and on integrations. But just yesterday for instance I wrote a small script that downloaded and organized several hundred files for our analysts and they were so happy. I guess I just like helping people even if it’s in small, seemingly trivial ways. And the little programs and scripts I write are my way of doing that.
I find joy in solving problems with computers. Sometimes a lot. The frustration around dealing with core tools (like your semicolon example) has never particularly bothered me. After all, the rules are learnable, and are usually there for a reason. I like working on my own problems, but doing stuff for someone else is good too. Even if I'm being asked to solve not-quite-the-right problem (I'll speak up about this, but at the end of the day: paid to hide in a corner and program? Hell yeah.)

That said, if you see me in the office, "confused, frustrated, or angry" is a real possibility, and I do something find myself seriously wondering whether it's a career where I have much of a future. Thing is, it's never the programming that's the issue. Rather, it's management approaches which downplay the one-on-one person-versus-computer aspect, and instead maintain that software should be the result of a team following a somewhat-defined process. Collective ownership, pairing, and big piles of standards to follow completely destroy the individual, almost-artisanal side of programming. That's when it starts to look like a slog.

>I envy musicians, fiction writers, at least their work gives people joy, and maybe gives them joy as well.

Ask yourself this - what qualities do you see in this work that you admire? Are they things like autonomy, creativity? Which of those are you missing from your work? Do you work with/for people you like and respect?

Imagine this scenario.

You work as a writer for a huge company called International Book Manufacturing. An exec has just decided the company wants to launch 9 book series on romantic vampire-pandas and they have got funding. This is what happens next.

1). A group of execs and strategy researchers sit down and decide the major themes of these books 2). A group of senior managers narrow down which book get which themes 3). A group of book managers are assigned to each book. They write the major plot requirements for each book 4). A group of principal book architects write out the major plot points 5). A group of book architects define what goes into each chapter and do the outline for each chapter 6). A group of principal book engineers further refine the outlines and define the paragraphs 7). The writers finally get all of this and are assigned paragraphs. You only get to interact with your team, which is people who are writing the same chapter. You have a style guide for what you can and can't do. 8). Halfway through the project, book scientists uncover vampire-pandas are on the way out and ware-koala bears are the new hot things. Major parts of the books are rescoped. 9). When your team is 80% done with your chapter, an editor realizes an important portion of your chapter was not done properly but the person who worked on that has left the company. They scramble to get a new person, don't train them, and have them fix that portion in a completely half-cooked way, which causes major problems when book 4 is started. 8). The company realizes that a competitor is going to publish a 10 book series and the first one is coming out 3 months before yours gets to market. The scope is changed to get your book out the door sooner.

Would you enjoy being a writer in this situation? Do any of the qualities you imagine a happy writer/musician has in their work exist in this scenario? Sadly, I imagine there are people who churn out stuff like this (e.g. Mills and Boon Romance Novels, Top 40 Songs) because they have to.

Any idea why the expectation of autonomy for professional programmers seems to be so much lower than for professional novelists?
Programming makes managers nervous. Their solution is onerous process that mostly keeps the programmers from programming. Imagine if a plumber had a foreman following him around, and every time he tried to touch the pipes, the foreman cried "No, no, don't touch the pipes. You'll break something."

A couple of times, I had managers who were stupendously good programmers. They weren't nervous about programming. They didn't care if we went in there, ripped everything up, and set it right again. Managers who don't code well must feel weird. Their responsible for this fragile thing, but they don't know how it works, or what you're doing to it.

Because novelists who don't already have a proven track record of producing marketable work are producing the work on their own dime and only get paid after they have already produced a financially successful novel.

Programmers have the same option, but most choose a guaranteed paycheck over autonomy.

I also wonder if the autonomy novelists have changes when they get famous. Suddenly the success of the book has a direct impact on sales of future books, movies, toys, games, cartoons, the Disney Rides, etc. When there is more risk there are going to be more people trying to mitigate that risk.

I think that's true of software as well. When V1.0 of your software has a large install base, lots of things are going to be put into place to make sure 2.0 doesn't cause your customers to run. That decreases autonomy, especially when some of the "management" is really just political nonsense and ladder climbing.

>Ask yourself this - what qualities do you see in this work that you admire?

The qualities in he work output is what I admire. I won't deny that if you were a musician at a company that creates elevator music, or a corporate writer compiling a quarterly report, that it could just be as bad as programming for hire.

In my very quickly written submission, I wasn't very clear what kind of musician or writer I meant, and I agree this may be an idealized projection.

But if you've ever read a novel that at the end you feel a bit lonely, like you've lost a friend, or been moved by a beautiful piece of music, then you'll perhaps see what I'm getting at.

Perhaps the artists that created these moving pieces of art had a difficult experience when creating the work. It's common to hear some writers say they hate the act of writing, for example.

But at the very least the end product has the ability to create joy in others.

As a maintenance programmer working on some horrible ball of mud codebase that all programmers fear to touch, I don't even have that chance.

All too often the code is both painful to work on and painful to consume as a user.

>But if you've ever read a novel that at the end you feel a bit lonely, like you've lost a friend, or been moved by a beautiful piece of music, then you'll perhaps see what I'm getting at.

If you don't mind, here's an anecdote. I used to work in the consulting arm of a typical enterprise software company. The company sold consulting software+consulting hours, and definitely preferred to sell long term consulting projects that typically embedded us in big changes at large non-tech companies. Lots of people, lots of management/stakeholders, etc.

For some customers they also sold smaller blocks (e.g. 160 hours) of undefined consulting hours. The customer typically used these when they needed a bit of help. A typical project would be something like "3 Analysts have something that is being done in Excel and is a total mess as a business process. Can you streamline this?"

Can you guess which projects I found more rewarding? When I worked on the small projects it was typically me and someone else working directly with the Analysts and I knew exactly what they needed. At the end of the short project they were extremely happy that some small thing we built made their day to much easier. I felt like I had built a relationship with the people I worked with and could directly see how valuable (or not) what I built was. I felt like I mattered to those people. Note that this was not the type of work that made my resume shine or made people envious when I talked about it.

Compare that to the big projects where I basically was 1 of 20 bolt tighteners working on a new bridge. Great stuff for resumes and for some press release in a newspaper. But anybody else could have tightened that bolt and I knew it. So the success of the project barely made me feel anything about what I had done.

Note that I did work on pointless small projects as well. When a company has consulting hours they have to burn by Dec 31st they can imagine all sorts of pointless ways to burn them. So my point isn't about small vs big, but how connected you are to the impact of what you are doing. Big projects can have big impact, but it's harder to feel that if you are just a cog in it.