Seems to me the article is fighting some kind of giant strawman. I myself haven't experiences this kind of attitude.
I really don't get what the point is, that some people have ego problems and hold pissing contests to see who is the most "awesome programmer"? Well that's a different thing, kind of "who's the best".
Well for sure if you ask people in an office what their job is then I don't think that a banker who creates complex spreadsheets calls himself a programmer per se... Even though he for sure programs a computer.
I would maybe categorize people in two categories, those who enjoy programming for itself (learning different languages and technologies) and those who use it to get some specific task done. This of course has nothing to do with being a "true programmer" :)
It's a thing I keep running into over and over again. I'm really happy that you haven't and that for you personally this is not an issue. Unfortunately your sample of '1' may not be representative.
I absolutely ran into it when teaching myself programming, but it really isn't specific to programmers. I had conversations go boil down to:
Me: "I'm learning programming"
Programmer: "Good luck with that (sarcasm)"
These people were dicks. I met WAY more positive and accepting people in tech during my transition, but there is still an elitist group that thinks it is special. This mentality exists everywhere, but tech seems to be special. Developers are in demand, many people don't fully understand what we do, and even when you "get your foot in the door" people..including folks on HN btw.. throw out things like "I hate pretend programmers".
>Seems to me the article is fighting some kind of giant strawman. I myself haven't experiences this kind of attitude.
For real? Because it shows up in HN all the time.
E.g. for what he writes:
>The IT world is rife with this ‘no true programmer’ nonsense, the ‘real’ programmers are the ones that have mastered ‘x’ (insert name of arcane and difficult to use programming language here), the rest is still stuck on ‘y’ (insert accessible and easy to use language here). The latter of course aren’t real programmers, if they were then they would get it.
> But that’s total nonsense. It’s like saying that there are only two kinds of people when it comes to swimming, those that can learn how to swim and those that can’t
It is a career advice. While most people can learn to swim, professional swimming is completely different level. If my friend is going to waste years of life and thousands of dolars to study wrong field, I would be very bad friend not to warn him.
BTW: I really wish someone would have told me early I suck at math and there are no jobs in physics. That would have save me a decade of my life.
As an ex-lifeguard, when you talk about 'career advice' I think you are referring to professional competitive swimming as a career. I tried out for the swim team, but endurance and strength needed to be a lifeguard aren't the same as competitive speed.
A lot more people are professional lifeguards than professional competitive swimmers. I think most people can train and qualify to be a lifeguard - otherwise lifeguard pay would be a lot higher. It does not cost that much to become qualified as a lifeguard for someone who is already a strong swimmer.
There are also other fields, like professional diving, where swimming is an important component, though diving does require more expensive training.
I think this ties back to the original essay - there are many professions where knowing how to swim is critical, but the specifics differ, and the same is true in programming.
> There are even studies on the subject to prove that there are ‘two kinds of people, those that can program and those that can never learn it no matter how much effort they put into it’
I continue to believe, however, that Dehnadi had uncovered
the first evidence of an important phenomenon in programming
learners. Later research seems to confirm that belief.
From my observations, the 'No true X' Fallacy comes into play when a person identifies himself with his skill...it becomes his identity so much that if he encounteres someone better at "his" skill, he feels his identity threatened.
This arises when the person does not really have a lot of properties associated with his identity. I saw a lot of people who were really insecure in other areas of life besides the area where their skill applies. The insecurities vanish really fast as soon as this skill is seen only as skill and the person identifies its identity with the proper properties like values, e.g. "I am friendly" instead of "I am a true programmer". Therefore I cannot imagine this being a healthy discussion.
For the ones interested in how to get a better identity and get rid of insecurities, take a look into steve andreas book "transforming yourself". You will also learn the basics of Neurolingual Programming (NLP) as a side effect
If you will learn NLP as a side effect, I would avoid the book as a plague. If
the author puts such a big lie as NLP, who knows what else is false in the
book?
It's not about being a dick and discouraging people who want to learn programming but they should know in what they are getting into: programming is hard and the learning process is a long road of many years.
It's important to distinguish being a programmer at all and being a very good programmer.
Even Norvig (condescendingly) concedes that idiot dummies can become bad programmers. The point he misses, is what Jacques refers to a brain amplification and Excel programming: even a bad programmer can reap significant benefits from programming.
My favourite consulting gig, about ten years ago now, was for some friends of a friend. They were not very technical, most of them history graduates, who'd taught themselves just enough PHP to cobble together an online history text book in an open source CMS - and sold it to a bunch of schools, and their server was now positively on fire. I helped them move to a bigger server, and migrate their search from the CMS' awful MySQL based homebrew to Solr, and they lived to fight another day.
Norvig can call them idiot dummies from his ivory tower all day long, but these guys created a business from nothing, and it's still around today.
Do we call people that put together chairs structural engineers? Do we call baristas chemists? Baseball players physicists?
Words exist for a reason, and using a spreadsheet does not make you a programmer. However I can already see that programmer is being diluted to mean anyone proficient with a computer. What term should we use for people that can write software? 'Software engineer' feels like overkill for writing small self-contained scripts.
> What term should we use for people that can write software?
I don't think there's a need for a word, just as there is no word for a person who can swim (swimmer implies they do it regularly) or a person who can assemble IKEA products.
So you're saying that someone writing a small self-contained script is a programmer, while someone who constructs a complex, multi-layered spreadsheet with complex functions, graphs and formatting isn't?
I agree strongly with Jacques Mattheij. Part of the programmer superiority (especially HN readers) syndrome is driven by fear; they consider themselves special and enlightened and "better" than others, and fear that teaching anyone to be a programmer will undermine their value.
I have seen it repeated multiple times here, in the context of the value of "unskilled" labour, that you are not adding any value if you are digging up a ditch and working hard to fill it over and over again. The automatic assumption is that programmers are providing more value. However, if you are writing hello world (or a slightly more complex program) in a new cool shiny language over and over again, then you are not adding any value just like any other labourer.
This reminds me a lot of a friend of mine who is a brilliant designer and also very technically adept. She couldn't build an operating system, but she could build a responsive website in 1/20th the time I could. Yet she's asked me "Am I not technical? I'm getting interviewed as a non-technical founder". This "hard core" massochim pissing contest really needs to stop. It feels like we've bonded with peers who also felt excluded growing up and we've turned this exclusion into a rite of passage rather than distancing ourselves from it.
Well, playing Devil's advocate, is the "technical" in "technical founder" a description of the person, or of the role?
I mean, if she starts a tech company with someone, what will she be doing all day? It seems to me that designing the company's website, while doubtless a technical task, would only take a small section of her time. If she does non-technical stuff the rest of the time, is she really filling the role of a technical founder?
This isn't a slight at her, just a difference in what we understand the "technical" to mean. I'm not sure I'd consider even Linus Torvalds a "technical founder" if his role involved almost no programming.
99% of technical co-founders couldn't build a working operating system either. It's a very different set of skills from building a web or mobile app, and requires a lot of knowledge of how hardware works - interrupts, memory protection, device drivers, etc.
> And let’s not kid ourselves, very very few people are programmers at the level of a Linus Torvalds, Peter Norvig or Fabrice Bellard. Imagine them telling you that you’re hopeless and you’ll never really get it so you might as well give up now.
I think this is a great point that deserves repeating.
> very few people are programmers at the level of a Linus Torvalds, Peter Norvig or Fabrice Bellard.
I never really thought of Peter Norvig as a 'programmer' in the sense of Linus Torvalds -- I always lumped Norvig more into the high minded computer scientist camp. It seems like the criteria by which one judges success in the two areas are very different.
> In general, for an imperative language to be Turing-complete, it needs:
1. A form of conditional repetition or conditional jump (e.g., while, if+goto)
2. A way to read and write some form of storage (e.g., variables, tape)
For a lambda-calculus–based functional language to be TC, it needs:
1. The ability to abstract functions over arguments (e.g., lambda abstraction, quotation)
2. The ability to apply functions to arguments (e.g., reduction)
--
Note that you can be a programmer without ever having touched a computer, people have been coming up with algorithms and integrating them into systems for ages.
> Note that you can be a programmer without ever having touched a computer, people have been coming up with algorithms and integrating them into systems for ages.
Slightly different, but the first episode of SICP videos helped me to reach the same conclusion:
>If you say someone isn’t a real programmer then you’re falling right into the No True Scotsman fallacy, where say making a spreadsheet is ‘not true programming’ because ‘No True Programmer’ would use a spreadsheet to solve a problem. But in my eyes being able to use a spreadsheet is already one step up the ladder and it does make you a programmer.
That's overcorrecting. Spreadsheets are a huge category. You can perform programming activities in spreadsheets and you can perform non-programming activities in spreadsheets.
Gatekeeping this profession seems overly ridiculous considering how excessively poorly we all are at practicing it. What is that saying about people yelling the loudest when the differences are smallest or something? It strikes me as some sort of compensation mechanism. Most of our code sucks, just really, honestly sucks. The number of software projects in history that have been done to the best capabilities that time and money would allow is an appallingly low number. Almost every software development effort involves a disturbing amount of half-assery. The amazing thing is that despite this it's possible to produce things that work and have considerable value. But there are so many ways we could do better, I wish more people would concern themselves with that rather than trying to ride the bleeding-edge of coolness or to prop up their personal identity as a "legitimate programmer" by playing the exclusion game.
This is a discussion that happens in a lot of different fields of practice. In medicine, you might have the argument over to what extent chiropractors or naturopaths are physicians; /r/justrolledintotheshop, one of my guilty pleasures, has recurring posts about embarrassing things that shadetrees have done. Right now they're doing the, "hah, car mechanics? Try being a boat mechanic! Hah, boat mechanic? Try being a diesel mechanic! Hah, diesel mechanic?..." It's all pretty light-hearted, one of the reasons that I like that sub, but still, there are similarities.
I get where they're coming from. I've put some effort into teaching programming to other people too: young kids, guys with electronics backgrounds but not software, even a homeless kid. I look at programming as a skill, like dancing, martial arts, or swimming, that can be practiced and improved for anyone that wants to put the time in to it.
But then sometimes I find myself on the other side of the fence, where a project is being made a lot more difficult by someone because, "I know Wordpress, so I'll just handle this complicated not-Wordpress-related hosting issue myself." Or, "my system was acting strange recently, and I saw this thing about hackers on NCIS, so I..."
So that's where I start to have a problem with thinking of spreadsheets as programming. Technically, Jacques is right, it absolutely is. People do hilariously incredible things with Excel -- even flight simulators! (https://www.youtube.com/watch?v=AmlqgQidXtk) But it's also not the same as developing an api or wrangling some other more advanced project, and when the people you're working with understand programming to be as difficult as a spreadsheet, it can make for some hopeless no-win situations.
At least in martial arts, if you decide to spar with somebody that's a lot more advanced than you, you'll learn your mistake pretty quickly. If you practice swimming in a backyard pool and then decide to have a go at the ocean, you'll have a pretty sobering experience if you're lucky. But in software, it's possible to muddle along for quite a long time, making a really expensive mess, before you realize that you're in over your head. (Which probably most of us have done at some point.)
It works the other way too. If instead of thinking of yourself as a programmer you think: "I solve problems" You can broaden your reach. There was a time when I was reluctant to work on something because I couldn't use C++ !
kisstheblade|10 years ago
Well for sure if you ask people in an office what their job is then I don't think that a banker who creates complex spreadsheets calls himself a programmer per se... Even though he for sure programs a computer.
I would maybe categorize people in two categories, those who enjoy programming for itself (learning different languages and technologies) and those who use it to get some specific task done. This of course has nothing to do with being a "true programmer" :)
jacquesm|10 years ago
http://arstechnica.com/information-technology/2012/09/is-it-...
http://blog.codinghorror.com/please-dont-learn-to-code/
http://programmers.stackexchange.com/questions/163631/has-no...
https://news.ycombinator.com/item?id=5302157
And many many more besides.
I wished it was a strawman, then I could have simply not written the article.
cblock811|10 years ago
Me: "I'm learning programming" Programmer: "Good luck with that (sarcasm)"
These people were dicks. I met WAY more positive and accepting people in tech during my transition, but there is still an elitist group that thinks it is special. This mentality exists everywhere, but tech seems to be special. Developers are in demand, many people don't fully understand what we do, and even when you "get your foot in the door" people..including folks on HN btw.. throw out things like "I hate pretend programmers".
coldtea|10 years ago
For real? Because it shows up in HN all the time.
E.g. for what he writes:
>The IT world is rife with this ‘no true programmer’ nonsense, the ‘real’ programmers are the ones that have mastered ‘x’ (insert name of arcane and difficult to use programming language here), the rest is still stuck on ‘y’ (insert accessible and easy to use language here). The latter of course aren’t real programmers, if they were then they would get it.
How's that not an example of "the Blub" reasoning? http://www.paulgraham.com/avg.html
unknown|10 years ago
[deleted]
fche|10 years ago
jkot|10 years ago
It is a career advice. While most people can learn to swim, professional swimming is completely different level. If my friend is going to waste years of life and thousands of dolars to study wrong field, I would be very bad friend not to warn him.
BTW: I really wish someone would have told me early I suck at math and there are no jobs in physics. That would have save me a decade of my life.
dalke|10 years ago
A lot more people are professional lifeguards than professional competitive swimmers. I think most people can train and qualify to be a lifeguard - otherwise lifeguard pay would be a lot higher. It does not cost that much to become qualified as a lifeguard for someone who is already a strong swimmer.
There are also other fields, like professional diving, where swimming is an important component, though diving does require more expensive training.
I think this ties back to the original essay - there are many professions where knowing how to swim is critical, but the specifics differ, and the same is true in programming.
labuan|10 years ago
[deleted]
nazri1|10 years ago
If you're referring to the "The Camel has Two Humps" paper then perhaps you'd like to know that the authors retracted their claim: http://www.eis.mdx.ac.uk/staffpages/r_bornat/papers/camel_hu...
michaelwww|10 years ago
foobar2020|10 years ago
I continue to believe, however, that Dehnadi had uncovered the first evidence of an important phenomenon in programming learners. Later research seems to confirm that belief.
johw|10 years ago
This arises when the person does not really have a lot of properties associated with his identity. I saw a lot of people who were really insecure in other areas of life besides the area where their skill applies. The insecurities vanish really fast as soon as this skill is seen only as skill and the person identifies its identity with the proper properties like values, e.g. "I am friendly" instead of "I am a true programmer". Therefore I cannot imagine this being a healthy discussion.
For the ones interested in how to get a better identity and get rid of insecurities, take a look into steve andreas book "transforming yourself". You will also learn the basics of Neurolingual Programming (NLP) as a side effect
dozzie|10 years ago
zwetan|10 years ago
Teach Yourself Programming in Ten Years http://norvig.com/21-days.html
with that wonderful quote "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies."
mseebach|10 years ago
Even Norvig (condescendingly) concedes that idiot dummies can become bad programmers. The point he misses, is what Jacques refers to a brain amplification and Excel programming: even a bad programmer can reap significant benefits from programming.
My favourite consulting gig, about ten years ago now, was for some friends of a friend. They were not very technical, most of them history graduates, who'd taught themselves just enough PHP to cobble together an online history text book in an open source CMS - and sold it to a bunch of schools, and their server was now positively on fire. I helped them move to a bigger server, and migrate their search from the CMS' awful MySQL based homebrew to Solr, and they lived to fight another day.
Norvig can call them idiot dummies from his ivory tower all day long, but these guys created a business from nothing, and it's still around today.
hueving|10 years ago
Words exist for a reason, and using a spreadsheet does not make you a programmer. However I can already see that programmer is being diluted to mean anyone proficient with a computer. What term should we use for people that can write software? 'Software engineer' feels like overkill for writing small self-contained scripts.
joonoro|10 years ago
I don't think there's a need for a word, just as there is no word for a person who can swim (swimmer implies they do it regularly) or a person who can assemble IKEA products.
BerislavLopac|10 years ago
jstuxx|10 years ago
[deleted]
radmuzom|10 years ago
I have seen it repeated multiple times here, in the context of the value of "unskilled" labour, that you are not adding any value if you are digging up a ditch and working hard to fill it over and over again. The automatic assumption is that programmers are providing more value. However, if you are writing hello world (or a slightly more complex program) in a new cool shiny language over and over again, then you are not adding any value just like any other labourer.
inlined|10 years ago
icebraining|10 years ago
I mean, if she starts a tech company with someone, what will she be doing all day? It seems to me that designing the company's website, while doubtless a technical task, would only take a small section of her time. If she does non-technical stuff the rest of the time, is she really filling the role of a technical founder?
This isn't a slight at her, just a difference in what we understand the "technical" to mean. I'm not sure I'd consider even Linus Torvalds a "technical founder" if his role involved almost no programming.
unknown|10 years ago
[deleted]
greenyoda|10 years ago
skrebbel|10 years ago
I think this is a great point that deserves repeating.
santaclaus|10 years ago
I never really thought of Peter Norvig as a 'programmer' in the sense of Linus Torvalds -- I always lumped Norvig more into the high minded computer scientist camp. It seems like the criteria by which one judges success in the two areas are very different.
jstuxx|10 years ago
[deleted]
ectoplasm|10 years ago
https://programmers.stackexchange.com/questions/132385/what-...
> In general, for an imperative language to be Turing-complete, it needs:
1. A form of conditional repetition or conditional jump (e.g., while, if+goto)
2. A way to read and write some form of storage (e.g., variables, tape)
For a lambda-calculus–based functional language to be TC, it needs:
1. The ability to abstract functions over arguments (e.g., lambda abstraction, quotation)
2. The ability to apply functions to arguments (e.g., reduction)
--
Note that you can be a programmer without ever having touched a computer, people have been coming up with algorithms and integrating them into systems for ages.
sepeth|10 years ago
Slightly different, but the first episode of SICP videos helped me to reach the same conclusion:
https://www.youtube.com/watch?v=2Op3QLzMgSY
We can even say Newton, or Euclid wrote programs. Maybe not by sitting in front of a computer, but they described a process to calculate something.
Dylan16807|10 years ago
That's overcorrecting. Spreadsheets are a huge category. You can perform programming activities in spreadsheets and you can perform non-programming activities in spreadsheets.
unknown|10 years ago
[deleted]
InclinedPlane|10 years ago
unknown|10 years ago
[deleted]
thaumaturgy|10 years ago
I get where they're coming from. I've put some effort into teaching programming to other people too: young kids, guys with electronics backgrounds but not software, even a homeless kid. I look at programming as a skill, like dancing, martial arts, or swimming, that can be practiced and improved for anyone that wants to put the time in to it.
But then sometimes I find myself on the other side of the fence, where a project is being made a lot more difficult by someone because, "I know Wordpress, so I'll just handle this complicated not-Wordpress-related hosting issue myself." Or, "my system was acting strange recently, and I saw this thing about hackers on NCIS, so I..."
So that's where I start to have a problem with thinking of spreadsheets as programming. Technically, Jacques is right, it absolutely is. People do hilariously incredible things with Excel -- even flight simulators! (https://www.youtube.com/watch?v=AmlqgQidXtk) But it's also not the same as developing an api or wrangling some other more advanced project, and when the people you're working with understand programming to be as difficult as a spreadsheet, it can make for some hopeless no-win situations.
At least in martial arts, if you decide to spar with somebody that's a lot more advanced than you, you'll learn your mistake pretty quickly. If you practice swimming in a backyard pool and then decide to have a go at the ocean, you'll have a pretty sobering experience if you're lucky. But in software, it's possible to muddle along for quite a long time, making a really expensive mess, before you realize that you're in over your head. (Which probably most of us have done at some point.)
unknown|10 years ago
[deleted]
discreteevent|10 years ago
sklogic|10 years ago
You don't have to imagine this with Torvalds. He said this kind of things many times.
mianos|10 years ago
unknown|10 years ago
[deleted]