I am hardly the world's best programmer. I'll be the first to tell you that there are tons of developers out there better than I am. But here's the thing: in the ten years I've been gainfully employed as a so-called professional programmer, I can count the number of truly great programmers I've worked with on one hand. I know this probably sounds like hopeless elitism, but hear me out: there's something unique about our profession that leads to an unusually profound disparity in skill.
In programming specifically, many studies have shown order of magnitude differences in the quality of the programs written, the sizes of the programs written, and the productivity of the programmers. The original study that showed huge variations in individual programming productivity was conducted in the late 1960s by Sackman, Erikson, and Grant (1968). They studied professional programmers with an average of 7 years' experience and found that the ratio of intitial coding time between the best and worst programmers was about 20:1; the ratio of debugging times over 25:1; of program sizes 5:1; and of program execution speed about 10:1. They found no relationship between a programmer's amount of experience and code quality or productivity. (Code Complete, page 548)In other words, the good developers are really good, and the bad developers are atrociously bad. You really never know what you're going to get when you arrive on a job: statistically, you've got a fifty/fifty chance of working with either a genius or a jackass. Isn't that reassuring?
Wouldn't you expect a truck driver with twenty years of driving experience to perform better than a rookie with less than a year of road time under his belt? Of course you would. And shouldn't a grizzled ten year veteran of dozens of software projects-- like, say, myself-- perform better than some punk kid directly out of college? Well, you might think so, but in the bizarro world of software development, that logic doesn't apply:
[In the analysis of Coding War Games results, 1977 - 1986, we found that] people who had ten years of experience did not outperform those with two years of experience. There was no correlation between experience and performance except that those with less than six months' experience with the languages used in the exercise did not do as well as the rest of the sample. (Peopleware, p. 47)
In a study with similar findings, Bill Curtis presented a group of 60 professional programmers with what he characterized as a "simple" debugging task ("Substantiating Programmer Variability," Proceedings of the IEEE, vol. 69, no. 7, 1981). In spite of its simplicity, 6 of the professional programmers weren't able to complete the task, and data on their performance was excluded from the results of the study. Curtis observed order of magnitude differences among the programmers who were able to complete the task. (Steve McConnell)
What the hell kind of profession generates so much data supporting the hypothesis that there is no correlation between experience, performance, and skill? Where do we go from there? I don't have any answers, but I do have two suggestions.
That's EXACTLY what I am thinking! I am glad you pointed that out! I think you should publish this blog entry on EVERY major news site, so people GET it and we get rid of those crappy programmers who prog just for the money (implying that they are not as good as programmers who LOVE to develop software!)
Hermann Klinke on September 4, 2004 4:04 AMAt the risk of being redundant (well, it isn't that bad in the literary realm :) -- my thoughts, exactly. For me, programming is more of an art form and I truly enjoy it, and this is more than paying mere lip service.
By that, I mean reading several technical magazines, buying and *reading* lots of books, attending conferences like the PDC (paid my own fare last year), browsing blogs and spelunking around w/ the copious Beta stuff that MS keeps churning out, etc...
Of course, you won't always be rewarded coz people seldom judged by sheer technical skill alone -- especially if you work for a large (non software) company where you have a lot of other BS -- but as someone put it, the reward is the journey itself.
And that, my friends, is the Zen of a true programmer...
Atul
Atul on September 6, 2004 1:48 PMThis is exactly what I've observed in my professional experience. Most of my career has been at one (fairly large) company, but I wasn't sure if this phenomenon was just local to my city. Thanks for posting some real research on the subject!
Bryan Creel on September 7, 2004 10:35 AMI think you are right if you are good you would not fight about competetion. You do your job and forget about outsourcing. If you company wants to lose you you know there are missing some thing value able.
./thanks
ilaiy
Throughout my career, I have been considered several times more productive than my fellow programmers. Where I last worked I was the last employed developer for 2 years in a Fortune 500 company, everyone else was offshored. The CIO decided that I had to get to boot to fit his agenda (even though I was several times more productive than the offshore people), so now I am looking for a job, but everyone has told me not to mention how productive I am on my resume because is sounds like I am cutting down my former fellow employees. My resume now makes me look mediocre. Any ideas?
GomerDomer on December 31, 2005 10:39 AMAs a person who loves to code, sometimes I feel like an artist who creates the Mona Lisa only to present it to a group of kindergarteners.
With larger pieces of code being shipped offshore, the overall level of code quality can only decrease.
"You're already spending your own personal time on professional development."
No I'm not - I'm burning my company's time. But they don't have much for me to do right now anyway. That's why I went to an interview earlier today and am reading blogs now.
AC on January 30, 2007 4:05 PMI've read the Curtis paper, and Steve McConnell's statement is inaccurate. There were 54 coders (not 60) and only one person couldn't finish the task in the time allowed (not six). See the original paper at
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1456356
I also have a problem with how people phrase the productivity difference, as a ration of the best to worst. I am a million times more productive than an elephant or emu. I am at least a thousand times more productive than a human infant. Those are silly comparisons, but so is the best:worst ratio, because there is a huge long tail on time-to-complete-a-task.
What I've seen from analyzing the (scarce) academic literature on the subject is that the difference between the best and the median is about 3x-4x on any one task. Note, however, that as you start to look at multiple tasks, the difference gets smaller.
You can see some of my analysis and pretty graphs and so on at
http://www.webfoot.com/blog/category/programmer-productivity/
I've analyzed the academic literature carefully, and I get a very different message from it than what you report.
First, the best:worst ratio is a bad measure. It can be totally skewed by one outlier and the outlier can be infinitely bad. (I write code infinitely faster than an emu or grizzly bear, for example.) A much more realistic/practical measure is the ratio between the median and the best.
Second, the Sackman study is taken out of context. Sackman et al were trying to quantify the productivity gains of timesharing systems over batch, and that's where the productivity difference comes in. If you go back to the source data and look at it more realistically, you more like a 2:1 difference in productivity between the fastest and median coder. See
http://nothing.tmtm.com/archives/date/2002/09/28#a309
Third, what McConnell says about the Curtis study is inaccurate. There were 54 coders (not 60). They were given two tasks, and only one person didn't finish in the allowed time (not six). See my analysis at
http://www.webfoot.com/blog/2006/12/07/programmer-productivity/
Fourth, DeMarco and Lister did a study in 1985 that showed a stunning correlation in time-to-complete-a-task of people who worked at the same company. They speculate that the office environment is a major influence on productivity, with some pretty stunning data to back that up. Meanwhile, they have a time-to-complete histogram that shows that the ratio between the mean time and fastest time is between 2 and 3. See my analysis at
http://www.webfoot.com/blog/2007/02/16/demarco-and-lister/
Fifth, the academic literature mostly shows time to complete one task. Because of regression to the mean (i.e. the more trials you have at a probabilistic event, the closer you are likely to find yourself at the expected value), the difference between median and fastest is probably not going to be as large as for any one trial. Andrew Ko recently published a study where he asked people to do five tasks and the variation between the fastest coder *overall* and the median coder *overall* was less than 2x. See my analysis at
http://www.webfoot.com/blog/2006/12/15/programmer-productivity-part-2/
hmmm, I assumed that I misfired somehow the first time I posted, but I still don't see a post. I presume that you're moderating, in which case take whichever one of my two postings you like better. I think the second one is a little better, but YMMV.
and you probably shouldn't keep this postlet...
Kaitlin Duck Sherwood on February 16, 2007 5:37 PMOf course, the tough part (starting out as a teenage Python programmer) is to figure out which category I'm in. I've made what looks like a fairly cool CMS design, but making a parser for a UTF-8 based language in C++ completely kicked my second-most-important-asset.
I agree! But what makes a truly good programmer? I have enough experience to know that I fall into that category and am married to one who is even better. How do you recruit the great programmers? What gives them that edge? We've come up with a few traits:
Attention to detail: This one is big, and it's required for non-programmers: DBAs, network admins, testers, etc. If someone's code, database, etc. looks like a teenager's room, forget it.
Ability the see the big picture: Seems like the opposite of the above, but absolutely required as well. The programmer has to be able to translate everything he is doing into the real world and relate it to the requirements, and vice versa.
Ability to self-teach quickly: Imperative if you want to keep up or even are just trying to stay in one spot. Good programmers also figure out their best method of self-learning. I'm one of the oddballs that reads the entire manual. Note that this has nothing to do with academic success--someone with an unconventional learning style might be able to translate that into effective self-teaching.
Ability to think in an ordered fashion and translate that: This one is arcane, but again, necessary. The "ordered fashion" may vary significantly. Personally, I think in English, in long, complete sentences (the verbosity of this post is completely in character). I translate that into code. My husband thinks visually and all of his design scratchings are diagrams of things linked together. It's a completely different approach.
Problem-solving: A skill necessary in almost all technical fields, from medicine to engineering. I think this skill can be taught more easily than some of the others. But you have to have some open-mindedness to find the source of the problem and its solution.
Synthesis: Possibly the most important, hardest to define skill necessary. A great programmer is able to synthesize code from requirements. He can make something that just wasn't there before. This is the "art" of programming. Mediocre programmers almost never have this skill. I don't think experience can yield this skill where it was missing, but this one gets a lot better with experience.
Well, that's my list. I've been keeping it informally for years. Most people don't like to hear about mediocre programmers, and it does seem "elitist" to put myself above them, but my work speaks for itself.
...' There are a hundred thousand well educated Indian developers who will do what you do at a fraction of the price, '...
The fact is, even here in India, most of the people who are well educated but are programming all the while thinking of the paycheck @ month-end rather than about the true joy of programming. They have become mere coders. http://timesofindia.indiatimes.com/Opinion/Sunday_Specials/Review/A_myth_called_the_Indian_programmer/articleshow/msid-1633868,curpg-1.cms
Irony, i would say, that a nation with plenty of software engineers, never brought out a remarkable product yet.
_raghava_ on June 5, 2007 6:50 AMI am a new programmer. I just got out of school, october of 06. I have been with a small software company for the last few months, and the disparity I have seen between academic coding and professional coding is incredible.
In the academic world, they harped on us all day to design first. Flow charts, UML, Class diagrams, DFD's and a host of other visio driven diagrams. These were the tools of the programmer they said.
But from what I have seen and heard from coworkers, so far is a bunch of half formed ideas, presented via powerpoint at a partially attended meeting. When this is all translated into code, these half formed ideas are strewn all over the program and of course not a one is commented.
Now I wouldn't presume to say that I know better than someone who has been designing and coding major applications for the last decade but to me it seems like people treat programming to much like work and not enough like art.
There was a running joke at my college that we are learning to be code poets. I like that, we are creating, we are breathing life into lifeless lumps of code. Each whitespace, each comment is helping to bring personality to that one line and vicariously to the whole program. Each application you design from the smallest address book, to the grandest operating system, should have the feel and personality of those associated with it. Sterile code leads to sterile programs.
Code Monkey on June 5, 2007 1:50 PM"there's something unique about our profession that leads to an unusually profound disparity in skill."
This is completely false. I'm a theoretical physicist who has worked closely also with mathematicians and theoretical computer scientists. The differences you describe are tiny compared with the difference between the very top theoretical physicists and even an average theoretical physicist. On accasion, I've seen the top people do in a minute or two what an average theorist would require months to do, or simply never be able to do.
Michael Nielsen on February 5, 2008 5:54 AMWhen you use the word "statistically" (as in "statistically, you've got a fifty/fifty chance of working with either a genius or a jackass"), what do you think that word means?
Chris Pine on February 5, 2008 7:31 AMI wonder what the ratio is between us commenters ;)
Stephane Grenier on February 5, 2008 7:33 AMJust like making a burger at BK, anything can be done with artistic attention. Coding/developing/netwoking all are no different than flipping burgers or installing cable TV. The tech world applies insane names to long-used common practices then only use the acronym to confuse the outsiders even more (thats what your paying for with your college degree).
The most important thing I've learned in my ten years of successful, lucrative, artistic application development? Without the acronyms and the egos, we're flipping burgers and anyone who decides to look past the BS we spew can start flipping for money. Sure, maybe they don't have hamburger talent but they can assemble the pieces. It's they BK employee who puts the attention into his burger that I celebrate!
Reality on February 5, 2008 7:44 AMhmmm, I assumed that I misfired somehow the first time I posted, but I still don't see a post. I presume that you're moderating, in which case take whichever one of my two postings you like better. I think the second one is a little better, but YMMV.
and you probably shouldn't keep this postlet...
http://nurmagomedov.blogspot.com/
I'm probably a crappy programmer. However owning my own business and the 10k other tasks I have to do seem to overwhelm the fun of programming. I guess when the only fun you have is breaking out that old 486 laptop and doing some C++ for DOS, you know you've missed out on the fun of development.
Rob on February 5, 2008 9:11 AMWhat I'm surprised about is with all this talk of programmers and their attention to detail, no one has mentioned that the pragmatic programmers link is 404.
I can has job now?
Newman Hunter on February 5, 2008 9:14 AM"Unless you truly enjoy programming you should seek another profession."
This is totally wrong. Sometimes developers are valuable because they write ok code, but also have solid communication skills and work well with others. How many of your 'super-coders' are borderline autistic uber-nerds?
The reality is that the pure coders are the most likely to get outsourced. If you're not working for a software company, chances are mgmt has no idea how good your code is. But they know if you play well with others.
I find it interesting that in this industry there is so much arrogance and the assumption that 'I' am a genious while my coworkers are idiots. Code quality is extremely subjective which reinforces these kind of opinions.
Robert Perkins on February 5, 2008 9:49 AMI for one, fall into the crappy programmer category. If you think you don't, think again. And again. And again.
As to:
...' There are a hundred thousand well educated Indian developers who will do what you do at a fraction of the price, '...
I would imagine they have the same problem. I'd be interested in the relative shapes of the curves though... I've seen a bit of off-shore code in my time and, with *very* few exceptions, it was crap.
spanky on February 5, 2008 9:52 AM"They studied professional programmers with an average of 7 years' (sic) experience and found ... no relationship between a programmer's amount of experience and code quality or productivity"
I don't think linking experience solely to time is the right way to approach this. In order for a programmer to gain experience, they have to code DIFFERENT things. Having a multitude of projects under your belt helps you learn the pitfalls of our craft because the variety stretches your preconceived design models past the point of breaking. If you have a person working on the SAME task for 7 years, then that's all they're going to be able to see when they focus on a new task. IMO this pretty much puts them on the same plate as someone that hasn't been programming for very long.
To me, the best way for you to learn about code quality and productivity is to be involved at all parts of the lifecycle. If you just repair bugs in certain modules that have been assigned to you, you start to lose sight of the product's big picture. Then, you stop understanding how "Input A" + "Mouseclick C" == "BSOD D." However, if you can reach that moment of "Wow, I would have never thought of this", you truly learn something (again IMO).
I would redo these studies and stratify the programmers (subjects) based on their understanding of a wide variety of code snippets. I'm willing to bet the understanding is going to relate pretty strongly to the quality of the things they generate.
I agree... and I'm using a small bash script to post this comment.
d.
dengel on February 5, 2008 2:15 PMGood advice. Except I am from the thrid world and the jobs are coming to my country. My problem is different I have trouble finding people who really love programming/coding/hacking and work mostly with people who just work to cash the check. It it wasn't for blogs like this and other places in the internet where people who really to improve and be a great programmer congregate, I think I'd just stay in school! Great post!
Neoryder on February 5, 2008 10:37 PMDo not assume blog readers are good programmers. I've read enough blogs to know otherwise.
In Fire on February 6, 2008 12:27 AMI don't believe INDIAN programmers are good, I still think american programmers,russian and europeans are good. I've seen these guys work and they are just a bunch of EGO-CRAP. By the way I'm a filipino.
If you think INDIANS are good well how come they haven't develop anything that's totally unique or amazing?
Well If you think about it they are just "COPY and PASTE" type of programmers if you know what I mean.
AnargeeK77 on February 6, 2008 5:21 AMThe first quote is on p. 682 of my edition of Code Complete. The link is broken too. The home page of the 2nd ed. is
Stephan on February 6, 2008 11:56 AM> 1. Unless you truly enjoy programming you should seek
> another profession. Be realistic: are you programming
> to collect a paycheck, or are you programming because
> you are driven to?
That doesn't really follow from your argument. A programmer can be really good but still be in it for the paycheck. I am usually writing code for money, and I am not always excited about what I'm writing, because it is rarely interesting or challenging. Still I'm fairly confident I'm writing better code than an eager but untalented programmer would write.
> There are a hundred thousand well educated Indian
> developers who will do what you do at a fraction of
> the price, and thousands more coming of age in other
> third world countries.
And almost all of them will be mediocre, if they follow the same pattern as American and European programmers do. They may be well-educated but they won't have the real-world business experience or the years of working on multi-programmer projects that I have, and working remotely isn't going to give them that experience. I'm not too worried. Outsourcing only threatens the mediocre, not the talented; if that was what you meant I'm sorry for not reading it that way.
> If you're reading this blog (and by this blog, I mean
> any programming blog at all), the above almost certainly
> does not apply to you. You're already spending your
> own personal time on professional development.
Actually we're probably spending our employer's time reading your blog.
> I'm not saying you should spend every waking moment
> in front of a computer like I do-- it's unhealthy--
> but the only way to keep our jobs is to actively keep
> improving. Treat your job like what it is: a highly
> skilled engineering profession that takes ongoing study.
True, but if you're one of the geniuses you don't need to spend all that much time honing your skills, because software technology moves pretty slow (I'm not referring to fads, which come and go). If you're untalented no amount of study is likely to make you a lot better. My experience has been that the mediocre programmers are missing a gene or something and no amount of study or practice makes them much better at programming.
Why you are worry about INDIAN Programmer ? They are still good enough to develop a software as well as hardware base product. I have designed I/O Controller(Ethernet, SATA, E1,T1, SDH frammer/deframmer) through VLSI(Design ,programming ,probing) and like linux I designed a Real Time Operating System much faster than linux and occupy lesser space than linux approx 3.5 KWord. Writing Code is still hubby for indian. Ok I will ask a qestion for you In linux suppose we design a process P1 and P1 having a system call sleep(10); Ok My question is being a programmer /designer ? how kernel will handle this delay to the process P1, Lin. Trovald known the complication to develop the delay syscall on multitasking system.
Ex.
processP1()
{ :
:
:
sleep(10);
:
:
}
Ex2.
void fx()
{
static int x=10;
:
:
}
Can any of one you tell me "static int x=10" is a imperative or declarative statement in C ?where x will go ?why x is initaize once? If you are strong in compiler design & its issues then you will able to code in optimize way. We indian are still investing our much of income into buying books & investing on inovation work "Ghost rider".
We are still not investing on showing what we have done. We are building our as Nation Strong as other developed country.
The post from Pravas indicates one problem I've seen with Indians, which is how they mangle the English language. It's a pity the Brits ever ruled India, because now so many Indians think they can speak English. On the programming side, there is a very serious issue. Yes, most Indians are horrible programmers - they produce buggy, uncommented code, they can't design large-scale projects, and so on. But the real problem is that now there is an Indian mafia of middle managers and even higher, and they are now in hiring positions in the U.S. They are only hiring other Indians or other 3rd world people. They will never hire an American. How will situation change? It won't, because Americans programmers are too docile and too unorganized. Yes, Americans will complain on blogs, and perhaps start a 'guild', but they won't band together and take serious action against the Indian enemy. And make no mistake, these Indians, who swarm out of their breeding grounds and infest our country, are the enemy. They are sucking the life's blood out of American programming.
Lee on May 2, 2008 12:36 PMthe way i see it there are programming journeymen they've done the ICS course (UK) or they're looking for a career change and can recite the idiots guide or 24 hour guide IMO in real sofware situations where you need to be creative they are useless even MCSEs you can pass such courses without even referring to a computer
tronic on August 23, 2008 4:48 PM"...but they won't band together and take serious action against the Indian enemy. And make no mistake, these Indians, who swarm out of their breeding grounds and infest our country, are the enemy. They are sucking the life's blood out of American programming.
"
We live in a global economy (for better or worse.) If you find that you can't stay employed in software, it's time to find a new market since you're effectively pricing yourself out.
And speaking as a gainfully employed Indian (born and raised here,) your comments don't invalidate my success in this industry. Your bitterness just shows you to be the bigot you are.
james on November 12, 2008 2:23 PMHey Why Inidans are dragged into this irrelevant matter. For your information here are some facts about India.
3.22 Million Indians are in America !!.
38% of DOCTORS in America are Indians.
12% of SCIENTISTS in America are Indians.
36% of NASA employees are Indians.
34% of MICROSOFT employees are Indians.
28% of IBM employees are Indians.
17% of INTEL employees are Indians.
13% of XEROX employees are Indians.
According to you if Indians are not good coders(or not having good knowledge) then how NASA can achieve so much (36% of its employees are inidans) or how Microsoft can produce such unique products (34% of its employees are Indians). And if you want to know some of the big technical heads of the industry follow this link
http://www.knowledgebase-script.com/demo/article-304.html
As the above link suggests Creator of hotmail was Sabeer Bhatia not Bill gates OK.
But the problem is
The only country where NRIs(Non Resident Inidans) cannot succeed is India!
Because of some uneducated, mindless, ignorant, money minded ****..* politicians we are not having opportunities and nothing is coming into implementations stage. So they are going abroad to create opportunities. Dont compare at the country level because no one is same. In a country like India with 110 crores of population no two persons will have same skills. And in areas like USA, EUROPE also we cant declare every person as efficient coder because of their area and skin color. There will be differences in skill levels between every individual.
OK lets leave this comparison of countries and their skill levels. We ignored what the author was trying to tell. I completely agree with the author of the original article.
> Unless you truly enjoy programming you should seek
> another profession. Be realistic: are you programming
> to collect a paycheck, or are you programming because
> you are driven to?
And if you are interested to know about Ancient India follow the links
http://www.iloveindia.com/history/ancient-india/facts.html
http://www.nagpurdarpan.com/main/indian.htm
Thnak you. Please ignore if there are any mistakes in your view. Please do not hurt any one's love for country. You are not the only one having Patriotism.
Ok you remove my comment so u r moderating the answers to some rash remarks
Manoj on December 29, 2008 11:02 PMI am pretty much new to programming. I'm still in college, but luckily employed by a generous small company who spends some of their time teaching me things that fall between the cracks of my schooling.
So I want you to understand that I have current experience with the school system, and hope that you can believe me when I say that the problem isn't uninspired students or students in it for the money.
The problem behind the surge of useless CS graduates is the redundant classes, the still-fresh mentality of 'no child left behind' (despite being college students), and the fear of personal responsibility to make CS classes truly competitive or even educational. In addition, the number of truly useless classes I've been through is awe-inspiring. Just last semester, I had a class that taught us very basic things in programming, and looked at them in different languages. I shit you not, we were learning about -loops- more than halfway through the semester. While at a glance it may sound useful to look at them in different languages, it does nothing for us in the long run. Ultimately, a loop is a loop and once you understand the concept (something that you should have done you're first semester, or even before), the actual execution in various languages is fluff that reference books are for. We need to work on implementation.
It would take both hands and possibly some toes to count the number of times I have been taught and re-taught very basic programming concepts that should have been grasped when they were given the first time. Rather than moving forward on to projects that inspire enthusiastic students, we've been dragged through the same piles of the same crap over and over and over, and wasted our own time and money because teachers are afraid of failing a student or because of their own simple inadequacy (I actually had one teacher come to class regularly with more than a little booze on his breath.)
I'm a junior now, and I've used C (I've dabbled in other languages, but that's not the point) actively for some time. As soon as I started working here, I learned more in a few months of cut-and-paste hacked up code (for simple basic testing purposes of some of our products, not for true development) than I ever learned in college. And C is pretty much the language-of-choice at my college. A lot of it is very specific to my work place, and I may not use again if I go elsewhere, but I'll at least understand how it works, and know how to learn more about it. Having someone who's willing to answer questions and actually knows what they're talking about is golden.
It's true that there are most likely a number of useless students who just think they can make a mint doing this and don't even enjoy doing it, but I think they eventually learn or leave. I think the true problem is the schools who convince the students they've learned something before tossing them out with a basic understanding of the basic principles and structures of programming languages and that's it. No real implementation to back up this knowledge in a real environment, and not even a little dabbling in higher-level uses for programming.
I have more rant to spill, but I should be working. Sorry for the disorganized rambling.
Dronus on December 30, 2008 7:48 AMSadly, my enthusiam for software development is killed when i see untalented schmucks get ahead by giving it. This is so true in non-software companies where management sees quick results without regard to long term maintainability.
MannyDib on December 30, 2008 7:54 AMGreat writeup, now we only need some mechanism to convince people who (*falsely*) believes they're brilliant devs to start flipping burgers again ... ;)
Thomas Hansen on December 30, 2008 7:08 PMI graduated about a year and a half ago from a good course on Computer Science in the UK and i saw this disparity everywhere, it shocked me, even in my first year. I now work as an internal systems / database engineer for a large company in Cambridge, working mostly on small-ish projects in ASP.NET, Java, etc, (on my own) to report on various stuff, or do statistical analysis, usually around ~2 to 4000-ish lines of code.
I started in my first year in an accomodation block containing around 30 people, of that 30, around 7 or 8 of us were doing Computer Science, i was the only one to have done much like it before (an A-Level in Computing, which was essentially 1st year CS) everyone else either had an A-Level in ICT (Which is how to use Excel, how to design a letter-head and how to format a letter properly, stuff like that ... essentially general office training) or no relavent experience at all. I'm not saying that you NEED to have relavent qualifications to do CS, but you should have a clue about what it involves beforehand, else you could be changing courses very quickly.
The course in the 1st year had ~300 students, by the 2nd year it was ~180 students and in the 3rd year it was ~120 students, i think about ~100 students graduated, these are ballpark figures so give or take 10% or so for each one. But of the 7 or 8 of us who started CS in my residential block, i was the only one who graduated in Computer Science, everyone else either moved degrees to degrees like Business Studies or left university all-together.
I think the problem lies with the explosion of computing onto the general public over the past 20 or so years. Operating systems like Windows which completely abstract the users away from what is actually happening within the computer, means that you have a generation of people who have grown up using computers, and are very good at using and understanding Windows etc, but who dont actually understand what is fundamentally happening on the computer.
So you get 17/18/19 year olds who think: "Well i can download MP3s off of the net and make my own Website with HTML, so i'm therefore good with computers, so i'll take CS" and theres nothing in the system stopping them from applying, and i dont think you should stop them.
I dont think that it's as simple as "An applicant must have done maths to apply". Im pretty crap at doing mental arithmatic in my head quickly, but i don't really think its majorly important to be able to work out what 8x7 is in your head quickly with respect to programming, sure it helps, but it's definately not a pre-requisite.
However i DO have a very-good understanding of how algebra and maths works, which i think is all is really required to be a half-decent programmer, computers after all are just giant calculators. However the fact that i'm bad at doing challenging maths under a tight time constraint (Exam) is what stopped me from getting a maths qualification.
So my suggestion is that let the students join the course, thats fine, but just teach them the subject and slowly turn up the heat, and they will either get-it, or they won't. If they don't get it, then let them sink, and re-apply for another course, CS isn't for them.
The professors/teachers also must be careful to design the course so that there is not too much theory, and enough practical programming tasks to filter out the non-programmers and copy + paste artists.
I also think part of the problem is that Professors are under alot of pressure from above to give good statistics on pass-rates so that they can attract more students to the course, and boost the universities profile.
So the key to getting rid of bad programmers is to just not hire them (which is difficult), so all i can say is devise a system which lets you get a good insight into how good a programmer is before you hire them.
Ian Foster on December 31, 2008 4:04 AMBeautifully said! I couldn't have put it in a better way myself.
sweetperceptions on January 1, 2009 1:10 AMYou know. I just hope it is not too late to change to another profession.
I am growing tired of the ever growing number of lines of code I have to program and to maintain. And my productivity is no longer the same as when I was 20 and I do not feel excited about a new technology.
Instead I shiver with fear when something new is introduced, be it a trend in the way programming gets done, be it a new cool framework which allows you to do your current work in 10% of the time but has restrictions in about 90% of the funcionalities and is in an eternal beta.
Why didn't I go to law school?
rshimoda on March 2, 2009 8:26 AM| Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved. |