Hacker News new | past | comments | ask | show | jobs | submit login

From what I've seen, there's just no crossing the skill chasm as a software developer. You've either got it, or you don't. No amount of putting your nose to the grindstone will change that.

What a scary thought. Good thing it's not true.

One of the many reasons I became a programmer was that the sky was the limit. Still is. Want to learn something new? Learn it. Want to build something cool? Build it. The only real limitations are your belief that you can do it and your willingness to perservere until you do.

We are not like basketball players or musicians or chess masters where only the extremely gifted (who also work hard) can rise to the top of their craft. With few exceptions, we all can.

I didn't always think this way. I had a college math professor who once said, "Many of my students are simply not suited for the sciences." And I was stupid enough to believe him! In retrospect, his comment said more about his weakness as a teacher than anything about his students.

How do I know this? Because I learned the hard way. When working with my first mentor, I was always too quick to blame someone else for their limitations slowing progress. Until he said, "So teach them!" He believed that almost anyone can learn and get good at almost anything. This seemed counterintuitive but after a while, I was able to adopt this belief system, and it has made all the difference.

There are many reasons why so many programmers suck, but "not being able to cross the chasm" isn't one of them. Just a few of the real reasons:

  - They never learned right in the first place.
  - They never built anything of real substance.
  - They were a tiny cog in a machine and never saw the big picture.
  - They got pigeon-holed into a small area for a long time.
  - Other things in their life took over.
  - They had shitty teachers.
  - They had to build on top of pre-existing shit and couldn't do it right.
  - They were stuck in environments where excellence never mattered.
  - They went into management too soon.
  - They got trapped into old technologies and methodologies.
  - They made too much money to make a career u-turn.
  - They just didn't care enough.
  - <add your own>
  
My programming has always gotten better every year. Sometimes I read my old code and can't believe I wrote it. And I still have tons of room for improvement.

I'm firmly convinced that almost any of us can get better, much better. And even become "elite", whatever that means. Please don't listen to anyone else who tells you otherwise.




This is a hilarious remark:

We are not like basketball players or musicians or chess masters where only the extremely gifted (who also work hard) can rise to the top of their craft. With few exceptions, we all can.

I have no idea why, in the same breath as you disclaim the necessity of inborn talent for computer programming, you reaffirm that necessity for some arbitrary skills that you plucked out of nowhere. You have exactly the same amount of evidence supporting your claim that anyone can become a great programmer that I do to support the claim that anyone can be a chess master.


OK, but the reference to athletics is valid. There are outliers -- Muggsy Bogues or Dustin Pedroia -- but there's a reason that most professional pitchers are 6'2''. You can't get taller, no matter how hard you try.


Also a reason why pro baseball players are usually born in January.


Why?


It is from Outliers by Malcolm Gladwell. In this book he suggests that this happens because at a young age these kids born in January have an age advantage over their peers.

During adolescence physical development can be a substantial advantage and one born in January compared to another born in August will be physically different in terms of development.

Therefore, they are better from the start due to physical advantage. This results in more coaching and more attention, therefore they are encouraged to progress further in baseball.

Very good book for those not familiar.

http://www.gladwell.com/outliers/index.html


Absolutely. The first half of the blog post reminded me of this piece by Derek Sivers:

http://sivers.org/15-years


Why isn't writing software like chess or sport?

The highest ranked player in the world is twenty years old. Any local chess club is full of people who have studied the game for years but failed to break 1400. I've taught people who were just incapable of the most rudimentary strategic thinking and people who just naturally saw things that it took me years to learn.

The evidence is clear that there are people in the world who just can't solve FizzBuzz, many of them people with degrees in CS. Some people just seem unable to grok the basic abstraction of programming. What if that isn't a binary state, but just one extreme of a spectrum?

I can run 10k in 40 minutes any day of the week, but I sprint like an asthmatic Samoan. I just have distance genes, nothing I can do to change it. No amount of training would ever make me a competitive sprinter. I've got too little fast twitch fibre, I'm too short, too lean, my heart and lungs are too small. Is it completely implausible to suggest that there are cognitive equivalents that would pertain to programming?

Why couldn't mental stamina be as genetically ingrained as physical stamina? There are obviously natural geniuses in our field, why not natural dunces?


"Why isn't writing software like chess or sport?" ... "There are obviously natural geniuses in our field, why not natural dunces?"

Precisely because 5-standard-deviation-above-average natural talent isn't required for success in our field. There's only one chess champion in the world and a handful of grandmasters, by definition, and those are gonna be the ones with talent and hard work. But to succeed as a programmer requires more work than genetic luck. An average person can probably do it with enough work.

(But I would point out there is, by necessity, a floor of base talent required somewhere. But it isn't necessarily as high as commonly supposed.)


"There's only one chess champion in the world and a handful of grandmasters, by definition, and those are gonna be the ones with talent and hard work."

There are in fact over 1000 grandmasters.[1]

Originally there were just 5, but as you can see, over time the ranks of grandmasters have swelled.

Many in the chess world lament that it's too easy to attain (or even buy) a grandmaster title these days, and that it doesn't mean nearly as much these days as it used to.

[1] https://secure.wikimedia.org/wikipedia/en/wiki/Grandmaster_(...


In a world of 6 billion people, 1000 is metaphorically a handful, as far as I'm concerned. In the context that we're talking about, there's certainly more than 1000 "good programmers".


Why might programming not be like Chess?

Because it is a multidimensional profession rather than rather fixed task?

Programming is hard, harder than anything else you could possibly do. But because it is so hard, an important task for any programmer is to know their limitations and work around their limitations - master the skill of software engineering.

Just consider, the things that "only a few people can do", like playing 2800 chess, are turning out to be what a computer can more easily accomplish. Whereas the things "any idiot can do", like speaking English, are turning out to the things that computers have a really hard time doing.

In this sense, if programming is a "humanistic" field, it seems like many people and kinds of people can achieve excellence in it. But naturally this depends on what an organization cultivates.


"Programming is hard, harder than anything else you could possibly do."

Good grief. You haven't done much.


"Why couldn't mental stamina be as genetically ingrained as physical stamina? There are obviously natural geniuses in our field, why not natural dunces?"

Are there really natural geniuses? To me a natural genius is someone who from the start performs at a high level, and I don't know of any such programmers. Maybe it's just that some people can move faster on the growth curve than others, but everyone can reach the same high echelons with perseverance?


But isn't 'moving faster on the growth curve' exactly what it means to be a natural genius? Mozart didn't pick up the violin and instantly compose symphonies, but his talent helped him pick it up at an early age.

And aren't you assuming that everyone's rate of improvement is necessarily going to be fast enough, in the long term, for them to reach 'high echelons' (or even a reasonable level of competence) before they die of old age?


Have you ever taught programming to adults?

I have. Some people were nearly incapable of grasping the matter. Others could do it as easily as buttering a sandwich. I do not believe it is always a question of circumstance, but a question of an innate, inbuilt ability. Some people can and did rise above their personal weakness, through hard work and study.

Chess and programming are cousins in thought.


Does these adults learn programming because they want to program, or due to some other reasons (e.g. money, or they are forced to)?


Required classes to finish a bachelor's in CS or IT, I'm guessing. I've taught programming to a couple hundred college students (or more) and I agree that the aptitude seems to either be there, or not.


> 'They never learned right in the first place.'

I can relate this to a game of Table Tennis. A guy I know played lousy for two decades, his technique never improved. Then one day he got hold of a masterful neighbor who taught him how to play, hit top spins, do spin serves, hit chops. He participates in amateur tournaments now and does fairly well.


It's always good to remember that ten years' worth of experience and repeating the one year of experience ten times are not the same thing.


It's funny how someone like Bill Gates or your college math professor can make the observation that many people just aren't as good at some thing as others and you decide they're simply idiots, but you, who have accomplished so much and acquired so much wisdom, know differently.

When I was a kid, I played soccer every day, as often as I could. I loved it. And I never got particularly good. But when I started programming I was soon better than my peers, my teachers, and anyone I knew or could find to talk to.

But I guess my soccer coach was just an idiot.


It's hard for you to be wrong. If someone with zero programming talent does become really good, you could just say that they did have talent after all.


Let's make a baseball analogy. Do you think a person with no hand-eye coordination can become a great hitter?

I have no doubt there are people who are math averse who have plenty of untapped math ability (e.g. most women with math ability have been taught to think they can't do math). There are plenty of psychological reasons why a person who is capable of doing something might think they have "zero talent", and it's perfectly plausible for a good mentor to help them unlock their ability. But that's a far cry from the argument that "anyone can be a great programmer".


I recommend reading the (ongoing) story of Dan:

WHAT IS THE DAN PLAN?

It’s a project in transformation. An experiment in potential and possibilities. Through 10,000 hours of “deliberate practice,” Dan, who currently has minimal golf experience, plans on becoming a professional golfer. But the plan isn’t really about golf: through this process, Dan hopes to prove to himself and others that it’s never too late to start a new pursuit in life.

http://thedanplan.com/blog/


I am so, so glad you said this.

I've been experiencing such a crisis of confidence recently around the idea that I lack talent, so much so that I've felt like there was no point in trying to improve things beyond where they are, or to even risk being criticised that it's totally frozen me up.

Thank you.


Please don't make the mistake of assuming this discussion applies to you. The subject has nothing to do with honing one's programming skills. [Edit: oops, I confused this thread with another. Never mind, the real point follows.]

As for crises of confidence, what makes them tough is that they opportunistically seize on every item that floats through consciousness and turn it into some new weapon to batter you with. One thing I found helped is to give up on the idea of "talent" altogether and just focus on things that interest you and give you pleasure (edit: and best of all, have value to others) whether or not you have any talent at all.

Actually, someone who really lacked talent probably wouldn't feel the way you describe. They'd just drop out of the game and rationalize it as "that stuff sucks anyway". So you probably do have talent, but the state you're describing is not one that can accurately assess anything remotely related to the idea. In such a state, it can actually be creatively liberating to just redefine yourself as a fool and get on with it. It's like when you're sitting by a swimming pool enjoying the sun and someone starts splashing you with water. If you can't get them to stop, a good defense is to just jump in the pool.


"The subject has nothing to do with honing one's programming skills. It has to do with a large segment of the population (one of the "humps" in "double hump") who can't grasp even the very first, simplest things about programming, like defining a function."

Sorry but I think you're mistaken, possibly due to the other link on the front page right now (http://news.ycombinator.com/item?id=2902903).

In this blogpost Jeff Atwood is specifically NOT talking about people who can't grasp the first thing about programming:

"We already know there's a vast divide between those who can program and those who cannot.

But the dirty little secret of the software development industry is that this is also true even for people who can program: there's a vast divide between good developers and mediocre developers. A mediocre developer can program his or her heart out for four years, but that won't magically transform them into a good developer. And the good developers always seem to have a natural knack for the stuff from the very beginning."


Thanks for the correction. I updated the mistaken paragraph.


FWIW I think your point was well suited as a counter to the attitude in the first half of Atwood's article, so I'm glad you posted!


I'm firmly convinced that almost any of us can get better, much better.

I'm totally in agreement with you about that. However, for professional success in many fields (not just sports), the game is relative ability. While I'm convinced everyone can get better, what really matters in the context of finding jobs is whether you are catching up with everyone else or sliding further behind.


I'd like to believe this, but it's not my experience. There are people for who it comes effortlessly, while it's a real uphill battle for others. Most of your listed problems are part of 'not being able to cross the chasm'.


>> Until he said, "So teach them!" He believed that almost anyone can learn and get good at almost anything.

I agree with this statement. But haven't accepted it as the fact yet.

You managed to learn "new things" quickly has not always meant "they" (as you said) will.


The whole idea that we try so hard to believe in "Everybody is born equal and we are the masters of our destiny" maybe be evolutionary in nature .I was reading a book introducing evolution (and I forget the name but can dig it up if somebody wants the source) that individuals of a species sometimes start working together in such cohesion that they no longer are really individuals but are combined into one "social organism" if you will.

For example Bees ,though they are made up of individual bees they don't cross compete but actually work together to protect the whole group and it makes sense to look at the group as one entity instead of a bunch of individual bees.

The author of the book argued that human beings also have crossed that line from being individual members of a species to being a "social organism" that functions as one and in this scenario it really hurts to have a few select individuals born "better" than the rest.This is because we no longer are cross competing but are trying to optimize as a whole and it doesn't makes sense when you are doing that to have some people have better chances of survival etc as it will ruin the cohesion

Now I highly doubt if we are really born equal but that is just my opinion, from what I have seen around some people clearly were better than the rest in certain things even with other factors being more or less alike


Your notion about bees cooperating isn't the accepted view in modern biology. The Selfish Gene does a good job of explaining why this isn't the case, there's a lot of competition going on within a bee hive.


I got the opposite idea from that book. I remember it explaining that ants (or perhaps it was something else) would cooperate because often they all had the same DNA, and so were working to propagate the same genes.


I'd like to agree but do you honestly believe someone like, say, Paris Hilton could become a good programmer? Because unless I'm mistaken, it seems you are arguing for that.

I believe sometimes, some people, just aren't suited for a particular craft. And there's nothing wrong with that. It's a good thing that everyone has skills and interests in different areas.

To be a good programmer, there are a lot of pre-requisites one needs to learn first - skills such as a passion for self-learning, ability to think logically, ability to receive feedback and improve on that, etc. If someone begins as a programmer without these pre-reqs they will have a very difficult time getting to the stage where they can be a good developer.

I recently worked with a junior programmer that just wouldn't listen. I would try to advise him but he would completely ignore it and just go back to copying and pasting code and hoping it would work. Even walking through code line-by-line it was clear he had trouble understanding simple assignments.

Now, maybe that is my fault as a mentor but, IMO, he needed to first learn how to listen and receive feedback before he could move on to the next step. Unfortunately, some people are just too stubborn and will not change. For those people, I don't see how they could become great programmers.


"IMO, he needed to first learn how to listen and receive feedback before he could move on to the next step. Unfortunately, some people are just too stubborn and will not change."

That comment is largely true regardless of what the subject is, not just for programming. Inability to admit error is a huge hurdle for learning in general, because it prevents you from learning from your mistakes and may also prevent you from challenging yourself.


I agree completely and it is not your fsult. Personally I have come across people who do not want to put any effort. So when you ask then questions they become either defensive or arrogant.

Basically they have zero interest in technology or programming. They are in it because it pays well.

This article applies to these people.


> One of the many reasons I became a programmer was that the sky was the limit. Still is. Want to learn something new? Learn it. Want to build something cool? Build it. The only real limitations are your belief that you can do it and your willingness to perservere until you do.

That's not what he's saying.

He's divided the world into two peoples: those with the capacity to program and those who cannot regardless of effort.

These groups are often confused because people can program, but only may do so badly. Yet even being a poor programmer puts you in group A, and effort will make you a better programmer.

On the other hand, there are those who cannot program: cannot write a loop, cannot use variables, cannot create a working algorithm even with copy and paste.

The may perhaps be able to do simple math, but when it comes to composing equations or functions together into an interdependent process...they are simply unable.

They may try if they're so inclined to learn programming, but they'd die of old age before they can even begin to reach a standard that we'd call mediocre.

That is what he is say. Agree or disagree with it, but misunderstanding it skews the discussion.


True. And not. Continuing with the sports analogy I think the comparison of sprinters and marathon runners is an apt one. It's been found (http://sportsmedicine.about.com/od/anatomyandphysiology/a/Mu...) that sprinters have a muscle metabolism that is much more anaerobic than normal from birth (you never exhale during a 100m dash), so good sprinters are pretty much born rather than made. On the other hand, although good genes do help (why are marathon winners generally from Africa?) you can train your muscles to have more efficient aerobic metabolism and be a top-notch marathoner.

So Gates is right in that top talent is probably born, there's nothing you can do to attain that level (which is true for most things, btw). But you can become a damn good programmer by practice.


Don't forget:

-They are trying too hard.

On a daily basis, this hurts me more than anything else.


I agree with everything you said. It is scary that somebody believes something like what Jeff Atwood said. It is actually very toxic thinking. Don't know what more to say other than experience and observation of a lot of people has taught me that what Jeff Atwood says is false. On the other hand, if you believe it is true, then it will just become a self fullfiling prophecy.


I'll add one real reason:

  - Explaining why code is "sub standard" is hard.


It's not that hard. There are lots of objective criteria you can apply to show that one piece of code is better than an alternative: it's more efficient, it's more extensible, it's more reusable, it's less lines of code, it's less prone to error X when programmer Y tries to use it.

The hard part is actually convincing a human that something they did is sub-standard based on a set of objective criteria.


for crying out loud, stop saying objective; it's meaningless.


They're objective in that people agree on them. All programmers would say that a more efficient or shorter or more reusable piece of code is better, notwithstanding other tradeoffs that it makes.

My use of "objective" is to distinguish from subjective criteria that people often don't agree on, like "it's more idiomatic" or "it's simpler."


Whilst the measures may be objective, the ordering of them is not. That's quite subjective.

Personally, a shorter piece of code is only better if it maintains the clarity of the longer that it is replacing - assuming all things being equal. Code is always a trade-off.


Many of these reasons are the same: inability to pivot and adapt to adverse circumstances. For example, you cited "they had to build on top of pre-existing shit and couldn't do it right" as a creator of bad programmers. You sound like a college student on this one, because this is the norm in the software industry. Every programmer (good and bad) has faced this one several times. The difference between bad and good programmers is that good programmers make the extra effort to learn the lessons that no one will explicitly teach them (i.e. figure out why the "pre-existing shit" got all fucked up in the first place) whereas bad programmers just accept it as-is or, worse yet, learn the wrong lessons and conclude that the pre-existing shit is how it should be (i.e. people who believe that C++ or Common Lisp, warts and all, are infallible languages, immune to reproach or change).

Having mentors, supportive management, and interesting work is great. But these are not the norm anywhere and they're certainly uncommon in the first few years in the software industry. A career average of 25% on these, for one's first 10 years, is probably about par. The good programmers are those who figured out how to get better in spite of these setbacks.

If I were going to put it into simple terms, the problem with the worst of the bad programmers (the deserving underclass) is that they don't expect much of themselves. They're happy to chug along at 100 lines/month on uninspiring work, and they do just enough not to get fired, but they don't achieve enough to offset the complexity load they create by modifying code while not knowing what they're doing, and by imposing resistance-to-change on the organization they inhabit. That's Class #1 of bad programmers, the ones who've been powerless for too long and are now just passing through. It probably comprises 65% of bad programmers out there.

Class #2 is the do-the-wrong-thing-well type. These are the ones who are generally very intelligent but narrow-minded. For example, they optimize for runtime performance at the expense of code readability, or who use the wrong languages, or who eschew databases because "SQL is a mess; let's just use the filesystem". They tend to be really, really good at some small subset of programming and tend to want to use that set of tools and skills even when not appropriate. These are the people who annotate an O(n^2) sorting algorithm as "WRONG!!" even when it's sorting a collection of 20 elements, because to them, not optimized == wrong. Their learning rates were too high, and now they're stuck at suboptimal local maxima. That's 15% of bad programmers.

Class #3 of bad programmer (15%) is the rock star, the kind who writes lots of code quickly, uses fancy "metaprogramming" features, but no one can understand the code (much less the rock star) a week after it's written. They tend to be parasitic, appearing highly productive but actually generating lots of unpleasant work (externalized costs) for the rest of the team. The call sign of the rockstar is the tendency to change interfaces willy-nilly and expect everyone else to adapt to his changes.

Those numbers add up to 95%. I'm going to leave 5% open to acknowledge that there are species of bad programmers I haven't met yet.


Did you mean to write '100 lines/month' up there, or is that an exaggeration for comic effect? I have little experience with bad programmers--but you seem to know enough (or think you do) to throw percentages out there.


Perhaps a slight exaggeration, but not much of one. 200-300 lines per developer per month is the norm in large companies. Most of the time is spent reading crappy code, debugging crappy code, and dealing with crappy workarounds for crappy code. It sucks.

Even very good programmers fall below 500/month if they get mired in legacy bullshit.


crazy. I have _days_ I write 500 lines of production grade code.


In a team of how many?




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: