President Obama calls on every American to learn code
youtube.com
youtube.com
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?
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 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.)
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.
Programming is more than any language, tool, or algorithm, it is a way of thinking.
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.
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.
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.
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."
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)
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!"
(This happens more often than I'd like to admit)
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?
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.
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.
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.
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.).
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.
The powerpoint extensions I used in consulting were created by ex-consultants so it's not unheard of to do this.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.)
Cheers
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.
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.
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.
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.
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.
I've seen lots of people, from engineers to workers on the loading dock, use Excel to create convenient tools for their own use.
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.
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.
Simple example: non-coders had no clue what could possible be wrong with voting machines.
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."
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.
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.
- 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
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.
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.
"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.
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?").
What you want people to learn is basic system maintenance and troubleshooting.
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.
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."
"A little learning is a dang'rous thing;
Drink deep, or taste not the Pierian spring".
I am not sure that appreciation of complexity is a worthwhile or even an achievable objective.
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.
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.
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.
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?
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.
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.
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 =).
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.
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
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.
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...
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 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.
http://abcnews.go.com/blogs/politics/2008/08/obama-pushes-ba...
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...
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.
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.
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?
Whats QoL? Quality of Life?
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.
“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
This is already being taught (atleast here in Norway.)
I don't want to die gallantly though, just satisfied with whatever I've accomplished and left behind.
Specialization isn't just for insects. Its for robotics and software. Anything that can't learn and evolve.
The thing at the end is the premise that the rest comes from, not the conclusion it reaches.
And people wonder why you are so obese and in debt.
Note: I never bothered to research the context.
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-...
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.
good (life skills)
(good life) skills
Both apply equally!
What the president should encourage people is to become a MAKER - a general term for DIY manufacturing.
http://en.wikipedia.org/wiki/Maker_culture
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.
Next step, teach everyone in america, how to keep windows free of viruses... nah... maybe teaching everybody to code is easier. :)
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.
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)
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"
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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)
2. Learn to speak.
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.
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.
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.
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.
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.
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...).
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.
http://www.motherjones.com/kevin-drum/2013/12/no-everyone-do...
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!
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.
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.
http://www.nsf.gov/statistics/seind12/c7/c7s2.htm
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).
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.)
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.
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?
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...
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.
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.
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?
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 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.
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 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.
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.
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.
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 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.
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.
People acquire proper grammar naturally with their native language.
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
Anyway, that's what grinds my gears :)
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.
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.
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.
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.
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?
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.
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.
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.
But here is the reality.
America already overproduces scientists and engineers. The whole notion of talent shortages is generally hot air from special interests (in this case, tech companies) who want a cheaper supply of labor and cannot bear the idea that skilled engineers actually cost a lot.
A lot of effort is put into trying to turn ordinary folk into high-caliber professionals, with things like "everyone should go to college" or in this case "everyone should learn to code". It's not surprising educators are happy about this as it provides a steady customer base (students). Politicians are happy to support it too, after all what could be bad about more education?
The problem is that Joe laborer simply isn't a good fit for STEM fields and no amount of education will change that. He wastes his time and effort trying to become something he's not. In that time he could have been doing something productive and meaningful instead.
I've heard good things about the German model of apprenticeship, which accepts the reality that not everyone is cut out for rocket science. I'd like to see something more like that in America and less bullshit like "coding for everyone". People are different... let's encourage them to do whatever they are actually suited for.
Out of curiosity, do you have a link to any evidence or supporting materials to this claim? It's the first I've heard of it.
http://spectrum.ieee.org/at-work/education/the-stem-crisis-i...
http://www.businessinsider.com/the-real-truth-about-the-stem...
http://gizmodo.com/there-may-not-actually-be-a-shortage-of-s...
http://www.cbsnews.com/news/is-the-stem-job-advantage-a-myth...
It's also interesting (and perhaps, sad) to me how there are stories in Silicon Valley where a top engineer or two are offered massive financial incentives to join another company. Those stories are usually cited as examples of a technical talent shortage in the Valley, but in reality, they are exceptions, not the rule.
http://www.issues.org/29.4/hal.html
this one has more of an "agenda" behind it
http://www.vdare.com/articles/national-data-stem-shortage-sh...
Buzzer #1. It doesn't take just "a little bit" of math. It takes a TON of math. Reading CLRS took me a month to master, and that was already with a background in elementary calculus using the infinitesimal approach. I'm reading Knuth's seminal "Art of," and I can immediately say that it would be absolute hell for anyone without an advanced mathematics background.
That brings us to mistruth #2: that somehow, learning to "code" will help younger people build tomorrow. That's utter bull. Learning to code will only lead to worse code: uglier, crappier, and less elegant and efficient code. Github will become a junk pile. Instead of coding, we need to teach students the programming part of computer science. Get a copy of Algorithms into every CS course and get rid of all of the silicon in the classroom. Trust me, people will learn much more meaningful things about problem-solving that way. Isn't that what writing code really sets out to do? You know, SOLVE PROBLEMS? Just code is NOT going to help that at ALL.
Then there's problem number 3, and probably the largest one: it assumes that programming is something we need EVERYONE to learn. EVERYONE. Yes, that is Code.org's goal. EVERYONE SHOULD CODE.
You know what, fuck it and let's teach EVERYONE TO BE A MECHANIC. Right? Why the hell not? It's like programming. Only that nobody in their right minds would tell people to make mechanical engineering a part of the curriculum. But people insist on doing the same for CS, as if it's any different.
I could go on about this for days. But forget it, Atwood's explained it far better than I ever could.
––––––––––––––––––––––––––––––––
originally posted in the original discussion located here: https://news.ycombinator.com/item?id=6873136
At the elementary school level, my kids attend a psuedo-STEM school and sadly you're not too far off the mark. Its pretty much that and civil.
Civil is actually a good one for kids. Give them a beach and some water buckets and shovels and they're happy for days if not weeks. Some clay and dirt works even better although filthier. Its pretty much outdoors only due to the mess, so the kids are stuck with a mostly MechEng STEM
Drafting is still borderline acceptable because its assumed you'll be an engineer and obviously the training you get in autocad 2003 at school will be about as useful on the job in 2023 as my experience with Bank Street Writer when I use vim today (In other words zero if not negative)
The STEM fad is less oriented toward practical tradesman type stuff and more toward physical learning... we're doin' it "engineering style" if we build bridges outta lego for fun time instead of playing dodgeball or having a spelling bee.
The fad is burning out... An inductive proof of all .edu fads, or all fads in general, is something like generation zero was real STEM, but n+1 was 95% of what passed for STEM in generation n and 5% whatever we used to do. Once generation n gets to a high enough number you end up doing whatever you feel like. Comes from not having a real definition, along with everyone loves a popular label, so kindergarteners attend STEM schools meaning ... um what?
We are very rapidly moving toward a time when the labor battles of the late 19th and early 20th centuries will have to be re-fought. History is clearly showing us that the alternative to activist labor is feudalism. In "natural" markets, multiple overlapping network effects cause nearly all wealth to flow to a very tiny number of strategically positioned or connected participants. Everyone else must fight for a slice of the pie. Even in a growing-pie scenario, nearly all the growth flows to the top; a rising tide lifts only the largest boats.
The libertarian ideal of volitional culture leading to equality and general prosperity is, like nearly all other political ideals, rapidly shaping up to be false. It's becoming clear that the natural state of human affairs is feudalism, and that anything else is an unnatural state that must be maintained "artificially."
The answer is that deflation must occur. Home prices must fall, etc.
The problem is that deflation is incredibly painful, more painful than inflation. Activist labor is highly inflationary, which in today's debt-overburdened environment is exactly what we (meaning about 99.5% of the population) need.
You can make shoulda-coulda-woulda arguments about how we got ourselves into this mess with too much debt, but there's two problems with that. The first is the pragmatic fact that we are here and that populist-driven inflation is the least painful way out. The second is a bit deeper. One thing that's becoming clear from history is that "trickle down" economics does not work. Money does trickle down, but it trickles down in the form of debt. Why engage in entrepreneurial ventures or pay higher salaries when you can lend money at interest with less work required on your end and more assurance of repayment? There's a direct balance sheet correlation between the rich getting richer and everyone else going deeper into debt, since the savings of the rich become the debt of everyone else.
I am not, by the way, advocating "socialism" in any dogmatic sense. That IMHO is another discredited dogma. I am advocating pragmatism in lieu of a better idea, since I think all political dogmas are discredited at this point. If you don't have a systematic approach to solving a problem, the only choice you have is between winging it and doing nothing. Doing nothing here will lead back to feudalism.
Edit: one more point: Silicon Valley folks have a distorted picture of the rich. California's neuvo riche tech elite are not in the mainstream for their class. In short, your rich people are better than everyone else's rich people.
The mere existence of folks like Elon Musk and Jeff Bezos shows by virtue of comparison that the vast majority of their socioeconomic contemporaries are merely lucky gamblers who have rationalized their ascent as meritocratic via survivorship bias. If being in the 1% were truly meritocratic we would have a ton of Elon Musks launching a ton of world-changing ventures all the time. Instead we have a bunch of mediocre rich people putting their money in dumb Wall St. funds that do nothing with it but buy government bonds or create more debt (and me-too herd-driven bubbles) for the masses.
Heh... I guess another solution would be much smarter and more creative rich people. :P
http://www.theguardian.com/world/2013/dec/08/david-simon-cap...
That is exactly my view as well. Great article.
A few months ago when someone taught a homeless man to code we congratulated him on improving another man's lot in life.
We continue to give kudos to folks like CodeAcademy for teaching people how to code free of charge and introducing more people to our industry.
But when the government does it it's a conspiracy the depress wages?
Sometimes I just... nevermind, I forget where I am.
When the government urges people to go do things (presumably to be followed by things like subsidies), it is a recipe for blowing up the industry by steamrolling people through it. Good examples abound: Home ownership. Going to college. Getting into STEM.
Even better: in what way(s) is/are there not enough coders in America?
Most on HN seem to support the idea that not everyone should become a computer programmer (as a profession), but being exposed to the ideas in used in CS are very helpful for learning how to think about certain types of problems.
Personally, from a practical standpoint, I think a lot of people could benefit by learning basic scripting to automate computing tasks - I've seen way too many people doing extremely tedious tasks by hand, when a simple script could have saved them hours.
---Similar discussions---
Everybody does not need to learn to code: https://news.ycombinator.com/item?id=6237007 (74 comments)
Why everyone should not learn to code: https://news.ycombinator.com/item?id=5302157 (62 comments)
Please learn to code: https://news.ycombinator.com/item?id=3975992 (147 comments)
Please don't learn to code: https://news.ycombinator.com/item?id=3975744 (268 comments)
The simulator didn't work unfortunately but they did warn about this on the site when I started. After I had done the tutorial I landed on the Summer Academy page where you can do a 8-9 week course in programming. Very nice!
Then I discovered that this was certainly not for free: $5000 it will cost you. I must admit I was a little shocked. That is not a price every one can pay for this learning to code adventure. That was a part Obama did not mention. It feels like a standard marketing trap, luring in people to do your course, buy your software, etc. Only difference is the frontman of the show ;)
It's proved again: there is no such thing as a free lunch. Now walk on please, nothing to see here.
1) It supports affirmative action and seeks to set sex quotas. (http://slashdot.org/story/13/11/24/187255/codeorg-more-money...)
2) It offers a very sugar-coated and frankly nauseating view of "coding". It adulates this mysterious and powerful essence dubbed only as "code" and is highly biased towards the imperative paradigm. Notice how they rarely use the word "programming", but rather it's always "code". This signifies that they value parroting instructions more over actual understanding.
3) The testimonials by all sorts of celebrities are simply ridiculous and laughable. So many actors, musicians, sports players, politicians and business moguls, but barely any actual computer scientists.
4) The way they present their entire campaign, and considering who backs it, leads me to believe that their motive is not to foster computer science education, so much as to teach people just enough skills to be a 9-to-5 code monkey that can write instructions in Java or some $EnterpriseLanguage. Cheap, disposable labor.
5) Absolutely no focus on software freedom and ethics, of course.
6) Another possible outcome is that by making computer science (rather merely coding in this case) a mandatory subject, they'll end up alienating many kids from it. This depends on the aptitude of the educators, but it's safe to assume it won't be too good.
7) This is arguable, but merely learning to code basic programs doesn't really offer too much insight into the complex process that is software development. The educational value in writing Ruby (used here as an example), while not void, is not that great by itself. Programming languages and natural languages have this thing in common: they're different. Ruby isn't Haskell.
Then again, no politician would want this reality.
"I think everybody in this country should learn how to program a computer--should learn a computer language--because it teaches you how to think. It's like going to law school. I don't think anybody should be a lawyer, but I do think going to law school would actually be useful because it teaches you how to think in a certain way, in the same way that computer programming teaches you, in a certain way, how to think. I view computer science as a liberal art. It should be something that everybody takes."
Well I learned. I worked as a software dev for 1 year as well. And you know what I've learned? I have no passion for coding and it makes no sense to force myself to do something I'm not interested in doing.
If anyone is interested in working with me on a startup let me know. I'm a founder who knows how to code but doesn't like to.
Seriously, it seems like half of the comments seen on Youtube (or at the bottom of any article on a news site) read as if they could have come right from a post on StormFront.
Most of the comments here on HN are similarly shameful. How can free, high quality educational materials, and lobbying to improve access to computer science education possibly be a bad thing? I've talked to a ton of educators and technologists and they are nothing but excited, then I come here, and it's cynics and conspiracy theories.
On YouTube, what you'll see is a swirling vortex of stupidity from which even light itself cannot escape. YouTube comments barely even break a kindergarten reading level and represent some of the most acidic vomit society can produce. It's like a kind of caustic acid bath, which, in the same way bulimia will destory a person's teeth, YouTube comments manifest as an erosion of intellect. This is a curious result, since Google has made great efforts to curtail obnoxious behavior on YouTube, but with little effect. It appears that the lowest common denominator on YouTube has no shame, and that even when a person's legal given name is exposed on YouTube, the quality of a person's comment remain as awful as ever. This is the context of thearn4's comment.
Meanwhile, here on HN, the tone of the arguments is different, and while there will always be an amount of social and political flamebait as ambient background noise, the discussion is not the same sort of bestial braying that you might find on YouTube. The reality, though, is that the best and brightest here at HN are wise to avoid any sort of non-technical discussion, especially when the topic is politically charged and emotional. In most respects, this is due to the phenomenon known as "bikeshedding" where you'll find that the easier it is to have an opinion, the more absurdly conflicting opinions will be found, and the more intractable the topic becomes. In this case, it's easy to have an opinion about Obama, and an opinion about how practical the generalized concept of "programming" is. Thus the thread becomes a dumping ground for everyone willing to share their 2 cents. Still, a dumping ground here on HN will produce higher quality well-sorted recyclable refuse, and not the fuming vat of toxic waste you might find on YouTube.
As for the trends in this particular thread, many seem to touch on some key premises:
1. In order to develop a useful appreciation of modern computing, the learning curve of today's state of technology demands a degree of immersive dedication that will rebuke most ordinary people. In some ways this might seem like a jaded, pessimistic outlook, but many are speaking based on personal experience, and not a desire to exclude.
2. The reality of computing as a career choice is a pockmarked mine field, peppered with unique absurdities not found in other fields. The industry surrounding the production and sale of modern computing devices and related services is an active war zone, with fluid and rapid changing fronts. Conflicting interests consistently hatch plans to sabotage one another, and raise the costs to enter the field. This detail is not lost on the HN audience, and contributes to the tone of pessimism.
3. While teaching and learning are admirable aspirations, and no one will dispute that, one cannot easily dismiss certain realities of modern computing history, most importantly that there are major forces at play in this field, with deliberate designs to disinform and disenfranchise end-users of the basic functionality of the devices they may purchase, with the deliberate goal of enriching corporate profit margins. This behavior is exclusionary, regardless of any claims otherwise, and is a hotly debated and emotionally charged political topic. The very topic this video might (perhaps naively) approach. The topic of free open source software.
4. While educators will champion access to computer science education, large business will assuredly attempt to mutate the nature and success of freely available education materials, wherever any ideas presented by such education might come into conflict with a company's business model.
5. Already aware of these premises, differing factions of the HN audience will present opposing narratives for why computer science education will prove impractical and ultimately fruitless. One side will postulate thatsuch educational initiatives will be watered down in the interest of preserving the status quo, and that large companies have a vested interest in preventing certain patterns of learning (conspiracy theories of corrupted industry leadership). Another side will claim that no one wants this education, no one will be good at it, that the majority of people are not a good fit, and that most people are too stupid to learn anyway so why bother (blaming end-users for their own ignorance when most are deliberately misinformed).
6. Both factions cling tightly to a certain kernel of truth in each argument. On the one hand, manufacturers of modern proprietary computing devices have a long and storied history of denying their paying customers of certain hardware and software privileges, solely for the purposes of producing exorbitant profits. Onthe other hand, the rabid stupidity found in a typical sample of YouTube comments is not to be dismissed. Many, MANY people out there are pants-on-head retarded, and they're giving these people computers. Why, god? Why?
7. A third faction continues to express an incensed vitriolic indignation over the Snowden leak. This carries it's own geopolitical context with unique peculiarties which are off-topic with respect to the premise of education, but will continue to haunt anything involving President Obama, The Internet, and American interests therein. Comments pertaining to government attitudes regarding cryptography are relevant to this branch of conversation, and tangentially relate to what industry insiders might not want people to learn about.
8. Healthcare.gov is a buffoonish albatross, blah blah blah... so what. Less distinguished people claim this as an indicator of the potential for competance in any state-sponsored endeavor, and chase their tails about parading any victory they can find, this is where HN starts to go off the rails, and lower order opinions start to emerge. Best to ignore them.
To properly define the term "bikeshedding", see: https://en.wikipedia.org/wiki/Parkinson%27s_Law_of_Trivialit...
For a distilled digest of some of the types of apolitical technical threads that tend to attract a more distinguished intelligent discussion here on HN, and sidestep emotional exchanges, see: https://lobste.rs
I don't think HN comments are similarly shameful to YouTube. I think there is a night-and-day difference. Hopefully this will lend context to some of the discussion you see here.
Why does this document go to each person serially when it could go to them in parallel).
Why do we store all our important data in a word doc on a windows share where it's difficult to collaborate on it.
Why are the other business group repeating 50% of what my business group already does.
Why are we keeping so many versions/copies of this data - any changes to one copy is exponentially expensive as we have to update the other copies.
Why is it so difficult to keep track of projects/issues/tasks/action items/etc?
Why am I manually running this report instead of getting it automatically emailed to my team ever week.
Why is it difficult to communicate and collaborate to colleagues in different parts of the company.
etc.
So much modern "work" are really just repetitive information problems that are so common that they're easily solvable by existing tools. Likely free ones. You just have to be able to recognize them and apply the correct solution.
Not everyone has the skill set to code, just like some don't have the dexterity to metal work. Maybe we should be encouraging continual education and learning something new.
There is way more to civilization than "coding".
Yet these are all foundational classes up through secondary school. Why are we bothering to teach people things that they will ultimately be bad at? Because we've established that these subjects are so important, that they underly many fundamental things, and that they are important to being a good citizen.
Indeed there is more to civilization then "coding" (or computer science, technical literacy, etc.), just like there is more to civilization then any of the numerous subjects I listed above. The point is it's up to us as a society to decide which of these subjects are important to emphasize, which has the most value, and which will help people the most in living productive and good lives. You might not think computer literacy (which has been lumped under the label "coding"), and not just in the learning how to type sense, is that important; but I respectfully disagree. Computers are everywhere and they're not going away anytime soon; far too few people know how they work on the most basic level, I think it's important as a society we address that.
Obama isn't saying my child MUST learn how to program. He is just highly encouraging it. And as a parent looking toward the future, I will highly encourage it as well.
However, that's just one useful skill. I believe a lot of skills are very useful. Knowing how to cook, how to change a tire, how to balance a personal budget, etc, are all extremely useful. They aren't mandatory; it's possible to get through life without knowing them, but life will be that much easier with them.
So I'll be exposing my child to computer programming, as well as a litany of other things. My aim isn't to turn her into a computer scientist, it's to give her another valuable skill as she figures out what she wants to do with her life. If it's to become a programmer, awesome. If it's to become a doctor, or dancer, or whatever, equally awesome. But at least she'll have exposure (but not necessarily mastery) of a range of useful skills.
At my university the intro CS course counts as a language. Since many degrees require a language course, lots of non CS students take it so they don't have to take French etc. A surprising number of strong CS students in my senior class started out in another major, took the intro CS class for their language,and then ended up switching majors! One person was going for nursing before he switched to CS and is now doing graduate level research as a CS undergrad and will be going to get a phd in CS and math. You'd think the guy has been programming since he was in diapers.
Unfortunately CS is one of those subjects that a lot of people are never exposed to and will never know if they love it or have a knack for it. It seems like most of the CS majors I have encountered are people who are either computer/math nerds or people were big into gaming and got into programming for that (most of them end up giving up on game programming for well known reasons). I think your average person sees CS as something only math/computer nerds can do and as something that is really hard and math intensive. If they actually had a gentle introduction they may love it and may even be good at it. Lets not kid ourselves, most programming isn't something only super geniuses can do.
including an activity for people with no programming experience: http://learn.code.org/hoc/1
We want software to perform functions and we don't care about the amount of lines of code to achieve this. We also want our government to perform functions, and law is how they achieve this.
Your stance would make sense if we were in a state that didn't need improvement.
is not actually a fact, though you stated it like one.
Nope. Least is not the same as efficient or effective. You're just stating a libertarian principle.
The exact same words had formed in my mind, and then there they were, already written out for me.
It is accurate to say that more computing knowledge is needed in the general populace. The power of computers/technology is limited by the human operators in most scenarios. But how do we focus on building better operators? Where is our line drawn?
But "learn, explore and become comfortable with technology that runs your life" is quite a bit different from "learn to code". I guess to an extent the former qualifies as building better operators - but there seems to be a negative connotation there that I disagree with.
You can become a better car operator by learning what all those buttons in your car do. You (and others on the road) benefit from this. As you pointed out, there's little benefit to learning the technical elements of it - while they do affect you, you derive no benefit as an operator of a car from learning them.
"I feel like we haven't drawn the line between user vs creator as clearly in technology."
I missed this on my first read through, and I think that's a very valid point. My only objection comes back to the negative connotations of being a 'user'. It's always of benefit to learn to be a skilled user of anything you use on a regular basis.
There is a shortage of companies wanting to pay a programmer over 30 a living wage.
It would allow them to appreciate the hard work that get's done on the background, make them think twice before defining deadlines and most importantly realise some of the work they do on a daily basis could be automated! In result to that they might at least consider getting in touch with a programmer and trying to find a way to make theirs own job more efficient.
But that everyone should go get a degree in CS or everybody should be able to program is to me, the same thing as saying everybody should be able to cook 3 star restaurant dishes.
The same would be a day worth work in Java.
See the problem there. Its not about learning 'programming'. The scripting guy just could do it because of the familiarity of tools.
Beyond all if the people have issues identifying problems. Merely teaching programming isn't going to help.
When a politician asks everyne to learn how to code, I assume it is already too late for everyone to do it. There are more smart kids in India with IQ more than 100 than there are kids in the US in total.
Some students will catch the bug and tear off on their own journey of independent learning and discovery and create great things. But for most it will just be a new dimension of a full and well-rounded primary education. The problem is that the current generation of educators and schools are largely wholly unequipped to do this, so we have to step up and help out.
I ran an after school "Tech Club" for a couple of years at my kids K-8 school. This year the administration asked me to bring it into the classroom and I am teaching 100% of the students in grades 6 - 8 basic programming with Scratch. It is just one 45 minute class per week, with each grade getting the class for one trimester (12 - 13 weeks). You can't do a whole lot in this time, but you can definitely do something, a whole lot more than the school was doing with technology before.
Also, you may be interested in comparing the responses here to Obama's video here and HN responses to similar videos (like the Bill Gates ad).
I agree with the folks who have suggested that something like a semester of C randomly inserted into the existing curriculum will be a waste. Instead, the "every American should learn code" message should stimulate debate about what "code" would actually consist of if applied intelligently to the K-12 curriculum.
How about music class? So much of contemporary music is programmed. Create music in Scratch.
Replace some obsolete math exercises with explorations using spreadsheets or computer algebra software.
Let kids use Scratch to write their own data acquisition programs for science labs, via S4A.
I find this an insult, sure american programmers are far and between but this is not going to help. I Program but I have work for hours using everything I can find online. I have gained a DevOps job without a Degree in CS.
- assignment
- statement sequence
- iteration
- recursion
- concurrency although that is not needed for basic literacy
Read it. It's an eye opener.
[1] http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf [Jeff Atwood's link in Coding Horror 7/14/06 is broken]
Edited: formatting
We should not be encouraging people to learn to program so much as we should be encouraging people to learn how to construct an algorithm.
That's the first thing you need to learn. Kind of like learning how to properly construct a sentence. You need to understand how to express a problem in a step-wise fashion.
There's a lot of talk in the technology industry about diversity. Adding more women, etc, but on a whole we need career diversity. Coders, writers, artists, actors, mathematicians, welders, plumbers, cooks, chemists, managers, politicians, and so on. Society takes more than just coders. So let's just encourage kids to get involved in finding a way to contribute that they might enjoy or at least find interesting.
Easier said than done. Not because it's difficult to learn to code. But because the owner of the phone cannot have uid 0 without "jailbreaking". Nor can she write an iPhone app without getting "permission" from Apple.
The closed nature of today's "phones" (which are really crippled handheld computers running UNIX) is the biggest impediment to learning to code and, for those who already know how, to getting their own code to run.
Give me a phone that lets me use my own bootloader, my own kernel and my own utilities.
In turn, I'll add value to what the phones provide out of the box and help the American economy.
I'm keen to see details of how the US government expects the programme to work. Given their track-record, particularly with the Obamacare site debacle, my hopes are not high.
Throwing in a compulsory coding course to the curriculum isn't the answer. Until a decent plan emerges, it's just phony rhetoric.
I'd prefer it if he would call on Americans to learn to think first, or at least to meditate or something.
Understanding the breaking down of problems into commands, loops, conditionals using variables, data structures, functions, about abstracting solutions into more general solutions, about refactoring, legacy code etc. helps a lot, even if one is not "a programmer" afterwards.
I can only recommend to everyone doing this at your company.
We tried that already. It was called Visual Basic. It's arguable how much value was created.
Part of the problem is that modern systems and also modern programming language are very powerful, have lots of features, but therefore are hard to learn. One of my pet projects is a programming language for learning how to program http://mosermichael.github.io/cstuff/all/pooh-lan/2012/12/11... ; Actually I had the same problem, I am adding and adding features to the language, now that makes its less suitable for the original task. I guess finding the right balance is not an easy task.
Interesting, does Obama know how to code?
https://leanpub.com/programmingforkids
If anyone here wants a review copy, either reply here or I'm @peterarmstrong on Twitter...
But, no, you don't need to know much about science to make phone apps or webpages. Studying a foreign language or in-depth grammar would probably be just as useful for those industries.
That being said, children going into software would benefit from exercising the parts of their brains responsible for patience, tenacity, intellect, technical reasoning, and problem solving.
Anyone notice how tired he looks? His eyes are swollen and red. Rough job.
In other news, I wonder how much coding he does?
This is awesome news for our startup! Should bring in more traffic :)
Don't get me wrong, I totally look forward to a 23rd century anti-matter power plant or whatever, but there's some huge issues to be solved first. "learn to code, but god help you if you get sick, because we won't" or "learn to code, in a for profit prison, because you smoked the wrong plant". "Or learn to code, quickly, before you get cancer, because we're business friendly now so we don't enforce environmental and food safety laws anymore"
As I like to say, no Google/Facebook/Lisper dream team could have possibly succeeded given the top down constraints. I can't even see a lot of the contractors putting in their best effort when they had to throw away so much work so often....
I bet healthcare.gov is full of algorithms that scale just great as long as there's only one state, and one insurance provider, and one healthcare provider (which is a concise subversive political statement of exactly what's wrong with the American sick care system)
>Code.org owes special thanks to all the cast and the film crew, and also Microsoft, Google/YouTube, Facebook, Amazon, and Twitter for helping us spread the word
What the fuck is this shit? They really pumped billions in marketing!? Is America really that desperate to destroy the only real market it has left? You guys might applaud this but the only thing which this will lead to is unqualified people thinking they know how to program.
The job market will get saturated with mediocre programmers and those who really know their stuff will be too expensive to hire or get lost in the noise. We will see an increase of shit code in production. People think they can have a shot at the field which was dominated by us, the outcasts, for years.
This worries me, brothers, this worries me. If you think this is anything good, look at what happened with finances. It completely fell under the massive appeal of the mainstream crowd who thought they could become a manger and earn a quick buck. Programming is a serious art, skill and dedication you have to live up to.
It shouldn't be - and isn't - for everyone.
That ship has already sailed, and in the world of corporate/enterprise software development I'd argue it was never really docked, so to speak. Hell, as recently as my last job, less than a year ago, I worked with "business analysts" who, because they put together the front-end forms of an Access database and wrote some basic SQL thought they were "coders".
They shouldn't be a source of worry to skilled programmers. These "amateurs" will never be able to take the job of a person who is truly skilled and seeking a position that actually requires that skill, at least not for any length of time.
There is some legitimate cause for concern about wages. Big companies would love for nothing more than to see a complete commoditization in the wage of software developers. Hell, I'd argue a significant number already believe that software developers are interchangeable. They'd be right a good proportion of the time, but not nearly as often as they might think (or like).
I work for Code.org. "Billions" couldn't be any further from the truth. We operate on a shoestring. Everybody in these videos participated because they care about education, not because we paid them.
"Hey, computers are the future."
"Yeah, you're right. And my constitutes know that too!"
"Great, do you want to be in a video that will give you exposure for supporting our great cause?"
"Sure!"
Nice things like what? When so many US students cannot even do basic math, when third graders are still struggling with addition and subtraction, encourage all of them to learn code. Yes. encouraging is nice! all (meaning equality and justice) is nice! Always!
Fight teacher union is dirty politics (how about take donation from teacher union? shut up!).
Lets just talk about nice things, bro! Forget dirty politics!
He doesn't say "every American" — what the hell ? He specifically says "young Americans like you".
And that CERTAINLY does NOT warrant the question "should everyone know how to code"?
If the youth learns to code, the next generation will benefit from this, likely not needing to touch code at all. There's no such thing as "every American". That is totally, utterly, absolutely, invariably not the point. He's talking about the youth — he's calling a DRAFT.
Having everyone learn to code is like having everyone be a paralegal.
Most will be bad at it. Neither is particularly difficult, but specialization is a matter of personality more than anything else.