I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

August 24, 2006

The Programmer's Bill of Rights

It's unbelievable to me that a company would pay a developer $60-$100k in salary, yet cripple him or her with terrible working conditions and crusty hand-me-down hardware. This makes no business sense whatsoever. And yet I see it all the time. It's shocking how many companies still don't provide software developers with the essential things they need to succeed.

I propose we adopt a Programmer's Bill of Rights, protecting the rights of programmers by preventing companies from denying them the fundamentals they need to be successful.

The Bill of Rights

  1. Every programmer shall have two monitors

    With the crashing prices of LCDs and the ubiquity of dual-output video cards, you'd be crazy to limit your developers to a single screen. The productivity benefits of doubling your desktop are well documented by now. If you want to maximize developer productivity, make sure each developer has two monitors.

  2. Every programmer shall have a fast PC

    Developers are required to run a lot of software to get their jobs done: development environments, database engines, web servers, virtual machines, and so forth. Running all this software requires a fast PC with lots of memory. The faster a developer's PC is, the faster they can cycle through debug and compile cycles. You'd be foolish to pay the extortionist prices for the extreme top of the current performance heap-- but always make sure you're buying near the top end. Outfit your developers with fast PCs that have lots of memory. Time spent staring at a progress bar is wasted time.

  3. Every programmer shall have their choice of mouse and keyboard

    In college, I ran a painting business. Every painter I hired had to buy their own brushes. This was one of the first things I learned. Throwing a standard brush at new painters didn't work. The "company" brushes were quickly neglected and degenerated into a state of disrepair. But painters who bought their own brushes took care of them. Painters who bought their own brushes learned to appreciate the difference between the professional $20 brush they owned and cheap disposable dollar store brushes. Having their own brush engendered a sense of enduring responsibility and craftsmanship. Programmers should have the same relationship with their mouse and keyboard-- they are the essential, workaday tools we use to practice our craft and should be treated as such.

  4. Every programmer shall have a comfortable chair

    Let's face it. We make our livings largely by sitting on our butts for 8 hours a day. Why not spend that 8 hours in a comfortable, well-designed chair? Give developers chairs that make sitting for 8 hours not just tolerable, but enjoyable. Sure, you hire developers primarily for their giant brains, but don't forget your developers' other assets.

  5. Every programmer shall have a fast internet connection

    Good programmers never write what they can steal. And the internet is the best conduit for stolen material ever invented. I'm all for books, but it's hard to imagine getting any work done without fast, responsive internet searches at my fingertips.

  6. Every programmer shall have quiet working conditions

    Programming requires focused mental concentration. Programmers cannot work effectively in an interrupt-driven environment. Make sure your working environment protects your programmers' flow state, otherwise they'll waste most of their time bouncing back and forth between distractions.

The few basic rights we're asking for are easy. They aren't extravagant demands. They're fundamental to the quality of work life for a software developer. If the company you work for isn't getting it right, making it right is neither expensive nor difficult. Demand your rights as a programmer! And remember: you can either change your company, or you can change your company.

Posted by Jeff Atwood    View blog reactions

 

« Coding Horror Sightings How to Write Technical Documentation »

 

Comments

That is fantastic. This should be on a t-shirt or something. :)

I like how the URL for this post ends in "/000666.html". I wonder what the meaning of that is.

Petro Verkhogliad on August 25, 2006 01:51 PM

Is there any reason that this list should be limited to programmers and not everyone else also who works with code and computers?

mike on August 25, 2006 02:01 PM

There was a day when unlimited smokes and coffee would have made this list, but I date myself.

doug on August 25, 2006 02:05 PM

7. (proposed) Every programmer shall have the power to do the job right.

8. (proposed) Every programmer shall have the most powerful tools available for the chosen environment, and for that matter some say in the environment used.

9. (proposed) Every programmer shall have access to reasonable support tools (including but not limited to: source control, automated unit testing, nightly build scripts, etc.)

Joshua Volz on August 25, 2006 02:22 PM

I agree 100%

Jonas on August 25, 2006 02:25 PM

A great list, but I must challenge #6 - quiet working conditions drive me crazy. I have to have music going or it freaks me out.

I must also have stuff to play with in my office space or, again, it drives me nuts. We all need a good recess every several hours. Myself, I prefer LEGOs.
http://www.morningtoast.com/feature/home_away_from_home/

But thankfully, my employer seems to believe in the Programmer Bill of Rights. I have two screen, a fast PC, speedy internet, I got to pick my keyword+mouse, and I sit in a nice comfy chair.

Brian on August 25, 2006 02:29 PM

>Every programmer shall have a fast PC

Sometimes I wonder about this one. As I watch Visual Studio 2005 take a dog's age to launch on my PC, I wonder if MS shouldn't have given their developers SLOWER machines.

Kevin Dente on August 25, 2006 02:45 PM

Brian, I think he means "the choice of quiet working conditions". I too love the headphones blaring most of the time, but having the control over it when I need to really cut off my external inputs is important to me too.

Sometimes at work I wear my headphones with no music just to keep the distractions to a minimum and deaden any conversations around me.

Andre Torrez on August 25, 2006 02:45 PM

re:
8. (proposed)

i'd settle for being allowed to use the editor of my choice: vi. i do despise most IDEs.

Buggy Fun Bunny on August 25, 2006 02:48 PM

I think a lot of the proposed additions could be summarized thusly:

8: Every program shall have access to the right tools.

Jason on August 25, 2006 02:53 PM

Another proposal:

Every programmer shall not be subjected to the requirements of the corporate uniform.

or to put it another way:

Every programmer shall be allowed to wear comfortable clothing of their choice.

Chris Lively on August 25, 2006 03:10 PM

Some of these could be summarized in a "one rule pack" that reads:

Every programmer should be able to work anywhere in the world, though a fast VPN, and not in cubicles.. ;)

Martin Marconcini on August 25, 2006 03:30 PM

Don't forget good development tools... It surprises me how many companies are still using gdb for debugging, when there are much better commercial tools out there.

Jason on August 25, 2006 03:38 PM

I prefer these bills of rights:
http://c2.com/cgi/wiki?DeveloperBillOfRights
http://c2.com/cgi/wiki?CustomerBillOfRights

Jeremy Dunck on August 25, 2006 03:58 PM

Jeremy, those are great links, but they're very different animals.

My "Bill of Rights" is about basic working conditions *only*. That's why it could apply to OSX, Linux, or Windows developers working in any language, using *any* methodology, not just agile.

> Don't forget good development tools

This is also why I didn't comment on tools; the choice of software development tools is not only a religious issue, it's clearly higher level than having the core BASICS: a fast internet connection, a fast pc, and a quiet workspace.

Jeff Atwood on August 25, 2006 04:07 PM

Since almost all companies have little idea on what makes a great environment for a programmer, you are better off watching the movie "Office Space" and then figuring out what you'd do if you had a million dollars.

Steve on August 25, 2006 04:09 PM

(proposed) Every programmer should be given EXACT specifications of what he is expected to deliver.

ToMaHaWk on August 25, 2006 04:38 PM

I must disagree on the fast computer. It has been like 20 years since compiling an app took more than a minute or so. I say give the programmer the same computer the average user will have, I bet the performance of the apps they write will be a heck of a lot better if they have to feel their user's pain.

John F on August 25, 2006 06:27 PM

I agree with tis bill of programmers rights, and even though I may not be a programmer in the literal sense, I still do debigging, and testing of certain software, as well as play games on my computer, and I enjoy things much better when I get to choose my own stuff. That being said, however, not all companies are going to allow this to happen, nor will they be willing to allow it, speaking froma realists point of view. The only way that this bill of programmers rights will be used in The everyday work environment, is if the poeple who use computers, not just the programmers try to push to get this bill of rights recognized by governement, not just eh american government, but all governments, no matter what country, or location on the globe. Well tat is my 50 cents worth, if anyone else feels the same way, then please go forward and make a big stink of this on the news, on the internet, and in your local, and national newspapers, as this should be called the common everydays workers bill of rights.

Crash Override on August 25, 2006 08:13 PM

I concur with your "Bill of Programmers Rights". However, I believe that they should apply to ALL people in the IT industry. Maybe the "Bill of IT Workers Rights"?

Bald.Guy on August 25, 2006 08:33 PM

#0:
No programmer shall be made to report to ex-operators (who can't think in symbolic logic, but still want to leapfrog the hard work & climb up the corporate ladder).

DrillBit on August 25, 2006 10:49 PM

How about the right to a have great IT business analyst? One who can write clear requirements for the programmer?

Puddles on August 26, 2006 04:09 AM

Get over yourselves. The vast majority of you are not writing operating systems, or programming in ML! You are programming business logic in garbage collected languages. You get a paycheck. If you don't like the conditions where you work, work somewhere else.

atlscrog on August 26, 2006 04:17 AM

wow, I'm spoiled
..I have 4 monitors
..a fast computer that I spec'ed out
..ordered my own mouse + keyboard
..comfortable chair
..T3 connection (firewalled out the wasu, though)
..use Yahoo video/radio for music to my headphones
..wear jeans and T shirts to work
..have toys on my desk
..have spare (normal user) PC to test application speed

My only downside is I am analyst, developer, project manager, leader, tester...and my direct report has no clue what I do (ex-Datacenter manager).

Brad V on August 26, 2006 06:17 AM

I'd forgo the fast computer for two monitors and a good Dev server and automated builds and testing.

vm370 on August 26, 2006 07:05 AM

Programmers shouldn't be given fast computers. Fast computers let programmers write dog-slow code. If the people writing gnome or KDE (or Windows, for that matter) had been on slower machines with less memory, the desktops would be much, much more lightweight.

grendelkhan on August 26, 2006 07:36 AM

John F, grendelkhan: This only works if the company is dogfooding. Generally, it would be better to put any internal users (sales, QA) on the lousy hardware, so that *they* feel the pain, and report it to the devs.

At any rate, if you're developing webapps, there's no excuse for slow hardware.

Mike Purvis on August 26, 2006 08:07 AM

I am all for this bill of rights! I am still in college, but I think these are a must for a programmer. As for the fast PC, it would be nice, but if I can have a second one to run as a server, I am happy.

chiefbutz on August 26, 2006 08:24 AM

John F: maybe incremental builds are less than a minute, but then you change a common header and have to rebuild the project -- forget about it -- a lot of application development projects are not going to do a clean build in under a minute. More like 20-30.

With that kind of delay, devs either work around putting the code in the "right" place in order to avoid the downtime (leading to shoddy code), or they'll wander off (physically and mentally) and lose their place, and probably not notice when it's done, adding even more down time.

I think there's a magic cutoff where if the compile/link/rerun time takes more than say 30 seconds, the dev will get bored/distracted and downtime goes exponential.

Features and performance are constraints applied by management/marketing. Optimization comes at the end, no need to make devs suffer with a slow machine all along the way, just during the final polishing.

Ethan on August 26, 2006 08:35 AM

My employer believes in all of the above things... except for the paying us 60k-100k part. What would you rather have, decent pay, or a good work environment?

anonie-mouse on August 26, 2006 09:19 AM

I think Programmer should have the right to refuse writing documentation ;). Just kidding :)

Zaid

Zaid Omar on August 26, 2006 09:36 AM

Bullshit.

> 1. Every programmer shall have two monitors

No. Every programm shall have a large monitor. That's all. For debugging, they should have an additional remote PC, not a remote monitor. (You ain't never crashed a kernel, or driver obviously)

> 2. Every programmer shall have a fast PC

*ONLY* for compiling. The target PC for the application must, in fact, be the absolutely slowest computer available on the market, and barely have any disk space at all. The faster the PC the programmer targets, the more bloatware they write.

> 3. Every programmer shall have their choice of mouse and keyboard

This one I agree with. Also through in the text editor.

> 4. Every programmer shall have a comfortable chair

Yeah, whatever.

> 5. Every programmer shall have a fast internet connection

What has a fast connection got to do with anything? Krugle, and sourceforge doesn't go any faster just because you have XDSL.

> 6. Every programmer shall have quiet working conditions

So buy headphones.

Paul Hsieh on August 26, 2006 09:55 AM

I can't understand why people don't understand #6, which basically means that the programmer should work in an environment that doesn't have people coming and going and interrupting their work all the time.
Also, #3 sounds like I'm supposed to bring my own equipment o_O

Chris Lively - I wonder how the army would implement your suggestion :)

Omer van Kloeten on August 26, 2006 10:09 AM

> So buy headphones.

My company even banned headphones (on grounds of 'professionalism').

tim on August 26, 2006 11:36 AM

I'm not convinced by #2, unless there's a rider for testing to be done on mediocre machines. I'd hate for the programmer's bill of rights to take away from the end user's experience by assuming everyone will use fast machines with loads of memory.

Otherwise, good list.

Josh Peters on August 26, 2006 12:41 PM

Why limit it to 2 monitors? I have three and love it. Code on one, form on another, reference material on a third.

A programmer should have as many monitors as they want. Personally I find three to be the limit I would be comfortable with--I can't see how to place a 4th that wouldn't involve too much head turning.

Loren Pechtel on August 26, 2006 01:57 PM

"Every painter I hired had to buy their own brushes."

for consistency sake, you should apply this analogy to the entire programmer's toolbox you have listed above, including chair. this is a standard way of doing business for men who make their living as mechanics. when you come to the job, you bring your own tools, and when you leave, you take them with you. the same should go for programmers.

Proton Soup on August 26, 2006 02:36 PM

One 15" LCD.

That's all I get. :(

Quite irritating, b/c lines wrap in vi and it drives me crazy. I'll probably buy a bigger LCD for myself some day.

david on August 26, 2006 04:26 PM

Finally... i think is time to get something back...
we are humans... or not?...

Juan Diego on August 26, 2006 05:33 PM

Add to this...

"Every programmer shall have the right to install and configure all software on his PC"

As in, not be forced to work on a locked down PC where the software was slapped on as a default install by a teenager who has "IT experience" (ie: has played a computer game or two) on temporary contract to an outsourcer for whom maintaining control over the desktop is more important than having the desktop used to accomplish something and where 'lockdown' is being used as a poor substiture for security.

Paul Coddington on August 26, 2006 10:35 PM

"I can't understand why people don't understand #6, which basically means that the programmer should work in an environment that doesn't have people coming and going and interrupting their work all the time."

Some programmers don't understand it either - but then quite often they are the ones not doing anything clever enough to be concentrating on the task on hand (people who produce bad code that does not work well and isn't worth the paper its printed on do not care in the least about point #6).

Likewise for some managers (and I really have seen some who take the attitude that nervous breakdown due to environmental problems simply means "time to find another contractor and put this one out on the street, no notice required").

Paul Coddington on August 26, 2006 10:50 PM

Wahoo! Score, I've got them all! Well, I could use a new chair on Monday.. hehe

Matt on August 26, 2006 11:26 PM

Hey! I've made a translation to italian here:

http://www.napolux.com/2006/08/27/carta-dei-diritti-dei-programmatori/

What about a worldwide campaign for translation in many languages?

;)

P.s.
Of course I gave you credits!!!

Napolux on August 27, 2006 02:26 AM

My additions:

7. Every programmer shall attend a development conference once a year.

8. Every programmer shall be supplied with technical books of his choice.

I run my own company and practice this. Works very well and increases my efficiency.

Vagif Abilov on August 27, 2006 04:45 AM

Completely agree!!!

Napolux on August 27, 2006 04:58 AM

6. Every programmer shall have quiet working conditions
hehe what if he is working with sound effects in his game

Saurabh on August 27, 2006 07:27 AM

Proposed:

If you want a programmer to work more than 40 hours a week, you need to pay them for more than 40 hours a week.

Just because the boss was once an Arthur Android, and gets a heroin-like endorphin rush from working from 4AM to 10PM doesn't mean everybody else in the industry does, or should. The practice of the "exempt" employee, paid for a week's work, but continuously worked for double shifts because of artificially-skewed deadlines, poor specs, feature creep, and salesman's disease (of course it can display your data in Klingon! It'll be in the demo next Thursday!) should be banned outright. It burns out more programmers than any other practice, bar none.

My favorite poster: "A lack of planning on your part does not constitute an emergency on my part."

---Gwen (who still has nightmares of being chased by androids)

Gwen Patton on August 27, 2006 07:30 AM

I earn roughly $7500 per year, which is an average yearly salary in my country. I should be able to buy my own apartment in roughly 142 years.

My chair is about 20 years old; I brought a pillow from home to sit on and to make me more comfortable.

The PC I work on is kind of okay, except that I had to jump through hoops to get a total of 512 MB of RAM, and the curved 17" monitor is freaking me out. I do have admin rights, though, but my right wrist and my left shoulder are starting to hurt badly, so admin rights don't make me happy.

My copy of Visual Studio is illegal.

Nobody really knows *WHAT* I should do, so I regularly rewrite my apps from scratch and spend time migrating DB data as good ol' management thinks of new, incompatible things.

I work in a room with no windows and air conditioning that smells, so we prefer to have it turned off until it gets REALLY hot. There wasn't a week in the past two years that I have felt okay - I'm ill most of the time. But the noise of 10 servers near me doesn't let me think about my health conditions much.

My company spends 50 times as much on crap outsourced developers, who produce code that takes 4-5 DAYS to churn out a WEEKLY report.

If I demand anything, I'm going to get fired, which isn't very nice considering that I have to support my parents. And if I change my company, I'll have to travel at least 4 hours each day (I don't have a car, and I don't think I'll be able to afford one in the next 40 years).

So... What do you people think I should do? (BTW, I have the lowest salary in my department, but I regularly spend time teaching "senior" developers about the very basics of HTML and programming.)

AC on August 27, 2006 10:12 AM

I agree
we are humans,
not only brains or ideas
as arm's slaves

Stefano Zaglio on August 27, 2006 05:34 PM

> I earn roughly $7500 per year, which is an average yearly salary in my country.

Wow, that is a sobering tale.

I'm beginning to see why people would want to emigrate to a different country with more favorable working conditions..

Jeff Atwood on August 27, 2006 06:19 PM

#4 is the one that *really* matters. Dual monitors are nice, but being able to walk is better.

Rob Agar on August 27, 2006 10:31 PM

Every developer should have a machine in there office/cubicle/whatever that is the same spec as the 'minimum required' as displayed on the final product. once the program actually works this machine (which will be reimaged back to a default state at will) will have the application installed on it and fired up...

1, to make sure it actually works

2, its actually usable.

I'm all for developers have the latest & greatest to work with, they do actually need it. but the result should work on more down to earth hardware.

i.e. no GUI widgets that take more cpu power than the core of the application.

I mean my old 8Mhz ST (512Mb ram, no HDD) had a nice little desktop called 'teradesk' availbile for it. frankly apart from a lack of colour i'm hard pressed to see what my XP desktop does (that I actually need/use) that teradesk didn't.

i'd add a rule that no GUI widget shall be added unless its actually needed. *until the program works* _then_ add the stuff to make it look nice, but make it configurable. if the user wants speed let them turn the fluff off...

windows itself is actually a good example of this, if only it was easy to de-install the stuff you don't use.

claire rand on August 28, 2006 12:52 AM

(ironic mode)

Every programmer shall have a BOFH so close !!

;-)

marbella lawyers on August 28, 2006 04:43 AM

@Brian

>>Myself, I prefer LEGOs.

Me too. Unfortunately, I can't bring them in to work. But they do exist in a large quantity in my home office.

I think I need to post this Bill or Rights on a certain door here... :)

Eric D. Burdo on August 28, 2006 06:08 AM

AC:

"So... What do you people think I should do? "

start your own business. save up as much money as possible enough to last a few months (rent, food, etc.). find out what kinds of licences / fees your government requires for starting a business.

try to build up a client list before you quit. use your current working conditions as incentive & inspiration to motivate you.

david on August 28, 2006 06:12 AM


(Proposed)

x. Every programmer shall have a substantial dry erase board for doodling and diagramming.

Andy on August 28, 2006 06:59 AM

>>Every programmer shall have two monitors

I had to fight and claw to get my second monitor. And so now I've got one nice LCD, and one piece of junk CRT. *sigh*


>>Every programmer shall have a fast PC

My PC is generally pretty quick but I've only got 512 MB of RAM. Try running Visual Studio 2005 (bloated as hell) and SQL Server Management Studio (2005) (beyond bloated as hell) at the same time. Yeah, I spend a LOT of time looking at an hour glass.

>>Every programmer shall have their choice of mouse and keyboard

I do have this. Whew.

>>Every programmer shall have a comfortable chair

I can barely move at the end of an 8 hour day. My legs hurt, my lower back hurts and my neck hurts. This is AFTER I swapped chairs for the one that was "more comfortable." Also you might want to add to this something about a nice working environment. Here, they keep it cranked up to about 90 degrees in the office during the summer. By the end of the day, I'm so hot and sweaty that productivity drops dramatically from about 2:00 PM to 5:00.

>>Every programmer shall have a fast internet connection

Got this.


>>Every programmer shall have quiet working conditions

I dream about the days when I used to have an office. Now I'm in a cubical and get interrupted about once every 5 minutes or less. The article you did about being in the zone was spot on: I'm only ever able to get into the zone maybe once a week if I'm lucky here.


I usually disagree with a lot of your posts, Jeff but this one was spot on.

Jeremy on August 28, 2006 07:29 AM

"So... What do you people think I should do? (BTW, I have the lowest salary in my department, but I regularly spend time teaching "senior" developers about the very basics of HTML and programming.)"


AC: Move out of New York and come to Seattle.

Scott on August 28, 2006 08:05 AM

I´m agree with most comments.

Should add this:

"Each developer must have a comfortable desk as well". We´re currently using these "came from china", small, without space desks. matter is that if you put in an external HD you don´t have space to move your arm, (hell of work when i try with a speaker!).

And what about free tools - every developer should have the right to choose which tools can use (if these are free or not license is required) - IT always bothers you :@

And PLEASE!! if you cannot provide even a division or a cubicle for each, please give us a monitor filter or something. Is quite annoying to be moving the monitor to left or right when people next to you want to see what you´re doing :|

No one on August 28, 2006 10:31 AM

Isn't this whole thing just what a developer needs to negotiate with their boss? If they can't negotiate what they want, what makes sense to both parties, then either bite the bullet or change job.

QAZ on August 28, 2006 10:32 AM

More specifically, the "Bill of Rights" should address fundamental and measurable rights that don't need periodic revisions. For example, why two monitors and not a personal IMAX monitor? So similar to "freedom of speech", why not "freedom of getting an ergonomically correct physical working environment"? This should cover all monitors, keyboards, mouse, chairs, desk hight, foot-rests, and etc.

The requirement of development tools is especially hard to measure. Is one tool really fit for a particular development task? Who's the judge on that? With whose money? And what if it's really expensive and you really don't have the budget? Who's going to decide that you can live with the workarounds or you absolutely need to quit the job?

On the "quiet working condition" front: sometimes putting a team in the same room (inheritly more noisy) actually improves productivity and team morale. Before Lego-cubicles becomes a reality, I think some flexibility in shared and private space would be nice (where one can easily move between the two kinds of working spaces).

There are so many things that can impact job satisfaction and being a programmer fundamentally is not too much different from being in a different occupation, in the sense that you need some things to get some other things done. It's hard sell to recognize them as "rights" because at the end of the day, they are still negotiable... It might be more helpful to recognize good and bad people/project management practices...

QAZ on August 28, 2006 11:16 AM

AC, you should start a revolution. Burn down the bastards that hold you back. Take what you deserve.

Armen on August 28, 2006 11:31 AM

I agree with you all the way!
They should make this bill.

Brian Sheridan on August 28, 2006 11:54 AM

Having a single high-resolution monitor, or multiple average-resolution monitors are both acceptable.

Philihp Busby on August 28, 2006 12:52 PM

I think every developer should have their own development server with an external facing IP. With the world of virtualization at our finger tips, companies can purchase one beefy server and provide each of their developers with a virtual machine that they're free to mess with and break as much as they like.

P.S. I love that quote:
"A lack of planning on your part does not constitute an emergency on my part"

Ryan on August 28, 2006 01:05 PM

Ha, at least you get PC's.

Here, we have these HP thin client things, and we run VS 2005 on a terminal server shared with 5 other developers. Everything lags dreadfully, even simple tasks like dragging and dropping are painful. Even browsing the web sucks on these things. And the VS debugger? Bwhahahaha. But hey, developers don't need to debug code! They should write it properly to begin with.

Also only have a single 17" LCD, and it's not even that great, a standard HP keyboard (probably the best bit of equipment on my desk), and a no name mouse with a broken wheel.

And flexible hours? HA! I can't wait until summertime, when we start an hour earlier, at 7am.

BA on August 28, 2006 05:55 PM

fantastic

Uday on August 29, 2006 01:30 AM

@AC

"I earn roughly $7500 per year, which is an average yearly salary in my country. I should be able to buy my own apartment in roughly 142 years."

Do you live in Poland too?

"So... What do you people think I should do? (BTW, I have the lowest salary in my department, but I regularly spend time teaching "senior" developers about the very basics of HTML and programming.)"

Move to Ireland as I did

PW on August 29, 2006 02:22 AM

Workspace Nirvana...

http://blogs.microsoft.co.il/blogs/kim/archive/2006/07/05/1215.aspx

Kim on August 29, 2006 02:29 AM

I do not see any problems having one monitor, but when your manager doesn't keep you motivated and interested in what you do, it really sucks. Every person has to be motivated to make his work good. Why are there so many people with no management skills whose work is to manage human resources?

JCurtis on August 29, 2006 07:10 AM

What about a bill of rights for the programmers customers (ie: the folks with the problem to solve)?

Right to engage developer in a dialog about the problem to solve, rather that demand detailed concise requirements.... Work together to build requirements. Developers have a better clue as to what a requirement really is (versus having the customer tell you how to code it)!

Right to know the progress of some project at reasonable intervals. Customer doesn't need to know status every hour, or even every day (perhaps), but not hearing from the developer until weeks later is far too late to find out that the developer and customer are disconnected.

Eric on August 29, 2006 07:35 AM

A nice collection of items that, no doubt, would improve the overall *effectiveness* of a developer.

However, do we believe these rights to be *inalienable*. From whence do these rights flow? I am not against Better Conditions, but rights implies either a vaguely disguised threat - or plea. If these rights come from the Great Developer in the Sky, so be it.

As for the "developer should be on the slowest machine" nonsense (yes, nonsense): This argument has been picked up, touted, and reasonably knocked down for decades now. Is no one listening - or do they believe that all the work in software development processes: agile, RUP, etc is just to make the Developer *better*? No - the cost of the "development" hour is the single, largest, expense in the creation of new software.

So, if you have no economical sense: Go ahead! Give them slow computers. And watch your budget EATEN alive as developers lean back in those New Comfy Chairs and stretch while the current compile/test/debug goes on and on.

The only addition I have, and it isn't exactly a right is this:

Developers ARE business people.

Okay, just a statement and not a right. However, allowing the old stereotype of the "developer who don't know nothing but code" never really existed but it does allow the non-technical to look down their collective noses at Developers - even though that same group is the group IMPLEMENTING their business rules.

Slow computers for Developers. Think Business!

Dan

Dan Lundy on August 29, 2006 07:41 AM

Regarding #1: Personally, I like 3 monitors. It's a good consistent plane, puts a monitor directly in front of you, and popup dialogs always seem to work better on 3. (On 2, some split the desktop instead of being on one or the other)

One really big monitor would be ok as well, but you get a lot more real estate from two or more for the same price, I've seen.

Regarding #3: The statement is right, but the reasoning is wrong, I think. Pride of ownership isn't what makes a keyboard and mouse better, it's comfort. Plus, they become an extension of you, your input into your working environment, and as such should be something that you feel comfortable with.

#4: Heck yeah...

#6: Maybe it should be a "workspace free of distractions" I work with headphones on when I'm at the office, and every time the phone rings, I have to look to see if it's for me, or the main line. Hard on the concentration. Plus, I can't get my boss to leave me to focus on anything to get it done.

Chris Szurgot on August 29, 2006 12:25 PM

I have a concern about #5. I apperciate the idea of grabbing some else's lines to help with your project, but the ethics bother me. I propose that you should add a comment saying where you got that line from. But then again, if someone of higher power sees that comment...hmm...I'd have to think about this so more.

Daniel Nunan on August 29, 2006 02:09 PM

I agree with Chris Szurgot - I don't mind too much whether the workplace is silent or has a lot of background noise, but I don't see that anyone can work productively if they're faced with constant distractions.

What we need is a big sign.

GO AWAY
(No, really - I mean it)

Simon Geard on August 29, 2006 07:02 PM

Oh, and regarding fast machines, I agree with the point that developers need two machines - a high-spec box for coding and building, and a testing machine with similar spec to what a customer will use.

Although testing on a customer-spec box may not help if the developer isn't testing with customer-level data. A UI might be fine on the small volume the developer tested with, but fail miserably when put into production with a thousand times the volume.

Simon Geard on August 29, 2006 07:12 PM

If you agreed to a salary, you already sold your rights and soul away. The only one that in the long run matters is that you have a right to code for yourself instead of building an asset for someone else.

older_than_you on August 30, 2006 08:11 AM

Quick PC - depends. If you're running VMs, or server part of an app, then yes (you have to get something done!), otherwise, then no (you should suffer like the users).

The two rights I'd add would be:

The right to work late when you're on a roll (I know, it seems wrong, but I can't and it's frustrating).

The right to do something else when you've been focussed on a problem for two long. A pinball machine or pool table would be ideal.

(All my best ideas come when I'm not thinking about the problem itself)

Andy on August 30, 2006 09:38 AM

I don't have a frickin' chance of getting these fulfilled when our employer won't even provide legal copies of Visual Studio to us.

djork on August 30, 2006 03:36 PM

I would add an unlimited supply of caffeine (pick your flavor) to this list. I see a huge difference after I have had a few cups of coffee in the morning, or after sucking back a Coke in the afternoon when the day is starting to drag on.

Brandon on August 30, 2006 06:49 PM

Quote : '(proposed) Every programmer should be given EXACT specifications of what he is expected to deliver.'


This one is my favorite LOL. I hate running off and trying to do a project with nothing but a general idea of whats going on. A GOOD systems analysis is a must!

Polymorpher on August 30, 2006 07:03 PM

//Error: I'm big, but my nick is Brasil Import//
//I from Brasil, i'm a recent programer//
Wow, if
______i find (a job) with
______these: conditions;
________then
_________i will be happyfully;
_________and
___________i gotoxy(lots of money);
___________for
_____________ever;
___________end;
______end;
end.

Error: Brasil Import on August 30, 2006 11:41 PM

Put things into perspective..... You missed the most important one ... "A bolnde under the desk!"

Sin City on August 31, 2006 06:29 AM

yes
i vote it ^^

Copy-Right-Killer on August 31, 2006 08:25 AM

Good list. They are all necessary for a programmer to be productive.

Yan on August 31, 2006 09:10 AM

This post is really really nice!

> 1. Every programmer shall have two monitors

I don't have. I wish I have. RIght now I have a LCD. that's it.


> 2. Every programmer shall have a fast PC

Well, i have a 2.8GHZ Intel Pentium with 1GB memory. The PC unit is unbrand though but it is still fast.


> 3. Every programmer shall have their choice of mouse and keyboard

I was allowed to pick from several left-over keyboard hahaa.. my boss bought a special mouse for me though.


> 4. Every programmer shall have a comfortable chair

I need a more confy chair.

> 5. Every programmer shall have a fast internet connection

Amen to this! Luckily I have but i'm kind'a pissed off when one of our designers visits youtube and watch anime!!!! draining all of our bandwidth!


> 6. Every programmer shall have quiet working conditions

So far, yes quite but i usually received requests from client via e-mail.. multiple projects, multiple clients.. It makes me crazy sometimes.

Jun on September 1, 2006 03:30 AM

fair point but if it bothers you so much, why not change things themselves, as you know buying an LCD screen is cheaper, even cheaper if you get a second hand old style monitor, so that sorts the monitor problem. A keyboard and mouse, they're cheap as well and you can also bring a good chair in.

I know it should be provided, but if someone else won't do it why not immediately solve the problem, on a computer programmers salary these items are affordable.

As for your PC, you can point out that the cost of a new one would be a fraction of your wages and would be value considering the boost in productivity this would achieve.

A broadband connection should surely be supplied as standard, you can't be using dial up?

Surely that's quick enough to get source code.

Quiet working environment? Put your ear plugs in (or industrial strenght ear protectors id it's that bad), put your phone on vibrate, you only need to take them off if you need to talk to other people.

If you can take direct action such as this, why wait for someone who knows what the problems are but hasn't lifted a finger and probably has no intention of doing so to do something about the situation, when you can do something quicker which could make your life a little more comfy?

finestcuts on September 5, 2006 11:52 AM

Someone mentioned free coffee and unlimited smokes. Yes I remember those days too. Now I solve the problem of the uncomfy chair by going out for a smoke. Gets the circulation going (in the legs at least) and as someone else observed, getting away from the problem often helps. Indeed it does, especially when one is enjoying a fine smoke and the superb eye-candy of midtown Manhattan. Ciao tutti!

Braso on September 7, 2006 01:55 PM

yo de acuerdo

papa on September 7, 2006 03:09 PM

That's awesome. It will improve everyone's working effeciency. And If I were a programmer, it would allow me to secretly play the most hardware demanding games of today x)

UltraSonicSite on September 8, 2006 08:31 PM

really a nice suggetion for a good and skilled programmer. i want to add one thing that, every programmer have the right to think free. so he can take any short of innovative and advantageble step in the field of programming.

Chandra Mohan on September 13, 2006 06:07 AM

Boss told me that she wouldn't buy the guy next cube over a silent keyboard. This guy is loud, and when he gets on instant messaging, he loves to hear himself type. I don't. Boss said to ket some headphones. So .. . .it took a while to adjust to the million radio stations that stream their music over the internet. Found a "world music" program that is killier. I have fallen in love with Lila Downs (www.liladowns.com). I also love www.hawaiianrainbow.com. Hawaiian music all day, lots of good guitar. www.Pandora.com is cool because I can design my own radio stations. Got one on Bob Dylan and also a swing one. I just click on the song I really like and put it on my wish list and someday I will be a $30 swing dj (.99 per song) with only hits I like on a CD. I guess I better stop now. Got a noisy place where I work. Boss doesn't get it.

Just John on September 22, 2006 11:20 PM

two monitors? There are two monitors on the Mac I test my java applications on and I can't stand it.

I coould make a lot better use of 2+ comupters with a keyboard switchable KVM (I use 2 PC's this way at home). A windows install with my SQL server etc on it and a Linux install on the other would be great.

Compiling only takes a few minutes at its worse... but Creating indexes on and upgradeing existing customers Databases can take %100 CPU power and all of my Memory, for a good chunk of time. Not to mention easy access to a networked computer and diferent OS's is great.

gruckiii on October 3, 2006 02:22 PM

every programmer shall have a super sexy girl across from him waiting for him to screw her when he is done each and every method/function/routine/subroutine/etc..

geek on January 16, 2007 08:27 AM

Want to print the page without headers/footers, images, comments, or the links on the left? Paste the following into the address bar and press enter:

javascript:divs=window.document.getElementsByTagName('div'); for(var i=0;i<divs.length;i++) { if (divs[i].className.indexOf("comment") >= 0) { divs[i].style.display = "none"; }} imgs=window.document.getElementsByTagName('img'); for(var i=0;i<imgs.length;i++) { imgs[i].style.display = "none"; } tables=window.document.getElementsByTagName('table'); tables[0].style.display = "none"; tables[tables.length-1].style.display = "none"; window.document.getElementById('links').style.display = "none"; void(0);

jsdude on January 25, 2007 05:56 PM

>I must disagree on the fast computer. It has been like 20 years since compiling an app took more than a minute or so. I say give the programmer the same computer the average user will have, I bet the performance of the apps they write will be a heck of a lot better if they have to feel their user's pain.

Righto.. my users really use Eclipse, or Tomcat, or Jonas.

Adrian on January 25, 2007 06:15 PM

>(You ain't never crashed a kernel, or driver obviously)

Nope. When I do maybe a 2nd PC might be useful. Until then the second LCD makes more sense, no?

Adrian on January 25, 2007 06:26 PM

I am michael the most handsome guy in our office.....

they should add this...

EVERY SHOULD HAVE THEIR GIRL OF THEIR CHOICE TO MASSAGE THEM WHEN THEY ARE WORKING.....

Michael Guieb on March 15, 2007 07:19 AM

(proposed in Philippines)every programmer must have a salary higher than minimum wage(God damn it!)..

VB mental on March 15, 2007 07:20 AM

7. Every office, like we'll ever have one, OK, every Roomic Cube should have Indirect lighting with dimmers. Trying to work though the glare of an overly lighted workspace is not only annoying, but eventually will blind you.

Myron James on March 30, 2007 12:36 PM

I complained for a few months that my computer was sub standard to develop on. I was ignored.

One day my boss gave me an assignment and handed me a bunch of CDs to install.

I asked, "So, what do you want me to do with these?"

He replied "Install them."

I confused i asked, "On who's computer"?

"Yours", now getting mad with me.

"How?", I again asked.

"Your kidding right, you put them into your computer and..", getting more mad.

"And what? If i just put them in my computer nothing will happen, if you get me that CD drive i've been asking for then maybe i can use that to..."

I don't work there any more.

brian on May 3, 2007 01:15 PM

I'm not so sure that the benefits of dual monitors is well documented. all of the links are broken.

Anyone have a current link I can use as evidence for multiple monitors for my team?

Scott Bateman on May 8, 2007 07:43 AM

I would like to propose an amendment to #6, Every programmer shall have quiet working conditions.

I agree with this, but believe that it should include all forms of distractions not controlled by the developer. Perhaps it should read "Every programmer shall have distrationless working conditions".

My office recently switched to shorter cubicle walls and it can be very distracting when people walk by. Although the noise is definitely a problem, the constant looking up whenever somebody walks by is driving me nuts! :)

Brian Brewder on May 14, 2007 10:15 PM

wow. no one has mentioned lisp yet.

everyone developer should have access to a lisp implemention, a free one of course.

some of these rules sound good. I'd like to change the following things in my work place.

a. audible incompetence, in the form of coworkers who I don't work with directly, but see the result of their work or lack of, causing distress.
b. the woman who violently abuses the photocopier when it jams, sending shock waves outwards to anyone within 30 metres.
c. vending machines full of crud - why do I have to eat rubbish when hanging around after hours to work on some code.
d. toilets in a state you might expect to find public toilets in a bad neighborhood


:(

trashmaster5000 on May 16, 2007 06:02 AM

I think they are perfect, though the wording seems to be confusing people.

I can't figure out why everyone keeps calling out #2. Have they never heard of dedicated performance testing? A programmer should be given a fast PC. The programming process needs to go as fast as possible with little wait time. A programmer is just as likely to write slow code on a slow machine as they are on a fast machine. The only difference is they won't spend time doing premature optimization on the fast machine.

There's an old adage to remember here: make it work, make it work right, make it work well.

It's hard to do all three of those on a slow machine.

xero on May 16, 2007 08:56 AM

Hmm.. there's only one reference to QA in this entire string. I'd suggest there ought be a fundamental right of each developer to have all appropriate access to devoted QA. That's often far more important than other considerations.

Eric on May 16, 2007 11:01 AM

We have all of this except number 6; unfortunately, a tram passes the window making a very loud "bing, bing" noise every few minutes.

Robert Synnott on May 22, 2007 05:34 AM

Oh, and some manner of versioning system is, of course, essential. (I favour SVN, but really anything would do.) I've only worked for one company that didn't use one, but I nearly went mad while doing so.

Robert Synnott on May 22, 2007 05:38 AM

I question the "two monitors" requirement. I won't accept two low-resolution monitors instead of one high-resolution one. Having a good clear high-resolution monitor is a major productivity win since all things being equal I can present more information to myself on a high-resolution monitor. I'm not sure if two monitors does a lot for productivity since most of the time one monitor is idle--I could get much the same effect from virtual desktops (which I do use quite vigorously) and save two square feet of desk space. Desk space is important since I usually have two machines on my desk.

I rarely work with less than two machines. I see a single-machine developer as a developer working in a developmestuction environment (development, test, and production all smashed together): OK for amateurs and hobbyists, very much not OK for professionals. We are long past the days when a computer is proportionally a large expense--even in the mainframe days, the vendors implemented various partitioning schemes to divide their computers into smaller pieces as soon as they were powerful enough.

A developer has two sets of machine requirements which often conflict. One requirement is a machine which must be optimized for developer productivity--high end hardware, lots of software, both development software per se and various non-development software like email and web browsers. The other requirement is a machine which must be optimized for software testing and debugging--strictly controlled hardware and operating system configuration, isolation from external networks (provided that doesn't conflict with the requirements of the application), remote debugging software or ICE hardware installed. When those two requirements conflict, you need two machines.

Sometimes the second machine is shared between developers, and sometimes involves some kind of virtualization. Multi-user Unix servers shared by developers with desktop PC's or workstations filled this role in decades past. Today virtual PC machines are available gratis or free. In mainframe days the first thing vendors did when their machines got powerful enough to run an OS at all was to implement various degrees of virtual machine partitioning.

I have developed the following kinds of code at various times:

* CAD software, games, productivity apps - need one machine to run the program and debugger back-end, another machine to run the debugger's front end, and a farm of a few dozen machines to rebuild the software in under three minutes. The major problem here is debugging interactive event handling, where the keyboard and mouse must not be operated while single-stepping through code. This is impossible with a single machine, possible but often non-trivial with a virtual machine. Performance issues usually arise from display driver software which is in turn tightly coupled to the hardware, so nothing short of executing the code on exactly the target platform will work.

* Web servers and database code - usually there are two machines involved because two middle-of-the-road machines specialized for the two tasks are cheaper than one high-end machine that can handle both workloads at the same time. My laptop has all of these on a single machine, but that's only useful for field patches and developer sandbox testing, and only in cases when absolutely no other computer, nor a suitable network connection to another computer, is available. The single-machine configuration is painfully suboptimal and I use it only as a last resort.

* Firewalls, bastion hosts, Internet-facing servers - Since each piece of software installed on the machine has possible security implications, I'm not going to even think of installing anything on the machine that doesn't *need* to be there. That means the code is built on some other machine and shipped to the server ready to run. Besides, the server is going to be a headless box in a rack locked in a tiny aggressively cooled closet, I couldn't use it as a development workstation even if I wanted to.

* OS kernels, device drivers - in many cases the machine where software development is done is nothing like the machine where the code executes. Although Linksys routers are in theory much more powerful than the fastest developer workstations of 15 years ago, nobody in their right mind uses their Linksys router to do a self-hosted kernel build today. Although it's possible to emulate the router's CPU and network ports, neither real testing nor real development can be done without having two physical machines.

* Industrial automation software - the machine literally costs a million dollars, software has to run in real time, and a software bug could do physical damage in dollar amounts with five digits. The hardware is much more powerful than my development desktop, but I wouldn't dream of running my dev compiles on it...OK, actually, I *do* dream of running my dev compiles on it...but the first item in my project plan is to put together a software emulation of the expensive pieces of the machine so that I can build copies of it on many machines.

Most non-trivial applications don't need exactly the same hardware to run than you would use to develop them. The one major exception might be those who develop compilers, RAD tools or IDE's, where the development environment and the runtime environment are identical by definition. This includes all those embedded application scripting languages like spreadsheet macro functions, but on the other hand these languages offer little or nothing in terms of "developer tools" per se. Often it's difficult to tell the difference between a "development" and "user" environment in embedded scripting languages since the difference often boils down to the existence of documentation installed on the machine.

All my single-machine work has been:

* Embedded application code in interpreted languages - runtime and development environments are identical by definition, no more than 1K LoC
* Programming contests - please leave your laptop at the door, sir
* Trivial productivity scripts - one- to ten-liners with no product life cycle.
* Code to bypass corporate firewalls - Someone else's corporation. Boredom. Wanted to browse web. Unsupervised access to locked-down firewalled Windows computer for hours. Let's not say more.
* Coding in University or high school - can afford only one computer, or more like 0.001 of a computer--all undergrads on a single machine

Zygo on May 23, 2007 01:07 PM

> I question the "two monitors" requirement. I won't accept two low-resolution monitors instead of one high-resolution one.

And why accept one high-resolution monitor, when you could have two? Or three?

http://www.codinghorror.com/blog/archives/000740.html

This is not a zero-sum game. You should have your cake and eat it too.

Jeff Atwood on May 23, 2007 04:28 PM

# Every programmer shall have two monitors

my company only provide us wif faulty/blinky 14" CRT monitor... not even the flat screen ones...
only when u are real lucky, u get the 15" LCD monitor... very rare...

# Every programmer shall have a fast PC

hmm let's see... what we have... a P4 2.8ghz PC... with 1gb of ram.. that's all!!! nothing extra.. and we are running Eclipse(240,000K), SQL developer(76,000K), weblogic(151,000K), and company's own software suite (100,000K)... all of those are memory consuming and free software... :|

# Every programmer shall have their choice of mouse and keyboard

u only get those OLD keyboards and a roller ball mouse!! it's ROLLER BALL!!! damn it...how can u live with it?

at last... i brought my own keyboard and mouse set...

# Every programmer shall have a comfortable chair

Chair... hmm some chairs are even broken... without wheels... and they refuse to replace them

# Every programmer shall have a fast internet connection

i do not have much complains for this...

# Every programmer shall have quiet working conditions

my office is like a wet market... where there is so many ppl walking behind u... and oh ya... our desk is just a normal desk with 3 drawers and 3 piece of small partition... where u can see each other when u sit up straight...

so most of us are on our headphones most of the time... else we could not work!!!

Stitch on May 28, 2007 07:34 AM

Two monitors are a must if you are developing a UI component. When it comes to debugging, if you have only one monitor (however large), whenever you hit a breakpoint and the debugger comes up on top of your application, the window messages are screwed.

Otherwise, dual monitors are nice, but not nearly as important as the right chair / keyboard&mouse / PC.

LK on September 24, 2007 02:27 AM

Duh, we pay programmers anywhere from 60k to 120k but cannot afford to provide them adequate RAM which for 4 gigs typically only costs around maybe $500! 1 gig is not enough, 2 is avg. Now 3 is where your productivity starts to give the company some results!

anonymous on October 26, 2007 06:07 PM

Generally speaking, companies are just STUPID and for some reason get a trip off being skimpy on PCs for developers when they are not saving a dime. It's just a power trip by Network Admins and Accounting.

Know your rights as a professional developer and demand a PC that is powerful so you don't waste your own life waiting around for Visual Studio or SQL Server to get done opening, loading, or compiling!

Help us all!

anonymous on October 26, 2007 06:10 PM

I would like to use your image of the Bill of Rights for educational purposes in the classroom. Please let me know if that is alright with you.
Thank You
Melissa Lacroix

Melissa Lacroix on November 28, 2007 10:43 AM

I definitely agree with most of this Bill of Rights. I'm in junior high, programming in True BASIC, and I wish I had what this bill of rights talks about! Our computers are slow, crash at least once a day, the class is always noisy with disruptions every minute, and the network is set up horribly so that we can't share any files (even if we aren't cheating) A lot of these things wouldn't work at a school (1000+ students, all picking out their own mice and keyboards? 2 monitors for every student?), but even amateur programmers have rights too.

Emily on December 31, 2007 07:21 PM

I used to work for a somewhat large dotcom and I actually did have two screens and a very nice chair (not to me ntion the superspeedy machine they gave me) - but since then I have moved on to a smaller company. It's hard to get used to a single screen, handed-down computer and a pretty shitty chair compared to my old one. Yes, the salary is a whole lot better, but my back hurts :( Cheers for the article!

gammy on January 3, 2008 12:36 AM

Amen.

I remember my college days when I was coding in a corner of my own room. No one bothered me. I would look up and see dawn begin to creep up and realize I'd worked the night off without any problems. I miss those days. I was in the zone! If I ever had any mental blocks, I slept then woke up with solution in mind.

Nowadays, I have to listen to music to block out office chatter, telephones ringing, shoes tapping against the floor, etc. Listening to music is a distraction. I'd rather be able to talk to myself when I work.

The zone is important. It increases a developer's productivity a billion times more. I'm not kidding. You want a developer fiddling with his headphones and squeezing in a few games and uses up most of his time writing reports or a developer who won't talk to you for two weeks but delivers a finished product by then?

mike on March 17, 2008 11:53 PM

Maybe one of the alternative of this is to provide the programmers a powerful laptop, a fast mobile internet and work where he/she is comfortable with.

King Crystals on March 18, 2008 07:21 PM

#7 should be "Every programmer should know and appreciate the language known as PHP: Hypertext Preprocessor"

Ronald D. Willis on March 19, 2008 07:15 AM

Every programmer to learn to think "out side the box" and realize without companies, and their customers, we not be making 60-100K.

Quite whining and do the job best you can, the pay check will be the same regardless of whether or not your chair is comfortable.

Sorry to be contrary, but as the son of a garbage man, I know there are tougher jobs I could be doing other than software development.

cj on March 19, 2008 10:31 AM

Every programmer shall have two monitors :-
Can't even think of it. Got just a 15" lcd capable of displaying scrollbars at both sides. :( :(


Every programmer shall have a fast PC :-
512mb ram, and processor of good ol' days. havn't rebooted my system for weeks cuz it takes 15 minutes minimum. :( :( :(


Every programmer shall have their choice of mouse and keyboard :-
Using scroll mouse. Do I have to say anything more about it. :( :(


Every programmer shall have a comfortable chair :-
No comments. It's there, that's enough. :(


Every programmer shall have a fast internet connection :-
It takes 25 seconds to open google, and asks for password everytime I open a new IE instance, that counts for 5 seconds more. :(


Every programmer shall have quiet working conditions :-
Only thing that's there. Everyone's quiet over here like they have never talked in their life. Seems like I am working with robots. Of course, it sucks too. :(

O GOD, help me. Take me out of this hell. My job sucks.. :( :( :( :(

Jitendra Garg on April 1, 2008 04:54 AM

I worked as a PABX technician in a Telco in Trinidad for 15 years, but I had a secret life as a C++ programmer for about 10 years.

Also, in my personal development environment, (at my cost) everything was perfect, large 21 inch monitor (2 not required) fast dual core CPU LOTS OF RAM, RAID1 (mirror) all this I put together my self and a backup PC of slightly less capacity but operable. I will backup my work, replicate it to other PC for backup...everything was hunky dory as can be.

After lots of contemplation, I decided to jump ship to another part of the same company as an administrator with numerous job functions including server support and programming (ambiguous internal advertisment in my opinion).

It was my first job in the I.T. field.

I was there for a total of about 6 months.
Yep, I resigned the company after 16 years.
No compensation.

Why?
1. The PC was dead and deadly slow that I was given to do work with - don't ask to change it (talking to a brick wall).
2. The laptop was kinda working and I was not allowed to use my personal laptop which was faster and better for the job at hand.
3. The job function included c++/php/sql/server administration/tech support and I was supposed to do CISCO and had to work late - both of which I NEVER did before and do not want to do.
4. I was working in the city and around us there were about 4 building constructions around us at the time....
BANG!BANG!BANG!WOOOP!WOOOP!WOOOP!BANG!BANG!BANG!BANG!
5. 14 Inch monitor.
6. The late work was conflicting with my personal development and part time computer development initiatives (major reasons).
7. This job made me start to dislike programming (VERY BAD).

So I left this permanent job and moved full time to my temporary initiatives.

Now I work from home, going quad core, 24 inch monitor.

Don't pay much yet but more pleasant than before.


And before I left, I already had a separate pension plan going for about 10 years. (you guys may know it as 401k plan).

Colin B Maharaj
Trinidad, WI

Colin B Maharaj on May 4, 2008 05:45 AM

Only 8 hours a day? MUHAHAHAHAHAHAHAHAHAHAHAHA
You have a slack office...

And this is the chair every developer should have...

http://www.suck.uk.com/product.php?rangeID=55&showBar=1

Ubermac on May 28, 2008 12:44 PM

A glance at the URL of each blog shows the naming/numbering system of the individual blogs.

I entered 000001.html, and got test1, but upon looking in the archive, I can't find it. Why was this one not included (and #000002 and #000003), in your "complete" archives, eh? eh? :D

AND one more thing, why is #000666 about The Programmer's Bill of Rights? Hmm? Trying to tell us something?

Juuuust kidddinggg

Sadly you'll probably not overflow by going past #999999, but I must say, I am very pumped for an upcoming stackoverflow! :)

Zoasterboy on May 29, 2008 10:29 AM

Love the list. Unfortunately, I've often had to pull teeth at the management level to get most of these things.

But there should also be a list of responsibilities for programmers:

1) Don't hog the credit - give it where it's due. The more you give your co-workers credit, the more your boss will attribute it to you. Strange, but true.

2) Share what you know. You don't become invaluable by keeping everything to yourself, in fact it makes you expendable.

3) Never cheat the boss/company. It's one thing to need to screw off to blow off steam or regain your focus. It's another to just screw off.

4) Relate what you want in business terms, not IT terms. You can't win every fight, sometimes there are business-related reasons for why things must be the way they are.

5) Ask users for their input. They'll be using your program, not you. Build it so they can use it, and they will.

There may be others, but these come to mind immediately.

Koder Kev on October 14, 2008 01:01 AM

Industrial strength hearing protection did the job for me in item 6 -- I posted links to the stuff I use in #6's linked article.

mrdude on October 18, 2008 06:08 PM

I I, We should start our own parties in every country for programmers everywhere and introduce the Programmers bill of rights

Oliver on October 28, 2008 09:05 PM

As for a quiet environment, I find that it's easier for me to listen to music than to code in complete silence.

Eugene on December 19, 2008 07:52 AM

Solution: Work for people who need fast computers for their own jobs. I work with engineers who need 8 gigs of RAM, 4 processors and 2 monitors (with 1600x1200 resolution), so that's what I get too. When I say need, I mean it. The CAD program they use won't always run correctly on the one computer in the office with under 8 gigs of RAM and 4 processors (it has 4 gigs and 2 processors, so it's not slow by any means). One of the engineers even has a second machine with TWO quad core processors.

Daniel on December 19, 2008 10:22 AM

Heck, while we are dreaming, let's go for broke...Every programmer shall have his or her own private cubicle consisting of an area of no less that 100 square feet. He or she shall share this space with no one, the cubicle should come with a standard entryway and four adjoining walls that are no less than 6 feet in height.

The programmer shall also have access to modern conveniences in his or her said cubicle that will consist of the following: (1) Indirect Lighting that can be variably adjusted to coincide with the developer's mood; (2) A floor heater that can be turned on and off; (3) A fresh air vent that can be turned on and off; (4) A white noise creator to drowned out loud music and non-essential conversations that happen in adjacent cubicles; (5) A flexible work schedule that allows the developer to determine the most productive periods of the day for him or her to work. That should do it. :P

Cole F on December 19, 2008 10:39 AM

Wtf? Programmers have rights? How about the children making the expensive brand name clothing they wear? What about the factory workers that make their cars, and the folks working at mcdonalds making their food.

Lazy programmers don't need comfy chairs. Lazy programmers need a swift kick in the ass.

Dave on December 20, 2008 09:08 AM

Right to a BACKUP media.

The right to BACKUP one's development PC software is always overlooked.
Either tape or 2nd hard drive. Bosses love shifting risk to you to save a buck. A major crash can leave you weeks behind.

Bill on December 20, 2008 11:19 AM

@Koder Kev

There is a list of responsibilities for programmers called the "Software Engineering Code of Ethics and Professional Practice."

http://www.acm.org/about/se-code

Ken Liu on December 20, 2008 01:04 PM

No programmer shall be forced to use a CRT monitor. LCD monitors are cheap and much easier on the eyes after a long day of hacking away.

Jon on December 23, 2008 08:53 AM

I liked what was said about one's choice of OS and tools as a religious choice. In that case their should be a separation of Environment and Requirements.

By requirements, I mean a statement of the problem and its possible solution. E.G. the client wnats a prime number 20 digits long with the sequence 789 in it somewhere.

By environment, I mean the OS, Windows, Linux, OS X. I also mean the tools, Vi, Emacs, Eclipse, Visual Studio.

If there is a separation of environment and requirements, a developer will always code pretty fast.


Barce on December 24, 2008 08:19 PM







(hear it spoken)


(no HTML)




Content (c) 2008 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.