Hacker News new | comments | show | ask | jobs | submit login
President Obama calls on every American to learn code (youtube.com)
356 points by bbayer on Dec 9, 2013 | hide | past | web | favorite | 426 comments

Speaking as a non-coder, but as one who did minimal things with programming-like higher-level stuff ranging from the old DOS batch files to VBA and some dabbling with SQL, I am curious whether real engineers believe the idea of broad literacy in coding truly would be valuable and, if so, how exactly.

I am not speaking as a skeptic, just as one who does not readily see the point and wants to know.

Of course, we are in a digital age and there is incredible value in knowing how to code for the person who really masters this skill. And, among those who do master it, you will of course have various gradations in skill level ranging from profound to excellent to good to competent to serviceable, and these in turn will give the bearer of such skills a range of opportunities commensurate with the acquired skill level (and, when I say skill, I don't mean mere technique but also inspiration, insight, imagination, and whatever else it takes not only to pound something out but to do it in ways that stand out).

That said, however, if I were to look, say, at 100 random friends and acquaintances, I would question what good it would do for them to learn a few basics about the syntax of some programming language, to learn a few things about programming objects, and to learn a few things about control structures if the sum total of all those few things is simply to understanding minimal things about how coding works without being able to apply that knowledge effectively to anything in their real-world lives. In my own case in having hacked through some minimal interpretative stuff, I at least had some professional uses for this sort of thing (e.g., using VBA to systematize a few MS Word functions needed in our office). But, even at this level, most of the people around me - being non-programmers - would run in horror from the idea of even getting into that level of trying to interact with a computing environment. For the most part, they were content to know as little as possible about any of the inner workings of a computer and were totally uninterested in delving any deeper. And these are the people who are out there by the millions who have always been drawn to the simplest ways of interacting with their computers (e.g., mouse and not keyboard). In my experience, unless people naturally have a mathematical or engineering "bent," they simply would rather not deal with understanding how something like a computer works beneath the surface but want only to grasp its benefits at the highest level with the least effort possible.

If most people are indeed like that (and I believe they are), how would it benefit them in a practical sense, say, for future educational curricula to mandate taking a prescribed course in learning to code. Even if this sort of thing were required, wouldn't this be just like a prescribed foreign language course in middle school that one has but a fleeting acquaintance with, only to have little or nothing stick beyond getting past the requirement for the purposes of passing a class. What residual value would stick from such fleeing interactions with the rudiments of coding?

It seems to me that, if one is to derive true value from learning to code, one needs to devote a significant level of dedicated hard work toward that effort and, if one fails to get beyond a minimal threshold, the only value gained is that of a very generalized form of knowledge that has little practical use in the real world. And I would suspect that most people really do not want to devote such an effort to this task. A good many do, of course, and, as noted, this does have huge value in our digital age for those that do. But why expect it of most people?

There is nothing wrong, of course, with our political leaders encouraging young people to learn to code and this may inspire some to do so. But coding is not really like, say, writing, where gaining a minimal proficiency leaves one in a much better position than not knowing how to do it at all. It seems that, if most people can't get beyond some minimum threshold to make the endeavor worthwhile, learning to code would not help the great majority of people who are not interested in making the sort of dedicated effort that only a relatively minority will in fact make to justify the effort in practical terms.

That is my layman's view. Do those who really know this stuff agree or is this just some disconnected elitist view of people that doesn't fit with modern understanding? I would genuinely like to know because, to me, it does not seem like a close question. Am I just being prejudiced here?

Just like the "prescribed foreign language course in middle school", a bit of programming practice may widen your horizon, and help demystify these seemingly opaque machines and networks.

It's about practice, not "knowledge" per se. Basic tasks, like: I have a folder full of files, how do I get the filenames into a text file or e-mail? Five-liners in high-level languages, the equivalent of asking for directions in a foreign tongue.

Of course, that idea comes from a time when one would own a universal computer, and own one's own data. You can argue that for many people, the filenames and text files I'm talking about are already a thing of the past, that it's all pinch and swipe, plus cloud storage.

The irony about your very valid benefits of having basic programming knowledge is that music programs, which have been proven to provide benefits in math and language and just general smartyhood, are the first to get their budgets cut in any given budget battle. That said, how many working people have ever had to face the problem of getting a list of filenames into an email?

http://www.pbs.org/parents/education/music-arts/the-benefits... (not my favorite source, but there are plenty of pointers to this data out there)

> That said, how many working people have ever had to face the problem of getting a list of filenames into an email?

Few, because when tasked with a problem that this could solve, most people would immediately throw up their hands and give up. This is the biggest obstacle of all.

"Which pictures are you missing?" "I don't know, I'm not going to flip through them all!"

Or take a series of screenshots (scrolling through the files as they go) which they then will paste into Word.

And then they'll print it out and scan it to you.

(This happens more often than I'd like to admit)

On Mac: select files, copy, switch to text area, paste. Actually, I'd be surprised if this didn't work on Windows, too...

For this particular example, the creators of the OS has thought of the function, and implemented it.

But what about a slightly different one? E.g.

I have two folders, each a bunch of files. Are there any files that are not in both folders?

diff -r dir1/ dir2/

edit: I did not know this- I just posted it because it is but one answer. For what it is worth, I agree with you- basic knowledge of programming is something everyone should know.

The thing is, diff and "get a list of filenames into an email/textfile" is not programming.

> That said, how many working people have ever had to face the problem of getting a list of filenames into an email?

A lot of my coworkers.

They take a screenshot, thus offloading the hard part onto everyone who needs to get data out of their email.

It's about as awesome as it sounds.

I have to laugh at this. I worked in strategy consulting, where my coworkers were all MBAs from Harvard, Stanford or, in our office, Tokyo University. We had many cases where people had tasks of various sorts that they would handle with the equivalent of this screenshot-of-the-data approach. I, a fellow consultant, often groaned when I saw such things and wrote little utilities for them, figured out how to dynamically generate PDFs for their presentation data, or whatever.

At one point, the general mgr of our office, said that these things were so valuable to everyone, and I was so good at it and seemed to enjoy it so much, that he was wondering if it wouldn't make more sense for him to take me off of my own consulting cases and make IT projects my only case. Of course, IT people were thought of as lowly support staff for the elite consultants, so it would mean a pay cut and end my consulting career. This wasn't a warning; he was just thinking that this might better serve the needs of the firm.

That day I stopped being a valuable IT resource for my coworkers and reserved my dev skills for my giving myself a "sustainable competitive advantage" in my own work on my own cases.

You should package up your tools and sell it to them on a subscription basis per consultant head. Make sure the total price is at least your gross salary and bake in a minimum subscription period. Quit your job, build all the tools you ever wanted and sell it to all other consultancies and their offices.

The powerpoint extensions I used in consulting were created by ex-consultants so it's not unheard of to do this.

What industry do you and your co-workers work in?

As far as the hard part goes, I'd think an OCR script could handle this even if they're using Comic Sans for their file manager font.

Medical software. :(

And yeah, that's an option that I've considered it in the past, but never been able to validate it because it'd take me less time to just transcribe it (or I can find a glob pattern from their screenshot, etc.).

IT support apparently used this method in this in the last place I worked.

A lot of it is also the mental structures you form, so you understand what a computer can and can't do easily instead of thinking it's all magic.

You may not have the specific chops to write a program to do it, but you know that doing something to (x) files is just a loop with a if thingy inside of it.

I think part of the "learn to code" movement is also hope that currently non-tech-literate people will learn to help themselves. Once you've googled "how do I do this in python" and found answers enough times, you (hopefully) gradually replace "All of this computer stuff is confusing! I need someone to help me with it. My cousin is good with computers. I'll call him." with "I got this shit. What up, google."

I would say a general computer knowledge course would serve people better than trying to learn a programming language they'll probably never use, or want to use. Basic IT, networking, security, and simple scripting would probably serve the general public best.

And that's something that can be done in a single line at the terminal in Windows, OS X, or *nix. Learning how to use that effectively before learning how to code would already be a big step.

(Appending this to my own comment as a way of acknowledging the comments made in response to my question)

I stand convinced that, though the majority of people will not be necessarily learn to code in the sense of developing full-fledged programs, there is much to be gained by exposing young people generally to the concepts behind programming and to encourage them to learn these concepts: this will inspire some to make programming their work and it will benefit all by giving them at least a basic working literacy about how the digital world around them actually works.

Thanks to all for your thoughtful and instructive responses. HN is truly a great forum.

basic working literacy about how the digital world around them actually works

I think it's useful to draw a distinction between "coding" and automation, and I wrote about it here: http://www.workingsoftware.com.au/page/When_does_automation_...


I have put a great deal of effort into improving the level of automation that can be performed without writing code, or working with graphical mathematical structures (such as wiring together nodes in a graph, or building a flow chart).

The work done on Logo, a language designed to teach children how to program, has been particularly helpful. In the system I'm developing, everyone is using a "debugger" (without knowing that's what it's called) even in the process of getting onto the system.

A lot of the progress we've made has involved aggressively simplifying the development process into something that's at the level of using a spreadsheet (and just as concrete for the user). For example, if you have to develop an API, you've already excluded most of the people from being able to use your tool. API design is hard and takes a great deal of experience. That's the opposite of what it takes to get productive value from a spreadsheet.

I agree that there's a huge amount of benefit a user can get from being able to automate their own work, and to be able to easily and effectively share that automation with others. Today's scripting languages aren't even close to the "spreadsheet" ideal I think is possible.

For better or worse, our educational system is centered around the idea of exposure to potentially worthless experiences. Everyone knows people who haven't had to think about concepts from trigonometry or algebra 2 since school. Children are required to take music classes, art classes, physed. We don't teach these things because they are practically useful in any way, but because 1 out of every N kids discovers that they are really good at something.

I hated all of the effort wasted in the modern educational system. But when you see a kid's eyes light up when they blow into a recorder for the first time, or see how they respond to praise of their art class drawing, or see their face when they score the winning touchdown, you can see the value and importance. We can't take that away from people. So we study things that might not matter. I don't see any reason why computer programming shouldn't be that list of experiences. There are people in the world who would be rock star hackers if only they'd been given an early opportunity. Even a modest increase in the number of technically literate people can have great benefits to society.

There is a clear trend toward automation. We all know people who wouldn't benefit at all from computer programming experience. But that might not be true in twenty or thirty years. Even lawyers might need to learn more about data structures and server management in the coming decades. The ideal case is that we end up in an automated world in which everyone can pitch in a little programming to make things better. Making some technical knowledge universal might be the first step.

>>There is a clear trend toward automation.

Mankind has been automating since we could automate. The moment there is technology available to automate something we automate it. The invention of wheel was automation. The invention of the cart was automation and so on.

The moment there is knowledge, tools and technology to reduce human effort, we invent newer tools that reduce human effort. Which leads to further knowledge that reduces human effort further and so on.

Programming is a new tool in this never ending endless task that human kind has taken since it could think. Programming enables a device to make decisions, based on some conditions and send those decisions to mechanical devices.

Its hard to predict how this will pan out in the future, if the past is any indication. The future is hard to predict.

I disagree completely that they're potentially worthless experiences geared only for the 1 in N who embrace the subject. The content of the material is in many cases mostly irrelevant - it's the fundamentals behind that content that matters. Claiming that it 'doesn't matter' because you don't actively utilise it in your job later on misses the point entirely. For example:

Maths - teaches logic and critical analysis of problems. No one cares if you don't remember SOHCAHTOA or the like. If you can think about using knowns to resolve an unknown, you've got the main thrust of maths classes as they stand for non-Engineering, non-Science people.

Physical Ed - teaches healthy habits, ideally. No one cares if you remember the rules to field hockey or rugby or learn to run faster. The idea is that you learn/are exposed to healthy exercise habits and (ideally) healthy nutrition/etc. if it includes that too.

Music - teaches quite similar stuff to maths, in fact. No one cares if you can't re-draw the circle of fifths, however understanding the patterns in music and why they exist (e.g.: why you don't tie the 2nd and 3rd beats of the 4/4 time signature) gives you insight in to the mathematical underpinnings of music and lets you appreciate it more to boot. Not to mention playing music engages and assists the brain areas used at maths, problem solving, etc.

Art - You learn to understand and appreciate design better. You learn to appreciate culture. No one cares if you can't remember what primary colours to blend to produce a certain new colour, but understanding the role of shadows for contrast, or vertical lines in e.g.: paintings of architecture, help you appreciate the world around you.

Science - Again like maths, logical intuition and problem solving. e.g.: for physics, no one cares that you can't recite the equations of linear motion, but understanding why something goes up and then falls down, intuitively, is a good way to teach critical analysis of problems.

The second benefit of all of this is that you then also get exposed to this content, which means you get a general introduction to those fields. As you say, it helps bring the fruit to bear whereby people find out they enjoy/have talent in something, but additionally it means that because you sat through music in school you probably at least understand why some songs sound sad (minor scales) and others sound happy (major scales) so you can appreciate it more.

I absolutely agree with you that programming should be in there. Again, it's not about learning how to declare variables in python in particular, but rather about the logical underpinnings of code structure and understanding how that all works. The benefit isn't going to be that 100% of kids can read some javascript dump and work out why the webpage doesn't load properly. It'll be that when they're sitting down in excel and they're trying to assemble that data their boss wants in a particular way, they'll be more capable of logically stepping through each component step of the equations required and understanding exactly how it must be built up to produce the result they're after.

Very nice answer and much appreciated. One additional bit which I only saw lightly touched on is the correlation between breadth of knowledge and general intelligence / creativity. Exposure to a wide range of subjects helps build the mental linkages for students so that they can form the equivalent of mental analogies about new material and solve new problems by reference to solutions in other areas. Coding has a lot of potential in this area, as the fundamental concepts of algorithms and machine logic are broadly applicable to a wide range of subjects. In addition, the solutions you see in programming (barnes hutt trees, steepest decent, network theory, binary search, ect...) are optimized solutions to fundamental questions of how the world works. Once those solutions have been seen in programming, the understanding of the world they communicate can then be taken and applied to comprehend and solve problems in other areas of life.

I think the value of learning to code is learning how to break down complex problems into simpler steps, determining the order in which those steps need to happen, and thinking carefully about your upfront needs to get some the desired, distant result. Coding isn't the only place to learn these skills. For example, working in a commercial kitchen, you might learn these skills quickly: what do I need to do make this dish? What ingredients are each dish's element? What ingredients do I have on hand vs what I need to order? Is everything going to come together in the end, and at the same time?

However, coding is increasingly accessible (~$0) to everyone (all ages/geos) at a massive scale (smartphones/netbooks) and may have practical benefits for some people who choose to go beyond the basic steps. Some might even call it fun.

>>I think the value of learning to code is learning how to break down complex problems into simpler steps

How is that any different than any other branch of engineering? Repairing a car engine requires thinking and application of effort that is the very same as that required in programming/debugging. Same with building a house. Or fixing tube lights.

I see car repair more like hardware repair on a computer. Graphic chip fried, pull out the graphic card, and pout in a new one. Certainly doesn't require the levels of abstraction that I use in my day to day work building / maintaining the database for an organization.

For exactly his last point: it costs nothing to code. You only need time (which you would need to do any other activity). If you make mistakes, you can start over with press of a button. You can do it anywhere, any time and increasingly using any device. Summary: accessibility.

>>it costs nothing to code.

For whom? For us, yes it costs nothing.

For other people, they still have to buy a computer. Get an internet connection. And I will be very frank with you, programming is not the same as building web pages. Learning stuff like embedded systems(Which actually teaches true programming, which is of some real value in the real world compared to cat picture sharing sites) costs money in IDE's, hardware investment and other components.

Learning programming costs money, and some one has to teach the kids. Its not like those kids can download a Python tutorial and get going. Or even adults for that matter. Why should any one do that. We don't learn mechanical engineering, why do we expect others to show such deep interests in our areas of work.

Without good problems to solve and the right approach to teaching taken. Programming is as boring as Math.

Which brings me to the point. If you are teaching Math well, you have already taught kids problem solving. If you haven't, how is teaching another Math like subject in the wrong way going to be of any help.

>>And I will be very frank with you, programming is not the same as building web pages.

Totally disagree. Let's assume you're just talking about HTML/CSS, as Javascript is clearly a programming language. Many fundamental concepts that you would learn by understanding HTML and CSS are also foundational in programming languages. You have to understand abstraction, and the use of textual markers to represent those abstractions. HTML attributes are pretty similar to parameters in functions and the tag names would be like function labels. With just learning markup you discover the power of using text to represent things and how the computer/browser can interpret that data to actually do stuff.

Of course there is plenty of things missing, loops and conditionals, state management, functions as data, etc. but 1) if you're teaching how to build a web page properly you will be covering javascript and these concepts and 2) even if you don't cover Javascript just learning html/css is still a start towards those other concetps. I've recently started teaching high schoolers how to code and it's amazing the sort of fundamental concepts you completely take for granted as a developer that these kids have simply never been exposed to. These are the low hanging fruit that you're assuming is not important.

Also, embedded systems are becoming increasingly cheaper to develop with, Raspberry Pi's and Arduino's cost $25 and that space is also becoming more and more open. There is a long way to go but it's certainly happening.

Finally, of course computers and internet connections cost money but these are things that people acquire regardless of whether they want to learn how to code or not. I'm not naive enough to say everyone has easy access to these things even in affluent countries, but they are goods that are acquired for many more reasons then just learning how to code. The idea that it's free and more accessible comes from that aspect, that the same tools you use everyday to browse Facebook or do a Google search are all you need to become proficient at coding. Most other engineering disciplines have higher barriers to entry then that.

Again I don't see how this is in any related only to programming.

Programming was introduced to me in school and was the most boring subject of all. Because the problems we solved looked totally irrelevant to not just me, but every kid in the school. I was glad I opted out of it and did physics experiments instead. It made whole lot sense. Had I continued working on brain dead sorting, and arithmetic problems I would have developed permanent hatred towards programming. I was already learning simultaneous equations, quadratic equations in the Math classes without understanding why and what they even meant. Why learn another such subject?

Physics was a place where I saw application of pure mathematics to real life scenarios.

Skills that you need to be a good programmer by and large the very same that you need to indulge in any creative activity. Clear definition of the problem, deconstructing it into smaller parts, apply a definite science in assembling smaller solutions, going into a build-feedback-correct cycle etc. You will have to do the same if you do physics, chemistry, biology, math, painting, music, history and may be anything on earth.

Programming doesn't make much sense unless there is a larger context and scope of your learning in helping solve some meaningful problems gets visible. Other wise the kids will just be doing yet another routine boring math kind of work without knowing its true application.

Remember kids building tree houses, That requires nearly the same kind of stuff required to be good programmer, or to take part in a science exhibition. Or a essay writing competition. What is important is to teach kids learn to discover how to work on creative problems.

When I think about the practical skills that I learnt in my education, years later there were only a few key concepts which really mattered: rudimentary arithmetic in Mathematics, good writing/reading skills from English, understanding of empiricism from the Sciences.

I think the question is: is there a foundational skill or concept that learning coding gives you?

I think perhaps there is and it's something to do with the application of symbolic logic, however I am not sure whether I had this before or after I started coding. (I do, however, feel that I grasped it far better from constant practical application than I did from mathematics lessons.)

I suspect it has more to do with problem-solving and analysis. In theory students should gain this kind of knowledge from mathematics, but I don't think that seems to work out in reality for most people.

Most people won't acquire great problem solving skills with programming either. You need only look at a few new questions on StackOverflow to see that. I think your parent is onto something though, that the unique skill available by basic programming in symbolic logic, and perhaps logic in general. It won't come to everyone, but without programming it may be even less likely. The problem of course is that it takes patience and attention to detail--two other skills not everyone has in abundance. Programming is not a freestanding skill, it requires much foundation.

I don't think it's about skill as such, rather about increased productivity.

People are generally expected to be able to drive, and for many, this ability comes with benefits. I don't see why basic programming (file system, lists, loops, conditionals) should be any harder, or less useful.

Driving is physical activity: you turn the wheel the car turns. You see it you feel it. Programming is all dealing with abstractions, and for many that is really hard.

Reading, writing, 'rithmetic are about the only really useful things taught in schools. The rest is important for "education", broadening the mind, and practicing learning.

Learning a second language is not only important for "broadening the mind", but it also helps you to see your native tongue objectively - with more than one instance, you gain an concrete inkling of what is general, what is specific.

  We shall not cease from exploration
  And the end of all our exploring
  Will be to arrive where we started
  And know the place for the first time.
Arguably, a programming language can do this directly, or at least lay some foundations. Like natural language (and arithmetic expressions), it has a grammar.

I think there is a deeper purpose of high school education (which seems to be completely unrealized): becoming acquainted with the human heritage of how to know things. That is, maths as a way of proving truth, not just of practical use. Programming has a role, in show how we can make things work - like mechanics and forms of government. Of course, this is philosophy, and not for everyone. But I think everyone is entitled to a taste, so they can make up their own mind.

All that said, actual programming is probably pretty useless. A law student I knew took CS 101 and sincerely believed that the discipline was about knowing all the control codes. Sadly, that is a huge part of what we do - programming requires a whole of nonsense, of arbitrary escaping rules, inconsistent tool and ridiculously arcane procedures for getting anything done - and if you get a little bit wrong, the whole thing fails! - and it's impossible to tell what went wrong unless you already understand it. [source: tutored first year CS students]

The programming tool that ordinary people cope with best, that has minimal nonsense, and also has enormous practical benefit is not thought of as programming at all - the spreadsheet.

Do you think, as a lawyer, it would be helpful for everyone to know a little bit of law? To be able to more effectively navigate day to day things like contracts, leases, understanding of rights etc.?

A more proper analogy is: do you think it would be helpful to everyone to know the process for making laws?

Yeah, I think you're right.

I'm not a lawyer but I do think that knowing the basics of day-to-day law like you said would actually be really nice. Maybe it would have helped people who were signing up for extremely risky mortgages around 2007 to better understand their real contractual obligations for re-payment, at a time when the banker they were dealing with was probably failing to highlight the fact that the payments would dramatically increase beyond the introductory period? I'm just speculating.

Not just law. That's what an education means - you are educated, if you have a broad general knowledge of just about everything. Plus some specilization in your field. Education these days seems to focus too narrowly on the specialization, without the general knowledge.

So many people live in bubble with no connection to the real world; insulated by religious dogma and partisan ignorance. Debating need not concern with actual provable, reliable facts, but soundbites and appeals to authority. But you can't fool the computer. You can beg and plead, you can say your teacher tells you that it should work, but ultimately you can't make it work unless you actually do.

You can fake your chemistry results, you can argue over the oxford comma, but your loop for(i=1;i<10;++i){} will never run 10 times.

This is an equally strong argument for teaching plumbing or woodworking.

Neither teaches abstract thought.

However, I do believe at least the basics of both you mentioned should be taught as well. If you can't fix a damaged wooden door frame or change the o-rings in a faucet by 18, you haven't been prepared for life.

Reading, writing, and mathematics have long been considered fundamental skills.

Obama is suggesting 'computer science' as now being a new fundamental skill. I would change that to 'programming'.

Most people do not question whether math is a fundamental skill. Programming is actually very similar to some types of math work in school, but with a heavy focus on practical problem solving skills using technology.

So the question you ask is similar to the question that many people ask about their algebra or calculus classes. But in the case of computer programming, I think it is even easier to see how it can be directly applied in many fields.

Basically the observation is that people need strong technology skills to contribute, since technology is core to nearly every aspect of life now, and programming develops core skills that can help with many types of technologies.

Agreed. I went to highschool in Bavaria and we had two programing courses as part of the math curriculum, taught by our math teacher. Turbo Pascal :-)

Turbo Pascal man, the MEMORIES!!

Programming is absolutely useful on all levels of your understanding.

1. More programmers

There is going to be subset of people that will discover a new passion for programming through introductory courses. There are a lot of very smart people that never would have thought they could be programmers without the proper serendipitous encounters with the subject.

2. Cursory knowledge is useful for your career

Even if you decide not to pursue programming as a career, understanding the basics of how computer programs work can help you in many ways in many walks of life. A lot of careers use computer programs on a daily basis, by building some of your own programs perhaps this will help you become more proficient at using other people's programs.

Additionally, a lot of careers in the future are going to involve pseudo-programming skills such as Excel. Knowing how to program has helped me grasp concepts like pivot tables, excel functions (SUM, AVG, IF, etc.) more easily.

Finally, understanding what computer programs are will help you understand high level strategies for what your company can or cannot do to accomplish goals with computers. Knowing what to build is just as important as knowing how to build.

3. Cursory knowledge is useful for life

Programming is a great way to think about problem solving at large. It teaches a lot of generic techniques that can be applied to all problems in life. Breaking up problems into smaller pieces makes it easier to digest. Applying a couple conditional statements can quickly showcase the logical outcomes of a situation.

I pretty much agree with everything you wrote. I'm not a professional coder, but I program as a hobby.

I'm of the opinion that broad spectrum exposure to programming is a good thing, much like exposure to foreign languages in high school.

I don't expecting everyone to take to programming, or German, but without some exposure, you may never know this wonderful world exists. And without knowing, your latent talents might go to waste.

My sister and I had the same exposure to computers as children. I learned to program shortly thereafter, and she never did. I think the main difference there being that I am a self-learner, and she was an other-learner. Meaning she did better in a teacher/student environment and I did better figuring stuff out on my own, asking questions only when I was ready for the answer.

If a brief course in programming had been taught in school when we were growing up, she might have discovered a knack for it. Who knows. Maybe not. She's a doctor now, delving in that messiness that is people, so maybe programming wouldn't have been attractive to her.

I couldn't not program though. I read Neuromancer in 4th or 5th grade, and while I had been programming before then, that book sealed the deal for me.

I picked up Neuromancer recently and for the first time in a while I stopped reading it a little less than half way because it was so bad. I just could not get into it. I like the topic and genre and all, but it was just not grabbing my attention.

Let's assume you're paying a developer $100k per year - not atypical in this day and age. As a business, I want that developer, who is likely making more than anyone else in the organization, to be working on "the most important thing" in our business at a given time. This might mean a new checkout flow, making sure the online shopping cart works, or scaling a website to accomodate 1000 users at once.

There are many tasks which engineers can easily do, and which most non-technically people are loathe to perform, but are not the most important thing that an engineer ought to be doing in a business. The easiest example is reporting.

A given marketing department will want sales information. They'll want charts and graphs describing conversion rates, customer acquisition costs, etc. There are far more ways that the marketing department will want to slice-and-dice data for analysis than a team of developers can possibly produce.

Engineers don't want to be relegated to creating reports. And anyway, the report you just asked your engineer to create may have just cost you $1000.

So if we were able to bring these marketing people to a level of proficiency where they could use SQL to generate reports, Excel to manipulate that data, and VBA to do analysis (which I believe could be accomplished with 80 hours of training - a drop in the bucket over the course of one's career), then we can let the engineers do the things they are good at ("make sure passwords are secure") and the marketing folks have the minimum proficiency they require to do their jobs.

This is common in companies like Amazon; "the engineers wouldn't help me run reports, so I had to learn myself."

Nowadays, business decisions are based on numerical analysis of behavior. (Click-through rates of advertisements. Conversion rates from campaigns. Number of lawns per high school student per summer.) This trend is unlikely to go away.

In practice, "numerical analysis" means "schlepping data into Excel and running the numbers." And that skill of "running the numbers" without having to ask an engineer (who is both expensive and uninterested) seems, to me, of great practical value.

Obviously I have cornered one specific example that I consistently deal with. But it is not too difficult to imagine that these tools of analysis can help automate any number of tasks, in many disciplines. It is not uncommon for linguistics (graduate) students to learn programming to better analyze the meter of poetry. Optimistically, I hope that "non-technical" will be able to use the tools of our trade in new and interesting ways that we never imagined - the same way a carpenter might use everyday materials in ways that are very innovative to laymen.

As a counter argument to that, many of the non-technical users in my organization like Excel. We have wasted countless hours by sticking to excel as a data input / manipulation tool, as it is incredibly error prone. Non technical users don't see the difference between a 2 and "2" and a " 2". It looks right to them, and much of the time they seem incapable of reading a sensible error message and fixing it the problem themselves.

I've also noticed this countless of times. If you leave data sets to be designed by a non-engineer - it will cost you hours and hours of parsing and changing the format constantly depending on who slapped the excel sheet together. Literally one of the worst experiences on a job was dealing with a big corporations excel sheets and trying to convert them into usable data.

Doesn't this imply that, with stronger engineering education, the problems you describe (which arise from poor engineering) would be eliminated?

I suppose so. Experienced developers already have that education. An introduction to programming class is not likely to provide that. I look back at technical decisions I made ten years ago, when I started coding, and I see how much cleaner and more elegant my solutions current solutions are likely to be (when a clean solution is possible).

Perhaps a side effect of "everybody" learning to program will be the demand for more programming tools that are easy to use. Excel and VBA both developed due to use demand.

I've seen lots of people, from engineers to workers on the loading dock, use Excel to create convenient tools for their own use.

My client, he doesn't know what "FTP" is, and does not know how to upload his revised version of the current Excel calculation sheet which he designed, and is core-business, and coupled to an application form. He knows the ins and outs about Excel, from formulas to shortcuts, and i'm a total novice when he's explaining stuff to me.

I'm interfacing with his Excel sheet through PHP, and he does not have to change the way he works, and I don't. I don't need to know all the ins-and outs, I just need to know which cell needs what data, and the cells that are calculated and need to extract data from.

I'm now building a management backend for him in Rails, and it will work the same way. Maybe later those Excel calculations will be ported to the database, but for now there is no reason to bother my client with learning a new interface and changing the way he works.

I work with bioinformatics, who are generally fairly smart, and self taught coders. The quality of code they produce is often terrible. Having to interact with some of that code is painful, and it is often easier just to rewrite "properly".

I think it would be far more use to encourage people to learn how an OS works, and understand the concepts (rather than blindly clicking things until it does what you want). Understand some database concepts. Understand a bit about how the internet works.

I am often asked to fix problems with Excel or Word, despite the fact I work on a Linux box, and don't touch either of these pieces of software given the choice. I can make things like that work (some of the time), not because I have any training in how to use them, but because I understand some underlying concepts that non-technical users don't. Teaching these things would be of far more use than teaching people how to write some basic scripts.

At the high school level, I think your analysis is generally correct. Most students who aren't already interested in computer science will have the same attitude toward a programming course as they have toward foreign language courses.

However, in college, the paradigm is different. At my university, programming is taught from two distinct perspectives: theoretical (as in the computer science major) and practical. I'm in the business school, and we have courses that teach VBA, SQL, Python, and Matlab. These courses focus on using these languages as tools to solve problems and gain competitive advantages through optimization, efficiency, and data analysis (think of Steve Jobs' bicycle analogy). For example, one course teaches Python and Matlab in the context of text analytics -- students use Python's text handling capabilities to parse text and collect data, then use Matlab to visualize the data and detect trends. VBA and SQL are taught together as tools which increase productivity in business, where scripting Excel can save countless man-hours and being familiar with databases can make interfacing with data analysts and IT people easier. These courses are taught with a distinct "hacker" or "scripter" mindset.

Students inevitably have difficulty with syntax, logic, etc but get past that with practice over the course of the semester. Programming is perceived by students as a problem-solving tool, like a TI-84 calculator helps them solve math problems and graph functions. They will not be creating enterprise applications or studying theory, but learning to script measurably enhances productivity -- and that's where the value is.

(Anecdotally, I'm not a programmer but am familiar with Ruby as well as the languages listed above. While doing an academic research project this semester, knowing Ruby made it trivial to quickly organize and manage a trove of 10,259 text documents. Without programming knowledge, that task could have taken quite a few hours.)

I think he did preface "anyone can learn how to code" with the phrase "...with some hard work and a little math & science understanding".

I do believe that broad literacy in programming would be beneficial. Going beyond my obviously biased opinion that programming helps you understand your world better, I believe that broad literacy in programming will advance our technology faster and bring us further than we could have ever imagined, because we'll have more people per capita who are able to maintain and understand the way our increasingly-complex world works.

The fact that not everyone who wants to be a programmer actually sticks with it enough to become one is also a good thing. It's certainly not for everyone. But there are plenty of people, especially kids, who might find this kind of stuff interesting, but aren't being exposed to it enough for it to be a reality.

I've got a classical education in computer science, an engineering degree, and plus/minus about a decade in my coding skill being a major contributing factor in my ability to eat on a daily basis.

On the one hand, I concur with you, in that ability to produce a working system ex nihlio is both a) much, much harder than anyone suggesting the general populance Just Learn To Code expects and b) of limited utility to many people. To pick an example at random from the front page, there is virtually no problem with being severely poor in NYC that would get alleviated with any of the participants Just Learning To Code, unless that in the process transformed one of the involved adults into a responsible member of society. (There being many, many people in the story who could use that in addition to the obvious choices.)

Learning to code might assist people into having a better mental model of computers and a lot of computer-like systems which they interact with on a daily basis.

For example, you're a lawyer, and you have practical experience with how law and bureacracy works on a nuts and bolts level. I assume you've occasionally met people who believe that law/bureacracy operate in an entirely random and capricious fashion which cannot be influenced by their own behavior. Dealing with people who think that is a little trying, right? Both because it is wrong and because, more to the point, it causes them to take self-destructive courses of action. (To see many examples of this, see again the article on being extremely poor in NYC, where consequences are predictable based on past behavior seems to be as foreign as trying to explain thunderbolts as something-other-than-the-wrath-of-an-angry-god to ancient Greeks.)

If people had a mental model of how computers (and similar systems worked), it would improve their -- for lack of a better word -- digital citizenship. Paypal probably didn't freeze your account on a whim any more than the probation officer has decided to "violate" you based on personal animus. There was probably a heuristic triggered by behavior. More importantly, a) that behavior can be avoided in the future, b) that heuristic can probably be overridden by appeal to the relevant authorities, and c) that heuristic was probably instituted due to it achieving goals most of the time rather than as an instrument of oppression.

We could look back to a time in the not-too-distant past and say that, for the average citizen, knowing the nuts and bolts operation of the law was probably unnecessary: they didn't have touchpoints with the State that frequently and when they did the operation was well-understood by all parties. You don't have to understand the inner operations of magisterial courts all that well if you can appreciate that killing people is generally a bad idea. Recent years, however, have gotten the State into substantially more lines of business than just regulating who gets to kill who when. The average citizen can now expect to run into laws and their consequences quite frequently. At your job. At your doctor's. At your school. At your bank. When the government sends you a check. When you send the government a check. The average citizen is now expected to be able to make consequential decisions based on the law. There are many possible decisions which are wrong ones.

Similarly, in the not-too-distant past, you could have been totally ignorant about how computers operated. Computers were, after all, mostly maintained by other people and they didn't come into contact with your life that frequently. When they did, they were pretty easy to anticipate the function of even if you had no clue what Deep Magicks were invoked to cause it. The computer keeps a record of your bank balance, which it does via addition and subtraction, so you'd best assure addition and subtraction sums to greater than zero. As long as you do you'll have no problems with computers.

This is not the world we live in in 2013, and I would not bet that computers and similar systems become less relevant over time, any more than I'd bet that law suddenly decide to recede from its historically novel importance to people.

Computers operate consistently. Their rules are written in advance. It is easy to make mistakes in writing those rules. The symptoms of those mistakes will (generally) be predictable and consistent. Since computers operate according to rules, given the rules, we can make certain confident predictions about their behavior in advance of seeing it. Since computers operate according to rules, we can learn the rules they operate under by observation, and therefore make confident predictions about their future behavior by observation.

Everything I just said is something that you'll know in your bones by the time you've made your first substantial program, and yet they're Deep Magick to most people. Seriously. I think I could poll a family gathering of the McKenzies, whose average educational attainment is a master's, and probably get less than 20% of the family to agree that "Computers operate according to rules." My family, like most users, assumes that the devil box just does whatever it feels like and this is so frustrating when it stops them from getting their grant applications in on time.

I don't aggre on programming not helping the very poor people, just as some examples:

Just scrapping a website that contains all the free charities in my area to put it in a single page to print.

Getting little jobs on freelancer-programmers-marketplace such as "elance"

Creating a blog where he writes tips about how to survive with extremely low income and sharing tips about it in the comment section.

Helping out other poor people to have a better grasp of technology so they can use it to improve even just a little bit of their quality of life.

Plus; the very-poor in America is a minority; the middle class is a bigger and where learning to code can be more useful.

Everything you mention can be done by a non-programmer.

- Copy and paste your list of charities into MS Word and print it - Not sure what that is about - Create a blog on one of the many readily available platforms like Wordpress or blogger. Plenty of non-coders already doing this - Getting a grasp on technology has nothing to do with coding

What if your list is 10,000 and they are links on a paginated search results page? Cut and paste does not work here -scrapping sure will. Now think about what happens if the page is supported by dynamic tools like AJAX ?

How often does this actually need to be done? I know beginner coders who struggle with this, esp when it comes to AJAX. I very much doubt that someone with no interest in coding who is forced to code because of some government initiative for one semester is going to fare any better at that task.

The point is, unless you have some self interest in the subject then there is no point in forcing you to learn it, it is going to be of no benefit to you in your future life.

At work, I had a spreadsheet. Technical people, coders even, had a hard time finding the solution: convert to CSV, cut -f, awk print, in order to tack a hostname onto a column with relative HTTP paths. (No error checking required.)

If you were using Excel, you code have just written a VBA macro to do it, or created another column with formula =CONCATENATE("http://domain/",A1) if that's what you mean

I think learning to code is beneficial for purely non-techical reasons.

Programming is one of few activities left where you can't bullshit your way out of the problem. You have to make yourself actually understand the problem, figure out what needs to be done and do it diligently. And you have to repeat these three steps over and over. Either that or you fail in such a clear way that you can't bullshit yourself that it actually wasn't a failure.

Coding is in modern world the most interesting and accessible manifestation of physics. It's the best opportunity to learn firsthand the spirit of quote "For a successful technology, reality must take precedence over public relations, for Nature cannot be fooled."

It's not so much about learning to code, as about learning how to solve problems using algorithms. Coding is a natural application of that. It surely is a very useful skill and teaching that in school makes perfect sense.

But, even at this level, most of the people around me - being non-programmers - would run in horror from the idea of even getting into that level of trying to interact with a computing environment.

Even if one does not go on to do significant software development, learning to deal with a computer at the level of programming it teaches a person something about rigorous thought. At first, a lot of effort is often needed to fix a fiddly off-by-one error or a crashing program.

I wonder how much, if at all your viewpoint would change if you learned to code somewhat proficiently. - http://learnpythonthehardway.org/book/ - https://docs.djangoproject.com/en/dev/intro/tutorial01/


Basic understanding of coding (which you apparently already have) helps people get to grips with the world around them, which is essential for having a functioning democracy.

Simple example: non-coders had no clue what could possible be wrong with voting machines.

Code can be simple or complex just like writing. Last night my girlfriend was using a WYSIWYG editor for WordPress and getting very frustrated. I suggested using the HTML editor, and she was blown away at how much easier to make simple changes.

Besides what others have mentioned with respect to helping people discover an otherwise undiscovered talent for engineering, coding, if only at a more basic level, has a tremendous impact on average office workers' productivity.

Consider a company I am intimately familiar with, which is a typical manufacturing company. There are accountants, customer service, salespeople, production schedulers, marketers, inventory managers, production foreman, maintenance technicians, material buyers, human resource staffers, and so on. A typical set of functions that could have been picked from any number of hundreds of small or medium sized manufacturing companies. Due to the company's size there are no dedicated programmers as might be found in a larger company's IS or IT department.

But in nearly all work areas, a person's productivity is greatly leveraged to their familiarity and comfort with technology, including the ability to develop a set of instructions to assist in automating tasks within the computer. And because their productivity is leveraged to technology, those who are more capable with that automation are typically also paid more.

It is surprising how many opportunities there are for at least basic levels of programming in many different areas. Consider the following examples:

- A material buyer needs to know anticipated raw material needs by product, based on order backlogs. She develops a little VB script to tell her how much to order of each type of raw material, based on types of products in the order backlog. She then enhances it to consider price discounts, shipping quantity breaks, supplier lead times, and additional factors, to maximize material inventory turns while minimizing the material outages.

- An accountant develops a basic script to assist in forecasting cash flow to the business, to help manage the company's operating line of credit, lowering the business's interest costs and identifying potential cash flow issues well ahead of time.

- A maintenance tech develops a database to track issues with machines, replacing paper tracking. After six months, he uses database queries to begin identifying patterns among the hundreds of maintenance issues, to help create a set of preventative maintenance procedures to minimize expensive downtime.

Are any of these using Ruby on Rails? Are they using algorithms that one would learn in a Computer Science curriculum? Likely not. Many of these tasks are on the wrong side of what the audience here would even consider "coding": it is just creating a simple database, or using some simple VBS, or maybe even nothing more than some more complex than usual formulas in Excel. And yet they are skills that are woefully absent from the vast majority of the population, and yet which would greatly enhance their productivity and earnings.

Would the majority of workers benefit from formal training of computer science theory? That is debatable. If done the way many CS 101 classes are done, it could even hurt, by creating fear of the topic at an early age.

But there is a basic level of competence that would enhance the productivity of a great many number of workers, that is absent today. That basic level of competence would include the introduction of how a database works, basic office automation scripts, perhaps mixed in with some fundamentals of simple data analysis with computers.

A typical office or production candidate demonstrating even these simple skills is highly attractive in an interview, and I believe that any country's industry would be far more competitive with a population with these skills than without.

Exactly. This is the kind of stuff I talk about when I am talking with those who use technology every day to accomplish their jobs, but see it as a box that they perform tasks in and do not take part in automating their tasks.

I recently showed an account manager at my job how to use autohotkey. With that they (with very minor help) created a way to automate some irritating web form crap they do all the time to make their life simpler, faster, and with less annoying drudgery.

I think it is a part of the "dont know you dont know", where if they have the basic concepts, not a cs education, they can make the computer work for them instead of the other way around.

as a "real engineer"(tm), (more usefully, someone who codes both for a living and as a hobby) let me give a very concise answer (I'd be willing to be more verbose, I have a lot to say on this matter, but I really think the core point is braindead simple Edit: don't mean to imply braindeadedness if you don't see it, but that once I saw it, it seemed elegantly and stupidly simple.):

Programming is more than any language, tool, or algorithm, it is a way of thinking.

As a person with a lot of software ideas, learning to code really helped me explore my ideas. It also really helped me develop more refined problem solving skills.

Maybe the question should be: why should we teach trigonometry over programming? Which one is more likely to be useful to your career and life in the modern world?

I'm a purebred software developer so to speak and I think it would be good for normal non-technical people to learn the basics of programming, much like how many consider that it is good for them to learn the basics of math.

This is not so much about doing real software development, but rather the ability to control your environment, your tools, should you need to do so.

For example, for simple needs, developers/designers can cut down on the metaphors and interactions required to use the GUI and maybe reduce those to things that users are already accustomed to (like moving objects around with your finger), but the more feature-full some piece of software gets, the more complex its interface becomes. And here we have a problem, because the status-quo of graphical interfaces is for users to navigate trees or graphs of options, in search for the right button to click, or the right form to fill. And designers can delay non-flat GUI hierarchies as much as they can, but at some point a complex tree or graph structure becomes inevitable. At which point, users resort to rote learning. This isn't even mentioning actual (and horrible) programming languages often hidden behind GUI metaphors, for more complex apps, because you know, not everything can be done by clicking a button and sometimes you need to specify boolean conditions that trigger actions and so on. You only need to watch normal users struggle with a complex piece of software, like Microsoft Word or Excel or Photoshop, to see what I mean. It's freakishly painful to watch.

Excel, one of the most popular pieces of software in history, has an embedded programming language that users can use. Excel wouldn't be Excel without it. And sometimes you need an embedded programming language to get shit done, because language is still the most potent form of communication and this extends to user interfaces too. And we can't communicate using natural language with our computers, yet, but even if we were, we'd still have to come up with clear specifications that the computer could make sense of.

People are so afraid of computers because computers are absolute black boxes to them. I'm not afraid of computers, because I've assembled my own PCs, I know how they work and whenever some piece of software doesn't work like I want it to work, I know that (should I need to) I can search for alternatives, or I can automate it, or I could implement something similar from scratch. Many times it's not feasible of course, but in terms of what I'm afraid to do or not, the feasibility of it is of no consequence. Programmers are fearless, whereas users are fearful. And companies are exploiting this, locking users into software packages or services that are suboptimal and overpriced.

Automating stuff is priceless. For example I've got tens of thousands of photos that I need to organize - I just wrote a script that splits those photos in directories named after a YYYY-MM pattern and eliminates duplicates. No need for shitty software that might delete my photos by mistake because I clicked the wrong button. This is another skill that comes with knowledge of programming - the ability to automate shit and this is also not software development and would be useful for normal people.

A lot of people are getting attached to the "every American" aspect of things, and I think its important to note the distance between "knowing how to code" and "becoming a programmer." Amateur programming (for lack of a better term) like basic Python for data analysis or HTML/CSS to work on Wordpress sites (Hell, one of my friends who's a Social Media Manager learned Python to create some QoL scripts for her day-to-day routine.) is growing increasingly popular amongst recent grads.

"Whether you're a young man or a young woman -- whether you live in a city or a rural area -- computers are going to be a big part of future. And, if you're willing to work hard, that future is yours to shape."

It's hard to argue with the central message there, but we must be careful not to conflate that with the necessity of getting a CS degree. Every American should probably be able to change a tire. That doesn't mean every American should be a car mechanic.

We teach writing as a required subject in schools, without the expectation that everyone is going to be a professional writer.

We teach science without the expectation that everyone is going to be a scientist.

We teach physical education without the expectation that everyone is going to be a professional athlete.

These are all good life skills to have even if you don't learn enough to make it your career. So it should be the same with programming.

We should also be teaching how to change a tire, how to cook basic nutritious meals, personal finance, etc..

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

I hate that quote. It starts fine, but then reaches a stupid conclusion. I wonder how much worse our life would have been without centuries of specialization: in science, in education, in business...

> I hate that quote. It starts fine, but then reaches a stupid conclusion.

The thing at the end is the premise that the rest comes from, not the conclusion it reaches.

I still find value within in. Sorry! Specialization is important for society collectively, diversity is important for the individual. Balance is key.

I don't want to die gallantly though, just satisfied with whatever I've accomplished and left behind.

I can certainly agree with that. "Specialization is for insects" is needlessly insulting, though...

But true. How many jobs will you have during your lifetime? Will you only use one skill throughout all of them, or even just one?

Specialization isn't just for insects. Its for robotics and software. Anything that can't learn and evolve.

Isn't it a quote from a character in a storey? It may have been intended to be gruff or insulting, depending.

You don't teach kids how to cook or manage their finances?

And people wonder why you are so obese and in debt.

Depends on who the "you" here is. Our schools do a mediocre job of teaching those things (especially finances), many families do a great job of it, and many families do a poor job of it.

> how to cook basic nutritious meals, personal finance, etc..

This is already being taught (atleast here in Norway.)

Unfortunately, in the US, it isn't being taught :(

Yes it is, depending on where you go to school. 50 states are not all the same.

There were classes like this at my school at least.

I haven't been in high school for over 14 years; are they mandatory/required?

No they aren't. It's a shame.

I've assumed the quote was sarcastic. My sibling-comments made me question that, now.

Note: I never bothered to research the context.

Nope. It represents an 'ideal man' that Heinlein pretty consistently praises across his books.

"plan an invasion" - sounds inhuman

I take it as reading Sun Tzu's Art Of War at least once; strategy.

I agree with this quote, but "microspecialization" is the appropriate response. You might specialize on Tuesdays by one skillset, and specialize on Wednesday by another.

I think the following assertion adds a significantly interesting context to this entire debate[0]:

    All programming is Web programming.
Basically, our daily lives depend on the Web. If you do not understand the [process] of what constitutes the Web, you will be utterly mystified and frightened by it. You don't need to know how to change a tire in a practical sense, but if you cannot understand it conceptually...

For example, bank hacks and e-mail hacks. Do you need to understand how to code to change your password? Surely not. Do you need to know how to code in order to change your password in a relevant way? Probably. And doing that involves knowing how to code, in that one learns something minimally about a very interesting concept: abstract dictionaries.

[0]: http://www.codinghorror.com/blog/2009/08/all-programming-is-...

Teach people to learn on their own and set their own agenda. Wouldn't that be radical.

Just because we currently teach everyone trigonometry, it does not mean we should also teach everyone X. What exactly is the point of knowing how to code a little, without being very good or proficient at it, which most people won't be able to attain ? But I do agree that every school should have C.S. curricula as an option, not as a requirement

Most people in developed countries need to handle significant amounts of information. Knowing how to code a little (even just simple loops and conditions) allows you to be an order of magnitude more productive.

Which people? Sorry but forget about most people, most programmers themselves don't need to handle significant amounts of information.

Most people need to learn how to cook, first aid, read, basic personal finance, hygiene, basic mechanical work etc etc the list is endless.

You can only chose a few at a time. And even then things are so big these days, you can probably learn one or two correctly if you were to even dedicate years learning it.

The thing is most people don't know what they want to do. That's the reason why schools force you take a variety of subjects so you could find your niche. I had no intention of growing up and becoming a developer, but here I am, all because my friend showed me a few lines of HTML. The idea is to give people a little spark and let them follow through if they want to continue down this path or not.

We certainly don't currently teach everyone trig...

I think everyone should know enough programming to know where programming is an appropriate tool, even if they are not also to wield it, so that they can bring in someone else to solve it with programming, instead of throwing manpower at problems like copy pasting between documents.

Interestingly, you could group your words in two ways:

good (life skills)

(good life) skills

Both apply equally!


I learned a lot of valuable math skills in public school. I was interested and paid attention. Just because some kids don't want to learn doesn't mean we should deprive the rest of the opportunity.

> I think its important to note the distance between "knowing how to code" and "becoming a programmer."

Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers (increasing supply and pushing wages down), though who's to say we deserve the situation we're in presently?

Large employers in this company would like to have labor costs reduced, especially for costly positions like software development. I'm not saying that is necessarily a sinister thing, but things like this should be thought of in the context of reducing labor costs. That's all it is, I think --as opposed to fancy notions about democratizing technology and so forth.

That's a particularly cynical response to something I consider to be incredibly positive, but I think there's a lot of scar tissue in the industry from bad behavior so you may be right to be wary.

Let me tell it from my perspective. I was a finance guy whose only coding experience was a couple of CS classes in college and some excel coding at my job in ibanking. When I decided I wanted to start a company, the first thing I did was spend three months of teaching myself how to do some basic coding. I did the Udacity classes and Codacademy. I read up stuff online and did bash tutorials. I spent 4-6 hours a day doing this because I wanted to be serious.

Today, I'm the CEO of a lightly-funded startup that just got our TechCrunch bump last week. I do all the front-end design and development because of resource restraints (I'm okay at it; not great). But the biggest takeaway from learning to code was not the work itself, but how to talk to developers and manage their time and resources. When I draw up requirements for our dev team, I have a baseline knowledge of what's easily do-able, what's quick vs. what's long, what we can hack and what we need to build to scale. If I started a company in China, I'd expect to learn a little Chinese. Why isn't this the case for people who work in technology?

Now back to the President's announcement. As he stated, software is eating the world and if we want a generation of consumers to have some knowledge of how their world works, then a baseline education in software is critical. Thanks for reading.

Why'd you leave IBD/VC?

Before, I built pitch books and excel models and funneled money from one place to another, taking a cut.

Today, I build websites that democratize content (okay that's a bit hyperbole). I just feel better about my life choices now that I'm building something substantive.

Being an entrepreneur is a great experience for anyone who can cut it. I also think it should be a necessary pre-req for investors to be a founder at least once. I do miss the money and lifestyle though...

I was curious because I recently finished my two analyst years in ibd (@ a bb), but switched into PE instead of a startup, which I was considering. Always interesting to hear the other side.

>Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers

This only applies if there's no way hiring practices could possibly improve, which given the existence of some data on the subject seems unlikely. In particular, it's not too far-fetched that people with some coding literacy may make better hiring decisions than Muggles.

>Large employers in this company would like to have labor costs reduced, especially for costly positions like software development. I'm not saying that is necessarily a sinister thing, but things like this should be thought of in the context of reducing labor costs.

Reducing labor costs in the long run reduces average prices and increases real incomes. Historically, it's not usually a bad thing; in this case, real incomes[1] go up whenever cost savings are passed to consumers.

The market may not be perfect, but it's usually better than fiat and ignorance.

[1]: cost-adjusted income, see http://en.wikipedia.org/wiki/Real_income

> Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers (increasing supply and pushing wages down), though who's to say we deserve the situation we're in presently?

In what way does high school kids learning to write simple Python scripts affect your career as a software developer? We're talking about giving students a baseline knowledge of programming here.

If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced. And again, the skill thing is diminished because we all suck at figuring out who the talented developers are.

I'm not saying we should hoard the coding knowledge or whatever -- that cat is already out of the bag. But if the president is saying nice things about coders, maybe think about what reasons he could have for that besides the goodness of his heart.

> If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced.

If I may disagree - you're assuming that the 'demand' for software developers is fixed. But, we know that it isn't. In fact, more software developers working on software may actually increase the demand for software talent, particularly if these developers go on to start companies themselves =).

> If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced.

I'm not sure I can agree with that, though. The barrier to entry is already really damn low -- the kids who are seriously interested in programming are already learning to program anyway, because it only costs them their time. The net effect will probably just be that the average student will become a bit more knowledgeable about how software works, which is pretty undisputably a good thing. If you go into a high school district and make a home economics class mandatory, are half of your graduates going to become chefs? Of course not -- only a few are going to do that, and they were probably going to do it before you even made the class mandatory. The only difference is that now everyone knows how to cook for themselves.

> And again, the skill thing is diminished because we all suck at figuring out who the talented developers are.

On the contrary, I think giving everybody a baseline knowledge of programming could have the opposite effect. If you study English at a liberal arts college and blast through the Codecademy Javascript tutorial over the weekend, you can see why you might think that a career as a programmer would be good for you -- you don't have any technical friends to talk to about what you've learned, and Codecademy says you learned everything there is to know about Javascript, so obviously you must be ready for a web development position, right? You have to know what you don't know, and the problem with unqualified developers is that they don't know what they don't know. If everyone learns how to write functions in high school, then you're acutely aware that there's a whole world of stuff you won't know unless you study independently.

> I'm not saying we should hoard the coding knowledge or whatever -- that cat is already out of the bag.

To be honest, most of the objections to the "everyone should learn to code" suggestion sound like that. It seems like everyone is extremely concerned with protecting the value of their own education, no matter what the cost.

> But if the president is saying nice things about coders, maybe think about what reasons he could have for that besides the goodness of his heart.

What are you suggesting here? The president has an evil plan to destroy your livelihood?

I think you will find more people applying to be CS majors, not necessarily graduating with CS degrees. The weed out classes at the better colleges will put an end to anyone striving for a CS degree that shouldn't have one.

What I would expect is that the myth of just get some high school kid to do it would finally end if everyone had an idea of how high the skill cap is for coding/design.

Plus it'd be a lot easier for me to talk to people, which would be nice. It seems the only people that really get along with me these days are technically informed.

This assumes a constant supply of programming work, which is simply laughable. We probably only ever need, e.g., so many lawyers as a proportion of the population, but the demand for programmers relative to supply is accelerating. Failing to train more people now risks either simply not being able to do the work, or an opening of the immigration floodgates in which case present demand could theoretically be met and wages could be depressed. But doing this slowly through educational initiatives would be a minimal risk to salary status quo.

Keep in mind, there is virtually no one available to teach everyone to code. Many US states regard computer science as a high school elective and thereby disincentivize schools from offering it.

Then take someone like me who really likes the idea of teaching programming, but would need about three more years of college to qualify and then would see my wages cut in half, with minimal job security (initially) or advancement in salary (forever) and all the attendant disrespect that our society bestows on teachers.

Being able to teach all our kids to code would be a good problem to have.

I doubt President Obama came up with the campaign on his own and I very much doubt "pushing down labor costs for software development" is even on the list of reasons. Labor costs may ultimately come down, but it won't be due to some devious collusion between the IT industry and him.

It's more likely that this campaign to encourage programming is aimed at multiple problems from a better understanding of the tools necessary in the 21st century to making young students interested in the field again. Just possibly there is a long term hope in him that the USA can cut down its reliance on foreign help for software development, thereby, keeping jobs in the country.

If I was in his shoes, I would be concerned that the USA seems to be relying on foreign graduate students for its research in technology. Until domestic students are interested in the field again, the reliance cannot be reduced.

Most likely his motivation is the ACA website debacle. What he fails to grasp tho' is that it's not a technical problem.

Large employers (or any other corporations) don't see labour costs as an end in it of itself, but merely means to an end: the ends being (whether in the long term or in the short term) making money. They could pursue the ultimate "throw more bodies at the problem" strategy, but per Brooks it is known not to work; companies that do so are penalized by the market.

On the other hand engineers can't choose between working many low-satisfaction jobs simultaneous or working for one high-satisfaction job -- so they choose jobs that maximize their satisfaction. While there's low marginal value in higher salaries past a certain point (so other factors, e.g., for me it's working on interesting things take over); however, significant sub-market compensation (in terms of both salary and stock) -- compared to what an individual of similar ability, experience, and location would get in a company of similar size, age, etc... -- does greatly decrease satisfaction.

That gives: engineers want to maximize their satisfaction which requires not being underpaid; companies want to maximize the money they make, but can take many different approaches to this.

So at the end, the market "chooses" to hire fewer, but strong engineers through a combination of university recruiting (and paying high salaries even to new graduates), tolerating a certain degree of churn among early-career software engineers, and also aggressively going after a smaller cadre of experienced programmers who can also mentor talented but less experienced new-hires and interns.

So no, I don't see the scenario you describe as happening. Instead, I'm not alone (http://en.wikipedia.org/wiki/Average_is_Over) in thinking that similar trends will occur (or, rather, are already occurring unseen) in other white collar jobs, as well as many skilled blue collar jobs. Company finance departments will want to hire workers who are able to write VBA and not rely on clunk recorded macros; manufacturers will (and already do) want to hire workers who can program a CNC machine[1]. This will not make them software engineer any more than me being able to solve a differential equation makes me a mathematician or understanding logic circuits makes me an electrical engineer (to take it one layer lower, knowing Maxwell's field equation and even using it on the job, doesn't make an electrical engineer a physicist). Circling back, this is exactly why it makes sense for people to learning programming -- if robots are automating large parts of people's job's, there will jobs that require knowledge of both the job and programming, to be able to write "userland" programs on the robot, as oppose to program the robots' embedded systems (or to write Excel VBA scripts as opposed to build Excel itself, etc...)

[1] Language they use is G-code (http://en.wikipedia.org/wiki/G-code -- note the date, it's nothing new), and yes, it's Turing-complete: http://callenblogi.blogspot.com/2011/03/bf-interpreter-in-g-...)

>I think its important to note the distance between "knowing how to code" and "becoming a programmer."

Very true. I know people who are highly educated but have no idea what computers are capable or incapable of doing.

On the other hand, more people actually know how to code than know they know how to code, thanks to Microsoft Excel. See http://research.microsoft.com/en-us/um/people/simonpj/Papers... for instance, where Excel is referred to as "the world's most popular functional language."

The computer scientist, or mechanic, is the builder of the human extension. But if the user of this extension understands core rules of telling things what to do and how to do them, then the extension is more powerful. The user can adjust the extension to fit more complex needs. So i guess my argument is that learning to code is more like being a better, more capable driver of a more dynamic car. You don't need to make a business of building the dynamic cars.

And since this extends to much more than just driving cars, it just means for a higher bandwidth interaction between each other and our environment. More like speaking a better language that packs a much greater punch. Maybe one example: if i can quickly release to consciousness an interactive system to express an idea i've had or discovery i've made, it just disseminates faster than if i were to use back and forth conversation, write a book, lecture, make a video. The packets are denser. Sure, i could wait for someone else to write the interactive system for me, but i'd have to communicate it to them. If they don't get it right then there's more back and forth, more latency. Wouldn't it be better if we were all just more capable?

> Every American should probably be able to change a tire. That doesn't mean every American should be a car mechanic.

I agree with that entirely, and a similar "fix a flat" knowledge of computers should also be expected. What perplexes me is that "learn computers" is a popular thing to advocate, but I have never heard of the president asking Americans to learn their way around their car.

Candidate Obama did, pointing out that maintaining adequate tire pressure would obviate the need for more drilling.


Well, that is something at least. Fair enough.

I still can't shake the feeling that the "everyone must learn some coding" thing is a meme with unusually high coverage. I had not read it until I saw it linked in this thread, but I think this hits the nail on the head: http://www.codinghorror.com/blog/2012/05/please-dont-learn-t...

That's because car knowledge, at least for men until 20-30 years ago, was the kind of knowledge that fathers passed onto their sons voluntarily, without needing a presidential exhortation.

I think learning to core for a lot of people would be useful to them in heir job in the same way that learning to work on machinery is to a farmer. Even if itts not their speciality, it relevant to their job.

Ever dude should know how to work on their automobile. Especially these days, when it so easy to look things up.

I am 42 years old and I have never had to change a tire, not once.

Even bicycle tire?

Asking the American people to code is not going to solve the nation's problems. What it does is add one more tool a citizen can use to make him or herself more useful to society.

What the president should encourage people is to become a MAKER - a general term for DIY manufacturing.


People will not learn to code unless they have a reason. Maker is more people trying to solve their own problems. It may happen that others may have the same problem and there may be some opportunity.

I love your parallel between car maintenance and coding, and I have repeated it many times myself. I think changing a tire is a reasonable thing to expect every driver to be able to do. Likewise, I think understanding SSL errors is the kind of thing every computer user should be able to do. Not code, necessarily, but understand something about this system you trust with most of your life.

So how is learning to code going to help with basic computer use skills? One does not imply the other.

Understanding that the computer is a stupid, un-magical machine which obeys only (and exactly!) the instructions you give it is somewhat of a prerequisite for successfully writing computer programs. (Not exactly true, but it's very helpful.)

Understanding that the computer is non-magical also means that your computer users may be more likely to understand how to troubleshoot errors ("Was it something I did, or something out of my control?").

Coding doesn't teach you that. I have programmers that write commercial software opening tickets to change their shell prompt, or to enable VNC on a Linux build server because they 'can't be expected to learn how these systems work, they're programmers.'

What you want people to learn is basic system maintenance and troubleshooting.

It helps a lot in a general sense, being able to reason through how a system might work can give you a lot more confidence in figuring out where to start on a problem.

Of course when it comes to very specific issues it is always nice to have the luxury of opening a ticket and letting somebody who can do it 1/10th the time fix it for you.

I agreed totally with the every american should change a tire thing. And learning to code is awesome, we need more developers, or even if people won't be developers at leafs they have some idea what is involved.

Next step, teach everyone in america, how to keep windows free of viruses... nah... maybe teaching everybody to code is easier. :)

I am guessing it's going to get substantially easier to program going forward. Look at amount of tools and technologies we have access to. Communities, Github, Refactoring, Intellisense. So many things just out of the box. Many ready made, battle tested libraries and frameworks. It's going to get a lot easier for a non computer science person to do some end level programming. Like dragging some blocks (just thinking out loud). Or encouraging youngsters to learn to code now will unfold a future which we can't even fully fathom now (AI, robotics, drones, medicinal advancements)

At the same time, you can argue the exact opposite: Having to know all these libraries and frameworks makes programming substantially harder.

When I was growing up, in the 1980s, I saw 10-years-olds around me code in assembler. They were not geniuses, they just wanted to draw sprites on a screen. I don't think that, say, learning CSS would have been equally attractive.

The main thing holding back software development is source code. And the reason for that is culture rather than technology. Because you aren't a 'real' programmer unless you are typing colorful complex text. That's just what the definition of a programmer is.

However, in most domains, interactive graphical tools have been invented and reinvented numerous times that are more efficient than text-only programming. Those tools remain unpopular because of a cultural failure to recognize that programming does not require colorful text that is difficult to decipher.

What? GUI programming more powerful than colorful text? You're gonna have to back that statement up.

>> QoL scripts

Whats QoL? Quality of Life?

Correct. Specifically, she used TweePy to grab recent followers/unfollowers and try and mine some basic information (bio, loc, etc.)

I agree. For example, my cousin is an artist, and building a web portfolio with functioning store was a requirement for graduating.

I'm actually surprised how hostile HN is in these comments, considering that I thought the popular sentiment was similar. Every other day a new "learn how to code" post hits the front page, despite, I'm sure, most people who are commenting/upvoting don't need the tutorial for themselves.

I don't think the GP intended to be hostile. I think he's saying that people should learn some coding (more than they do now), but not necessarily as much as many others are suggesting (less than a CS grad does).

Very well put! There should definitely be a layer between software engineers and people who can 'code'. Hopefully there will be a way to categorize these types of contributors so enterprises and the job creators of the world will know how/when to staff them.

Maybe if everyone completed a few software projects, we would have better social appreciation for the difficulty and scale of large software tasks.

Or people might under-appreciate the complexity of software.

"A little learning is a dang'rous thing;

Drink deep, or taste not the Pierian spring".

Fair point. But computers are basically magic to a lot of people. Even having a common vocabulary would be an improvement in my opinion.

I agree that a basic understanding of computers would help people; I think that the clarity of syntax, and logical operations would help many people reason more clearly. I also think that schools should teach the history of the transistor with as much emphasis as the history of the industrial revolutions (or maybe even the civil rights movement), because of the enormous impact Shockley's innovation has had on human welfare.

I am not sure that appreciation of complexity is a worthwhile or even an achievable objective.

While I agree that it's a great mental exercise to learn how to code (and to learn the mindset that goes along with it), isn't it much more important for every American to learn how to budget? To learn how to save money? To me, those are things that are far more important to the country as a whole than understanding even basic scripting.

As a quick example, the meaning of "afford" has changed in the last 2 generations or so. To my grandparents, "affording" a car meant being able to spend the money to buy the car outright. To many of my peers, "affording" a new car means being able to make the minimum payment on the car, or even just the lease payment.

Many of my peers (meaning my specific circle of friends) don't even budget, nevermind put aside money for the future. Hell, even friends in the finance industry don't contribute to their 401k because they'll "do it later". To me, this is a problem that is very serious for our country as a whole, moreso than people learning to understand some basic code.

Don't get me wrong, I think it would be great for everyone to be able to understand how computers work at a deeper level than "magic". It's just that I think no one really bothers to teach kids how to save money, to invest, to budget their lifestyle, etc. Just an opinion, though.

Forget coding and budgeting, I'd rather every American get 30 minutes of exercise 3 to 4 days per week. That would solve an awful lot of problems...

There has been a move towards credit rather than saving, but a big part of what you are talking about is actually just the economy tanking. People can't save. I don't have money for my healthcare, or for my taxes for this year, or for taxes for last year. The reason is that I have health problems I haven't been able to deal with. I am not uneducated and I have excellent technology skills. I don't spend a lot of money. I am not an unusual case.

Isn't that a rather ... subversive concept when a good fraction of those learning it will then apply it to the Federal budget, their state's budget and on down?

How is that subversive? It's basic personal finance. It's no more subversive than teaching kids to share toys encourages communism, in my mind.

In general, people shouldn't spend more than they make. If they spend more than they make one month a year, but save enough the other months to cover it, no big deal. I don't see how that's any different at a macro level, but I'm also not an economist.

To me it's far worse to avoid having people learn basic personal finance things than it is to avoid it, in case some people apply it to bigger things.

We have major debt problems in the population, in my opinion. The housing bubble was a part of it: buying things that one can't afford, with the assumption that prices always go up. Credit card debt being near $1 trillion (I think it's around $800b), college loans being over $1 trillion.... Borrowing has been made very easy for quite some time, but just because money is easy to get doesn't mean that the average person should borrow as much as they can (which is what I meant above when I said that affording minimum payments != affording something).

Put those numbers up against the median retirement savings, which are ~$150k for households with head-of-household aged 65+[1, Table 7]. It seems pretty obvious that we as a nation should be educating people to save for their future. I guess another solution, which would be to assume that people can't/won't save no matter what, and use the government to facilitate that "savings" (i.e. increase Social Security's role to the primary source of funds for retirement). That way we wouldn't have to worry about people subverting the system and can just trust the government to do all of the hard work for them. That may match up better with your view, if you find personal finance potentially subversive...

[1] https://www.fas.org/sgp/crs/misc/R43057.pdf

(Edited to fix typo: $8b -> $800b)

The trouble is that a simple house hold budget is very very different to that of a sovereign state.

This simplistic approach leads some (some might say most) politicians to sell dubious policies by folksy appeal to peoples perceived knowledge when in fact they are guilty of "Unconscious incompetence"

This "learn to code" meme is getting tiresome.

Why not focus on the more critical skills in life that are more applicable to most people. Here's a big one:

1. Learn to communicate. Improve your writing and speaking skills.

Well presumably because we already are telling people to learn how to write and communicate. Public schools spend more time on those topics than probably any other. Furthermore, advocating mastery of one skill is different from advocating basic literacy in another skill.

This said, I agree that "learn to code" is tiresome. Why aren't cries of "learn basic electrical engineering" as popular? Or, if we want clear societal benefit, why not advocate learning how to swim? Thousands of American adults and teenagers drown every year; something like 36% of Americans cannot swim.

Of course "either tell people to learn how to swim, or tell them to learn to code" is a false dichotomy (both can be done at once) but I am wondering why "learn to code" gets so much attention. The amount I hear about getting the general public to code seems disproportionate.

In the long run the ability to understand and manipulate information via automated instructions (ie, coding) will almost surely end up being as important being able to capture down and consume ideas (reading and writing) or manipulate abstract quantities through symbology (mathematics.) It's a fundamental skill that is plain to see unless you are so entrenched in the contemporary details of things like programming languages and platforms that you've lost touch with the underlying power, leverage, and joy of it.

The joy I find in programming is no more a reason to encourage people to learn to code than the joy of plumbing is a reason to encourage people to learn to plumb. People can find joy in nearly anything, that isn't something special that coding brings to the table.

Power and leverage? Yes, coding gives you those things, in certain domains, but I do not buy the argument that teaching coding is the most efficient way of teaching these things. Trying to use coding to teach critical thinking, logical reasoning, and basic troubleshooting would surely work, but we have these things built into language and fields that is already designed to handle it first and foremost, without the material distraction.

Very few universities start their CS programs off with something other than vocational drudgery that would be pointless for anybody who just wants those nice side effects of learning to code.

Consider that in 100 years we will still have people performing some derived concept of "coding" today, whereas all of our plumbing will probably be done by the machines which are created by those people.

Coding is an abstraction on top of an ever more essential skill: directing automated symbol manipulation. It seems foundational and those fighting against it are best likened to the subset of monks who surely saw writing as a skill to be learned only by a select few and not as some universal, fundamental skill all people would need to participate in society.

The extent that programming has been required to make effective use of computers has been in freefall since computers were first constructed. I see no reason to think that this trend will not continue.

Making sure that people can effectively use computers is different from having people learn to code. I really think that anyone who insists that the later is necessary has some serious tunnel-vision.

If this were true then we'd be hearing less and less about coding education, not more. There would be less "I have an idea and need a programmer" people, and not more.

More people want to learn how to code now because they realize they are at a fundamental disadvantage in manipulating these things that are entering every facet of our lives. This is the dominant force, not the slow marginalization of the utility of writing source code vs. well established problems like those that can be solved by Excel. In any case, programmers are currently proverbial priests who are the gatekeepers to enabling this effective use of computers, which I think explains a lot of the resistance to this stuff.

> "If this were true then we'd be hearing less and less about coding education, not more."

I don't think that follows. My hypothesis is that lots of programmers think that programming is more important than it really is, and politicians wanting to get tech on their side, humor them.

You know how rural farming towns often have strong 4H clubs? I think this "teach kids to code" stuff is the tech equivalent of that. Everyone wants little jimmy to grow up just like daddy and mommy, because daddy and mommy consider their line of work to be uniquely important or special.

Those communities think it is very important for children to learn how to raise cows, or drive a tractor. Ours thinks that it is very important for children to know something about computer programming. I think that either suffers from tunnel-vision and is is trying to put children into a box.

Can you not see how programming, as a skill, and computer science, as a discipline, are fundamentally different than things like plumbing and farming?

Society is on a trajectory. Automation, information processing, software. It is well on its way to permeate literally every facet of life. If there is a more direct way to position people to not be left behind in this shift than ensuring they have a basic grasp of computer science and understand they can make computers do what they want via code, I'd be hard pressed to come up with it.

> "learn basic electrical engineering"

Because when, outside of work and hobbies, have you ever found it useful to know basic EE? Unless you're rewiring houses on a regular basis, I can't really think of a common situation where you'd need this type of knowledge. OTOH and IMHO, everybody should know how to use a computer and have at least a rudimentary idea what the thing is capable of.

Edit: Actually, rewiring houses isn't even EE, it's whatever we call what electricians do.

A basic understanding of the physics of electricity will give you helpful insight into countless things in your everyday life; you likely don't notice this because you take such a basic understanding for granted. For example, understanding resistance current and voltage will allow you to reason about the efficiency of different sort of light bulbs (the package will give you the numbers and tell you it is good, but consumers are rightfully wary of what packaging tells them), understand how electrical heaters work, reason about their monthly power bill, etc. Knowledge of how electricity works, particularly home wiring, can save lives. Hell, just understanding what a circuit breaker is for and how to use it has the potential to save lives (and you would not believe the number of shoddy low gauge extension cables I have confiscated from my grandmother...) Even figuring out how to jump a car battery becomes much easier if you understand what you are attempting to do.

Meanwhile, since you and I can both code, we naturally inflate the importance of it. If we could not code, we would still get along in life just as well as the majority of the population (which by most reasonable accounts, is "just fine"). Basic computer literacy is much different from the ability to code, and this is only becoming more true year after year.

Don't know anything about the contemporary curriculum in US high schools, but my secondary education in physics included the basics of AC, DC, semiconducters and fundamental digital electronics, sufficient to help me fault-find a busted LED in a string of christmas lights this past weekend.

If schools aren't teaching circuits, V=IR and P=IV, I agree they should. But I'm pretty sure in many cases they are, so you're arguing with a straw man.

Thousands of American adults and teenagers drown every year; something like 36% of Americans cannot swim. I'm not surprised with the high level of obesity in the US.

Obesity isn't as much of a factor as you might think. With proper technique, very obese people can swim (at least 24 yards, which was the bar used for that statistic) without much effort.

Adipose tissue (fat) has a density slightly lower than that of water, so the primary concern is really keeping your head above water and not panicking (both of those are mostly technique, not really 'physical feats'). Once you've got floating mastered, an elementary backstroke will get you moving slowly through the water without much caloric expenditure.

Swimming ability seems to correspond to family income (and therefore access to pools) rather closely. Increasing the swimming skills of the general population would mostly be a matter of ensuring that school districts have pools, and making swimming lessons in PE classes a higher priority. Kids don't die because they don't know how to play badminton, but people do drown...

(Disclosure: One of my jobs through highschool and part of college was working as a swimming instructor, which is part of why this issue has my attention)

Not to mention "America's obesity epidemic" in reality means "most people have a little bit of extra flab" (based on BMI), not giant super obese people who can't get through their front doors. Most "obese" people are not in any way physically impeded from swimming.

Not too many folks are paid to swim. Clearly some folks think that programming has career potential in the future for young folks...

From my experience with administration work in a bank: just a little bit of code will go a very long way. Programming very much seems to obey the 90/10 rule. For 10% of the effort, you get 90% of the reward. (Maybe work the numbers a bit and call it 80/20).

Just consider how much Excel is used in just about any business. A tiny bit of VBA can really work wonders. Sure, a guy emptying bins isn't going to be helped by learning to code, but there are a huge number of people in desk jobs where just a bit of coding ability would make an enormous difference to productivity.

In short: I'm not convinced your assertion that writing and speaking skills are broadly more important is correct.

For better or worse, most people make judgments based on how well one presents themselves and communication is a big part of this.

Even in the software field, most companies are looking for people that can communicate effectively as well as code. I know the industry has a higher tolerance for people who are talented but lack social and communication skills but there are only so many companies out there that can accommodate these individuals.

Learning to code does not mean programmer, but if you learn a little bit about creating software you will have a peak behind the curtain and will be better able to assess what is practical and what is not as well as have some sympathy for the code monkeys.

Except that not everyone will work with code monkeys. Basic computer skills and able to use applications is a lot more different than programming, and often the reason you have levels of middle management with technical and business ability to decipher and relay the important information.

But that's not STEM so it must not be valuable or worth supporting. /s

1. Learn to listen.

2. Learn to speak.

0. Learn to think.

Funny, I thought that was the basic value proposition of the liberal arts degree.

Obama says a few nice things about Computer Science and encourages people to learn more about the world, and HN still manages to find every possible negative angle to trash it. Impressive!

Obama said a fundamentally ignorant statement that seems even more ignorant considering all the technical problems with Obamacare. Hacker News is just pointing this out.

Encouraging kids to try to become astronauts is not an ignorant statement despite the fact that becoming an astronaut is really hard. Telling kids to try to design iPhone apps or make video games is much less so. It's a shame that HN can't recognize what is fundamentally a good thing: a statement from the president encouraging curiosity and proficiency in computer science and programming. It's incredible to me that this community of so-called "hackers" can be so quick to shit on it. Perhaps it's an insecurity thing, and they are afraid if others learn their skills they may no longer be in the position of power they are in now?

"encouraging curiosity" this.

I've tried to talk to younger kids in my family about building things with computers. You'd be surprised how hard it is to get them interested, even if they play Minecraft all day.

For many of us, we got interested in programming though randomly hacking a game at one point in time. Telling kids that they can build their own games or apps and helping them potentially get interested is a big deal in itself.

> Perhaps it's an insecurity thing, and they are afraid if others learn their skills they may no longer be in the position of power they are in now?

Most of the objections seem to boil down to this. For better or for worse, HN is an entrepreneurial community, and everyone seems to be approaching this with an ultra-logical "this policy will decrease my worth by $X" approach. Post this video on a forum that's geared toward, say, developers of open-source software and see how different the reaction is.

One thing isn't inherently harder than the other. To put things in linear dualistic terms like

hard vs easy good vs bad moral vs immoral

can sometimes be over simplifying due to the normative nature of these concepts.

For someone who knows Vietnamese to learn Chinese is easy, but for someone who only knows English learning Chinese can be harder.

Each discipline has its' own linguistic domain. The difference between a software programmer and a rocket scientist is the rocket scientist knows a set of specific terms/vocabulary that distinguishes different parts of rocket, fuel, working process of aerospace and other stuff I don't know anything about. Not only does the rocket scientist knows all the terms, he/she also understands the relationship between each terms. It is mastery of this Linguistic Domain that make it possible for rocket scientists.

Programmer has mastery of a different Linguistic Domain and for some rocket scientists it may seem hard.

I do some what agree with you on the 'insecurity thing'. Although I think that is only a case in below stage 4 working culture (see Dave Logan, Tribal Leadership for reference on organizational culture stages http://www.ted.com/talks/david_logan_on_tribal_leadership.ht...).

I agree. Generally, I think criticism comes easier than praise. And no doubt, selection bias contributes to perceived hostility in forums. But I think CS cultures like in HN especially pride themselves on detail and pedantry. Let's be honest, I think most of us here have a superiority complex to some degree. It was probably ingrained in us through debugging. "compile? damn, segfault. gotta fix ALL THE ERRORS."

Lately, I've realized the motivational impact of having a hero. Something to aspire to. Kids go after what you expose them to. This ties in to what pg said in his essay about "nerds", and I imagine it has a lot to do with the unevenness of the CS demographic. I think the president's video is great. Not all of us have to become CS grads. But for some, the meekest exposure can sow the seeds of a great career path or hobby.

When coca cola tells me to smile in an advertisement I don't get a warm fuzzy feeling in my heart for their advertising team that agonized for weeks over just the right kind of generic appeal to get me to drink more sugar water.

You've told me nothing; you've added an irrelevancy.

Why is it ignorant? Care to explain?

You're supposed to get suspicious when a politician tells you nice things! I think it's sad that viewing this as being in the interest of reducing labor costs is cynical and "negative".

I'm critical because this video isn't doing much in the way of taking action. It'd be great if there was some follow through.

Here's an example: Obama can commit to open sourcing as much code as possible and encourage teachers to use the bug reports as a teaching tool. Children can fix the code as assignments.

How amazing would it be if you contributed to fixing Healthcare.gov as a 14 year old? Each successful bug fix from a student could get a bumper sticker: "My child fixed Healthcare.gov". Imagine the pride a parent would have putting that on their car.

Kevin Drum (spoilers: knows how to code) had the best take on this:


But wait. The link leads me to a fairly routine presidential video in honor of Computer Science Education Week, in which President Obama encourages kids to take computer science classes. "It's important for our country's future," he says. But I imagine he's cut dozen of videos for every other conceivable skill that could be taught in our nation's schools. "Nursing is important for our country's future." "Agriculture is important for our country's future." Etc.

So did this really lead to a conversation about whether everyone should know how to write code? How tiresome.1 I can probably list on one hand the number of significant skills that everyone should know. The rest are optional. Some of us know how to fix cars and some just hire mechanics to do it for us. Some of us know the law and some just hire lawyers to help us out. Some of us know how to drive trucks and some choose other careers.

In any case, I don't think computer programming would even make my top 20 of broadly useful skills.2 It's a great thing to learn if you plan a STEM career or if you just feel like learning it. But useful? For the vast, vast majority of us it's of no use whatsoever. Reading and writing are useful in nearly all careers, and are useful personally even if your job doesn't require them. But coding? Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you. Nor is it something that's useful in its own right because it promotes clear thinking. Nor is it a steppingstone to other, more broadly useful skills.

Coding is a specific skill needed for certain specific jobs. That's it. There's no need to put it on a higher pedestal.

1Tiresome because this comes up so often. Why do so many people insist that whatever skill they happen to know is one that everyone should know? There are lots of skills in the world. All of us know only a tiny fraction of them, and that's the way it should be.

2As a time-wasting skill, however, computer programming is hard to beat. I can no longer count the number of hours I've spent coding (or scripting) little utilities that did me no real good at all. But it was fun!

> But coding? Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you.

It's silly to reduce this to "Programming is useless outside of STEM". I once saved an admin assistant _days_ of work because I happened to stop by her desk to chat and noticed the task she was doing (combining some spreadsheets) would be trivial to automate. She had estimated at the rate she was going, she had 17 hours of work left.

I'm not suggesting she should know how to write script to parse and combine a bunch of csv's... But a basic 'literacy' in programming would have at least let her know there was a better way...

I have plenty of similar anecdotes, and I would guess many of you do as well...

Good point. Knowing it could be done would have been good enough for her, because then she would have known to ask someone to help her. If you have at least an idea of what's possible, you can then have a good idea when it makes sense to ask the expert to give you a little help.

She certainly would never _need_ to know how to do it herself, although there's nothing wrong with that. If she were asking the expert for something every day, then it might make sense to teach her more, but if the requests are infrequent and not time-consuming, then the productivity wins can be had without teaching someone something she doesn't need to know.

I think you are confusing things. Nobody wants the entire world to be CS experts. What most people are advocating is that an entry level CS course be given to all students. Just how we make them take Chemistry, Physics, literature.

No, I'm not confusing things, I'm trying to suggest that even just understanding what basic coding can provide would be of a lot of benefit to people. I think having everyone take a basic CS course is a fine idea.

While I think you make a good and valid point, why programming specifically?

For instance, I have been exposing myself to electronics and it suddenly became obvious how I can build certain circuits to save me time/money, where it was never obvious before. Why isn't Obama pushing for everyone to learn electronics?

Caveat: I'm not from the US. Maybe electronics is already part of the curriculum. (Basic) programming has been part of the public school curriculum here for several decades. My father even recounts using punch cards back in his day.

>>But a basic 'literacy' in programming would have at least let her know there was a better way...

That has very little to do with programming and much to do with skills like analysis, reasoning, problem identification and thinking in the direction of automation(Reduction of human effort).

Let me as you a simple question. If learning programming teaches you to naturally thing about automation. Why haven't programmers automated programming itself completely?

Programmers have been automating "programming itself" through the creation of higher level languages (ASM->OOP) and through things like libraries. Programmers are always thinking about how to automate the automating. The entire notion of abstraction could be thought of as automation.

Literacy in programming does help people recognize ways of reducing human effort. I believe it fundamentally changes the way you think especially in areas of analysis, reasoning and problem identification.

>>Literacy in programming does help people recognize ways of reducing human effort.

Literacy in any equivalent domain, which uses significant level of Math helps you recognize ways of reducing human effort.

Programming is one such domain.

>>I believe it fundamentally changes the way you think especially in areas of analysis, reasoning and problem identification.

We already have a subject to take care of that. Its called 'Math'. If you are not teaching Math properly, merely replacing with an abstract domain of Math and teaching it equally badly won't cause any reasonable impact.

What's more learning nearly anything well, encourages analytical skills, reasoning and problem identification. Law, medicine, accounting, teaching, farming, nursing, personal finance etc etc the list is endless.

I don't agree with Kevin. It's true that you can function without programming, but it's also true that being able to program could improve pretty much any job. Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him.

And more broadly, I really do think programming improves the quality of my thoughts. I remember when I was 10 or 11 consciously experiencing the sensation of getting smarter as it dawned on me at deeper and deeper levels how to think precisely about problems. And that skill set invades every aspect of my thought process now. I find it to be a remarkable improvement.

On a practical level, programming is probably the best employment fall-back ever. I don't know many fields that you can enter without any credentials and make $100k+ within a couple years. That may change, but I expect it'll stay the same or improve for at least a few decades. So just for that reason, it may be wise for anyone who is capable to learn it.

"it's also true that being able to program could improve pretty much any job. Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him."

If a janitor develops the skills to go that far, why would he still be a janitor?

I'm not saying that to be glib. I'm saying that because coding is a specialty that requires a great bit of practice to get functionally good at. The time and effort invested in getting good at programming just isn't worth it for many professions, whereas hiring specialists to do the programming is.

Sure, our hypothetical janitor would be able to do some cool stuff if he could develop apps. But if he can develop apps, economically speaking, he should be transitioning into higher-value and higher-paying services. (Unless he wants to disrupt custodial services with a startup -- but not every janitor should found a startup. That would be impractical.)

Saying "everyone should be able to code" is a bit like saying everyone should be able to do college-level statistics. I can't think of a single profession that wouldn't benefit from a college-level understanding of statistics. But not everyone's cut out for it; it's not fundamentally necessary to every profession; and in the context of a market economy, it functions better as a knowledge-specialty than as a broad foundational skill. (This isn't a flawless analogy for any number of reasons, but hopefully you see what I'm getting at.)

Absolutely. The real tragedy of our economy is not that everyone should be coding but isn't, but that it's not generating enough demand so that even people who are good at laying bricks and driving trucks, etc. have enough job opportunities

> Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him.

Those require a lot of effort (and required knowledge) for minimal returns. A better example might be a janitor could make a web-app which lets himself/others note what places need to be cleaned, what time they were cleaned, and then potentially notice patterns that might help him find a source of the problem, minimize the response time, etc. I feel like that kind of a thing might be more useful and given the right tools/frameworks, might not even be all that difficult to implement.

We are a long long long way from that. Only 66% of Americans even understand the statistical concept of mean.


Americans encounter basic statistics and charts in everyday life. Many media reports cite studies in health, social, economic, and political trends. Understanding statistical concepts is important to understanding the meaning of these studies and, consequently, to scientific literacy (Crettaz von Roten 2006). One test of these concepts included on the 2008 GSS found that 74% of Americans could read a simple chart correctly and 66% understood the concept of "mean" in statistics. Understanding these two concepts was associated with both formal education and the number of math and science courses taken. Older respondents were less likely than younger adults to respond correctly to these two questions. Men and women were about equally likely to answer these questions correctly (appendix table 7-15).

This is really absurd. Most janitors are paid by the hour. Why would someone engineer their paycheck away? You obviously don't want to spend a real long time doing your job less get fired or be seen slacking off. However if you were paid to clean a school after school and had a set task and you engineered a 4 hour job into a 1 hour job, EXCELLENT you just cut 3 quarters of your paycheck away.

Why would you build a roomba when you can buy one?

Have you ever used a roomba? You'd need like 500 of them to cover enough ground for a school or a store and they'd have to run overnight and avoid falling down the stairs if you were in school and good luck finding them all the next day.

There's a whole custodial industry that has already thought of and solved many problems and perhaps they do things the way they do because that's the best solution, because roomba may be good for a room in a house but bad for a whole school

If you had set hours, you still wouldn't want to optimize your route. I know that the time goes by much faster if I'm busy and doing work than if I'm sitting around with no work to do. Nobody wants to walk around and see employees sitting around doing nothing, that's a good way to get fired. People complain. Your hours get cut. Your paycheck gets cut.

I had a job in high school that was awful because between the hours of 2 and 4 there was nothing to do. Two hours felt like a whole lifetime. I tried to make up work like scrubbing walls and stuff but I couldn't do that all the time because the walls were dirty once. It would have just been fine if I had some friggin work at that time.

The janitor could write a program for logistics ... I don't mean this in a mean way but ... just stop. We're going too far this point.

I think most importantly it's about being computer-literate in a broader sense. Introducing kids to programming should be seen as a general knowledge matter. We introduce children to many fields so that they understand better the world they live in. Coding should be no exception, especially as computing becomes ever more dominant in our society. An introduction to programming would give children the basic vocabulary to understand what it's all about, and maybe the idea to go further when they need to or want to. Importantly, it also serves to demystify the field: a child might feel that programming is way beyond her reach, maybe requiring a significant technical background and complex and expensive tools to do anything? She might look at it differently when she discovers what she can do with Notepad, a browser and 20 lines of Javascript.

> Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you.

There are very few, if any, areas of knowledge work (which is broader than STEM, but subsumes it) to which a small amount of programming skill cannot be productively applied -- even the ones where institutional IT policies have restricted the available means of applying that skill to, say, Excel macros.

> Nor is it something that's useful in its own right because it promotes clear thinking. Nor is it a steppingstone to other, more broadly useful skills.

I'd have to disagree with this pretty strongly. There are probably ways you could develop some coding skill without learning broadly-applicable problem decomposition and analysis skills that are usable almost everywhere and not usually taught in other contexts, but you'd have to make a special effort.

Eh, lots of people end up using information systems incidentally to what their main task is. I wrote a script in 20 minutes to automate some email->shipping labels work and saved someone about 5 hours of work a day.

As more people start using datasets in some capacity for their "real jobs", being able to automate things becomes increasingly important. The amount of insane labor going on using Office boggles my mind. Knowing coding will at least get people to say "wait, there's gotta be a better way" even if they can't accomplish it themselves. Not to mention the cognitive benefits from thinking through problems.

"I wrote a script in 20 minutes to automate some email->shipping labels work and saved someone about 5 hours of work a day"

I see a number of anecdotes like this and they all seem to miss that their actual anecdote is actually something like: I saved a non-coder X hours by drawing on my thousands of hours of experience.

No one disputes that knowing how to code would be useful to many people. What's being disputed is how useful it is for the time everyone would have to invest. Perhaps it would be more efficient to have professional coders going around and helping automate tasks for admin people than it would be to enroll all the admin people in coding classes.

Maybe everyone should know how to brew delicious coffee or maybe only the coffee aficionados will do that and the rest of us get by with a combination of whatever dreck our Mr. Coffee at home spits out and by handing our money to baristas the rest of the time.

This case was actually embarrassingly simple -- a keyboard macro script. Arrow down, tab, ctrl-a, ctrl-c, alt-tab, ctrl-v, alt-tab, tab, repeat. I had never written such a script before, I just saw her hand motions were repetitive and figured it could be automated. Time spent was 1 minute looking at the keys entered, 15 minutes searching how to send keystrokes, and a few minutes deploying.

If admin people had some familiarity with coding and such, they'd be more quick to realise "wait, I'm acting like a mindless robot - this has to be scriptable somehow". Yet I've seen this kind of manual repetition (copying parts of an Excel sheet, concatenating files, etc.) plenty of times. It's often surprising to the admin people that some things are automatable, and some things are so obvious to programmers, that sometimes neither side realises there's a problem that can be fixed.

I'm working in a site with a sysadmin type and graphic designer currently. They don't realize that when we need to uncheck a box in the admin for 800 products, sitting there and manually unchecking 800 boxes is not the way to do it. I just shake my head as if they're insane and write 1 line of SQL.

I don't think anyone's saying that non-coders need to become thousands-of-hours coders. But being aware that it's possible to automate these tasks makes (or so the thinking goes) people more likely to realize that specific tasks can be automated.

I have a project rather similar to your "going around and helping automate" in my backlog at work, actually, but it'd be a lot more efficient if the people doing the work were in a place to have an idea of what my time would be best used doing rather than me having to do the digging.

Hmmm, if only there were people that know how to program and can build automation tools....

Your sarcasm conflates execution with problem identification.

I have to agree with Kevin Drum on this. On the list of vital life skills that everyone should know, coding is not in the top ten.

This being Hacker News, it shouldn't be surprising that we tend to put software development on a pedestal. This thread is devoid of "I saved a coder 20 years of his life by administering CPR"-type anecdotes that would make coding appear far less attractive as a skill.

>There's no need to put it on a higher pedestal.

Agreed, but when there's an important skill that's being developed overseas and neglected domestically, well, its worth beating that drum. Agriculture doesn't have that problem.

The world is becoming more and more digital. Encouraging domestic success in technology should be a national goal and, no, "I have an MBA and an idea for an iphone app" isn't enough. Software is still eating the world. The Chinese, Russians, and Indians certainly understand that. Do we?

While I think more people should learn code, I think the president getting up and telling everyone to do anything that isn't applicable to... well... every-freaking-one... is stupid.

Washington is clueless in two ways. (1) It normally doesn't get new things and lags behind. (2) When it does get things, it proceeds to fail at execution or not really get them and do ham-fisted things like this. So that means that Washington is always clueless about everything.

Sometimes I think the only thing that keeps us from being invaded or otherwise run over by the rest of the world is that nearly all other governments are at least as incompetent as ours.

I agree. How many of those making laws right now know anything about technology let alone how to code? So why does Joe Public specifically need to know how to code? It would be much better to teach people math and proper grammar, that would get them much further in life.

What do you mean by proper grammar? Stuff like using "you and me" correctly and not falling into the "you and I" prestige English trap?

People acquire proper grammar naturally with their native language.

Proper grammar, for practical purposes, should be defined as "is capable of talking in a way that will not put them at a disadvantage in job interviews". Use of the the word "ain't" probably isn't worth worrying about; stunted vocabulary and inability to match tenses probably is.

Yes, this is exactly what I meant. I'm not pedantic enough about the "you and me" stuff, or even fully correct in my own punctuation and I'm a native English speaker. But knowing the difference between "there, their and they're" is very important for example.

It seems like you might be more concerned with people knowing how to communicate well. Knowing how to format their thoughts so that they will be understandable through conversation or text. The ability to adapt this formatting process to fit the audience they are trying to reach.

Yes, that also. As a programmer, half the battle in trying to understand an issue exactly what you have just stated. In my job the second part is also very true, tech speak for other developers, business/marketing for everyone else. But I've found this applies to all walks of life.

To me, programming comes down to breaking a problem down into smaller pieces, which is basically like algebra. My first internship (way back) required us to carry out a written test: here are some simple algebra equations, you have a basic calculator with one (or two, can't remember) memory bank, write out the exact exact key presses to solve the equations. To me it was simple, but apparently not to everyone.

It's stuff like this which the education system should already be teaching, work on improving that rather than trying to get _everyone_ to code. Coding is not for everyone, your doctors, lawyers, actors, artists and many others are not going to need it

That's mostly an issue with English spelling---which is an attrocious system.

Possibly, I presume you mean because it is not phonetic? But that is not going to be so easy to change... My biggest gripe of the modern school leavers is when dey ryt n txt spch & i hv 2 decifa evry wrd. That's ok in an actual text message, but I've heard of stories where it has been carried over to exams, CV's and the workplace.

Anyway, that's what grinds my gears :)

Oh, that's mostly a failure to communicate in the prestige dialect of English.

You seem to have a big gripe about the English language. There is nothing prestige about it, some of the upper class may like to pretend there is but it's just a means of communication like every other language and I would make the same observations about those too.

There are different version of English. Please refer this most interesting paper "Grammatically Deviant Prestige Constructions" (http://fine.me.uk/Emonds/).

Do you really think the parent is talking about "nit-picky" stuff such as that ... Are you aware of no grammar problem anywhere in the US??? Really? You would have to be pretty sheltered for that to be the case.

I'm glad to be sheltered from the US, by having only visited once.

It's nice that he likes programmers. But the talking heads from DC should be encouraging people to learn job skills in proportion to the numbers needed by the economy of the future.

Clearly, an economy entirely composed of programmers is not viable. There has to be at least one other person to dig out all the basements.

When I was growing up in Silicon Valley, everyone learned to code using Logo in (iirc) third grade. Everyone also learned to type. It was a required part of the curriculum.

Teaching us to code didn't mean we didn't learn to communicate. We still were taught math. At no point did the small period in programming and typing done once a week somehow deprive us of critical life skills.

It did however have a dramatic effect on myself and a good amount of my class. By the time I was in 6th grade, I knew three people running their own BBSes out of their houses (this was about 1989).

Not everyone who went through Bullis Elementary went into programming, but thinking procedurally (though technically Logo is a functional language), is a valuable skill to be learned regardless. In my opinion, being able to break a large task down into simple steps is a critical life skill.

I frequently disagree with the president, but he really hit the nail on the head with this one. I've been saying for a while now, if we were to replace high school and college foreign language requirements with a computer programming language class, you would propel America way ahead of everyone else (more-so than now) in terms of industry and innovation, and do wonders for the economy, all within a decade.

Think about it. Teachers, scientists, psychologists, poly sci majors, doctors, all with basic computer programming abilities. With the ability to build efficiency into their work. That would be so immensely powerful, the investment would be untold dividends. Way more than memorizing spanish vocab for a grade and then forgetting it.

There are a couple of assumptions built into your proposal that I would want to see some data to support:

1: Computer programming competes with foreign languages in high schools and colleges.

2: The economic value of programming languages is greater than the economic value of foreign languages.

Your last sentence also suggests you are comparing apples and oranges, a grade of a foreign language that is dropped against achieving basic computer programming abilities. These are not the same level of achievement.

I think understanding computation is a key 21st century skill that we would do well to invest in but I think foreign languages also have value.

In the US, meeting the foreign language requirement doesn't require actually learning a foreign language. I know many people who took the obligatory college prep Spanish who can't respond to "Buenos días." This is a better argument for improving foreign language education, though, than replacing it with computer language education. And, frankly, if the latter were taught as poorly as the former, it wouldn't be worth the trouble.

I don't think I was being clear. My point about apples and oranges was based on the view that if the programming languages achievements were as limited as the described foreign language achievements then not much would have been gained.

1) I don't know what country you're from, but in America here is how it works: In general, competitive colleges require at least two years of foreign language classes in high school. Stanford would like to see three or more years, and Harvard urges applicants to take four years.

When a college recommends "two or more" years of a language, they are clearly signaling that language study beyond two years would strengthen your application. No matter where you apply for college, a demonstrated proficiency in a second language will strengthen your application.

Students who have just the minimum can win admission if their applications demonstrate strengths in other areas. Some less competitive schools don't even have a high school language requirement and assume some students will simply study a language once they get to college.

If you score a 4 or 5 on an AP (advanced placement) language exam, most colleges will consider that evidence of adequate high school foreign language preparation (and you're likely to get course credit in college).

2) Foreign language requirements are originally a product of enlightenment era education curriculum and have been kept afloat with notions that in a globalizing economy candidates who can work internationally will garner higher wages and be more productive. This is true, to a degree, but wouldn't you rather work for a Swedish web design firm from your US based coffee shop?

US universities should really ditch the general language requirements and leave it up to the college or department within the college to decide whether it would even be useful.

Air traffic controllers and software programmers only need to know English. Business students intending to work for a multinational need at least one more language, and they should be from this list: Spanish, Mandarin Chinese, Cantonese Chinese, Japanese, Russian, German, French, Portuguese, Korean, or Standard Arabic.

The vast majority of graduates of US universities who are from the US will never need a second language other than Spanish, and they won't even need to know it all that well.

I still don't see that dropping the foreign language requirement would immediately lead to an increased take up of programming languages. I don't understand why foreign languages are what should be dropped.

If there is limited time for learning and there is no space for programming then any changes should be discussed in light of the full current curriculum. The original post suggested that foreign languages should be dropped in favor of programming languages, there may be other subjects of the curriculum that could be dropped instead, especially if the yardstick of economic value is the measure to be used.

> I've been saying for a while now, if we were to replace high school and college foreign language requirements with a computer programming language class

Computer programming has absolutely nothing to do with learning a foreign language. Learning a foreign language provides excellent perspective on your own, leading to a much greater understanding of grammar.

I took four years of Spanish and it's the only thing that made the endless, repetitive English lessons finally 'click'. For the record, I also took four years of programming and passed both CS AP exams (not that it mattered, since at the time colleges wouldn't acknowledge it b/c it was taught in Pascal and everyone wanted C -- yes, they were really that dumb).

Learning a foreign language provides critical insight into language. Learning to program provides critical insight into how to break problems down and how to structure a solution. Both are valuable and dissimilar.


Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact