Please don't learn to code - <AUTHOR> http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html <comment><USER3> I really, really disagree with Jeff Atwood here. Jeff has interpreted "learn to code" with "become a programmer". They're not the same thing. I don't think that is what this meme is about at all.

Programming is logical thinking in practise. Programming is breaking a problem set down, thinking step by step through it, thinking of edge cases, and making it work. There is nothing wrong with Jeff's BASIC example, if that is where the mayor of NYC ends up.

There was once a time when books were only read and written by an elite group. Now everyone can read - and everyone can write. There are still the elite authors that write better than the rest of us. Just because everyone can write, doesn't mean everyone is trying to be a professional author.

Computers are a part of society. To function well in society, it's beneficial to understand a little about how they work, and how to make them do things. The essence of programming is making a computer do something more efficiently than you can.

Programming isn't just the advanced stuff - recursion, pointers, functional programming, or whatever. Maybe Jeff is too far down the rabbit hole to realise this, but _most people don't know what programming even looks like_. They don't know how we tell computers to do the things they do. Recently I was with a customer, making notes about changes I needed to make to their application. They asked me "Is that how you make it do that?". No - that was my TODO file. And these are people that work on computers all day, every day.

It's beneficial if marketing folk understand the basics of programming when they're doing web ads. It's useful that CAD engineers know the basics so they can automate AutoCAD. Its useful that financial accountants know basic programming so they can become more efficient with analysing data.

If the mayor of NYC wants to learn to program in his spare time, why the hell not? I bet there wouldn't be the same complaints if he wanted to learn how to surf.

edit: grammar

<comment><USER4> With a couple of months of programming knowledge, I wrote a program that saved my company $2MM/year. The key was combining knowledge of the business processes with _some_ knowledge of programming. There were people with knowledge of one or the other, but not both.

I still can't write a basic app, but that doesn't matter. I can do things that provide massive value, and I wouldn't be able to do them without programming knowledge.

I think Jeff is underestimating how much time the average office worker would save simply by learning Excel Macros or some basic scripting. Learning to program is really damn valuable, especially in fields where most people don't know any programming.

<comment><USER5> I agree with this wholeheartedly. My line of work could be made much easier through some very simple software. The only reason that software doesn't exist is because (I assume that) nobody with programming knowledge understands the needs of someone who does my job. Or cares, for that matter. There aren't many of us.

I'm working my way through Ruby on Rails tutorials simply because I think there's tremendous value to be created without the need for anything groundbreaking. Just tailored.

And if I'm right, I'll be able to afford to hire someone to fix my crappy code.

<comment><USER6> If you are right there are probably a hundred people on here able to provide a working MVP alongside you and do it faster, cleaner and pick up on solutions you cant possibly know yet. Be a domain expert.

But learn to code anyway :-)

<comment><USER5> I'm sure anyone here could do that. But how many people here are looking for a non technical co-founder? Coders are solving their own problems, and until I can hack together a prototype I don't think I'll be able to draw any attention from real programmers.

<comment><USER7> I think I'd actually prefer a pure domain expert who can express their business and ideas well than a half-assed programmer.

No offence, but what often ends up happening is you turn into a know-it-all client. "This should only take an hour. You just have to loop over these results and format them...".

Finding a technical co-founder is a sales process where you need to prove that it's a good idea and that you've made a significant investment yourself (I would prefer if it wasn't code) like thinking through the interface, and as many use cases / stories as you can think of, and describing in detail the problem(s) being solved.

The pitches we hate are the guys who know you through a friend who want you to make a Groupon-like application for their specific market, without having invested more than the 5 minutes it took to write it down while baked. I'm still not going to be sold on this idea even if they manage to throw together some terrible PHP site that sort of acts like a real application.

That being said, I'm in the boat that thinks at least some rudimentary programming skills would be useful for everyone.

<comment><USER8> > you need to prove that it's a good idea and that you've made a significant > investment yourself ... like thinking through the interface, and as many use > cases / stories as you can think of, and describing in detail the problem(s) > being solved.

That sounds exactly like the skillset of a good software engineer. This whole debate is about the fact that a whole bunch of people don't know how to break down a large problem into small logical pieces.

"describing in detail the problem(s) being solved" is about the most concise and accurate description of programming I can think of. Asking someone non- technical to do this is like asking a ramen noodle-eater to describe in detail the process of flambéing Steak Diane.

<comment><USER7> I agree it's a good skill to have in many careers, software engineer included, but it is definitely not the definition of programmer. If you wanted to map this skill to a profession, I'd probably go with Business Analyst being the closest.

Breaking a problem down into solvable parts is something I was taught in math and it was invaluable. I'd written programs before and after that, so I wouldn't say that this technique makes you a programmer. Rather it's an approach you'll need to be a good programmer.

Asking someone non-technical to describe the problem they want to solve in detail is completely within the realm of reason. Non-technical != moron. Knowing how to do this, does not make you a programmer. Likewise, being a programmer doesn't make you good at this.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I recently learned how to plumb a little. Now I can do minor household plumbing fixes without having to hire professional help. A very useful skill indeed. I know it's a demanding activity that requires more than reading a book and knowing how to hold a wrench, so I know to stay away from the serious pipes and stick to little fixes.

<comment><USER10> Exactly - everyone _should_ learn basic plumbing! Not the best analogy he could have used.

<comment><USER11> He did say that everyone should learn some basic concepts of programming, which I think we could all agree with. Perhaps everyone shouldn't know how to create the next Gmail, but surely there's an advantage to us all knowing how _for_ loops work and how to write a bit of simple code (perhaps just doing math and text basics in Ruby). Many schools already teach this as a standard part of their curriculum using Basic.

</comment></comment></comment><comment><USER12> I don't like this post and what it implies.

If tomorrow you want to learn to cook, how would you feel if a master chef told you "No, don't. You'll never be as good as me. If you're hungry, come to my restaurant instead".

I think there's nothing wrong with learning a new skill, whoever you are, whatever you do.

Learning new skills is what makes us human.

<comment><USER13> But should it be mandatory for everybody to learn cooking on the same level as reading and writing? Is it such a basic requirement, that we're decreasing our children's chance of success, if we don't teach them cooking (edit: Again, on the same level as reading and writing)?

Apart from at least a fundamental ability to use a stove, it is naturally not that crucial of an ability. The argument of the blog post is that it is the same with programming, i.e. It is not a necessity to succeed in life to know how to code.

I don't think the point of the post is to discourage anybody from learning to code. Rather it is a counterpoint to the recently heavily promoted idea that programming is somehow a necessary life skill.

<comment><USER14> > we're decreasing our children's chance of success, if we don't teach them > cooking?

Yes. Knowing cooking is paramount to feeding yourself and your family cheap, healthy meals.

<comment><USER13> Yes of course. But do you need to teach kids cooking from first grade until they start college, on the same level as math, reading and writing?

<comment><USER14> I don't care about the schedule on which any of those things are taught, just that they are taught.

</comment></comment></comment></comment></comment><comment><USER15> 1\. It is ridiculous to tell somebody not to learn something in his spare time.

2\. Atwood says:

"at least high school level math are fundamental to performing the job of a politician. Or at any job"

Do you know what is high school level math? It is a seemingly randomly selected subset of mathematics in fact based on mostly the scientific and engineering needs of the 19th century. What is included in 'highschool-level math' should be evolving. For example basic programming knowledge is more fundamental in today's society than trigonometric equations, coordinate geometry, logarithmic equations, etc... (all of which is high-school math).

Very basic programming could (and should) be part of basic math education.

</comment><comment><USER14> That article is so full of strawmen, it's not even funny.

The existence of individuals who wouldn't gain much from learning to code does not imply that no one will gain much from learning to code.

I have a hunch that the vast majority of regular office workers has at least some portion of their work which can be trivially automated. Knowing how to code maybe allows these workers to go and code up a script - but even if they can't, it might allow them to identify this and state their work in terms of programming, thus vastly lowering the barrier to getting someone else to do the actual programming.

A workforce that can accurately say "this is a computers work" opens floodgates of productivity increases.

<comment><USER16> That's true, but not necessarily something that office workers would actually want.

Many workers actually sort of enjoy mindless repetitive busy work since it makes you brain feel like your achieving something vs difficult work where you might spend weeks stuck on the same problem.

Case in point:

A fair number of years ago I worked a non tech office job for a few months. Basically a large portion of the job was checking though a spreadsheet looking at figures and checking them against a corresponding row in another part of the sheet. Assuming the figures matched you would copy the figures elsewhere in the sheet, append some characters to them and mark ones that were wrong in red. The data I think came from some legacy database.

There were a few more steps that I don't quite recall but basically they provided a list of instructions on how to do this part of the job and I immediately recognized that this was basically psuedocode, there was nothing "human" required at all. They expected a human error rate of around 1% with this and sheets were often checked twice.

A few days into the job I decided to try writing a Macro to do this job, so that night at home I wrote my macro and emailed it to myself. Next day I loaded it up, ran it and then checked the results by hand. I did this until I was satisfied that the error rate was 0.

Next few days I just started running my macro instead of working by hand, meaning I got about 3 hours work done in under a second and could spend the rest of the day doing other (marginally less monotonous) work.

Now in this office they tracked people's productivity levels as well as their error rate, so naturally I end up with obscene performance stats and no errors.

So the team manager of course asks me to explain myself and I show her the macro and offer to show her how to set it up on other computers and explain how well I tested it etc. The response I got surprised me somewhat.

"You are cheating your stats!" was what I was told. Of course I explained that it wouldn't be "unfair" if everyone had the software. Now at the end of every month they had some (cheap) prize for the person with the highest productivity and lowest error rate and since other tasks were not so easily "scored" the spreadsheet task was a big part of the deal.

No matter how I tried to explain it was like hitting a brick wall, because in her eyes I was "cheating". They had been doing this monotonous work for so long and were so used to it that wasting probably hundreds of man months was preferable to questioning if there might be a better way.

Of course I offered to forfeit any "prize" I might win (despite potentially saving them thousands of pounds), but no we type figures and then somebody wins a prize at the end dammit!

I imagine this sort of brain damaged thinking is common in far more organizations than you might imagine.

<comment><USER14> If anything, your anecdote supports my hypothesis that simple programming can unlock large productivity increases.

Your team manager made a career out of incentivising busy-workers, then suddenly one of the workers come along and proves her, her work and her neat floor of busy-workers pointless? Of course she's going to push back. Nobody likes to be made pointless. That doesn't make her any less pointless, and it's for the better of everybody that she stops being pointless.

</comment></comment></comment><comment><USER17> Unlike most of the top comments, I actually agree with Atwood's conclusion, if not all of the arguments he uses to get there.

I don't particularly care about the accumulation of bad code. I don't particularly think that summer of code people are going to be accumulating all that much of it that will be shared.

And I do agree that learning to program is a totally worthwhile and mind- expanding skill. But I can say that about a lot of the skills I've picked up. From driving a tractor(1), to the little bit of plumbing I've learned; to playing an instrument; they all involve problem solving; they all make you a better thinker; they're all fabulous to learn in and of themselves.

If forced to choose one of these skills, I'd say programming is in fact the deepest. But they all have enough plenty of depth for someone who's only going to be exploring them casually. And I don't feel like the summer of code mentality is over-hyping programming so much as its undervaluing all those other worthwhile skills.

There's plenty of worthwhile stuff to learn in this world. It's okay if you want to learn a few of the other things instead.

(1)Yes, operating a tractor and making use of its attachments does involve a lot of problem solving. I drove one as part of a job for a year and a half, and the guy I worked under could do so much more with it than I could that I was in awe.

<comment><USER18> 100 years ago, Summer of Plumbing or Summer of Tractor Driving may have attracted a not insignificant participation. In present day, not so much, as coding has become the infrastructure of our society.

</comment></comment><comment><USER19> Programmer Hierarchy:

      Level 0: (Many bosses I have had)
      Level 1: "Hello World"
      Level 2: Does something
      Level 3: Updates a data base
      Level 4: Solves a little problem
      Level 5: Produces value
      Level 6: Sidetracks other programmers to maintain
      Level 7: Provides a platform for other value producers
      Level 8: Solves big problems
      Level 9: Still produces value years later

Everyone should get past Level 0.

If you're going to get to Level 6, I'd prefer you just stop at Level 5.

If you get to Levels 7,8, or 9, thank you.

<comment><USER20> Classical programmer fallacy: equating cleverness with value.

There are plenty of level 3 cheesy little Access and VB apps that any "serious" programmer would laugh that that are level 5 or 9 on your scale.

<comment><USER21> That's true. This should have two axes (at least). One with "domain specific knowledge" and other one with "programming expertise".

Indeed, when domain experts reach some arbitrary level of programming expertise, many good things may happen.

</comment></comment></comment><comment><USER22> I'm kind of the villain of this piece -- a relatively novice coder who expects to apply for programming-heavy jobs in the future.

Here's why I think I'm not actually a villain:

1\. I'm not under any illusions that people should pay me mega-bucks because I can program at all. I haven't hit my 10,000 hours yet; closer to 1000. You should hire me because I'm a mathematician who can program, not because I'm a hacker genius. Often, being an "X who can program" is much more valuable than just an X. It means you can execute your ideas yourself; and it means you have a clear concept of _which_ ideas can be executed computationally and which cannot.

2\. I couldn't just "quit programming" any more than I could quit writing or quit reading. I could resolve to, but I wouldn't last long. I've found that when something makes my brain happy, but isn't technically "my job," I'm much better off following instinct and doing it anyway, rather than forcing myself never to have any side projects.

3\. You're worried I'll contribute to the volume of bad code in the world? Well, just because there are more experienced programmers than me doesn't mean I'm dishonest or stupid. I make a point to be very frank about what I can and can't do at the moment. I've found that the stuff I _can_ do is quite valuable to people. I don't try to bluff my way into projects I'm obviously not qualified to contribute to.

<comment><USER3> I think you're much closer to a programmer than a layman that programs.

The straw man about reducing the amount of bad code in the world is garbage. Just code. If you're getting a benefit from it - or hell, if you just enjoy it - do it. You have nothing to apologize for.

The whole elitist concept of only sanctioned programmers coding is just arrogant. Even the best programmers wrote awful code before they were great. Doesn't mean they shouldn't have kept it up.

<comment><USER23> It's like trying to cut down on the amount of bad writing in the world. Sure, I guess aesthetically it'd be nice if I never had to look at any bad writing. But bad writing is part of the process of becoming a good writer, so there'd ultimately be less _good_ writing out there.

</comment></comment></comment><comment><USER24> Please learn to code. Also, learn to change your oil and maybe your spark plugs; learn to cook; learn to replace buttons on your shirts; learn to fix your leaky sink and plunge your toilet; learn to plant flowers and tomatoes; milk a cow; shovel some dirt; experience driving a tractor, both the kind in a field and the kind that pull tons of cargo down the expressway ...

Get out of your comfort zone, live for a minute in someone else's shoes and maybe, just maybe, you'll learn to respect the work that other people do and be willing to pay them for it - they deserve to be paid for their Work. Yes, sitting behind a desk all day bringing brainpower to bear on saving the company money is Work. Driving 11 hours a day is Work. Grilling that steak and walking it to your table is Work. It's all Work because it takes us away from our families, because it's so well regulated that it adds stress, because we'd rather be doing other things but the bills have to be paid (i.e. we have to pay other people for the Work they do keeping our lights on, our Internet connected and our water reasonably clean.)

So, please, learn to program. Then, when you need software built, you'll know why you hired me for "so much" and how much trouble I'm saving you.

</comment><comment><USER25> I think the whole everyone should learn to code this is right, but a little ahead of its time. A little like saying that peasant farmers in the bronze age should learn to read and write. While 100% literacy is now acknowledge as a good thing it took a while to get here. A farmer these days absolutely needs to read and write. But a bronze age farmer? Not so much.

I personally think that one day it will be impossible to function in society without the ability to manipulate and query data. To use Jeff's example, as Mayor of a large city there must be mountains of data that might be relevant to every single decision that is made, and the mayors who can query and gain insight into that data quickly (without having to write a spec and get someone else to do it for them) will eventually be more successful, to the point where all mayors will be expected to be able to manipulate data.

There are a number of things that need to happen before that though:

Firstly, the tools need to get a LOT better. I put our current development tools somewhere a kin to Egyptian hieroglyphics. You can do basic things like record the births and deaths of kings, but could Shakespeare have written what he did in hieroglyphics? I'm guessing not. (Although I bet someone somewhere has done a translation!)

Next, this vision of the future is based on the amount of data in the world getting a LOT bigger. To the point where intuition or past experience simply can't compete with the people who are mining the data.

Politics will probably be one of the last professions to convert, the cultural change will take a while to work though. The first professions will be the kind of things where Excel is used heavily at the moment (you could argue that Excel is a programming environment). Professions like Marketing, Manufacturing (which will become predominately robot driven at some point) and Medicine (which will become heavily influenced by generic programming) will probably be early adopters. But one day, I think "programming" in the sense of giving a "machine" a series of logical instructions to follow, will be universal and it will simply be impossible to live a normal life without that skill.

EDIT: Fixed ironic typo ;)

<comment><USER26> > current development tools somewhere a kin to Egyptian heiroglyphics. You can > do the basic things like...

Ah, no. Heiroglyphics is just somewhere between an alphabet and syllabary - there are 60 odd symbols and they match to sounds like 'a', 'ts', 'gh'.

The stuff you see in museums is the 'posh' stuff for best, there is a quick writing version of it (also known as heiratic) where the full pictures were made more abstract.

> Could Shakespeare have written what he did in hieroglyphics?

For 3,000 years everybody did. Oh, and don't forget little things like inventing hydrolic engineering in hieroglyphics.

Hieroglyphics is as good a writing system as this text I am typing.

> You could argue that Excel is a programming environment.

Actually Excel/spreadsheets are THE programming environment - used by millions of people every day to perform their daily work - loads more than use obscure programming specialist dialects/paradigms like Ruby, or Java or whatever.

<comment><USER25> I acknowledge you know a lot more about Hieroglyphics than me. But my comments were based on the understanding that it was really the development of an alphabet by the Phoenicians that took writing from an obscure system to something usable by every day people. Maybe this isn't the case?

Also English is widely acknowledged to be a very expressive language compared to, say, Swedish which has a sparser every day vocabulary. I'd be surprised if you told me that the nuance of the finer English texts could be adequately captured in Hieroglyphics.

I agree, Excel is a programming environment. Could do with better version control and debugging though.

<comment><USER26> I'm sorry there is no evidence that a particular language is 'better' than any other.

All human languages have very similar every day vocabularies - English happens (now) to have a very large specialist vocabulary (which wasn't available to Shakespeare) and which it actually shares with most other languages.

Shakespeare got his vocab up by generating a host of new English words from French, Latin and the other dominant languages of the time.

As we speak the Kiyuku Shakespeare is stealing words for his play.

> the nuance of the finer English texts could be adequately captured in > Hieroglyphics

On a technical point you could copy Shakespeare into it now - it has (most) of the current English sounds and with a couple of conventions/accents you would be good to go. I wouldn't recommend switching writing systems anytime soon.

<comment><USER25>
        > All human languages have very similar every day vocabularies

I spent a lot of time working in Sweden and had many conversations with the locals (all of whom know English very well). Many of them remarked that English has more alternative words for something than Swedish and that each one has a subtly different meaning. For example, how you can use "grand" in place of "big" or "large", they all mean roughly the same thing but "grand" brings with it additional meaning. So, my personal experience appears to contradict this statement.

My point is really that languages and alphabets are tools and some tools make certain jobs easier. You _could_ write a website in assembly, but its easier in Rails. However, I suspect our ancestors will look back at Rails and have similar feelings to us when we look back at ancient writing systems now.

</comment></comment></comment></comment></comment><comment><USER27> Almost all of these arguments can be applied to a large majority of our school curriculum. If you are arguing that people shouldn't learn to code for the sake of learning to code, you are correct. If, however, you don't actually think learning to code translates to solving problems, or has any real world benefit, you should also be insisting we remove all of Math from our school curriculum, because who uses anything beyond basic algebra? Hell, who uses anything beyond basic arithmetic now that we have calculators that can do algebra and calculus for us? Why teach kids anything?

I should also point out that, the more politicians know how to code, the less politicians treat computers as black boxes that "the nerds" need to perform magic with. It won't go away, certainly, but its a step in the right direction.

<comment><USER28> _[...] you should also be insisting we remove all of Math from our school curriculum, because who uses anything beyond basic algebra? Hell, who uses anything beyond basic arithmetic now that we have calculators that can do algebra and calculus for us?_

Mathematicians, physicists, astronomers, chemists, economists, statisticians, engineers, meteorologists, actuaries, biologists, accountants, etc.

<comment><USER29> I think all of the jobs that you have listed involve using computers to automate, manage and solve problems.

Except rather than how we wield writing algebra or English pros, with advanced skill giving us the ability to express elaborate and abstract concepts, most people are computer illiterate.

Their use of the computer is analogous to knowing nothing about algebra or English, and choosing predetermined sentences to write pros, or choosing predetermined equations to do algebra. If what you want to express isn't supported, or what you have available isn't what you want, you're screwed.

People should be able to accomplish what they want with a powerful language. English and Maths are both powerful languages that are tools for modelling life and facts, coding models process and automation. It's not essential in the same way growing up in the Amazon rain forest where maths and arithmetic beyond "one, two and many" isn't essential. It's undoubtedly desirable and beneficial, however.

</comment></comment></comment><comment><USER30> I'll leave the part of "coding is important because computers are everywhere and learning how to automatize everyday things is a great skill" to others, as there are lots of excellent comments about it in this thread. Let's talk about something different:

> But understanding variables and functions, pointers and recursion? I can't > see it.

Hey, I'd argue that understanding _exactly those_ things are what should be included in "everyone should learn to code". All of those are difficult mental constructs important for understanding how our complex world works. Let's look at it case-by-case:

variables - this is basic; the idea to take something (a concept) in your hand and manipulate it by a symbolic name. This is, in some way, taught in high- school math, but somehow many people don't seem to grasp the idea behind the concept of a variable.

functions - ability to take a set of instruction and name it. Possibly have it parametrized. That's simple. But naming several sets of concepts, and then using them to build another layer of concepts, which is then used to build another layer of concepts... I'd call this an essencial problem-solving skill.

pointers - concept of indirection; for people not accustomed to it, it's easy to get lost in different levels of indirection when discussing things (like, a difference between 'belief' and 'belief in belief', or P, proof of P, proof that P is provable, etc.)

recursion - because not everything circular is invalid; sometimes things defined in the terms of themselves are the simplest way to go.

To all of this I'd also add one more, IMO essencial, thing - understanding of _feedback loops_. It could cut out a lot of discussions about whether X causes Y, or Y causes X. Surprise surprise, it might be a _feedback loop_ , in which X and Y are interlocked, and are both to blame.

Bottomline, programming teaches us a lot of important skills and mental constructs useful for problem-solving and understanding how the world works. And those skills are hard to get elsewhere.

A silly example from high-school biology: what is genetic code if not opcodes for protein assembly machinery? DNA "data" is code that programs machines building proteins. Easy to understand and remember if you know even a little bit about how 'automation'/'computing' is done.

<comment><USER28> _Bottomline, programming teaches us a lot of important skills and mental constructs useful for problem-solving and understanding how the world works. And those skills are hard to get elsewhere._

I definitely support the notion that everyone should learn problem solving skills, but people can take different paths than programming: mathematics, natural sciences, and even chess, for example.

As Richard Rusczyk, founder of Art of Problem Solving, says, "We use math to teach problem solving because it is the most fundamental logical discipline. Not only is it the foundation upon which sciences are built, it is the clearest way to learn and understand how to develop a rigorous logical argument. [...] This is not to say that those who cannot do math cannot solve problems. There are many paths to strong problem solving skills. Mathematics is the shortest." [1]

And there have been many studies on the relationship between chess and problem solving, including this one by Ferreira and Palhares [2].

[1] [http://www.artofproblemsolving.com/Resources/Papers/ProblemS...](http://www.artofproblemsolving.com/Resources/Papers/ProblemSolving.pdf) [2] [http://www.math.umt.edu/tmme/vol5no2and3/TMME_vol5nos2and3_a...](http://www.math.umt.edu/tmme/vol5no2and3/TMME_vol5nos2and3_a7_pp.249_256.pdf)

<comment><USER30> > I definitely support the notion that everyone should learn problem solving > skills, but people can take different paths than programming: mathematics, > natural sciences, and even chess, for example.

I agree, though you'd have to go far over the school level of maths to get such benefits. Also, given that CS is a part of math, you can't avoid it if you want to learn some mental structures - we actually DID invent a new way of thinking in the last 100 years. And CS should be, in my opinion, tangled with programming, for a mortal to understand it and have fun with it at the same time.

So, in other words, by all means study math, but catching a bit of CS knowledge and programming skills at some point should be a natural consequence of it.

<comment><USER28> _[...] you'd have to go far over the school level of maths to get such benefits._

Not at all. Even deriving the formula for the sum of the first n positive integers is something that requires problem solving skills while not requiring more than school-level maths.

 _Also, given that CS is a part of math, you can't avoid it if you want to learn some mental structures [...] by all means study math, but catching a bit of CS knowledge and programming skills at some point should be a natural consequence of it._

Huh? Physics is more a part of mathematics than computer science is. And I don't understand what you mean by "mental structures".

 _we actually DID invent a new way of thinking in the last 100 years_

Could you explain what you mean by that?

Anyway, my point was that you can't argue that everyone should learn programming just because it's a way to learn problem solving.

</comment></comment></comment></comment><comment><USER31> So I wrote a piece advocating why everyone should learn to code:

[http://reviewsindepth.com/2011/04/why-everyone-should- learn-...](http://reviewsindepth.com/2011/04/why-everyone-should-learn-to- program/)

I don't think Jeff's piece undermines any of the reasons I put forward there.

Going through his points one by one.

It's easy to agree that you should ideally write no code - but of course the ideal assumes that all the provided interfaces in the world provide you with everything you desire, need. The point is that the world is such that most of the time this is not the case.

It does not assume that coding is the goal. It assumes that there are always various goals that have not been met by existing interfaces or infrastructure. (i.e. that the ideal in the first point can never be achieved in reality)

It doesn't necessarily put the method before the problem. It's just assuming that the many of the problems faced by a majority of people (or everyone) in western society can be solved with code.

His next point speak to professionalism in coding. In large software projects - you absolutely need professionalism. But many problems people face don't require large software projects to solve. I give an example in the linked piece above of a problem I solved with code that certainly didn't need a large software project.

His final point - it does not imply this thin membrane between professionalism and being an amateur coder. In fact - I advocate the complete opposite, yet still think everyone should code. I'm not sure why he thinks it does imply this - so its hard to argue against him here. To me it's prima facie not the case.

<comment><USER32> I have a similar thought, where even simple programs allow use of the computer, rather than just the software available on it.

</comment></comment><comment><USER33> 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 Heinlein

As much as I believe (and I do) in the importance of technical and mathematical literacy, it's no more important than the perspective that can be gained from, say, learning to knit or beatbox. There are very few skills that don't teach some sort of methodical problem solving, the rest is just domain.

</comment><comment><USER34> I get what he is saying, not everyone can or should be a programmer. But if you take 'learn to code' as a euphemism for learning how to build an excel spreadsheet properly, how to write a macro to automate your job, something like that, then, well learning to write a bit of code isn't a bad thing at all.

We all benefit when we learn a little bit about another profession, whether it is painting or plumbing, bricklaying or baking. In that context demystifying coding for the average person isn't a bad goal. Just to clue people in that tough solutions they have might be easily solved is a good thing. Getting people to wrap their heads around logical thinking is definitely a good thing.

</comment><comment><USER16> Whilst I agree to the extent that I would dread the monstrosities brought to birth by a huge programming populace, I can't agree with the overall article.

I think the comparison with plumbing is apt, but not in the way he intends. Let's say I turn on my tap and no water comes out, now I know nothing about plumbing but at least I know that the water comes to the tap through pipes so perhaps one is blocked or leaking?

By the same token if my car engine won't start then I can hazard a guess that it's perhaps a failure in the ignition system or the starter motor. I can also reason that the engine works by combustion of fuel, so it is logical that if the fuel tank is empty I won't get very far.

Contrast this with computers, the average person has literally no conceptual model whatsoever of what is going on beyond the fact that they require electrical power.

Of course people learn the buzzwords from the media to make it sort of sound like they know what they are talking about. I remember years ago people bragging about their "64 bit" console despite not having the slightest clue about what a bit was or why it should matter.

This makes it easier for people to buy media scare stories about "hackers" etc as well as not _really_ understanding what it means to protect themselves online (beyond installing some AV software and praying).

It might also make life a little easier for people who are not technical to specify software requirements. For example many times I've been given a spec like "if X happens then do Y", of course X is never one thing, it is a combination of a large number of sub conditions that are dependent on various external variables etc.

When you try and get somebody to explain in detail all of these subconditions to you so that you can make the software correct people will often take you for being overly pedantic because they understand intuitively what they mean by X and can't quite get the fact that the computer doesn't.

</comment><comment><USER35> I doubt Bloomberg uses eight grade chemistry, biology or physics in his day job either. We still teach the sciences -- if nothing else than as a way to entice kids to continue studying it and keeping a steady influx of engineers in to society. There is nothing different about computation, per se. Instead of a teacher droning on to kids about how to surf, let them learn how to do webpages, or robots. Get them excited about CS and try to disspel the notion that the machine they're sitting by is in any way, shape or form magical and archaic.

As for Bloomberg at this phase in his life picking up coding, probably not. On the other hand, he made his fortune in part via hardware and software, so I doubt he's completely clueless about it even now.

<comment><USER36> Most of us use most of a lifetime of knowledge in our day jobs, and machines are magical.

<comment><USER35> I don't think you truly believe that though. Most people who hack daily have at least a basic working model of the computer. There's a compiler parsing, generating code, there's possibly a VM executing bytecode, an operating system managing memory, scheduling, network and other services, below that there's a CPU executing some representation of assembly code, it's in turn composed of some sort of a logic array, etc. etc. I'm not saying you know the inner workings of everything.

It's more along the lines of, we teach physics with the aim that people finishing high school should have a vague notion about at least newtonian physics, some electromagnetism and the scientific model. For computers, we teach how to open Word, check your e-mail etc. Stuff kids know. What they don't know is how this all ticks, and I think there is certainly value in helping kids construct a vague mental model of it all, and how to apply certain parts of it to a screen they'll probably interact with 4-16 hours per day for the rest of their lives.

</comment></comment></comment><comment><USER37> This largely misses the point. I agree that it's not "essential" and not _everyone_ should do it, but it's still more valuable than I think Attwood gives credit for.

I'm perhaps in a unique position to comment, having recently taught my girlfriend to program. So I can talk about how that played out.

My girlfriend understands menus, she knows about links, she can install software, she can use word, she can type away like no other, and even fix some problems. If you watched her using a computer it'd seem like she had a pretty good affinity with this black box.

However, I don't think most programmers realize what a holistic approach the average person (even a relatively tech savvy one) takes to computers. They only understand them at the highest level. They develop fetishes and incantations to fix things. When something goes wrong my girlfriend will turn the computer on an off. She'll turn the router on and off. Etc. Or just click "ok" until it stops complaining. It often fixes the problem, but it's just something she's learned to do with little understanding. She goes to the store and can pick out a decent phone or laptop, but only because she's developed an intuitive semi-understanding of the lingo. This one has more gigs, that's better...etc.

The computer will do things they don't understand, except some vague notion that the computer is "dumb".

I asked her one time how a computer works because I was legitimately curious how people without any instruction in comp sci etc visualize it. She had absolutely no idea of even the most fundamental workings of a computer except that it had something vaguely to do with "ones and zeros".

I taught her binary. I taught her boolean logic. I showed her binary math. I gave a very basic example of how you can use circuits to do binary math. I made her sit at a desk and act as a processor. Then I explained the concept of bootstrapping.

Then I taught her a little bit of Python.

Enlightenment.

She understands garbage in - garbage out. She understands dependencies. She understands algorithmic complexity. She understands types and formatting...and much more. (at least generally, which is enough).

This mysterious box no longer seems capricious and opaque. She has a much better understanding of why her computer behaves the way it does and therefore feels more at ease. Sure she can't magically fix anything, but she's recognizing general patterns more and more.

She installed Ubuntu recently in fact, and has started writing Python scripts (and Bash!) to assist in assorted data processing tasks she used to do by hand. When my girlfriend needed to update batches of reports, she would up each one BY HAND and change them. Using a computer was frustrating and scary. Learning coding won't improve her life? Seriously?

Would it make him a better mayor? Not necessarily but it sure could help. I'm sure he uses a computer and I'm willing to bet the less time the mayor spends screwing around with a computer or waiting for tech support the better. Likewise, I'm sure he has all sorts of tedious tasks which don't warrant third party software but which could be tackled by a nice Perl script. That doesn't even take into account the boost in (general) analytical thinking that comes from programming. Ditto for potential refreshment in Math.

Who says it needs to make him a better Mayor anyway? What if he just wants to be a better person?

In addition to being a programmer, I happen to be a musician as well...which puts me into contact with a lot of artists. I'm always surprised by how much they could benefit learning programming because a lot of art involves hacking; creating weird one off contraptions...often requiring lots of tedious work. Many want to experiment with technology and art, but are unsure how. Processing could blow some minds. Ditto Overtone.

Using a computer is largely about software; and software is similar to arts and crafts in that it's a reflection of the creator and the tools they used.

Learning about an artist helps you interpret the meaning of their work. Learning about the techniques help you evaluate and appreciate their work.

Learning to code makes you sympathize with the people who wrote the software you use. It helps you understand how software is put together. Which is good, because the more you sympathize with the author and the more you understand how it fits together the easier time you will have using it.

To be fair there are _a lot_ of things I feel everyone should learn. I think it's fair to say though that out of all the ones you could pick, learning to program will be more beneficial practically relative to most others.

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

I think this is the heart of the misunderstanding between sides. Learning to program is actually the first step in that. He mentions having "basic internet skills" as a necessary life skill. Learning some programming will greatly facilitate that.

Likewise programming will introduce concepts and develop skills that help you understand technology in general. It even helps in in non-technological areas. It facilitates communication because it forces you to confront and think about how difficult it is to communicate certain things clearly.

<comment><USER38> Well spoken, but not all people are like your girlfriend. To most people, learning a bit about programming would primarily be an exercise in frustration.

<comment><USER39> Hate to say it, but that seems like a rather arrogant thing to say.

I'm great believer that anyone can get to be _reasonably_ good at something if they invest enough time and effort into it.

It's the classic logarithm curve; when you have no skills in a field, you can learn a few skills really easily (steap curve). Then, as you get better, your progress for effort-expended goes down until you're basically a domain expect (flat line; no matter what you do you basically dont get any better).

This applies to ANYONE on ANY field; the curves are just different; and I'd argue the steep part of the curve is pretty long for programming (compared to say, I dunno; learning differential equations).

Despite the great them-and-us divide that geeks (and here I generalize based on the geeks that _I_ know personally) seem to have to 'other people' who are 'dumb' ... people are, in my experience, generally smarter than you'd expect.

I'd rather encourage people to learn a little bit, than tell them to go away because they're probably not smart enough. <\-- This is arrogant as f __*, and if I see someone do it, it makes me angry... although, I realize you weren't directly saying that, so please, take this as a general comment, not as a criticism of you personally. :)

<comment><USER38> Sorry, but back at the university, I gave several semesters of tutorials in programming for beginners.

It's not that people are 'dumb' or 'smart'. It's just that some people have an easier time with some topics than others. I have seen people who really struggeled with the basic concepts after three courses (not my courses ;)). Others understood it far quicker and with much less work.

I'm not saying that these people were dumb. They usually excelled in other areas, just like I am seriously unable to keep a plant alive for more than a few months (believe me, I tried!).

As I said, to some people some topics are an exercise in frustration. It's not that hey _can't_ learn it. It would just be really painful and boring to them.

</comment></comment></comment></comment><comment><USER40> This is a depressingly philistine perspective.

A basic grasp of computational thinking has never been more important. It's become a prerequisite for making informed decisions about the world we live in.

The world may or may not need more working programmers (or mathematicians, novelists or plumbers), but why wouldn't we want to teach these elementary skills to as many people as possible?

<comment><USER41> Yes.

Came here to post something along these lines and to link to this 2006 article by Jeanette Wing, head of the Carnegie Mellon computer science department:

[http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing0...](http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf)

</comment></comment><comment><USER42> If you understand how to code you have a much better idea of what's achievable by code and what's not.

(incidentally given Michael Bloomberg has a degree in electrical engineering and he founded a multi-billion dollar tech company in the 80s I'm pretty sure he can code already; even if only in fortran)

</comment><comment><USER43> > _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?_

Being a Mayor means it is his job, not his life, outside of work it's not our business to tell him he's wasting time regardless of whether he's learning to code or reading the first Harry Potter book over and over again.

<comment><USER44> Not to mention the fact that the tax payers don't pay Bloomberg a salary to do his job, he does it for free.

</comment></comment><comment><USER45> I applaud 'Learning to code' if it defined as:

* taking problems and reducing them to a sequence of repeatable instructions and decision points (branches)

.

I think 'LtC' is irrelevant if defined as:

* I wanna make iPhone apps / Facebook plugins / Instagram ... Where do I get the Magic Handshake for the Mega $$$ ?

<comment><USER46> Not really. I learned to code Pascal 16 years ago, because I wanted to make DOS computer games.

And here I am now: 10+ years of professional web-dev experience, spoke at local dev conferences, won awards for my work, etc..

What I learned during all these years is that methodologies and models help you after you learn how to build apps/plugins/games/whatever. And still they won't save you from wasted hours hunting an accidental typo.

</comment></comment><comment><USER47> I think the most profound lesson to be learned in programming is how complex everything is. Computers aren't "dumb" -- they just don't share our language, culture, biases, etc. You have to specify everything exactly. If anyone has to be dumb, it's going to have to be us. Evolution helped us make sense of the complexity with a bunch of highly complex and very leaky abstractions -- "person", "God", "love", "nature", "property", "fairness", "consent" etc. Only when you try to describe these concepts to a clean slate such as a computer do you realize how complex the world really is. Moreover, these allegedly meaningful things all boil down to meaningless physical states and interactions, so you also get to realize that everything is pointless and what was it again that we are doing here?

</comment><comment><USER48> I respectfully disagree. Learning to read is a necessary skill where most of the world's information is written - but to be productive, to create, to contribute, you have to learn to write. Code is the same: whether that's a good thing or not, more and more of your surrounding, of your environment will depend on - code. Fortunately, a lot of services have made it very easy to contribute to this augmented world without coding yourself, but you will not be able to understand the basic mechanics of this augmented environment without basic code literacy.

Why should a mayor learn to code? Well, I don't expect him to be a Java nut, but I do expect leaders in politics to grasp the basics of privacy, security, productivity, cost and benefits of the coded world surrounding us.

</comment><comment><USER36> "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?"

If anything should trickle down, it would be the joy and satisfaction of acquiring a basic competence.

<comment><USER20> Or maybe he could found a company making trading software, amass a fortune, and get elected mayor of New York City...

<comment><USER36> ... and then profess to study that which his generational peers have foregone. If only we could all be mayors of NYC!

</comment></comment></comment><comment><USER49> > _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..._

Given the context, this remark is so frivolous I honestly think it may have been made in jest. But just in case it wasn't:

1) Bloomberg has declined the $255,000 salary. He receives $1 per year. This certainly says something about where his priorities lie and how he views his position as the mayor of NYC.

2) Regardless of salary, I have a feeling Bloomberg wouldn't let programming overtake his life and prevent him from fulfilling his responsibilities.

</comment><comment><USER50> I think most of you are taking the post too literally. He is going against the rising trend of post implying "EVERYONE SHOULD CODE, IT'S GREAT, YOU WOULD BE CRAZY NOT TO, ITS SO EASY". It almost sounds like an infomercial. Of course anyone who is interested should learn how to code. Anyone interested should learn a bit about plumbing. And about home wiring, and car repair, and...the list goes on. No matter what skill level you actually end up achieving if you are interested in coding go for it. But lets not pretend as if it is for everyone. And lets not pretend that a majority of the people would even be interested. Most people hate taking Math in school and they complain when they get older that they never use it. The same with a lot of other subjects in school as well.

Whats more important is that the computer stops becoming a black box for the average user. They should be taught the basics when it comes to how it works. It would not only help make it easier for the average person to use, it would help with security as well. If we teach basic programming skills to make that happen then I'm all for it. Coding is not the important part, understanding the machine is.

</comment><comment><USER51> Hey, Jeff, here's another way you could look at this:

"I wish I'd thought of [this]... The need for _people who can read and write_ has never been greater. This is a fabulous product at the right time" -- Tim O'Reilly, Founder and CEO, O'Reilly Media

"A young man asked me for advice for 'those who aren't _people who can read and write_ '. I said he should try to become a _person who can read and write_ " -- Fred Wilson, Partner, Union Square Ventures

</comment><comment><USER52> As many others have pointed out, I think there are two sides to non- professional* coders learning to code, one of which I agree with wholeheartedly, the other I disagree with, equally wholeheartedly:-

* As in paid to sling code - I don't mean to cast elitist aspersions with the term 'professional'.

The Good

Learning to harness the amazing realm of creativity that computers offer - unlike other fields of engineering, you aren't limited by the need for millions of pounds and a team of people to turn your idea into reality, nor are you constrained by the laws of physics or possibly killing people should your calculations turn out to be incorrect.

For example, I am slowly writing a chess engine, it's such a joy to explore that because _I want to_ and it's interesting to me.

There is a core kick that many people get out of programming, which is when you actually get something working, knowing that you made the computer do that. I wouldn't want to take that away from people.

Another aspect is that, should somebody learn enough to make some aspect of their life easier, that could even be simply learning some vba to automate some process which used to take them several hours, that's worth a lot too.

The Bad

People thinking that coding is easy and straight forward, simply because they've learnt to do something trivial or played around with code a little bit. I have met several _professional_ programmers who have had the same opinion and then gone on to produce the most horrendous, unmaintainable, broken code imaginable _and_ get paid a lot of money to do it all the while producing quite awful software.

I wholeheartedly agree with Jeff's point that this sort of attitude is _not_ something we ought to encourage. If people more generally think of coding as something easy, then the kind of programmers who produce shitty code and think it's fine will be emboldened and we will be doomed to experience yet more broken software in the world. That's the last thing we need.

There's a element of pride in all of this, admittedly, but it's still a very real issue. Good programmers don't get enough respect, nor does good programming and we don't want to play with that.

The cooking example cited by shin_lao is a great analogy - you don't want to discourage people from coding, quite the opposite, but don't think what you do is the same as Pierre Gagnaire, or even the guy working in the kitchen of that cafe you like down the road.

I do want to add that yes, the good can lead to a good professional programmer, but it's critical that it be realised that, as Jeff says, you need to put in your hours, whether the Gladwellian 10k figure is accurate or not.

<comment><USER53> _I wholeheartedly agree with Jeff's point that this sort of attitude is not something we ought to encourage. If people more generally think of coding as something easy, then the kind of programmers who produce shitty code and think it's fine will be emboldened and we will be doomed to experience yet more broken software in the world. That's the last thing we need._

I sort of agree with you, but this also strikes me as something of a vacuous truth. I mean, think about applying it to any other domain: Does the fear that homeowners will start thinking of plumbing as "easy" and start overreaching their abilities mean we should quit selling monkey wrenches at Home Depot? Does the fear that auto owners will experience delusions of grandeur and start thinking of themselves as professional mechanics mean that Sears should quit selling Craftsman wrenches and Chilton repair manuals? Etc., etc.

The point is, all fields have a range of knowledge and skills from total n00b, amateur, up to professional. And in every other field, amateurs and professionals co-exist peacefully, and no one seems to be arguing that we should prohibit minor home repairs by home owners, oil changes by car owners, etc. I don't see why programming should be any different. If business people learn to write a few Excel macros, or even some small Perl, Python or Groovy scripts, that's not going to hurt those of us who are working professionally in this field.

</comment></comment><comment><USER54> I was talking to a friend in HR and finance at a company. He has some processes they go through for placing bids with customers that are horrible and based on people copying and pasting lines from one word document into lines in another. That's the way their core business is done. Copy and pasting. Yes, it's inaccurate. Yes, the sales guys sometimes for get to update all the documents with copying and pasting causing large business problems. I have repeatedly tried to convince him: "Write an excel document with a few macros!" Their bottom line would profit from such a spreadsheet. He just doesn't have the minimal knowledge he needs to do it.

Best part: he works at a technology company, with a technical staff. That makes millions and millions of dollars a year.

I appreciate Jeff's sentiment, but he's missing the huge swath of people that could benefit from just a little (admittedly not great and half broken) programming knowledge.

</comment><comment><USER55> I was hoping we'd see another fine article from Jeff Atwood on the important distinction between coding and programming, something that is sometimes derided as largely pedantic, yet never fails to arouse interesting discussion.

Unfortunately, this seems to be a more blunt, standoffish interpretation of Peter Norvig's classic article on the long road to programming competence "Teach Yourself Programming in Ten Years." Jeff Atwood even references the article in this post, which I find disheartening, as Peter Norvig never once says something like "Don't even bother." Self-improvement is hardly a fruitless endeavor, and while not everyone is capable of writing good code, much less making a living off of it, there are a lot of wonderful things you could learn about yourself through such an undertaking. Plus, there are far less productive/interesting ways for people to spend what precious little time they have.

</comment><comment><USER56> "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?"

I certainly can't, but the sample set of one doesn't make for a convincing body of evidence. Moreover he's chosen to cherry pick someone in a position as a figure head/leader who has to delegate nearly all of his work as a function of time constraints. Generally speaking, Michael Bloomberg shouldn't learn to code but it wouldn't hurt if one of his advisers did.

"You should be learning to write as little code as possible. Ideally none."

This conflates individual programming best practices with a desired limit on the total amount of software written across teams and programmers.

"It assumes that coding is the goal."

Wrong. Most proponents of software education want people to understand the domain enough to function and _maybe_ get things done.

I stopped reading at this point.

</comment><comment><USER57> The thing is, programming can help automate basic tasks. Anyone who uses a computer regularly can benefit from this fact. Sometimes, these tasks are just throwaway scripts - but they save time.

I mean, even learning Excel and it's various functions is a form of programming and undoubtedly a valuable skills even for a politician.

</comment><comment><USER58> I think the real sentiment needed is not "learn to code", but more "learn what coding is, how it might benefit you and also just what it entails".

I also can't help but think baby-steps are required. There are so many people who don't even think about how software is created - learning to code is about three layers away from where they are at to begin with. Simply learning the basics of how software comes to be and a basic underlying structure of a computer would be a good starting point.

Anyone can learn how to write a few lines of a computer programming language. Understanding more of the basic principles of software development and computer architecture would be much more beneficial. That is my personal opinion.

</comment><comment><USER59> "On two occasions, I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able to rightly apprehend the kind of confusion of ideas that could provoke such a question." - Charles Babbage

Mr Attwood has a point, in that average Joe certainly doesn't need to program in order to understand their domain better. But I would ask rather then, how can one educate people on how machines work other than writing code ( I seem to remember what little was done in my education about computing, taught me little about the practicality of _why_ in a machine )

</comment><comment><USER60> The other day a friend of mine was playing Taboo. Her word was "network" and she'd been prompted with "what makes the Internet work" or something similar. Her initial guess was "magic".

This is why I believe the "learn to code" movement is fantastic and an obvious net benefit to society -- the more people we have who understand, even loosely, how integral pieces of our lives function, the better.

To me it has nothing to do with these people producing code or entering the programming profession. I devour books on psychology but I don't entertain the notion of becoming a psychologist. I read them to inform and improve my daily life in some small measure.

</comment><comment><USER61> I'm going to quote Zed Shaw in response to this article. "Programming as a profession is only moderately interesting. It can be a good job, but you could make about the same money and be happier running a fast food joint. You're much better off using code as your secret weapon in another profession. People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines."

</comment><comment><USER62> After reading Jeff's post plus the comments here, it seems we in the programming industry can certainly agree on: lots of assumptions.

Assumptions about how much value is involved for a programming neophyte. Assumptions about what one would do with a little knowledge. Assumptions about how valuable the study of programming is for an individual. Assumptions about what one can be empowered to do, once gaining a little knowledge. I'm sure there are more. Our assumptions may not be equal, but we sure have no problem making them.

No matter if you support Jeff or feel he's way off base, there's a lot of judgment involved this topic, and we should really just stop for a second. As professional developers/programmers/architects/etc., it's easy for us to have opinions on this subject and find any scenario to support any argument one way or the other. The exercise of positing an argument, one way or the other, is actually unnecessary.

For us to judge if something has value to someone else, a little or a lot, makes assumptions about how someone will discover, learn, expand, grow. In spite of our experience in the field, making such broad assumptions might be accurate in some cases, but the variability of outcomes shouldn't be underestimated. Should we encourage everyone to learn? Maybe, but I don't assume it's the best use of time for everyone. Should we encourage everyone to go deep, perhaps enter the profession? I'm not sure of that, either. But I do know that answering those questions with broad absolutes as outcomes requires quite a bit of hubris on my part.

</comment><comment><USER63> If we attempt to look into the future, I think we see that computers are likely to permeate every aspect of our culture. If they continue to decrease in size as they have been doing, they may actually end up being embedded in much of the stuff we use.

We should also notice that programming itself has a huge gradient in terms of difficulty. Things like Scratch, and other block programming languages make the act of programming easier, where amateur developers can focus more time on trying to solve the problems they are working on, and less time figuring out which parenthesis they missed.

So we have two trends - that programming is becoming easier to do, and that computers are becoming more common. Both of these lead me to the conclusion that not being able to program will eventually be akin to being illiterate. You won't be able to use and modify many of the tools of the future without some programming skill.

Further, many people are developing some of the core programming skills in pieces. Look at <http://ifttt.com/> for example. This is an example of using apps as procedure calls, and writing very short subroutines to handle tasks for you. It is a perfect example of how programming is beginning to permeate popular culture.

Soon, telling people not to learn how to program will be much like telling people not to write or not to do math - it will be a bit ridiculous. We will just need to be able to use better systems for keeping track of who is an amateur, and who is a professional, much like we do with writing and mathematics.

</comment><comment><USER64> Most people shouldn't learn to program. However, this observation is a bit deceiving. I believe that everyone should learn to write scripts. I have seen way to many people waste time on a computer for tasks that should be clearly automated. Furthermore, these people usually have no idea that there is something better.

How much time would people save in aggregate if they knew a little bit about the tools they use? The average person shouldn't need to know about recursion, but why not a for-loop.

</comment><comment><USER65> That's like a mathematician saying "people shouldn't learn maths!". Of course they should, it teaches you other skills on top of learning maths. Are most people going to go on to learn cryptography or crack one of the Unsolved Puzzles of Maths? Of course not, they'll leave it where they are and have new skills and new ways of solving problems.

Of course they could be one of the minority and go on to solve one of the big problems and create huge amounts of value. Which would be terrible.

</comment><comment><USER66> _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._

"Coding" is a simple practical skill, at first glance it seems people should learn it when they have a need for it (even if it is just automation of repetitive tasks) or when for some reason they have a deep interest in it. However, lets not forget that computers from the beginning were intended, among other things, to extend our limited human mental capabilities. There is plenty of very valuable general topics in Computer Science that can be learned well only once you know how to program, otherwise you lack a convenient vehicle for exploring those concepts.

People can keep too little in their heads at once to directly deal with complicated structures or processes, but at the same time enough to be able to write programs to deal with them. Algorithms, graphs, probability are ubiquitous concepts that cut through many fields and that can only be explored in full depth via computer programs, and the applications are broad enough that it is not possible to find a ready made program for each of them. For example, in experiments people repetitively make mistakes even in very simple probabilistic considerations, where coding a Monte Carlo simulation would take maybe 20 minutes for a moderately skilled programmer. Even the Mayor could find some benefit in learning algorithmic thinking, for example: <http://en.wikipedia.org/wiki/Critical_path_method>

</comment><comment><USER67> I've run into multiple situations at work where someone I was working for knew how to code, even if it wasn't their job, and it made things so much easier. I probably shouldn't reveal the details, but in general they were able to identify situations where just writing a quick app would help a lot vs. not having one, even tried writing it themselves, after when I ended up writing it and sent the source code along (they didn't have source control access) they were able to modify it as needed to be much more usable without bouncing it back and forth to me over and over, etc..

In another situation the person again figured out when an app would deliver really awesome results over the bog standard 60's way of doing things, and during the meeting to see if we could help out and all the subsequent revision communication, they just knew a lot about how apps get written. They'd suggest things that made it 10 times easier to write, understood that throwing in an option for everything instead of having a set functionality makes testing and code branches and maintenance a real pain in the ass, approved slight changes that made things a lot easier to write ahead of time instead of demanding meeting the requirements exactly as they were written, etc..

It's sort of like when you hear about someone trained as a doctor and who can also code doing all this awesome stuff. Except in a large organization we already have a ridiculous amount of skilled people available, so it's closer to you just need to know about people's capabilities and how they work to get really close to a similar situation where you can take advantage of both fields. So anyway, even if it isn't someone's job to code, it can be very valuable for them to know how to, and it can make them a lot easier to work with for those of us who do code professionally.

</comment><comment><USER68> Personally, I feel that the more people who learn to code, the better position we as members of society are placed in. While I certainly have no need for my local member of parliament to play perl golf in his/her spare time - <USER2> certainly do have a need, or at the very least, a want; for them to have some form of understanding about softare development. Informed people make informed decisions, and a higher number of people who are informed in matters that relate to things like software patents, the easier it is to garner a sympathetic ear when we say "Look - this isn't right, they shouldn't be able to do that."

I recall reading an article about the term 'programmer' and how it should be avoided when applying for jobs, rather, something like 'problem fixer' (I don't recall the actual example given, sorry) should be used, due to the negative, hermetic/wizardly air that supposedly hangs around those who program. I'm not a programmer, so I can't say if it is objectively true; but if it is, it seems logical making coding a more common skill would certainly remove some of the supposed semantics.

</comment><comment><USER69> The problem is that coding is still too hard. It should be easier to automate things, and then even the major of NY could benefit. Coding should be as easy as using a computer.

In fact I have argued that installing apps is kind of like coding for noobs. It is modding their world in a very primitive way, by installing functions on their phone. If it was easier to fine tune those functions, it would be a net win.

</comment><comment><USER70> I'm 50/50 on this one. I think Jeff has some great sentiments on why people shouldn't learn to code, however, I feel there needs to be a bit of separation.

I think what Jeff is trying to refer to are the people who want to learn how to code (or announce that they're going to learn) for vanity sake. I'm sure when CodeYear launched, there were a lot of people who said "I'm going to learn how to code!" as much as there were people saying "I'm going to start exercising!"

There's a dichotomy here. Some people are just doing it to chime in and feel a part of something, while on the other hand, I'm sure there are some that truly want to learn and improve themselves. The team at CodeYear most definitely were looking to service the latter.

Is it annoying to see your profession, hobby, whatever hawked as a mindless skill that _anyone_ can learn? You bet. But there is certainly value in people learning to code and code well. It's up to those of us who already know how to lead and help focus those who are just getting started. Those that are full of themselves will fall by the wayside.

</comment><comment><USER71> I would hope that someone who has tried their hand at creating a working program might appreciate, even in a very limited way, what kinds of issues face those of us who have to create these systems for a living: the difficulties of gathering requirements, the non-obvious relationship between the apparent complexity of a bug/feature and what it will take to implement/fix etc.

</comment><comment><USER72> This is like saying you shouldn't learn to write unless you're going to be a writer; or that you shouldn't learn to do math unless you're going to be a mathematician; or that you shouldn't practice sports and athletics unless you're going to be a professional athlete.

In any case, you don't learn to code so you can code. You learn to code so you can solve problems in a repeatable way.

</comment><comment><USER73> I like the "computational thinking" concept for computing literacy that doesn't imply being a professional programmer, as described in this article: <http://www.cs.cmu.edu/~wing/publications/Wing06.pdf>

Familiarity with those concepts might help bureaucrats with organizational planning even if they never wrote a line of actual computer code. Programming is first about making things so clear and well-understood even a computer can handle them, and only second about actually making a computer do them.

Atwood might have a point in that if someone just goes off to learn to code using a cookie-cutter course, they might not really learn to work with the more important first part, but might end up like a JavaScript programmer who has no idea about Turing-completeness instead: <http://reddragdiva.dreamwidth.org/579047.html>

</comment><comment><USER74> I mostly agree with Jeff here, although I do think it's good for people to learn more about technology and the Internet. But it's more helpful to learn things at a higher level than code. I recently gave a talk to some Wharton entrepreneurs about web architecture, and I started with the "learn to code" movement. My slides are here:

<http://wharton-vip-webapps-talk.heroku.com/slides/1>

To a lot of people (and in the context of my talk, everyone), "learn to code" doesn't mean starting a fun hobby; it means building an MVP. In my talk, I gave several reasons why programming is rewarding and fun, but I also said if you're a business person, doing it yourself might not be the best business decision. The third slide at that URL makes the point that to build the full stack of a Rails application actually requires mastering quite a lot of technologies (fewer if you deploy in a PaaS, of course).

</comment><comment><USER75> Michael Bloomberg is a very bad example to pick as a prototypical person who would not benefit from learning to program. Bloomberg has something that most of us don't, a staff. The value proposition of learning to program is that it will allow you to learn how to ask your computer questions, and automatically take actions for you.

Bloomberg can ask his staff to call him if an email comes in from an important advisor, but only before midnight, except saturdays where he can be called between noon and 2:30. Bloomberg can ask his staff to compare his popularity vs days in office to that of previous mayors.

Learning to program is about harnessing the power of computers to process data and text for you, and about automating repetitive tasks. If you have a competent assistant and staff, you don't need to program, although you may have tasks that require someone in your employ to know how to program.

</comment><comment><USER76> Hmm,

I just realized that the only way in which Jeff's argument has value is the context of a large organization with managers relating to programmers.

That is, managers should not take the view that their learning to code is going to make them better managers of programmers. It just makes them capable of second guessing their programmers, not really that useful. Even here, its not really that you shouldn't know how to code but that you shouldn't assume that some small or large acquaintance with coding lets you quibble with a structure someone else has taken months to work out. But even here, it might seem like the "skill" required is "not knowing how to program" but really it's not second guessing someone (with enough ego or desperation, a completely unskilled manager may second guess you too and then things get nasty).

So that's what might inspire this unfortunate rant. But the rant itself is just plain wrong.

</comment><comment><USER77> Hmm, i think we need to understand one thing, programming is't for all of us. Some people don't have any predisposition to become a singer, and they won't learn how to sing, and learning singing won't be any good for him beside of wasting some time. Someone say's that learning programming learns logical thinking, sure, just like math or logic. So why not to study them ? I agree with Jeff that " Before you go rushing out to learn to code, figure out what your problem actually is. Do you even have a problem?" because learning to program just to boost up logic skill don't make sense to me. To be a good programer something more is needed than just willing to learn how to code. The more people will learn to code just to code, or for profit, the more shitty code will be out there to destroy, and we will pray not to be in situation we will have to rewrite it...

</comment><comment><USER78> I see Jeff's point. Don't turn a bunch of people into coders that aren't ready for it. You'll just dilute the brand, and right now being a coder is valued today for whole host of reasons. As evidence of the faked resume scandal at yahoo. It's cool, but there will be a day when it goes back to being very uncool. And doing things like what Jeff is rallying against will help drive us there. On the other hand non-coders want to understand what we do and how we do it. Just like I find watching construction workers build things or a plumber fix things. Its fun.

When I was an undergrad the first lecture I had in CS was my favorite. Still is. It discussed how fundamental scientific discoveries and technology affect how humans view the world and solving problems. To quickly paraphrase as industrialization began to take shape we saw the world as a machine. And so we looked for problems that could be solved by viewing them as a machine. As electricity was discovered and commercialized we saw the world as a circuit. Our brain compared to a circuit, and our nerves were the wires. Is our brain an actual circuit well not entirely, but this idea helped us make other discoveries about the brain. As each of these technologies took root in the minds of humans we shifted our paradigms and began to solve problems differently than prior generations or prior paradigms. These paradigms tend to have long life cycles going on for decades, and that's why they are important to recognize.

The introduction of computers, and particularly computer programming, has changed our paradigm again. How we solve problems with programming is fundamentally different than how we solved it with physics, chemistry, etc. And I think that's the life skill we want to pass along to non-coders because it changes how you approach problems. As we take what was physical and turn it into a digital representation it changes how you use it to solve problems. And when I look at coding in that respect I do think its important to learn, but I wouldn't teach it the same way as most are learning it.

</comment><comment><USER79> One thing in this article I do agree with is that you should try to write "as little code as possible". But it doesn't follow that if you don't know how to code, you'll write zero code, and do well by that metric! You'll be unable to identify people who can code well, and hire poor coders to solve your problem, ending up with lots of low-quality code, in situations where an experienced programmer could have come up with a better solution ("hmm, I've seen this before...").

Even the _slightest_ familiarity with programming here will help someone understand that when an offshore development house says "oh, sure, we'll just throw 20 more people at the project", that will not necessarily make it done better or faster. This is a Good Thing. And this has nothing to do with whether or not Mr. Bloomberg is implementing his own Ruby or .NET scripts.

</comment><comment><USER80> Jeff's irritation here comes as as ignorance. The PR value alone of the Mayor of NYC learning to program could potentially inspire thousands of new casual coders and hundreds of new programmers. There is nothing wrong with wanting to learn how to create something. Ultimately, many thousands of Americans learn a little bit of plumbing for home improvement projects and they're generally happy with it.

It's no different to learn a little bit of coding for building a dynamic website for your community group, even if it's as simple as using HTML, CSS, and Javascript to customize a Drupal or Wordpress site, for example. In fact, you couldn't pick a more appropriate language than Javascript and markup languages for beginners looking to make something useful. We're not asking them to write linked lists or handle correct use of object inheritance.

</comment><comment><USER81> I couldn't agree with this more, especially the bit about how software developers are software addicts. A lot (not all) believe software is the cure for all ills and any endeavor that doesn't have software at its core is not worthwhile. Coding is a means to an end. You should learn to code if you have a problem that could be solved with code and you either don't want or can't afford to pay somebody to do it for you. Exactly the same way you should learn plumbing if you don't want or can't afford to pay a plumber to do the work for you. All that time you are spending learning to code may be better spent learning the law, or accounting, or statistics, or operations, or marketing, all of which are at least as important if not more important than coding in a business.

</comment><comment><USER82> I think this presents a flawed logic:

 _"It puts the method before the problem. Before you go rushing out to learn to code, figure out what your problem actually is. [...] Does coding solve that problem? Are you sure?"_

Did we all learn to code, or program, as a reaction to having an idea that required learning to code or program? Or did some of us learn to code or program out of curiosity, or because we just wanted to, or as a hobby?

The quoted point discredits the latter in favour of the former (as well as applying all manner of extra requirements I decided to trim out).

The article as a whole doesn't respect the fact that people have extra- curricular activities, and hobbies. And side-projects. Should we all discard those things that aren't totally relevant to our full time job?

</comment><comment><USER83> The problem with this article is that Jeff is confusing what would ideally be the case with how people should behave in the present reality. I bet no one would disagree that it would be fantastic if people didn't have to code to solve problems. However, in countless numbers of cases the solution to the problem is, with the absence an easier solution, to code it out. Therefore, if a person is in that position, it would be better if they knew how to code than not. Moreover, it would generally be good if more people were able to apply an engineering mindset to appropriate problems in order to find a solution (which programming helps you attain). Therefore, the more people who know how to code, the better.

</comment><comment><USER84> Please, don't learn to _code_ , learn how to _model_ solutions to problems. _Code_ and _programming_ are just tools for solving these problems.

If somebody comes to you with a problem and the first thing you say is "Oh, yes, of course, just let me start coding." then something is probably going to go wrong with your project. Understand what the problem is, build a model, show it to the person asking, most of the time this person doesn't really know what he wants.

You are all misunderstanding Atwood's article. Think about this: a variable in a programming language isn't really a variable, it's a name for a certain space in memory. Variables exist only in mathematical logic. Mind blown.

</comment><comment><USER85> My 2 cents are that coding is becoming more and more relevant with the times. Like reading, writing, and arithmatic, coding is a form of communication with the current technology of our time. Learning the foundations of coding should be a priority because it is a base platform for which we as humans conduct our lives.

Granted I think Jeff's "tone" might come out to some as harshe, but his thought process rings true. His two points at the bottom are the all encompasing truths that make learning coding relevant, but it also helps explane that it is important to learn about everything around us and to not focus too narrowly on one subject.

</comment><comment><USER86> While I disagree because I can't see why anyone would deny anyone else knowledge, there IS a mainstream fad about programming that seems to be out of touch with the reality of the thing.

I read an article not too long ago in one of Quebec's most important newspaper about how programming was becoming an essential skill (up there with reading and basic arithmetic), which it clearly isn't. Of course the author didn't help her case by confusing programming with setting up a wordpress site and changing its CSS.

IMO learning to code can't be a wasted experience. It's just not the life- changing, essential skill that increasingly more people make it out to be.

</comment><comment><USER87> I think most comments here are missing Jeff's point, or maybe I interpreted it in a different way. Most skills are somehow useful in the real world: programming, plumbing, economics, chemistry, logic, critical thinking, philosophy etc. Most people don't have the time and/or the will to learn most/all of these things. I agree a basic understanding of these would help but you have to make a compromise, you can't learn everything. We think programming is really important because we are programmers but it's not more important than most other areas. You should spend your time learning things you like/find really usefull.

</comment><comment><USER88> > It assumes that coding is the goal.

I don't think anyone is saying that (I hope). Instead we're telling people to learn to code as a means to better understand technology, and then use technology to your favor to improve your life. And when that happens, coding will naturally become more common in your life, even if indirectly (managing others who write code, but this time actually knowing what you're doing). "Coding" is just a more common part of the problem, which has a much deeper meaning. I tell everyone they should learn to code, not because I think they should be writing hundreds or thousands of lines per day like I do. But because they should better understand the world we live in. And learning to code will get you there faster.

Thinking we're telling people they should learn to code just for the sake of coding is completely missing the point. I tell everyone they should learn to code for the exact same reason I tell everyone they should learn science, politics and law. Your life will be better if you're scientifically literate and technologically literate because you'll better understand the world around you.

> 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?

That's the wrong question. You should be asking how can be better at his day job if he was technologically literate. And I'm pretty sure anyone here can think of many different awesome ways anyone at all could be better at their job if they knew how to better use technology around them in their favor. Let alone a major of a metropolis.

> so please pardon my skepticism of the sentiment that "everyone can learn to > code".

This is a separate problem. I think everyone should learn how to code, how science, politics and law works. For their own sake. Their life will be better if they do. Implying they shouldn't try because they're not good enough is analogous to saying most people shouldn't vote because they're not competent enough to choose the right candidates. The point is, it's in their interest to do so. Now is it in our interest that they do so? And that's a whole separate issue I would really rather not get into.

</comment><comment><USER89> Pretty uninteresting topic from Jeff. For other than professional programmers, it is like guitar.

While professional guitarists take years to master it, anyone can get an acoustic guitar and play 'Hotel California' as hobby.

What the hell is wrong here?

</comment><comment><USER90> _finally starts completely disregarding everything jeff atwood has to say_

</comment><comment><USER91> Really, it's more a matter of being able to deal with what you don't know. The worst kinds of miscommunication happen when people have misconceptions so severe, they don't even know the right questions to ask. (Raymond Smullyan has an excellent short story that deals with this, where ancient philosophers ask, "What's holding up the earth and the heavens?")

There is no analogy for programming. Most of the communication difficulties programmers have with non-programmers is due to this. The only thing to beware of, is how a little knowledge is also dangerous.

</comment><comment><USER92> Michael Bloomberg has a BS in EE. So this isn't that far-fetched. But thus was more a call to action than anythjng so Jeff Atwood is getting caught up taking a political platitude at face value.

</comment><comment><USER93> Basic programming is fundamentally formal logic in executable form. Learning it provides people with a basic understanding of how the machines around them work, what might go wrong when they break, and teaches them what is fast becoming the new global language (binary, sort of, this analogy is kind of being stretched). The point is not for everyone to enter the computer industry, the point is for everyone to have at least some level of awareness the same way we teach the scientific method in schools.

</comment><comment><USER94> I'd like to make 2 points as a fan of Mike Bloomberg:

* He is one of the great technological innovators of our time.

* I may be wrong, but he doesn't draw a significant salary from the city, being a billionaire and all.

</comment><comment><USER95> Reading and writing are outright useful. Math you can get by without but it's important indirectly.

Same way being able to code is important indirectly.

      With computers you learn how to express what you want precisely and unambiguously.

You can't hand wave computer into doing what you want. Learning how to be precise and how to not rely on other people guessing what you want is important skill and best way to learn it is to learn to code. You will need this skill in any managerial role.

</comment><comment><USER96> > I would no more urge everyone to learn programming than I would urge > everyone to learn plumbing. That'd be ridiculous, right?

I would whole-heartedly disagree. I think that everybody should at be proficient in as many practical skills as possible - an in depth knowledge is not required, simply a level of competency and an understanding of good practices and standards.

This applies to coding, plumbing, cooking, construction/DIY, auto repair, soldering and practically any skill that may come in handy.

</comment><comment><USER97> Well written piece. Completely true and misunderstood. Of course there was some hyperbole, but as a non-programmer learning to code for the reasons Mr. Atwood gave (problem solving, etc.) I think that while it is an important skill, that it's starting to be annoying how the thing is being sold, in my opinion, because coding is very, very hard for people who don't know how to do it, but it's being made out as life or death, and not that hard, which is not right!

</comment><comment><USER98> I think the root issue here is the perception that programming computers is some dark sorcery that requires years of secret incantations in dark rooms to master.

Coding is like being a baker, or a plumber, a mechanic or a school teacher. It's a useful job in society and no more or less laudable than anything else.

Anyone can love their job - and they ought to. If they do, it doesn't mean everyone should feel the same.

I say, better to affirm how ordinary coding is, rather than how extra- ordinary.

</comment><comment><USER99> I love his line, "It puts the method before the problem." What problem does learning to code solve? The focus should be on the problem of technological illiteracy.

</comment><comment><USER100> Maybe he just thinks it would be fun, wants to feel the joy of that first "Hello Gotham"? He certainly wouldn't be the first person coding for avocational reasons.

</comment><comment><USER101> What an idiot. If nothing else, learning basic coding skills allows you to have a grasp of what's possible, what's hard, what's easy and what's trivial. Even if Bloomberg never codes a line in his job, that background knowledge can manifest in 100 different ways, and will allow him to be a better manager of people and systems. We would all be much better off if every congressman took a 2 week course in programming.

</comment><comment><USER102> What is wrong with acquiring a skill that is completely unlike what you normally do. It's enriching experience and challenges you mentally more than learning something that is very much like what you already know/do.

No one is saying that just because you learn to program you will be seeking to do it professionally. I think mayor of New York knows better than to quit his post and start seeking some janitorial programming position.

</comment><comment><USER103> I really agree with this part: "You should be learning to write as little code as possible. Ideally none."

Less code is better than more code. Even less code probably means you are reusing someone else's code which is even better. And this is the one that programmers can't accept: composable/configurable tools are better than programming languages. Better as in plain better, and better software engineering.

</comment><comment><USER104> A fundamental grouse I have with the "Learn programming" meme is that it encourages the myth that you can be gainfully employed as a programmer after solving code snippets for a year. I've written this out in greater detail at [http://blog.sidu.in/2012/05/everyone-should-learn- programmin...](http://blog.sidu.in/2012/05/everyone-should-learn- programming.html)

</comment><comment><USER105> The idea that you should learn X to "succeed at life" (whatever that means) is fallacious. We learn things to become better people as a whole, not necessarily to use those skills in our jobs. I bet Bloomberg is not using his math skills in his job and that's fine but he's probably thinking using logic (I hope) which is something you learn both from math and programming.

</comment><comment><USER106> Thinking that everyone should learn to code is an absurd idea. Most folks can barely use their computer, let alone care to program. A good percentage of web designers can't write markup, do you think my mom is going to fire up a shell?

Perhaps teaching some basic digital fluency is a more realistic goal, e.g., the role of computers in society, a primer on hardware, basic security, etc.

</comment><comment><USER107> > 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

Bloomberg didn't say anything about learning to code for professional reasons. If Atwood has forgotten that coding is a rewarding experience on its own, then he is no longer a voice worth listening to.

</comment><comment><USER108> People who make and apply laws regarding software should understand how software works and is made. They could talk to experts instead, but to choose right experts they also need to understand how software works.

So maybe New York Mayor don't need to code, but IP lawyers that works on software cases, and politicians voting on software related law - yeah, I think they should.

</comment><comment><USER109> I should probably disagree. The point of code being a _life skill_ is not that we want more people to write code on a _day-to-day_ basis. You should think about teaching kids to paint, rather than teaching them to read. It's not because we want more painters or because painting makes you better at the job you do, but painting helps you to see things from a different (artistic) perspective, to appreciate certain joys and certain other techniques.

Sussman has gone on record with a talk titled, "Why Programming is a Good Medium For Expressing Poorly Understood and Sloppily Formulated Ideas." That's probably an everyday use of programming which I've not seen, and it's part of what people learn as one of these "background skills" in college: how to think of things precisely.

I still get a lot of people who are shocked when I teach them relativity. You mean it's _not_ a bunch of mysticism about "mass is squared light energy"? You mean you can _prove_ that this Lorentz transformation doesn't lead to paradoxes? You mean you can derive it with high-school geometry plus some simple axioms that I can clearly understand? The only part which is hard to get across is the causal structure of "light cones", because people don't think in intersecting cones. (I have had some success with calling them "expanding light bubbles," with some reference to supernova explosions.)

Coming back to clarity, and finding it, programming is a good way to pick up that habit, even if you don't code on a day-to-day basis.

There is of course one well-known disadvantage which goes unmentioned in this Coding Horror post: coders are disproportionately more likely to think of legal systems as made of immutable and strict laws. The idea that a judge is supposed to, y'know, _judge_ the human costs of competing legal priorities, and make a decision which is both fair and in keeping with the laws as written -- this discretion seems to be missing. You see this as well with how coders approach pharmacists: it's as if pharmacy was no longer a _medical discipline_ and was somehow relegated to counting pills. No, that's what we code the robots for. Stop equating people with robots.

But if we remain sensitive to the humanity of others, then being able to code probably functions to a net benefit, much like Jeff's example of plumbing does. I mean, there are still occasions where you need a professional, but everyone should have disassembled the pipes to their sink at some point in their life, just for the experience.

</comment><comment><USER110> There is a lot to be said for avoiding the temptation to write "one more line of code." I used to work with a guy who would pride himself with reducing (whenever possible) the amount of code with every modification and fix he made. He really had it down to an art, and it greatly clarified the core functionality of the software.

</comment><comment><USER111> This makes me so sad. Why does Atwood mistake learning to program with becoming a programmer? I expect this kind of thing from naysayers and ignoramus, but Atwood is a hero in our community. I feel like he's forgetting a /s tag at the bottom or that he's trolling us all.

Next he should tell us to leave math to the mathematicians.

</comment><comment><USER112> How about learning to read code instead?

How about learning to distinguish bad code from good code?

How about learning to look at Atwood's code with a view to answering some questions: 1. How does this guy's mind work? 2. Can he think clearly or does he add needless complexity to everything?

Then making a decision whether you want to use his work or not.

</comment><comment><USER113> For all X, it is _always_ better (toknow X) than (not (toknow X)).

There are innumerably unpredictable circumstances that may arise in which it will prove useful.

Bureaucrats in general could all profit from some minimal understanding of programming if only to stop them saying things like: 'the computer says: no!'

<comment><USER114> Except in cases where a little knowledge of the subject is more dangerous than no knowledge.

(But I disagree with the post, teaching people to program would be a net gain I think but I'm sure most people won't bother so no danger of ever finding out.)

</comment></comment><comment><USER115> Two things about Bloomberg: The "taxpayers" pay him $1 a year (granted that doesn't mean he shouldn't do the job of Mayor, but just saying). And two: He OWNS a technology company. If I owned one and wasn't on the technical side, I'd be interested in picking it up as well

</comment><comment><USER116> While I don't agree that everyone should learn to code/program, I do think that everyone should learn discrete and critical thinking. Just the ability to break down a large problem (whatever domain it is in) into manageable chunks has helped me immensely throughout life.

</comment><comment><USER117> My main concern is that people learn a bit of the easy stuff, then extrapolate that coding is easy therefore inexperienced and cheap programmers are all that's needed to complete a project. Quality of code will drop, as will salaries (even for the experienced).

</comment><comment><USER118> Oh hey it's just like last time stupid money was chasing tech around and everybody suddenly wanted to be a programmer!

Once they figure out again that's it's usually tedious and unglamorous work that doesn't pay particularly well on average they'll lose interest again.

</comment><comment><USER119> What a negative message- not unlike the, "Don't be an Entrepreneur" talk from last week. I don't understand these high profile, obviously successful people with public personas being all, "Don't try to do what I did," thinking that will resonate.

<comment><USER120> I feel the takeaway is that you already, deep down, know what you need to do - so do that.

If you have a burning desire to learn how to program, be an entrepreneur, or whatever else you need to do to make your life complete, you're not going to let a little article get in your way. It is, however, sage advice if you want to become a programmer only because you see dollar signs, despite every bone in your body telling you that you have no interest in the study. That was not going to end well anyway. You cannot duplicate success by copying the actions of someone successful.

The harm in learning how to program if you are only doing it because you want to be the next Jeff Atwood is that you are completely overlooking the qualities you are sitting on, that come with a much great chance of providing your own success.

<comment><USER119> I'm not looking for Jeff Atwood or Phil Libin's approval or permission and I don't think many folks reading HN are either. :) Although perhaps I am guilty of looking for validation on some sub conscious level, but who isn't? Ultimately I was just responding to the _tone_ of the post - he makes many perfectly legitimate points. I just think he's missing the most important general one which is that it's not a bad thing for people to learn to program and become more technically/computationally literate.

Edit- tone isn't really the right word. It's the basic idea of the post that I dislike and not for reasons related to my own learning or business. I think it reflects a view of people, learning, etc, that's inconsistent with what's possible and all the opportunities that are open to everyone right now. I understand where you're coming about the sage advice, but think that's the risk/case with anything.

</comment></comment></comment><comment><USER121> You stole my blog post from 3 months ago, including the title! ;-)

[http://accidentalhacker.com/post/16116466587/please-dont- lea...](http://accidentalhacker.com/post/16116466587/please-dont-learn-to- code)

</comment><comment><USER122> All I know is I went to the HN homepage and I found some linkbait article by Jeff Atwood that was contrary to the other article I saw on the front page. Typical Bullshit.

</comment><comment><USER123> Same reason as why programmers need to take course in sales.

</comment><comment> wes-exp I, for one, applaud Jeff's attempt at deflating the hype bubble around programming. There are plenty of useful skills in the world to learn. Programming is one.

</comment><comment><USER124> I'd rather see a post titled: "Please learn to sell".

</comment><comment><USER125> The thing to remember here is that this is a man who's smug about not knowing C. His opinions on these things are not so useful.

</comment><comment><USER126> And a million insecure developers all cried out in unison, "WE AGREE JEFF!"

</comment><comment><USER127> Learn Metonymy. And it's use in marketing an idea.

</comment><comment><USER128> He could asses IT costs

</comment><comment><USER129> I think there's a knee-jerk reaction against the popularization of computer programming, and I think it's unfounded.

We have a sense that, because some 80 (possibly 90) percent of programmers write shitty code, that encouraging more people to program is going to flood the field with mediocre programmers and that we're personally going to have to maintain their legacy monstrosities. Somehow, I'm guessing that I'm _not_ going to be maintaining Bloomberg's business-logic DSL any time soon.

I think it's good that we're making people more aware of computer science and that programming is becoming cool again. I'm not a fan of tech bubble "coolness" (where traditional business types move into tech startups, usually in executive positions, because of the trend, but have no real interest in technology) but if people develop a genuine interest in how computers and programs work, that's great. It'll have all kinds of ripple effects: better and more widespread CS education (even in grade school), increasing technical literacy in important organizations, increasing appreciation for technical talent in the world at large, and quite possibly a more rational approach to business, government, and politics.

The real problem we face, in terms of the "Why do we have to deal with so much shitty code?" question isn't that these bad programmers are untalented. It's not a low IQ problem. It's a problem of dysfunctional work environments (due to a low appreciation for what programmers do in many companies) and a lack of incentive to improve. These "bad programmers" stop growing, because the bulk of development jobs don't encourage people to grow, so a lot of people end up learning basic Java best practices and that's it. They never learn Unix and its philosophy, functional programming and recursion, architecture, or logic. They get to the 1.2-1.3 level (scale here: [http://michaelochurch.wordpress.com/2012/01/26/the- trajector...](http://michaelochurch.wordpress.com/2012/01/26/the-trajectory- of-a-software-engineer-and-where-it-all-goes-wrong/) ) and either go into management or plateau. That's because the typical JavaJob setup is designed to bring up the rear while holding back the best, so people get into a mentality where they lose faith in the capability of the individual developer and management appears like the only place where it's possible to have real accomplishments.

Actually, if anything's going to liberate the horde of 1.2 developers from their JavaJobs, it's going to be making programming fun and cool again-- reminding these people that coding isn't just something they do for one job, but that it's a valuable and extremely versatile skill, _if_ they keep improving despite having no immediate economic pressure to do so.

</comment><comment><USER130> There are few jobs I can think of where learning a TINY little bit of coding could help as much as when you're Mayor of New York (or a major CEO, etc). If the guy figures out nothing else than that he can make a program to keep tally counts as he discards emails, he just has to click which category they belong to, or that he can send form letters programmatically, he will be far more productive. Yes, aides do both of these things, but with code you don't have to communicate what you want someone to do, you can just do it and tweak it until it's most helpful for you - when you're the one in total control you are just so much more productive.

I basically completely disagree with this submission.

</comment><comment><USER131> I have to say, I think everybody will learn to code in the future. It teaches logical thinking, which we just don't have enough of in today's society. And with the explosion of computers, it's going to be a handy skill; just like there are tons of amateur mechanics who can do a few things on their car but they can't do a complete overhaul.

</comment><comment><USER132> i have been programming for almost seven years,and only three years as a programmer.i don't think it bad to learn to code,but don't take coding as a way of thinking,you just need to know one or two programming languages,and not more.

</comment><comment><USER133> i'm surprised that people are arguing with this kind of questions here, totally a waste of time, gosh.

<comment><USER134> I agree, this is typical of Atwood and it's baffling that people still pay attention.

</comment></comment><comment><USER135> This guy was one of the people behind StackOverflow. And people wonder why StackOverflow deletes useful topics and is full of smart alec answers. This attitude and seriously flawed thinking is why.

Become a programmer, by all means.

But please do not become another Jeff Atwood.</comment>