55 comments

[ 5.8 ms ] story [ 135 ms ] thread
This is nice but it's also nonsense.

Nether a program nor a poem is easily tractable. A change in one place requires rebalancing elsewhere. We try and minimise this with interfaces etc but it's never "so flexible, so easy to polish and rework".

Snowflakes and leaves are not each designed.

The minutiae of programming couldn't really be more repeatative.

The "pleasure of making things that are useful to other people" only happens if you project isn't cancelled and actually gets used. Outside of a startup this confluence of events is heartbreakingly rare.

I'm not against writing poetically but this is more Wordsworth than Tennyson.

What sad language do you use? :(
I assume OS/360 was written in assembler so it would have been even more true for Fred Brooks.

Except he had his crazy crap about being the "surgeon" only writing specs and leaving the team to the lesser work so that might explain his viewpoint.

I think you may be wrong on the job of the surgeon. I've loaned my copy to someone at the moment, but from memory the surgeon considered to be the most skilled member of the team and was given the most difficult work. Classifying this as 'only writing specs' is disingenuous.
I agree it wasn't just "writing specs", but I think the parent meant that the surgeon could offload the lesser repetitive work. I think it was more about removing distractions.

IIRC I think there was a "tools specialist" on the surgeon team. I find writing tools to support my work very helpful; and they are interesting, challenging and rewarding to write, but they do take headspace away from the main task. I think this is the idea of the surgeon team. There was also a documenter; which is also very helpful but difficult to do well.

I'm not sure why this never took off (wrong ratios? people don't get along? communicating with the team is itself adds too much overhead? the surgeon's work is too raw for that support?), but I find it helpful to think in terms of these roles within myself.

Tractable compared with non-thought stuff - try reworking wood or metal. But you're right that it's impossible to eliminate all dependencies, and a large interdependent structure becomes tedious, and scary, to change. "Throw one away", Brooks even admitted (if you can.)

Alan Turing predicted that programming need never become boring because you can automate the mechanical aspects. If it really is repetitive, you can automate it.

One can also make small tools that are useful to others. e.g. I got a thrill even from a trivial script to automate away a tedious step, when other people used it.

I don't believe in a personal god but I respect people, like Knuth and Fred Brooks, who do. If they think a tree is designed, I'm happy to think of the intrinsic beauty of a tree - and of all nature. I couldn't make any of it.

It's surprisingly renewing to spend some time in nature.

Perhaps I wasn't clear. I wasn't refering to whether God designs. I was refering to the differences in each snowfake or leaf being of random source that is what I meant by "each".
Oh, you mean they aren't individually designed (without commenting on whether the process that generates them is designed or not); and the variations in each one (that snowflakes are the canonical example of) are just random fluctuations. The beauty comes from the process, not the randomness. I see what you mean.

I think taking a personal God point of view, one would say that those random fluctuations are not random, but designed; just as each individual person is a real textured thing. Every individual is more than a mere variation on a platonic theme. My own tendency is think that when we don't understand something, it's easiest to model it as random; but whether it really is random is something we don't know. So I'm with Einstein in the "god does not play dice with the universe" on this one.

BTW: on a separate note, I'm concerned about you. Having a project canceled is very distressing. The last time I heard someone talking like this (an editor at my publisher, who just had an important proposal knocked back), they committed suicide a couple of weeks later. I sensed something was a little odd, but I didn't do anything. Please, if you are feeling low, ring one of those suicide helplines. I'll be very relieved if you do (or if I'm ridiculously off-base, even more so).

perhaps programming is not for you?
(comment deleted)
>The "pleasure of making things that are useful to other people" only happens if you project isn't cancelled and actually gets used. Outside of a startup this confluence of events is heartbreakingly rare.

Why would a company pay you if no one uses your work? If I worked on stuff that kept getting cancelled or not used I'd figure the company was going to go belly up sometime soon!

As an aside, you seem to be suggesting Wordsworth << Tennyson. Perhaps you can make a case for that, but I don't agree myself. Just an aside.
I was using Wordsworth as a proxy for Romantic poetry, which I consider to be (as a whole) overly-flowerly and trite. The article stuck me the same way.

I don't rank Tennyson much as a poet. The inequality would hold on their performance as Poet Laureate though.

And I've always thought of the Victorians as overly mannered and reactionary. But I respect our differences of opinion.
The "pleasure of making things that are useful to other people" only happens if you project isn't cancelled and actually gets used.

It also doesn't happen if you're developing internal software that other people will be forced to use. It all gets decided by your bosses and their bosses, without any of the hands-on people (developers and users) having any say in the what and the how.

And so you end up having to watch how bad decisions and faulty prioritizations from above ruin the users' morale, sanity, wrists and lives. And your empathy will do the same to you.

I know, I know, this isn't true for everyone, but think of how much better and cheaper technology could be if techies and users talked directly instead of through two layers of middlemen. Techies don't need middlemen to talk to users, unless the users are represented by middlemen.

I don't think programming is "fun" per se. It's merely the means to an end for me. It's certainly satisfying and rewarding in numerous ways to create new things, but I just spent 8 hours debugging and refactoring Javascript and let me tell you "fun" is not the first word that springs to mind to describe the experience.

Why does everything have to be "fun"? An activity can be good without being fun. Many of the best things we can do as humans are not fun at all and yet undeniably a good use of our time. I learnt the piano for 20 years and not a single one of the scales I played was "fun". I know an athelete who gets up every morning at 6am to run for an hour, rain or shine. She doesn't do it because it's fun, she does it because she wants something, and that's the way to get it.

The end result is when we receive our deferred payment for our labours, be it being able to play any song we can imagine, run a triathlon, or admire our sparkling new web app. Whether the process was "fun" or not doesn't really enter into it. In fact, wilfully choosing to do things that aren't fun in pursuit of an abstract or distant goal is a hallmark of adulthood, IMO.

I'm not saying I don't try to make the process as enjoyable as possible, of course. Just that I don't think programming is innately fun, nor do I care that it is not - one does what needs to be done.

The same goes for me while I am at work. Debugging sucks the life out of you. I try to compensate by doing my personal side-projects/start-up a few hours a night.
This is my side-project >_< and what better way to spend the Easter weekend than converting it to jQuery?

But yes - there are moments of satisfaction! A good problem, within or near to your domain knowledge, where you can fly through it at a rate of knots, get in the groove and get it done - that can be wonderful. But I don't think it's programming per se that's delivering the satisfaction, it's the pleasure of applying your well-honed skills in an efficient and productive fashion.

The two are separate, in my opinion. Playing Half-life is "fun". Creating things is good and satisfying but the actual process is often anything but fun. We still do it, of course.

Then again, perhaps there's a type of person who really does think typing obscure commands into computers to try to make them do what you want is "fun" in and of itself, but that person is not me. I tell the computer to do things because I want them done, not because I find it fascinating to talk to the computer.

Guess I'm outing myself as a bad programmer here, but hey, I would have told you that anyway.

I tell the computer to do things because I want them done, not because I find it fascinating to talk to the computer.

I was going to agree with this but then I remembered how awesome it is when you tell the computer to do things, and they get done, and it all works out like magic. That click! moment when the cogs all start turning together... in a way it's a means to an end for me, but the end is so beautiful sometimes.

"Debugging sucks the life out of you."

This made me think of a contrary point of view.

"I like debugging: it's the one time that hacking is as straightforward as people think it is. You have a totally constrained problem, and all you have to do is solve it."

http://www.paulgraham.com/hp.html

I try to foster this attitude, now, when fixing bugs.

Hehe. I might have been over the top when I wrote my previous comment. But seriously, I would prefer working on things that I do not know yet than fixing other people's code.
I am taken aback about this and other negative comments about debugging. I love debugging - the thrill of the chase, the dodging out of blind alleys, the moment of triumph when you track the bugger down, the know-it-all closing of the bug report...

Takes all kinds to make the world I guess :-)

In fact, wilfully choosing to do things that aren't fun in pursuit of an abstract or distant goal is a hallmark of adulthood, IMO.

This is agreeable, but then one could say FUN is what makes your childhood so great.

For me personally, I am obsessed with being responsible and becoming a Man, so that I can be a kid forever.

Then you get into that whole zen mode thing. Pain is necessary for pleasure, hard work is really the root of fun, etc.

By that token, what _is_ fun?

Let's say you ask a painter if he enjoys painting. Do they really enjoy the act of dragging a brush over a surface, of cleaning brushes, mixing colours? These are just the low-level, mechanical parts of the activity. Playing scales fits in the same category, so does a lot of refactoring.

What about the thinking part?

"Do they really enjoy the act of dragging a brush over a surface, of cleaning brushes, mixing colours?"

They very well might. I imagine there are painters who would be bored to tears with a computer program that allowed them to think out their painting and execute it without ever getting a brush dirty. The tactile and sensory experience of painting with physical brushes and paints might be a large part of why they enjoy it.

Yes, it's fun to drag the brush and feel, smell the painting, mixing the colors... even just going to buy materials is fun. Painting for hours to get a picture you never had idea you could is also fun... enjoy

As it's fun to crunch numbers for hundreds of thousands of text documents with a Ruby script and then getting the results into R language and throwing amazing graphics of an algorithm correctly classifying them.

Yes it's about the results, and it's about the process.

Actually, I agree with you. I enjoy the process too. I was just trying to make sense of sho's post. Why would (s)he be coding in his spare time if (s)he so doesn't take some pleasure in the mechanics of it?
Well you hit the nail on the head there; perhaps it's all about what you define as "fun".

For me, fun is a kind of whimsical enjoyment. For example, I love karaoke and drinking with my friends. That's "fun". Shooting aliens in games is fun. Playing paintball is fun. Taking E and smoking a whole pack of cigarettes while sitting in front of the bass box at a nightclub is so fun it's almost orgasmic.

Programming is satisfying and good and necessary and I proudly describe myself as a programmer, despite perhaps not being all that good at it - but it's not like any of the above things, to me at least. It's not untrammelled enjoyment. It can be frustrating, infuriating even. Satisfying too, of course, but I just question whether extended periods of genuine frustration can be called "fun" - for me they're anything but, despite the overall positivity of the process.

Seems opinions differ, and it may all just come down to definitions.

Am I the only one here who derives a considerable amount of joy from the act of writing code?

I've worked across a wide variety of languages and environments, including far more Access VBA than anyone should be exposed to (I loath Access more than any other environment ever), and yet, even here I love writing code. There's something amazingly zen about it; I am the machine, corny as it sounds. It's where I am at peace.

I don't know how to respond to people who see coding as merely an end to a means, except to say that that may be true for you, but for me it's far far more.

Same here - I enjoy programming. I'm passionate about it. I can relate very strongly to the OP.

I program because I want to - because the very act gives me joy. I'm not crazy about debugging but it's a part of my craft and I even enjoy it sometimes.

Sometimes, I still can't believe they pay me to do this!

I love debugging...I even [sometimes] love debugging other people's code...

Its a bit like being a kid, and going out exploring in the woods, or trying to figure out where your parents hid the christmas presents. Everything is new, and shiny (with other's code)...its fun seeing how other people do things...

That and it is a puzzle. Doing stuff in the "real world" is boring, predictable. Doing stuff in code is fun. There are no "rules" really. The only limitation is how much yerba matte I can consume.

I like solving puzzles based on inherent complexity -- complications that arise in the data structures and algorithms of a piece of code. Any time spent fixing complexity layered onto the minimal complexity by confusing or poorly-factored code sucks.

For example: I enjoy solving a performance issue by introducing a time/space tradeoff. I do _not_ enjoy fixing a bug where a previous coder (maybe me) misspelled a variable name once in a 6000-line function -- that's just cleaning up a mess, not problem solving.

I see programming as very similar to playing computer games.

I have to avoid games as I avoid drugs and golf. I just don't buy graphics cards. What scares me in life as bad as heights are Eve Online ads...

I stopped doing C/C++ etc since scripting languages are like Counterstrike with a wall hack (no direct experience of cheating in multi user games. I'm too old for kid stuff.)

Unlike you, I still wouldn't do Windows again. I had some stomach problems for a while and know that Windows programming is worse than starving. 1/2 :-)

Hey, that is totally cool. No need to respond in any meaningful way! Everyone's different. And it doesn't sound corny at all. I know exactly what you mean actually, since that's how I feel about writing music, which is hard work by any standard but I just lose myself in the joy of it.

I'm not even trying to complain or anything; I program a lot and don't avoid it at all, I'm always writing little scripts for this or personal experiments for that. It's just that I don't find the process particularly fun in the way that you perhaps mean. I appreciate the power, I love having the skill, but the main driver is the outcome.

Takes all sorts! : )

Music is probably a great analogy. I'm not musical, but I know people who are. Something about it aligns perfectly with who they are; it is inseparable from the person.
"The end result is when we receive our deferred payment for our labours, be it being able to play any song we can imagine, run a triathlon, or admire our sparkling new web app."

There is a phenomenon I've read about where Olympic athletes often suffer from depression after winning a gold medal. The reason seems to be that they suddenly have no idea what to do, after putting themselves fully into achieving a goal for years, now that they've attained it.

I think another way to attain maturity is to understand that the process, the work, is the whole point. Yes, the work has to be in service of some worthwhile goal in order to be worthwhile. But I think it is healthy to find satisfaction in the carrying out of worthwhile duties, not only in end results.

I belatedly came to think that it's just about different definitions of the word "fun". I do find programming work satisfying, I think. Solving problems, making things work, making incremental progress, seeing the pieces come together. It's very satisfying.

It just doesn't fit any definition of "fun" that I subscribe to, which kind of rings of "whimsical enjoyment". I mean, it's like a doctor, perhaps. I have known several doctors and surgeons, and they all seemed to find their work incredibly satisfying. Saving people's lives, putting them back together, telling them what's wrong with them and helping them fix it - there is a deep, virtuous satisfaction they feel in doing their jobs and doing them well. But would a surgeon describe a successful operation as "fun"?

I fully agree with you that the process and work is the whole point, really. I like my work, obviously, else I'd find something else to do! It's just not what I would call fun. I should have just written that originally, but a few hours to reflect helped in clarifying and solidifying the original impulse.

> understand that the process, the work, is the whole point.

This is true only if you own your work. Doing it for someone else on a salary... is not the whole point. Of anything. Trust me on this one.

Among other things I think it's the huge rush I get when I figure out something hard. Can't be beat :)

Then there's the satisfaction of imagining a system and slowly putting it together. The exhilaration of a new program. Problem solving at different scales. The anticipation of a finished application. All good.

Not to say it's all fun all the time, but I don't need to be paid to want to do it :p

I bet the pleasure in finding a new way of looking at a problem or a solution, applying an old solution in a novel way to a new problem, or learning to understand new concepts - recursion, tail-call-optimization, metaprogramming, (or whatever cool thing your next language does) - is neurologically similar to what happens when we "get" a joke. New paths are traversed in your brain and you giggle like you did when you first figured out how to put two lego bricks together. For me, anyway, programming is just a grown-up version of playing with lego.

It's true though that in a corporate context, you are dealing with other people's bugs, policies, procedures, documentation, specifications. Most of that isn't programming, even though non-programmers can't always tell the difference.

Even after an attack of debugging, when I've figured out what the problem was, and reconstructed the thought process that led to the code that led to the bug, there's a spark of delight when my brain creates this structure. The debugging may be joyless, but not the fixing.

I remember early in my programming career, I had a program that was a tangled mess and making changes was requiring more and more effort just to keep everything straight. I was able to refactor the code into three well contained, clean modules. I distinctly remember the sense of satisfaction I got from that. I imagine it is similar to the satisfaction a wood worker gets when everything is just right. Not joy per se, but certainly a sense of satisfaction.

Another programmer at work explained to a non-programmer why he liked programming by comparing it to cross word puzzles or sudoku. Again, it isn't that cross word puzzles are a joy so much as it is interesting and satisfying.

There are only 2 things that make me jump up and dance spontaneously:

(a) when a great song comes on in a dance club and I'm with a hot date

(b) seeing something I've just written work for the first time

I don't know if I'm bragging or complaining, but lately, I get a lot more of (b) than (a).

> seeing something I've just written work for the first time

When some large piece of fresh code works on the first try, I call this a "hole in one" :)

Best "hole in one" I ever had.

(I am not a programmer, feel free to submit this to the dailywtf, or coding horror, or make fun of me and call me ugly if you want to).

There was a huge huge huge file that I was trying to run a perl script against. The [text] file was about 3 million lines long. What my perl did was split it out into a CSV file so that I could actually work with it (the person sending to me sent it as a space delimited file that didn't really follow its own specs, or have any explanation about what was going on...blah blah, it sucked)...

Anyhow, my perl (stupidly) was doing:

foreach $line (<file>)

{

do_something;

}

The problem was that it kept coming back with an out_of_memory error. The other problem was that it wan running serially (is that a word) on an 8 core box....it would peg one proc with the perl, but the other 7 would just sit there being lazy.

My (very hackish/duct tape) solution was to split (which should have been a big hint) the file into 8 pieces, then call the perl for each one of the 8 chunks...8 cores, 8 threads...should be full of win, yah?

I used wc -l $filename to find out exactly how many lines were int he file, and then gave my new perl script that as the number of lines for each file. The new script did something like:

foreach $line (<file>)

{

print FILE1 $line;

}

(there was a couple of if statements so that after it hit $num_of_lines / 8 it would go to file2 file3 file4 etc.

After that mess was all finished, it would call a shell script that did:

magicscript file1 > file1.magic &

magciscript file2 > file2.magic &

etc. etc. etc. until it was done, then it would do

cat *.magic > fixedfile

which I could then work with...

I put all this into another shell script that did

echo "FULL POWER TO MAIN DEFLECTOR (this could get messy, look out!)"

perl engage.pl

by some miracle it worked on the first try!!

I have since fixed this mess of code. At the time it was a "we don't have time to do it right, just DO IT!" moment, so...whatever :).

> I am not a programmer

I've got some bad news for you. You're a programmer.

If I just wrote 100 lines of code, and it works the first time, I get scared and cower in fear.
I think he meant "works where it had previously not worked" as opposed to "works on the first try".
I like programing, but it gets me bored real quick. Sometimes I think its the keyboard... I wondered about mouse programming for a while but then I got bored again.
I hear you can program with Legos now.
In a nutshell, I find programming can be immensely satisfying because it can be simultaneously a very creative and a very technical pursuit.

I find I need to be creative and technical. If I'm doing a lot of the one to the exclusion of the other, I start to crave the other. At the best of times, at least, programming gives me enough of both.

Because it allows you to do a lot while moving very little.
Man-Month is great book. Kent Beck's Extreme Programming Explained is the second one. But those are mostly about management of software projects.

If you want to learn how to write good code you probably should read about how to write short stories and even Dale Carnegie's Speaking For Success.

They are really useful.

For me it is the challenge and mental exercise of creating something from thin air which is both elegant and succinct (somewhere between code golf and SICP). I love coming across domains/problems/ideas which truly have not been solved/solved best and conjecturing ways to approach it. Something about that just makes me feel ALIVE and excited - like keeps me up at night and dreaming in syntax excited.

One of my latest projects has been simply an sql -> awk (and other unix tools) parser so I can use sql instead of native awk imperative programming. It took me all of an hour to whip the perl script together but when it was working with inner joins on flat files I was like "woah sweet!". http://aql.googlecode.com

Programming isn't fun. Neither is doing drugs. But when you beat the machine after 10 hours of agony and get the thing to work and dollars flow into your bank account, your brain squirts feel good chemicals into your blood stream, just like drugs.
i like it because there is no physical limitation and raw materials involved for creating something

network programming nullifies the distribution constraint

to me basically programming is freedom (no constraint, insane leverage)