October 23, 2006
Ian Landsman's 10 tips for moving from programmer to entrepreneur is excellent advice. Even if you have no intention of becoming an entrepreneur.
One of the biggest issues I see is developers getting caught up in the code. Spending countless hours making a function perfect or building features which show off the latest technology. Now you have to write code to be in the software business. It has to be high quality code that isn't filled with bugs or is insecure. However, the best code in the world is meaningless if nobody knows about your product. Code is meaningless if the IRS comes and throws you in jail because you didn't do your taxes. Code is meaningless if you get sued because you didn't bother having a software license created by a lawyer.
Software developers love code. But we're biased. And we write less of it than we think we do. We spend far more time understanding code than writing it.
Anyway, as Ian points out, the importance of the code we do write is absolutely dwarfed by everything else that goes on around it. Raise your hand if you've ever poured your heart and soul into an application that never shipped. I know I have. And that's just the tip of the iceberg; there are hundreds of reasons the code you write may have zero impact on the world. If nobody knows about your code, if nobody can understand your code, if for whatever reason your code doesn't even ship.. then have you really accomplished anything by writing that code?
Maybe the best way to succeed as a programmer is to cut out the low value activities entirely and stop writing code altogether. Steve Yegge explains:
Do you have any programming heroes? I do! Oddly enough, though, I've never really seen much of their code. Most of the famous-ish programmers I respect have actually made their impact on me through writing, and it's usually just prose, with maybe a little code interspersed.
There are programmers I admire who've built things that I use a lot. But when I try to come up with a list of programmers I admire (and I specifically mean people I don't know personally), I find they almost always fall into one (or both) of just two categories:
- People who wrote a useful programming language, an operating system, or an especially important framework.
- People who wrote a really neat book about programming.
When someone builds a framework -- any environment that we live in and actually enjoy programming in -- and there's one person who's chiefly identifiable as the primary author of that framework, then I think we tend to admire that person, and unlike other programmers, the person starts to become famous.
Even if they're a crappy programmer.
Not that we'd really know, because how often do we go look at the source code for the frameworks we use? How much time have you spent examining the source code of your favorite programming language's compiler, interpreter or VM? And by the time such systems reach sufficient size and usefulness, how much of that code was actually penned by the original author?
Am I really telling developers to stop writing code? No, not really. Developers are already good at writing code. It's why they became software developers in the first place. Writing reams of code just digs you deeper into an already deeply specialized skill. What I am proposing is that we spend less time coding and more time developing skills in other areas that complement our coding skills. Become a better writer. Become a better speaker. Improve your personal skills. Participate in the community. Try to spend some time talking to people instead of the compiler. That's how you distinguish yourself from your peers. And that's ultimately how you become a better software developer, too.
Of course, this isn't a zero-sum game. You can have it both ways. Ideally, you'd write code, and then write or talk about the code in a way that inspires and illuminates other people. But we don't have an infinite amount of time, either. If you have to choose between writing code and writing about code, remember which side of the equation is more important-- and balance accordingly.
Posted by Jeff Atwood
This blog has jumped the shark.
Nothing is more fun than coding, than creating something which didn't exist before and making something happen which couldn't happen before. That essential joy of creation is what makes coding fun.
If you want to make lots of money, be famous, get girls, whatever, then don't become a programmer. But if you enjoy coding, then programming is where it is at. Still.
In his book "The Millionaire Mind," Thomas J. Stanley talks about the personality traits that cause people to not only succeed, but build vast amounts of wealth. Your post hits the nail on the head. Those who are primarily technical (nose in the compiler) often do ok in terms of income, but never move ahead. It is those who develop the people and leadership skills who build businesses and move ahead in terms of wealth.
An EXCELLENT article. Thanks so much !
Become a Swiss Army Knife
I don't agree with the premise of improvement of weaknesses. I like the premise of enhancing talent and being aware of weaknesses. Like Sun Tzu said:
If you know yourself and your enemy, you need not fear the result of a hundred battles,
If you know yourself and not the enemy you will loose 50% of the time.
If you know neither you will always loose.
“know yourself” doesn’t mean go learn everything and become a Swiss Army Knife.
"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."
Pray tell, how does that differ from today?
Dan Lawson, surprisingly enough, I have a 1948 Scientific American making nearly the exact same claim ("We will soon reach the point where like in Star Trek we use natural language processing to interact with the computer."), and while the latest version of dragon naturally speaking is quite useful for writing documents and running some tasks, natural language is very bad at the sort of black and white determinism computers need. Unless you want to introduce a bunch of "RAND .67" to simulate human judgement. :p
Any number of things can make someone better at their job and a more fulfilled being, but there are some people for whom nothing but coding is fulfilling. That's why there are technical writers, QA engineers, and user interaction specialists. 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.
"Raise your hand if you've ever poured your heart and soul into an application that never shipped"
Kinda like saying sh*t happens.
applications that never ship happens.
I think that unfortunately in our world it is the person that talks the most that always gets the attention, but to go as far as to say that's more important is wrong.
What we should do is start to challenge all the "media" hype (because that's what it really is) and finally start to create a world where people that actually do the work get the most attention.
It really isn't impossible although it sounds idealistic.
Aaaah, people with dreams: "start to create a world where people that actually do the work get the most attention". Not dreams I would subscribe to though.
Nobody remembers the people who actually BUILT the pyramids. Some people might remember the king they were built for (I think they named a condom after him so even in death he's 99.9% effective - why did that condom fail, laments Tim's mom). In WWII, few people remember the "The Desert Private" but many remember Erwin Rommel, "The Desert Fox". Few people remember Joey Kilroy, PFC in 3rd Army but many remember George S. "Slap the whiney little children of unwed parents until your gloves wear thin" Patton.
History NEVER remembers those who do the work nor should it. There are always tons of people who can do the work. What history remembers, and what Mr. Atwood is referring to, are those few who have the skill and talent to rise above "the work" and marshall together the forces, ideas, strategies, what-have-yous that move and shake the world.
If you are happy doing code, so be it. Don't expect those around you to pay homage to you or quote your "(for i = 0; i MAX_CAREER_LEVEL; i++)" as poetry gifted from the gods. Those who get the credit are those who understand the importance of why there is a MAX_CAREER_LEVEL and how to rise above it (OK, I over-simplify but I'm on my second glass of whisky, fourth night of insufficient sleep and the yammering of the cockroaches won't allow me any rest). Those who can bring manage the complexity without constraining the model to the point where it is irrelevant are the ones that history will and should remember - the Ramses, the Xerxes (no prophylactic there), the Hannibals, the Rommels, the Pattons, the Gates (cringe), the Elisons ...
Sorry, in that last sentence I brought an extra bring. I hate it when I do that.
Sure what's the point in writing great code if it never ships or nobody ever knows about it. I often read good arguments that coders should become better writers, salesmen or business people, but the problem with that argument is that it misses two important points:
First is that often the reason people become coders is because they are much stronger dealing with abstract ideas than with other humans. It's widely noted that often the best coders are boderline autistic and in a way it's great that there is such a job as 'programmer' that means lots of these people can earn a good living without having too much painfull interaction with other humans:)
Secondly is the complexity of modern society that demands deep specialisation. I have enough trouble just keeping up with what's going on in the world of .net development, let alone other languages and platforms. There's simply no way that I've got enough mental bandwidth to be a great lawyer or salesman too. So sure it's good to be at least dimly aware of the reason why you're writing that code, but I expect for the vast majority of corporate developers, the reason they're writing that code is because their boss told them to.
Now, if you do have the mental bandwidth to be a great lawyer salesman and programmer, then you'll probably end up being very successfull anyway. One reads stories of Bill Gates out legalling (is that a word?) his lawyers and he's obviously a great salesman too, but I think for most of us lumpen programmeren just keeping up with our corner of the coding world is probably work enough.
care not for your money or business or fame, just code for me please, as long as i can pay my rent etc. that'll do just dandy for me.
Difficulty ((Motivation + Value) * (Action + Thought)) ? Success:Failure;
Fully agree with you. By some chance I was away from coding since last one year - mostly presenting, documenting and interacting with managers and mentoring. I feel exactly the same what you opined here.
I noticed that balancing the coding skills with other skills will also help you to keep your job more secure. Too often it is because we cannot express is why our code is not highlighted our ideas are not bought.
Balance...Balance...is so difficult and also so rewarding.
This gets old after a while. Programmers should be great speakers, great salesman, great lovers, and coincidentally, we should also get in touch with our feminine side (or masculine side for the women).
If everyone were great speakers, salesman, and lovers, what we'd have are no significant demand for speakers or salesman, as well as a lot of happy people.
You could just as easily flip it and say that business people should learn how to code, but then, would they be business people any longer?
You need good communication skills, but you *don't* need good writing skills to be a successful software developer. You may as well say that Nurses "Sanitation Engineers" also need great writing skills because they may blog about it.
If we had 100 other Spoelskie's, then Joel would be nothing, and he would have to come up with something else that differentiates himself from everyone else.
You only need the skills of a businessman if you plan on being a businessman. Some do, some don't, it's as simple as that.
I'm not against programming. I like programming and debugging and tinkering and hacking. I just don't believe we're going to be able to compete with the automated systems we create at the system through interface programming levels for much longer.
The cpu horse power to do the processing is available. Engineering a programmer is what a programming language's compiler does all the time. What is to stop a linguistics expert from translating their knowledge of linguistics to do automated translations. Nothing, it's already been done. There was a voice system product years ago that was pulled off the market rather abrubtly that was a fully automated voice interactive person operater and scheduler. It even synced with you outlook. They didn't invent anything new. They just ran the product off a mainframe.
It's very clear to me that you only need a very rudimentary automated natural language programmer to build a very complex automated natural language programmer.
I would guess that the software needed to implement such an automated system is already available. But much like TiddlyWiki it only takes one lone hacker to put together a solution that works.
Well, I think you (Jeff) are right, though it does not apply to all cases. I only write code because I like to, and there's no need for me to make any profit with code, so I don't try to finish large projects.
Sometimes I code for others though, usually PHP (guestbooks, content management systems, poll systems ...), and it seems that people do know I am a coder, and that is enough for me.
Well, I'll see when code begins to matter (ie. when I need to provide myself with an income).
I think a lot of people are taking this to one extreme or the other. I think the overall point of the post is that you should not rely on coding skill alone to get your work recognized and appreciated. I don't think Jeff is advocating us all becoming accomplished writers but sometimes you spend so much time working on and learning about code you forget to take a break and improve yourself in other ways that are just as importent to what you do. At my company many people come to me when they have an issue because they say that they are not able to communicate with the other programmers.
It could be attributed wonky syntax; but if it were really true that hardware horsepower has reached the level of removing the barriers, Prolog would reign supreme. When it became clear that it wasn't happening, the blame was put on lacking computers. And it could be that declarative logical languages don't fit humans as well as some think.
SQL is both declarative and logical (and the relational database predates Prolog by a couple of years), and avoided even by (many of) those who profess to be database developers. They'd rather load up the application language, be it COBOL or C.
Absolutely--I'm looking to avoid the labeling of programmers being incapable of communicating their work, and communicating with the general public. Good topic, very important.
Since when did I need to be a businessman in order to be a great software developer?
Honestly, very few people are really so far into coding that they have no other interests. What it really comes down to are a few hundred bloggers who think you should know how to write well because it's what they do, or a few programmers turned businessmen who think you should you should do like them and learn marketing, business planning, etc.
I love working out, should I tell them that they need to be squatting *atleast* 450lbs in order to be a geat software developer?
Software development requires certain skills, but marketing great writing isn't one of them.
You can be balanced without being a writer, or a businessman. It gets irritating to constantly hear people tell you that you should be "just like them".
Noone is arguing against balance, but maybe you're not as balanced as you think you are.
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.
I really like it.Its reality.
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 really admit your writing style, nice job keep it up...
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. :)
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...:D
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.
by improving said skill at the expense of some other skill.
Improved communication skills can only *amplify* your other skills. It doesn't harm them.
I absolutely agree. Consider that Jimi Hendrix, Stevie Ray Vaughan, and Eddie Van Halen are 3 great examples of guitar players who were excellent players. Whether you agree or disagree with this statement is really not important. But, stop to consider that you probably would never have heard of any of them if they had never written any songs to showcase their talents. The music world is full of great instrumentalists, and I could name many more talented guitar players than these 3, but these 3 guys wrote somgs that got popular and people noticed them as guitar players because of the songs.
Great analogy Chuck!
"I gotta remember that one ...", I mumbled as impending senility sliced another five memories from my mind.
Tim, I don't disagree with you about communication, which makes me feel like we're talking right past each other.
I don't believe writing a technical book on C++ is going to make you more skilled at creating readable flow charts, UML Diagrams, etc, nor do I believe that blogging about the subject will be any better.
You obviously do, so I'm going to drop it.
I fully agree with Jeff Atwood in what he says. My perception of what Mr.Atwood has referred to is this: A programmer can be a better and "important" human being (which includes him being a better and important
programmer) by exercising skills other than coding. I remember my first few days of learning Java. Classes, Objects, polymorphism, what not. It did not occur to me how to start coding a simple class with the main method. I was blank. All hopes vanished and I knowingly quit the idea of coding in Java. That was 7 years ago. Now I have got over 6 years of experience in Java with a Sun certification. All I need to tell is that although I quit Java, I continued communicating with and understanding people and objects around me. The next day I found myself trying to think whether the person I talked to the last day was an object. Yes it was. An object named Shantanu. Did it have properties which matched mine? Disappointingly yes, but yes. That made a class out of us, Human.
The rest is history. When a programmer or an aspirant talks to people, socializes, he learns and makes people learn and the growth he attains is 360degree. He not only acquires knowledge but creates knowledge. This forum has seen people denying Jeff's suggestion that "we spend less time coding and more time developing skills in other areas that complement our coding skills". He never asked us to forget coding. Come on, that's our bread and butter, at least for me it is. I perceive that he is pointing towards a Paradigm Shift. A thinking which would enable us to be smart developers, being smart would help us cut on our development times, times that we could spend in closer-to-life activities, times which our parents, wives, children would love to spend with us, times which would help us to socialize and be a better and important human.
The cycle goes on buddy, the cycle goes on.
You got my point Don. But then, even if I wanted to learn from textbooks, am sure learning from people around me would have still been much more wonderful. Coz I feel people offer you a lot more scope to learn than textbooks do. A person is a textbook which replies you back, argues you. Anyways, coming on to what you say about programmer being a programmer and a designer a designer, it is the best as you suggest. They have to, infact I say they HAVE to do what they are sent into this world for. Except for those multi-talented Da Vincis who can adopt two or more professions at a time. But cannot a programmer be a better social human being in a way which not only is better for himself, as well as for the whole society? Cannot he learn tap-dance in the evenings and learn the value of the timely tap which may teach him how every second counts when he is doing multi-threaded programming? That might sound a bit far-fetched but what I wanted to say is just that one of the ways to learn programming or be better in programming lies in the world outside. To quote myself again - "When a programmer or an aspirant talks to people, socializes, he learns and makes people learn and the growth he attains is 360degree. He not only acquires knowledge but creates knowledge."
Question for the general community here. Jeff opens up the conversation about a programmer. I think of a programmer as some one who codes and does some design and development.
When I think in terms of what Jeff talks about, it implies someone who is looking to be more than the backroom coder.
Jeff and all, is that your definition of programmer and is that all that you want or are you looking to be more than that?
This is People Networking. Just like Rajesh Setty talks about in http://www.lifebeyondcode.com. Code the greatest app in the world, if knows about it or you then it was a great adventure and puzzle but there is no pay off.
You don't have to be the greatest sales person, nor the most charming and engaging person out there, but getting involved in the community and talking to people other than your fellow techies will bring you and your work to a higher level.
I think that Jeff's underlying point is that programmers need to have good communication skills. It's the same point that Joel Spolsky makes, and Alex P (TDWTF), and basically every other programmer who's taken seriously by the community. And that's kind of the point - if you want to be taken seriously by the community, you have to be able to communicate with it, and said individuals ipso facto recognize the necessity of communication and will advocate it as a skill.
Nobody said anything about bench pressing or marketing or sex (although I hope for your own sake that the last one isn't a problem). But business sense and communication skills are different. You need business sense because software is largely about tradeoffs, and you need communication skills because software development is also largely about understanding the requirements.
It's not just about the development process either. Not everyone's got a marketing department. Sometimes you're an internal developer and you have to justify your employment - nobody's going to help you there. Or maybe you're a consultant or entrepeneur, in which case you ARE the marketing department and need to be able to establish a reputation. Unless you're the lowest-level wage-slave, there's probably going to be some point where you have to "sell" your work, even if it's not in the literal sense. It helps to know how.
Coders code, managers manage. If a good coder is forgotten, then the coder forgets the project.
Selling yourself in order to get a better position is just disgusting.
Like in Star Trek, for example: There is a star ship operator that obeys an admiral. Admiral: "Take the ship to Alpha 58 section. Make it so!" Ship operator: "Route to Alpha 58 section set. Engines start! Aaaand, by the way, I am the BEST ship operator around in fifty space sections, if you didn't know!"
Admiral and everybody else in the room looks the operator and wonders is everything ok...
Then later in the evening when the admiral and the operator are alone in a corridor, the operator whispers: "By the way, did I mention that I also manage ONE HUNDRED other kinds of travelling modes!!!1!11". The admiral looks the operator and thinks is everything ok...
You could have learned objects and classes from a textbook, too. Somehow you needed people around to understand it, but it is not necessary. Of course you can learn a lot from other people. But in the end, some code must be done. If there is a company where there are programmers and designers, then they do their works separately. Surely if these two communicate with each other, they will share their points of views. If the programmer also designs, he knows designing besides programming. If the programmer also runs tests, then he knows testing too. If the programmer creates ads, then he knows some marketing too. But I think that there are great programmers and great sales person, and there is no point in that a programmer does marketing. The programmer will never be a great sales person, and meanwhile there is some programming to do. Also this goes with great designer and great tester. Life is short.
There are different kinds of programmers. There are those, who can do really tricky algorithms, that solve some hard mathematical calculations. Then there are programmers who program easier and more general-like software.
If a programmer wants to be a good algorithm programmer, then he studies math, code optimization, and time consumption stuff. If a programmer wants to be a general software programmer, then he studies object oriented languages, graphical user interfaces, and maybe usability.
If a programmer does not know, what he wants to become, then he might just drift around and do whatever he is told to do. A difter might not be interested in any programming issues, he just tries to cope with any task he is given. But some drifters might be interested in some issues, or a drifter might specialize in something just randomly, because of the situation at hand.
Then a programmer should know how to interpret design documents. And a designer should know how to design programmable and good designs. Usually a good designer is also at least a fair programmer.
If a programmer is some one in a corner of an office and that programmer's task is to maintain some code, how that programmer can ever be like super popular guy above the code? There is no way, I think. Unless this programmer comes out of the corner and wants to be in some difficult pioneering project with good team, and then having lots of communication with the team and other people.
But, we need also the programmers who just do their jobs instead of running after fame and name. Still this "I am just working here -programmer" can be a good programmer. I think that more important than being above the code is to be really good in what ever you do.