a companion discussion area for blog.codinghorror.com

The Programmer's Bill of Rights


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



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.


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.


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

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.


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


Multiple monitors:





Chairs: I love this one - actual, measurable productivity gains with dollar value from having a proper chair. What is 17% of your time worth?



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?


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


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… :expressionless:

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!!!


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 / keyboardmouse / PC.


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!


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!


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.


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 :frowning: Cheers for the article!



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?


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.


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


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.


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

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. :frowning: :frowning: :frowning:

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

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

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. :frowning:

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. :frowning:

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


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.


  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…
  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


You have a slack office…

And this is the chair every developer should have…