Programming Education: Selling People a Lie? (blogspot.com)
An anonymous reader writes: It's hard to exist in the tech world today without hearing the constant refrain about learning to code: "it's easy, we desperately need programmers, and everyone should learn how!" UK software developer Mike Hadlow disagrees, strongly. He says, "Formal education for programmers seems not to work very well and yet the majority of those who are successful programmers are mostly self taught. On the one hand we seem to have people who don't need any guided education to give them a successful career; they are perfectly capable of learning their trade from the vast sea of online resources available to anyone who wants to use it. On the other hand we have people who seem unable to learn to code even with years of formal training.
This rather puts the lie to the barriers to entry argument. If the majority of current professional software developers are self taught, how can there be barriers to entry? Anyone with access to the internet can learn to code if they have the aptitude for it. The evidence points to a very obvious conclusion: there are two populations: one that finds programming a relatively painless and indeed enjoyable thing to learn and another that can't learn no matter how good the teaching. The elephant in the room, the thing that Yvette Cooper, the 'year of code' or 'hour of code' people seem unwilling to admit is that programming is a very high aptitude task. It is not one that 'anyone can learn', and it is not easy, or rather it is easy, but only if you have the aptitude for it. The harsh fact is that most people will find it impossible to get to any significant standard."
This rather puts the lie to the barriers to entry argument. If the majority of current professional software developers are self taught, how can there be barriers to entry? Anyone with access to the internet can learn to code if they have the aptitude for it. The evidence points to a very obvious conclusion: there are two populations: one that finds programming a relatively painless and indeed enjoyable thing to learn and another that can't learn no matter how good the teaching. The elephant in the room, the thing that Yvette Cooper, the 'year of code' or 'hour of code' people seem unwilling to admit is that programming is a very high aptitude task. It is not one that 'anyone can learn', and it is not easy, or rather it is easy, but only if you have the aptitude for it. The harsh fact is that most people will find it impossible to get to any significant standard."
Seems to me that there's a disconnect in the way people think about programming versus thinking about math and logic. Might it make more sense to people to think logically and procedurally, then worry about applying that to a computer? Those skills are useful in life itself and are not limited to even mathematics disciplines, let alone computer programming.
Do not look into laser with remaining eye.
"High aptitude task" my ass. Programming these days is assembly line work at the direction of your team lead. It'll be automated away soon enough.
Programming education should try to find people who have the aptitude to be good programmers and quickly weed out those who never will.
Even if you *can* program it doesn't mean you'll actually want to do it.
Many aspects of programming are boring and tedious. You need someone who can handle the abstract thinking, memorize the various components involved, understand how they fit and how to change them, and then sort through the various administrative steps(version control, bugtracking, communicating with devs/qa/mgmt, etc). Also, many programming jobs are very un-social. I've had times at work where I did't speak to another human for several weeks.
http://www.masturbateforpeace.com/
We should get rid of history classes while we're at it... how many kids become historians?
In fact, let's go back to apprenticeships and work-training. Imagine how quickly we could get working-class children into their lifetime careers of burger-flipping and form-filling and ditch-digging if we remove all the distraction of a 'well-rounded education'...
How can I believe you when you tell me what I don't want to hear?
In my experience, from numerous Agile/Scrum/Kanban meetings, the concept was sound -- get people together, find out where everyone is at, find what is slowing stuff down, go on.
However, that works in Japan where there is a level of respect from employers to employees.
Here in the US, what was, "what did you do, what are you planning to do, and what is in your way" becomes "explain the pathetic amount of stuff you did", "make promises for next meeting", and "point the finger at someone else." The concept of a blocker, for example is used as a way to blamestorm, and ultimately, a way to find who gets shitcanned first.
As for development in general, find a niche. Mainstream development stuff is offshored, and if by chance it isn't, it is handled by H-1Bs that rotate out after 90 days so they can't get a chance at a green card. Even if you find a dev job, you have to program at least 1000 lines of code a day, or else you will get replaced by someone who will. Bugs? If it builds, ship the damn thing. Security problems? Security has no ROI, worry about it when the lawsuits happen.
I personally recommend people go law, accounting, or a trade. You cannot offshore a plumber, electrician, or lawyer, and there is no such thing as an unemployed attorney. No, one may not wind up as a senior partner at Ben Dover & C. Howlett Fields... but one can eke out a living.
Back In The Day, I had Geometry in High School. 10th grade.
I don't know what others Geometry classes looked like, but ours was proofs. All proofs, nothing but proofs. We never did anything with compasses, protractors, straightedges, etc. Just proofs. Day in and day out. First 6 weeks was vocabulary, the rest of the year -- proofs.
Strangely, at the time, we had Saturday classes -- just the way it worked. I had to go in to Geometry class on Saturday, all of the students did.
But on those days, the teacher would basically hand out worksheets and we would work problems. These worksheets typically had 3 problems on them.
I would finish those problems in 2 minutes. Literally, zing, zang, bing, bang, boom. Done.
For me, proofs in Geometry were trivial. As the year advanced, we simply adde more theorems and axioms to tap in to do the proofs, but the logic -- that was all the same. Since Geometric proofs are all about logic. Damnable, inarguable logic.
"Teacher, can I leave now?" "No! You must stay here the entire class." he'd shout at me as he was helping some other student. And we all know that student, perhaps it was you. The student who Did Not Get Geometry and proofs. They'd been sitting in that chair the entire year, and, never "grokked" it. All they can do is struggle.
So, it was no surprise that I took to computer programming like a moth to flame. I get it. I'm good at it.
And I know there are a lot of people who will not be. I did not know Geometry going in, heck I don't know it now -- it's been so long. But they did not have to teach me Geometry per se, they had to show it too me, show the logical relationships, how it starts, and that was it. After that, just feed me theorems. Operations that I can use.
I have no problem with children being exposed to programming. That's how you find people like me. But I think, with the ubiquity of it today, when you could program on your cell phone if you were so inclined, the people that will do well and attend those classes, will already know what they need to know before they even go in.
But it's like the Force. You have it or you don't. Some have it stronger than others, some develop it more easily than others. But if you don't have it, the Force won't be with you. No matter what Master Jedi you train under.
Is this even true? Most of the major free software developers have degrees.
love is just extroverted narcissism
In the article there are a lot of comparisons to doctors. Like, how you can become a doctor by spending 7 years in a medical school, etc, whereas in programming you do not have a clear path.
To my mind, this only proves that nobody really questions the qualification of the doctor. The patients are (or considered to be) not qualified to do that, so unless you are very bad, you can carry out a successful doctor career without really mastering the skills. I am sure in no way can all people become good doctors if they spend 7 years in medical schools, and the same applies to programmers. The only difference is that for a computer program it is much easier to see if it works and who is responsible when it doesn't.
Those who can do, those who can't manage?
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Anyone with access to the internet can learn to code if they have the aptitude for it. The evidence points to a very obvious conclusion: there are two populations: one that finds programming a relatively painless and indeed enjoyable thing to learn and another that can't learn no matter how good the teaching.
I fall somewhere in the middle. I have programmed in languages from Assembly to PHP/Javascript (if you call those languages), so I have the ability to code.. I also know I don't have the aptitude to; I find typing at a keyboard to be very monotonous and am quickly bored. This doesn't mean I don't have desire to code, I just find it boring. I wish I wasn't bored with it.
However, I have a colleague who loves to code and is quite good at it. However, when he gets stuck he doesn't ask other programmers (I no longer code), he asks me, because I don't see the code, I only see the logic. I've helped him solve a number of problems simply by not being a coder but being a problem solver. I'll let him code the details needed to accomplish the solution.
That being said, knowing logic is fundamental to solving problems. People with strong logic skills can solve problems. Coding does help you learn how to be logical and solve problems.
Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
For those of you who are blessed to find this reference utterly mysterious, I hold up for you a case in point of John Roger's insightful comment on Kung Fu Monkey:
“There are two novels that can change a bookish fourteen-year old’s life: The Lord of the Rings and Atlas Shrugged. One is a childish fantasy that often engenders a lifelong obsession with its unbelievable heroes, leading to an emotionally stunted, socially crippled adulthood, unable to deal with the real world. The other, of course, involves orcs."
Starships were meant to fly, Hands up and touch the sky - Nicky Minaj
The OP claims that most professional programmers are self taught. Certainly a lot are, - maybe even most. However I would bet that there are certain types of projects that are mostly handled by people with formal training.
I've worked with lots of programmers, both self taught and those with CS degrees. There are certain concepts that the self taught group aren't usually proficient with, - pointer arithmetic being one of them. But a lot of coding can be done without understanding that.
Programming is like any other skill. Some people have more of an aptitude for it than others. And like any other skill, there is more than one way to learn it. I have no formal training as a plumber but I managed to replace a ton of galvanized pipe in my home with copper about 15 years ago. That said, I don't have near the skill and knowledge a Master Plumber does.
I had an aptitude for programming. A lot of what I've learned over the years has been self taught. I also have a CS degree. Though I've always been interested in computers, those early programming classes I had back in high school (over 30 years ago) were valuable and I may have chosen a different career had I never had that exposure.
He's absolutely right... if you're talking about production floor, practical, every day professional programming skills. But it's fair to note that the majority of self taught programmers do take formal programming courses through the course of their careers, especially if they move from full stack to specializing. As you get older, you end up doing so much formal course work and ongoing education that the line between self taught and formally educated gets very blurry.
But I digress.
The problem with statements like this is that we as programmers assume that everyone who learns how to code is going to want to do it professionally. My first language was BASIC on the Vic 20 in 1987. We learned how to write loops, draw vector graphics on the screen, save code to a tape drive, and read bar codes by sight. I was in elementary school with 35 other New York City yeshiva kids, who I happen to know the majority of which are not programmers today.
For me, it was the logical basis of what has become an extremely gratifying, and often enjoyable career.
But even if it didn't work out that way, I would still think of the class as beneficial.
Coding teaches you to walk through problems step by step. It's a skill that's absolutely invaluable in life, and it does go against the grain of what most people consider natural thinking.
It doesn't really matter if you're trying to teach people to be production engineers or not.
The skill is incredibly valuable to have. Even if you completely forget the grammars.
This signature has Super Cow Powers
Avoid jobs you can do from home, because that means someone from the third world can do it from their home and take your job. The only "Benefit" from teaching programming to the masses is a glut of workers to drive down wages and benefits.
He is right in one thing. Programming is not easy. It is easy for programmers. However, it requires a specific mind set which includes to be able to deconstruct problems. You cannot really teach this at university. And you need to be able to tolerate frustration which is required to get an CS degree, at least at all universities I have been. And to some extend you can train that.
However, CS education does help people to become better or even good programmers if they have the right mind set. And CS is not only programming it is also about inquiring customers, deriving requirements, features, planning, software design, combined with topics like continuous integration and delivery, software evolution, product lines, version control, documentation (real documentation not the shit most people write which contains the same information as the code) etc.
And you should understand the application domains you code for.
I've met people like you before. I have found those like you lack severely in one area (probably some of you don't)
I left work one day and came in the next day to find a bunch of guys, like you, still at work from the night before. They were excited because they came up with a speed up for their software. They implemented a rebalancing binary tree, but invented it themselves on the fly (Years ago before there were a lot of libraries that did this). They were so excited and explained it to me in great detail, what they did was very close to an red-black binary tree.
Had I been there and they told me what they needed to do, I would have told them to look up red-black binary trees. They would have been done by 10 PM and gone home. Instead they spent the entire night "inventing" it and debugging all the issues involved.
Obviously pretty smart, hard working, and everything else good you can say, but not efficient. If they had taken typical CS classes they would have known it existed already and just copied the algo. Other than not knowing some of which basic things were possible they always spent a lot of time redoing stuff they didn't need to.
Probably wouldn't happen nearly as often today with all the libraries being used all the time.
Also, having a CS background (I didn't say degree - there is a difference) WILL make you a better programmer because you'll have an understanding of what's going on behind the scenes.
And often a greater breadth of knowledge. One of the advantages of a formal CS program is that one will most likely take classes in topics a student has no interest in. Yet those topics may be important or yield info that unexpectedly solves problem in other areas/topics. Many self taught tend to skip a topic or two and have gaps in their knowledge.
That said, in a formal CS program there are two obvious groups. Those who are there because they have a genuine interest in coding and the problem solving it involves, and then there are those who are there because someone told them it is a good career path. While both can graduate, the former (genuine interest) tend to be far better programmers. They will learn something, or more importantly do something, just for their own curiosity. Things unrelated to class assignments, and they learn more and become more proficient.
So the whole degree vs self-taught is sort of a bogus comparison. Many top programmers are both, degree and self-taught are not mutually exclusive.
So the blogger uses 2 polls in his article, one his own twitter poll of 101 responses, hardly meaningful. The other is a the 2015 Stack Overflow developers survey, that survey had 21,314 respondents for the education question which is certainly better than 101. He uses the graph for education to backup his statements which has the following data:
41.8% I'm self-taught
37.7% Bachelor of Science in Computer Science (or related field)
36.7% On-the-job training
18.4% Masters degree in Computer Science (or related field)
17.8% Online class
16.7% Some university coursework in computer science (or related field) but no degree
6.1% Industry certification program
4.3% Other
3.5% Intensive code "boot-camp" or night school
2.2% PhD in Computer Science (or related field)
1.0% Mentorship program
He then goes on to say "Only a third have a computer science or related degree and nearly 42%, the largest group, are self taught."
Turns out the percentages add up to 186.2%, the horror, some people had more than one source of education or they lied about their education. Now it's probably safe to assume that if the poll respondent had a PHD they didn't also claim a Bachelor and Masters degrees, that would mean that 58.3% of the poll have a computer science or related degree. If you include the response of some university course work it turns out that 75% of the respondents had some level of university training. It would seem that according to Mr. Hadlow's sources that university training is important.
Perhaps Mr. Hadlow should head back to university, his math and logic skills need refreshing.
As I've gotten older (started BASIC with a Timex/Sinclair XZ81, do NoSQL engine design for a living now), I've come to believe that the population split is true; there is a segment that has the aptitude to code, and the rest who don't.
The easiest way to see this aptitidue is to look and see whether someone loves to code. Just loves it. Works late because they have their teeth into a problem, holds incredibly complex systems in their head comfortably, etc. LOVES to code. Who feels, to paraphrase The Wind in the Willows: "There is nothing-- absolutely nothing-- half so much worth doing as simply messing about in code."
You rarely find crappy software folks who enjoy puttering about in the code. You often find crappy devs who got into it for the high salary.
-- "Vote Democrat. Because the current crop of conservatives are just bugnut crazy."
Red and black binary trees are fucking awesome!
Now, to be fair, I'm not entirely self taught anymore... if I ever was.
I've spent the better part of a decade and a half taking formal classes and working with mentors. I've even gone out of my way to work at companies where famous and semi-famous programmers work, in an effort to meet them and suck the wisdom out of their brains with a straw. By the way, if you're interested, that doesn't usually go over well. But most of the time, they're gracious enough to answer your questions.
Can't stress how important it is to find mentors in this trade.
The old crazy gray haired guys that have done things like contributing to the unix kernel, or invented on-demand tv, or the internet.
You can probably get there on your own, but mentors will challenge and annoy you.
If you're not challenged and annoyed, you're not learning anything at all.
This signature has Super Cow Powers
I'm in a weird situation: I teach programming to people who need it but wish they didn't. They're PhD students from life and social sciences. They nowadays have so much data that they need to program, but most of them don't really want to. They find it hard and it takes up too much of their time. The biggest mistakes I find is that their code is terribly organized. They don't plan ahead, they don't break down the problem, they don't think about code re-use, they seem to fight the process of coding rather than learn it. It's as though they don't understand what it's for (even though they have access to a lot of good example code. They seem to ignore it). They're making progress, but it's slow. Learning the language isn't their biggest problem: learning how to use it is.
soylentnews.org