Programmers Don't Like to Code
rentzsch.com
rentzsch.com
While that's true for me to some extent, but what I also noticed is that I really like doing is building things. When I'm not coding, I woodwork, build RC airplanes, or find something else to work on.
Fortunately, there exist many someones that do like writing things like XML parsers, so I don't have to be one. I think that might be Wolf's point.
I know for a fact I hate drudging through writing custom classes, I've said it before and I'll say it again, when I'm doing tedious repetitious coding of things like a parser, I tend to start feeling like a glorified data entry clerk.
but when it's time to see that parser in action and use it to solve real problems, especially by many different applications, THAT is the reward.
I agree there. I use power tools, but I don't build them. OK, I think about building electric motors sometimes, but I haven't tried yet. What I really want is a nice table with tapered legs, so I use the best tools I can get to do that job well. Someone else might use the table to help them build something else.
It's the same with code, we keep builing things and sometimes those things are used to build something else. Sometimes that's obvious, like libraries or frameworks that are dedicated to being part of some other software solution, but often the softare helps someone build something else that isn't software.
I ask because the master woodworker I took my one class from had a library of custom jigs. He was also amazing to watch, even when planing a board. Confident and skilled. His passion was making shaker-style chairs. Chairs are hard to make because they have to be constructed properly (so many external stresses from people sitting in it, rocking back etc.)
I loved his philosophy of there is no right way to do something (in the woodshop) - only smarter, faster, and safer. And how he revealed the secret of shims to make a joint snug.
I could go on and on. Suffice it to say, you can learn a lot by taking a furniture making class, taught by a master.
One thing I've learned is that there is indeed more than one way to build something. I've been able to take advantage of that when I didn't have the tool a project used, but knew how to get the job done with another.
It's much the same in software. There are many different ways to get the job done. Some tools are certainly better for a job than others, but often one can cut something two different ways and still end up with the same result.
If he said "programmers don't like to write code that's not directly related to the problem they're solving," I'd agree. But if that's what he meant, then he should have said it.
I find the practice of starting out with a provocative statement, then redefining the semantics of the discussion until the unqualified thesis statement is true both annoying and disingenuous.
I think it's accurate to say "I like to program" because it goes beyond problem solving for me. I enjoy solving the problem, yes, but I also enjoy expressing the solution. I enjoy the process of figuring out what is the most concise, elegant and natural expression of the solution, and I find the result pleasing.
I agree with your post wholeheartedly and on all accounts. You don't get readers without starting some arguments, though.
It's that judgement call.
I've just written a DNS client, because I needed to. In the process though, as well as having a very cool DNS client I know will work, I've learnt about the DNS protocol.
Thank god.
Yeah, that's why I spend 16 hour days coding in Common Lisp and Mozart/Oz.
"If programmers liked to code, every last one of us would be overjoyed to write our own HTTP client."
Because HTTP clients are a stupid display oriented and bug-tolerant little things. HTTP SERVERS on the other hand, those are more tractable, since you can be responsible for following the specs yourself, and a treat to work with for all the interesting engineering possibilities they offer, which is why more people have written web servers than web clients.
“I just want to update this field in this file, why do I have to write an XML parser?”
Oh, he is talking about that programmer: the corporate data janitor. That sentence is just laden with idiocy; first, if your data is in xml and you don't have established tools to perform "CRUD" type operations on your XML files, you're doing XML wrong (lack of established process). Second, if you have to write an XML parser to edit an entity in a file, you're doing it wrong (refusal to use established tools, NIH). Third, if someone has to enlighten you on how to update one of your data files (inability to RTFM) .. Dear Neo, the salve of Hackingkind, you're doing it wrong. No wonder you hate programming then.
And since when did 'Programmers' become such prima-donnas? I like whatever it takes to continue a career in developing software, sometimes that means tedious stuff, and sometimes really interesting ah-ha moments of coding.
Its all part of the CS experience.
There is some problem solving, but if it was problem solving that I enjoyed I would have enjoyed math (more).
I think a large percent of programmers want to rewrite things because they focus on what's lacking in some way, expect to do everything better than the next person, it's easier/more fun/feels more productive to write than to read/grasp other people's code etc....
He quoted Andrew Leonard quoting Larry Constantine but took a light-hearted sentance and seems to deliberately misunderstanding or taking it too literally.
But the rewrite/reuse issue needs to be addressed in a per-case basis... but I've seen thing beeing rewritten way too many times that should have been reused and usually ending up in much worse shape after that....
Although, I've also seen rewrites that improves stuff a lot.. but usually it's very very obvious when that's the right action to take.
... can we plz stop making big generalizations? Different people like different things.
Programmers are not all alike.
2. Form a conjecture
3. Deduce a prediction
4. Test
The basis of analytical thought is testable predictions.
Counterexample to "Programmers don't like to code" :
I am a programmer, sometimes I like to code.
Sometimes I like to code in C. I like to implement some basic objects, like a list, a stack, some math routines. It is a like a little zen garden. So it isn't anything impressive, it's just like some rocks and sand, but I arrange it in a certain way and I like it.
Maybe I should address the content rather than the title (although if the title fails to represent the content it is a poor title.)
"Programmers like problem solving" is the kind of vague positive statement that is pointless and devoid of content. Here is a problem I don't like to solve: configuring Apache . . . yawn.
Generalisations are all very well when they have something to teach us. In the article's case neither the thesis nor the counter-thesis seem particularly illuminating to me.
Writing an HTTP client, and server is actually something I believe every one of us should do. As well as providing you something useful, tailored to your use case, it teaches you a massive amount about how everything works. It's pretty much definitely good fun :/
(I wrote both of these, and a dns client, etc etc for Mibbit).
For example,
print urllib.urlopen('http://news.ycombinator.com/').read()
feels more like a language statement than a library call.
In particular his distinction between a preference for "problem solving" or a preference for coding obscures a much richer diversity of attitudes. An understanding of the subtle gradations between these various different kinds of programmer is probably one of the best tools available to the truly thoughtful software manager.
Personally I am really only enjoying myself if I'm tackling a "hard (for me) problem", if the ratio of typing to thinking is high then I'm "working".
While I agree that understanding is a motivation and that building it does help, as your ideas become more complex, just being able to code it does not mean that you understand it perfectly.
My coding thrills are for understanding, for automation, and for impact (including the childlike-joy of just seeing something happen when I do something).
For me, the PC is an experimental lab. I can quickly test my hypotheses; and get fresh data, which inspire new hypotheses. The PC is a means, not an end.
Also, this might not be relevant in this case, but I feel like there's a difference between "coding" and "programming". In my mind, coding is a dull task of translating an existing design into code, whereas "programming" is more problem solving, which includes coding. Being called a "coder" is almost derogatory sounding to me.
That's probably the biggest reason we rewrite stuff. So we stop getting those calls in the middle of the night.
unless you really really like your webapp.
It could happen anytime, but I added the "during the night" for dramatic effect :-)
If all I liked doing was to solve problems, I could be fixing that broken toilet.
This debilitating disorder affects 1000s of programmers worldwide.