Does Anyone Find Joy in Programming
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 ] threadThis is rather insightful. Does it ever end?
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.
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.
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.
I don't think I would be happy in a job where I didn't have this freedom.
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.
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?
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 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.
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.
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.
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.
Feel free to disregard this if I was widely off the mark.
Writing new code is way more fun that maintaining old code. Creating a new application is almost like a form of art.
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.
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.
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.
It's the neverending joy :)
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.
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.
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.
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.
Programmers have the same option, but most choose a guaranteed paycheck over autonomy.
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.
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.
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.