tags:

views:

2796

answers:

32

I've read people arguing that some people just can't learn to program and among those who can program some are ten times better than others. However I wonder if the negative image of programmers as well as programmer's poor communication skills prevents people from entering the field or advancing in it.

A programming language is just a human creation, perhaps if we created different types of languages we'd make it easier for those who find programming difficult at present. But perhaps there is some threshold that non-programmers just can't pass.

+3  A: 

If a 12 year old is a good enough programmer to hold a presentation on jQuery I'm quite confident in saying that anyone with sufficient motivation can learn programming.

http://www.youtube.com/watch?v=8mwKq7_JlS8

Kit Sunde
Wow I just got schooled on JQuery by a 12 year old, I STARTED IN THIS BEFORE HE WAS BORN!!!!!!!!!!!!!!!!!!!!!!!!!
Unkwntech
There are some people that at 16 finish university and phd .... would that mean that everybody can have a PHD ?
sirrocco
Though it's obvious that he's quite an elite! ;)
utku_karatas
What the hell has *age* to do with it? Isn't abstract intelligence the thing you need to be a programmer? It's amazing and all, but really - if he is intelligent enough and interested, than his age implies nothing at all.
Tomalak
Your brain isn't fully developed until you are around 25, so I'd say age has a lot to do with intelligence. This was just the first thing that came to mind, your avrage 13 year old can sit down with php and flesh out webpages, these types of kids aren't Einsteins.
Kit Sunde
I've had the pleasure of working with Dmitri on one of my Drupal modules (he was helping to extend its functionality). Dmitri isn't your average 12-year-old, though. He's been given opportunities not available to most kids his age. It's not just hard work or intelligence that's gotten him this far.
Greg Hines
+15  A: 

The implication of your question is a tautology. What do you define as "elite"? My best guess is that by "the elite" you mean "people who can program", in which case your question can be better phrased:

Can anyone learn to program?

My guess is the only people who aren't able to learn how to program are people with severe learning or communication disabilities.

If you're asking if programming as a field is a meritocracy, I would say yes. But by the same token, the top tier in any field is generally leagues above the armchair experts. It takes both talent and hard work to get to the top, and not everyone is capable of that, in any field.

Tom
Nitpicky but most logical. I agree.
blizpasta
I like the predicate logic way of taking the question apart. :-)
Tomalak
Maybe he was using the poor communication skills he was talking about. To further demonstrate poor communication skills, I'd just like to add foo garble burble gook.
Guge
+47  A: 

I vote for "programming is not for all and not for elite". Almost every person can learn how to write a program - it's like learning how to explain thoughts in terms of the human language.

But most people stop learning after making a simple "Hello World" app and they tend to think that they are already programmers. Its simply killing me.

If we take a look at programming languages and human languages as analogues, most programmers are talking like a child and think they are great writers.

Learning in programming from my point of view should be never-ending - because it's definitely not enough to know what to write, but it's very important how to write. So we should put attention on support, extensibility, performance and many other things that make great software.

So, to summarize - programming is not for an elite and not for all, but for people who are highly motivated to learn and making themselves better and better.

maxnk
Agreed. The point is to be 'highly motivated' because that's what drives learning.
snitko
+1 for the punch line. Wanting to learn is key.
Stephan202
I should definitely give you +1 for this line "Learning in programming from my point of view should be never-ending". You are right, cien percento(100%).
Shiva
It's not key. Nothing more than important catalyst.
Arnis L.
It's like an author, just because we're all capable of writing, it doesn't make us writers.
Chad
+7  A: 

Computer Science is for the elite.

Software Engineering, aka programming, requires less brain/skill/effort, but still not for everyone. If there are people who fail fizzbuzz tests (http://www.codinghorror.com/blog/archives/000781.html), then I guess yet another Visual Basic won't suddenly make them good programmers.

Yoni Roit
I'm sceptic about the FizzBuzz thing. Probably CS graduates that fail the FizzBuzz test are just scared for the interview or not concentered in that particular moment.
friol
I don't know about FizzBuzz, but I've seen people working as programmers that are _so_ bad in what they do, it makes me cry.
Yoni Roit
That's another problem, IMO: formation. If those people never received good instruction in what they do, and they aren't guided by good leads, they fail as programmers.
friol
I think it's just a case of person who can't program because he's missing that something in the head. Good instruction is not enough, as our job ofter requires deep understanding and improvisation.
Yoni Roit
Software engineering is not equal to programming. I believe the skills needed to be a software engineer are not necessarily easier or harder than CS skills. They are different (e.g. physics and CS are different, but none of them are better or worse or more for elites. It's a matter of preference).
Mehrdad Afshari
Software Engineering, as "how to build programs that bring money", is not an exact science. There're ~no proven theorems and no good way to measure output.Most people in SE dont know if/how they suck (incl. me).CS is about exact results. Which some people can achieve, but most can't. CS is harder.
Yoni Roit
How is software engineering defined? Project management, UML, Design Patterns, Agile blah blah? If so I agree.If you define sweng as the process of producing quality software, then it involves harder subjects, such as Algorithm, Math, languages, compilers, etc
Nils
A: 

If you define programming as punching in code then yes, anyone can learn it.

Designing an efficient, robust and scalable application is a different matter. Somethings you cannot learn to everyone.

Punching code is a trick anyone can do but for good application design you need at least a little bit of a brain.

Coentje
+3  A: 

Programming is a task that anyone can perform with the right training, motivation and desire. I'd even go as far as to say that Computer Science is a more than capable subject for the masses.

The problem with these subjects is drive. Despite the fact that we are writing the code that runs on everything we use today we often don't know WHY something is happening. We often cannot jump into the hardware and have it tell us in plain English why something isn't working. It's difficult and frustrating to work within a subject that almost aims to confuse you.

A lot of people liken our profession to professionals, like Doctors and Lawyers. I think this is utter nonsense. If anything I'd say we're on par with those in the building trade in the fact that we can pick our trade up with practical work within a couple of years and that we create something out of nothing. Other than that, we are in just another occupation.

Programming and Computer Science isn't for smart people, no matter what Joel Spolsky, Bill Gates or anyone else claims, because what we may see as intelligence is passion and a thorough understanding of a topic, something that anyone can obtain.

EnderMB
A: 

A thought about attitude and approach here, there is no such thing as "elite". So for some, programming comes as a second nature, for others with lots of hard work. That doesnt mean that some of us are elite, others arent. Dont let others dictate what you can or cannot do. Sure, you may require more hard work than a few others, but if you are willing to work hard at this, you will be a good programmer.

Another point, if you think you dont want to or cant learn new technologies through out your career, do not like to take initiative in learning and keeping yourself update then yes, programming will be harder, much harder. In this context the "eliteness" may apply, though this is more of a human trait than anything.

omermuhammed
+5  A: 

There are millions of professional programmers in the world, so I wouldn't define programming as an "elite" status. That means that, for working needs, almost anybody can become a (good or bad) programmer (or MCSE :).

friol
MCSE is not a certification of programmers.
Guge
It's not a certification of much at all.
Karl
Apart from that - "millions" is still pretty much "elite", when compared to "billions". ;-)
Tomalak
+5  A: 

Do not worry. 10 times better means only twice as good.

asalamon74
+26  A: 

Contrary to what many others expressed here, I would not say that programming is for everyone.

There are a few things you need to be a programmer, and these can't be learned: Abstract intelligence, logical thinking and a certain kind of creativity. You have it, or you don't. The amount of it you possess is the key to how high you will rise, but if you can't think in abstract terms you will not be able to write a computer program beyond the "Hello World!" level.

It's amazing just how many people can't begin to think abstractly, I'm sure each of you has met a good share of them. I would even go out on a limb and say that they are the majority of mankind.

So - being able to program a computer to do something sensible is a capability that can put you on a above-average point in a chart. But when you draw the chart based on a different comparison, other people will score better. Consequence - not everybody can learn programming, but being able to program does not necessarily make you "elite".

Tomalak
If we're talking about sitting down with an editor and cranking out code in a traditional programming language, then I'd tend to agree. However, where do we draw the line? Aren't people using graphical environments like Apple's Automator or Hypercard also programming?
feoh
I'm not sure. Intuitively, I would say no, that's not programming, that's a point-and-click adventure. On a grand scale, things are moving towards visual authoring and code generation, so it's difficult to say. But in the end, *someone* still has to sit down and *program* these nifty tools.
Tomalak
A: 

It depends on what you are asking.

Programming is for everyone, anyone trying to tell you otherwise not consider all the facts.

But, professional, expert-level, programming, that takes a certain mindset. Just as I suck at doing anything related to maintaining or building a house or similar handywork, some people just suck at programming complex solutions. I can make a decent spice-rack, but anything more than that and a building inspector would have nightmares afterwards.

That is not to say that they can't make a decent living out of a programming profession, just that everybody should know their limits and work within them, perhaps even strive to stretch them. But for some, a limit is a border that can only be stretched so far, and never broken/crossed completely.

I have mine, both in and outside of programming. So do you, so does everyone else.

But everyone can learn how to make programs.

Lasse V. Karlsen
+2  A: 

You can be a crappy programmer, just like you can be a crappy nuclear scientist, which is a title often considered to be reserved for the "elite". Unlike the latter, being a crappy programmer at least won't result in pretty mushroom-shaped clouds.

If you can manage to eventually get through basic schooling, you can likely do basic programming. But being a programmer doesn't magically put you on the same level as Carmack.

Spodi
Unless the programmer writes the software for the management of the nuclear plant ;)
Christian
+4  A: 

Anyone can, program most people don't want to. Frankly computer science and software is very boring and hard to break into for most people. Unless you learn to like programming, you will never be good at it. Just like any other skill. If programmers are "elite" then it is mostly because of self-selection. ZeroCool says to himself, I really like doing this and I'm going to learn about it until I become awesome at it.

argonide
+12  A: 

Everybody can learn a little programming. And everybody should.

But everybody aren't going to see the beauty of it. Only a few will fall in love with it. These are the ones that will stay with programming, decade after decade, they are the elite.

Also, I'm getting tired of the whole "programmers have poor communication skills" meme.

The art of programming is to put ideas into written code. This IS communication, as good as any. When non-programmers think we are poor communicators, it is probably because they are not used to getting the kind of answers we give. They will often ask us questions that can't be answered, or that can only be answered in ways they can't understand. They ask a question, get a correct answer, and leave confused. Then they blame poor communication skills on the part of the programmer.

Let me try to communicate an example:

  • Non-programmer: "Your permission system is too complex."
  • Programmer: "It meets requirements and has total generality and flexibility."
  • Non-programmer: "We don't want all that flexibility."
  • Programmer: "Then the requirements need to more specific."
  • Non-programmer: "Don't you understand what I mean by less flexibility?"
  • Programmer: "Yes, I understand. In what way do you want less flexibility?"
  • Non-programmer: "Just generally. The customers will never want to be able to set any permission on any object to any subject."
  • Programmer: "Ok. Then the requirements must list exactly which permissions should be selectable to which objects and subjects."
  • Non-programmer: "Just make the changes, will you?"
  • Programmer: "Do you want me to guess. It would not be appropriate. You must make specific requirements for this, or I can't do it."

I was the programmer, and I'm sure they thought I was communicating poorly.


Addendum:

This little story seems to have stirred something in some members, so I'd like to clarify what I think is the point here.

The non-programmer in the story claims to know that there is a natural set of functions the system needs to support, but is unable to state what those functions might be.

The programmer knows that he doesn't know what this set of functions is and can only oblige if the desired set of functions is communicated clearly.

I think the programmer communicates the impossibility of the position intelligently. The non programmer is unable to put into words what he thinks is common sense. If he had any communication skills to speak of, he would have been able to.

The amount of percieved assness in communication on the part of the programmer might be explained by the prolonged exposure to logic, information theory and nonhumanoid communication.

If work is divided such that the subject expert writes requirements and the programmer codes to those requirements, should the programmer feel obliged, or even authorized, to amend those requirements with his own guesses? Are we supposed to do both jobs, or just our own? Is it standard industry practice that the developer gets to change the requirements?

For those who want to know more about the real story, I can tell that the programmer in question tried very much to extract information about what a good set of permission functions might be by asking for examples of what the typical uses in the system might be. What about the suggested solution was too much and so on. He was ultimately frustrated about endless referenses to common sense. For these and many other good reasons he started looking for other and more rewarding challenges and lived happily ever after. The software in question was a major release for which work began in 2003, it is still not released as of late 2008.

Perhaps the question of quality of communication skills of programmers would be a nice off-topic wiki question.

Guge
Oh, its so familiar :(Great example!
maxnk
Thanks for your kind remark. I was afraid I was the only one.
Guge
We can do what you want us to, except read your mind.
Brad Gilbert
@Brad - Exactly. And we wouldn't have to read their mind if only they had better communication skills. But when they don't really understand what they want - communication doesn't solve the problem.
Guge
I submit the programmers are equally likely to be not used to the kinds of questions and answers that non-programmers give. Both parties see the others as "poor communicators."
Barry Brown
This *is* an example of bad communication by the programmer, and shows little understanding of the target audience."Total generality and flexibility" is only good if there are simple aggregate levels that meet the users' day-to-day needs. If you didn't find out what these were, that's your fault.
ChrisA
@chris5gd - Don't you mean "Total generality and flexibility" is only good if there AREN'T simple aggregate....?
Guge
I second chris, this IS bad communication on the programmer's part. Actually I think the programmer is just being an ass here, or too out-of-touch with his clients.
hasen j
No, the programmer isn't being a poor communicator. He knows that what he's being asked for isn't defined to be written correctly (ie. odds are the solution he devises isn't what the client had in mind). He knows it's not his place to guess the details (and in some cases, ie. finance, he most definitely shouldn't try to guess) so he's requesting a clearer definition of the requirements. The client probably hasn't thought into this level of detail at all, so stopping to figure out what exactly they want is a necessary step anyhow.
Adam Luchjenbroers
A: 

Programming is a very exact thing. It requires a very logical and abstract thinking to become any good. It's like with math. Actually, it is math. And some people are better with math, some are worse. Just think about your days in school. There were people who could do math problems with half a mind while playing a videogame, and there were some who struggled to just understand the basics.

I'm not sure why this is. Probably it's partly genetic, partly social. But the end result is that for some people math and logics are harder than for others. And this (in my opinion) is what defines how possible it is for a person to become a good programmer. Whether or not the persone becomes a programmer is another question.

I believe that programming is no different than any other profession. Most people can pick it up, but to become good one needs both talent and interest in the subject.

Vilx-
A: 

The statement that some people just can't program makes sense to me. However, today's programming languages are mostly imperative ones (Java, C, whatever you name). And there are completely different programming — functional programming. These may be more appropriate for some people, I think — and these people will be Great Developers, because so few today realize the potential of functional programming.

I can't explain better because I haven't got the functional paradigm yet...

AnSGri
A: 

With time and motivation on your side achieving anything is possible, so I don't think programming is for the elite, some are 'naturally' better than others whatever that means, but that's just a bonus for them not a con for you.

Shahin
+1  A: 

I'll go with programming is for an elite. It's a large elite - with several million belonging to it world-wide - so it's not particularly rare, or even particularly 'elite', but it programming does require a certain ability to handle abstractions that is by no means universal.

One of the problems with being degree level educated - and then working in a mentally demanding environment such as software development, is one forgets how poor the majority of the population is at handling mathematical and abstract thought. It's quite possible - and in fact usual - to surround oneself with a bubble of people and general environment such that the 'real world' never breaks through. Here in the UK for example a significant proportion of kids leave school with no qualifications, and and even larger proportion with just a handful of basic grades - the mental ability to pass which is stunningly low. To suggest that these people can then code because 'everyone can learn to program' is just ridiculous.

This sounds elitist, but I'm not suggesting these people are not (potentially) valuable members of society just because they are incapable of grasping how to code. Far from it. Indeed the problem is consequently more with us as developers because if we don't recognise the issues then we are automatically excluding such people from ever really benefiting from software because we'll write certain assumptions about the way people think into our UI design.

A small example. On of my clients are network support specialist for SME's in the real estate and legal areas. They recently came across a secretary in an office who had not grasped that it was possible to have multiple applications open at the same time. Hence she would open Word, work on a document. Close it. Open Excel, work on a spreadsheet. Close it. Open Word.....

It seems that no-one had thought to tell here that Windows could multi-task and she'd never thought to try it. And she was a legal secretary - so actually reasonably intelligent.

Cruachan
A: 

Programming is not for an elite. It is for the talented.

Black
A: 

Anyone can learn how to program, but there is an aptitude and ability to apply logic and common sense which can not be learned. Some of the aforementioned people do choose this for a career path and struggle mightily, either languishing as a Jr. Developer for their career or changing professions. I have seen both of these cases first-hand. What is truly hard is explaining to a non-programmer why this is without sounding like an elitist.

joseph.ferris
A: 

I think programming is a form of art. Every child paints pictures but only a few are considered actually good, an even fewer become professional artists. Or if you compare with a musician. Anybody can learn a few grips at the guitar, but you need real talent and a lot of practice to be a good guitar player.

Tom
A: 

The software you mostly use [1] is written by quite skilled professionals, so I would rather vote for elite.

However there is also a huge market for less skilled coders, like (smaller) Web apps, Office automatization, business software, etc

On the other side, everybody can learn it, if (s)he works hard and focused. There are tons of examples of people who do not have any academic degree and are good developers. John Carmack for example, he's also a self taught rocket scientist ;-)

[1] Like the OS (Windows, OSX, Linux..), the browser (FF, IE, Chrome, Safari), MS Office, Adobe Software, Games, etc

Nils
A: 

Programming is definitely not for the "elite", languages are becoming more and more user friendly every day, so pretty much anyone intent on learning to program can make it possible. Just look at Java per say, it seems to be the language pushed upon young people the most. They have websites geared towards teaching it to younger crowds, it is taught in high schools, and it is still a powerful language for the experienced.

Mike Leffard
A: 

LISP is easier to learn than English. If you can learn a natural language, then you can learn to program. Unless, of course, you've been mutilated with COBOL, BASIC or C++, in which case you might never be able to learn programming.

Apocalisp
A: 

Programming isn't an elitist activity. Lot's of people can learn to program.

At the same time, I have seen many people that do not have what it takes to program. They just don't get it. It's not a matter of their intelligence, it's more related to their ability to break things down into their basic steps or their ability to apply their problem solving skills to computers.

When I started programming I worked at SAC Headquarters programming 3D mission planning software for B-52's and Cruise Missiles. The group of people working there were programmers, pilots, and navigators. The Air Force had pilots and navigators spend a tour of duty working as programmers as a way to bring real world experience to the software used for missing planning. All of the pilots and navigators were intelligent. They all had at least 8 years experience as B-52 pilots/navigators. Some of them just couldn't cut it as programmers. It's just the way it is.

I do not believe language is a factor on how well you can program. Good programmers can program in just about any language. I believe what makes great programmers great is not something that you can necessarily learn. No matter what your potential is you can get better at it by doing more of it. At some point you will approach your potential. What that potential is will be different for everybody.

bruceatk
A: 

Not many people can speak many languages fluently. Speaking over 5 languages fluently takes talent, dedication, a god-given gift, etc.

The IT equivalent is knowing several languages (C#, Java, C++, Python, etc).

To know all these languages inside out takes dedication, but to think like a computer intuitively (sp?) when working at a low level takes talent, I am sure.

Would this require any more talent that becoming a singer, or even a highly acclaimed and technically sound singer? There are loads of singers in some genres of music who aren't technically (or rather, vocally) capable. This is a case of having too much money to get there. Likewise, someone not cut out for working with computers could get a job in IT with enough money/training so they know the syntax, but might not have the way of thinking or talent to solve problems, or have the logic required.

I'm sure this is a question asked in the accounting field. I have no accounting experience apart from doing it for one term (or semester) at uni an college, and it is all theory. If I had the passion for accounting like I do for IT, I could be an accountant.

dotnetdev
+4  A: 

Yes.

http://www.cs.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

Learning to program is notoriously difficult. A substantial minority of students fails in every introductory programming course in every UK university. Despite heroic academic effort, the proportion has increased rather than decreased over the years. Despite a great deal of research into teaching methods and student responses, we have no idea of the cause. It has long been suspected that some people have a natural aptitude for programming, but until now there has been no psychological test which could detect it. Programming ability is not known to be correlated with age, with sex, or with educational attainment; nor has it been found to be correlated with any of the aptitudes measured in conventional ‘intelligence’ or ‘problem-solving-ability’ tests.

We have found a test for programming aptitude, of which we give details. We can predict success or failure even before students have had any contact with any programming language with very high accuracy, and by testing with the same instrument after a few weeks of exposure, with extreme accuracy. We present experimental evidence to support our claim. We point out that programming teaching is useless for those who are bound to fail and pointless for those who are certain to succeed.

maurycy
A: 

I would just like to say that as a web programming student, I cannot for the life of me excel at programming, I offer nothing but mediocrity to the field and this is despite how hard I work. It is most discouraging. This is coming from somebody who has maintained an A average GPA. I can usually figure out, roughly, the logic necessary for a program, but fall short when it comes to manifesting that logic into code. I will spend 3 times as long on projects and get a D or C, and then I have peers who spend half the time and get an A. It's the worst feeling in the world. I perhaps am in the wrong major.

Also, I have a friend whose father dropped out of school in 9th grade. He taught himself C++ PHP, SQL and other languages. He is the creator of homecomputergames .com among other web pages and grosses a fair salary each year. I on the other hand, graduated high school with honors and went on to college etc. I think that speaks for itself as to whether programming skill is inherent.

Jackie
A: 

Anyone can be trained to do anything, though not everyone can do it well. Does being a really good accountant make you elite? Does being a really good quarterback make you elite? Being good at anything just makes you better than everyone else at it (duh).

Programming usually means you have to have above average analytical skills. Programmers often have to juggle lots of little things in their head like class structure, local variables, syntax rules, and all of that takes a good deal of analytical ability. Do not confuse programming with computer science though; programming is engineering and computer science is an applied mathematics.

Unlike some professions, being a programmer is only limited by your mental prowess. Anyone can do it and no one is somehow elite outside of other programmers.

s1n
+1  A: 

Everybody can learn to program, but not everybody WILL learn. You have to have some kind of passion for computers and for programming.

Matt S.
A: 

Research actually shows that the act of programming seems literally unteachable to a sizable subset of incoming computer science students:


The authors of the paper posit that the primary hurdles in computer science are..

  1. assignment and sequence
  2. recursion / iteration
  3. concurrency

.. in that order. Thus, we start by testing the very first hurdle novice programmers will encounter: assignment. The test results divided the students cleanly into three groups:

  1. 44% of students formed a consistent mental model of how assignment works (even if incorrect!)
  2. 39% students never formed a consistent model of how assignment works.
  3. 8% of students didn't give a damn and left the answers blank.

The test was administered twice; once at the beginning, before any instruction at all, and again after three weeks of class. The striking thing is that there was virtually no movement at all between the groups from the first to second test. Either you had a consistent model in your mind immediately upon first exposure to assignment, the first hurdle in programming-- or else you never developed one!

Carra
A: 

I suppose everyone could learn to program to a degree. But there are many that would never be very efficient at it. Everyone can learn to code but that is not programming. Programming is the actual engineering of the system. IT is the process of taking an idea and bringing it to life. A project that you design from concept to production stage is a life in it's own. In some ways you create an entity that often has its own personality. The coding is nothing. Bust ass and you can be a moderate coder in a month for any language. It is just a series of commands all easily located in your favorite reference bible...

It is what you do with these commands that count. Sure, anyone can write a digital clock with a couple lines of code. Not everyone can envision all of the intricacies of what makes that clock tick. This is where you run into issues. Too many "I didn't think about that" comments leads to a buggy, resource intensive situation that is counter productive. Programmed it? Yes. Is it worth a sh*t? well...

Hi Jackie, I assume you are a friend of one of my sons....I'm the 9th grade drop out dad you mentioned. :) I happened upon this post via Google through the mention of one of my sites. Thanks for the drop!

You know, I understood computers from the very first day I touched one back when a 486 cost $4K and a 9600 baud modem was screamin. That is "my" uniqueness though.... I will say that I could not paint a picture nor sing a song to save my ass. I hate to write content and detest having to open photoshop and struggle the entire time I'm working in this manner. Actually the very thought of it makes me want to take a nap....night

Ken

Ken Durham