编程之路,,,,。。!!!!!

Please Don't Learn to Code

May 15, 2012

The whole "everyone should learn programming" meme has gotten so out of control that the mayor of New York City actually vowed to learn to code in 2012.

A noble gesture to garner the NYC tech community vote, for sure, but if the mayor of New York City actually needs to sling JavaScript code to do his job, something is deeply, horribly, terribly wrong with politics in the state of New York. Even if Mr. Bloomberg did "learn to code", with apologies to Adam Vandenberg, I expect we'd end up with this:

10 PRINT "I AM MAYOR"20 GOTO 10

Fortunately, the odds of this technological flight of fancy happening – even in jest – are zero, and for good reason: the mayor of New York City will hopefully spend his time doing the job taxpayers paid him to do instead. According to the Office of the Mayor home page, that means working on absenteeism programs for schools, public transit improvements, the 2013 city budget, and … do I really need to go on?

To those who argue programming is an essential skill we should be teaching our children, right up there with reading, writing, and arithmetic: can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder? It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job, for that matter. But understanding variables and functions, pointers and recursion? I can't see it.

Look, I love programming. I also believe programming is important … in the right context, for some people. But so are a lot of skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That'd be ridiculous, right?

The "everyone should learn to code" movement isn't just wrong because it falsely equates coding with essential life skills like reading, writing, and math. I wish. It is wrong in so many other ways.

  • It assumes that more code in the world is an inherently desirable thing. In my thirty year career as a programmer, I have found this … not to be the case. Should you learn to write code? No, I can't get behind that. You should be learning to write as little code as possible. Ideally none.

  • It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it's not. Their job is to solve problems. Don't celebrate the creation of code, celebrate the creation of solutions. We have way too many coders addicted to doing just one more line of code already.

  • It puts the method before the problem. Before you go rushing out to learn to code, figure out what your problem actually is. Do you even have a problem? Can you explain it to others in a way they can understand? Have you researched the problem, and its possible solutions, deeply? Does coding solve that problem? Are you sure?

  • It assumes that adding naive, novice, not-even-sure-they-like-this-whole-programming-thing coders to the workforce is a net positive for the world. I guess that's true if you consider that one bad programmer can easily create two new jobs a year. And for that matter, most people who already call themselves programmers can't even code, so please pardon my skepticism of the sentiment that "everyone can learn to code".

  • It implies that there's a thin, easily permeable membrane between learning to program and getting paid to program professionally. Just look at these new programmers who got offered jobs at an average salary of $79k/year after attending a mere two and a half month bootcamp! Maybe you too can teach yourself Perl in 24 hours! While I love that programming is an egalitarian field where degrees and certifications are irrelevant in the face of experience, you still gotta put in your ten thousand hours like the rest of us.

I suppose I can support learning a tiny bit about programming just so you can recognize what code is, and when code might be an appropriate way to approach a problem you have. But I can also recognize plumbing problems when I see them without any particular training in the area. The general populace (and its political leadership) could probably benefit most of all from a basic understanding of how computers, and the Internet, work. Being able to get around on the Internet is becoming a basic life skill, and we should be worried about fixing that first and most of all, before we start jumping all the way into code.

Please don't advocate learning to code just for the sake of learning how to code. Or worse, because of the fat paychecks. Instead, I humbly suggest that we spend our time learning how to …

  • Research voraciously, and understand how the things around us work at a basic level.
  • Communicate effectively with other human beings.

These are skills that extend far beyond mere coding and will help you in every aspect of your life.

[advertisement] How are you showing off your awesome? Create a Stack Overflow Careers profile and show off all of your hard work from Stack Overflow, Github, and virtually every other coding site. Who knows, you might even get recruited for a great new position!
Posted by Jeff Atwood
« This Is All Your App Is: a Collection of Tiny Details
The Eternal Lorem Ipsum »
204 Comments

Nice post, I really like this bit: "It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it's not. Their job is to solve problems."
Took me 10 years to get it.

Rad_g on May 15, 2012 2:52 AM

I think you're missing the point about the initiative.

It's not about getting more professional programmers into the job pool.

Programming itself covers a whole range of skills that have real world uses. Critical thinking, problem analysis & solving, logic, etc. These are the skills the current generation of kids seem to be missing out on in their education and part of the reason the Raspberry Pi and similar initiatives were formed.

Also, I don't think Mr Bloomberg is planning on becoming a coder. This to him is a hobby, you do other things for fun besides code eh?

Richardathome on May 15, 2012 2:56 AM

I disagree. Of course, not everybody should learn to code in order to actually write code. BUT everybody should learn to code in order to THINK in code. "Ability to code" is a mode of thought and a language in itself, just as literacy or mathematics. We don't teach people math and calculus so that they would crunch numbers, we teach them math so that they become SMARTER. Learning to code makes you smarter just as learning to read or count does. Or as learning to ride a bike makes you more agile.

_Nevermind on May 15, 2012 2:58 AM

I think you got it wrong.
The reason, why everybody should learn to code is not to have more programmers! It is only to have people know the most basic things about the technology they use everyday so that companies, advertiser and politicians can not trink them as easily as they do right now.
To drive a car, you need to attend driving lessons in which you - ideally - learn a little about the way a car (e.g. its brakes) work. Now there are no required licenses for using computers (and since computers are just everywhere there will never be such) so we need to help people help themselves to understand the technology that surrounds them.
And the information technology is not comparably to a skill like plumbing. E.g. probably real programming is comparable, but again, that is not the point why I would like people to learn to code. Even if you hire a plumber to plumb your house, you know that you will need separate pipes for fresh water and for the dirty water from your toilet. Thats common knowledge (I hope). But people don't know these basic things about computers. ("How can my download limit be exceeded, I haven't downloaded anything, I just watched streams?!").

Moritz Schlarb on May 15, 2012 2:58 AM

I sort of agree with you about the idea of learning "to code", but I do think kids should learn something about how all this technology around them works, not as a potential career path but so they are just a little less ignorant about the world.

And I completely agree with you about my job not being about writing code, it's about solving problems, with some code.

But of course the arguments against learning this sort of thing in school would apply to about 3/4ths of the school curriculum.

Learning History, Geography, French, German, Woodwork, Games, and the vast majority of the science I was taught has provided almost no *direct* benefit to me in my career or my job as a developer. And frankly the same goes for the majority of the maths I was taught. I've used trigonometry once since education.

But learning all these disciplines (however badly in some cases) has taught me a) about the world I live in and b) new ways of thinking. I think teaching kids at least the basics of how computers actually work, perhaps as a facet of other subjects, rather than just how to use them, will be important in the future.

The tech around us has achieved Clarkian levels of magic for the vast majority people, and even most of us who have a fundamental understanding of it all don't *really* understand how it all works.

NoNeeeed on May 15, 2012 3:02 AM

A few months ago I taught my mom to code. Not to be a coder, but to understand a little about the profession. I teach myself a little about plumbing, so that I know when I should and should not ask for a plumber. It also helps me be a little more critical about materials, water usage, etc.

The same goes for my mom, who now understands just a little more of what programmers do and what is possible with numbers for her classroom grades (she's an elementary school teacher).

It's an enigmatic field for most of the world, and I think this initiative is not to make coders, but to make the world more understanding of what we do.

Carlos Urreta on May 15, 2012 3:02 AM

This part hammers the point home:

It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it's not. Their job is to solve problems. Don't celebrate the creation of code, celebrate the creation of solutions. We have way too many coders addicted to doing just one more line of code already.

I am a programmer myself, and most of my non geeky friends somehow think I get turned on by code, by the process of coding. I like making solutions and making things work, and work the best way possible. Coding is just the means to that end.

Munimkazia on May 15, 2012 3:03 AM

I agree 50%. Programming is often taught as a combination of two things: algorithms and data structures. Algorithm instruction should be left to those of us who revel in them. However, in our current world, everyone needs to understand data structures... and all too few people do.

Anyone typing their e-mail address into a website needs to understand the power of cross-referencing.

Anyone using a word processor for more than a page needs to understand styles. (Actually, most programmers I meet still waste hours because they don't understand word processor styles... which is weird, because they're just like CSS.)

Any Mayor or CEO should have a broad understanding on what their organisation's data can do for them... and how much damage it could do if exposed.

So, algorithms are optional, but in the future everyone must be data literate... or their lives will be destroyed by those who are.

Elective-C on May 15, 2012 3:04 AM

Did you get this post wrong? NO!

You more than explained the pros and cons of such an aspiration. You also provided alternative initiatives and how they could benefit a larger population better and faster.

One point I'd like to add in favor of learning the basics of how computers work and how one may better use the Internet: Such achievements would also reduce the amount of INSANE protective UI and validation code. If more people simple understood what the basic elements presented to them on thousands of websites represent, we could all move forward in leaps and bounds!

Thank you again Sir CodingHorror for providing a well stated perspective to a well misunderstood problem.

Robbie on May 15, 2012 3:06 AM

They should teach kids to have their minds open and to think in as many possible ways... This will be the base of all work "done properly" regardles of it being coding, governing, teaching or just plowing the fields... But it's easier to throw bu...it statements at people then to try and fix the real problem...

Hrvoje Vulin on May 15, 2012 3:07 AM

Learn metonymy.

SteveJS on May 15, 2012 3:08 AM

I think that your example with plumbing is spot on what this movement is about. I do think that everybody should know at least a bit of plumbing. You don't have to know everything about it, but changing a pipe and unblocking a pipe are basic and common things that everybody should know.

It's the same with programming, learning some basic things on your computer:
- what is a file, how it's accessed and why it could be inaccessible at some times
- how a real life problem is seen in a computer world, what is an algorithm
- reading basic (not the language) code and being able to understand some principles such as variable assignation and conditions

Knowing that is somewhat related to knowing how your car engine works, and yes you won't have to use that knowledge every day (it's not your job), but it's an helpful skill to have.

It's the same with almost every skill, you don't need to be a professional in it, but having a basic understanding of it can always help you in life:
- Finance/Economy
- Politics/Social skills
- Manual skills (plumbing, painting, ...)
- Music
- Statistics
- Zoology
- ...

Colin Hebert on May 15, 2012 3:13 AM

Hello Jeff (I agree kind of), a slight twist on your post:

http://www.codingninja.co.uk/please-dont-learn-to-code-but-give-it-a-try/

Coding Ninja on May 15, 2012 3:15 AM

Why did I learn these subjects at school:

French, German, Chemistry, Biology, Physics, Woodwork, Metalwork - I do not need them for my day job or to survive.

The information I learnt in those subjects means I have enough knowledge to understand the basics when it comes to reading or talking about a topic, such as how electricity is generated, what happens when certain chemicals react or why is the sky blue or why are plants green.

Likewise, learning the basics of coding helps people understand how computers work and the logic behind the programs they use on a daily basis.

I am all for teaching children from an early age (7/8 years) the basics of coding using software like Scratch. It helps them think logically and to solve problems - all of which are vital for anything that life throws at them.

My 10 year old was able to build a space invaders game in scratch after a few hours of using scratch:

Video of his game - http://www.youtube.com/watch?v=i-mvz4xneRc

He might not grow up to be a software developer but it made him appreciate how computer games work as well as think how to solve problems like how to make the score increase when he blew up a spaceship.

Andrew Leonard on May 15, 2012 3:30 AM
It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job …

In fact, none of this is obvious at all, it’s just always assumed. In reality, high school literature, mathematics, and any of the other subjects are next to irrelevant for most people. The canonical education curriculum was created almost unchanged over a century ago, and even then it never had a demonstrable benefit beyond basic education.

For a great critique of school mathematics in particular, read Lockhart’s Lament: http://www.maa.org/devlin/devlin_03_08.html (long, but time worth invested).

Arguing from need won’t bring you far. The arguments brought forth by Lockhard apply, 1:1, to teaching programming. Not everybody needs to learn programming, just like most people don’t benefit from mathematics beyond basic arithmetic. But teaching them something interesting, fascinating, wonderful can never be a loss.

tl;dr Don’t fall in the canonical education trap. Our current school system operates without a good plan and almost everything learned in high school as irrelevant for most people as is programming.

Konrad on May 15, 2012 3:31 AM

I have been telling people this too.

The other part is they risk becoming people who "learnt to code" in Javascript and will therefore attempt to solve every problem and adopt the "shit's easy" attitude.

In essence if you know how to write and do math(logic), then you know how to code already, learning a specific syntax gives you nothing more. The last thing we need is more "hackers", they water down the talent pool and have already created a world where developers have to jump through the most ridiculous tests simply to get to a real interview because the HR department can't cope with all the applications from people who "learnt to code".

Mike Bloomberg should have tweeted "I am going to learn Spanish" (or Chinese if he knows fluent Spanish), that would have caused all kinds of industries to think "wow, respect".

Roridge on May 15, 2012 3:33 AM

For once, I think you are way off mark.

Should everybody know how to write a system driver or the middleware to Amazon.com? Of course not. Should they know how to write a small macro or script to massage their data when they need it? Absolutely.

This can benefit basically everyone with an office job, from secretary to mayor. Remember also that for many people simply knowing how to use the functions in Excel is also "knowing how to code".

Perhaps learning javascript isn't the fastest shortcut, but anything that demystifies the whole process and teaches people "hey, it really isn't rocket science", will help out in the end.

WimD on May 15, 2012 3:35 AM

I have to agree that you're missing the point.

Using your plumbing example: learning about plumbing can be handy so that you can know how to deal with plumbers. You can appreciate what they do and you can even have a general idea of how to manage them and if you're getting screwed over by them.

I find that managers manage better when they have SOME technical background. I don't want them to be programmers, just to have some experience.

You're right that they shouldn't think that learning to program for a month (or even a year) makes them good, but they should get a taste (and know that they're only getting a taste)

Cheerfulstoic on May 15, 2012 3:41 AM

Hi Jeff,

This is a good post, but I am not 100% in agreement. I think the reason people seem to pick sides in this argument is that they have different views on what code is.

For example, would you equate Assembly with Html? How about C / C++ with SQL?

The people that are pro teaching to code at school are trying to get the next generation to understand the basics of our world so that they are not mystified by the work of others.

For example, I would prefer if people learnt how a central heating system works on a broad level so that they don't end up calling a contractor in just to relight the pilot light if it goes out. (I have see this happen personally and it pains me to see this ignorance) In some cases I too have been just as ignorant of such things where I have left it to professionals to do something for me which I should really have learnt to do it myself.

Coming back to the point, the developer community generally thinks of coding as in Java or C, etc. which even I would not recommend be taught in schools. However learning to code HTML / CSS can be bring about a new approach to learning which is more experimental than the traditional methods used for other subjects like history or English literature.

I think I have a balanced view, and guess what I attribute that to. I am a software engineer. I am not a coder, I am an engineer. The difference I feel is that engineers are problem solvers, builder and makers. Which is a whole lot more than simply coding. Coding is just a means I choose to solve the problems I face.

Just my 2 pence (I live in the UK)

Mitul Amin on May 15, 2012 3:44 AM

I think in this instance, Jeff, you're wrong. A mayor who knew how to code would be a great improvement. Perhaps he doesn't need to learn how to code, but ideally he would know about data, standards, algorithms, security, privacy... a lot of the job of a mayor is dealing with bureacracy; if that mayor could tell when there was a technical solution to a problem that avoided the bureaucratic one, maybe he could spend less on the bureaucracy.

Your wider point that not everyone needs to learn to code is true, with the same caveats; if you don't know when code can solve a problem, how will you know when code can solve a problem? I've helped many people in the past with macros that saved them hours of repetitive work - they just didn't know it could be done.

As others have pointed out, most people don't use much of their school education, but it serves the important purpose of telling you what kind of thing is out there, should you need to know it. Learning history tells you something of the politics of a situation, and this is a similar arena needing context.

TLDR: maybe not coding as such, but everyone would do well to gain awareness of code and its capacity to solve problems at scale. Frankly the simplest way to learn that is to learn to code a bit.

Philip Howard on May 15, 2012 3:49 AM

I understand your point, and as usual, I think you make it well, but I don't think "learning to code" is the same thing as "become a coder / developer / whatever".

During our early years in school, we learn civics and health, not to become lawyers and doctors, but to help us to become better, more informed, healthier members of society. Learning is a means of gaining a better understanding the world and hopefully to better interact within it.

And now that a good portion of the world is being monitored, managed, controlled, simulated, and basically run by computers, it's probably a good idea to gather a basic understanding of how humans make computers do those things. Not for the job, or even the hobby for that matter - just for the ability to derive logical conclusions about why their world works the way it does.

Enobrev on May 15, 2012 3:50 AM

Programming isn't a highly specialized and context-specific skill like plumbing. Programming is the fundamental knowledge of what kinds of problems one can solve with computers, and how to go about solving those problems. Computers are literally the most powerful problem-solving tools humanity has ever created, and we all benefit when the knowledge of how to apply those tools is more widely distributed in our society.

www.google.com/accounts/o8/id?id=AItOawngRJZP5SeRNR0zB-g0wNGDUpSpyFQCk1w on May 15, 2012 4:12 AM

Comparing programming to plumbing is like comparing it to painting or cooking or anything else that has a major physical component. Programming is a mental skill that doesn't require any specific physical traits. Many physical disabilities would prevent someone from being able to fit pipes together or put paint on canvas or mix dry ingredients.

"Programming" is a form of writing (symbol manipulation), like poetry or prose or logic or mathematics. It's electron manipulation (both in brain and computer), and comparing it to atom manipulation is dishonest. Everyone could benefit from increased literacy.

Max Terry on May 15, 2012 4:13 AM

While I'm a big drum banger for the 'learn to code movement', I agree code isn't the point. But it's the meme that's got momentum and it's close enough.

Like many other commenters note, the point is to a) understand how the digital world around us works and b) to be able to make things on the web, etc. that involve more than just filling in a form. These skills will be essential for any critical, creative person in the next 100 years. And, learning a little code, even if it's just using HTML remixing a web page (see: hackasaurus.org) helps move in this direction.

Mark Surman on May 15, 2012 4:21 AM

I am really surprised and saddened to see this post coming from this blog. It presupposes that programming is some kind of elite activity for proper comp-sci graduates in white lab coats devising beautiful and pure code in sterile clean rooms.... well, perhaps that doesn't quite fairly represent your argument, I confess! But programming can both be a professional practise and a hobby, and I think it skirts close to snobbery to discourage somebody merely on the grounds that it isn't their day job. Who the hell cares if their code is useful? And who even cares if it's neat, efficient, or beautiful? You don't have to use it and you don't have to read it. We all started off as rank amateurs writing "10 PRINT "..."' -- and you know what, it was pretty exciting at the time. Why should I want to deny that honest pleasure to someone else?

Iian Neill on May 15, 2012 4:41 AM

In general, I agree with you. I'm a pretty good problem solver but I've never been a great coder. It hasn't hindered me in most projects.

There were already a few comments along these lines, but I think sometimes people need to have a "Coding 101" course that introduces them to what's possible. Sometimes, people are so ignorant of code that they don't even know what to ask for. They end up "solving" problems with crazy, manual processes instead of simple, automated ones. (I expect that this issue will start to fade over the next 40 years as the "digital natives" get established in the workforce.)

I guess I fall into a camp of teaching more people coding concepts, but not necessarily teaching them to be coders.

Benjamindbloom on May 15, 2012 4:43 AM

The owner of the company that I work for has been working his way through some of the exercises, and initially asked me questions as he got stuck. He ended up basically saying "I appreciate that I knew enough to hire people that know how to do this well."

He's not doing it to learn how to program, I believe he's doing it because he feels like he's missing out on some of the enthusiasm (or hatred) the rest of us share when it comes to the technologies we work with.

It sounds like what you fear is an army of Dunning-Kruger compromised monkeys invading the industry, but don't they need to get hired first? I agree with evangelizing solid hiring practices, as you've been doing, but I don't see anything wrong with people trying something new, if only for the experience of doing so.

Finally, plumbing is nothing like programming, though it is a metaphor used by many code maintainers. I have understood water, hoses, valves and gravity from a very young age with no plumbing background because the concept is material and intuitive.

Most people can't understand the concept of a doubly linked list with no programming background just by looking at an implementation of one.

I don't disagree with your post entirely, I fully agree that more programmers should be looking more at the problem they're trying to solve.

Is the rest really an issue?

Tinkertim on May 15, 2012 4:46 AM

I can see why posts like this are important; whenever there's a risk of a bandwagon forming it is important that there are people out there who put the brakes on, if only to make sure the bandwagon is at least going in the right direction.

Of course not everyone should become a JavaScript ninja, a C hacker or a Lisp wizard. I think you nailed it in your third bullet point "Before you go rushing out to learn to code, figure out what your problem actually is." After the first few hours of "hello world" and working out variables and functions you'll make a program that actually does something simple but useful - you find a problem to solve and coding helps you look at it in an analytical way.

Many would call that analytical way "common sense" but it's an oft-touted issue that common sense isn't something that can be taught. With that in mind, coding is something that can be taught, and if it helps develop analytical skills then it's as essential as maths and English. Just like current IT teaching varies between useful (learn to learn how to use a system) and pointless (here's how you make a pie chart in Powerpoint - wtf?) so could coding lessons. If they skirt round problem solving and try and innately familiarise everyone with pointers and polymorphism then it's being done wrong, but formalising a problem, approaching it step by step (TDD anyone?) and restructuring as your attempted solution grants better understanding of the original domain is what should be advocated.

M1ke on May 15, 2012 4:52 AM

What I don't understand most of all is your conclusion. No denying that research and communication are important ... but is that what drew people to programming in the first place? The beauty of "10 PRINT ..." -- at least in the days when BASIC was in ROM and not on CD-ROM -- is that it gave kids (and adults) power over the machine and all its spells. If the point was just to see your name printed infinitely on the screen, then loading some pre-written programme from disc would serve the same purpose. The point was that by writing code yourself you could control the machine. Think about that. At some point you might have moved onto assembler, or Pascal, or C, whatever, but that thrill of conjuring up characters, graphics, and sound can be a completely valid end in itself -- even if that's not where you end up twenty years later.

You say that the real point of coding is to create solutions -- but to prioritise that over coding itself is like saying that the point of painting or film-making is to improve mental health. Maybe those are side-effects, maybe they are even goals and passions, but if a painting or a film isn't made for the joy of working in the medium, then it is a travesty. I am not saying that coding can't be important to mankind, in what it enables, but it should also be an end in itself, an exercise of the mind.

Iian Neill on May 15, 2012 4:58 AM

"Please don't advocate learning to code just for the sake of learning how to code."

What? I should only learn to code if I have a legitimate reason to? Nonsense. Never try to disuade somebody from learning something because they want to. So much of what we know about the world today, we know because somebody was curious.

Now "because of the fat paychecks" I agree with. Both because the world doesn't need any more half baked professional programmers, and because the paychecks are rarely that fat!

Steverumsby on May 15, 2012 5:01 AM

Actually I think in the future everyone will be a programmer, in the sense of someone who can instruct a computer what to do. Departments with better programming skills will beat the hell out of departments that depend on IT to solve their problems. It's just a question of time before people are comfortable enough with programming languages.

Just like it went with cars. For many years after the invention of the automobile, driver was a profession. Now, everybody can drive.

Andomar on May 15, 2012 5:03 AM

I totally agree. This is pretty much the same blog post I wrote a few months ago (same title even) when Code Year was getting so much press. The feedback I got was the programming is going to be a blue collar job in the next 30 years.

http://accidentalhacker.com/post/16116466587/please-dont-learn-to-code

The percentage of the population that can engineer great software is so minuscule, and that number won’t change dramatically. HyperCard couldn’t change it; Visual Basic couldn’t change it; and no amount of instructional videos and interactive code challenges can change it. We might be able to nudge the number upward by making things easier, but there is a hard limit.

At it's core, programming and the problems we solve as programmers is *hard* and the general population isn't very good at doing hard things.

http://accidentalhacker.com/post/16116466587/please-dont-learn-to-code

Rob Sobers on May 15, 2012 5:05 AM

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. -Robert A. Heinlein

I think everybody should have a very rounded skillset. Software is my profession. As such, I expect a very high level of professionalism from my coworkers and myself. I would expect very little from a hobbyist.

However, I do think a lot of people could benefit from knowing the bases of programming.

I can go and take cooking classes, photography lessons or mechanics courses.

That does not make me a cook, a photograph or mechanics. I sure as hell would now apply for any of these jobs and would expect professionals to be insulted if I tried.

However, acquiring knowledge from different field allows me to be a more well-rounded person.

Above all, it make me feel like a more autonomous person. I can cook a decent meal for friends and family, take a few decent pictures on vacation and maybe even handle a few basic car repairs.

I do agree with most of what you pointed out about problem solving. More software is not the solution itself. But that is part of the learning journey a hobbyist will figure out along the way if he/she perseveres just like we did.

Nicholas Lemay on May 15, 2012 5:12 AM

I agree with the basic sentiment. There is no reason to learn to code just for the sake of learning to code.

However, if your desire is to do something that can be achieved by learning to write some basic code, I can see a lot of merit in essentially learning enough to be dangerous. See: http://webootstrap.org/post/23037566816/bootstrapping-might-be-impossible-for-non-programmers

twitter.com/scottw on May 15, 2012 5:14 AM

But having the ability to code is like a super-power when your main job isn't being a programmer.

http://davebeer.com/posts/just-knowing-how-to-program-is-helpful/

I don't think we need more programmers either. But being able to program a little is like having yet another tool in your arsenal, which will make you more effective in almost any career.

Of course it'll mean even more VBA in Excel spreadsheets, so I'm not sure if that's a net positive or negative...

David Beer on May 15, 2012 5:22 AM

I'm kicking myself for not saving the link somehow, but I've read at least one article on how programming is a very good way for students to see the practical side of natural sciences (where physics and maths often fail). Pupils who have been taught programming had less problems with other related subjects later in their schooling than those who haven't been according to a study. And the effect was ever stronger with girls which is very important considering the gender gap in natural sciences. The only catch was that programming has to be taught early enough - I think the article mentioned 6th grade - or the positive effect is almost nullified.

While this has little to do with the mayor of NYC, maybe everybody who is in school should learn to code..

Gregopet on May 15, 2012 5:23 AM

Please Jeff have a look to this talk "Program or be programmed" http://www.youtube.com/watch?v=imV3pPIUy1k

José F. Romaniello on May 15, 2012 5:34 AM

Programming is the new math.

I'm really not sure how not teaching something prevents people from being bad at it. People don't go around worrying about teaching math to prevent all the inevitable bad mathematicians out there. Or not teaching spelling to prevent more people who cant spell?

Ctrlshiftbryan on May 15, 2012 5:38 AM

The more real-world infrastructure gets replaced with software, the more relevant coding skills are to everything we do. This trend is only going to accelerate. In this way, coding is a special skill compared to others because it is so universally applicable.

Carl Youngblood on May 15, 2012 5:42 AM

Coding is just another way of making things.

We don't have time to learn how to make everything we use.

Personally, I'd rather knit -
Its social and relaxing. You learn arithmetic and concentration. You solve puzzles or set them for other people. At the end you understand how clothes are made and have something to keep you warm.

Coding has similar claims made for its benefits, but it seems pretty dull in comparison. Fine for a job, but no way to spend your spare time - unless you particularly like maintaining websites.

Romneymarsh on May 15, 2012 5:43 AM

I fully disagree with your post and I agree with the "everyone should learn to code" idea.

It do not think that more code in the world is desirable, neither that coding is the goal, neither do I put the method before the problem.
In fact I disagree with all you said.

The fact is that people spend more and more time in front of computer.

Some of their tasks can be automated. Many people write small Excell macros. This is a first step in programming. Learning how to program in Excell is very rewarding.

Some other tasks could benefit from a tool that do not exist "on the shell".

For example, at my work, we have some analyst guy who perform statistics on flight trajectories. He was lacking smart visualisation of the input data. He has learned how to generate a kmz file for google earth and has developped his little conversion program. He has probably spend 10 times more than a real developper to program it, but taking into account all the time needed to ask a developper to do it, the time loss is very small. And now, he can easily maintain and improve his program when the data change.

"everyone should learn to code" does not mean that everyone must become a fulltime developper. It is more similar to cooking: "everybody should be able to cook his own food". This does not mean that we should never go to the restaurant or that we should become as good as a chef. This means that we have the freedom to eat without going to the restaurant and without buying junk food.

"everyone should learn to code" is the same as everybody should learn how to change a light bulb, how to use the washing machine, how to iron your clothes, how to cook, ...

Even if none of these things is your job, you generally knows a minimum to be independant. It is the same for coding.

BOC on May 15, 2012 5:44 AM

Not a very popular post it seems. But not many plumbers on here defending their right to learn to code.

Philip Mander on May 15, 2012 5:48 AM

Code? Of course not.

I don't have to be able to code to communicate what I want or need. I can examine the results of what someone else codes for me a tell them whether it is 'good' or not if I can think rationally and communicate competently.

In my experience we would all be far better off by developing four fundamental skills
1) Think logically, rationally - the ability to assemble alternative conclusions from the pieces of information presented
2) Communicate competently - the ability to transfer understanding of the information or idea
3) Listen competently - the ability to extract useful information delivered verbally
4) Read critically - the ability to extract useful information delivered in written form

If only we could all do these four things......

Floydparks on May 15, 2012 6:02 AM

Ultimately, we need to arm ourselves to fight Skynet!

Spicemonki on May 15, 2012 6:08 AM

I don't think that anyone who says "everyone should learn to code" actually thinks that everyone should apply computer programming in his daily life and jobs. I always thought that the spirit behind this movement was to encourage the ability of dissecting and solving complex problems.

Once again, knowing how to code does not imply "more code in the world". It's a ability that one might not exercise everyday, however going through it at least once in your life contributes to your intellectual development. My mother was a teacher during the 80's and she taught LOGO to her students because of this reason. In those times there was a strong line of thought that believed it was very valuable for children to learn how to solve problems by enumerating the required steps and making decisions based on data. Unfortunately I can't provide you the literature (it was almost 30 years ago!)

You seem to have a very utilitarian point of view. It gives me the impression that you think that if something does not directly contributes to your work then it is useless. I agree with you, however, in that people should not think that they will learn software development from scratch in two weeks and then they'll be getting fat paychecks. The "fat paycheck think", by the way, it's far from being something real in my country, however we still have programmers because many of us actually enjoy doing it.

Leandrinux on May 15, 2012 6:09 AM

The logic is that a lot of work consists of one-off data processing. The sort of stuff that Linux users tend to use awk, grep, sed, and miscellaneous bash one-liners for. Modern office software is generally fairly good at automating common, basic tasks, but anything more specific needs a more technical approach. Just knowing how to use regular expressions would make a lot of tasks much easier.

So it's not so much "everyone should be able to program at a professional level" as "everyone should be able to perform basic tasks on Linux", though without the OS-specific focus.

R on May 15, 2012 6:19 AM

Not picking sides in the main fight here, just wanted to say though: real plumbing is hard work both physically and mentally, we should not be ashamed to compare it to programming.

Joelarson4 on May 15, 2012 6:23 AM

I think you make a fair point about what has been a pretty over-hyped initiative.

As a non-coder, I've found it exciting to give some of this stuff a go and tinker around with a bit of javascript and html. I wanted to learn rails and a few people recommended good resources for me to use but I pretty much got stuck at gem install. Some ground knowledge is usually assumed by even the most basic explanations. Even at the humble age of 27, I'm coming to accept that maybe I'm just not willing to invest the time required to learn to code properly and I'm happy to leave it to the experts.

I want to learn to code for two reasons. One of these, which you and other commenters have dwelled on, is so that I can understand how it all fits together. I work with developers so I have a better understanding than many but I still feel I don't know some of the basics. I want to be informed about the choices we make to solve certain problems. I'd also like to know when I should defer to people with more knowledge, and when they might be bullshitting me.

The second reason I want to learn to code is so that I can create prototypes and hack things together to test out ideas, without having to rely on other people.

I've found it difficult to find good resources for picking up this high level knowledge. It seems like often the only way in is just to get stuck in and start learning how to do it from scratch, however long that may take.

So, since you recognise that some knowledge and understanding of what code is and what it means to the world is important, what resources would you recommend for acquiring it?

Ohrworm on May 15, 2012 6:33 AM

I'm doing the CodeYear thing, but I don't want to work as programmer.

I want to work *with* programmers, though, and I already do. I work for a publisher, which these days means that everything is online. I run a community site there, and I got that job *because* I already knew "about the internet". I'm not at all a programmer. I write words rather than code. But to my coworkers, I'm the "tech person", because I know how to talk to the freelance coders that we do hire, and what goes where on the site, and why we can change some things but not others. I'm not afraid to look at source code.

In my previous job, I was a biochemist, working with lots of people who had *never* taken a programming course in their life. I took C in undergrad, and a super-basic intro to Bioinformatics in grad school, and those meager credentials alone were enough to be asked to help with a project where biochemists (in the lab) and bioinformaticians (at the computer) had to collaborate.

Most non-programmers avoid even thinking about coding, and have no grasp at all of what you can ask a programmer to do.

If anything, it's *my* kind of job(s) that CodeYear participants are after, not programming jobs. They're not going to be coders, but they'll understand coding, and they'll be able to work on projects where programmers are a relatively new, or even temporary, addition to the workforce. They'll be able to think of things in a new way, and actually *provide* opportunities for coders, by spotting things in their workplace that could be improved through programming. They won't be able to do it themselves, but they can hire someone.

To my understanding, that's been the goal of projects like CodeYear: To give non-programmers an insight into things that *can* be done, and to better understand how things work. In other words, to explain how a toilet works, without providing a complete plumber certification course.

Easternblot on May 15, 2012 6:39 AM

So, to summarize, I agree with this sentence: "I suppose I can support learning a tiny bit about programming just so you can recognize what code is, and when code might be an appropriate way to approach a problem you have."

...I just don't think you realize that there are so many well-educated people in non-programming fields who *can't* judge when code is an appropriate way to approach a problem. It's really not as obvious to many people, and even a tiny bit of exposure helps!

Easternblot on May 15, 2012 6:44 AM

Jeannette Wing put this "whats behind 'coding' and why should we teach it"-topic nicely in her article "Computational thinking" over here: http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf

Thorsten on May 15, 2012 6:44 AM

I've said for years now that programmers, like many other occupations, are problem solvers. We just tend to solve problems with code.

We're not going to solve world hunger that way. But I'd be willing to bet any veteran developer at least has an idea or two how to attack that problem as well.

and if you haven't ever solved a problem by not writing any code, you're probably not a very good developer either ;)

Jeffreyhamby on May 15, 2012 6:44 AM

I have only one word to justify for everyone to learn to code: "Analytical Thinking"
Ok, that's two words! You see? You're already learning...

Cvedovini on May 15, 2012 6:46 AM

How about just learning to "Think like a coder". The mayor of NYC's time probably isn't best spent hacking away on some Ruby code at 3AM. But, thinking like a coder ( e.g. What parts of my job can be automated, what checks do I need to have to make sure one of my decisions doesn't have unintended consequences, or better yet.. assume that unattended consequences are going to happen and try to build policy to contain any bad stuff ).

Dan_relihan on May 15, 2012 6:49 AM

I worked for Bloomberg LP years ago, and had direct contact with Mike Bloomberg on multiple projects. I once took over his desktop with him watching as I installed a demo IM app we created. He sat at my desk while my team demoed multiple new initiatives, and he even poked his head in one time when we were talking to a new DB vendor, and he even asked some performance/scalability questions.

He may be mayor of NYC, but he did start a really big tech company, and for the first few years, he knew every single employee, including the developers, and he followed every single tech initiative very closely. He was always interested in bleeding edge technology. I definitely had my differences with him on multiple occasions, and my opinion of him as NYC mayor (as a resident of NYC) is mixed, but the one thing I can say is that he is tech savvy.

If there is one mayor in the US who doesn't have a CS degree but could learn to program, it would be him.

I hate to say it, but you picked the wrong person to be poster child for a non-techy getting too close to the tech fire.

Kiddushguy on May 15, 2012 6:51 AM

We're all aware that Bloomberg is a billionaire who made his fortune by becoming the #1 financial information provider in the world, provided through technology (terminals, APIs, etc.). Just sayin...

casperOne on May 15, 2012 6:53 AM

Personally I think the everyone would benefit from knowing a little bit of plumbing.

Seriously. Learn about how a toilet works. You use one every day! http://home.howstuffworks.com/toilet.htm

AwesomeRobot on May 15, 2012 6:57 AM

We should be teaching the basics of logical thinking before diving too deeply into creating a website.

After all, we've been following this pattern pretty well, as the vast majority of Computer Science degrees teach logical thinking, maths, proofs, all kinds of things that aren't actually code. If that wasn't recognised as a valuable prerequisite, we would have given up on the CS degree by now.

Please see my blog post here, which discusses whether sites like Codecademy and Stack Overflow are undermining the real craft of coding: http://www.codingkiwi.com/1/post/2012/05/are-we-teaching-people-what-code-is-but-not-how-to-use-it.html

Coding Kiwi on May 15, 2012 7:21 AM

Interesting points in the article, most of it makes sense. OTOH, what if we think of computer languages like human languages, in many high schools in the US, students are required to take something like two years of foreign language instruction, what if we treated computer languages like that?

Much of what you're saying applies to learning a foreign language, how many people actually make use of their year or two of high school French? But at the same time, if you took Spanish in the US, you might've had opportunity and motive to continue with it; you might've found the need to speak Spanish, even if that need wasn't there at first.
I think this analogizes to computer languages too, you'd need to have a basic background in order to be ready /if/ the need arises. If you lived in India and took Russian, or in the US and took Latin, that need might never arise, but some in the former will happen to take English and some in the latter will happen to take Spanish, and they're better off and their society too is probably better off because they did.

Of course, realistically, it would probably be more beneficial for every computer class to be swapped with Spanish anyway!


Flipping things around a bit, many high schools offer classes on things like "MS Excel" and the like. What if those classes were replaced with "Python" or "C++" or something? Why use excel to manage tables when programming can do that?

Schenck on May 15, 2012 7:21 AM

Bloomberg might not have been the best example to prove your point. He has a degree in Electrical Engineering from Johns Hopkins and when he started his company he was spending weekends soldering together terminals to sell.

Bob Devereux on May 15, 2012 7:25 AM

While I agree that Mr. Bloomberg shouldn't be spending all his working hours coding, I strongly disagree that he shouldn't learn to code a little. I don't think the other benefits of coding (such as critical thinking) that others are mentioning are important in this case. Young learning might pickup critical thinking from learning to code but you've already established your thought process by the time you've becoming the mayor of one of the largest cities in the world.

All politicians should learn to basic coding (and computer) concepts (what is an API, what are different languages, compiled vs interpreted). If they don't, how can they be expected to pass legislation that governs MY profession? Just look at the guys like Ted "tube" Stevens. Do you really want your activities as a programmer to be governed by people that think computers are magic boxes? Programming is just to intangible, you can't expect someone to have a clue about it without direct experience. If someone can't explain the difference between the Internet and Internet Explorer should they be ruling on Net Neutrality?

Matthieu Heimer on May 15, 2012 7:26 AM

I'm a strong believer that learning a new language makes you better at the others, but I'm not a "learn to code" advocate, a foreign language or even music are equally beneficial.

Nataliav on May 15, 2012 7:31 AM

Jeff, I fully disagree with your post. It assumes that 'learning to code' implies applying coding skills to a career. What if he wants to have a new hobby or broaden his thinking?

One should never broadly say 'don't learn to X' to some useful activity. This is the same kind of thinking that brings on fear, dark ages, and lack of innovation.

BOC's cooking analogy nailed what I'm saying.

Andrew on May 15, 2012 7:37 AM

Coding -inherently- creates more problems than it solves, and I think you end up acknowledging this on your own post. Computers were created because they are amazing, even though the world they make possible is messier (in an amazing way). This picture of the programmer as a "professional problem-solver" is a facade you (we) need to hold on to, living in a world where people have no idea of what a computer really is, even after witnessing almost 70 years of programming, because they never had the chance to learn how to code.

Aslemos on May 15, 2012 7:39 AM

Aside from the point that's been made here ad nauseum about learning to think or how to solve problems (all things I'm sure the exceedingly successful Mayor has learned by now through other means) there's another fallacy in your argument:

That the man must spend every waking minute of his life devoted to his job with no room for entertainment or personal fulfillment. Perhaps he just thinks it's cool.

Christian Romney on May 15, 2012 7:47 AM

I totally agree! It doesn't make sense for EVERYONE to learn code. BUT it does make sense for professionals that work with programmers to know the more than just the basics. That way they don't get lost in the conversation.

SheenaDangers on May 15, 2012 7:57 AM

I wouldn't want my mayor spending huge amounts of time trying to solve the n-queens problem in Java. Just like I wouldn't want the mayor ignoring other duties to write a critique of the collected works of Frederick Douglas. But I would want the mayor to at least have heard of Frederick Douglas, to be able to have an informed conversation on the matter. Same with Java.

Gcbenison.wordpress.com on May 15, 2012 8:12 AM

Actually I _have_ encouraged others to learn programming, atleast a little bit. I've found that knowing a bit of JS/jQuery can go a long way if you know how to use Chrome Inspector--I've managed to automate a lot of stuff. Ditto with Excel+VB.

While it doesn't make sense to "learn it just since you can" or whatever, people who have the capability should certainly learn enough to make life easy.

That being said, I do agree with most of the points on this post, just not with the view that non-programmers learning to code is always bad.

Manish Goregaokar on May 15, 2012 8:13 AM

learning to code != becoming a better analytical thinker

And, whatever the skills that coding conveys, there are probably far easier and more efficient ways to attain them. It's far more important if people spend their time learning general computer literacy.

Also, having people learn how to code just so they can deal with us professional coders better -- while personally compelling -- isn't a good enough reason either and I question whether toying with some JavaScript really provides enough insight in what we do for a living.

Brad Rembielak on May 15, 2012 8:16 AM

In school I learned how to work with wood, metal, how to cook and sow.
Just because I was exposed to these skills does not mean that they would be a life defining talents.
later, in my first appartment I learned electrucity and plumbing. Does this help me in my job? heck no! Does it help me as a PERSON, HELL YES!

Should everyone be a programmer? Of coarse not! Should everyone get a glimpse of what it is? Perhaps a little fortran or pascal? For sure. If nothing else, just to aquire a sense of LOGIC which is very rare today.

Coding is plumbing, both make sure that all that is supposed to flow... flows.

So yes, woodshop, metal, cooking, sewing, coding, plumbing.. should all be mandatory from grade 8 to 10.

Miturbe72 on May 15, 2012 8:23 AM

So we complain about politicians passing stupid technology laws, and as soon as a politicians says he wants to learn something about the tech, a prominent programmer tells him "don't bother?"

If you don't know how to code, it probably seems perfectly reasonable to have a computer that you can't program yourself, with everything locked down. If that's the future you want, then sure, tell politicians to leave the coding to the professionals.

If you can code, you start to see the computer as a machine that can do anything you want, instead of just the things some app store makes available to you. That freedom is addictive. You start demanding it.

Cory Doctorow's fears about the end of general computing will come true unless lots of people get addicted to that freedom. http://boingboing.net/2012/01/10/lockdown.html

Dennis Peterson on May 15, 2012 8:24 AM

I agree with everything you said but I think you got worked up over nothing.

Bloomberg is a businessman not a coder. This was obvious twitter spam. I hear he makes $14.99 per tweet.

HTNMMO on May 15, 2012 8:27 AM

I have to agree with Kiddushguy.. regardless of your belief of the old person/politician stereotype of being technically clueless, Mr. Bloomberg knows his stuff, not just heading a tech startup but being hands on with development.

Though I can't disagree with you trying to thwart others trying to learn code--that would just dilute our value as being knowledgeable developers, right? So I guess I'll get mad too. Rabble rabble rabble!

Erikjohnnn on May 15, 2012 8:40 AM

Comparing plumbing to programming is a terrible analogy. 10-20 years out from now, what job market will exponentially grow and have a lack of people to fill the positions? (My bet is on programmers.)

AndroidsNsheep on May 15, 2012 8:45 AM

It's funny how quickly people point out the benefits of programming for kids. I wonder how many of these people even have kids?

I have kids, two of em. Yes, I believe math and science is incredibly important. But I also believe in art and music as well. I would rather my kids appreciate a good music and art before learning to code java. If my kids are interested in sitting in front of a computer screen on hours on end to make the next whatever - that's fantastic! But I don't really see a logic in saying that it's a great foundation for science/math.

Petachon on May 15, 2012 9:03 AM

Great post.

For the posters who say everyone should learn to code so they know how the technology works around them, I'd say: there are many other ways, including a classical liberal arts education, to learn skills like problem solving, logic, and critical thinking. Well-designed software shouldn't require a user to "know code a little bit" to understand it, it should help the user solve a problem. If a user had to know code to know what's going on, there is something wrong with the software.

Monkeydeus on May 15, 2012 9:03 AM

Your worst article ever. Where did he say he wants to learn coding for his job - why can't someone learn to code (or play guitar, or plumbing, or anything else) just because they want to learn?

Blue Raja on May 15, 2012 9:14 AM

My favorite part of this was the ad at the bottom:

 

[advertisement] How are you showing off your awesome? Create a Stack Overflow Careers profile and show off all of your hard work from Stack Overflow, Github, and virtually every other coding site. Who knows, you might even get recruited for a great new position!

Melindabyerley on May 15, 2012 9:28 AM

I find it funny that everyone is up in arms about the plumbing analogy arguing that not everyone needs to learn about plumbing. I had the exact opposite reaction, EVERYONE should learn the basics of plumbing. Many of us own our own homes, borrowing hundreds of thousands of dollars to do so, yet we don't know anything about the internals of the house we bought. That's just nuts.

Jonathan Beerhalter on May 15, 2012 9:38 AM

Sorry man, but you couldn't be more wrong. Learning is never a bad thing and your example of NY's mayor is a perfect example of that. Imagine if every politician spent time learning rather than playing golf.

I'm not going to chew your head off here. It's been done enough here: http://www.reddit.com/r/coding/comments/tnzwj/please_dont_learn_to_code/

CKnowles on May 15, 2012 10:04 AM

I disagree. The more scientists, for example, that learned how to code well, the less old obfuscated and obsolete fortran code would need to be maintained by the physics community, for example. I don't know about everyone but certainly people who work with numerical or symbolic data for a living (to wit: scientists, economists, and mathematicians) should know how to write code and good code at that.

Also, presumably Mayor Bloomberg is allowed to have a personal life and free time as much as people in other jobs.

Ilya Nepomnyashchiy on May 15, 2012 10:16 AM

Yeah, Jeff, sorry, I gotta agree with everyone who disagreed with you. This is a shockingly short-sighted blog. Did you write this just to get a bunch of views?

Taking your approach, why would students be taught history? Handwriting? Mathematics beyond what you'd need to balance your checkbook? Should people not learn science if they aren't going to be scientists?

Learning for the sake of learning is pretty damn virtuous. Learning only what you need to learn in order to get through life... Well, that's pretty horrible.

My 8yr old son asked me to teach him HTML, because he wanted to understand how all that stuff gets into Google Chrome. Because he wants to understand things. Just like he asked me how radio works, and how the internet works. Should I not explain it to him because he isn't going to directly leverage this in his life?

Yikes. Geez, every time I go back to look for more examples of how absolutely inane your arguments are, I find more things even more inane than the last.

BarkGolgafrinch on May 15, 2012 10:16 AM

As people, we are tool using animals. The computer is the ultimate tool. *That* is what people should learn. A computer engineering education means learning about logic gates, the von Neumann architecture, CPU design, assembly programming, a low level language, operating system construction, compiler construction -- and then a computer becomes useful to you as a tool you can fully control.


I will grant that an extremely high functioning individual like Bloomberg can probably deduce a lot about how computers work through experience and running a technology company, but half his middle management probably couldn't get a clue in a field full of horny clues in the middle of clue mating season -- they'll have to learn the hard way, and if learning Ruby in X weeks gets them closer, then I can hardly disapprove.

_jhlb on May 15, 2012 10:35 AM

If this article is satire (a "Modest Proposal" about the year of code?), it is genius. Otherwise, it smacks of trolling and makes me sad.

1. You discourage the mayor of New York from bothering with any knowledge over a basic High School education (but really, does he even need to know Geometry? (Never mind that politicians are the ones making the rules controling the interweb tubes)

2. Nobody should know how their plumbing works? A wrench is just a tool (like programming)... not everyone needs to know how to turn one. Being able to fix your own leaky faucet is a waste of time and cannot possible help you in other areas

3. Laymen don't need to know about programming... they just need to understand how computers work? You know, they should have a good feel for how a computer "thinks", and why it only does exactly what you tell it.

Nevermind that government is run on Excel spreadsheets... which are filled with formulas and function calls and maybe a little VB (pointed out by WimD and others)

Nevermind the assumption that everyone who reads Learn Java in 24 hours will start looking for a dev job (covered well in other comments)

Djanke on May 15, 2012 10:45 AM

Sorry, but Jeff got this right in his post. If you are a programmer then you already have lost perspective about what programming offers to a person who is not or will never really be a programmer. The best schools cannot teach this stuff to a very high percentage of people! Don't hack your friends (this little movement to turn friends into coders) unless they show a deeper interest and desire to understand problem solving through programming. It's somewhat of a dead end job anyway as we self cull our ranks and If we continue to do our jobs right won't we will eventually make ourselves obsolete anyway? The point isn't to make people better at adapting to machines, it's to make the machines adapt to the needs and desires of everyday people, to improve and enhance the human condition, not mire all humans (or even your geeky friends) in an extrapolation of logical instructions that will be outdated in a year, and all but forgotten in less than a decade (to eventually be a footnote in an intro to computers course). Latin, French, Mandarin Chinese, and even English are not likely to become just a historical footnote in less than many centuries so please stop comparing code to real languages. Code as a language has none of the mental, emotional, cultural or social benefits that learning a second language does (Mostly, only programmers are capable of missing the point and thinking it does).

Brian Hamby on May 15, 2012 11:03 AM

Imagine if Mike Bloomberg wanted to learn to play the guitar. To which guitarist guild would reply: "NO! Don't learn to code! There are millions of terrible guitar players, we don't need any more!".

Then Mike Bloomberg decided to learn astrophysics. To which Neil deGrasse Tyson would take offense. "Can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one knowing the total mass of Andromeda?"

-> The "everyone should learn to code" movement isn't just wrong because it falsely equates coding with essential life skills like reading, writing, and math" <-

Programming is math.


->Look, I love programming. I also believe programming is important … in the right context, for some people. But so are a lot of skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That'd be ridiculous, right?<-

Which makes me wonder what is Jeff's problem with more people learning plumbing?

So, why not. If you want to learn plumbing why not. Worst case scenario, plumbing is not for you and you trying to learn it will make you figure that out.
--
Our schools teach us music, calculus, sports, chemistry and a lot of stuff that we won't necessarily use in our lives. So what? And again, What is wrong of learning for the sake of learning? As humans that is what we do.

What Jeff is saying is simply this. If more people learn to code, we will have more bad coders. Boohoo. Somehow we have gotten back to medieval time, and we are suddenly afraid of other people learning our precious knowledge, really?

Also the call to learn math and reading instead of coding is useless. So, are we really saying that you have to choose between improving coding and improving your reading skills? Sorry but not.

Just because industrial engineers exist, does not mean you shouldn't ever give carpentering a try. And in that regards, just because your job uses something as lovely and wonderful as programming as part of the million of times more ridiculous, silly and frustrating process that is making software for boring business, it does not mean that everyone else should be denied the joy of programming. There are a lot of ways amateur programming can work as an entertaining hobby that is outside of the lame thing that software development is. We got modding, the demo scene, scratch, algorithm contests, games.

More so, more programmers means not only more bad programmers, but also due to any law of proportion, more good programmers.

Vexorian on May 15, 2012 11:20 AM

Probably your most misunderstood and misquoted article ever Jeff. Thumbs up for a good article that I thoroughly enjoyed (like all the others) and agreed with.

It reminded me of an article (http://techno.lapresse.ca/nouvelles/201202/09/01-4494377-savoir-programmer-bientot-indispensable.php) published in a Quebec newspaper that made me realize the "programming is essential omg" trend from people who literally can't tell the difference between actual programming and @'ing someone on twitter. Sorry for the article being in french but I think it's a good example of what Jeff is talking about, even when Google-translated.

pwny on May 15, 2012 11:49 AM

I take the point that it's not inherently a net positive.

But it's also not inherently a net negative. I don't think the movement is about everyone learning to code so they can get a job coding. It's about learning to code so you have SOME understanding of what is going on with these things that so define every aspect of our lives.

I don't need to know the general details of how an internal combustion engine works, and how the car system as a whole is put together. But I personally do (even though I'm not a mechanic and have no plans to become one) because it does benefit me in certain situations. Understanding the world and around you and more importantly, the machines and systems that enable your life IS a useful skill.

With the car example, I can do some of the work my self, which is faster and cheaper. And I can begin at least initial diagnostics my self to know when my car needs professional help. And when I do get professional help, having some knowledge about cars helps me not get ripped off.

The same goes for general programming knowledge. There are tasks that can be automated, bug in existing products that can be understood, and even worked around, if the user has some cursory knowledge of programming.

I do think everyone should get some understanding of programming because it underpins so much of what they do every day. Just as I think everyone who owns and drives a car should have some basic understanding of how it works, so they can be responsible owners.

Wavesonics on May 15, 2012 11:57 AM

[vaguely @Moritz]

I don't agree with the notion that you need to know how to code to effectively use a computer.

Making technology more accessible is *our job* as designers and developers of software. Same as making an automobile more accessible is the job of the talented engineers and designers that bring you the award winning Camry at the end of every year.

The reason the iPhone is so popular is because it's *stupid simple.*
Jobs set out to make the computer a toaster, and he succeeded. He did the same thing to the smartphone, and he succeeded.

My mother, who hasn't used a smartphone a day in her life, was able to figure out my iPhone almost instinctively. The same cannot be said for some previous-gen dumbphones and Android phones, and even some land-line phones I've bought her over the years.

I know plenty of people who don't have the faintest idea of how ABS works in their car. Aside from: it makes the pedal vibrate, and this orange lamp here means it isn't working.
Does that make ABS any less effective when used in an emergency braking situation? Certainly not.

*Problem solving* and *logic* are very important life skills. Understanding how and when technology is applicable is also a valid life skill.
Is programming the appropriate way to teach this? Or even a *good* way to teach this? I don't think so. Programming is *hard.*

This isn't to discourage young programmers. Its to say that there are things far easier and far more fundamental that you must learn and understand.
Programming includes obscure compiler bugs and discrepancies, dependency management, complicated syntax, among other things.

Programming is a *very* inefficient method of learning how computers work, or learning how problem solving works. Knowing how to write FizzBuzz won't help you understand why streaming is taking up bandwidth.

Macmnc on May 15, 2012 12:16 PM

Coding is fun and almost instantly rewarding, in fact with only basic programming skills you can make simulation models that are a lot more advanced than really complex Excel-models or really advanced math.

Niklaus Wirth style stepwise refinement might be a lot more appropriate than jumping into design patterns.

Tov Jacobsen on May 15, 2012 12:30 PM

I think sites like Codeacademy have the opposite effect of what they advertise. They only show the boring part of programming. Writing code IS boring and indeed not "that" hard. The fun part about programming is finding a way to systematically solve a problem or rather have a computer solve it for you.

Code training sites just spoon feed you the documentation that's already available and aren't practical if you actually want to code. There's already a tool for that called an API.

It's cool to learn the guitar by jamming some of your favorite songs but it doesn't teach you any music theory or how to compose music.

Bram Cordie on May 15, 2012 12:34 PM

A similar argument, I would guess, would have been made by secretaries in the 1980's if Ed Kotch had decided to type up a few of his own memos on this new thing called the word processor.

Programming is getting easier and easier as languages improve and processors become faster. It's no surprise that it is becoming democratized.

I think it's great Mayor Bloomberg is learning to code. He will probably really enjoy it and it will increase his general literacy about technology.

I can't argue against anyone wanting to learn something.

Michelebusby on May 15, 2012 12:46 PM

I don't know... I think posts like this are kind of snobbish. I say let people dig in and see what it's about. The ones who fall in love with it will seek out the finer aspects of the craft. But to suggest we hold back the keys until people prove they are worthy sounds arrogant to me.

And by the way, I might be mistaken, but I think CodeAcademy is based in New York City. The Mayor was doing some PR for a local business. That's all.

Dana Pellerin on May 15, 2012 12:48 PM

I think the spirit of your post is mostly wrong, even though you make a lot of good points on what the BEST way to learn would be.

You're only real points are:

1. Code is a means to an end. So teaching the means before the end is worthless.
2. Learning to code isn't necessary for success, so learning it is worthless.

All your arguments would apply to Calculus, learning a foreign language, or an instrument, or sports. Those are all a means to doing greater things, and they aren't necessary for success. The awesome parts of life are completely optional.

(that was completely stolen from xkcd): http://xkcd.com/1050/

It's not a bad thing if people decide to learn more. As a programmer, I don't feel threatened by it.

Brendan Abel on May 15, 2012 12:53 PM

You can learn to code without learning Java.

I imagine that you can learn Java without learning to code. (Or, that's the impression I get after seeing some java programs...)

Anyways, we have far too many people right now who are satisfied with getting at their data only via a UI tailored to that particular data store, rather than by manipulating the data using simple "generic" tools. Even people that "know how to code" seem to not care that they are only capable of using toy systems, and are not capable of aggregate operations until someone else does their thinking for them.

Do I expect that the New York "learn to code" initiative will fix this? No...

In a sense, it's not "learn to code" that's needed it's "learn to work with data". And, before we can teach people that we need to learn how to do that properly, ourselves.

Put differently, maybe people need to "learn how to get rid of code".

But to do a good job of that, they are still going to have to learn to code.

Such is life.

Raul Miller on May 15, 2012 12:56 PM

It is unfair and callous to deny people the ability to automate. No one should be stopped from learning and realising that a lot of the drudgery in the world can be solved by something as simple as a loop.

Furthermore this article seems to ignore the increasing popularity of end user programmable tools and applications.

Automation on May 15, 2012 12:59 PM

As Wil Wheaton would say, "Don't be a dick." And right now, you really sound like one.

This is your jump the shark moment.

Reed Richards on May 15, 2012 1:15 PM

I understand the sentiment behind this blog post. I get irritated by the, "Hey! I'm going to learn to code!" New Years resolutions that will start as quickly as they die out...

If coding was fun and easy, everyone would be doing it. I have to support this blog post, we should be building up an understanding of technology at the basic level instead of trying to convince people that learning a little bit of JavaScript is a worthwhile endeavor.

You learn to code by coding because that was the chosen solution for a problem, not because the world is filling up with software solutions. Knowing how to code is not going to become quintessential to jobs in the future. For all we know, we could move outside the need for a lot of programmers and have a more tight-knit team of experts at a chosen company. Then, what good to Code Academy do you? Nothing.

Also, for those who believe that getting the average person to learn how to code might create some form of bond or kinship with code illiterate people... I point you to the Big Bang Theory as what mainstream does to your subcultures.

Daniel Fletcher on May 15, 2012 1:16 PM

I think you miss the point, which is especially surprising considering how much you've complained about the state of job candidates in the field. The idea is to get more and different types of people coding--the pipeline to jobs in computer programming is fundamentally broken in several places, one of which is the extreme lack of diversity in who enters it. We are missing out on many, many people with the passion, intelligence, and capability to be excellent coders, and these initiatives are one way of mending that.

Kelseyinnis on May 15, 2012 1:45 PM

Thanks, Jeff. I was making a list of great blogs for beginning developers, but it was getting kind of long. It's one shorter, now.

I hope one day one of your kids gets told that they shouldn't do something, because they'll probably suck at it. Then you'll get an idea how hard it can be to pull someone out of that hole.

Kcunning on May 15, 2012 1:45 PM

More comments»

 

Verify your Comment

Previewing your Comment

 

This is only a preview. Your comment has not yet been posted.

Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

 

Post a comment

To comment, please sign in using TypePad, Twitter, Facebook or OpenID.

You are currently signed in as (nobody). Sign Out

(You can use HTML tags like and

    to style your text. URLs automatically linked.)

Your Information

Name is required to post a comment

Please enter a valid email address

Invalid URL

x=window.document.getElementsByTagName('div'); for(var i = 0; i < x.length; i++) { if (x[i].className == "comments-body") { if (x[i].innerHTML.search(/jeff atwood<\/a>/i) != -1) { x[i].style.backgroundColor = "#FFECC7"; } } }var sc_project=2600027; var sc_invisible=0; var sc_partition=25; var sc_security="dcff5548"; StatCounter - Free Web Tracker and Counter document.write(unescape("%3Cscript src='" + (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js'%3E%3C/script%3E"));COMSCORE.beacon({ c1: 2, c2: "6035669", c3: "", c4: "http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html", c5: "", c6: "", c15: ""});

转载于:https://www.cnblogs.com/zhangweiguo/archive/2012/10/07/FDSDFSFSDF.html

你可能感兴趣的:(编程之路,,,,。。!!!!!)