150 comments

[ 4.0 ms ] story [ 180 ms ] thread
Interesting point: people need to know how different it is to customize a WordPress theme and building a Rails CMS. If, before knowing how to actually code, people can judge of the quantity and quality of work required to build something, the world will certainly be better.
Please do not compare coding to cooking.
While hardly isomorphic, for the purpose of the analogy I think the comparison works well.
Please justify why you think it's a bad comparison?

I think it's apt. Cooking shares many qualities with coding, you're under time deadlines to produce something for a end consumer (for the most part). There's lots of competing methods and you have to select which ones work best for the product you want to produce.

Most importantly you can cook something amazing that everyone loves, or a charred lump that no one will touch. Much the same as coding.

Rule 11213: First person to mention "time" when linked article does not include the term "time" takes 1 step backward, 1 step forward, 2 steps backward, 1 step forward, 3 steps back. Back to the future.
I was expanding on the concept and seem to have fallen into a time warp.
Coding doesn't necessarily involve time deadlines, and maybe cooking doesn't either, although it seems to. I agree with the rest of what you said though.
I know, which is why I said '(for the most part)'. 80%+ there's some kind of tangible time limit on what you're trying to achieve. Be it self-imposed or otherwise.
I really liked the comparison with cooking, I think the same way you do! You don't learn how to code to become a professional programmer!
>I think it's apt. Cooking shares many qualities with coding, you're under time deadlines to produce something for a end consumer (for the most part).

A, you mean like hundreds of other professions...

Sure, but I was talking specifically about the 'don't compare coding and cooking'. We can abstract it into a reusable template.
Cooking is way more simple compared to programming. The recipes are easily understood - a complete opposite to software specs.

Cooking does not evolve that fast compared to programming. Everybody loves their grandma's pie.

And most important cooking is manufacturing and programming is designing. Regular cooking is trying to reproduce something that was done as close as possible, while programming involves dealing with lots of specifics.

Please do not compare cooking to heating up food...
Few reasons: - Scalability issues - Confidence level in effort estimation - Resource planning (team may not be co-located)
No, it's a great analogy. Being able to whip up a delicious meal for 2 in your kitchen doesn't translate into being able to feed a banquet of 500.
I think learning how computers/software works is just as useful as learning history or geography or science, which we already make students learn.
I expected a similar post to hit HN, since I too was shocked by Jeff's comments. However I do not think people should learn to code for the same reason.

Sure writing a website is cool, but then again, learning plumbing is cool, which is the basis of Jeff's argumentation. Plumbing can empower you by giving you control over your own house and appliances, etc, etc.

I think the real reason people should learn to code, is because an increasing number will have to deal with machines in every day lives, often taking decision affecting the work (and general lives) of others based on their understanding of those same machines:

- The legislator who has to pass laws about computers and/or the Internet.

- The manager who has to assess the usefulness of a new software application.

- The teacher educating kids and preparing them for the modern world.

- The consumer who wants to make an informed choice when chosing the latest gadget, not blindly follow what marketing departments tell her to.

- The judge and jurors overseeing the Oracle-vs-Google case.

I want to make the distinction that I wish people would learn to Code, not so they can "make" stuff, but so they can "understand" stuff.

I don't think the comparison is apt, because learning plumbing only helps you with plumbing. Whereas coding knowledge can be applied to a lot of fields.

To me, there's an argument to be made that coding can be considered (or maybe, will one day be considered) like a life skill on par with reading, cooking, or playing music.

I agree it doesn't look like it right now, but I'm sure that a couple hundreds years ago the idea that everybody would one day know how to read seemed just as ludicrous.

I am absolutely not arguing agains this. Here's the extract from your text I disagree with:

    > I can’t think of many other skills that enable you to create something from scratch and reach as many people as knowing how to set up a simple website.

    > Just last week, I was able to come up with an idea and then launch a site in 2 days. That site was then seen by about 10,000 people in a couple hours.

    > Think about it: something I did reached 10,000 actual living people and had an impact (however small) on their life. That would never have been possible if I didn’t know how to code.
This text is arguing that the value of learning programming is in the software you will create and the impact it will have on a population. This would be a valid point when arguing why one should become a programmer.

Drawing on an analogy similar to the one you make: Learning to write is crucial today, even though I will probably never be a published author. Similarly, learning to code is important, but not because "you too, can make a website!".

Well, I think both point are valid. You should learn to code as you learned to write, to be able to function in a modern society.

And another good reason for learning to code (just like learning to write) is that it'll let you reach a lot of people, and possibly become extremely rich in the process. I guess that second argument is what Jeff Atwood is mostly disagreeing with.

People write text that reaches 1,000,000 people the same day they wrote it.
Didn't Jeff make the point that people should be taught "computer skill" for the reasons you just listed? You can learn about the ins and outs of technology without learning to code.
Jeff mentions advocates the need for "a basic understanding of how computers, and the Internet, work". As expected from him, he even insists a second time on understanding how "to get around on the Internet".

This is all great, but I advocate learning how to "code". I think that learning how to plug in your printer, transferring your pictures from your phone to your PC, or being familiar with the latest trendy webapp that automates your microwave's behaviour according to your GPS coordinates (a million dollar idea) is not enough.

I don't think everybody should learn to code, just like I don't think everybody should learn math. Also I become borderline elitist when it comes to coding professionally.

But as far as education goes, I'd like to live in a world where any college (heck, even high school) graduate would be able to read a simple Excel macro or bash script and understand the gist of how it works.

> read a ... bash script and understand ... how it works.

I wish I had this ability. (;

Dear Author, are you a mediocre coder?

Edit: This wasn't a derogatory comment. I merely wanted to point out that the Author probably isn't a mediocre coder and those people that are probably can't touch 10000 people in just 2 days. I really like thetoolbox.cc.

I would probably call myself a mediocre coder compared to the average HN'er.

But I don't think you necessarily need great coding skills to reach people. The Toolbox really is nothing more than a customized WordPress theme, and I'm sure I could find lots of similarly successful sites that are not overly complex from a technical point of view.

I wonder how many folks suggesting everyone should learn to code will replace a punctured car tire instead of plugging it.
"The first step is letting people know that learning to code is not that hard, and that if they put their mind to it they have a high chance of succeeding."

Is this even true? I think it's pretty well documented that the vast majority of the population actually has a high chance of failing. Look at failure rates in intro CS courses. Remember this?

http://www.codinghorror.com/blog/2006/07/separating-programm...

I remember when VBA came out in MS Office.

Now your average tech savvy office drone could morph their excel spreadsheets into a full blown application capable of processing business data without having to jump through any of the traditional hoops the evil IT department normally demands.

And we ended up with a ton of buggy, dangerous "mission critical" piles of garbage because they were "designed" and built by non-programmers.

Software programming is a discipline on the order of engineering and it will continue to get more complicated and require more and more education going forward. So no, not everyone should learn to "code".

We should be encouraging people to THINK like a coder - to approach problems in a way to identifies root causes and starts coming up with proper solutions.

I'm not in the valley so may it's vastly different down there, but outside (in Canada) tech is still considered a very specialized field, software development especially. It is not considered as simple as basic household skills like plumbing, cooking and building a deck. I would not expect my lawyer to 1) know how to code or, 2) code in a professional and useful manner.

I still think those «buggy, dangerous "mission critical" piles of garbage» are valuable.

If there was no VBA, the jobs these scripts were created for would still be done manually, with a mouse, by some secretary somewhere. "Getting a professional to do it" would never enter into the picture when you're talking about a BigCorp with a conservative, limited-budget IT department.

During my internship at a manufacturing company, I knew enough about VBA to record a macro in Excel (just record, no actual coding involved) to automate ~10 minutes of work I had to complete monthly and included step-by-step instructions for how to run the macro and what the macro did.

When I came back a year later after graduating, I learned the process was again being done manually because my replacement did not have even a basic understanding of how to interpret what a macro does from the script.

A few months ago, I automated ~6 hours of monthly Excel work through ~4 hours of trial and error of recording macros and manually editing them. I have zero training in coding other than osmosis from my brother who is an iOS programmer, but I wasn't afraid to screw up enough to figure it out.

Based on my first experience, unless my eventual replacement has at least a curiosity about how macros work I wouldn't trust them to effectively run my script over the long term--if anything breaks, they won't be able to fix it.

The point is, a lack of basic, basic understanding of coding could end up costing the company the 75+ hours/year I was able to save with a "buggy, dangerous...pile of garbage" when I either move to a new role or leave. This was something which would never have been a high enough priority for our coders to write for us. Multiply that through 25 people in our finance department, and you're talking about needing an additional full-time employee.

Can anyone recommend a good place to learn enough VBA to move past the buggy and dangerous stage?

You hit on an important point: curiosity. Most of the best programmers are deeply curious, and I don't think that can be taught, though I do believe it can be cultivated from an early age.

On the other hand, showing people how to safely experiment in ways they can be sure won't screw things up may be very empowering and allow them to express their creative drive.

I kind of agree with you. I think everyone is inherently curious right until the point when a smart-ass parent says "Because I said so, and now shut up and don't ask questions."

My parents did not do that. Even today, they pride themselves on the fact that when I used to asked them a "What would happen if..." question, they'd be like "Why don't you try it out". Sure I may/may not have got myself in a sticky situation, but the point is they didn't shut me down. Also, if I ever broke something (which was fixable) my dad would actually open that damn thing and fix it during the weekends, talking and explaining to me what the things inside do. Sure I may be only 7-8 or even 10-11 but hey that adds more to my curiosity.

At their angriest, my parents have assessed the situation to check if it's fixable by a human at my age/capacity and given me a stern "fix it" look. Boom, that was a blessing in disguise as well because now I'd be all like "Shit, how DOES this work".

[Note: I'm neither married/not have kids...yet]

The problem that I've seen with others/their parents/their children is that they get annoyed quite quickly. And when you shut down a 5 year old, you can clearly see the pained expression on his face.

They simply lose interest in everything and end up becoming drones. And they're afraid of doing anything new because they worry if they screw it up, their parent will come home and beat them up.

Very few people look at a medical problem and decide to "hack it" themselves without seeking treatment from a Medical Professional. Neither to many people seek legal solutions without the aid of a Professional Lawyer.

Software development is a highly skilled discipline. Sure, you can teach your accountant to code fizz buzz - but what use is that to them? Are they going to spend the thousands upon thousands of hours to become proficient in development before realizing it would be cheaper just to hire it out?

Again, focus on teaching a coder point of view - a way of thinking.

Shit code will come from non-coders at the same rate as from coders. The reason that your buggy and dangerous missions critical piles of application (that eventually DID something useful for whoever used that) is garbage is because the people who coded didn't know a single thing about coding, and simply dived into it trying to achieve something they needed, and it worked [up to a point].

That's the whole point of this, learning to code gives you the option to make something you otherwise would consider magic.

You say you do not expect your lawyer to learn to code, but do you expect him to have basic mathematical tools to be able to have a conversation with him about stocks and options and percentages, right? Well, in the not so distant future these simple mathematical tools that we learn early on in life will be incorporated with basic programming tools.

No, lawyers still won't be able to code a Facebook from scratch, but they will be able to code basic HTML template for legal documents, and generate simple reports when they need to. Obviously they'll have secretaries and code monkeys that will do their bidding for money, as always, but they will still know the basic principles of software development, unlike today that most non-technical people consider software as black magic.

It's the "knows enough to be dangerous" problem.

It applies to a lot of professions. We see it applied to the legal profession all the time here on HN.

No lawyer likes to find out that the Accounting Dept. has been drafting contracts, any more than an IT person likes to discover that the CPAs have developed a pseudo-enterprise accounting "system" in Microsoft Access.

But I think there is a middle ground: It's not practical to consult a lawyer for every click-through agreement you encounter on the web, just like it's not practical to launch an enterprise IT project every time you need to automate some tasks in a spreadsheet. Some basic skills in these areas are good to have. Just know your limits...

For learning to code: -You develop analytical and problem solving skills. Similar to math, but more practical (how many people really use Calculus on a daily basis?) -You understand how computers work. No explanation necessary. -All the other good arguments people have made.

Against learning to code: -More bad programmers. -Even worse, more non-programmers who think they can code. Example: Someone does CodeYear and suddenly thinks they are a expert coder. Starts web design business. Sells poorly built wordpress themes to unsuspecting small businesses. If they have low prices, it makes potential customers think that all coding should be cheap("if they can do it for practically free, why should I pay you more?"). Thus, the entire industry suffers.

That isn't to say CodeYear is bad. I like it. It's great for people who actually want to learn to code and don't know where to start. It's bad for people who think they can sell websites after a few hours.

I think learning to cook is an interesting comparison. Would people react the way they do now if someone wanted to learn how to cook instead of learning how to code? I think learning to cook is a really worthwhile skill. It will teach you about food, ingredient and chemistry. It will maybe get you thinking about how we produce food in our world.

The same goes for coding. It will get you thinking about a lot of things that really matter to your life and the world.

Learning anything is a good comparison. There is no harm in learning. Better to be a mediocre guitar player than not be able to play to guitar at all. It expands your mind, and lord knows you were just going to spend the time watching Desperate Housewives reruns.
I'd say coding is really a lot like learning a martial art. You get exercise (brain/body), you can use it to overcome difficulties (formatting complex documents/leg-sweeping a belligerent drunk), and you can develop it into a career if you focus. But really it's just a set of tools that have a wide ranging use. Of course, you also have to practice so you don't get rusty.

I think everyone who has a mind for problem-solving should learn to code. Heck, even people who aren't especially right-brained can use code to be creative and artistic. And sometimes it's just fun, damnit.

Expecting everyone to learn to code is immature, condescending and unrealistic. Grow up.
I agree more with this rather than the other one - I see coding as speaking, writing, cooking [food], or composing music. Sure, not everyone in the world HAS to know how to compose music, but we still know how to compose a simple melody in our heads, and we sure as hell need to know how to write.

Coding isn't hard, coding is simple - simpler than a lot of other complicated things we have to learn as we grow up - and as such it should be mandatory in a world governed by computers.

Computing is taking a similar path in everyday life as finance. As individuals, I don't feel we need to learn how hedge funds, or complex derivatives work, but nobody denies it is beneficial to learn how to manage money, make basic investments, and plan your retirement. The urge to teach programming isn't as much about teaching everyone complex and theoretical computer science, but to teach basics that will benefit them as we move into the information age where technology permeates nearly every business.
(comment deleted)
I think everybody should learn to code at school when they're kids. That way, they can decide if they want to become real programmers/software-engineers or something else.

Just as every kid learns mathematics does not mean he/she has to become a full-fledged PhD researching manifolds in Topology. But they still need to know how to calculate percentages, basic statistics etc to get through life more easily.

In the same way, giving instructions to a computer the "hard" way instead of via clicking on buttons and letting magic happen is often a good exercise to appreciate the power and freedom it gives you. I remember doing this when I was 9 or 10 and doing locate, print, cls repeatedly in a BASIC loop let me create an animation I could control quite precisely (well no, CPU cycles came into play!)

But that's the precise reason, 18 years on, I delve into programming GPUs, wrote games with advanced Direct3D shaders for them and am currently wrting OpenCL code to solve complex equations on them.

It's all because of the locate, print, cls loop!

Learning some VBA counts as learning to code in my opinion.

I've temped before and been told to do nothing more than prettify and unify formatting in an Excel spreadsheet (for later insertion into a db).

(555)555-1212, 555.555.1212, (555) 555-1212, 555-555-1212, and so on to some standard format is a 10 minute job regardless of size.

Not everyone needs to be able to really program, but a healthy respect and knowledge of what a couple of one liners can do saves lots of money. That's money that could be spent on truly productive tasks that would actually drive the economy and not burden it.

I can hear it now, "but hey, during code year I learned how to hello world, why is your estimate so hi, it's not that hard".

We should REALLY do this with healthcare. Who needs doctors. All hail self diagnosis year 2013!

> We should REALLY do this with healthcare. Who needs doctors. All hail self diagnosis year 2013!

Did you ever take a biology class?

All hail basic life saving skills 2013 indeed.
The people who would say that are the people who already do.
Sacha, I am a fan of yours and usually like your material, but I just can't agree here. You took so much for granted in this post. Deploying a website that 10,000 people will see is not trivial, whether you personally did it or not. Here's my beef, specifically:

1. You already knew how to design. In fact you are a very talented and well known designer. If you didn't have design skills, chances are a huge huge amount lower that anything you put out will make the rounds - design is super important, and you of all people know that. And that's something you need to learn as well, so tack that on top of the time it takes to learn how to code.

2. Learning how to code != making websites. In fact, they are very different. To make a website, not only do you need to either have a designer on hand or be good at design as mentioned above, but you also need to have a very good understanding of how the web works. That means filesystem structure, http, ftp, domain names, web hosting, then add html and css to the javascript you've been working on. THEN if you want your site to be anything more than static, throw in back end code, databases, web frameworks, etc. on top of that.

This is a MASSIVE stack of things to learn, and I don't know a single person who knows all of this and doesn't work full time doing this stuff. "Learning to code" seems like a cute thing you can make a resolution to work on as a hobby, and maybe it is. You might be able to pick up the bare basics of programming in your free time, if you work hard. But making something significant like you claim here is a completely different deal.

3. You never dispute or even address the main point behind Atwood's article - that while programming is great to learn, the trend that 'everyone should learn to program' as a base skill along with reading, writing, and math is ridiculous. It's nowhere near as important as these other skills, and he makes a number of other valid points as well which I'm sure you don't disagree with. You argument was simply that programming is cool, so you should learn it. Sure, I agree, and I would have said the same if I only read the title of Atwood's article. But I feel like the way you contested it was uninformed and completely missed the point.

3. You never dispute or even address the main point behind Atwood's article - that while programming is great to learn, the trend that 'everyone should learn to program' as a base skill along with reading, writing, and math is ridiculous. It's nowhere near as important as these other skills, and he makes a number of other valid points as well which I'm sure you don't disagree with. You argument was simply that programming is cool, so you should learn it. Sure, I agree, and I would have said the same if I only read the title of Atwood's article. But I feel like the way you contested it was uninformed and completely missed the point.

I'll dispute the main point.

As computers permeate more of our everyday lives it becomes necessary to understand them on some level. Nobody needed to learn how to read until there were books everywhere. No one needs to be an English major to pick up a book and learn to read. The benefits we know are enormous to adopting this skill.

But lets consider a world where books were everywhere but only an elite few felt it was useful to teach people to read. Knowledge as we well know is power and if only a few had the ability to pass on their knowledge amongst themselves then they would have a significant advantage over those who cannot read. The unfortunate masses who could not read would never know the full extent of the forces that work against their best interests. How could they?

Now we're in a world where there is more computing power in your pocket than that which sent human beings to the moon and back. Yet the non-programmer has no idea just how useful it is. The only literacy they have with computers are as appliances. They don't realize that these devices carry with them processes that may or may not operate in their best interest and they have no way of knowing that without being able to at least have a basic literacy of computers and programming.

Becoming a master at programming is still a difficult task that few will achieve. Just as becoming the next Nabokov or Salinger won't come to every person who picks up a pen and paper. However that doesn't mean we don't need to teach everyone how to write. We give them the basics and its up to them to use those tools if they so choose and pursue their own paths. However if we keep them in the dark then they'll have no hope.

Teach everyone to code. Computing is emerging as a new medium of expression and the technology is embedding itself in our every day existence. People need to be literate so they are able to understand the consequences and benefits of this technology. It's 2012 and most people I know still think computers are practically magic. They should know better and its our fault for not educating them.

As computers permeate more of our everyday lives it becomes necessary to understand them on some level.

I vehemently disagree on this. Apple has made a silly fortune proving the contrary.

If you need deep understanding of a device to make it useful then the designers have failed to provide you with the right abstractions.

Agree. And along the same lines an entire industry grew around the fact that computing products before Apple (particularly DOS, Windows etc.) were difficult enough that the average person (say someone who might be urged to code now) did not have the desire or aptitude to learn how to do it themselves. I'm sure everyone knows many of these people who giggle about how stupid they are with computers and have no interest in learning how to fix the simplest of problems.

Some people just lack the appropriate base skills to fool with computers and certainly programming. They will always need a "tech guy" and have no desire to change that for a reason. It's not that simple to them. Not because they are stupid but because it's not their thing.

I like some of Apple's products. I don't disagree that design is important and that the interface should hide the complexity where the complexity is meaningless to the use experience.

However, that has nothing to do with the point I was making.

>I vehemently disagree on this. Apple has made a silly fortune proving the contrary.

Totally orthogonal.

Apple cares about UI and attractive industrial design, and was the first companies to really get that in the computer space (and later in the MP3, smart phone, and tablet spaces). Good UI design is good for experts and novices alike. Do you really think that most people who used DOS computers once upon a time would really want to go back to 100% command-line interactions? (Yes, I know there are exceptions in the Unix crowd who swear that vi IS sliced bread and that anything not on the command line sucks...but there are probably 10x as many "expert" developers who swear by GUIs. Can't please everyone.)

The key difference is that, if you shy away from programming, there are huge categories of things you will never be able to do. And until you know how to program, you won't even know what those things are.

The "learning to read" analogy (elsewhere in this thread) is good. It's a powerful skill that, until you know it, you don't even know what it is you're missing.

As computers permeate more of our everyday lives it becomes necessary to understand them on some level.

You can say the same thing about any number of technologies that permeate our (western, and increasingly developed) lives - plumbing, electrical, cars, landscaping etc. While it's true that we should have some understanding of these technologies (checking the fluid levels in a car, snaking s small pipe, running A/V on your PC), expecting everyone to learn programing is like expecting everyone to learn pipefitting, carpentry, etc.

There is only so much time one has, folks should focus on their passions and let the experts take care of everything else.

Your conclusion on time is exactly why learning basic programming stuff like Variables, If then and For loops are powerful.

That is because unlike plumbing, electrical, cars, landscaping and like reading, writing and numeracy, basic programming augments your cognitive toolkit. In the least, it enhances rigorous and corner case thinking. It also makes learning abstract concepts easier, it allows one to reach beyond analytic solutions of equations and to access large amounts of data and automate the handling of said data.

If a computer can enhance many aspects of people's lives then they get more utility in having more powerful basic mechanisms of interaction for automating a program's behaviour. Having basic computer literacy would have definite positive utility for society.

Learning to program is not like learning to fix a car, it is like learning to drive a car instead of hiring a driver.

Programming is not like carpentry or plumbing.

With only an intuition for basic mathematics, the ability to read, and maybe a layman's understanding of fundamental physics one can come to understand enough about carpentry and plumbing to solve their own problems.

The same isn't true for computers. We don't teach computation in schools. To learn programming you have to scratch your own itch or wait until you get to college (in most places). There's no intuition about computation, no fundamentals that are taught and widely adopted. The average person doesn't sit down at their computer and understands what is going on, even in some small intuitive way, when they save their spreadsheet or click on a link in their email that takes them to their banking site (and subsequently they cannot even put together why, months later, they are the victim of bank fraud). Without even a basic understanding of the fundamental principles of computation these people have no idea how this technology is affecting their lives.

I'm not saying that everyone needs to be a professional programmer any more than everyone needs to be a master carpenter. We don't teach math in early education in the hopes that every child becomes a mathematician. We do it because it gives them tools to navigate their world and overcome the challenges of modern life. So too must we teach them computation. We don't want them all to become programmers but it is useful to know so that they can have the intuition to solve their own problems and start using computers as tools.

1. You already knew how to design. In fact you are a very talented and well known designer. If you didn't have design skills, chances are a huge huge amount lower that anything you put out will make the rounds - design is super important, and you of all people know that. And that's something you need to learn as well, so tack that on top of the time it takes to learn how to code.

We often take for granted the effort and expertise needed to do something that we can do so easily or has become second nature to us. This is sometimes why the better you are at something, the more painful it is to watch someone else do it poorly.

I'm actually kind of tired of hearing, "there's no other field that lets you create something from nothing" vis a vis programming. Look: I LOVE coding. I LOVE programming. I think it's fun and challenging, etc. etc. But it's not the only creative outlet that has ever existed.

Have you considered a pencil and a paper? Crayons? Markers? Paints and a canvas? A hammer, some wood and some nails?

"Ah, but that requires something to create something!" Yeah? So does programming. It requires a computer (or access to one). It requires programs to run your code - free or otherwise. In fact, I'd argue the barrier for entry into programming is SIGNIFICANTLY HIGHER than MANY other creative outlets.

True, but mastering a pencil and paper is going to have fairly limited benifits, compared to understanding how a computer works (considering that nearly everything you do has something to do with a computer).
Actually I think real art & design skills are already becoming more valuable than basic coding skills. As software becomes more and more about aesthetics and human interaction a really good designer with a strong style is going to be more valuable than the typical code monkey.

I know if I had it all to do over again I might trade my math & science classes for drawing.

I can agree with this. The fact is that companies are making it easier for people to make programs (note that most of them don't go anywhere like Android App Inventor) making it much more reasonable to have an art background than it used to be, since the entry level is, theoretically, lower.
Ah, that is until you look at the average salaries for developers versus designers.

Heck, even look at the average salaries of illustrators vs. graphic designers.

It's also MUCH easier for a developer to bootstrap and start a project on their own (be it a app, website, or add-on) than a designer/illustrator. The latter group can start some interesting projects on their own without needing to code but they are GENERALLY less scalable and lucrative.

This comment, I believe, completely undervalues the ability to communicate. A lot of the biggest changes in our world, good or bad, were spawned from books and writing. Written communication is still at the heart of our infrastructure. If you think about it, computers are mere vessels for messages. Aside from complex scientific computation and some entertainment, most people use computers for communication and for building things that allow communication.

If you can clearly and passionately describe a change you want to see in the world, you can get a lot of people behind you. Writing does, and always has, helped with this. I'd say being a very good writer can have a lot of benefits.

Now if you pair good writing with good computer skills, you have a the ability to get a powerful message to billions of people =]. I'd say they are both complimentary and extremely useful tools.

Yes, but code is the one of the rare things that can multiply your efforts...in the same way that a it'd be useful to be able to construct wheels and levers before the industrial age.

But code goes further than that; since so much of our world is now digital, it multiplies these efforts in virtually every field, including the arts (there's a niche to be filled in custom automating the batch processing done in the photo production industry)

This is true, but the same can be said of being a great writer. George Orwell set out to have an impact on the world and he is still doing so long after his death because of the strength of his writing.

The same can be said of being a great orator. Cicero is still known today largely for his oratory skills, and similar skills have served president Obama.

So does being a great biologist and research doctor. Edward Jenner saved countless lives through is work.

Code can multiply your effort, and that is why I code, but it is not the only thing that can, and in fact many technologies exist to multiply the effort in some form or fashion.

It is not the only thing that can, but then again not all things have the same multiplication coefficient.

Clearly being a great writer, orator, or doctor have high coefficients. Being a great plumber probably has a lower coefficient. Being a great doorman might be still lower on the scale. (I'm not saying there's anything wrong with being a doorman, just taking it as an example of a skill with a low change-the-world coefficient)

I think all things being equal, it's better to learn things with a high coefficient. Of course personal enjoyment is important too, so when I say "everyone should learn to code" I'm of course not advocating forcing people to learn to code against their will…

Could you make an impact (even if a very small one) on a large number of people over the course of a weekend with a pencil and paper?

I've never had a piece of art or drawing save work/time/money for me but we have apps that do this everywhere.

Art is an amazing creative outlet and I've seen some awe inspiring drawings/paintings but I've never seen one with a tangible benefit.

I think if you asked several highschool or even college students who painted Starry Night or Washington Crossing the Delaware you'd get a lot of blank stares. Ask the same kids if they know of or use Facebook; I'd bet more kids know about Facebook.

I'm not saying that everyone is cut out to be a programmer but I do support everyone trying it out. Zuckerberg didn't create Facebook with a pencil and paper.

Yes, you can have an impact - a very large impact on a very large number of people with just a pencil and paper. Martin Luther did it.

Of course, that's taking things to an extreme, but you get my point. And sure, it took him longer than a weekend, but I doubt most 'disruptive' works of programming were born in a single weekend.

(EDIT: I'm not sure why Luther's 95 Theses popped into my head above any other body of work. But it's pretty indisputable that it was awfully impactful, and were, largely, just pen and paper (or quill and parchment... whatever :)))

Could you make an impact (even if a very small one) on a large number of people over the course of a weekend with a pencil and paper?

Gandhi made a huge impact on a vast number of people and all he had was a white cloth and a pair of glasses! (albeit it took longer than a weekend)

Joking aside, if everyone learnt to programme then there would be no need for specific programmers. Yes, it's frustrating when people don't know the basics, but I have no idea what to do when it comes to plumbing. These are very distinct jobs. I take my car to a mechanic for the same reason. I do not need to know how the plumbing in my house works to take a shower, or how an engine works in order to drive my car. Facebook or Amazon do not require their users to understand how programming works.

If your code requires someone to understand the basics of programming then you have failed as programmer to understand your target audience. Granted you have apps that save you work/time/money, but your basic user should not need to understand what is going on under the hood.

My viewpoint is that I think everyone should learn a very very very basic level of programming and for two reasons:

1) Those who like it will take it further.....

2) Even writing a trivial program requires getting certain sorts of thought processes right. Once you can write trivial programs you may not be valuable as a programmer, but you will be empowered to interact with computers if you ever find yourself in your chosen work on a tangent where that's helpful.

> It requires a computer (or access to one). It requires programs to run your code - free or otherwise.

I know what you're saying, but I'd like to point out that you don't need a computer to write programs. I started writing programs with pen and paper back in middle school (before my family owned a computer), and still often do that. Nowadays, most of them do end up being digitized and executed, though.

Alonzo Church, Alan Turing, Haskell Curry, Moses Schoenfinkel, etc., were writing programs before computers were even invented ;)

And Ada Lovelace before electricity. :)

"The notes [...] include in complete detail, a method for calculating a sequence of Bernoulli numbers [...] which would have run correctly had the Analytical Engine been built. Based on this work, Lovelace is now widely credited with being the first computer programmer and her method is recognised as the world's first computer programme."[1]

[1]http://en.wikipedia.org/wiki/Ada_Lovelace

How could I forget Ada Lovelace? Facepalm moment. Thanks.
I know what you're saying too, but (at least for me) a program that is only written down and not run is typically a dry affair.

Seeing a thing come together as you fiddle with it is just satisfying.

I agree that there's something satisfying about watching a computer execute a program, but I find pleasure in the process of just writing programs, too. At that point, though, it's just coding for coding's sake.
You're thinking about maths, logic and algorithmic, abstract disciplines that go nicely with programming, coding, or however you would like to call the physical implementation of the mathematical ideas derived using your pencil. Although you could argue about when exactly the step is made from abstraction to implementation, I like to think that it's somewhere between compile time and throughout testing.
They were programs in every sense of the word. Back then it was often QuickBasic or x86 assembly language, nowadays they tend to be either Lua or some Lisp (usually Scheme). I actually find the process helpful, because when it's not as convenient to just run the program to see if it works, I find that I reason about the programs more deeply. YMMV, of course.
I agree, and I'd argue that you can program something in 5 minutes, but you can't program something well if you haven't put in years of practice and dedication.

It's just like anything else in the world. Any jerk can grab some paints and make some lines on a canvas, but the ones who take the time to understand art and practice for years are always going to be better. Always.

So should you learn to code? If you're interested in it and you really like doing it, then yes. Otherwise you're going to waste your time and everyone else's time. Coding is just another art form. It's a means of expressing systems that run on computers. If this doesn't excite you, don't do it!

Learn something you're passionate about....because you'll never get really good at something unless you're fired up about it, and what's the point of doing something if you aren't going to completely commit? There's so much in this world to learn and be passionate about, why spend your time learning something you don't care about?

Wholeheartedly agreed.

Good writing can change just as many lives, just as profoundly as good coding (think of that one book or that one blog article that really made us reflect upon our own lives).

We all have great things to say: "Please Learn How to Write"

I agree, but I definitely get his point about feeling empowered. You can't escape it nowadays.
Adding to the list:

Singing

Dancing

Standup comedy

Story telling

etc.

So yeah, saying programming is the only field that we can create something from nothing is just hogwash.

Yes, but nobody is saying that.
Wait,

You don't have claim that programming is the bestest, most creative and constructive thing ever to say that programming has a mix of creative, constructive activity that is unique to it and can be uniquely satisfying in a certain way (just as painting, dance, martial arts and system administration have their unique aspects).

I doubt anyone is actually claiming that programming is the only field in which you can create; that's a pretty thin strawman argument. But programming IS the highest leverage means of creation invented, however.

I say this as a programmer, photographer, woodworker, electronics hacker, and musician. Nothing else comes close to programming in how much you can create with so little.

In fact, programming can help you with ALL of the other hobbies I occasionally indulge in. Being able to write music doesn't make me a better photographer.

And you really are creating from nothing; you could create an app at your local library if you had some kind of programming skill but no access to a computer of your own. If I lost everything but still had access to libraries, I would still be able to do programming work.

Only in digital photography are you "creating from nothing"; every other hobby I have requires you to use up consumables, and every one of those hobbies have involved investments in equipment greater than what I spent on my latest laptop.

I couldn't create anything interesting with pencil and paper myself, and I would also suggest that it would take FAR more skill in drawing to begin to make a living using pencil and paper than it would skill in, say, web development, to make a living creating web pages.

I KNOW web developers who are barely "programmers" compared to what I know about programming who do a good job and make a good living working on web sites for people. That kind of range of skill can only exist because of the extreme leverage you get from knowing anything at all about programming.

Yes, programming IS different.

I think this is the key to this debate: in the importance range of all the skills one can learn, where does programming fall?

Nobody would argue that plumbing and talking have similar importance and value. But what about plumbing and programming? Or programming or reading?

I personally believe that programming is closer to reading than to plumbing for a majority of people. I'm glad to see you feel the same!

Programming differs from other creative activities in that it's about creating a processes that create things.

Consider art. You draw a picture with pencil and a piece of paper. In programming, you define a process of drawing a picture.

True, you can still draw by hand just fine. However, imagine a picture that only exists when someone is looking at it—a picture that you can't draw in advance, only define a process that will draw it at someone's request. That's interaction, which is what programming is mostly about.

There are other activities that involve defining processes of building things—entrepreneurship comes to mind. However, programming seems to be the only one where building a process of creation is so pure and comparable to simply building a thing.

"I think everybody should learn to code, for one simple reason: knowing how to code is hugely empowering."

Oh please, before lecturing what everybody should do - first learn some empathy, that will blow your socks off!

Think about it: something I did reached 10,000 actual living people and had an impact (however small) on their life. That would never have been possible if I didn’t know how to code.

(ability to code) != (eyeballs reached)

I've written blog posts viewed by 100,000 people in one day.

I've also written software used by 1 person to save millions of dollars.

Both are rewarding, but I'd still rather build something. I think that's the most appropriate metric.

(ability to code) != (eyeballs reached)

Not directly, maybe. But having some acknowledgment of basic data principles (particularly delimitation, meta-ness, maybe even regexes) can substantially increase your ability to write digitally. Markdown, for instance. And of course, being able to maintain or customize an existing platform, whether it's WordPress or Tumblr.

It's sad to say, but delimitation is not a skill that is in the mind of the average professional adult. Try sending someone a tab-delimited text file to someone who has only known CSV or XLS sometime.

I'd agree that there are computer skills that are generally useful, up there with reading, writing and math.

But they're far less complex than code. And I can't say I've ever heard the "learn to code" people advocating them.

As a person in the media/reporting industry, I've almost committed to making it my life mission to teach people the usefulness of basic regexes.

I've taught a lot of "learn to code" sessions...My main goal is to not for them to remember the specific syntax, but that programming gives you the ability to repeat a task thousands of times (for loops) and differentiate between them (if statements)...how many (non-worker-drones) people would be content spending significant amounts of their dayjob time doing manual copying-and-pasting and click-series-of-links-to-download-reports if they were aware of these basic coding constructs?

I have a BS in CS and have tried so many times, even learn regex the hard way, and still can't remember the special characters and how they interact. Oh the pain.
Great points. I like this rewrite for the plumber at your local McDonald's:

"Think about it: something I did reached 10,000 actual living people and had an impact (however small) on their life. That would never have been possible if I didn’t know how to plumb."

This statement works equally well for many professions.

Think about it: something I did reached 10,000 actual living people and had an impact (however small) on their life. That would never have been possible if I didn’t know how to code. != Imply that (ability to code) = (eyeballs reached)

I don't think the implication was supposed to be that you can't reach people without knowing how to code, but that in this instance, him knowing how to code gave him the ability to have an impact.

It seems an important enough distinction to point out.

Edit: <i></i> didn't make italics Edit 2: Thanks wallawe

put * on each side of the word or phrase you are trying to italicize.
It seems to me like there are ulterior motives behind a lot of programmers' hostile attitudes toward non-programmers learning some of the craft. If I didn't know any better (and I don't), I'd say that people think, consciously or otherwise, that it will somehow cheapen their skills or experience if some newbies learn basic development. I disagree. I think that if anything, it will give others more of an understanding and appreciation for what we do.
Not me. I'm just tired of once again seeing all the hoi polloi rushing in because some dumb photo sharing site just sold for a billion dollars and this is going to be a easier way to earn their boat and summer home than taking all those boring business, law and medicine classes.
I agree that people trying to learn in order to get rich quick is good for nobody (it's akin to the 100%+ increase in CS enrollment around 2000 that I remember some of my professors telling me about). That being said, Bloomberg's initiative to bring NYC up to speed with the technology through better education and a high-tech business environment certainly predates Instagram's sale.
If only :)

The more likely thing (in my opinion) is that people who're passionate about coding will learn on their own and seek out material without the help of these sites. Most of this stuff will probably pass as a current net fad. There has never been a lack of available learning material & people keen to share their knowledge on the net!

Not at all. Imagine you're a full-time professional journalist working for a paper or a TV station, and I tell you, because I've written a blog post, I'm a journalist too now, and by the way, it isn't that hard, anyone can do it. You might feel that I didn't quite get it. You might also feel that publishing articles without proper fact-checking is irresponsible. And so on.
(comment deleted)
As I recall from the 1980's, there are two types of people in the world, programmers and victims.

I think Atwood's point is valid in so far as the world probably doesn't need politicians coding the software by which government services are provided. Nor do we need everyone writing their own web pages, one GeoCities was enough.

On the other hand, it seems to me that programming is going to increasingly be seen as a part of basic mathematical literacy. It's just a whole lot easier to solve a layered arithmetical problem with javascript than with a conventional calculator.

In other words, most people should try to learn the lightweight scripting which allows for better exploitation of all the computing tools.