Why Everyone Should Not Learn To Code
coderslexicon.com
coderslexicon.com
We also need good workers who can scrape together the code to pipe data from one application to another. We need sociologists and detectives who can construct SQL queries. We need scientists and economists who can cobble something together in R. We need physicists and engineers who know their way around MATLAB or SciPy. We need drafters who can write simple LISP programs. We need artists who can do a little bit of JavaScript when they need to.
These are not people who will always have a passion for programming, and they won't always be producing products or thinking about design. The dream of the fourth-generation programming language is dead, and the new dream is to teach people a little bit about programming, even if it won't be their career or their passion.
Not many people have the talent to become professional photographers, chefs, or musicians. That doesn't mean they shouldn't learn how take non-crappy family pictures, cook an edible meal, or enjoy singing songs with friends.
We've had math education for a long time now, you could debate about the quality of it but I'll call you a liar if you couldn't make the debates about programming education, yet we have widespread misunderstandings about many quantitative things, we have had a lot of historical education, yet many people do know basic things in history. I just don't think these code fever is panacea it's made out to be.
Think if you worked at a publishing house in which you had a fantastic story-teller who was illiterate. This person could tell best-selling yarns, she just needed someone to actually put it down on paper. And then re-read to her outloud the sections (and entire chapters) when the material was edited and re-arranged.
Yes, you could still produce best-selling books this way. But it's not efficient. And the artist misses out on a lot of what could be done with more direct contact with the written text...and the worst part is, she doesn't know what she's missing out on.
edit: Note that I'm not saying that this hypothetical illiterate storyteller has to be a great writer (just like most people do not need to be excellent, best-practices programmers). She just needs to be good enough to re-arrange and re-read her own ideas and take a more active part in the editing process. Believe it or not, in the publishing business, there are amazing storytellers (or reporters) who are not very good writers.
2. Professional programmers create awful messes too. They do it less often, but with greater consequences. Just like the contractors building a bridge are less likely to screw up than some goofball installing a new water heater at home, but a bad bridge is much more dangerous. Give people more training when the potential consequences of bad work are more severe, and less training when it's just not needed.
3. The value of someone with both domain knowledge and programming knowledge is usually immense. You can either teach a programmer about the domain, or you can teach a domain expert how to program. If you have a programmer with a bit of domain knowledge, then they know what kind of questions to ask the domain experts. If you have a domain expert with a bit of programming knowledge, then they know how to communicate technical requirements to a professional programmer.
Let's take your analogy with the publishing house. If the fantastic storyteller can write but has major problems with grammar and continuity, then a good editor can clean things up.
>artists who can do a little bit of JavaScript when they need to?
In some ways that statement is tautological, so I guess, fine (we need things that we need, got it). But I don't think this really an interesting statement; maybe it's a little provocative but not realistic. How about we have renaissance style artists that also do mechanical engineering? That's great but now you're argument is not about how programming is the special snowflake but that we need to return to a time of intellectualism ... ... However, that argument doesn't really work either because it's not as if renaissance intellectuals were the norm for their societies.
As far as the other examples you cited, there are already people pursuing STEM so I don't really know how fitting the idea of programming solves our societal problems.
Without being too hostile about it; does it really matter if the taxi driver can program? In a real sense, do you think this is really greatly benefiting society? I see it as benefiting society the same, or probably less so, than if the taxi driver understood Sartre, Descartes, or knew the history of Islam.
But then we're just saying "the more educated we all are the better everyone is" to which I say "great, non-controversial statement but so what?" Just being honest.
What if that cab driver, as a result of knowing a small amount of coding, could optimize his time, his routes, his fuel efficiency, his tire wear, or Hell even eliminate the need for a cab service altogether?
Luckily, you're right, someone else will figure it out for him.
So you're solution is there is that the cab driver should be an Einstein or something, great but that's just silly. You're basically saying as I said before, that the best case scenario is if everyone was some great intellectual. No one disputes that, it's not controversial. But it's not interesting as something that could be made to happen in reality. As well, why is programming so special in this sense?
For this cab driver, knowing a little bit of Javascript to be able make SPA blog engine is not enough to do route optimization, fuel efficiency and all this other stuff. You're talking about a renaissance cabbie that knows operations research, physics, and queuing theory and so on.
It's not really serious how programming is the special snowflake in this sense. If the cab driver had taken the time to learn physics, and operations research in high school or whatever is being posited for programming, then he would be able to make this super efficient cab system or probably not have to be a cab driver. Adding "programming" into the mix of education does not fundamentally change anything about society.
I'm pretty sure R, MATLAB, SQL are fourth generation languages.
Just because you will not become a computer scientist or full time engineer does not mean you won't have value in your life by understanding more about how software and computing works.
All businessmen are not accountants, but you still take a basic financial accounting class when you major in business. It teaches you the basics of how things are organized and why certain things are measured the way they are. Learning the basics of programming could serve the same purpose. Kids would learn how to break problems in to algorithms and what sorts of things are even possible with software, helping them gain an appreciation for why software works the way it does. And unlike accounting and its relationship to business, pretty much everyone in a first world country uses software throughout their life often for several hours a day.
Concrete applications are the highest and most complicated level (i. e. they contains millions of complicated lines of code).
Now that almost everyone is using them, "basic programming class" is entirely appropriate. As is "basic image editing" class, "basic spreadsheet use" class, "basic computer aided drafting", etc.
I think learning a little coding is like learning a little algebra. Sure you may not use it, but then again you may.
Just because you took high school Biology or Physics did not make you into a Biologist or a Physicist. It merely introduced you to the most distilled and complete parts of those fields and had no pretense of professional training or a career choice.
In a similar manner, people are pushing for the most distilled parts of Computer Science to enter school curricula. This would _not_ mean that after that course you are a programmer, or a computer scientist, or even proficient with computers.
People fail at Biology or Mathematics and have different aptitudes.
What it would mean, however, is that you are exposed to _computational thinking_ [http://www.cs.cmu.edu/~CompThink/], an understanding perhaps that somethings are computable and somethings are not, rudimentary programming skills, and a different outlook on Computers in general.
Thus, people would no longer look at computers as purely black boxes and magical, they would understand them a bit better and have a rudimentary understanding of a field which affects almost everything in their life today.
We feel Physics and Biology and Chemistry and Calculus are important, why not add Computer Science to the mix?
Do not confuse professional training with simple education.
Even that sort of crazy video with Zuckerberg and Gates literally made it out to be that programming is easy and you don't have to be smart and then implied that learning this stuff that is easy and doesn't require smarts will land you a job at this places where you can skateboard in the office and futons and so forth when they are the ones recruiting masters and phd students and asking people how to move Mt. Fuji (ok ok I know that one is gone, just throwing it out there. :) )
If you don't know how to read, you're still totally fine.
You just can't:
- Communicate your thoughts
- Learn new things
- Understand warnings about dangerous conditions
- Make more than a certain amount of money per year
- Participate meaningfully in your government
etc.
As computers further saturate our existence, the divide between those who truly understand their operation, maintenance and programming will produce scary inequalities. Software solves a lot of problems. If you know how to write it, you can solve problems faster and more efficiently than a person who does not. Debugging is a problem solving framework with tremendous application to all realms, not just tech. Those able to debug their technological lives will find life a lot cheaper than those who must pay others for the same.
Not everyone needs to be a professional software developer. But I posit that everyone can benefit from knowing how to write software to direct the actions of their computing device.
And regardless of our handwringing in one direction or another, it's going that way anyway. Lots of people are pretty decent functional programmers in their Excel spreadsheets. It'll grow organically from these sorts of tools and frameworks.
But seeing the inevitable, I'd sure love to see more people taught computer literacy – programming/scripting included – with the same mandatory nature as language or math.
I submit those technologies pervade our culture much more than programming, as well programming real computers that poeple use is only possible because of the former. Why's programming so special in this sense? Because people can whip together "yet another blog in RoR" YouTube videos but maybe electromagnetism not so easy? I dunno.
In a funny way, it's like software "engineers" are putting their hands up and saying "I give up. We don't know how to make software or user interfaces for users to use in sensible way so we give up, now we think all our users need to learn to program for us." It's kind of cute. :)
If you think a lot of people are pretty decent functional programmers in Excel spreadsheets ... I wonder what you're definition of "a lot" is, I don't think that's really true.
Given the state of pre-college education, I sort of feel like we're just saying "math is hard, let's see if we can at least teach these kids dynamic programming languages so they can at least make a simple blog engine instead." It's like we're going to throw more stuff into a system that needs to be reworked, anyway. The other side of it is like ... it's not as if kids are not learning to program as it is. That's what is strange to me; most good/great programmers I know started as kids with various socio-economic backgrounds.
Some people may feel like learning to read will make them more money, so these people shouldn't learn to read, they will be wasting their time!
Some people may want to learn to read because they remember those awesome bedtime stories, and would like to read them to themselves, these people are wasting their time too because they just want to learn to read to escape reality!
And so on...
Just because someone has one silly motivation to learn to read, doesn't mean it will be a waste of time acquiring the skill, because it has many applications beyond the original motivation.
Programming is the same thing, and since so many things rely on code, it may be just as important in the future as knowing how to read.
At the very least, learning to code is empowering, and its hard to imagine someone suffering negative consequences from learning this skill.
I take issue with the list of reasons when someone should probably look else where; for the most part I think that the deterrent of the results from attempting any of those will weed people out naturally - perhaps except for the one looking for a quick buck. The one I have the biggest problem with is: Coding because you played a computer game once and want to make the next Assassin’s Creed in a few days of work
My niece wanted to learn how to make a game - she was 9. She thinks math, and reading are "sciencey" (apparently the next generations term for nerdy). I got her set up with a simple click and drag game builder that offers adding logic in a kid friendly way. She started on it, got frustrated, asked me for help and then continued. She still works on her game almost a year and a half later. It's not her primary passion, and she won't probably won't become a programmer - but it's a great teaching aide, and the knowledge of what it takes to build something makes her appreciate the big name games she plays on her various consoles.
I believe learning to code can open more peoples eyes to the possibilities out there. Just because classes are available, or perhaps even mandatory in school, doesn't mean that everyone taking those classes will become engineers by trade.
However, learning to code, even a little bit, can make everyone just a bit more effective. Even if that coding is in Excel and VBA. Especially if that coding is in Excel and VBA.
My weapon of choice is http://www.python-excel.org/
Hell, In my engineering degree we learn C/C++ and I have coursemates who still can't craft a simple program. You can lead a horse to water and all that.
We should still give people the grounding and chance to learn in the same way we do for maths/biology/art/whatever and we'll discover a lot of hidden talent. It is not as if this will suddenly make Software Engineers ten a penny.
Learning the mindset and the perspective is the most important thing. The practical benefits are just a bonus. They do not have to be particularly extensive.
Have a good read of this linguistic relativity summary on Wikipedia (http://en.wikipedia.org/wiki/Linguistic_relativity).
The short version is: The concepts you have affect the way you think, and that affects the way you behave.
We're not trying to get everyone to build software. That's a stupid idea. Most people don't need to; sure, it's cool that you could do a macro or something if you wanted to, but it's probably irrelevant to most people. Even with modern high-level frameworks, it's a titanic effort to do anything practical with programming.
...but the point is, logical flow, breaking down ideas into units, inter-changable implementations of anything that matching a common interface, understanding how a 'source' document can be converted into an 'executable' object that makes computers do things, creating a virtual 'model' of a real situation and simulating it.... These are powerful ideas, that can't simply be grasped by telling someone about them abstractly. You have to learn the symbols and incorporate them into your own mental model.
More than that, they're tangible ideas that extend far beyond the bounds of computers and into other domains, helping people organize and breakdown problems.
The point is, you should learn to code.
...maybe you'll never actually write a real program that you'll use to do things, but that doesn't matter. By learning how to do it, you're gaining a mental richness.
Failure to appreciate that, from an educator appalls me.
When I was 13, I decided that I wanted to stop playing games and try to make my own. I was naive and thought that I could build one like WoW single handedly and I soon realized that I couldn't. However I did then come across private servers for games like World of Warcraft. From that I started to learn how to run them, I started to learn about SQL to manage the DB, then moved onto to learning LUA in order to script for my server. Even going onto looking into C++. Even then moving onto learning about web development and web servers in order to run the site for my server. That's what sparked my curiosity in coding and development at a young age.
That's why I disagree with this statement. People will learn that they can't build a game just like that, but they make start to take smaller steps and learn themselves. Don't discourage people from trying. They actually have a good mindset where they want to try build things themselves.
But... You (you, with the coding = literacy idea) are seriously overestimating the masses. I'm not sure why, might be due to some bubble effect. I don't live in SV or anything that resembles it. And my view is that even if you decide to go with the coding = literacy analogy, you will run into trouble because most people are not even literate beyond the absolute basics they can get away with. I'm speaking about professionals, and even a certain "majority" of college graduates. I'm speaking about a randomly sampled manager from a medium sized enterprise. Ask this guy to write a single page essay about something he knows about. I'm talking about writing, the kind of literacy we're talking about in the coding = literacy analogy. If you are really in a bubble, you might be surprised that only a minority of people living in the first world can write coherently beyond the length of a twitter update or an SMS. So, I would suggest to find another analogy for your public campaigning if you mean learning coding as in learning to code beyond hello world or fizzbuzz.
Another problem: where are those magical people that want to increase productivity? Most professionals I know don't even work most of the time! And they want to get away with the absolute minimum that can still achieve the maximum possible return. This is basic human behaviour. I don't endorse it, and I don't say this is everyone's standart behaviour, so no need to take offense, but I don't think anyone would argue against that what I posit here holds for the majority. Now, you want these people to learn coding to increase their productivity? Good luck. I'm sincerely all for it, and I will even help in ways that I can, excuse my cynicism.
That's like saying no one should learn to draw because they might draw better than a "real" artist. Or no one should learn woodworking because they saw a nice table once but they'll never fully understand it and they'll build shitty things. I don't get the point of this article at all.
Coding is a craft! A really powerful, accessible, incredibly-sharable craft.
Fill out this survey! http://www.surveymonkey.com/s/RCP98L5 Or write it out in the comments!
This article sounds like it was written by someone who's used to working amongst groups of mediocre to poor developers, and thinks that educating people will equate to legions of more mediocre developers.
Computers and code are a part of our lives now, and people should be educated in the basics. Just like we have biology, physics, chemistry, and shop class, a basic code class should be required for all young people.
I see coding in the 21st century how some people must have seen knowing how to read in the 18th. I wonder if there was someone saying, "Why does everyone need to know how to read? We won't all be writers and authors?"
I love the business side of things, and I don't think I'll ever be the technical co-founder, but it certainly doesn't hurt to be able to speak the same language and understand restrictions and limitations when you're trying to build a product.
But trying to compare coding with literacy or basic plumbing is ridiculous. Everyone's toilets break and can usually be fixed fairly easily, and everyone derives direct benefit from knowing how to read.
But I can't possibly imagine what benefit my mother, or sister, or cousin, would derive from knowing how to code. They don't want to do it for a living. They don't want to run web sites. Their aren't any programs they need written, that don't exist, that a single person could possibly create, that could even be remotely worth their time to learn how to write, and then write, in comparison with the other things they could be doing.
It would be about as useful to them as a law degree, or knowledge of sewage treatment engineering. Computer coding is a tremendously useful and valuable, but also tremendously esoteric skill.
And I just don't see how computer coding can somehow open your eyes to understanding technology in a way that will deepen your life somehow. If there are important lessons that people should be aware of (like the fragility of code, the dangers of hacking and cyberwarfare, etc.), those are pretty easy to teach without teaching coding itself.
But in reality, people all lie on a spectrum between pathological innumeracy on one extreme, and extreme programming skill on the other. Between the extremes, we have:
* People who can accurately add a column of figures.
* People who can operate a calculator.
* People who can efficiently use a spreadsheet application.
* People who can write an efficient spreadsheet "program" by filling cells with the right functions to solve various practical problems of increasing complexity.
* People who can write Word or Excel (or LibreOffice) macros to solve certain kinds of problems.
* People willing to write small programs in easily accessible application languages like Visual Basic and similar languages integrated into end-user applications.
* People who write computer programs for their own use.
* People who write computer programs for others to use.
The above list isn't exhaustive -- it's only means to dispel the idea that there are "programmers" and mortals, located in separate categories. This is nonsense. The faulty thinking behind this myth will become more obvious as we become more accustomed to the presence of computers in our lives, and as computers, and computer languages, mature.
Also the job prospects are probably just as strong for data analytics folks, even if the median salaries don't match software folk
¿Porque no los dos?
As for the article I don't think that the reasons cited are particularly strong.
Buggy code is not a reason not to code. Though people who often write buggy code should know their limitations.
Programming is not as unlikely to occur as rocket science or lawyering. People take physics and government as classes and in the same manner I don't see why programming should not be an equally basic subject.
The easy-programming reasons are not things that disqualify you from being a programmer. All programmers would like to do those things. It is merely the actual programmers that have gone ahead and learned things the hard way.
I don't think programming classes would create a huge influx of programmers vying for jobs as depicted any more than math classes have created a surplus of mathematicians or biology classes have left us drowning in biologists.
There are bunch of comments that essentially say 'even a little code will make you better'. It's that claim that I would disagree with and why I don't think everyone should learn to code.
My belief is you actually need to achieve a fair degree of proficiency to be able to produce useful stuff with a computer. So to the extent people are learning to code but aren't going to reach the level a proficiency that's truly useful, I'm not sure its an optimal use of time.
EDIT: I would add that I do think CS should be taught starting in KG. That way everyone would be reaching a level of proficiency that's useful.
I became interested in programming through scripting Adobe InDesign. In this type of area, it's really amazing what a little bit of programming knowledge can achieve. Our technical books now contain far fewer inaccuracies because they are tested by the computer, and index-compilation tasks that used to take days by hand are done on command.
Programming is cool, and I like that people talk about demystifying it a bit.
But that doesn't mean everybody should be a Mechanical Engineer.
Overall, I think that the minority of programmers who are afraid of the wave of poor-programmers seeping into the field shouldn't hinder the coding movement.
Take for example todo list software, there will always be many offerings because everyone has a certain way they like to go about it. If you can program then you can customize the experience for your particular case while the data (the key resource being shared in the case of teams) remains the same. It's also very similar to putting together your own macros in many programs... just taken a bit further.
In some places specialists are quite nice, but in most situations, there is nothing worse than a person who says "oh, I won't touch that, I only deal with X".
New season of American Idol (or is it X factor now?).