I’m a big fan of #10. Developers wear their brains on their sleeves. Be kind.
Great article! It’s time to change the stereotype that the non-developers have.
#5 (“Treat people who know less than you with respect, deference, and patience.”) applies not only to non-programmers, but especially also to lesser experienced programmers. Some of the biggest assholes I’ve ever met were some of my coworkers in my first professional development experiences.
This advice is always good. Thanks for posting, I really needed to read this.
Loved the article!
Jeff, do you concede me the permission to translate this to Brazilian Portuguese and publish it on my blog (with proper credits and links to the original), please?
“The guy in the room” is from Jim McCarthy in “The Dynamics of Software Development,” not Weinberg. Here’s a presentation where McCarthy discusses the problem.
How so? That book is from 1995. The Weinberg quote is from his book in 1971.
I’ve got the Kindle version of that book here, and a search for “commandment” turns up zero results. That’s why I went searching for another reference to that idea in other books, and found it in McCarthy’s book. Can you give a chapter reference or page reference to these 10 commandments? I’ve also got a paper copy of the Silver Anniversary edition. (I bought the Kindle one solely for this, because I got frustrated paging through the paper copy looking for this list of commandments.)
It looks like you are right! I am not exactly sure of the provenance of the exact text, then.
Thanks for this, I love the term “egoless programming” and it’s something I look for in good collaborators and strive for myself.
I’d recommend changing “guy in the room” to “person in the room” or “coder in the room,” since it’s good to be inclusive even when talking about bad qualities.
This is really a timeless piece of very valuable information to any programmer.
Still, there is something i would like to add, from my personal experience:
Item 9., “Don’t be the coder in the corner” - while i think this is true, to an extent, it shouldn’t give people shame if they sometimes perform better when coding alone. Don’t put yourself in a position of unease for extended periods, just because you understand some 10 commandments of egoless programming that way. This should not be always, but in some task or project, i need to take my time to come up with a good solution, and while any solution should always be presented (and defended if necessary, and adapted from external input if necessary), sometimes it can be better to take your time with it, because of the other egos that might influence a solution to the worse, when doing so prematurely.
When you are an experienced programmer, you are your own worst critic, so make use of your strengths, know your strengths and don’t let people tell you otherwise. Let the results speak for themselves.
It always depends on the environment, but it should be your call to choose the right approach. You are the expert.
I read your 10 Commandments of egoless programming with much personal interest.
In 1978 I encountered “improved programming technologies” and heard the term “egoless programming” as an ideological movement by corporate computer programming managers and their consultants to try to make mediocre computer programmers produce bug-free code that met specificatons. I called them: The mongoloid hoard.
I was working in IBM Poughkeepsie MVS development on the Real Storage manager. I was a junior grade employee: I had a gray plastic top desk (There were three grades of computer programmers: gray tops, fake wood tops and real wood desks). Sitting at my gray top one day, I overheard the people in my group with fake woodtop desks, in a walkthrough, humiliate – repeat: h-U-M-I-L-I-A-T-E a poor helpless programmer at the same low rank as I was, in a “walkthru” of his code. I had come to IBM with as a 6 year veteran of “systems programming” in the coroprate world; this unfortunate young man kept a Snoopy dog figurine on his desk and could not defend himself.
Everything had been converted from assembly language to a higher level language, PL/S (which is something like PL/1). My third line manager told me: We know you can do the job your way, but what do we do with all the other programmers who can’t tell an L from a LA? (“L” and “LA” are IBM S/360 assembly language operation codes and if you pick the wrong one it results in a nasty, hard to find bug in your program.)
I owned the only piece of assembly language code in my component; it was too performance critical to convert. Obviously, risky stuff. My first line manager, who wore socks with machine stitched Mickey Mouse images on them, told me they had scheduled a walkthru of my rewrite of it. I told him that I would discuss particular criticisms of my code but that I “would not be ground up”. They backed off and cancelled the walkthru; my [obviously both risky and product critical] code shipped unreviewed and I never heard any APARs (“buge”) from it. I was dead right, i.e., right and dead.
By the words “egoless programming”, back then (1978) I understood an attempt to make computer programmers have no egos, i.e., no souls, no sense of self or self-respect. I considered myself to be a zek (that’s what inmates of Joseph Stalin’s Gulag were called) in Cyberia.
So you can imagine what I was expecting when I Googled “egoless programming” and your 10 commandments came up. But what I found looks entirely reasonable and respectful even of low level computer programmers, not something to destroy their minds and souls. Criticize the code; educate the coder.
I don’t know if you know about “The great GOTO war” from that time (1978). They wanted to get rid of GOTOs because GOTOs could enable incompetent programmers to easily write unmaintainable code by branching into anywhere from anywhere at any time. I was on the losing side, like the Confederates in the Civil War. (As a COBOL trainee, I rewrote one such program; I replaced infuriating spaghetti code where you could not follow what it was doing, with clean table-driven code.)
Today I see more clearly than I did then: They were objectively correct that GOTOs were not good, but they were doing it in a Stalinist way and I balked at having my soul destroyed. Had they approached me respectfully and engaged with me as a peer… I hope I would have acceded to what the philosopher Jurgen Habermas calls “the unforced force of the better argument”. I was fighting against being a goose for foie gras. I was not really fighting for GOTOs: I was fighting for human dignity for people who had only gray plastic top, not fake wood top desks, i.e., for myself. (Had they made me an offer to become a warder, I might well have joined the enemy as staff officer, but they didn’t.)
There is a relevant book here: Philip Kraft, “Programmers and Managers: The Routinization of computer programming in The United States” (1977).
I would call what your 10 commandmants seem to me to say something not so easily interpreted by wounded veterans as soul murder. Something like “reflectively distanced programming”, i.e., where “we all – from the people with fake wood top desks to those with only gray plastic top desks – are all peers striving together to make the computer have as good a product as we can, with all of us supporting each other as equals. The computer and the program are both objects we use to achieve our cooperative goal, but all of us are the subjects, not some of us treating others of us as objects along with the computer.” Criticize the code, educate the coder, respect everyone.
Computer science is one thing. the labor of wage-slaves in a capitalist economy is another thing. I paid the bills writing code but only because I could not find a way to do that by being a humanist scholar, a failed philosopher and later an excommunicated psychoanalyst. I started programming keypunching my own drum cards; for fun, I once turned a big insurance company’s production IBM S370/158 into a simple adding machine from machine code I punched into cards which I IPLed from the card reader; as a systems programmer I did all sorts of stuff in key zero supervisor mode on big bank corporate computers; I loved both 360 assembly language and APL; I finally got PTSD from trying to make Angular 2 jump thru undocumanted hoops and failing to succeed at it. I could never find any employer who valued my wisdom, only use my manpower. Everybody wanted new hires who lusted to work in a fast-paced environment; I had seen haste make waste.
I hope you have learned something from one person’s experience in Cyberia back in 1978 with the term “egoless programming”. (Many years later I came to resent: “scrum”, ideological purification “criticism and self-criticism” meetings like in North Korea; “scrum” derives from the brutal British sport rugby)
Let me close with two things: (1) In IBM, in 1978, I once met a person who programmed APL for chip production applications in Purgatory (IBM’s Fishkill New York computer chip facility); he rewrote programs that ran for days and reduced run times to a few hours; he had been a delivery truck driver but they gave him a programmer aptitude test and he proved to be a programming genius or close to it – he came to work sometimes, wore jeans, and grew house plants in his basement. (2) There is a famous IBM poster: “How to Stuff a Wild Duck” (It’s on the internet). It shows a duck whose feathers are all the cliches about corporation conformity; Thomas Watson Jr says that every company needs its wild ducks and IBM knew how to take good care of its wild ducks. I, alas, became just a dead duck after "Quack!"ing for 19 years.
These are amazing stories, thank you for sharing them with us!
I have lots of stories. For one, when I was a junior systems programmer in a big insurance company, walking back from lunch one day with the 2 sr sp’s, one of whom was obese, party crippled and looked mentally disabled but in reality was highly regarded by IBM Field Engineers, and the other, who had never seen a dentist in his life, The IBM sales rep and my employer’s VP of DP were walking a few steps behind us. IBM Sales Rep to VP loud enough for the 3 of us to easily overhear: “There go your bearded hippie freaks” (in fact, 2 were “rednecks” and I was a Yale graduate – none of us were in the love beads set although they did allow me to have a beard). I was young then. Today, If that IBM Sales Rep had done that, I would have called IBM Corporate and he would have been toast.
IBM again. Overheard walking down an aisle in “Armonk” (1986ish), one business planner to another, verbatim: “Fishkill is not coming in with the inventions on schedule.” Uh, huh.
Well, if you ever recall any more stories you’d like to share, feel free to share them here. As long as they’re family friendly
Yes, yes, Brad (@bradmcc), I found your stories interesting. Funny how many of the same situations you talked about are still happening. It’s like that in practically every industry.
I hope I won’t repeat myself here: My first programming job (1973, USF&G a very partician insurance company) I was a trainee and there were two systems programmers. The senior guy was in fact highly competent and well respected by IBM Field Engineers but he literally looked mentally retarded and people would give him short change when he bought something in a store (he was also legally blind and partly crippled). The other one had never seen a dentist in his life.
So there was the “moron”, the redneck and me from Yale and they did tolerate me to have my short scraggly beard (the other two were clean shaven). We were all 3 dressed properly in business attire. One day the three of us were walking back from lunch and the DP VP and our IBM Sales Rep were walking a few feet behind us. The IBM Sales Rep (Harris Jones was his name) said to our DP VP, quite loud enough for the 3 of us to hear: “There go your bearded hippie freaks”. Many years later I asked the senior guy if I had remembered correctly and he assured me I had.
One morning when I came in to work, the guy who had never seen a dentist was sitting at his desk already working, drinking CocaCola and popping M&M’s. I said to him: “Manley, you’re going to rot your brain!” He smiled through his rotting teeth and replied: “Nope! Never had none!” He got stuck converting DOS to OS (“DUO”) and years later became head of DP For Michigan Blue Cross and one night unexpectedly died in his sleep.
The senior systems programmer had a checkered career including [literally:] getting fired for doing too good a job at a big bank where he had risen to AVP. He finally crossed the Social Security finish line and took early retirement. The last I heard of him, a year ago, he had somehow become a Trumpie and, bedridden with serious back trouble, fantasied shooting it out at his front door to defend his rights against the Democrats in a new Civil War (He has guns and knows how to use them). He had been an incredible systems programmer – he used part of an old WWII bomb sight to read core dumps, and he had been also a really great manager (he led from the front, not from the rear).
Here’s another one: Another really great manager I had in a big bank. He has a sign on his desk:
We the unwilling, led by the unknowing.
Have done so much with so little for so long
That now we are qualified to do everything with nothing.
Needless to say, not the greatest place to work. He was so great a programmer he did not just report bugs to the manufacturer: He told them how to fix the bugs and they applied his fixes. His successor was rumored to carry a concealed pistol to work (1976ish) and I never asked.
So packing a pistol had nothing to with the manufacturer doing what he told them to do?
Maybe I wasn’t clear and I did not tell the whole story: The manager with the “Can do everything with nothing” sign on his desk, Harold Jones, was a Burroughs Midrange computer expert systems programmer. I was hired to do the IBM side of converting the bank’s big Burroughs system to IBM MVS. Harold asked to go back to being a non-manager systems programmer because, he said: “Somebody’s going to get ground up in this conversion and I don’t want it to be me.” Then they hired a new manager of systems programming to replace Harold. The new guy, whose name I forget, is the man who supposedly carried the concealed pistol to work in the bank (this was before 911, right? And he may have had reason to be concerned for his safety outside the office). Now: The new guy lived over 40 miles away and had a big commute. The bank was in Baltimore Maryland. I used to ask the new guy: “Have you found you dream row house in Highlandtown?” Highlandtown was a “bad neighborhood” where bank managers did not reside; “row houses” are not MacMansions. Back to Harold Jones. He was a real “redneck” (these were the end times for the Data Processing “Wild West”). One Easter Sunday morning he was working in the datacenter and a black employee stopped by to show off the place to his girlfriend. Harold spontaneoudly exalaimed: “A chocolate Easter egg!” The guy took it in good humor. Times have changed, yes? the second shift data center manager was an old army man who had quit after 19 years (you get a pension at 20). He came to regret this. He got so frustrated that he told his manager: “If you tell me to dig a hole, I dig a hole. If you tell me to fill it up again, I fil it up again. Anything you want, SIR!” He got what I called a “remotion” to 3rd shift mnager. Meanwhile, back in the check sorting department (we had a big row of check sorters then because credit cards were not yet hegemonous), a number of the low level workers got fired for smoking marijuana on the job. Department of humor: One morning I came to work and a lady was literally standing on a table in the cafeteria and shrieking because there was a mouse loose in the carfeteria…
Different job: IBM Research. We got to choose our own computer user id. I chose: MICE@yktvmv.