Does Writing Code Matter?

I’d ties this in with the issue of whether you see yourself as a software engineer or a programmer. Engineering is about the whole process from figuring out what to build, how to build it, to making sure it’s quality and produced as inexpensively as possible. The focus is on the overall process of which the coding is just one part. Programming, at least to me, is about writing code based on whatever is put in front of you. It’s about coming up with great code. But it’s not so concerned that the requirements are good or that you’re coding effeciently.

I should probably explain myself a bit better.

I don’t have a problem with the premise that programmers could better themselves by learning how to write/blog. It’s true, but only if that’s where your interests lie.

If you look at the article he originally linked to, the title is “10 tips for moving from programmer to entrepreneur”, meaning it only applies to those programmers who are looking to become businessmen, and in that context, I think it’s relevant.

What I take issue with is the bold statement that:

  1. coding doesn’t matter
  2. We should all become the same beast with the same skill set.

And the fact that the basis for the argument is an article that clearly has a specific context.

But I will say this. Knowing how to sell yourself, which is an integral skill for everyone in todays workforce, is a far cry from knowing how to market a product, or even sell a product 1 on 1. It’s that type of generalization that I take issue with.

The irony is that Jeff is a software developer who comes home and blogs about software development, and then claims that we should understand writing, and/or marketing to be balanced. If I were to blog, it wouldn’t be about IT, as I have other interests.

In my experience, good programmers are good communicators. Good code has to communicate well with the compiler and those who will need to understand the code in the future. Not surprisingly, I’ve met people who can’t communicate well, and their code may work, but is lacking in logical organization that is necessary for comprehension.

Look at it this way: we code so we don’t have to code anymore.

I believe that great programmers are always lazy, and when they spend time coding, they build tools that build tools that takes the coding work off their backs. See where I’m getting?

After all, just like entrepreneurs, coding is an investment.

Rami: That’s pretty much the sum of it. Your time is worth a lot, and whatever you spend your time doing is an investment. As Larry Smith would say, “That’s what good computing does… destroooys employment.” Ultimately we code so that we don’t have to. Ultimately we want the computer to understand English, and we would much prefer communicating via conversation. Anyone who disagrees must only write in assembly. We write to express ourselves. As Paul Graham would argue, we often blur the line between engineering and art.

If you have to be “famous”, “taken seriously by the community”, appear in People magazine or otherwise have strangers bow at your feet you must have a low self esteem and should probably get into acting or other media to satisfy your need for applause. If you enjoy the intellectual challenge of coding, are getting a good salary and are likely to be rehired by another company if your company goes under then continue on your happy way and let the people who crave fame pursue that (oh how happy they will be!).

I agree with a lot of your post. I think we programmers need to expand our horizons and become better writers, better at explaining our reasoning, better at collaborating with our teams and better at scheduling our day. Like a pole vaulter who doesn’t just spend all day hoisting their body over a bar. They work on their strength and endurance independent of that. One I knew was a great swimmer because it helped his abdominal muscles. And they take time to help less experienced members of the team. Many of us had to take English and Philosophy in college and didn’t see the need until we realized our brain needs to “exercise” in many areas to grow healthy.

But one thing I disagree with. I’ve worked on many projects that were never used or were just stopped before they completed. I still learned a lot from those projects. Maybe another area we need to work on is our ego. And realize that everything we do is not going to completely change the world. If we’re lucky, our work will just make it a little better.

I’m in the middle of trying to coordinate a converged documentation effort in the IT department and while getting people to support the effort is one thing, the other (biggest) part is the writing.

All these people have been documenting in their own fashion and writing-styles. And in their defense it was never intended to be read by the masses. But it still comes down to writing - and I don’t mean code writing.

Being able to communicate effectively in writing is probably the most important thing any developer/programmer does. As Jeff wrote, in the end your impression of people is what you hear from them, read from them, or in certains cases visually see (like for web apps).

Jeff, this is great motivational post. thank you.

I would like to coop the statement “Try to spend some time talking to people instead of the compiler.” by changing it to “Try to spend less time talking and more time listening to people instead of writing.” Which is sound advice for anyone.

I would also like to point out that coding isn’t just self obsoleting. We will soon reach the point where like in Star Trek we use natural language processing to interact with the computer. At that point you wil only need to know how to properly phrase a logic statement and concisely define instructions in order to “program” a computer.

e.g. What is the weather like today in my city? Give me the highs and lows in Farenheit. From now on when I wake each morning ask me if I want to know the weather in my city. If I don’t respond to your query ask again every five minutes until I leave the premises for the day. If it is raining or gaoing to rain that day remind me before I walk out the door.

At the point where this is possible “programing” would be a skill required for everyone to interact with a computer. It would be more akin to supervising or managing a resource and training that resource to your preferences. People who could get their head around logic statements and linguistic interpretations could still find work helping others rephrase their “three wishes” to correct misinterpretations of their “programs.” But for the average and even above average programmer the gig is up. It’s time to pick a real profession and put those analytic skills to good use.

Wat most technical professionals haven’t figured out yet is that a skil set is not a career. You can still program for yourself in whatever profession you choose. In your chosen profession you are your own tech support and your own coder. Just your skills with a computer are for you to use to shine. Not for the guy with the printer problem or the inability to save a file or the inability to whip up an app or utility to automate the analysis of some data or some process.

You would be surprised how far you can get by just being able to program a spreadsheet down on Wall St. will get you. Make sure you don’t get pegged as the programmer though. Being pegged as the programmer means you are just a resource, not to be rewarded, not be included, and certainly not to determine the direction of a company.

Take thew salesman job. Grow your own CRM and ERP app to interface with the company app so you can focus on the revenue streams that make you more money. Make your programs an extension of you.

Eventually, if you are successful you’l come full circle and hire programmers to write the code according to your specifications. At that point you will truly know what a programmer is.

A programmer is a self obsoleting natural language interface to a computer.

I recall reading a blog/article/diatribe, paraphrasing here, that idea people were irrelevant (any noodnik can think something up), but implementers mattered. Pistols at dawn?

I’ve seen Jeff’s code. He only writes this to cover up the fact that his code is crap.

I kid. I kid. :slight_smile:

Allen, how is the ability to write a book make you a better software engineer?

I think foxyshadis pretty much nailed it.

Everyone should know a little about a lot, but it’s far better to know when and who to ask for help or delegate tasks to.

As a software developer you are not a 1-man team.

As a software developer you are not a 1-man team.

Or you shouldnt be, unfortunately lot of us are.

Selling yourself in order to get a better position is just disgusting

I agree, and this whole “everyone needs to be happy and social” thing has gone too far, it really isn’t the most important thing no matter what people say.

Sure it’s nice with people being social, but really, is the best code written (or the best work in any job) done by people that chat all day ?

Todays society is a bullshit society where we value people that talk crap more than people that sit quiet in a corner and do the work.

I agree “balance” is nice, however people have different personalities and what we have created is a society where the bullshitters get to the top of the carrier latter and not the best people for the job.

This is media hype, the idea that the most social person is always the best for the job, it just isn’t true.

I write code for a living. I also write about code for a living, having written some twenty books and more than a few articles, blogs and online references. The code which I have written for clients has paid the bills, admittedly, but overall the code that I have written for general use, and more importantly, the words that I have written to explain the code, have had a far greater impact.

There are a thousand different ways of solving any given problem with code, but the problem that I’ve seen is because of this there are a thousand different solutions that largely replicate the same algorithms, but do so in ways that will likely get little to no code reuse.

Every problem may be different, but in general, most programmers will get farther finding a good, well-illustrated and described example that they can modify to their needs, and the people who write these are generally the ones regarded, perhaps with some justification, as the icons of a given software field.

I’m now the CTO of my own company, and I try to encourage my programmers to learn how to write effectively, how to speak in an engaging manner, and how to present abstract ideas to non-technical audiences. They will be better programmers for it.

I agree with Kurt Cagle. Too many developers decide “I know how to solve that problem” and then go off and solve it using their own idea. They often have no idea of the consequences of the mechanisms they will employ. They have no idea if someone has tried that path before and, if so, whether it was successful or not.

Design Patterns (and Anti-Patterns) grew out of this idea that most ideas for solving a particular type of problem have been tried in the past and proven to be good (or dreadful) and that there are known consequences for attempting those paths.

It has been my experience, and why I agree with Kurt, that developers whose communication skills are poor are almost always the first to dash off and attempt a technique without searching around for known patterns, known components, related textbooks or literature, etc. Is this because their communication skills are sufficiently poor that they don’t understand the written form? In some cases, I believe that to be true. One “guru” at my last company (and his two “guru-lites”) was adamant that design patterns could provide him with nothing of value. It turned out he was right - it wasn’t a flaw of the design patterns - it was a flaw in him. He couldn’t understand anything even remotely abstract. He could only communicate regarding the project, both listening and verbally, at a code level. Anything abstract, including the literature, was lost on him (unless it was all math or relational calculus).

Programmers who cannot communicate to non-programmer audiences, who cannot speak competently in meetings or before groups and who cannot deal with abstract ideas without immediately descending into details (thereby disrupting any meeting containing non-technical people) are of virtually no use to me. It doesn’t matter if they are brilliant coders - they cannot serve any purpose but code generation and their knowledge of the system is never recorded in any manner that anyone other than a developer can understand - and then only through the expensive task of reading that code.

Why pay these people a high wage? Wouldn’t you be better off hiring someone who was a good designer and then letting junior developers effect the code?

hmm… I’m just a computer science student, but I’m starting to feel the world outside. I didn’t know that people just write a code and, like, discard it away like a dog crap since there’s no use for it. WTF! Is it really that hard to make a living?
I’m studying to be a good hacker(white hat). Might it help if I hack a company just to be known? I’m talking absurdly, of course. But surely we must do something to be known. At least not my idea, though.
btw, thanks for the nice articles…:smiley:

Tim, no one in here has put forth the claim that Software Developers don’t need to be able to communicate. The claim that I’m putting forth is that there are many types of communication, and atleast a few of them are not directly relevant.

Public Speaking is a form of communication with a separate skill set from 1 on 1 interaction, which themselves are completely different from writing a technical book.

Part of Joel Spoelsky’s business model is using a web log to garner attention to his business. As a result of this business model, it’s imperative that Joel be able to communicate over a weblob well. However, Joel’s software designs haven’t suddenly gotten better, nor has his documentation suddenly become more accurate.

It may be a necessary skill for a businessman, depending on the business model, but it isn’t generally a necessary skill for a software developer, and when it becomes one, it isn’t because the software developer is able to develop software better, it’s because said software developer is performing a function (most likely business related), outside of software development.

There are positions that require this, but this does not mean all software developers should “better themselves” by improving said skill at the expense of some other skill.

Jeff: Your last post is exactly correct.

Michael: You earlier wrote “You need good communication skills, but you don’t need good writing skills to be a successful software developer.” Kind of says that developers don’t need to be able to communicate, at least in one very important area.

You say 1 on 1 communication is all that matters. What about team meetings? what about presenting what you have done? what you propose to do? Why your solution is the best alternative? You can’t just whiteboard this stuff and rap about it - you have to be able to put your thoughts down in a cohesive way on a sheet of virtual paper.

So, we are going to have to agree to disagree. I think writing skills are essential for a programmer to be able to record their thoughts on a difficult topic and explain to people how that difficulty can be overcome. Most of the really interesting problems in software cannot be solved by hacking it out and drawing on a whiteboard.