David is Vice President of Developer Relations and Chief Evangelist for Borland Software. He can be contacted at http://blogs.borland .com/davidi/.
My first computer class was Fortran programming. I was an Aeronautical Engineering major at the time, and wanted to be part of the U.S. space program. But then the news hit about job layoffs in the aerospace industry, and I realized I probably wouldn't have a job waiting for me. Luckily, I also discovered that I thoroughly enjoyed keypunching by my program card decks, checking the JCL cards and the program code to make sure it had a good chance of working before submitting the deck. (IBM 360/40 turnaround time for jobs was painfully long during the day and even longer near the end of the quarter.)
Because I was having so much fun in the Fortran class, I went to the head of the Computer Science Department, who told me that computers were going to be everywhere and that I would always have a job. I was set on a course for 37 years (and counting) of continuous fun.
Still, having tired of long turnaround times and waiting lines for the ASR33 teletype to the timesharing system, I longed for my own "personal" computer. That changed in 1975 when I bought an IMSAI 8080 computer kit and, with soldering iron in hand, put it together and turned it on. It didn't work. Reminding myself that I was a software guy, I took the computer to the Computer Doctor in Los Angeles (better known as George Tate), who fixed some cold solder joints and recommended a Godbout Electronics S-100 bus terminator card. I was on the road to personal computing.
Coincidentally in 1975, Fred Brooks published The Mythical Man-Month: Essays on Software Engineering (I still have my original dog-eared copy) where on page 7 (in the "Joys of the Craft" chapter), he listed the five reasons why programming is fun:
- The sheer joy of making things.
- The pleasure of making things that are useful to other people.
- The fascination of fashioning complex puzzle-like objects of interlocking moving parts.
- The joy of always learning.
- The delight of working in a tractable medium.
I agree completely with Brooks' reasons why programming is fun—and then some. Moreover, I would add the following to Brooks' list, especially considering the advent of PCs and the Internet:
- The enjoyment of working with other programmers in a team.
- Being able to play with leading-edge computer hardware.
- Helping to debug complex software systems that someone else built.
- Building developer tools that are useful to others and that I can use myself.
- Meeting and communicating with top industry experts in the software field.
- Using the Internet to collaborate with other developers on projects and problems.
- Having my own PCs with lots of megahertz of speed and loads of megabytes of memory and disk space.
- Getting paid to have fun.
- Being able to program anywhere, anytime, with my choice of platform, programming language, and architecture.
Upon posting some thoughts on my blog, I received more items for the list from other developers:
- Because it's a combination of intelligent and creative work.
- Being some kind of nerdy superhero.
- Nearly instant gratification.
- The pride of seeing my work used by other people.
- The thing about it that really hooks me is taking a machine that was designed for no purpose in particular and making it do anything I want.
- The benefit that it brings to users in making their lives easier.
One comment and one quote deserve special mention:
- "A favorite programming moment is when I get to fix a bug in code that already has a good unit test. Such work is often akin to putting golf balls into a neutron star's gravity well; I get this can't-go-wrong feeling."—from Kristofer Skaug.
- "If it isn't fun and profitable, what the hell are you doing in the business?" by Robert Townsend, Up the Organization—submitted by Jim Roberts.
1. “The sheer joy of making things.” Not to be underestimated.
2. “The pleasure of making things that are useful to other people.” Seeing other people take delight in what we’ve created, or benefit from something we’ve done, is enormously satisfying.
3. “The fascination of fashioning complex puzzle-like objects...and watching them work.” Getting something to WORK. An under-appreciated joy. Gosh, when I finally got some songs to load into my iPod, I thought I would break into song.
4. “The joy of always learning, which springs from the nonrepeating nature of the task.”
5. “The delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff.” True — but the opposite of a profound truth is also true, and I think there’s a mirror pleasure to be gained from dealing with actual, physical, tangible materials.
"Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake."
-- Frederick P. Brooks, Jr. from MythicalManMonth
While some people write programs to solve important problems, or just to get a paycheck, many programmers actually enjoy the activity. Many mere mortals can't understand why.
Here are some of the things that programmers enjoy about programming:
Programming is, in a way, like writing poetry or music. It is an intellectual activity where one creates structure out of nothing. And the things one creates can have significant value to others.
See also SoftwareIsArt
One of the things a programmer does is to create elaborate logical models of the world (or other domains). A programmer constructs a bunch of things in an imaginary universe, and then sets them all in motion. And the programmer gets to set and to change the laws of these universes. This is fun in the same way that playing with model trains is fun.
Learning How Stuff Works
Some people enjoy taking things apart and figuring out how they work. Programming takes this to another level--not only do you figure out how things work, but you can also figure out how to write code to make them do things differently.
Programmers get to learn how networks work, how telephones and modems work, and learn a lot about the domains for which they are writing applications.
Knowing more than other people do is a rush.
Learning New Things
Programmers are constantly using new operating systems, new programming languages, new database management systems, new libraries, etc.
One of the things programmers do that makes them and their associates say "Wow, that's cool" is when a small amount of effort results in a huge change in a system's behavior. (Of course, the danger is that these widespread changes will have undesired effects.)
Programmers, even the most junior ones, make decisions every minute that impact the users of their programs.
Programmers solve lots of complicated problems. The more complicated, the more enjoyable they are to solve.
Some people solve those problems such as from InternationalCollegiateProgrammingContest "just for fun".
Adulation of One's Peers
Programmers love it when other programmers look at their work and say "Cool! How did you do that?"
Seeing One's Creations Live On
There's something special about walking into a shop or bank or whatever and seeing one's work living in the world with its own independent existence. Knowing that code one has written is executed thousands of times every day is quite a thrill.
Getting From It What You Put Into It
The counter-point to ProgrammingIsNotFun's "Most Programs are Boring" item: If you are bored, you can always inject new life into a problem by trying to automate it, abstract it, or otherwise solve a larger problem simultaneously. See: BoredomIsaSmell
Programming often involves going into a deep form of concentration, somewhat like meditation (see MentalStateCalledFlow). This feeling is enjoyable.
Getting stuff done
It's a craft, a trade. In the evening, you hopefully see the results of your doing, very much unlike some consulting or management jobs.
I really connect with this idea. This probably seems silly, but I always think of the part at the end of Pretty Woman where Richard Gere gets into a Newport-News-like defense contracting business after having made all his money not really producing anything. His new business partner says "we're going to build greaat big ships together." I think that's a good analogy that describes the difference between what I do and what a lot of other people above and around me do.
I once heard MartinFowler say something like "programming is hard because its closest two traditional jobs would be mathematics and philosophy - except that unlike philosophers programmers need to produce something, and unlike mathematicians programmers have no proof of anything." (far from a quote, is a distantly remembered paraphrase). Anyway, I remember thinking that those are the things that make it fun. -- BrianMcCallister