I think this is just a poor, exclusive, and incomplete way of saying, "I like passionate coders." Or maybe not, since you seem to imply that the second type just takes up coding because that's what successful people do in the tech world. Am I worthless and not passionate because I started teaching myself to code when I was 15? You probably have a case for people who have been coding nonstop since their early adolescence. But frankly, this article is vapid nonsense. Stop generalizing; sometimes you have to accept that the world is complex and not black and white. Try thinking outside of binary.
Jungian personality types are not a good way to look at personality. Just having a number of categories fails to capture something so complex as personality. The Five-factor model of personality is much better in this sense as it places people on a continuum rather than attaching pseudo-scientific labels to people.
> The first category is the one that I’d like to think I fall under. They’re what I call the “5th grade coders”. These programmers were given a computer at a young age and have been playing around with it ever since. I can connect with them easily around getting our first computer, doing FIRST robotics, or working part-time during high school making websites. These are the types of people who breeze through their undergraduate CS education and have been working at tech companies since they were ~18. They don’t have to put a ton of effort into learning new languages, picking up different theories, because it is second-nature. In some ways, this group of people just got really lucky early on in their life in that they were given a computer and enjoyed building things.
I definitely fall under this type of programmer. Started learning Logo at 9 years old, Pascal from 10 onward. Worked part-time in high school as a web developer, worked a lot as a CS undergrad.
But I most certainly didn't breeze through my CS education. In fact I flunked out[1]. Hell, I almost flunked out of high school as well because I spent so much time coding.
[1] I have two exams and a thesis to go, but at this point it's doubtful I'll ever bother.
I would more than likely fall under the second type. Growing up relatively poor my family didn't have a computer, and neither did the majority of other family members. It wasn't until my mid teens that I finally had access to a computer and at that time MySpace was popular amongst friends so only thing I got into at the time was HTML and CSS. It wasn't until years later that I picked up a lower level language. At times I feel jealous of those that had access to a computer at a young age and were exposed to learning a language, but in the long run that doesn't really matter as long as both types can do the same thing. I didn't grow up writing programs but that doesn't mean I'm slow to pick anything up.
With so many otherwise smart people in the tech community, it's unfortunate to see how ready people are to advertise their own half-baked prejudices, based on anecdotal evidence.
There are great coders out there who took longer than a year to code, but haven't coded since birth. I wouldn't expect someone trying to code while working a full-time job, or raising a new-born child, to get up to speed as quickly as a single computer science college student. That doesn't mean the former has less aptitude, or grit.
The article is a fun read, but doesn't make that sound a case for the existence of this "uncanny valley" class of programmers.
I would love to consider myself as the "5th grade coder", I did start coding in about 5th grade however I just cannot come with anything that could be called successful. I just doubt that with my lack of professionality I've got any chances of making something bigger than a useless game.
Actualy it is a hard questions to answer and every programmer is retrospective on there own code to the stage that they deem there first efforts bad. It is when they blindly impose those raising standards on somebody just starting out or not as far along as if they should be at the same level. They deem that person a bad programmer though it does not make them one.
Also programmers these days are doing more analysis and design impact roles than programmers of the past. Go to a old 70's enviroment and outside the ediucation/lab enviroments you had analysts and programmers with the written or unwritten rule that the analyst would have somebody else do the code from there program design. You had levels of anylysts and buisness experts going up the design project tree with the coding skills peatering of, even if they were only needed at the programmer level.
So that in mind i would say there are no bad programmers beyond those who can't program/know the language they are using and its quirks and pitfulls. Though there are bad analysts and a bad or not as well thought out design/approach can make the code bad. Anybody can hit vi and bash out code and design on the fly, though extremly rare to find somebody who can do that and nail the design of the bat. Good design takes time and nobody is perfect or we would just release 1.0 software and that would be all we would need to write.
Put this another way, how many of you have written more than a page of virgin code and it has compiled with no errors or warnings. Then it has tested out with no errors first time as well. If the answer is no everytime then are you a bad programmer because you made a mistake.
So with that what makes a good programmer. Well one that thinks things thru, gets the results on time or ahead of time and can alert to pitfulls that whilst not day one impacting would be a issue down the line and can be addressed before they become an issue. One who writes code that documents itself it is that well desigened and laid out in a way that makes it feel natural. There again a company that has a coding standard that has been solid as long as the code base does also help.
I guess you could also say there are no bad programmers, just lots of bad code waiting to be discovered. With that look back at the earliest code you ever wrote and ask yourself if you would not change a thing now. Did that make you a bad programmer back then even though you were not.
I'd like to extend your ideas a little and make the point that:
1) When you combine the two extremes of programmers you can get more than just harmony, you can gain synergy, and
2) As "new-found learner" I believe that the idea of 'good programming' can be abstracted to be 'good creative problem solving and communication.'
About the first point:
As I said I fall in the "new-found learner" category, for my start-up I've been fortunate enough to have a 'veteran' developer on my team who is astounding. Every time I watch him code or he explains the architecture I learn something new and useful. Best of all, we have a high synchronization ratio.
However even though he's been working for nearly 10 years as a developer for some of the best financial institutions in the world it's clear that he doesn't have the entrepreneurial thought patterns necessary to gestate and birth a start-up. The other day we were talking about this very thing and he's said that he's tried, and with others just like him, to dream up the next big "Facebook" opportunity, yet inspiration keeps eluding him. He told me a 'cautionary tale' about a colleague who quit his job to start-up a Golf Scorecard mobile app which got funding and then later tanked. From what he said to me it seemed that this newbie entrepreneur had no intimate knowledge of the the customer's needs, too much customer inertia and not enough market pull. I would be so bold as to say it over engineered the problem. These issues seemed obvious to me, but only through the lens of my own entrepreneurial experience... gained the hard way.
The point is that the "new-found learner" probably comes from a place where their life experiences add a 'je ne sais quoi' to the mix when combined with the technical experience of your "5th grade coders". This makes for synergy.
About the second point:
I'm absolutely certain that the time I spent as a finance and economics consultant has been applicable to my approach to programming. Why? Well I was lucky enough to be taught how to logically 'think' my way to an optimal client solution and how to communicate the solution in the clearest possible way. I would roughly call it the "McKinsey's Approach To Problem-Solving." When I say that I mean approaches like 'understanding the question', 'hypothesis driven solutions', 'issue trees', 'mutually exclusive and collectively exhaustive (MECE)', and the '80/20 solution search.' Looking back I'm certain that what set the consultancy I worked for and the others was the ability to communicate the solutions. Often economic or financial questions have complex answers. Even if the answer is simple it is often put forward in a complex way. By taking complex ideas and putting them forward in an simple way, and keeping simple ideas simple, the consultancy was extremely effective and profitable. The secret to this effective communication was our Plain English approach to writing. The CEO of the consultancy was fanatical about it, even to the point of reviewing as many client reports before they were delivered.
I find that by adapting these problem solving 'thinking patterns' to my programming, while keeping in mind that I need to communicate clearly I'm at least productive enough to keep up with the "5th grade coder" in my team.
[+] [-] alexvr|12 years ago|reply
[+] [-] MIT_Hacker|12 years ago|reply
The 5th grade thing was just a label. You don't have to agree with my broad generalization.
[+] [-] thenerdfiles|12 years ago|reply
ISTJ - The Duty Fulfillers (Data Analysts/Code Monkeys)
ESTJ - The Guardians (Sysadmins)
ISFJ - The Nurturers (Devops/Builders)
ESFJ - The Caregivers (Devops)
ISTP - The Mechanics (Code Monkeys)
ESTP - The Doers (Builders)
ESFP - The Performers (Builders)
ISFP - The Artists (Hackers)
ENTJ - The Executives (Sysadmins)
INTJ - The Scientists (Hackers)
ENTP - The Visionaries (Architects)
INTP - The Thinkers (Architects/Builders)
ENFJ - The Givers (Data Analysts)
INFJ - The Protectors (Sysadmins/Devops)
ENFP - The Inspirers (Hackers/Builders)
INFP - The Idealists (Architects)
[+] [-] willeh|12 years ago|reply
http://en.wikipedia.org/wiki/Revised_NEO_Personality_Invento...
[+] [-] saraid216|12 years ago|reply
[+] [-] Swizec|12 years ago|reply
I definitely fall under this type of programmer. Started learning Logo at 9 years old, Pascal from 10 onward. Worked part-time in high school as a web developer, worked a lot as a CS undergrad.
But I most certainly didn't breeze through my CS education. In fact I flunked out[1]. Hell, I almost flunked out of high school as well because I spent so much time coding.
[1] I have two exams and a thesis to go, but at this point it's doubtful I'll ever bother.
[+] [-] MIT_Hacker|12 years ago|reply
I think it's more that we don't like taking the Intro to CS class, and either suffer through it or flunk out.
[+] [-] 0X1A|12 years ago|reply
[+] [-] charlesism|12 years ago|reply
There are great coders out there who took longer than a year to code, but haven't coded since birth. I wouldn't expect someone trying to code while working a full-time job, or raising a new-born child, to get up to speed as quickly as a single computer science college student. That doesn't mean the former has less aptitude, or grit.
The article is a fun read, but doesn't make that sound a case for the existence of this "uncanny valley" class of programmers.
[+] [-] adamzerner|12 years ago|reply
[+] [-] _random_|12 years ago|reply
[+] [-] Zenst|12 years ago|reply
[+] [-] tmikaeld|12 years ago|reply
[+] [-] thehme|12 years ago|reply
[+] [-] nazywam|12 years ago|reply
[+] [-] hhorsley|12 years ago|reply
[+] [-] Zenst|12 years ago|reply
Actualy it is a hard questions to answer and every programmer is retrospective on there own code to the stage that they deem there first efforts bad. It is when they blindly impose those raising standards on somebody just starting out or not as far along as if they should be at the same level. They deem that person a bad programmer though it does not make them one.
Also programmers these days are doing more analysis and design impact roles than programmers of the past. Go to a old 70's enviroment and outside the ediucation/lab enviroments you had analysts and programmers with the written or unwritten rule that the analyst would have somebody else do the code from there program design. You had levels of anylysts and buisness experts going up the design project tree with the coding skills peatering of, even if they were only needed at the programmer level.
So that in mind i would say there are no bad programmers beyond those who can't program/know the language they are using and its quirks and pitfulls. Though there are bad analysts and a bad or not as well thought out design/approach can make the code bad. Anybody can hit vi and bash out code and design on the fly, though extremly rare to find somebody who can do that and nail the design of the bat. Good design takes time and nobody is perfect or we would just release 1.0 software and that would be all we would need to write.
Put this another way, how many of you have written more than a page of virgin code and it has compiled with no errors or warnings. Then it has tested out with no errors first time as well. If the answer is no everytime then are you a bad programmer because you made a mistake.
So with that what makes a good programmer. Well one that thinks things thru, gets the results on time or ahead of time and can alert to pitfulls that whilst not day one impacting would be a issue down the line and can be addressed before they become an issue. One who writes code that documents itself it is that well desigened and laid out in a way that makes it feel natural. There again a company that has a coding standard that has been solid as long as the code base does also help.
I guess you could also say there are no bad programmers, just lots of bad code waiting to be discovered. With that look back at the earliest code you ever wrote and ask yourself if you would not change a thing now. Did that make you a bad programmer back then even though you were not.
[+] [-] Swizec|12 years ago|reply
[+] [-] wmoxam|12 years ago|reply
[+] [-] _random_|12 years ago|reply
[+] [-] tmikaeld|12 years ago|reply
[+] [-] _random_|12 years ago|reply
[+] [-] icu|12 years ago|reply
I'd like to extend your ideas a little and make the point that:
1) When you combine the two extremes of programmers you can get more than just harmony, you can gain synergy, and
2) As "new-found learner" I believe that the idea of 'good programming' can be abstracted to be 'good creative problem solving and communication.'
About the first point:
As I said I fall in the "new-found learner" category, for my start-up I've been fortunate enough to have a 'veteran' developer on my team who is astounding. Every time I watch him code or he explains the architecture I learn something new and useful. Best of all, we have a high synchronization ratio.
However even though he's been working for nearly 10 years as a developer for some of the best financial institutions in the world it's clear that he doesn't have the entrepreneurial thought patterns necessary to gestate and birth a start-up. The other day we were talking about this very thing and he's said that he's tried, and with others just like him, to dream up the next big "Facebook" opportunity, yet inspiration keeps eluding him. He told me a 'cautionary tale' about a colleague who quit his job to start-up a Golf Scorecard mobile app which got funding and then later tanked. From what he said to me it seemed that this newbie entrepreneur had no intimate knowledge of the the customer's needs, too much customer inertia and not enough market pull. I would be so bold as to say it over engineered the problem. These issues seemed obvious to me, but only through the lens of my own entrepreneurial experience... gained the hard way.
The point is that the "new-found learner" probably comes from a place where their life experiences add a 'je ne sais quoi' to the mix when combined with the technical experience of your "5th grade coders". This makes for synergy.
About the second point:
I'm absolutely certain that the time I spent as a finance and economics consultant has been applicable to my approach to programming. Why? Well I was lucky enough to be taught how to logically 'think' my way to an optimal client solution and how to communicate the solution in the clearest possible way. I would roughly call it the "McKinsey's Approach To Problem-Solving." When I say that I mean approaches like 'understanding the question', 'hypothesis driven solutions', 'issue trees', 'mutually exclusive and collectively exhaustive (MECE)', and the '80/20 solution search.' Looking back I'm certain that what set the consultancy I worked for and the others was the ability to communicate the solutions. Often economic or financial questions have complex answers. Even if the answer is simple it is often put forward in a complex way. By taking complex ideas and putting them forward in an simple way, and keeping simple ideas simple, the consultancy was extremely effective and profitable. The secret to this effective communication was our Plain English approach to writing. The CEO of the consultancy was fanatical about it, even to the point of reviewing as many client reports before they were delivered.
I find that by adapting these problem solving 'thinking patterns' to my programming, while keeping in mind that I need to communicate clearly I'm at least productive enough to keep up with the "5th grade coder" in my team.