I believe there's a healthy balance all programmers need to establish, somewhere between...
I've talked about this a few times already, so I won't belabor the point.
Most programmers are introverts, so they don't usually need any encouragement to run off and spend time alone with their computer. They do it naturally. Left to their own devices, that's all they'd ever do. I don't blame them; computers are a lot more rational than people. That's what attracts most of us to the field. But it is possible to go too far in the other direction, too. It's much rarer, because it bucks the natural introversion of most software developers, but it does happen. Take me, for example. Sometimes I worry that I spend more time talking about programming than actually programming.
At the point when I spend all my time talking about programming, and very little of my time programming, my worst fear has been realized: I've become a pundit. The last thing the world needs is more pundits. Pundits only add ephemeral commentary to the world instead of anything concrete and real. They don't materially participate in the construction of any lasting artifacts; instead, they passively observe other people's work and offer a neverending babbling brook of opinions, criticism, and witty turns of phrase. It's pathetic.
Perhaps that's why I find this blog entry from SEO Black Hat so inspiring:
Do it F***ing Now.Don't wait. Don't procrastinate. The winners in this world are not the ones who find the greatest excuses to put off doing what they know will make them more money. The winners are the ones that prioritize and seize the day.
Create a list of action items to make sure your important tasks get accomplished. Every project you're working on should be in action. If you're not moving, you're standing still. Your next step towards making money must not be "something I'll take care of maybe sometime next week." If it's going to help make you money: Do it F***ing Now.
Some of you may think that you don't need the "f***ing" in "do it f***ing now". You do. You need that impact, that force, that call to action, that kick in the ass to get you moving. Otherwise, you'll end up another loser that had a great idea a long time ago but never did anything about it. Dreamers don't make money. Doers make money. And doers "Do it F***ing Now."
It's like a stiff jolt of heavily caffeinated coffee. It may be a bit too Glengarry Glen Ross for some.
Specifically this speech, and this scene.
Even if it's intentionally over the top, I think this advice applies to programming, too. The best programmers get off their butts. As Cade Roux noted in a comment, the text on the Glengarry Glen Ross blackboard is "Always Be Closing", but we should read it as Always Be Shipping.
It's helpful to discuss features, but sometimes the value of a feature is inversely proportional to how much it has been discussed. Our job as software developers is to deliver features and solve business problems, not to generate neverending discussion. Ultimately, As Marc Andreessen notes, we will be judged by what we-- and our code-- have done, not the meta-discussion that went on around it.
For the background part, I like to see what someone has done. Not been involved in, or been part of, or watched happen, or was hanging around when it happened.I look for something you've done, either in a job or (often better yet) outside of a job. The business you started and ran in high school. The nonprofit you started and ran in college. If you're a programmer: the open source project to which you've made major contributions. Something.
If you can't find anything -- if a candidate has just followed the rules their whole lives, showed up for the right classes and the right tests and the right career opportunities without achieving something distinct and notable, relative to their starting point -- then they probably aren't driven. And you're not going to change them.
Maybe "Do it f***ing now" is too extreme, but at the very least, make sure you spend at least as much of your time doing as discussing. Unfortunately, I can't tell you what the right things are to do. If I knew that, I'd probably be a millionaire by now. You'll have to decide what's actually worth doing yourself.
you are right ... i have no f***ing time to comment this ... i have to f***ing do it now ! ;-)
hacktick on August 1, 2007 10:37 AMNice Article.
John on August 1, 2007 10:45 AMGreat post!
I know that my biggest problem is procrastination. That is the one and only reason why I have so many back-burner projects.
I need to learn to "Do it f***ing now", instead of "Do it f***ing next week", which results in yet another "Do it f***ing next week"... it's a vicious cycle.
Matt F on August 1, 2007 10:51 AM"Unfortunately, I can't tell you what the right things are to do."
Some people would suggest that "anything" is the right thing to do. This article reminds me of Graham's position on startups ... one such snippet (of many):
"For example, in the first couple months a startup may completely redefine their idea. So seed investors usually care less about the idea than the people."[1]
1. http://www.paulgraham.com/startupfunding.html
And that's really the point, isn't it? Ideas are a commodity. Everybody has an idea -- heck, everybody has ten ideas. But they aren't any good to anybody without action. And it's the people who take action who make the million bucks. Making seven figures is mostly about drive and luck, not ideas.
Derek on August 1, 2007 10:52 AMI remember a long time ago, I was sitting in at the computer lab at school right when the web started out. I was querying the domain registar and a WHOLE bunch of interesting domain names were available - buy.com, maybe several others. I considered registering some of them.
There WAS a voice in my mind shouting do it f***** now! but as a broke ass student, the several hundred dollar registration fee dissuaded me.
So now I'm no longer a broke ass student - I'm a broke ass VB coder!
Dave K. on August 1, 2007 11:10 AMI remember a long time ago, I was sitting in at the computer lab at school right when the web started out. I was querying the domain registar and a WHOLE bunch of interesting domain names were available - buy.com, maybe several others. I considered registering some of them.
There WAS a voice in my mind shouting do it f***** now! but as a broke ass student, the several hundred dollar registration fee dissuaded me.
So now I'm no longer a broke ass student - I'm a broke ass VB coder!
Dave K. on August 1, 2007 11:11 AMI wonder if you consider yourself, babbling in a web blog to be creating, or "just another pundit the world doesn't need"
Tomer on August 1, 2007 11:20 AMI built a business model and started to build the software product that fit it, but like so many developers with dreams of doing something in their spare time; realities of job of life ate that up.
Flash forward a year or so and I re-read "Choke" a book by Chuck Palahniuk, which is now consequently being made into a movie. In it is a character who starts bringing rocks home, cleaning them, and building this rock wall. He basically does not have a reason or overall goal other than just building something. That action, in of itself, is really positive.
For me that became my Do it F***ing Now. While I would never approach a work project in that manner, I think when it comes to building good software, sometimes the best idea is to just do it. Just build that "rock wall", so to speak, because its better than not doing it.
If you don't like the stars, I use another slogan...
JFDI - Just Focus and Do It.
It came from some training I had and it really helps drive the task home. Now I'm back to my coding. 8^D I had a project I kept "hypothesizing" in my head about the data design, coding, etc. and it dawned on me that it would be stuck there forever, now I'm plunking out the code and the "super features" will come at the appropriate time.
Sean Patterson on August 1, 2007 11:37 AMI don't really remember where I got it from, but this simple three point list always worked quite well for me:
1. Do it.
2. Do it right.
3. Do it right now.
I actually contemplated this last year at school and I came up with the phrase 'Just sit down and do it,' to inspire myself to just sit down in the chair and write code. Whenever I am thinking I tend to get out of my chair and walk around/fidget, so sitting down and doing it would be the best thing for me.
A friend and I were working on a project, and would just keep telling him to sit down and do it no matter what the problem was. It became a joke between us, but an effective one.
Now I use the phrase for all sorts of things, like exercising, etc.
This reminds me of the song "Dorothy at 40" by the indie rock band Cursive.
"Dreams are all you have.
Dreams have held you back.
Dreamers never live, only dream of it."
> I wonder if you consider yourself, babbling in a web blog to be creating, or "just another pundit the world doesn't need"
That's the very reason I wrote this post.
Jeff Atwood on August 1, 2007 11:58 AMTo developers:
Alway Be Closing == Always Be Shipping
Jeff, at least you're writing interesting articles. That's doing something.
I have trouble kicking the habit of always reading, reading more, reading about another new thing, and not even writing a blog about it, let alone actually doing something with it. And I'm not _quite_ alone, I think.
I remember an article saying that blog comments should be turned off. I think I need to turn off the blogs themselves :-)
Remco on August 1, 2007 12:44 PMThe problem with "just doing it" is some people are too attatched to what they build. Getting over inertia is great but you need to realize that your first few attempts are going to be crap. You can't be afraid to throw it away the first few times you "do it".
CT2 on August 1, 2007 12:59 PM> I believe there's a healthy balance all programmers need to
> establish, somewhere between...
> 1. Locking yourself away in a private office and
> having an intimate dialog with a compiler about
> your program.
> 2. Getting out in public and having an open dialog
> with other human beings about your program.
How about adding:
3. Getting out in public and having an open dialog with other human beings about something that does *NOT* involve programming.
I tell young people not to waste their lives like I did: You're 20 years old: Have lots of sex, party hard, get drunk, hitch hike across country, go to Europe with nothing but a backpack and sleep in youth hostels. You can always go back to school when you're 30 and get your degree.
It's much harder to get your degree when you're 20, and then attempting to live an irresponsible life when you're 30. In fact, doing that when you're 30 is just plain creepy.
David on August 1, 2007 1:11 PMInteresting ... and I guess lately I feel like I have just the opposite problem.
The place that I work is a very high pressure production environment: I am CONSTANTLY writing software just to keep up with a work load that seemingly never has any sort of let off.
One critical project to the next, with support calls in the middle, and new projects being commissioned by the sales folks faster than we can complete them.
In the mix of all this, I feel I have no time to learn "new" things, or to play around with technologies that are growing and moving forward, like more/most of the web programming such as ASP.NET 2.0/AJAX, etc.
It's very, very scary. I'm so worn out at the end of the day, the last thing I want to do, or really can do, is go home and "play around with new programming" -- or even sit to write articles about it.
I've got pain problems in my hands and my arms, and I'm just barely able to make it through a day of having to write code for work, that I wonder when I might be able to go back to a time when I could play around with new things, have fun with them, and talk about different programming techniques and philosophies.
Now, I've got to get back to work...
N on August 1, 2007 1:14 PMLove the GlennGary GlennRoss refernce :)
Overall: good advice for whatever you're doing, not just software or sales. If there's a 'secret' to success, 'doing' is it.
Chris Holmes on August 1, 2007 1:23 PMThis post is a shining example of why I love this blog the way I do. Scoble, I hope you read this. Doubtful.
Chad Paulson on August 1, 2007 1:59 PMThere is no one slogan that will result in success. "Do it f***ing now" is better than most, but it just as often results in wasted effort as quicker results. The real trick is in figuring out what "it" is before you do it. Then, of course, "Do it f***ing now".
Jim Snyder on August 1, 2007 2:18 PMReminds me of the song by Henry Rollins : "Do It"
http://www.artistdirect.com/nad/store/artist/album/0,,156100,00.html
@halcy - I personally wonder if the point of this post was counter to your three-point list of:
1) Do it.
2) Do it right.
3) Do it right now.
I think that this post is stressing the 'Do it' and the 'Do it right now' aspects of your list. So many developers (my team included) get stuck in analysis paralysis in an attempt to 'do it right' that they never actually do it, or they figure out how to 'do it right,' and, by the time that they figure out what they will do, they don't have the time to implement The Solution that they worked out.
I say do it, and do it right now. Sure, try not to f*** it up, but the lack of movement that comes from ensuring that you do it right can kill a project. And, chances are, one you start doing it you will find that your impression of how to do it right is off-base anyways, and you have to make changes mid-course.
gemils on August 1, 2007 2:29 PM"Simply creating code that works and only does what I need it to really helps to move things ahead."
http://www.codinghorror.com/blog/archives/000696.html
Jeff Atwood on August 1, 2007 2:50 PMCrap, now I have to quit this silly assed programming thing and pony up the money for that patent!
Brad on August 1, 2007 3:10 PMOh, so *now* you're happy to take advice from a dirty SEO "pornographer".
http://www.codinghorror.com/blog/archives/000835.html
Andrew on August 1, 2007 3:25 PMwell, stop reading this blog and go and do it then!
rob on August 1, 2007 3:38 PMWhile working in operations at MSN on Search, I found that this attitude lead to rollouts every day, an ignorance of rollout embargos, lack of time for QA to do their job properly and a whole mess of cavalier attitude towards quality in general. Not to mention a lot of blame placed on overworked operations people.
While I agree with the "DO IT FU**ING NOW" attitude in a broad sense, in the world of software development, particularly that for web applications the "DO IT" should refer to every step in the process, not just the ones we LIKE to do and if we didn't do our part right, we shouldn't force it out the door "RIGHT FU**ING NOW" or else we are only "FU**ING" our users.
Tracy Peterson on August 1, 2007 3:55 PM> *now* you're happy to take advice from a dirty SEO "pornographer".
Some pornographers provide good advice, at times..
http://en.wikipedia.org/wiki/Larry_Flynt
Jeff Atwood on August 1, 2007 4:43 PMA coworker forwarded me this parody of that Glengarry Glen Ross scene on SNL (performed by Alec Baldwin no less)
http://www.youtube.com/watch?v=UYXIatD3RvE
Jeff Atwood on August 1, 2007 5:15 PMthat glengarry glen ross speech is a classic!
what a horrible man, makes you want to spit in his face.
sometimes a little thoughtful pause or discussion can save a week of bad coding.
if the advice was "Always Be Coding" -- i'd say no -- always be thinking.
nice topic Jeff -- hits a nerve!
lb
lb on August 1, 2007 5:16 PMThis was just the kick in the pants I needed - along with the sight of Alec Baldwin's brass balls.
Jarrod on August 1, 2007 5:23 PMHonestly, I think I have to disagree here. I know a lot of "action people" and if the world was left to them it wouldn't be standing. Getting it done is a good thing, but getting it right is better. Often, you can save huge amounts of time and effort if you just spend a little bit more time thinking about it. I've always preferred the phrase "work smarter, not harder".
A side point: it doesn't seem like many of the people who are the most famous for programming got famous while programming. Marc is off a bit, I think; it is more likely that someone else will be judged by what our code has done :-)
Paul.
Paul W Homer on August 1, 2007 6:29 PMPaul, you're right:
http://www.codinghorror.com/blog/archives/000543.html
This falls into the category of "you'll have to decide what's worth doing for yourself."
Jeff Atwood on August 1, 2007 7:14 PMDarn! I'm actually turning into a pundit myself (except I do 3D animation as well as programming)
Dion Moult on August 1, 2007 7:14 PMTo those who say "do it right" is just as important, think again. What's more important IMO is to "do it" and "do it right now" on the *first* working prototype. Why? Because, "a man only knows how to build a house once he's done".
I firmly believe that first version that simply gets the job done is extremely important. Then, throw it away. The second version should then be designed with the "do it right" mentality. The first version solved a lot of problems, but created a number of its own. The second run at it should be able to address all of those or work around them nicely.
If you have an idea for something on the web, make sure you understand that time to market is the only advantage you have. The barrier to entry in a large number of areas is almost zero (a domain, cheap hosting space, and some web code). Get that first version out there, see what works and what doesn't, and build the second version using the best design possible.
BG on August 1, 2007 7:58 PMPG say always be "producing".
Paul Grahama (not) on August 1, 2007 8:24 PMCoffee is for closers.
Brandon on August 1, 2007 8:36 PMGreat post Jeff.
JLeCours on August 1, 2007 10:03 PMI am thinking about commenting on this :O
Matt Horn on August 1, 2007 10:12 PMThis post just adds more to the articles Ive read the last few days about developing. The most interesting one was by the scientific ninja:
He stated that it does not matter if your first attempt to write something is completely right. You just write a little something that works well for the current problem, and then you extend it. If it doesnt work anymore, you go into refactoring the thing until it works for the new problems.
It *is* quite a turnaround from what they tell you at universities like *plan, a non-planned software wont work* and stuff, but in fact, atm I just get better results just doing the damn thing and looking for problems if the product wants the problems instead of the other way around. :)
Thus, yes, I can only agree to that entry, grab your your coding toolbox left and your refactoring toolbox right and just build a thingie until it breaks.
Hk on August 1, 2007 11:22 PMThat reminds me of Martin Luther King Jr.:
Faith is taking the first step, even when you don%uFFFDt see the whole staircase.
Great article!!! Do it now or f**k it! ;)
Blaz on August 2, 2007 4:49 AMHow am I supposed to do it f***ing now ? I'm busy fighting software imprinting !
blah on August 2, 2007 6:13 AMI think the real key to being the best programmer you can be is a combination of balance and focus. Balance in life is important so that focus is possible. Burnout kills the ability to focus, so while a coding binge can be very productive in the short term, the burnout after will offset that productivity tenfold in the following days. (sometimes it's neccessary) When it's time for work, focus on the task in front of you and let nothing distract you. Now, that's not as easy as it sounds - even for a true geek that loves to program! It's bad enough to have a bunch of talkative people around you, but what's worse is the internet! Imagine being a programmer 20 years ago. You login to your computer, which is likely not connected to anything. All you have in front of you is your work. Furthermore, back in the day you couldn't slouch around coding with the JDK or .net framework... You had to really know your sh*t and get a lot done to do simple tasks!
The other day I disconnected myself from the internet to see if I could do my job without it. Surprisingly, I could do amost everything because I have my webserver and databases running locally. One funny thing I noticed is that I kept going to the Browser/Mail shortcuts in my quick launch bar. It's amazing how addicted I am to email, news, blogs, and the internet. I must waste hours every day on that crap. What the hell am I doing here! I'm supposed to be working. AHHHH!
Jeff, great article as usual. One thing though, we need Pundits. your description of a Pundits is quite accurate.
But
A pundit serves almost like a "fluffer." While they don't do anything themselves, they provide the background noise that may inspire DOers.
Btw I'm redoing my site, will need your critics soon.
Jin on August 2, 2007 9:48 AMGreat article!!! Let's get out of the Uber ivory tower and down in the trenches!
My first job out of college we spent days talking about the open source revoloution and how it applies to java. We should have just been building software and maybe people wouldn't have lost their jobs.
Code for fun and profit!!!
kebagami on August 2, 2007 9:55 AMDo or do not. There is no try.
Yoda on August 2, 2007 10:41 AMOr as Steve Jobs said:
"Real artists ship"
I guess that's why the rumors say he can chew you up and spit you out quickly and easily. He probably has no patience or sympathy for people who "talk a good game," but don't have a track record of accomplishments to go with it.
mj1531 on August 2, 2007 11:38 AM> A pundit serves almost like a "fluffer."
A disgustingly apt simile..
Jeff Atwood on August 2, 2007 11:43 AMGreat Post !! Heard the advice a million times before... but the word "f**king" really DOES add that little impact.
Raseel on August 2, 2007 12:06 PMSounds simmilar to the worse advice i was ever given as a jr programmer:
"You can do it right or you can get it done. Get it done."
brian on August 2, 2007 2:36 PMThis hits home. Strangely enough, I got sh*t done today in programming. But I got something done in an area completely unrelated to get motivated first. I'm gonna blog about it now.
I've deployed about 15 incremental releases of our software this year. I guess I rock.
foobar on August 2, 2007 11:53 PMIt's the same paradigm as "Be happy right now! Not tomorrow". And I follow this rule every day.
Don't think you'll be happy tomorrow when you buy a car or a house.
Be happy today! Don't worry.
Happy Programmer.
Vladas on August 3, 2007 12:27 AMAnother paradigm:
Think twice. Tell friends. Speak out. Then do it ones...
Vladas on August 3, 2007 12:45 AMYes, you pundit ;)
Blabbering impresses yourself first.
But if I'm so busy programming I won't have time to read your blog...
Billkamm on August 3, 2007 6:05 AMWhy the asterisks?? Say what you mean!
steve on August 3, 2007 7:51 AMFast, cheap, functional. Choose two.
or
You want it right or you want it Tuesday? Choose one.
Oh yes, the problem with not doing it now. I can't say it's purely procrastination for me. I sometimes get hyped up on a new idea, and I can't code with all those endorphins running through me.
I also agree about being an introvert. I can pound away at a keyboard for hours by myself and might even come up with something that works. The part that's bad for me is working with others. That's always difficult.
And in response to Dave (if I remember the name correctly), I don't regret having been a 20-year-old programmer. I'm not the least bit extroverted. I'm not a partier, hitch-hiking sounds like something I wouldn't want to do, and I don't even know how to have a lot of sex (with other people, that is). If I talk about anything, you know it's going to be either geeky--programming, web standards, Star Trek, James Bond movies, politics, languages, science and how things work, etc--or about how horrible my experiences in the outside world have been. People don't like me and I can live without them, thanks to my full-time hobby I have here.
Keith on August 3, 2007 3:32 PMI read this blog entry and thought "Crap, what am I doing with my life? I don't want to end up like this guy."
Then I read David's comment, and remembered what I am doing with my life...
Ramiro Polla
Ramiro Polla on August 3, 2007 10:28 PMSome people have bad attitudes, some have can-do attitudes (I can do it if everything lines up for me), while others have what I like to call a WILL-do attitude. They will do whatever it takes - regardless of the obstacles - to be successful, get the job done, yada, yada.
Lauence Diamond on August 5, 2007 1:02 AMNow I ralize people might see this differently, but for me, "Do it right" simply means one thing: Do not sacrifice maintainability in the name of getting stuff done faster.
Sure, you might get something out of the door in less time that way, but generally, correcting design flaws later on (Especially with people already using your code) will be a major pain in the ass, and in the end, you will end up spending more time on something than if you had just given it a little thought beforehand or if you had just thrown out your codebase and started over. That's not to encourage Duke-Nukem-Forever style perfectionism, but if you do at some point realize that the way you are doing things is clearly flawed, don't try to hack around it: Go back and do it right.
Remember: You _will_ spend more time supporting your app than initially writing it. Don't make your life harder than you have to.
halcy on August 6, 2007 6:01 AMLove these tough talk sequences, but they don't tell you *what* or *how* to do much of anything. ;) However, it's good advice to get people moving in the right direction.
DML on August 6, 2007 9:15 AMlove it
My company loves to swirl endlessly in what Steve McConnel calls the "fuzzy front end" of projects. We do much better when we dive in and deliver, even if the first delivery is off what the users really want. By the second iteration, we're almost always really, really close.
After months and months of fuzzy front end, we still end up with the first iteration being not even close, and the second quite a bit closer. So what's the point of all those endless discussions, anyway? Keep BAs employed?
A parallel that I've carried with me since first working in technology in a production environment:
1. Make it work.
2. Make it work right.
3. Make it work better.
... but first, make it work.
Also, I'm surprised no one has referenced the phrase "do the smallest thing that moves the needle," which is how I've most frequently heard it expressed in and around the Valley.
Jim on August 7, 2007 5:14 AMIts better to make the specification before doing the thing, because that way you at least have some time to think before implementing. Plus you get the specification that lets you see what you were supposed to be doing.
Don on August 7, 2007 8:21 AMMitch & Murray said they won't release the Glengarry leads until we have some sales with the existing leads.
All I've got left is Bruce and Harriett Nyborg.
Anyone want to trade?
Antiventurecapital on August 9, 2007 10:21 PMAnd now there's http://www.youtube.com/watch?v=QipAqdomO3I
(via http://blog.pmarca.com/2007/10/i-love-this-fil.html)
| Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved. |