Skill Disparities in Programming

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.

What 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?

“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.

I 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.

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

“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.

  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.

I 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.

The 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

http://cc2e.com/

Do not assume blog readers are good programmers. I’ve read enough blogs to know otherwise.

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.

the 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

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

Hey 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

Great writeup, now we only need some mechanism to convince people who (falsely) believes they’re brilliant devs to start flipping burgers again … :wink:

I 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.

Sadly, 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.

I 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.