Thinking About Programming

The Joy Of Programming

Posted: 01/22/2007, Readers: 15373 Perm Link


I started writing code when I was 16, on some creaky teletype at school. In the last quarter century or so as a professional I have hardly gone two weeks without writing some kind of code. Obsessive? Hardly, I just find writing code to be a joyfilled, fun thing to to do.

Wonder why the open source community is so filled with people writing amazing software for free? It's because I am not alone in finding enjoyment in the act of creating software. There is something magical about starting with nothing but an idea, and then building the software that makes the idea real. Finally there is the joy that comes from having people use it.

The sad thing comes when the joyous software development process becomes a hard cold business function. In too many places software developers are now seen as bodies to be plugged into a "system", engineered to be efficient, and instantly replaceable by anyone with an idealized resume. White-tower architects enforce a strict set of rules that must be followed, project managers detail the precise schedule by which all work must be done, and top IT management requires exacting methodologies that make software development supposedly more predictable. This sucks all the joy out the art of programming, leaving a cold dead husk with all the imagination of a moon rock.

Yet look around the open source community (in any language, framework, OS, etc) hundred of thousands of programmers working, inventing, cooperating, competing and finally delivering amazing software for no other reason than it seemed like a good idea. All of the open source tools I use (Ibatis, Jetty, H2 and the host of frameworks from Apache) are of wonderful quality, supported for free, updated for free, and available with source for all to investigate and even modify. I can actually talk with the creators, learn things from them that I can actually add to my understanding. Being able to use such well-crafted and generally reliable parts makes my job easier, and adds to my joy since I don't have to deal with bits I am not as familiar with.

In most IT shops where the joy has been sucked out of the programmers, the quality of the end result is equally joyless. I've seen (as a consultant and employee) way too many places filled with pathetic attempts to create rigid regimented environments in the mistaken idea that joy and fun in their software process must be replaced with cold hard efficiency. Happy, flexible, inventive programmers can't be trusted to deliver quality systems; yet the open source community continues to do so in many cases with nary a manager in sight, no buzzword-compliant methodology, and not even a financial reward.

To me starting with a good idea, building the pieces of whatever application it is, creating software that is relatively elegant, as bug free as I can make it, that not only meets some artificial requirements, but actually creates delight in the end user is what gives me joy. A couple of jobs ago I was asked to create an employee directory, I was able to convince the manager to let me build a completely ajax application that not only showed more information than was requested but did it in a friendly and pleasant fashion. This was the first time the ordinary employees in the company had ever been given a piece of software written with them in mind. The positive vibes and thanks I got from even the lowest employees was great. This was written completely outside of the normal methodology and heavy-handed management. Sadly I wound up facing a lot of flack from the "system" for daring to do something different and wound up leaving my job. Since then the application (which had more upcoming features intended) has languished in the "proper" environment.

In the mid to late 80's I wrote an unusual spreadsheet application (Trapeze) with two of my friends which only survived for a couple years (with about 14,000 sales) but twenty years later I still get emails from customers who enjoyed using it and regret not having it today. It was a joy to work on and apparently (for a set of folks who understood its inventive nature) such a joy to use that it's worth mentioning two decades later.

Today I still get a kick out of building databases, writing frameworks, designing websites, and even delving into stuff I really don't have time to explore (opengl, search technology, new programming languages), and even writing blog posts about programming. It's hard to explain to people who don't program why it's so much fun. Like all creative endeavors (music, art, literature) it's the act of making something no one has ever done quite this way is an end to itself. Most of the population finds it hard to imagine that telling a computer what to do is actually fun (or should be). Many business entities refuse to admit that anyone would code without rigid structure in place to make them.

They just don't get it: programming is a hard, fun, joyful pastime.

Paul Johnson 01/23/2007 03:13

Web design point: my peripheral vision interprets the gray background to your links as "out of focus". When I look directly I can see them fine, but when I'm reading the main column the tables of links to the left are very distracting because my visual cortex keeps flagging them up. Its almost as bad as an animated advert.

Paul.

Steve 01/23/2007 05:43

What Paul said....

Nick 01/23/2007 07:07

And I thought it was just me! I agree with Paul and Steve.

James 01/23/2007 07:35

There is an ideal world in my head too - one where everyone is happy all the time and no one suffers. We all get to do whatever brings us joy for a job and doing so we earn enough income to support our families in a life above the poverty line. In this world every application I have written is loved by all its users; each app is easy for others to maintain, even if it is written in a language they are unfamiliar with. When I try and innovate my efforts are both encouraged and appreciated; I'm never viewed as the lone wolf.

Sadly, both you and I live in the real world. So suck it up James Dean, you are no hero railing against the authoritative business man. You are a trained technology worker. If you are being paid then it is your responsibility to do exactly what you are paid to do. If you work for free then you can do whatever you want. You cannot have your cake and eat it too; any manager that has held you accountable for that is simply doing their job.

Rigid schedules ensure you are doing what the business requires, not some 'fun' project that your squirrel brain has suddenly decided is important. Rigid structures ensure that projects that involve several programmers contains code and design patterns understandable by each programmer. You know this to be true, consider this an unfriendly reminder.

In fact, start your own business - one that puts food on your table and requires you to work with a few programmers. After you have put your financial stability on the line, re-write this essay to let us know how it went. I guess you will have instituted schedule and structure to your development process. If we ask your employees I bet a couple would say you sucked the joy out of programming for them.

JMB 01/23/2007 08:00

Probably the same pain that architects feel... they want to be creative, but are confined by things like "deadlines" and "specifications."

Next time you have a house built, hire an architect and let him/her take as long as is necessary to build your house, and don't be too strict on HOW you want it built. Give the architect some freedom!

LordFoom 01/23/2007 08:30

Totally Agree with this entry: rigid schedules and rigid environments create brittle software that has cost overruns and doesn't make it in time for the deadlines.

Sean Gilbertson 01/23/2007 08:53

Wonderful, wonderful post. Empowering! We should all be able to read things like this every day, to give us focus and support.

Thank you so much :-)

Leigh 01/23/2007 09:11

Nice expression of what the business IT suffers from. Don't let the naysayers discourage you. We must identify the problem first for what it is. How else will any progress be made?

Nate 01/23/2007 10:38

This is a great essay. When you realize that life can be fun it frees you to accept responsibility take on many greater challenges. I feel sorry for the people like James that can't break out of their low status mindsets.

guppie 01/23/2007 10:48

James:"In fact, start your own business"

the author SOLD 14000 spreadsheet programs (written with two friends) ... to me that satisfies your requirement ... remember it's in mid to late 80 era

actually i feel if he writes the code for 'ordinary' programmers, his code would be bloated with documentations and some 'toned-down-dumb' codes so average coders can understand

the same may be true if the software is build for 'average' users ... the software would be more bloated to catch every possible 'bug' created by newbie users

Rob Mayhew 01/23/2007 10:50

That is a truly great post, and clearly expresses why I program after a hard day of programming.

Thank you

Peter 01/23/2007 11:07

James, I think there is a balance here. What you say is true to the extent that you have a duty to work to make a living and that if during work hours you are doing something interesting but ultimately disconnected from putting bread on the table then the money you get paid was earned at someone else's expense. I have been that person (paying the expense) and its annoying to say the least.

However the article has a point. The other extreme - a fear driven rigid environment that you decribe in your comment often means that, sure, everyone is working, but unfortunatley everybody loses. Software is a combination of innovation and hard work. The more control the less innovation. In a controlled envoronment everybody works hard, no one individual can be blamed for slacking but in the end the product doesn't do as much as it could have and often although it meets the contract it never gets used. The result is that your company doesn't get the next job.

So from a completely materialistic point of view, to succeed you need a balance between focus and carelessness. There a plenty of dreamer losers and there a plenty of hard working losers also. A relation of mine is a farmer, he works hard. He said to me once "Its good to be busy, but don't be a busy fool". A rigid business environment can make complete fools out of everyone. I've seen it plenty of times.

John Siegrist 01/23/2007 11:33

What you write is indeed inspiring to your fellow coders. However, the problem the rigid structures tries to solve is meeting the deadline. Open source software has produced some excellent tools, yet it has taken a very long time for them to get to where they are now. Considering a number of the major OSS projects now contain developers who are paid by big companies to keep working on those projects, how long until some of the more unpleasant forms of accountability befall the 'free' software?

Jonathan Danylko 01/23/2007 11:52

Andrew,

Nicely written. I've felt the same way about a lot of what you've already covered. I posted something similar on my site called: Why programming is fun (http://www.dcs-media.com/desdev/Detail.aspx?ArticleId=607).

I also noticed that you had 25 years of programming experience as well. You may even like this post: 20/20: 20 Programming lessons I've learned in 20 years (http://www.dcs-media.com/desdev/Detail.aspx?ArticleId=578).

Sometimes, I go into my office and tell my wife I'm going to be doing some "recreational" programming, programming where I feel comfortable behind a keyboard. No rules, no deadlines, just therapeutic programming of making a small utility, examining a piece of code, or whatever hits me at the time.

And when all else fails, I hit the games! hehehe.

Great article...and I'm right there with ya.

L8R,

JD

Snappy! 01/23/2007 12:04

Right on there! :)

I also started coding in my teens, 13 to be exact, and have been coding since ... 20 years now ... ;)

Yes, coding is such a joy! I mostly see it as a hobby, even while I was working. In most sense, it's more an artform than engineering, or maybe it's the artistic form of engineering at it's best? :D

Izaak 01/23/2007 12:10

My first reaction to this was: "Damn you must be a hippy!". There are some really nice things about this kind of hippydom I believe better said here: (http://dreamsongs.org/MobSoftware.html).

It seems to me you're essay takes on this us (coders) and them (managers) mentality, and it comes off as being sort of whiny.

objectified 01/23/2007 12:42

Nice essay, I enjoyed reading it. I do not agree with the comment stating "You cannot have your cake and eat it too;". Sure, it seems like that is the truth. However, in this situation, we're talking about very bad cake that no one wants to eat. Like the article said, most applications I see cranked out by massive software development companies, suck. For the developers, for the client, for the users. So obviously there's something wrong. Something that goes beyond the personal satisfaction of a few programmers. When there's something wrong, you can see if you can influence the situation.

  1. If not, so be it. Maybe look elsewhere. Developers are in high demand.

  2. If so, try to influence the situation at all cost.

That probably sounds simpler than it would be in reality. That's true. It's very hard. It's hard to convince the higher ups, who often don't know what the "satisfaction of programming" feels like. You may need to trick them into using different approaches to software development. You may need to gather examples of where unothodox approaches seem to work (hint: http://cogito.blogthing.com/2007/01/20/the-google-development-algorithm/ ). Maybe you could explain that some practices from the eXtreme Programming world might work (yes, I know of the hype/controversy around it). For example, the "on-site customer" approach might lead to better software. Better software might result in more profit (that's what the higher ups love to hear). You might need to show examples of how to motivate engineers, and why that could actually increase productivity. Don't ever just give in to the Big Corp. Slavery. At least try to make a difference. I'm trying as hard as I can.

Burag 01/23/2007 20:22

I don't think it's that simple. We all know that there is a very high turnover rate in the IT industry. If you are in charge of a big project which is critical for a company's success, you have to take all measures to make it happen.

This might mean that you have to turn software into an "assembly line" kind of business, where parts (ultimately programmers) are interchangeable. I understand that this creates a feeling of unworthiness in the programmer. I don't think that should be the case.

Ultimately someone is going to create the infrastructure, meaning the whole architecture, be it remoting, web services, DB design, UI design. These are crucial pieces, and programmers should strive to get to the point where they can design such systems.

I wouldn't want my projects to feel because of a very talented competent programmer leaving the company in the middle of the project and he or she has produced a work of such high quality that cannot be replaced.

When there are salaries, rent, bills to be paid I'd rather have an assembly line approach, use software factories, other tools that take from the creativity of a programmer but add a lot to the success of the project.

PS: I am not a project manager. In fact, I hate being told what to do most the time, but it's life. That's why we all spend a lot of time outside work programming. And I agree, I cannot stop programming :)

ronin 01/23/2007 21:33

damn u, paul johnson. i didn't even see the links on my first read. but when i looked at them to see what u're talking about .... man, now my eyes keep getting yanked towards them while reading the blog lol

Art 01/24/2007 06:21

"even the lowest employees"?

Nice attitude.

Ali 01/25/2007 00:21

i though i am crazy to think in that exact way but thanks for your blog i found i am not alone there are lots of creative people in the world (that i have to learn from) who thinks just as i do.

Dapeng 01/25/2007 00:41

great words ...

tab 01/25/2007 00:58

the links on the left are fine - the text was more interesting to my brainstem than the links

about your writing: I have been in this game for 23 years professionally and still feel great when I get a great project to work on for a customer that gets a kick out of what I did for them.

sad but true: we still have to punch a clock where I work and are monitored for the hours we work - check the timestamp on this - I was working and took a break - that does not matter to them though...

Stephen 01/29/2007 11:58

The grey background text are links? Who'da thunk it. I'd almost gotten used to underlines.

I've been in the industry at least that long. Sure, having someone leave in the middle of a project is a pain. It's often quicker to not replace them. Read The Mythical Man Month for an explanation. But also lost on management is this: My best career productivity was about 30 times what it is now. We've got a project with about 30 people, and we'll end up spending about two years on it. I could have kicked it out by myself, if allowed to do it the way i'd want to. So, i'm working at about 3 percent effectiveness. Or less. It's frustrating, so i do side projects at home. Right now i'm doing the deep dive on Tic Tac Toe. Why? I mean, no one will play it. But I want to learn alpha-beta pruning, and don't want to write Chess.

One of the places where i was so productive, my boss called me 'Clark'. Despite 10,000 comics in my basement, i didn't catch the reference for months. But, about once a month, i'd kick out another project, and it wouldn't suck. I thought that was normal, but it just wasn't his experience. I get excited when one of my old projects is found to have a bug. For one thing, it's so unusual.

I'm not convinced that this works for everyone. Fred Brooks says that the best programmers are something like seven times more productive than everyone else. He also hints that different people have different skills. So, put together a team that combines these skills. That's obvious, right? But managers don't generally have the skill to know who can do what. Since they can't tell the difference, everyone is the same, and they are treated that way. We can't tell the difference between electrons... so the charge is the same.

What should i do? The only way to get proper recognition is to work for myself. However, my skills don't lie in the direction of building my own business.

someYoungGuy 02/05/2007 12:43

paul johnson

I agree with your comments (can't say i noticed them upon reading the article though).

However, i was thinking that perhaps the author was simply attempting to differentiate the links from the main text. The page background is the same colour,weight (and almost the same size)as the body text,

this can cause all the text to seem as one huge block of text (which would be equally distracting).

I would suggest removing the background off the links and perhaps changing the colour of the links or simply underlining them.

Lets remember that the guy is a (seemingly very accomplished)programmer - and not a web designer - criticism without even attempting to suggest a viable alternative is kinda like what managers do when they 'suck the fun' outta developing applications