How to improve the quality of programmers

Friday 9 Mar 2007

After claim­ing that most pro­gram­mers just can’t pro­gram, and actu­ally address­ing most of the prob­lems to the lack of pas­sion of peo­ple who decide to start a career as a pro­gram­mer, I would also like to express my point of view on a tightly related sub­ject: what can be done to improve the sit­u­a­tion? The prob­lem that I was try­ing to bring up in the spot­lights, is that a lot of peo­ple just start (or wish to start) a career in the IT for no par­tic­u­lar rea­sons. Those are the ones who don’t love and don’t loathe pro­gram­ming, and they just see it as some­thing that pays their bills. Well, maybe the first ques­tion that I should address, actu­ally is: why is this bad? Sure there are so many jobs which don’t require pas­sion at all, and peo­ple just do them because a job is just a job, and don’t really care. In my opin­ion, being a pro­gram­mer is different.

There are many peo­ple, espe­cially the ones who sit high in the hier­ar­chy of a com­pany, who see pro­gram­mers as the last and least impor­tant step of a lad­der. They often think that pro­gram­ming is quite of an auto­mated and repet­i­tive task, and it could basi­cally be done by any­one, with just a lit­tle train­ing. Unsur­pris­ingly, this seems to be the opin­ion of most com­mon peo­ple, who ignore what pro­gram­ming really is. I wouldn’t want to dis­crim­i­nate among dif­fer­ent types of pro­gram­ming, or dif­fer­ent pro­gram­ming lan­guages, but it’s obvi­ous to me that pro­gram­ming, to some extent, actu­ally can become an auto­mated an repet­i­tive task. That’s quite the minor­ity of cases, though, so I will sim­ply ignore them, and focus on the rest.

As any­body who’s a pro­gram­mer knows, pro­gram­ming is a highly cre­ative task, that requires good imag­i­na­tion and great prob­lem solv­ing skills. Every­body else might just see it as “typ­ing stuff on a com­puter”, and believe me, there’s a whole lot of edu­cated peo­ple who think that pro­gram­ming is a mon­key mat­ter. Hence the term “code mon­key”. This term has his­tor­i­cally been abused a lot, by even pro­gram­mers them­selves. A “code mon­key” is said to per­form a pro­gram­ming task so easy that even a mon­key could do, as the image sug­gests. There are two truths about this phe­nom­e­non: first of all, luck­ily, pro­gram­ming requires far more skills than it’s usu­ally believed; sec­ondly, and sadly, the major­ity of peo­ple just ignore it.

The prob­lem with lousy pro­gram­mer is kind of sim­i­lar to a medal: it’s dou­ble faced. You could actu­ally call it a dog try­ing to bite its own tail: as pro­gram­ming is believed to be an eas­ier and eas­ier task, more pro­gram­mers are needed; as more and more pro­gram­mers are needed, more peo­ple will jump on the field; as more and more peo­ple try to become pro­gram­mers, the lousier the aver­age qual­ity of pro­gram­mers gets. Unfor­tu­nately, what aver­age non-programming peo­ple miss to under­stand is that although it doesn’t really take a hard train­ing to become a lousy pro­gram­mer, it takes a damn hard one to excel in the art of pro­gram­ming. More­over, most peo­ple just lack the innate logic mech­a­nisms that make you a poten­tial pro­gram­mers. Such mech­a­nisms are devel­oped in your mind when you’re very young, and it’s quite rare to develop them after your twenty-somethings. With this, though, I’m not deny­ing that there are a lot of peo­ple who actu­ally do develop those mech­a­nisms in advanced age. I’m just try­ing to think of the big num­bers, here.

So, get­ting to the point, what went wrong and how can it be fixed? I don’t think it would be wise to say that what’s wrong is that there’s too much need of pro­gram­mers, ergo the aver­age qual­ity was inevitably doomed to lower and lower over the time. I rather think that the prob­lem is with edu­ca­tion. Of course I can’t speak for all the uni­ver­si­ties and col­leges in the world, but I can at least try and speak for the one I’ve known per­son­ally, or through peo­ple who have stud­ied there. It seems that, as more and more peo­ple apply to Com­puter Sci­ence or related depart­ments, the eas­ier it gets to get in (sorry for the pun), and to get through with it, i.e. to graduate.

I know this hap­pens most likely in any other fac­ul­ties, but see­ing that there are peo­ple who have been study­ing CS for three or more years, and still can’t get through the most sim­ple con­cepts, just doesn’t seem right to me. Yes­ter­day night, I was sit­ting in an IRC chan­nel about the C pro­gram­ming lan­guage, when some­body joined in and asked:

I just started study­ing struc­tures in C, and I don’t get them. Can any­one explain to me what’s the use for them?”

Ok, I don’t really think there’s any­thing wrong in not get­ting the point of C struc­tures right away, but after a lit­tle chat­ting, it turned out that the guy was in his sec­ond year of Com­puter Sci­ence, and this was the sec­ond time he took the C class. Still that wouldn’t be a rea­son of hatred, of course (not that I have any hatred), but after another small while it turned out that the guy didn’t like pro­gram­ming at all, but he just got him­self into it because he applied to CS since he liked to “fid­dle around with com­put­ers”.

What’s really needed, in my opin­ion, is a harder and less tol­er­ant edu­ca­tional sys­tem, that would be more selec­tive, rather than push­ing every­one for­ward. Peo­ple that find out to be really not made for it, should just give up and move their focus on some­thing less.

I’m actu­ally very well aware that a lot of pro­gram­ming work, nowa­days, is not really rocket sci­ence, still this doesn’t mean that it should be done by com­pletely unqual­i­fied peo­ple. If what Jeff Atwood says in his post about pro­gram­mers who can’t pro­gram is true, and that is that 199 out of 200 appli­cants (not pro­gram­mers, appli­cants) can’t write any code what­so­ever, than it obvi­ously means that some­thing is wrong. Look­ing at the num­bers pro­vided by Joel Spol­sky, it looks like a lot of these basi­cally incom­pe­tent peo­ple are going to end up work­ing on an actual pro­gram­ming job, and maybe their code will end up on The Daily WTF (Paula, are you there?).

Unfor­tu­nately, the edu­ca­tion is not the only one to blame. No mat­ter how much edu­ca­tion will improve, there will always be unqual­i­fied peo­ple who are going to apply for jobs that require a lot of skills, and in the end the odds will help them, so they’ll man­age to get a job as a pro­gram­mer. Is it so bad, con­sid­er­ing that it’s most likely not going to be any crit­i­cal posi­tion, and the only ones that will be dam­aged will be the own­ers of the com­pany that hired them? Well, the point is that this is not true. There’s some­one else who gets dam­aged, in this sce­nario. I’m talk­ing about the com­mu­nity out there, the good pro­gram­mers, who find them­selves com­pet­ing with new­bies who’re happy to earn peanuts. The salaries keep going down, and cus­tomers are not able to dis­tin­guish a good job from a good one.

In a com­ment on the pre­vi­ous post of mine about this sub­ject, Hoowie Good­ell really gets a great point with this paragraph:

There has been a great effort to indus­tri­al­ize pro­gram­ming, too. Again, there are many good fea­tures, and it’s a field I’m inter­ested in. Build­ing a large pro­gram requires a struc­tured approach. Lan­guage design, libraries, pro­gram­ming frame­works and IDEs can and should incor­po­rate as much exist­ing human knowl­edge as pos­si­ble — com­puter sci­ence, domain knowl­edge, solid pre-written code and human inter­face prin­ci­ples. (Check out Thomas Greene’s “Cog­ni­tive Dimen­sions of Nota­tions” for some of the lat­ter — I think of how pro­gram­ming tools fail to use them on a daily basis!)”

In a way, this sug­gests that the whole sys­tem is not ready yet, as it’s indeed years and years behind sev­eral other engi­neer­ing fields, and that’s a good rea­son, prob­a­bly, to explain why it’s so easy to fail at being a good pro­gram­mer. Let’s just try to get some insight­ful inspec­tion points, in order to build bet­ter gen­er­a­tion of programmers:

  1. Bet­ter edu­ca­tion.
    The whole higher edu­ca­tional sys­tem should be improved in sev­eral way. World­wide. Nowa­days, it looks to me that in many coun­tries grad­u­a­tion is just a direct con­se­quence of apply­ing to an Uni­ver­sity. Unfor­tu­nately, this kind of prob­lem must be addressed on a country-basis, to prop­erly iden­tify the spe­cific issues, but still the options that I would like to con­sider are worth men­tion­ing. It all comes down to a sin­gle point: there should be less tol­er­ance towards peo­ple that don’t learn. The thresh­olds for suc­ceed­ing in a course should be raised to greater dif­fi­culty. Cur­rent mod­els of test­ing should be seri­ously revised, so to ensure that stu­dents that really didn’t under­stand the sub­ject are not going to make it.
  2. Bet­ter tools.
    Are we try­ing to make pro­gram­ming just like a fac­tory chain or are we not? If we are, as it seems nowa­days, then the tools are not ready yet to sec­ond our inten­tions. Pro­gram­ming is too error prone and too time-consuming.
  3. Bet­ter process.
    Soft­ware process that doesn’t con­form to some stan­dards, say ISO-9000 (sorry if it’s inap­pro­pri­ate, I’m not an expert on this kind of stan­dards), shouldn’t be allowed to sell. Qual­ity insur­ance com­mit­tees should be taken more seri­ously as being part of the process. This might be against all prin­ci­ples of lib­er­al­ism, I know, as bad soft­ware, you may say, will not sell any­way. I know many bad soft­ware that did sell well, for greatly dif­fer­ent rea­sons than its (non) good quality.
  4. Bet­ter judg­ment when hir­ing.
    I’m not going to try to teach you how to run your com­pany, nor how to hire your crew. But some­times really crazy thing hap­pen (again, is Paula around?). A very inter­est­ing post by Joel Spol­sky (I’m sorry, I can’t find it any­more: does any­body know the link?) talks about only hir­ing “A”-people, where “A” means top class. If you’re ever hir­ing a “B”-person, he’s quite likely to hire a “C”-person, some­day. After that, it’s chaos. I rec­om­mend any­one not to lower their canons of per­fec­tions. Here’s another great arti­cle by Joel, about hir­ing good devel­op­ers, I rec­om­mend it.

Con­clud­ing, improv­ing the qual­ity of pro­gram­mers seems really to be a tough issue, and the whole thing depends on so many fac­tors that track­ing a pre­cise prob­lem is impos­si­ble. Cul­tural and tech­ni­cal dif­fi­cul­ties arise all the time, and get­ting clues is hard. I’ve tried to get around the prob­lem and give some insight­ful opin­ions: what do you peo­ple think?

Printed from: http://www.iovene.com/57 .
© Salvatore Iovene 2010.

10 Comments   »

  • Ludo says:

    (Some typos:
    and believe you me, -> believe me
    I don’t it would be wise to say -> don’t think)

    Loved you arti­cle, as I did your pre­vi­ous one. I totally agree with your view on this mat­ter (except maybe that non-standards-compliant soft­ware should be allowed to sell). For good pro­gram­ming, you need pas­sion. Almost nobody thinks of it that way, but I’m con­vinced it’s true. The edu­ca­tion prob­lem is impor­tant as well — it’s the same here in Belgium.

  • @ Ludo // com­ment #2

    Thanks for the typo report and for read­ing :)

  • Just me says:

    Nice arti­cle. Dunno if you already changed the font, but I cer­tainly find it read­able enough (if not, peo­ple can always ctrl-+ to increase font size, can’t they?).

    I mostly agree, except for the devel­op­ing brain wiring thing. Admit­ted, I was already inter­ested in pro­gram­ming when I was 10 or so, but I got my first com­puter with 19 (par­ents...) and the very basic BASIC when I was a kid wasn’t ANYTHING like the stuff I’ve been doing the last eight years now (turned 27).

    What it takes is lots of hard work (there’s a good arti­cle “teach your­self pro­gram­ming in ten years” or sth. like that) and the moti­va­tion to learn all the con­cepts there are in pro­gram­ming (func­tions, higher-order func­tions, data types, objects, poly­mor­phism, sub­typ­ing, inher­i­tance, modules...).

    I started with read­ing ESR’s how to become a hacker, learned Lisp (first Scheme), C, Java and some assem­bler, SML and peeked at some other lan­guages. It takes time.

    The best we can do is edu­cate peo­ple about the com­plex­ity, and to tell them that soft­ware qual­ity IS man­age­able, i.e. you need to get a team of good devel­op­ers, but then you can do it. And we also need more soft­ware com­pa­nies (or con­sult­ing shops) run by devel­op­ers. And fewer archi­tec­ture astro­nauts; they steal our bread, lower our wages, and talk crap most of the time.

  • BlogReader says:

    Liked your arti­cle much more than the “lousy” one as it put forth some ideas on how to improve things.

    How­ever I can’t really see this hap­pen­ing as we’re suf­fer­ing from a Loke Wobe­gon effect where every­one thinks they (or their kids) are above aver­age. Try­ing to reverse that is going to be really tough. Also there’s a lit­tle too much social Dar­win­ism in that for me — for exam­ple the weed out classes at my school were almost guess­ing games in the cor­rect answer as the prob­lems were really com­plex. But that’s a fault of the university.

    And I agree with your post about this dri­ving down wages, and I mainly blame busi­ness peo­ple or those that get into project man­age­ment with a few years of expe­ri­ence. They don’t know the full price of a bad pro­gram­mer and think they are all just cogs. If they are all cogs why not get the cheap­est one?

    The rea­son this can go on is that peo­ple move around in jobs so there’s no such thing as an insti­tu­tional learn­ing where some­one can say “whoa we tried off­shoring this com­plex project to India / China / Rus­sia and it came in 5x over bud­get and 3 years late” It is like all projects of this sort start anew with peo­ple think­ing its going to be all roses and are shocked, shocked to find out that they don’t get amaz­ing results.

  • george leroy tirebiter says:

    I teach CS at a uni­ver­sity where the stu­dents are (for the most part) pretty poor. (Hence anony­mous post­ing.) We’re stuck though, as we’re a state funded insti­tu­tion and reten­tion (keep­ing stu­dents at the place) is king. As is stu­dent eval­u­a­tions — being tough on stu­dents is a good way to lose your job.

    I was seri­ously down­rated on stu­dent eval­u­a­tions for actu­ally try­ing to teach some­thing that I thought was fairly basic in a course that the stu­dents said was “intro­duc­tory” and there­fore was nec­es­sar­ily easy. Even so, I felt required to pass most of the stu­dents (a 2.0 aver­age here is really a 1.0 or less in abil­ity and given the trends I’m see­ing a 3.0 will soon be a 1.0).

    We don’t even have weed out courses (as men­tioned above). Such things would be tossed out by the uni­ver­sity as evil. This bugs me as I’ve worked in indus­try and most of our grad­u­ates are not worth hir­ing — but there’s no way they can know that and no way I can com­mu­ni­cate that to anyone.

  • @ Blo­gReader // com­ment 4

    Thanks. I also have to agree with you: this isn’t going to hap­pen. It’s kind of sad, but given the cur­rent sit­u­a­tion, I can hardly see any improve­ment chances.

  • @ george leroy tirebiter // com­ment #5
    George (or what­ever your real name is! :) ), I find your expe­ri­ence very inter­est­ing. Should you read this, I invite to write about it more exten­sively and I could pub­lish it.

  • Alexander Fairley says:

    It is always a silly thing to give advice, but to give good advice is fatal.

    Genius is born–not paid.

    Most peo­ple are other peo­ple. Their thoughts are some­one elses opin­ions, their lives a mim­icry, their pas­sions a quotation.

  • Tilo says:

    I don’t agree with you’re idea about mak­ing uni­ver­sity harder, shar­ing Blo­gRead­ers opin­ion. What I do think is that CS edu­ca­tion could need a broad­en­ing of it, tak­ing in more other sub­jects and thus show­ing that com­puter sci­ence is a seri­ous sub­ject and not some­thing you fin­ish by read­ing a book and typ­ing some code.

  • @ Tilo // com­ment #9

    Hi Tilo. Uni­ver­sity shouldn’t nec­es­sar­ily harder: it just would need not to let right about any­one advance so eas­ily. See com­ment #5.

Trackbacks/Pingbacks

  1. Me : Code Monkey | pakdhe.febri.web.id

RSS feed for comments on this post , TrackBack URI

Leave a Reply

 
  • Hello there!

    You have landed to my personal website, where I write about things that I find interesting. I am a software engineer, Open Source supporter and free thinker.   Read More →