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."
People who take programming courses and can't hack it can still list that as a qualification to become an Agile Project Manager. That role is best filled with a person who can't program and is jealous of those who can.
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.
Formal education (i.e. a Computer Science Degree) teaches you how to think in certain ways and how to generalize problem spaces. It is not the same as job training. "Learning to code" is more akin to job training. Learning both is what makes you an invaluable resource but if you're just looking for a career and to get by then, yes, the job training aspect of "learning to code" does not require formal education and a smart, self-starter who has the job training part down is better then a dumb non-self starter who is formally educated. This is true in just about any field.
The best scenario is a smart, self-starter, that has formal education and job training but there aren't near enough of those to go around.
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
Most "programmers" I know, and work with, have a formal education in software engineering or computer science. They might have been self taught before the started higher education, but that is not the same as saying that the formal training is useless. Being self taught seems like a difficult sell, at least when entering the job market - experience can do a lot. The course of higher education teaches a lot of things one usually wouldn't end learning by self-learning programming. Maths, physics, chemistry, team-work (sometimes at least).
Aptitude is important, but developing software is a lot more than programming. It's about understanding the problem at hand, being able to talk with people, being able to deliver on promises in a timely fashion - oh, strike that last thing.
As for teaching programming in school (before higher education): it might be important in helping people free their minds and think smarter. If it could reduce the amount of people being unable to use simple software I would be very happy. A lot of people seem unable to think logically about even the simplest of things when it comes to computers, electronics, and software.
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.
I strongly recommend for anyone considering a computer science degree to pick a dual major.
Mine was a hybrid telecommunications engineering and computer science degree - it was very interesting to observe those of us who clearly enjoyed programming and had the knack for it would elect for increasingly more programming and computer science oriented courses, while those who didn't had many other good course options. In our course of about 35 people, about half had the knack for programming while the other half always seem to need help.
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
A great sculptor (I forgot who) was asked how he makes his wonderful statues. He said "Easy. Just chip away all the marble that doesn't look like the statue".
It's the same for programming. Yes, it's easy if you know how it's done. It's insanely difficult for people who don't.
I've spent quite a bit of time trying to teach people how to program. It's futile. Mostly because we teach them the wrong skills. People don't need to learn how to program until they grasped the basic underlying concept of logic and problem solving. Once you taught them that, coating it in code is trivial.
The problem is that people fail at the underlying concept.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
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
Well, you have now. Pleasure to meet you. I've been doing this since 1996, straight out of high-school, and I haven't stopped. I did actually spend three semesters in community college as an English major, but I dropped out when the .com boom hit me to work for a forward thinking consulting startup. The rest, as they say is history. I now posses master level proficiency in 25 programming languages, and I'm writing a book on language theory, and hotel rooms, and hookers. It's going to be a good read. Anyway, never did get around to finishing that degree.
This signature has Super Cow Powers
So what you're saying is that there's no special skill involved in being an author, poet or a playwright. Anyone can do it, and nobody has to try harder than anyone else to make a good book, sonnet, or play?
Big parts of the US college / higher ed system is that way.
Division 1 football and basketball The team only takes 20 hours a week. On paper only for the big games you have to miss class and you get lot's joke classes to fill the gaps. That voluntary team stuff is not so voluntary and it get's in the way of class.
You need to go to college has made trade / tech schools some what of a joke and they can be better off not being tied down to the college system.
The student loan system big banks make big bucks off that with little to no risk of a whammy. Very hard to discharge student loans even with death or disability. Much less if you end up $50K+ in the hole. With a mcjob.
We Tech skills needed for the job! Verys a lot from way to done to a hear is how to work with X tool in X to lot's of theory with little hands on skills.
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'd think this would be true of any discipline. There are many reasons why those gaps in productivity exist and one of them very well be that some programmers have better training. Some are more experienced. Some manage their time better, - and yeah, some are just naturally better at it than others.
Some folks might be excellent programmers but terrible communicators or have the misfortune of being poorly managed.
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.
That is really the bottom line here. If you want to be good at coding, you have to be smart, creative and logical. Additionally, it's also hard work so if you don't, at least, like it, you will not be able to take the pressure of the work that comes after you've overcome the frustration of something as fundamental as the semantics of coding languages.
Of course the way to fix this issue is to triple the salary of every coder, dba, sysadmin and networking professional on the face of the earth. But that won't happen because then there isn't a way to exploit the people who truley made for doing this work by driving the cost of employing them down. It's a delicious, if bittersweet, irony that technologists enjoy and tolerate simultaneously.
I know, it sounds elitist and politically incorrect however, that is just the reality of the situation. I didn't make it that way, the physics involved in the electronics of the machine running the kernel that compiles the code that I wrote, made it that way. The machine is ambivalent to your persona. Your warrior ways are meaningless compared to the power of the Source.
So, after acquiring all of the above attributes and then developing enough emotional intelligence to work with other people who share these skillsets, you will find that it doesn't matter if you're male, female, old or young, nor does your race, religion or sexuality - that actually makes it more interesting (to me anyway). Just be smart and cool, then you can join our club.
My ism, it's full of beliefs.
Your story would be much harder to start today. It's very difficult to find programming jobs without having some sort of degree to get your foot in the door. At this point in your career you have so many years of experience that the degree is now irrelevant. It can't teach you anything you don't know (most likely).
But what a degree does give you is a jump start. You still have to have an aptitude for programming either way, but a degree can expose you to a lot of the pitfalls that you otherwise would find out about on your own. There's another comment in this thread from a guy who talks about his co-workers re-inventing red-black binary trees for example. That's probably going to be one of the biggest areas is algorithm analysis. Knowing the tradeoffs between an O(n*lg(n)) sort vs. an O(n^2) sort and when to use one over the other. Formal definitions of inputs/output, invariants, graph theory, boolean logic, statistical analysis - all of these *can* be picked up along the way, but it really really helps if it's front loaded and you don't have to muddle through and figure it out on your own.
I agree. Salary.com has some breakdowns by degree by job title
http://swz.salary.com/salarywi...
http://swz.salary.com/salarywi...
Indeed.com resume section tells a different story for new york city and silicon valley if you look at the filters on the left.
http://www.indeed.com/resumes/...
http://www.indeed.com/resumes/...
He based the statistic from a self-reported stackoverflow survey. The survey itself says 38% of the people self-identified as professional programmers, 46% as other, and 16% as unknown. So it looks like most non-professionals on the survey don't have a degree.
Formal education (i.e. a Computer Science Degree) teaches you how to think in certain ways and how to generalize problem spaces. It is not the same as job training. "Learning to code" is more akin to job training. Learning both is what makes you an invaluable resource but if you're just looking for a career and to get by then, yes, the job training aspect of "learning to code" does not require formal education and a smart, self-starter who has the job training part down is better then a dumb non-self starter who is formally educated. This is true in just about any field. The best scenario is a smart, self-starter, that has formal education and job training but there aren't near enough of those to go around.
I'm old, started programming when 8-bit machines wandered the land. In those days a formal CS program largely left "learning to code" as an exercise for the student. A certain amount of "self taught" was expected in a university CS program. There would often be an intro to CS class that introduces the rudimentary concepts of computer programming and introduces students to some programming language. Then off to data structures where the professor generally sticks to theory and abstract pseudo-code and its left to the student to learn on their own time the designated programming language for the class well enough to do assignments. At best the TA would reserve a little discussion time for programming examples and questions.
But the preceding is not the "self taught" that I think is the important thing. Those with a genuine interest in programming will learn things and write code purely out of curiosity, to see if they can figure it out and do it, to try something new, etc. Things that are completely unrelated to class assignments. These are the people where formally trained and self taught combine to create some of the better programmers. The others that merely do the class assignments, who are there because someone told them its a good career path. They can graduate, some might be good but lacking that innate interest and curiosity to go learn on their own outside of assigned tasks (work or school) they probably won't be great.
As for those who are only self-taught. Its conceivable to become as well educated in the field as someone taking the classes but to be honest such individuals are very rare. Many self-taught will have gaps because they did not study something that had no interest to them, and miss something unexpectedly important or useful.
"unless you are very bad, you can carry out a successful doctor career " Frank Burns eats worms.
you know the rest
--
Stay tuned for some shock and awe coming right up after this messages!
This obsession with teaching everyone to "program", for a seemingly unlimited range of definitions of 'program', is a fraud. It's solely to drive down the wages of programmers by convincing everyone that it doesn't require any special ability or mental discipline. Ten years from now the people studying it will realize they've been had but that will only be after a lot of corporate profits and human suffering.
First of all, you don't need to be a programmer to benefit from programming skills. Countless small business owners benefited from custom batch files, DBase forms and putting together Excel, Access and a little VB. We should work on modern replacement for these as well as widespread literacy rather than wasting people's money on cloud apps which are not tailored to a specific business.
Second, self-learning is a privilege of growing up with computers, stable/peaceful living arrangement and no other responsibilities. Many only get time to work on themselves only once they get into college with a loan and/or scholarship.
Finally, self learning happens by bits and pieces. I did quite a bit of programming in middle and high school, but certainly filled in many gaps when taking dozens of classes in the college. For example, I did all my previous programming in MS-DOS and UNIX workstations or parallel clusters were not commonly available to individuals at the time.
Even if self learning is the solution, you first need to convince recruiters of all the major employers to accept folks without a degree.
I do believe that C.Sci degrees are ridiculously overpriced and can be completed 100% online, but still with qualified instructors, teamwork and scholarships for those who can not otherwise find money or non-work time.
Highly successful and talented artists need little training.
And yet, a much larger population of graphic designers does.
It's really the difference between skill and talent. Most jobs need someone with skill to perform a task. Most jobs do not require a John Carmack and indeed John Carmack would find most programming jobs to be the very definition of hell.
"Hey John, we need a new tax total on the web page. It's going to require about 8 hours of coding, 24 hours of testing, and then 6 meetings, 8 forms, a code review, unit tests, and you need to work over christmas to install it when the users are not using the web page."
She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
Now this is where formal education has a place. Anyone with the necessary abstract reasoning abilities and problem-solving intuition, etc... can become a self taught programmer. Formal education can help foster those skills in students that may have less aptitude in those areas.
There are 10 Types of People.
(The ones that understand the above sentence and the ones that don't.)
HR: OK, we have all the paperwork done. I see you never graduated.
Me: Yes, I have a degree in electrical engineering
HR: OK, that me we can offer you more money
Me: OK
I wouldn't have risked it, but I'm confident that I could have gone an entire career without graduating from college (being in college was a requirement to get some internships).
In fact, many people who started out working internships never returned to complete their degree.
The average balance of outstanding student loan debt for households with some debt was $25,700. The median debt was $13,000, and seventy-five percent of borrowers had less than $29,000. These burdens are relatively modest given the annual earnings of these households. The average annual wage earnings among this population was $71,700.
There are certain basics you have to know. The difference between a variable and its value for instance. Assignment vs. Comparsion. Conditions, arrays etc. How to format your code and how to break down a problem into comments, terms and eventually code.
Everyone can understand these things. The problem is: If you haven't understood these, no education whatsoever will get you anywhere near programming. If you don't know what the tab-key and the clipboard are and how and when to use them you will fail at the most basic things.
People today don't learn the fundamentals of computing, thats the real problem. No amount of academic education will fix that, if the fundamentals aren't grasped.
We suffer more in our imagination than in reality. - Seneca
At least to anybody that can write good code and has tried to teach others. From my experience, you can give people a few pointers, tell them when to start and how to avoid obvious pitfalls. They then neatly sort themselves in people that get it and ones that do not. From my experience, about half of CS undergraduates do _not_ get it. Which makes me suspect that in the general population, less than 10% can learn to code well.
One reason why coding is essentially self-taught in those that can do it well is that it is so extremely difficult that without doing it in your personal style, you do not stand a chance.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
From personal observations on a lot of CS students, that is completely wrong. Quite a few highly motivated CS students fail to ever become good coders. They have the motivation but lack the aptitude.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
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."
What's wrong with "everyone should learn how"?
This is not about encouraging unsuitable people into programming but about widening the pool - reaching those who would never consider programming as a career because they don't have a computer or no-one in their family has ever worked in an office or they don't know where to start and just need a little help to get going or they have a logical mind but don't know what programming is or think programming is for weirdoes.
Hard to say what would happen today. I've found that in order to survive in the industry, you have to be somewhere on the spectrum between formal scientist and snake oil salesman. If you're comfortable enough in your own skin, and you're arrogant enough to try in the first place... I think it could still be done. The best route there, in case there are any young programmers reading would be to shoot for nonprofits and small consulting outfits. The work sucks, the hours are long, management is usually dishonest, and it's totally without appreciation. But those are jobs that look good on a resume, that there isn't usually much competition for.
Truth be told though, the line between formally educated and self taught gets very blurry the further you go.
This signature has Super Cow Powers
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 know some really good self-taught programmers but many of them suffer from shortcomings due to not understanding the underlying mechanics.
Using arrays when hashes would be better and things like that.
LK
"Hi. This is my friend, Jack Shit, and you don't know him." - Lord Kano
Didn't need a CS education to learn *that*.
In my opinion, CS is about the easiest of the technical topics to learn from books and via direct work with computers.
See, computers are *designed* by humans. At some level, they *make sense* because they're a man-made creation. Algorithms designed by someone else are similar, they make sense. Computer languages are also of human design, and are made to make sense.
Designing *new* algorithms that aren't derivative of already-invented ones, *that* is hard, but there's not much need of that for most programmers.
Quantum mechanics? That's *hard*. That's the type of thing that a university education is useful to me for. It makes no damn sense at all. All the physical sciences are what they are, and they're not of human invention and are often not terribly intuitive.
I used my time at the University, for the most part, to learn stuff that I couldn't readily teach myself.
These co-workers of yours? They didn't need a university education. They needed to have read a few books!
--PM
Beyond arithmetic most people find all the math that they learn in school to be pointless; something a hair more useful than trivia. It's on the reasons why they're so frustrated with it. Sure a teacher could tell them about some sort advanced scientific calculation which will need it, but that's so far out of the realm of what they imagine themselves doing, it just adds to the frustration.
But if some math classes were converted into programming classes, sure lots of students still wouldn't like it, but I imagine it'll be less frustrating, because they can at least see how it's being applied. Programming has a purposes, and they see the math being applied in the programming.
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.
You're right that re-inventing the wheel like that isn't efficient, but on the other hand, once you've gone through the process yourself, you end up with very intimate and visceral knowledge of how the algorithm works -- if they had simply reused an existing implementation, the algorithm would still be largely a "black box" to them.
Ad astra per aspera and all that...
I don't care if it's 90,000 hectares. That lake was not my doing.
At one point in time I had a computer, with a monitor, and some RAM, and some disk space, and a printer, etc... I also had a new car in the driveway. Guess which cost more?
*sighs* You don't even want to know what workstations cost or how expensive it was to fill a server room.
"So long and thanks for all the fish."
Not everyone is good at math, but we still teach it. Not everyone is good at science, but basic science courses are still required curriculum. The students who do well in those courses often find a career in them, but they might never have known that they would be good at something like this until they try. It's important for schools to introduce kids to programming if for no other reason than to identify those who might have further interest in the study.
I can only give anecdotal data, but the good programmers in my environment, friends and (former) colleagues, all got into programming on their own initiative, mostly during secondary school. I learned BASIC age 12. Then we all got a degree: CS, Math, Engineering, Physics. I know one good programmer who had his first programming experience at uni, but he was studying languages, so it was also not part of a course.
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
I am a teacher. I teach computer science. I think that the point of the 'teach everyone to code' idea is that we need to expose students to options. Yes, I agree with the original comment, you CAN teach yourself to program, like you CAN teach yourself to do a great many things, but you won't if you didn't even know it existed as an option. For a kid growing up in a house without a computer they have to be exposed to programming to see if they enjoy/have an aptitude for it. I don't think anyone is expecting every child to become a top class scientist, mathemetician or linguist, but we expose them to those subjects so they can live in the world around them. Some of them will be Sagan, Einstein or Tolkien, but lots will just be able to read and write for pleasure, not get short changed at the supermarket or understand their tax return. I think the point is that understanding a basic bit of code/computer science is becoming essential to life - it's not totally about expecting people to become programmers, but expecting people to have to deal with programs.
Okay...
I'd say that the programming education system has gone badly south when it misses me. I am not and never will be a professional programmer. But I am capable of writing code, and I do have automatable tasks that I wish to accomplish, and really, that's the audience you should be teaching for: people who want to know how to do the digital equivalent of basic handyman's work. It's also why I find the Python haters so funny - I have played with it a few times, and yes, it abstracts a lot, and whitespace - but it just works. And you can put understanding why until later, or even never. Most people will never write an application where execution time matters.
However, in a work situation where productivity is more the goal, you should do things as efficiently as possible MOST of the time.
And that means leveraging the best of what's known.
I've been aggravated a great deal by one of my co-workers who WOULD NOT use data analysis scripts developed by others, more or less because he didn't write them and "didn't understand them" and "wanted to learn". Basically, "not invented by me."
I told him to USE the work that's already been done and focus on developing NEW tools that we don't already have and/or improve the existing stuff. These could be his learning examples (and yes, there were plenty of things to do that were easy enough to be learning examples.) Stand on others' shoulders so that you can climb higher. Develop new work so that others can stand on your shoulders!
There's a time and a place to struggle learning the already-invented, for pedagogical purposes, but in a productivity environment, you leverage the best of human knowledge to get the job done as fast and well as possible.
You don't waste your time and genius re-inventing the wheel, you develop NEW things. You also don't waste your co-worker's time and genius re-doing what they've done. It detracts from their productivity (because helping you makes them more productive) and disrespects their accomplishments.
And it really drove me batty that the stuff this guy re-wrote was inferior to what others had already done.
--PM
Not all people who take programming courses need to become professional programmers. What's next an investigation on the fact that most people who take English classes don't become professional writers, or everyone who takes math doesn't become a mathematician.
Talk about missing the point.
People shouldn't be illiterate or innumerate, or illogical.
Taking classes doesn't guarantee facility with something, but it does improve the odds.
From what I've read recently, it's not exactly true that the majority of programmers is self-taught. It's high, but not over 50%.
Anyone without the aptitude to code can be turned into "Soylent Green". Now, all the 1) remaining programmers can have an 2) endless supply of food!
Self-importance and self-indulgence is the root of ALL evil.
I think that this has to do with the perspective of 'lower tier' programmers. First of all, I want to point out that this isn't meant pejoratively. I don't have a degree and have been developing for >15 years. What I mean by this is there is a large market and need for people to develop for small businesses, usually on typical business workflows. I would suggest that many of the degreed people that work in this market may not be as motivated or talented as the ones that go on to work for wall street, silicon valley or in critical roles at a large company(lets call this first tier). For guys like me that grew up in a lower middle class family, making ~six figures with no degree working the lower tier sounds like a pretty good proposition. So perhaps some are seeing things from under the glass ceiling.....
love is just extroverted narcissism
I agree completely with the author. However one of the biggest challenges is that formal education runs on a time table which some people simply need more time in certain areas. However when involved with formal education you cannot simply put a class on hold for a single person. So the person who does need more time will never get it, especially if they're going for a 4 year degree. It's funny how the educated forget how the human mind can take time to grow when learning something new.
Serenity is important. You can't force good code out of people, nor can you trick them into it. If you enjoy understanding how logic works, what is it, and how it relates to the Universe you're going to be a good programmer. I personally believe this has a little to do with being in awe of the way existence works. If you're not curious about what lies within the infinity of space, you're not going to want to dive deep into the 1s and 0s. So there does seem to be a mindset of looking past yourself involved. Only in that serenity one can make sense of the symmetry of logic, and see the essentials of what makes things tick, then write it down. This of course is a very subjective view so it's safe to say that's how I feel about it.
Parts of your comments are subjective, like having a fascination with the Universe, in general, being a factor in being a good programmer. But, I think teaching programming is no different than teaching art... you can't force good art out of someone.
You can teach some people some of the stuff, but you can't teach all the people about all the stuff.
No sig for you! Come back one year!
Furthermore to be useful you can't just be a great programmer, you need to understand one or more problem spaces at an advanced level so that you are able to apply your skills to encoding solutions, otherwise you are like a poet with nothing to say.
This.
I ask for evidence to back up a position and i am a troll....
putting the 'B' in LGBTQ+
I remember staring wistfully at Textronics brochures. Dreaming of the day I could afford a monitor like that.
Now we throw better ones away.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
I've seen some really dysfunctional large company IT departments.
They collect dead wood like nobodies business. Small business would send them walking in weeks.
In my experience the divide is more between, 'software is overhead' and 'software is our bread and butter'. No matter what the size, if software is overhead the departments suck (and suck to work for).
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
Months in the lab can save you hours in the library.
The problem with the CS teaches you the algorithms argument is it's wrong. You will never know all the algorithms, you should just know were to search.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
Yip. I like to remind the kids that once upon a time I upgraded my RAM and buying 4 MB of RAM was $400 USD. My first laptop was something like $7000 except I bought some external storage (I seem to recall it was some proprietary tape format) so it was a bit more (like nearly $9000) and didn't actually have a battery in it. At least, I think that was the first one. *sighs* There have been so many over the years.
I didn't really touch much in the way of a microcomputer until the early 1980s. I did go to a school where we used an HP 9100 in the classroom but that's not really what I'll call a microcomputer. At any rate, I was a bit old. I can imagine the temptations and frustrations for a kid during those times. I can imagine them looking at those prices and thinking they'd never be able to afford them.
Today? I've got more compute power in my phone. I've just given away things like tablets and computers that weren't even thought of back then. Hell, I have a stack (somewhere over a half dozen) tablets that I don't even use or like. I keep trying to like that form factor but I just can't. I only have the number I have because I sent a couple off to someone that seemed interesting online.
"So long and thanks for all the fish."
And when they find it, they don't hesitate to waste it.
I'll believe there is a tech shortage when they start hiring admins/assistants for development teams. If they make programmers drudge through the BS, it's obvious they have enough.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
Depends on how you define 'self taught'.
I define it as 'come into your formal CS education already knowing 3 or more languages'. Admittedly a heuristic. It doesn't mean you stop leaning when you start formal college.
I've never known a good programmer born after 1960 that learned to program in school. 100% were 'self taught' using my definition.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
WTF? Everybody is above average?
Engineering is different. Tests are bad at predicting who will succeed. So unlike law and medical schools, 'everybody gets in'. Not everybody gets to stay.
The thing that is 'broken' is the expectations of the kids. They apparently think they can 'just catch up' with their classmates that did apply themselves in HS.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
we should be rallying against the local principles / head masters who say things like "Just pass him. He tries hard and he is so good at football."
That is why high schools and colleges need to get rid of their sports programs. Unless one is in a small school, only a few people benefit from it. It would be better to spend that money on PE for all the students. The taxpayers shouldn't expect to pay for farm leagues for the NFL and NBA.
the good ground has been paved over by suicidal maniacs
When I was a kid, we had things rough.
I scrubbed pots for weeks (working on a fake ID that said I was 16), saving up for another 32k of RAM. It was $200.
Waited an extra pay period, to afford a parity bit.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
That's funny. It really must have been tough unless your parents were loaded. My kids had it fairly well but I'd not accumulated as many bits of green paper then as I have now. They got lots of hand-me-downs as I'd refresh a couple of times a year at times (I kind of needed to, things were changing that fast). It wasn't until the 2000s that they started getting their own new computer, mid-2000s probably. They're both in their mid-20s now and came to live with me after they realized I had the better toys. (No, I seriously think that's why they came to live with me. Very, very clever and conniving monsters, the both of 'em! *grins*)
Actually, they're good people. One's finished med school and is working in an ER children's unit. The other is supposedly still in school but he's really in Peru and sexing a very beautiful native girl while smoking a lot of weed. I can't say as I blame him. The missus and I are going to go down and see about getting him a bar/hotel combination to run and he can pay back the loan that way. He doesn't drink so it is cool.
"So long and thanks for all the fish."
Also, having a course function as a weed-out class is a function of grading. A friend of mine is taking a CS course where the language of choice is Python. The tests are 75% of the grade, they are on unruled paper, and you can lose enough points on style to fail the test, and it is not on a curve. And of course Python is the language where whitespace is syntactically significant. The style guide is also whatever the professor/TAs want it to be.
Artificial tests in an artificial environment with deadlines and stresses that are not typically found in the real world, and above all programming on paper, sounds like a shit way to determine whether someone can program. CS/Programming is not that hard. It's like being a chef -- yeah, probably not everyone is going to have their own restaurant chain, but that shouldn't stop anyone from cooking, or even graduating from a culinary school. Anyone teaching programming/CS as a weed-out course has their head firmly crammed up their own ass. There's no reason to do so, and you're probably not testing actual aptitude for the subject.
Those who advocate genocide deserve every protection afforded by law, and none afforded by common human decency.