Speaking as a non-coder, but as one who did minimal things with programming-like higher-level stuff ranging from the old DOS batch files to VBA and some dabbling with SQL, I am curious whether real engineers believe the idea of broad literacy in coding truly would be valuable and, if so, how exactly.
I am not speaking as a skeptic, just as one who does not readily see the point and wants to know.
Of course, we are in a digital age and there is incredible value in knowing how to code for the person who really masters this skill. And, among those who do master it, you will of course have various gradations in skill level ranging from profound to excellent to good to competent to serviceable, and these in turn will give the bearer of such skills a range of opportunities commensurate with the acquired skill level (and, when I say skill, I don't mean mere technique but also inspiration, insight, imagination, and whatever else it takes not only to pound something out but to do it in ways that stand out).
That said, however, if I were to look, say, at 100 random friends and acquaintances, I would question what good it would do for them to learn a few basics about the syntax of some programming language, to learn a few things about programming objects, and to learn a few things about control structures if the sum total of all those few things is simply to understanding minimal things about how coding works without being able to apply that knowledge effectively to anything in their real-world lives. In my own case in having hacked through some minimal interpretative stuff, I at least had some professional uses for this sort of thing (e.g., using VBA to systematize a few MS Word functions needed in our office). But, even at this level, most of the people around me - being non-programmers - would run in horror from the idea of even getting into that level of trying to interact with a computing environment. For the most part, they were content to know as little as possible about any of the inner workings of a computer and were totally uninterested in delving any deeper. And these are the people who are out there by the millions who have always been drawn to the simplest ways of interacting with their computers (e.g., mouse and not keyboard). In my experience, unless people naturally have a mathematical or engineering "bent," they simply would rather not deal with understanding how something like a computer works beneath the surface but want only to grasp its benefits at the highest level with the least effort possible.
If most people are indeed like that (and I believe they are), how would it benefit them in a practical sense, say, for future educational curricula to mandate taking a prescribed course in learning to code. Even if this sort of thing were required, wouldn't this be just like a prescribed foreign language course in middle school that one has but a fleeting acquaintance with, only to have little or nothing stick beyond getting past the requirement for the purposes of passing a class. What residual value would stick from such fleeing interactions with the rudiments of coding?
It seems to me that, if one is to derive true value from learning to code, one needs to devote a significant level of dedicated hard work toward that effort and, if one fails to get beyond a minimal threshold, the only value gained is that of a very generalized form of knowledge that has little practical use in the real world. And I would suspect that most people really do not want to devote such an effort to this task. A good many do, of course, and, as noted, this does have huge value in our digital age for those that do. But why expect it of most people?
There is nothing wrong, of course, with our political leaders encouraging young people to learn to code and this may inspire some to do so. But coding is not really like, say, writing, where gaining a minimal proficiency leaves one in a much better position than not knowing how to do it at all. It seems that, if most people can't get beyond some minimum threshold to make the endeavor worthwhile, learning to code would not help the great majority of people who are not interested in making the sort of dedicated effort that only a relatively minority will in fact make to justify the effort in practical terms.
That is my layman's view. Do those who really know this stuff agree or is this just some disconnected elitist view of people that doesn't fit with modern understanding? I would genuinely like to know because, to me, it does not seem like a close question. Am I just being prejudiced here?
Just like the "prescribed foreign language course in middle school", a bit of programming practice may widen your horizon, and help demystify these seemingly opaque machines and networks.
It's about practice, not "knowledge" per se. Basic tasks, like: I have a folder full of files, how do I get the filenames into a text file or e-mail? Five-liners in high-level languages, the equivalent of asking for directions in a foreign tongue.
Of course, that idea comes from a time when one would own a universal computer, and own one's own data. You can argue that for many people, the filenames and text files I'm talking about are already a thing of the past, that it's all pinch and swipe, plus cloud storage.
The irony about your very valid benefits of having basic programming knowledge is that music programs, which have been proven to provide benefits in math and language and just general smartyhood, are the first to get their budgets cut in any given budget battle. That said, how many working people have ever had to face the problem of getting a list of filenames into an email?
> That said, how many working people have ever had to face the problem of getting a list of filenames into an email?
Few, because when tasked with a problem that this could solve, most people would immediately throw up their hands and give up. This is the biggest obstacle of all.
"Which pictures are you missing?"
"I don't know, I'm not going to flip through them all!"
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.
I have to laugh at this. I worked in strategy consulting, where my coworkers were all MBAs from Harvard, Stanford or, in our office, Tokyo University. We had many cases where people had tasks of various sorts that they would handle with the equivalent of this screenshot-of-the-data approach. I, a fellow consultant, often groaned when I saw such things and wrote little utilities for them, figured out how to dynamically generate PDFs for their presentation data, or whatever.
At one point, the general mgr of our office, said that these things were so valuable to everyone, and I was so good at it and seemed to enjoy it so much, that he was wondering if it wouldn't make more sense for him to take me off of my own consulting cases and make IT projects my only case. Of course, IT people were thought of as lowly support staff for the elite consultants, so it would mean a pay cut and end my consulting career. This wasn't a warning; he was just thinking that this might better serve the needs of the firm.
That day I stopped being a valuable IT resource for my coworkers and reserved my dev skills for my giving myself a "sustainable competitive advantage" in my own work on my own cases.
You should package up your tools and sell it to them on a subscription basis per consultant head. Make sure the total price is at least your gross salary and bake in a minimum subscription period. Quit your job, build all the tools you ever wanted and sell it to all other consultancies and their offices.
The powerpoint extensions I used in consulting were created by ex-consultants so it's not unheard of to do this.
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.).
A lot of it is also the mental structures you form, so you understand what a computer can and can't do easily instead of thinking it's all magic.
You may not have the specific chops to write a program to do it, but you know that doing something to (x) files is just a loop with a if thingy inside of it.
I think part of the "learn to code" movement is also hope that currently non-tech-literate people will learn to help themselves. Once you've googled "how do I do this in python" and found answers enough times, you (hopefully) gradually replace "All of this computer stuff is confusing! I need someone to help me with it. My cousin is good with computers. I'll call him." with "I got this shit. What up, google."
I would say a general computer knowledge course would serve people better than trying to learn a programming language they'll probably never use, or want to use. Basic IT, networking, security, and simple scripting would probably serve the general public best.
And that's something that can be done in a single line at the terminal in Windows, OS X, or *nix. Learning how to use that effectively before learning how to code would already be a big step.
(Appending this to my own comment as a way of acknowledging the comments made in response to my question)
I stand convinced that, though the majority of people will not be necessarily learn to code in the sense of developing full-fledged programs, there is much to be gained by exposing young people generally to the concepts behind programming and to encourage them to learn these concepts: this will inspire some to make programming their work and it will benefit all by giving them at least a basic working literacy about how the digital world around them actually works.
Thanks to all for your thoughtful and instructive responses. HN is truly a great forum.
I have put a great deal of effort into improving the level of automation that can be performed without writing code, or working with graphical mathematical structures (such as wiring together nodes in a graph, or building a flow chart).
The work done on Logo, a language designed to teach children how to program, has been particularly helpful. In the system I'm developing, everyone is using a "debugger" (without knowing that's what it's called) even in the process of getting onto the system.
A lot of the progress we've made has involved aggressively simplifying the development process into something that's at the level of using a spreadsheet (and just as concrete for the user). For example, if you have to develop an API, you've already excluded most of the people from being able to use your tool. API design is hard and takes a great deal of experience. That's the opposite of what it takes to get productive value from a spreadsheet.
I agree that there's a huge amount of benefit a user can get from being able to automate their own work, and to be able to easily and effectively share that automation with others. Today's scripting languages aren't even close to the "spreadsheet" ideal I think is possible.
For better or worse, our educational system is centered around the idea of exposure to potentially worthless experiences. Everyone knows people who haven't had to think about concepts from trigonometry or algebra 2 since school. Children are required to take music classes, art classes, physed. We don't teach these things because they are practically useful in any way, but because 1 out of every N kids discovers that they are really good at something.
I hated all of the effort wasted in the modern educational system. But when you see a kid's eyes light up when they blow into a recorder for the first time, or see how they respond to praise of their art class drawing, or see their face when they score the winning touchdown, you can see the value and importance. We can't take that away from people. So we study things that might not matter. I don't see any reason why computer programming shouldn't be that list of experiences. There are people in the world who would be rock star hackers if only they'd been given an early opportunity. Even a modest increase in the number of technically literate people can have great benefits to society.
There is a clear trend toward automation. We all know people who wouldn't benefit at all from computer programming experience. But that might not be true in twenty or thirty years. Even lawyers might need to learn more about data structures and server management in the coming decades. The ideal case is that we end up in an automated world in which everyone can pitch in a little programming to make things better. Making some technical knowledge universal might be the first step.
Mankind has been automating since we could automate. The moment there is technology available to automate something we automate it. The invention of wheel was automation. The invention of the cart was automation and so on.
The moment there is knowledge, tools and technology to reduce human effort, we invent newer tools that reduce human effort. Which leads to further knowledge that reduces human effort further and so on.
Programming is a new tool in this never ending endless task that human kind has taken since it could think. Programming enables a device to make decisions, based on some conditions and send those decisions to mechanical devices.
Its hard to predict how this will pan out in the future, if the past is any indication. The future is hard to predict.
I disagree completely that they're potentially worthless experiences geared only for the 1 in N who embrace the subject. The content of the material is in many cases mostly irrelevant - it's the fundamentals behind that content that matters. Claiming that it 'doesn't matter' because you don't actively utilise it in your job later on misses the point entirely. For example:
Maths - teaches logic and critical analysis of problems. No one cares if you don't remember SOHCAHTOA or the like. If you can think about using knowns to resolve an unknown, you've got the main thrust of maths classes as they stand for non-Engineering, non-Science people.
Physical Ed - teaches healthy habits, ideally. No one cares if you remember the rules to field hockey or rugby or learn to run faster. The idea is that you learn/are exposed to healthy exercise habits and (ideally) healthy nutrition/etc. if it includes that too.
Music - teaches quite similar stuff to maths, in fact. No one cares if you can't re-draw the circle of fifths, however understanding the patterns in music and why they exist (e.g.: why you don't tie the 2nd and 3rd beats of the 4/4 time signature) gives you insight in to the mathematical underpinnings of music and lets you appreciate it more to boot. Not to mention playing music engages and assists the brain areas used at maths, problem solving, etc.
Art - You learn to understand and appreciate design better. You learn to appreciate culture. No one cares if you can't remember what primary colours to blend to produce a certain new colour, but understanding the role of shadows for contrast, or vertical lines in e.g.: paintings of architecture, help you appreciate the world around you.
Science - Again like maths, logical intuition and problem solving. e.g.: for physics, no one cares that you can't recite the equations of linear motion, but understanding why something goes up and then falls down, intuitively, is a good way to teach critical analysis of problems.
The second benefit of all of this is that you then also get exposed to this content, which means you get a general introduction to those fields. As you say, it helps bring the fruit to bear whereby people find out they enjoy/have talent in something, but additionally it means that because you sat through music in school you probably at least understand why some songs sound sad (minor scales) and others sound happy (major scales) so you can appreciate it more.
I absolutely agree with you that programming should be in there. Again, it's not about learning how to declare variables in python in particular, but rather about the logical underpinnings of code structure and understanding how that all works. The benefit isn't going to be that 100% of kids can read some javascript dump and work out why the webpage doesn't load properly. It'll be that when they're sitting down in excel and they're trying to assemble that data their boss wants in a particular way, they'll be more capable of logically stepping through each component step of the equations required and understanding exactly how it must be built up to produce the result they're after.
Very nice answer and much appreciated. One additional bit which I only saw lightly touched on is the correlation between breadth of knowledge and general intelligence / creativity. Exposure to a wide range of subjects helps build the mental linkages for students so that they can form the equivalent of mental analogies about new material and solve new problems by reference to solutions in other areas. Coding has a lot of potential in this area, as the fundamental concepts of algorithms and machine logic are broadly applicable to a wide range of subjects. In addition, the solutions you see in programming (barnes hutt trees, steepest decent, network theory, binary search, ect...) are optimized solutions to fundamental questions of how the world works. Once those solutions have been seen in programming, the understanding of the world they communicate can then be taken and applied to comprehend and solve problems in other areas of life.
I think the value of learning to code is learning how to break down complex problems into simpler steps, determining the order in which those steps need to happen, and thinking carefully about your upfront needs to get some the desired, distant result. Coding isn't the only place to learn these skills. For example, working in a commercial kitchen, you might learn these skills quickly: what do I need to do make this dish? What ingredients are each dish's element? What ingredients do I have on hand vs what I need to order? Is everything going to come together in the end, and at the same time?
However, coding is increasingly accessible (~$0) to everyone (all ages/geos) at a massive scale (smartphones/netbooks) and may have practical benefits for some people who choose to go beyond the basic steps. Some might even call it fun.
>>I think the value of learning to code is learning how to break down complex problems into simpler steps
How is that any different than any other branch of engineering? Repairing a car engine requires thinking and application of effort that is the very same as that required in programming/debugging. Same with building a house. Or fixing tube lights.
I see car repair more like hardware repair on a computer. Graphic chip fried, pull out the graphic card, and pout in a new one. Certainly doesn't require the levels of abstraction that I use in my day to day work building / maintaining the database for an organization.
For exactly his last point: it costs nothing to code. You only need time (which you would need to do any other activity). If you make mistakes, you can start over with press of a button. You can do it anywhere, any time and increasingly using any device. Summary: accessibility.
For other people, they still have to buy a computer. Get an internet connection. And I will be very frank with you, programming is not the same as building web pages. Learning stuff like embedded systems(Which actually teaches true programming, which is of some real value in the real world compared to cat picture sharing sites) costs money in IDE's, hardware investment and other components.
Learning programming costs money, and some one has to teach the kids. Its not like those kids can download a Python tutorial and get going. Or even adults for that matter. Why should any one do that. We don't learn mechanical engineering, why do we expect others to show such deep interests in our areas of work.
Without good problems to solve and the right approach to teaching taken. Programming is as boring as Math.
Which brings me to the point. If you are teaching Math well, you have already taught kids problem solving. If you haven't, how is teaching another Math like subject in the wrong way going to be of any help.
>>And I will be very frank with you, programming is not the same as building web pages.
Totally disagree. Let's assume you're just talking about HTML/CSS, as Javascript is clearly a programming language. Many fundamental concepts that you would learn by understanding HTML and CSS are also foundational in programming languages. You have to understand abstraction, and the use of textual markers to represent those abstractions. HTML attributes are pretty similar to parameters in functions and the tag names would be like function labels. With just learning markup you discover the power of using text to represent things and how the computer/browser can interpret that data to actually do stuff.
Of course there is plenty of things missing, loops and conditionals, state management, functions as data, etc. but 1) if you're teaching how to build a web page properly you will be covering javascript and these concepts and 2) even if you don't cover Javascript just learning html/css is still a start towards those other concetps. I've recently started teaching high schoolers how to code and it's amazing the sort of fundamental concepts you completely take for granted as a developer that these kids have simply never been exposed to. These are the low hanging fruit that you're assuming is not important.
Also, embedded systems are becoming increasingly cheaper to develop with, Raspberry Pi's and Arduino's cost $25 and that space is also becoming more and more open. There is a long way to go but it's certainly happening.
Finally, of course computers and internet connections cost money but these are things that people acquire regardless of whether they want to learn how to code or not. I'm not naive enough to say everyone has easy access to these things even in affluent countries, but they are goods that are acquired for many more reasons then just learning how to code. The idea that it's free and more accessible comes from that aspect, that the same tools you use everyday to browse Facebook or do a Google search are all you need to become proficient at coding. Most other engineering disciplines have higher barriers to entry then that.
Again I don't see how this is in any related only to programming.
Programming was introduced to me in school and was the most boring subject of all. Because the problems we solved looked totally irrelevant to not just me, but every kid in the school. I was glad I opted out of it and did physics experiments instead. It made whole lot sense. Had I continued working on brain dead sorting, and arithmetic problems I would have developed permanent hatred towards programming. I was already learning simultaneous equations, quadratic equations in the Math classes without understanding why and what they even meant. Why learn another such subject?
Physics was a place where I saw application of pure mathematics to real life scenarios.
Skills that you need to be a good programmer by and large the very same that you need to indulge in any creative activity. Clear definition of the problem, deconstructing it into smaller parts, apply a definite science in assembling smaller solutions, going into a build-feedback-correct cycle etc. You will have to do the same if you do physics, chemistry, biology, math, painting, music, history and may be anything on earth.
Programming doesn't make much sense unless there is a larger context and scope of your learning in helping solve some meaningful problems gets visible. Other wise the kids will just be doing yet another routine boring math kind of work without knowing its true application.
Remember kids building tree houses, That requires nearly the same kind of stuff required to be good programmer, or to take part in a science exhibition. Or a essay writing competition. What is important is to teach kids learn to discover how to work on creative problems.
When I think about the practical skills that I learnt in my education, years later there were only a few key concepts which really mattered: rudimentary arithmetic in Mathematics, good writing/reading skills from English, understanding of empiricism from the Sciences.
I think the question is: is there a foundational skill or concept that learning coding gives you?
I think perhaps there is and it's something to do with the application of symbolic logic, however I am not sure whether I had this before or after I started coding. (I do, however, feel that I grasped it far better from constant practical application than I did from mathematics lessons.)
I suspect it has more to do with problem-solving and analysis. In theory students should gain this kind of knowledge from mathematics, but I don't think that seems to work out in reality for most people.
Most people won't acquire great problem solving skills with programming either. You need only look at a few new questions on StackOverflow to see that. I think your parent is onto something though, that the unique skill available by basic programming in symbolic logic, and perhaps logic in general. It won't come to everyone, but without programming it may be even less likely. The problem of course is that it takes patience and attention to detail--two other skills not everyone has in abundance. Programming is not a freestanding skill, it requires much foundation.
I don't think it's about skill as such, rather about increased productivity.
People are generally expected to be able to drive, and for many, this ability comes with benefits. I don't see why basic programming (file system, lists, loops, conditionals) should be any harder, or less useful.
Driving is physical activity: you turn the wheel the car turns. You see it you feel it. Programming is all dealing with abstractions, and for many that is really hard.
Reading, writing, 'rithmetic are about the only really useful things taught in schools. The rest is important for "education", broadening the mind, and practicing learning.
Learning a second language is not only important for "broadening the mind", but it also helps you to see your native tongue objectively - with more than one instance, you gain an concrete inkling of what is general, what is specific.
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
Arguably, a programming language can do this directly, or at least lay some foundations. Like natural language (and arithmetic expressions), it has a grammar.
I think there is a deeper purpose of high school education (which seems to be completely unrealized): becoming acquainted with the human heritage of how to know things. That is, maths as a way of proving truth, not just of practical use. Programming has a role, in show how we can make things work - like mechanics and forms of government. Of course, this is philosophy, and not for everyone. But I think everyone is entitled to a taste, so they can make up their own mind.
All that said, actual programming is probably pretty useless. A law student I knew took CS 101 and sincerely believed that the discipline was about knowing all the control codes. Sadly, that is a huge part of what we do - programming requires a whole of nonsense, of arbitrary escaping rules, inconsistent tool and ridiculously arcane procedures for getting anything done - and if you get a little bit wrong, the whole thing fails! - and it's impossible to tell what went wrong unless you already understand it. [source: tutored first year CS students]
The programming tool that ordinary people cope with best, that has minimal nonsense, and also has enormous practical benefit is not thought of as programming at all - the spreadsheet.
Do you think, as a lawyer, it would be helpful for everyone to know a little bit of law? To be able to more effectively navigate day to day things like contracts, leases, understanding of rights etc.?
I'm not a lawyer but I do think that knowing the basics of day-to-day law like you said would actually be really nice. Maybe it would have helped people who were signing up for extremely risky mortgages around 2007 to better understand their real contractual obligations for re-payment, at a time when the banker they were dealing with was probably failing to highlight the fact that the payments would dramatically increase beyond the introductory period? I'm just speculating.
Not just law. That's what an education means - you are educated, if you have a broad general knowledge of just about everything. Plus some specilization in your field. Education these days seems to focus too narrowly on the specialization, without the general knowledge.
So many people live in bubble with no connection to the real world; insulated by religious dogma and partisan ignorance. Debating need not concern with actual provable, reliable facts, but soundbites and appeals to authority. But you can't fool the computer. You can beg and plead, you can say your teacher tells you that it should work, but ultimately you can't make it work unless you actually do.
You can fake your chemistry results, you can argue over the oxford comma, but your loop for(i=1;i<10;++i){} will never run 10 times.
However, I do believe at least the basics of both you mentioned should be taught as well. If you can't fix a damaged wooden door frame or change the o-rings in a faucet by 18, you haven't been prepared for life.
Reading, writing, and mathematics have long been considered fundamental skills.
Obama is suggesting 'computer science' as now being a new fundamental skill. I would change that to 'programming'.
Most people do not question whether math is a fundamental skill. Programming is actually very similar to some types of math work in school, but with a heavy focus on practical problem solving skills using technology.
So the question you ask is similar to the question that many people ask about their algebra or calculus classes. But in the case of computer programming, I think it is even easier to see how it can be directly applied in many fields.
Basically the observation is that people need strong technology skills to contribute, since technology is core to nearly every aspect of life now, and programming develops core skills that can help with many types of technologies.
Programming is absolutely useful on all levels of your understanding.
1. More programmers
There is going to be subset of people that will discover a new passion for programming through introductory courses. There are a lot of very smart people that never would have thought they could be programmers without the proper serendipitous encounters with the subject.
2. Cursory knowledge is useful for your career
Even if you decide not to pursue programming as a career, understanding the basics of how computer programs work can help you in many ways in many walks of life. A lot of careers use computer programs on a daily basis, by building some of your own programs perhaps this will help you become more proficient at using other people's programs.
Additionally, a lot of careers in the future are going to involve pseudo-programming skills such as Excel. Knowing how to program has helped me grasp concepts like pivot tables, excel functions (SUM, AVG, IF, etc.) more easily.
Finally, understanding what computer programs are will help you understand high level strategies for what your company can or cannot do to accomplish goals with computers. Knowing what to build is just as important as knowing how to build.
3. Cursory knowledge is useful for life
Programming is a great way to think about problem solving at large. It teaches a lot of generic techniques that can be applied to all problems in life. Breaking up problems into smaller pieces makes it easier to digest. Applying a couple conditional statements can quickly showcase the logical outcomes of a situation.
I pretty much agree with everything you wrote. I'm not a professional coder, but I program as a hobby.
I'm of the opinion that broad spectrum exposure to programming is a good thing, much like exposure to foreign languages in high school.
I don't expecting everyone to take to programming, or German, but without some exposure, you may never know this wonderful world exists. And without knowing, your latent talents might go to waste.
My sister and I had the same exposure to computers as children. I learned to program shortly thereafter, and she never did. I think the main difference there being that I am a self-learner, and she was an other-learner. Meaning she did better in a teacher/student environment and I did better figuring stuff out on my own, asking questions only when I was ready for the answer.
If a brief course in programming had been taught in school when we were growing up, she might have discovered a knack for it. Who knows. Maybe not. She's a doctor now, delving in that messiness that is people, so maybe programming wouldn't have been attractive to her.
I couldn't not program though. I read Neuromancer in 4th or 5th grade, and while I had been programming before then, that book sealed the deal for me.
I picked up Neuromancer recently and for the first time in a while I stopped reading it a little less than half way because it was so bad. I just could not get into it. I like the topic and genre and all, but it was just not grabbing my attention.
Let's assume you're paying a developer $100k per year - not atypical in this day and age. As a business, I want that developer, who is likely making more than anyone else in the organization, to be working on "the most important thing" in our business at a given time. This might mean a new checkout flow, making sure the online shopping cart works, or scaling a website to accomodate 1000 users at once.
There are many tasks which engineers can easily do, and which most non-technically people are loathe to perform, but are not the most important thing that an engineer ought to be doing in a business. The easiest example is reporting.
A given marketing department will want sales information. They'll want charts and graphs describing conversion rates, customer acquisition costs, etc. There are far more ways that the marketing department will want to slice-and-dice data for analysis than a team of developers can possibly produce.
Engineers don't want to be relegated to creating reports. And anyway, the report you just asked your engineer to create may have just cost you $1000.
So if we were able to bring these marketing people to a level of proficiency where they could use SQL to generate reports, Excel to manipulate that data, and VBA to do analysis (which I believe could be accomplished with 80 hours of training - a drop in the bucket over the course of one's career), then we can let the engineers do the things they are good at ("make sure passwords are secure") and the marketing folks have the minimum proficiency they require to do their jobs.
This is common in companies like Amazon; "the engineers wouldn't help me run reports, so I had to learn myself."
Nowadays, business decisions are based on numerical analysis of behavior. (Click-through rates of advertisements. Conversion rates from campaigns. Number of lawns per high school student per summer.) This trend is unlikely to go away.
In practice, "numerical analysis" means "schlepping data into Excel and running the numbers." And that skill of "running the numbers" without having to ask an engineer (who is both expensive and uninterested) seems, to me, of great practical value.
Obviously I have cornered one specific example that I consistently deal with. But it is not too difficult to imagine that these tools of analysis can help automate any number of tasks, in many disciplines. It is not uncommon for linguistics (graduate) students to learn programming to better analyze the meter of poetry. Optimistically, I hope that "non-technical" will be able to use the tools of our trade in new and interesting ways that we never imagined - the same way a carpenter might use everyday materials in ways that are very innovative to laymen.
As a counter argument to that, many of the non-technical users in my organization like Excel. We have wasted countless hours by sticking to excel as a data input / manipulation tool, as it is incredibly error prone. Non technical users don't see the difference between a 2 and "2" and a " 2". It looks right to them, and much of the time they seem incapable of reading a sensible error message and fixing it the problem themselves.
I've also noticed this countless of times. If you leave data sets to be designed by a non-engineer - it will cost you hours and hours of parsing and changing the format constantly depending on who slapped the excel sheet together. Literally one of the worst experiences on a job was dealing with a big corporations excel sheets and trying to convert them into usable data.
I suppose so. Experienced developers already have that education. An introduction to programming class is not likely to provide that. I look back at technical decisions I made ten years ago, when I started coding, and I see how much cleaner and more elegant my solutions current solutions are likely to be (when a clean solution is possible).
Perhaps a side effect of "everybody" learning to program will be the demand for more programming tools that are easy to use. Excel and VBA both developed due to use demand.
I've seen lots of people, from engineers to workers on the loading dock, use Excel to create convenient tools for their own use.
My client, he doesn't know what "FTP" is, and does not know how to upload his revised version of the current Excel calculation sheet which he designed, and is core-business, and coupled to an application form.
He knows the ins and outs about Excel, from formulas to shortcuts, and i'm a total novice when he's explaining stuff to me.
I'm interfacing with his Excel sheet through PHP, and he does not have to change the way he works, and I don't.
I don't need to know all the ins-and outs, I just need to know which cell needs what data, and the cells that are calculated and need to extract data from.
I'm now building a management backend for him in Rails, and it will work the same way. Maybe later those Excel calculations will be ported to the database, but for now there is no reason to bother my client with learning a new interface and changing the way he works.
I work with bioinformatics, who are generally fairly smart, and self taught coders. The quality of code they produce is often terrible. Having to interact with some of that code is painful, and it is often easier just to rewrite "properly".
I think it would be far more use to encourage people to learn how an OS works, and understand the concepts (rather than blindly clicking things until it does what you want). Understand some database concepts. Understand a bit about how the internet works.
I am often asked to fix problems with Excel or Word, despite the fact I work on a Linux box, and don't touch either of these pieces of software given the choice. I can make things like that work (some of the time), not because I have any training in how to use them, but because I understand some underlying concepts that non-technical users don't. Teaching these things would be of far more use than teaching people how to write some basic scripts.
At the high school level, I think your analysis is generally correct. Most students who aren't already interested in computer science will have the same attitude toward a programming course as they have toward foreign language courses.
However, in college, the paradigm is different. At my university, programming is taught from two distinct perspectives: theoretical (as in the computer science major) and practical. I'm in the business school, and we have courses that teach VBA, SQL, Python, and Matlab. These courses focus on using these languages as tools to solve problems and gain competitive advantages through optimization, efficiency, and data analysis (think of Steve Jobs' bicycle analogy). For example, one course teaches Python and Matlab in the context of text analytics -- students use Python's text handling capabilities to parse text and collect data, then use Matlab to visualize the data and detect trends. VBA and SQL are taught together as tools which increase productivity in business, where scripting Excel can save countless man-hours and being familiar with databases can make interfacing with data analysts and IT people easier. These courses are taught with a distinct "hacker" or "scripter" mindset.
Students inevitably have difficulty with syntax, logic, etc but get past that with practice over the course of the semester. Programming is perceived by students as a problem-solving tool, like a TI-84 calculator helps them solve math problems and graph functions. They will not be creating enterprise applications or studying theory, but learning to script measurably enhances productivity -- and that's where the value is.
(Anecdotally, I'm not a programmer but am familiar with Ruby as well as the languages listed above. While doing an academic research project this semester, knowing Ruby made it trivial to quickly organize and manage a trove of 10,259 text documents. Without programming knowledge, that task could have taken quite a few hours.)
I think he did preface "anyone can learn how to code" with the phrase "...with some hard work and a little math & science understanding".
I do believe that broad literacy in programming would be beneficial. Going beyond my obviously biased opinion that programming helps you understand your world better, I believe that broad literacy in programming will advance our technology faster and bring us further than we could have ever imagined, because we'll have more people per capita who are able to maintain and understand the way our increasingly-complex world works.
The fact that not everyone who wants to be a programmer actually sticks with it enough to become one is also a good thing. It's certainly not for everyone. But there are plenty of people, especially kids, who might find this kind of stuff interesting, but aren't being exposed to it enough for it to be a reality.
I've got a classical education in computer science, an engineering degree, and plus/minus about a decade in my coding skill being a major contributing factor in my ability to eat on a daily basis.
On the one hand, I concur with you, in that ability to produce a working system ex nihlio is both a) much, much harder than anyone suggesting the general populance Just Learn To Code expects and b) of limited utility to many people. To pick an example at random from the front page, there is virtually no problem with being severely poor in NYC that would get alleviated with any of the participants Just Learning To Code, unless that in the process transformed one of the involved adults into a responsible member of society. (There being many, many people in the story who could use that in addition to the obvious choices.)
Learning to code might assist people into having a better mental model of computers and a lot of computer-like systems which they interact with on a daily basis.
For example, you're a lawyer, and you have practical experience with how law and bureacracy works on a nuts and bolts level. I assume you've occasionally met people who believe that law/bureacracy operate in an entirely random and capricious fashion which cannot be influenced by their own behavior. Dealing with people who think that is a little trying, right? Both because it is wrong and because, more to the point, it causes them to take self-destructive courses of action. (To see many examples of this, see again the article on being extremely poor in NYC, where consequences are predictable based on past behavior seems to be as foreign as trying to explain thunderbolts as something-other-than-the-wrath-of-an-angry-god to ancient Greeks.)
If people had a mental model of how computers (and similar systems worked), it would improve their -- for lack of a better word -- digital citizenship. Paypal probably didn't freeze your account on a whim any more than the probation officer has decided to "violate" you based on personal animus. There was probably a heuristic triggered by behavior. More importantly, a) that behavior can be avoided in the future, b) that heuristic can probably be overridden by appeal to the relevant authorities, and c) that heuristic was probably instituted due to it achieving goals most of the time rather than as an instrument of oppression.
We could look back to a time in the not-too-distant past and say that, for the average citizen, knowing the nuts and bolts operation of the law was probably unnecessary: they didn't have touchpoints with the State that frequently and when they did the operation was well-understood by all parties. You don't have to understand the inner operations of magisterial courts all that well if you can appreciate that killing people is generally a bad idea. Recent years, however, have gotten the State into substantially more lines of business than just regulating who gets to kill who when. The average citizen can now expect to run into laws and their consequences quite frequently. At your job. At your doctor's. At your school. At your bank. When the government sends you a check. When you send the government a check. The average citizen is now expected to be able to make consequential decisions based on the law. There are many possible decisions which are wrong ones.
Similarly, in the not-too-distant past, you could have been totally ignorant about how computers operated. Computers were, after all, mostly maintained by other people and they didn't come into contact with your life that frequently. When they did, they were pretty easy to anticipate the function of even if you had no clue what Deep Magicks were invoked to cause it. The computer keeps a record of your bank balance, which it does via addition and subtraction, so you'd best assure addition and subtraction sums to greater than zero. As long as you do you'll have no problems with computers.
This is not the world we live in in 2013, and I would not bet that computers and similar systems become less relevant over time, any more than I'd bet that law suddenly decide to recede from its historically novel importance to people.
Computers operate consistently. Their rules are written in advance. It is easy to make mistakes in writing those rules. The symptoms of those mistakes will (generally) be predictable and consistent. Since computers operate according to rules, given the rules, we can make certain confident predictions about their behavior in advance of seeing it. Since computers operate according to rules, we can learn the rules they operate under by observation, and therefore make confident predictions about their future behavior by observation.
Everything I just said is something that you'll know in your bones by the time you've made your first substantial program, and yet they're Deep Magick to most people. Seriously. I think I could poll a family gathering of the McKenzies, whose average educational attainment is a master's, and probably get less than 20% of the family to agree that "Computers operate according to rules." My family, like most users, assumes that the devil box just does whatever it feels like and this is so frustrating when it stops them from getting their grant applications in on time.
Everything you mention can be done by a non-programmer.
- Copy and paste your list of charities into MS Word and print it
- Not sure what that is about
- Create a blog on one of the many readily available platforms like Wordpress or blogger. Plenty of non-coders already doing this
- Getting a grasp on technology has nothing to do with coding
What if your list is 10,000 and they are links on a paginated search results page? Cut and paste does not work here -scrapping sure will. Now think about what happens if the page is supported by dynamic tools like AJAX ?
How often does this actually need to be done? I know beginner coders who struggle with this, esp when it comes to AJAX. I very much doubt that someone with no interest in coding who is forced to code because of some government initiative for one semester is going to fare any better at that task.
The point is, unless you have some self interest in the subject then there is no point in forcing you to learn it, it is going to be of no benefit to you in your future life.
At work, I had a spreadsheet. Technical people, coders even, had a hard time finding the solution: convert to CSV, cut -f, awk print, in order to tack a hostname onto a column with relative HTTP paths. (No error checking required.)
If you were using Excel, you code have just written a VBA macro to do it, or created another column with formula =CONCATENATE("http://domain/",A1) if that's what you mean
I think learning to code is beneficial for purely non-techical reasons.
Programming is one of few activities left where you can't bullshit your way out of the problem. You have to make yourself actually understand the problem, figure out what needs to be done and do it diligently. And you have to repeat these three steps over and over. Either that or you fail in such a clear way that you can't bullshit yourself that it actually wasn't a failure.
Coding is in modern world the most interesting and accessible manifestation of physics. It's the best opportunity to learn firsthand the spirit of quote "For a successful technology, reality must take precedence over public relations, for Nature cannot be fooled."
It's not so much about learning to code, as about learning how to solve problems using algorithms. Coding is a natural application of that. It surely is a very useful skill and teaching that in school makes perfect sense.
But, even at this level, most of the people around me - being non-programmers - would run in horror from the idea of even getting into that level of trying to interact with a computing environment.
Even if one does not go on to do significant software development, learning to deal with a computer at the level of programming it teaches a person something about rigorous thought. At first, a lot of effort is often needed to fix a fiddly off-by-one error or a crashing program.
Basic understanding of coding (which you apparently already have) helps people get to grips with the world around them, which is essential for having a functioning democracy.
Simple example: non-coders had no clue what could possible be wrong with voting machines.
Code can be simple or complex just like writing. Last night my girlfriend was using a WYSIWYG editor for WordPress and getting very frustrated. I suggested using the HTML editor, and she was blown away at how much easier to make simple changes.
Besides what others have mentioned with respect to helping people discover an otherwise undiscovered talent for engineering, coding, if only at a more basic level, has a tremendous impact on average office workers' productivity.
Consider a company I am intimately familiar with, which is a typical manufacturing company. There are accountants, customer service, salespeople, production schedulers, marketers, inventory managers, production foreman, maintenance technicians, material buyers, human resource staffers, and so on. A typical set of functions that could have been picked from any number of hundreds of small or medium sized manufacturing companies. Due to the company's size there are no dedicated programmers as might be found in a larger company's IS or IT department.
But in nearly all work areas, a person's productivity is greatly leveraged to their familiarity and comfort with technology, including the ability to develop a set of instructions to assist in automating tasks within the computer. And because their productivity is leveraged to technology, those who are more capable with that automation are typically also paid more.
It is surprising how many opportunities there are for at least basic levels of programming in many different areas. Consider the following examples:
- A material buyer needs to know anticipated raw material needs by product, based on order backlogs. She develops a little VB script to tell her how much to order of each type of raw material, based on types of products in the order backlog. She then enhances it to consider price discounts, shipping quantity breaks, supplier lead times, and additional factors, to maximize material inventory turns while minimizing the material outages.
- An accountant develops a basic script to assist in forecasting cash flow to the business, to help manage the company's operating line of credit, lowering the business's interest costs and identifying potential cash flow issues well ahead of time.
- A maintenance tech develops a database to track issues with machines, replacing paper tracking. After six months, he uses database queries to begin identifying patterns among the hundreds of maintenance issues, to help create a set of preventative maintenance procedures to minimize expensive downtime.
Are any of these using Ruby on Rails? Are they using algorithms that one would learn in a Computer Science curriculum? Likely not. Many of these tasks are on the wrong side of what the audience here would even consider "coding": it is just creating a simple database, or using some simple VBS, or maybe even nothing more than some more complex than usual formulas in Excel. And yet they are skills that are woefully absent from the vast majority of the population, and yet which would greatly enhance their productivity and earnings.
Would the majority of workers benefit from formal training of computer science theory? That is debatable. If done the way many CS 101 classes are done, it could even hurt, by creating fear of the topic at an early age.
But there is a basic level of competence that would enhance the productivity of a great many number of workers, that is absent today. That basic level of competence would include the introduction of how a database works, basic office automation scripts, perhaps mixed in with some fundamentals of simple data analysis with computers.
A typical office or production candidate demonstrating even these simple skills is highly attractive in an interview, and I believe that any country's industry would be far more competitive with a population with these skills than without.
Exactly. This is the kind of stuff I talk about when I am talking with those who use technology every day to accomplish their jobs, but see it as a box that they perform tasks in and do not take part in automating their tasks.
I recently showed an account manager at my job how to use autohotkey. With that they (with very minor help) created a way to automate some irritating web form crap they do all the time to make their life simpler, faster, and with less annoying drudgery.
I think it is a part of the "dont know you dont know", where if they have the basic concepts, not a cs education, they can make the computer work for them instead of the other way around.
as a "real engineer"(tm), (more usefully, someone who codes both for a living and as a hobby) let me give a very concise answer (I'd be willing to be more verbose, I have a lot to say on this matter, but I really think the core point is braindead simple Edit: don't mean to imply braindeadedness if you don't see it, but that once I saw it, it seemed elegantly and stupidly simple.):
Programming is more than any language, tool, or algorithm, it is a way of thinking.
As a person with a lot of software ideas, learning to code really helped me explore my ideas. It also really helped me develop more refined problem solving skills.
Maybe the question should be: why should we teach trigonometry over programming? Which one is more likely to be useful to your career and life in the modern world?
I'm a purebred software developer so to speak and I think it would be good for normal non-technical people to learn the basics of programming, much like how many consider that it is good for them to learn the basics of math.
This is not so much about doing real software development, but rather the ability to control your environment, your tools, should you need to do so.
For example, for simple needs, developers/designers can cut down on the metaphors and interactions required to use the GUI and maybe reduce those to things that users are already accustomed to (like moving objects around with your finger), but the more feature-full some piece of software gets, the more complex its interface becomes. And here we have a problem, because the status-quo of graphical interfaces is for users to navigate trees or graphs of options, in search for the right button to click, or the right form to fill. And designers can delay non-flat GUI hierarchies as much as they can, but at some point a complex tree or graph structure becomes inevitable. At which point, users resort to rote learning. This isn't even mentioning actual (and horrible) programming languages often hidden behind GUI metaphors, for more complex apps, because you know, not everything can be done by clicking a button and sometimes you need to specify boolean conditions that trigger actions and so on. You only need to watch normal users struggle with a complex piece of software, like Microsoft Word or Excel or Photoshop, to see what I mean. It's freakishly painful to watch.
Excel, one of the most popular pieces of software in history, has an embedded programming language that users can use. Excel wouldn't be Excel without it. And sometimes you need an embedded programming language to get shit done, because language is still the most potent form of communication and this extends to user interfaces too. And we can't communicate using natural language with our computers, yet, but even if we were, we'd still have to come up with clear specifications that the computer could make sense of.
People are so afraid of computers because computers are absolute black boxes to them. I'm not afraid of computers, because I've assembled my own PCs, I know how they work and whenever some piece of software doesn't work like I want it to work, I know that (should I need to) I can search for alternatives, or I can automate it, or I could implement something similar from scratch. Many times it's not feasible of course, but in terms of what I'm afraid to do or not, the feasibility of it is of no consequence. Programmers are fearless, whereas users are fearful. And companies are exploiting this, locking users into software packages or services that are suboptimal and overpriced.
Automating stuff is priceless. For example I've got tens of thousands of photos that I need to organize - I just wrote a script that splits those photos in directories named after a YYYY-MM pattern and eliminates duplicates. No need for shitty software that might delete my photos by mistake because I clicked the wrong button. This is another skill that comes with knowledge of programming - the ability to automate shit and this is also not software development and would be useful for normal people.
A lot of people are getting attached to the "every American" aspect of things, and I think its important to note the distance between "knowing how to code" and "becoming a programmer." Amateur programming (for lack of a better term) like basic Python for data analysis or HTML/CSS to work on Wordpress sites (Hell, one of my friends who's a Social Media Manager learned Python to create some QoL scripts for her day-to-day routine.) is growing increasingly popular amongst recent grads.
"Whether you're a young man or a young woman -- whether you live in a city or a rural area -- computers are going to be a big part of future. And, if you're willing to work hard, that future is yours to shape."
It's hard to argue with the central message there, but we must be careful not to conflate that with the necessity of getting a CS degree. Every American should probably be able to change a tire. That doesn't mean every American should be a car mechanic.
We should also be teaching how to change a tire, how to cook basic nutritious meals, personal finance, etc..
“A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.” ― Robert A. Heinlein
I hate that quote. It starts fine, but then reaches a stupid conclusion. I wonder how much worse our life would have been without centuries of specialization: in science, in education, in business...
Depends on who the "you" here is. Our schools do a mediocre job of teaching those things (especially finances), many families do a great job of it, and many families do a poor job of it.
I agree with this quote, but "microspecialization" is the appropriate response. You might specialize on Tuesdays by one skillset, and specialize on Wednesday by another.
I think the following assertion adds a significantly interesting context to this entire debate[0]:
All programming is Web programming.
Basically, our daily lives depend on the Web. If you do not understand the [process] of what constitutes the Web, you will be utterly mystified and frightened by it. You don't need to know how to change a tire in a practical sense, but if you cannot understand it conceptually...
For example, bank hacks and e-mail hacks. Do you need to understand how to code to change your password? Surely not. Do you need to know how to code in order to change your password in a relevant way? Probably. And doing that involves knowing how to code, in that one learns something minimally about a very interesting concept: abstract dictionaries.
Just because we currently teach everyone trigonometry, it does not mean we should also teach everyone X. What exactly is the point of knowing how to code a little, without being very good or proficient at it, which most people won't be able to attain ? But I do agree that every school should have C.S. curricula as an option, not as a requirement
Most people in developed countries need to handle significant amounts of information. Knowing how to code a little (even just simple loops and conditions) allows you to be an order of magnitude more productive.
Which people? Sorry but forget about most people, most programmers themselves don't need to handle significant amounts of information.
Most people need to learn how to cook, first aid, read, basic personal finance, hygiene, basic mechanical work etc etc the list is endless.
You can only chose a few at a time. And even then things are so big these days, you can probably learn one or two correctly if you were to even dedicate years learning it.
The thing is most people don't know what they want to do. That's the reason why schools force you take a variety of subjects so you could find your niche. I had no intention of growing up and becoming a developer, but here I am, all because my friend showed me a few lines of HTML. The idea is to give people a little spark and let them follow through if they want to continue down this path or not.
I think everyone should know enough programming to know where programming is an appropriate tool, even if they are not also to wield it, so that they can bring in someone else to solve it with programming, instead of throwing manpower at problems like copy pasting between documents.
I learned a lot of valuable math skills in public school. I was interested and paid attention. Just because some kids don't want to learn doesn't mean we should deprive the rest of the opportunity.
> I think its important to note the distance between "knowing how to code" and "becoming a programmer."
Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers (increasing supply and pushing wages down), though who's to say we deserve the situation we're in presently?
Large employers in this company would like to have labor costs reduced, especially for costly positions like software development. I'm not saying that is necessarily a sinister thing, but things like this should be thought of in the context of reducing labor costs. That's all it is, I think --as opposed to fancy notions about democratizing technology and so forth.
That's a particularly cynical response to something I consider to be incredibly positive, but I think there's a lot of scar tissue in the industry from bad behavior so you may be right to be wary.
Let me tell it from my perspective. I was a finance guy whose only coding experience was a couple of CS classes in college and some excel coding at my job in ibanking. When I decided I wanted to start a company, the first thing I did was spend three months of teaching myself how to do some basic coding. I did the Udacity classes and Codacademy. I read up stuff online and did bash tutorials. I spent 4-6 hours a day doing this because I wanted to be serious.
Today, I'm the CEO of a lightly-funded startup that just got our TechCrunch bump last week. I do all the front-end design and development because of resource restraints (I'm okay at it; not great). But the biggest takeaway from learning to code was not the work itself, but how to talk to developers and manage their time and resources. When I draw up requirements for our dev team, I have a baseline knowledge of what's easily do-able, what's quick vs. what's long, what we can hack and what we need to build to scale. If I started a company in China, I'd expect to learn a little Chinese. Why isn't this the case for people who work in technology?
Now back to the President's announcement. As he stated, software is eating the world and if we want a generation of consumers to have some knowledge of how their world works, then a baseline education in software is critical. Thanks for reading.
Before, I built pitch books and excel models and funneled money from one place to another, taking a cut.
Today, I build websites that democratize content (okay that's a bit hyperbole). I just feel better about my life choices now that I'm building something substantive.
Being an entrepreneur is a great experience for anyone who can cut it. I also think it should be a necessary pre-req for investors to be a founder at least once. I do miss the money and lifestyle though...
I was curious because I recently finished my two analyst years in ibd (@ a bb), but switched into PE instead of a startup, which I was considering. Always interesting to hear the other side.
>Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers
This only applies if there's no way hiring practices could possibly improve, which given the existence of some data on the subject seems unlikely. In particular, it's not too far-fetched that people with some coding literacy may make better hiring decisions than Muggles.
>Large employers in this company would like to have labor costs reduced, especially for costly positions like software development. I'm not saying that is necessarily a sinister thing, but things like this should be thought of in the context of reducing labor costs.
Reducing labor costs in the long run reduces average prices and increases real incomes. Historically, it's not usually a bad thing; in this case, real incomes[1] go up whenever cost savings are passed to consumers.
The market may not be perfect, but it's usually better than fiat and ignorance.
> Sure, except we talk all the time about how bad hiring practices are in our industry, how bad we all are at discerning talent. So I don't really see this being a positive thing for existing developers (increasing supply and pushing wages down), though who's to say we deserve the situation we're in presently?
In what way does high school kids learning to write simple Python scripts affect your career as a software developer? We're talking about giving students a baseline knowledge of programming here.
If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced. And again, the skill thing is diminished because we all suck at figuring out who the talented developers are.
I'm not saying we should hoard the coding knowledge or whatever -- that cat is already out of the bag. But if the president is saying nice things about coders, maybe think about what reasons he could have for that besides the goodness of his heart.
> If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced.
If I may disagree - you're assuming that the 'demand' for software developers is fixed. But, we know that it isn't. In fact, more software developers working on software may actually increase the demand for software talent, particularly if these developers go on to start companies themselves =).
> If you agree that teaching people to code will result in more professional software developers, which seems reasonable to me, we'll have more of them and the cost of any one of them will be reduced.
I'm not sure I can agree with that, though. The barrier to entry is already really damn low -- the kids who are seriously interested in programming are already learning to program anyway, because it only costs them their time. The net effect will probably just be that the average student will become a bit more knowledgeable about how software works, which is pretty undisputably a good thing. If you go into a high school district and make a home economics class mandatory, are half of your graduates going to become chefs? Of course not -- only a few are going to do that, and they were probably going to do it before you even made the class mandatory. The only difference is that now everyone knows how to cook for themselves.
> And again, the skill thing is diminished because we all suck at figuring out who the talented developers are.
On the contrary, I think giving everybody a baseline knowledge of programming could have the opposite effect. If you study English at a liberal arts college and blast through the Codecademy Javascript tutorial over the weekend, you can see why you might think that a career as a programmer would be good for you -- you don't have any technical friends to talk to about what you've learned, and Codecademy says you learned everything there is to know about Javascript, so obviously you must be ready for a web development position, right? You have to know what you don't know, and the problem with unqualified developers is that they don't know what they don't know. If everyone learns how to write functions in high school, then you're acutely aware that there's a whole world of stuff you won't know unless you study independently.
> I'm not saying we should hoard the coding knowledge or whatever -- that cat is already out of the bag.
To be honest, most of the objections to the "everyone should learn to code" suggestion sound like that. It seems like everyone is extremely concerned with protecting the value of their own education, no matter what the cost.
> But if the president is saying nice things about coders, maybe think about what reasons he could have for that besides the goodness of his heart.
What are you suggesting here? The president has an evil plan to destroy your livelihood?
I think you will find more people applying to be CS majors, not necessarily graduating with CS degrees. The weed out classes at the better colleges will put an end to anyone striving for a CS degree that shouldn't have one.
What I would expect is that the myth of just get some high school kid to do it would finally end if everyone had an idea of how high the skill cap is for coding/design.
Plus it'd be a lot easier for me to talk to people, which would be nice. It seems the only people that really get along with me these days are technically informed.
This assumes a constant supply of programming work, which is simply laughable. We probably only ever need, e.g., so many lawyers as a proportion of the population, but the demand for programmers relative to supply is accelerating. Failing to train more people now risks either simply not being able to do the work, or an opening of the immigration floodgates in which case present demand could theoretically be met and wages could be depressed. But doing this slowly through educational initiatives would be a minimal risk to salary status quo.
Keep in mind, there is virtually no one available to teach everyone to code. Many US states regard computer science as a high school elective and thereby disincentivize schools from offering it.
Then take someone like me who really likes the idea of teaching programming, but would need about three more years of college to qualify and then would see my wages cut in half, with minimal job security (initially) or advancement in salary (forever) and all the attendant disrespect that our society bestows on teachers.
Being able to teach all our kids to code would be a good problem to have.
I doubt President Obama came up with the campaign on his own and I very much doubt "pushing down labor costs for software development" is even on the list of reasons. Labor costs may ultimately come down, but it won't be due to some devious collusion between the IT industry and him.
It's more likely that this campaign to encourage programming is aimed at multiple problems from a better understanding of the tools necessary in the 21st century to making young students interested in the field again. Just possibly there is a long term hope in him that the USA can cut down its reliance on foreign help for software development, thereby, keeping jobs in the country.
If I was in his shoes, I would be concerned that the USA seems to be relying on foreign graduate students for its research in technology. Until domestic students are interested in the field again, the reliance cannot be reduced.
Large employers (or any other corporations) don't see labour costs as an end in it of itself, but merely means to an end: the ends being (whether in the long term or in the short term) making money. They could pursue the ultimate "throw more bodies at the problem" strategy, but per Brooks it is known not to work; companies that do so are penalized by the market.
On the other hand engineers can't choose between working many low-satisfaction jobs simultaneous or working for one high-satisfaction job -- so they choose jobs that maximize their satisfaction. While there's low marginal value in higher salaries past a certain point (so other factors, e.g., for me it's working on interesting things take over); however, significant sub-market compensation (in terms of both salary and stock) -- compared to what an individual of similar ability, experience, and location would get in a company of similar size, age, etc... -- does greatly decrease satisfaction.
That gives: engineers want to maximize their satisfaction which requires not being underpaid; companies want to maximize the money they make, but can take many different approaches to this.
So at the end, the market "chooses" to hire fewer, but strong engineers through a combination of university recruiting (and paying high salaries even to new graduates), tolerating a certain degree of churn among early-career software engineers, and also aggressively going after a smaller cadre of experienced programmers who can also mentor talented but less experienced new-hires and interns.
So no, I don't see the scenario you describe as happening. Instead, I'm not alone (http://en.wikipedia.org/wiki/Average_is_Over) in thinking that similar trends will occur (or, rather, are already occurring unseen) in other white collar jobs, as well as many skilled blue collar jobs. Company finance departments will want to hire workers who are able to write VBA and not rely on clunk recorded macros; manufacturers will (and already do) want to hire workers who can program a CNC machine[1]. This will not make them software engineer any more than me being able to solve a differential equation makes me a mathematician or understanding logic circuits makes me an electrical engineer (to take it one layer lower, knowing Maxwell's field equation and even using it on the job, doesn't make an electrical engineer a physicist). Circling back, this is exactly why it makes sense for people to learning programming -- if robots are automating large parts of people's job's, there will jobs that require knowledge of both the job and programming, to be able to write "userland" programs on the robot, as oppose to program the robots' embedded systems (or to write Excel VBA scripts as opposed to build Excel itself, etc...)
>I think its important to note the distance between "knowing how to code" and "becoming a programmer."
Very true. I know people who are highly educated but have no idea what computers are capable or incapable of doing.
On the other hand, more people actually know how to code than know they know how to code, thanks to Microsoft Excel. See http://research.microsoft.com/en-us/um/people/simonpj/Papers... for instance, where Excel is referred to as "the world's most popular functional language."
The computer scientist, or mechanic, is the builder of the human extension. But if the user of this extension understands core rules of telling things what to do and how to do them, then the extension is more powerful. The user can adjust the extension to fit more complex needs. So i guess my argument is that learning to code is more like being a better, more capable driver of a more dynamic car. You don't need to make a business of building the dynamic cars.
And since this extends to much more than just driving cars, it just means for a higher bandwidth interaction between each other and our environment. More like speaking a better language that packs a much greater punch. Maybe one example: if i can quickly release to consciousness an interactive system to express an idea i've had or discovery i've made, it just disseminates faster than if i were to use back and forth conversation, write a book, lecture, make a video. The packets are denser. Sure, i could wait for someone else to write the interactive system for me, but i'd have to communicate it to them. If they don't get it right then there's more back and forth, more latency. Wouldn't it be better if we were all just more capable?
> Every American should probably be able to change a tire. That doesn't mean every American should be a car mechanic.
I agree with that entirely, and a similar "fix a flat" knowledge of computers should also be expected. What perplexes me is that "learn computers" is a popular thing to advocate, but I have never heard of the president asking Americans to learn their way around their car.
I still can't shake the feeling that the "everyone must learn some coding" thing is a meme with unusually high coverage. I had not read it until I saw it linked in this thread, but I think this hits the nail on the head: http://www.codinghorror.com/blog/2012/05/please-dont-learn-t...
That's because car knowledge, at least for men until 20-30 years ago, was the kind of knowledge that fathers passed onto their sons voluntarily, without needing a presidential exhortation.
I think learning to core for a lot of people would be useful to them in heir job in the same way that learning to work on machinery is to a farmer. Even if itts not their speciality, it relevant to their job.
Asking the American people to code is not going to solve the nation's problems. What it does is add one more tool a citizen can use to make him or herself more useful to society.
What the president should encourage people is to become a MAKER - a general term for DIY manufacturing.
People will not learn to code unless they have a reason. Maker is more people trying to solve their own problems. It may happen that others may have the same problem and there may be some opportunity.
I love your parallel between car maintenance and coding, and I have repeated it many times myself. I think changing a tire is a reasonable thing to expect every driver to be able to do. Likewise, I think understanding SSL errors is the kind of thing every computer user should be able to do. Not code, necessarily, but understand something about this system you trust with most of your life.
Understanding that the computer is a stupid, un-magical machine which obeys only (and exactly!) the instructions you give it is somewhat of a prerequisite for successfully writing computer programs. (Not exactly true, but it's very helpful.)
Understanding that the computer is non-magical also means that your computer users may be more likely to understand how to troubleshoot errors ("Was it something I did, or something out of my control?").
Coding doesn't teach you that. I have programmers that write commercial software opening tickets to change their shell prompt, or to enable VNC on a Linux build server because they 'can't be expected to learn how these systems work, they're programmers.'
What you want people to learn is basic system maintenance and troubleshooting.
It helps a lot in a general sense, being able to reason through how a system might work can give you a lot more confidence in figuring out where to start on a problem.
Of course when it comes to very specific issues it is always nice to have the luxury of opening a ticket and letting somebody who can do it 1/10th the time fix it for you.
I agreed totally with the every american should change a tire thing. And learning to code is awesome, we need more developers, or even if people won't be developers at leafs they have some idea what is involved.
Next step, teach everyone in america, how to keep windows free of viruses... nah... maybe teaching everybody to code is easier. :)
I am guessing it's going to get substantially easier to program going forward. Look at amount of tools and technologies we have access to. Communities, Github, Refactoring, Intellisense. So many things just out of the box. Many ready made, battle tested libraries and frameworks. It's going to get a lot easier for a non computer science person to do some end level programming. Like dragging some blocks (just thinking out loud). Or encouraging youngsters to learn to code now will unfold a future which we can't even fully fathom now (AI, robotics, drones, medicinal advancements)
At the same time, you can argue the exact opposite: Having to know all these libraries and frameworks makes programming substantially harder.
When I was growing up, in the 1980s, I saw 10-years-olds around me code in assembler. They were not geniuses, they just wanted to draw sprites on a screen. I don't think that, say, learning CSS would have been equally attractive.
The main thing holding back software development is source code. And the reason for that is culture rather than technology. Because you aren't a 'real' programmer unless you are typing colorful complex text. That's just what the definition of a programmer is.
However, in most domains, interactive graphical tools have been invented and reinvented numerous times that are more efficient than text-only programming. Those tools remain unpopular because of a cultural failure to recognize that programming does not require colorful text that is difficult to decipher.
I'm actually surprised how hostile HN is in these comments, considering that I thought the popular sentiment was similar. Every other day a new "learn how to code" post hits the front page, despite, I'm sure, most people who are commenting/upvoting don't need the tutorial for themselves.
I don't think the GP intended to be hostile. I think he's saying that people should learn some coding (more than they do now), but not necessarily as much as many others are suggesting (less than a CS grad does).
Very well put! There should definitely be a layer between software engineers and people who can 'code'. Hopefully there will be a way to categorize these types of contributors so enterprises and the job creators of the world will know how/when to staff them.
I agree that a basic understanding of computers would help people; I think that the clarity of syntax, and logical operations would help many people reason more clearly. I also think that schools should teach the history of the transistor with as much emphasis as the history of the industrial revolutions (or maybe even the civil rights movement), because of the enormous impact Shockley's innovation has had on human welfare.
I am not sure that appreciation of complexity is a worthwhile or even an achievable objective.
While I agree that it's a great mental exercise to learn how to code (and to learn the mindset that goes along with it), isn't it much more important for every American to learn how to budget? To learn how to save money? To me, those are things that are far more important to the country as a whole than understanding even basic scripting.
As a quick example, the meaning of "afford" has changed in the last 2 generations or so. To my grandparents, "affording" a car meant being able to spend the money to buy the car outright. To many of my peers, "affording" a new car means being able to make the minimum payment on the car, or even just the lease payment.
Many of my peers (meaning my specific circle of friends) don't even budget, nevermind put aside money for the future. Hell, even friends in the finance industry don't contribute to their 401k because they'll "do it later". To me, this is a problem that is very serious for our country as a whole, moreso than people learning to understand some basic code.
Don't get me wrong, I think it would be great for everyone to be able to understand how computers work at a deeper level than "magic". It's just that I think no one really bothers to teach kids how to save money, to invest, to budget their lifestyle, etc. Just an opinion, though.
There has been a move towards credit rather than saving, but a big part of what you are talking about is actually just the economy tanking. People can't save. I don't have money for my healthcare, or for my taxes for this year, or for taxes for last year. The reason is that I have health problems I haven't been able to deal with. I am not uneducated and I have excellent technology skills. I don't spend a lot of money. I am not an unusual case.
Isn't that a rather ... subversive concept when a good fraction of those learning it will then apply it to the Federal budget, their state's budget and on down?
How is that subversive? It's basic personal finance. It's no more subversive than teaching kids to share toys encourages communism, in my mind.
In general, people shouldn't spend more than they make. If they spend more than they make one month a year, but save enough the other months to cover it, no big deal. I don't see how that's any different at a macro level, but I'm also not an economist.
To me it's far worse to avoid having people learn basic personal finance things than it is to avoid it, in case some people apply it to bigger things.
We have major debt problems in the population, in my opinion. The housing bubble was a part of it: buying things that one can't afford, with the assumption that prices always go up. Credit card debt being near $1 trillion (I think it's around $800b), college loans being over $1 trillion.... Borrowing has been made very easy for quite some time, but just because money is easy to get doesn't mean that the average person should borrow as much as they can (which is what I meant above when I said that affording minimum payments != affording something).
Put those numbers up against the median retirement savings, which are ~$150k for households with head-of-household aged 65+[1, Table 7]. It seems pretty obvious that we as a nation should be educating people to save for their future. I guess another solution, which would be to assume that people can't/won't save no matter what, and use the government to facilitate that "savings" (i.e. increase Social Security's role to the primary source of funds for retirement). That way we wouldn't have to worry about people subverting the system and can just trust the government to do all of the hard work for them. That may match up better with your view, if you find personal finance potentially subversive...
The trouble is that a simple house hold budget is very very different to that of a sovereign state.
This simplistic approach leads some (some might say most) politicians to sell dubious policies by folksy appeal to peoples perceived knowledge when in fact they are guilty of "Unconscious incompetence"
Well presumably because we already are telling people to learn how to write and communicate. Public schools spend more time on those topics than probably any other. Furthermore, advocating mastery of one skill is different from advocating basic literacy in another skill.
This said, I agree that "learn to code" is tiresome. Why aren't cries of "learn basic electrical engineering" as popular? Or, if we want clear societal benefit, why not advocate learning how to swim? Thousands of American adults and teenagers drown every year; something like 36% of Americans cannot swim.
Of course "either tell people to learn how to swim, or tell them to learn to code" is a false dichotomy (both can be done at once) but I am wondering why "learn to code" gets so much attention. The amount I hear about getting the general public to code seems disproportionate.
In the long run the ability to understand and manipulate information via automated instructions (ie, coding) will almost surely end up being as important being able to capture down and consume ideas (reading and writing) or manipulate abstract quantities through symbology (mathematics.) It's a fundamental skill that is plain to see unless you are so entrenched in the contemporary details of things like programming languages and platforms that you've lost touch with the underlying power, leverage, and joy of it.
The joy I find in programming is no more a reason to encourage people to learn to code than the joy of plumbing is a reason to encourage people to learn to plumb. People can find joy in nearly anything, that isn't something special that coding brings to the table.
Power and leverage? Yes, coding gives you those things, in certain domains, but I do not buy the argument that teaching coding is the most efficient way of teaching these things. Trying to use coding to teach critical thinking, logical reasoning, and basic troubleshooting would surely work, but we have these things built into language and fields that is already designed to handle it first and foremost, without the material distraction.
Very few universities start their CS programs off with something other than vocational drudgery that would be pointless for anybody who just wants those nice side effects of learning to code.
Consider that in 100 years we will still have people performing some derived concept of "coding" today, whereas all of our plumbing will probably be done by the machines which are created by those people.
Coding is an abstraction on top of an ever more essential skill: directing automated symbol manipulation. It seems foundational and those fighting against it are best likened to the subset of monks who surely saw writing as a skill to be learned only by a select few and not as some universal, fundamental skill all people would need to participate in society.
The extent that programming has been required to make effective use of computers has been in freefall since computers were first constructed. I see no reason to think that this trend will not continue.
Making sure that people can effectively use computers is different from having people learn to code. I really think that anyone who insists that the later is necessary has some serious tunnel-vision.
If this were true then we'd be hearing less and less about coding education, not more. There would be less "I have an idea and need a programmer" people, and not more.
More people want to learn how to code now because they realize they are at a fundamental disadvantage in manipulating these things that are entering every facet of our lives. This is the dominant force, not the slow marginalization of the utility of writing source code vs. well established problems like those that can be solved by Excel. In any case, programmers are currently proverbial priests who are the gatekeepers to enabling this effective use of computers, which I think explains a lot of the resistance to this stuff.
> "If this were true then we'd be hearing less and less about coding education, not more."
I don't think that follows. My hypothesis is that lots of programmers think that programming is more important than it really is, and politicians wanting to get tech on their side, humor them.
You know how rural farming towns often have strong 4H clubs? I think this "teach kids to code" stuff is the tech equivalent of that. Everyone wants little jimmy to grow up just like daddy and mommy, because daddy and mommy consider their line of work to be uniquely important or special.
Those communities think it is very important for children to learn how to raise cows, or drive a tractor. Ours thinks that it is very important for children to know something about computer programming. I think that either suffers from tunnel-vision and is is trying to put children into a box.
Can you not see how programming, as a skill, and computer science, as a discipline, are fundamentally different than things like plumbing and farming?
Society is on a trajectory. Automation, information processing, software. It is well on its way to permeate literally every facet of life. If there is a more direct way to position people to not be left behind in this shift than ensuring they have a basic grasp of computer science and understand they can make computers do what they want via code, I'd be hard pressed to come up with it.
Because when, outside of work and hobbies, have you ever found it useful to know basic EE? Unless you're rewiring houses on a regular basis, I can't really think of a common situation where you'd need this type of knowledge. OTOH and IMHO, everybody should know how to use a computer and have at least a rudimentary idea what the thing is capable of.
Edit: Actually, rewiring houses isn't even EE, it's whatever we call what electricians do.
A basic understanding of the physics of electricity will give you helpful insight into countless things in your everyday life; you likely don't notice this because you take such a basic understanding for granted. For example, understanding resistance current and voltage will allow you to reason about the efficiency of different sort of light bulbs (the package will give you the numbers and tell you it is good, but consumers are rightfully wary of what packaging tells them), understand how electrical heaters work, reason about their monthly power bill, etc. Knowledge of how electricity works, particularly home wiring, can save lives. Hell, just understanding what a circuit breaker is for and how to use it has the potential to save lives (and you would not believe the number of shoddy low gauge extension cables I have confiscated from my grandmother...) Even figuring out how to jump a car battery becomes much easier if you understand what you are attempting to do.
Meanwhile, since you and I can both code, we naturally inflate the importance of it. If we could not code, we would still get along in life just as well as the majority of the population (which by most reasonable accounts, is "just fine"). Basic computer literacy is much different from the ability to code, and this is only becoming more true year after year.
Don't know anything about the contemporary curriculum in US high schools, but my secondary education in physics included the basics of AC, DC, semiconducters and fundamental digital electronics, sufficient to help me fault-find a busted LED in a string of christmas lights this past weekend.
If schools aren't teaching circuits, V=IR and P=IV, I agree they should. But I'm pretty sure in many cases they are, so you're arguing with a straw man.
Thousands of American adults and teenagers drown every year; something like 36% of Americans cannot swim. I'm not surprised with the high level of obesity in the US.
Obesity isn't as much of a factor as you might think. With proper technique, very obese people can swim (at least 24 yards, which was the bar used for that statistic) without much effort.
Adipose tissue (fat) has a density slightly lower than that of water, so the primary concern is really keeping your head above water and not panicking (both of those are mostly technique, not really 'physical feats'). Once you've got floating mastered, an elementary backstroke will get you moving slowly through the water without much caloric expenditure.
Swimming ability seems to correspond to family income (and therefore access to pools) rather closely. Increasing the swimming skills of the general population would mostly be a matter of ensuring that school districts have pools, and making swimming lessons in PE classes a higher priority. Kids don't die because they don't know how to play badminton, but people do drown...
(Disclosure: One of my jobs through highschool and part of college was working as a swimming instructor, which is part of why this issue has my attention)
Not to mention "America's obesity epidemic" in reality means "most people have a little bit of extra flab" (based on BMI), not giant super obese people who can't get through their front doors. Most "obese" people are not in any way physically impeded from swimming.
From my experience with administration work in a bank: just a little bit of code will go a very long way. Programming very much seems to obey the 90/10 rule. For 10% of the effort, you get 90% of the reward. (Maybe work the numbers a bit and call it 80/20).
Just consider how much Excel is used in just about any business. A tiny bit of VBA can really work wonders. Sure, a guy emptying bins isn't going to be helped by learning to code, but there are a huge number of people in desk jobs where just a bit of coding ability would make an enormous difference to productivity.
In short: I'm not convinced your assertion that writing and speaking skills are broadly more important is correct.
For better or worse, most people make judgments based on how well one presents themselves and communication is a big part of this.
Even in the software field, most companies are looking for people that can communicate effectively as well as code. I know the industry has a higher tolerance for people who are talented but lack social and communication skills but there are only so many companies out there that can accommodate these individuals.
Learning to code does not mean programmer, but if you learn a little bit about creating software you will have a peak behind the curtain and will be better able to assess what is practical and what is not as well as have some sympathy for the code monkeys.
Except that not everyone will work with code monkeys. Basic computer skills and able to use applications is a lot more different than programming, and often the reason you have levels of middle management with technical and business ability to decipher and relay the important information.
Obama says a few nice things about Computer Science and encourages people to learn more about the world, and HN still manages to find every possible negative angle to trash it. Impressive!
Obama said a fundamentally ignorant statement that seems even more ignorant considering all the technical problems with Obamacare. Hacker News is just pointing this out.
Encouraging kids to try to become astronauts is not an ignorant statement despite the fact that becoming an astronaut is really hard. Telling kids to try to design iPhone apps or make video games is much less so. It's a shame that HN can't recognize what is fundamentally a good thing: a statement from the president encouraging curiosity and proficiency in computer science and programming. It's incredible to me that this community of so-called "hackers" can be so quick to shit on it. Perhaps it's an insecurity thing, and they are afraid if others learn their skills they may no longer be in the position of power they are in now?
I've tried to talk to younger kids in my family about building things with computers. You'd be surprised how hard it is to get them interested, even if they play Minecraft all day.
For many of us, we got interested in programming though randomly hacking a game at one point in time. Telling kids that they can build their own games or apps and helping them potentially get interested is a big deal in itself.
> Perhaps it's an insecurity thing, and they are afraid if others learn their skills they may no longer be in the position of power they are in now?
Most of the objections seem to boil down to this. For better or for worse, HN is an entrepreneurial community, and everyone seems to be approaching this with an ultra-logical "this policy will decrease my worth by $X" approach. Post this video on a forum that's geared toward, say, developers of open-source software and see how different the reaction is.
One thing isn't inherently harder than the other. To put things in linear dualistic terms like
hard vs easy
good vs bad
moral vs immoral
can sometimes be over simplifying due to the normative nature of these concepts.
For someone who knows Vietnamese to learn Chinese is easy, but for someone who only knows English learning Chinese can be harder.
Each discipline has its' own linguistic domain. The difference between a software programmer and a rocket scientist is the rocket scientist knows a set of specific terms/vocabulary that distinguishes different parts of rocket, fuel, working process of aerospace and other stuff I don't know anything about. Not only does the rocket scientist knows all the terms, he/she also understands the relationship between each terms. It is mastery of this Linguistic Domain that make it possible for rocket scientists.
Programmer has mastery of a different Linguistic Domain and for some rocket scientists it may seem hard.
I do some what agree with you on the 'insecurity thing'. Although I think that is only a case in below stage 4 working culture (see Dave Logan, Tribal Leadership for reference on organizational culture stages http://www.ted.com/talks/david_logan_on_tribal_leadership.ht...).
I agree. Generally, I think criticism comes easier than praise. And no doubt, selection bias contributes to perceived hostility in forums. But I think CS cultures like in HN especially pride themselves on detail and pedantry. Let's be honest, I think most of us here have a superiority complex to some degree. It was probably ingrained in us through debugging. "compile? damn, segfault. gotta fix ALL THE ERRORS."
Lately, I've realized the motivational impact of having a hero. Something to aspire to. Kids go after what you expose them to. This ties in to what pg said in his essay about "nerds", and I imagine it has a lot to do with the unevenness of the CS demographic. I think the president's video is great. Not all of us have to become CS grads. But for some, the meekest exposure can sow the seeds of a great career path or hobby.
When coca cola tells me to smile in an advertisement I don't get a warm fuzzy feeling in my heart for their advertising team that agonized for weeks over just the right kind of generic appeal to get me to drink more sugar water.
You're supposed to get suspicious when a politician tells you nice things! I think it's sad that viewing this as being in the interest of reducing labor costs is cynical and "negative".
I'm critical because this video isn't doing much in the way of taking action. It'd be great if there was some follow through.
Here's an example: Obama can commit to open sourcing as much code as possible and encourage teachers to use the bug reports as a teaching tool. Children can fix the code as assignments.
How amazing would it be if you contributed to fixing Healthcare.gov as a 14 year old? Each successful bug fix from a student could get a bumper sticker: "My child fixed Healthcare.gov". Imagine the pride a parent would have putting that on their car.
But wait. The link leads me to a fairly routine presidential video in honor of Computer Science Education Week, in which President Obama encourages kids to take computer science classes. "It's important for our country's future," he says. But I imagine he's cut dozen of videos for every other conceivable skill that could be taught in our nation's schools. "Nursing is important for our country's future." "Agriculture is important for our country's future." Etc.
So did this really lead to a conversation about whether everyone should know how to write code? How tiresome.1 I can probably list on one hand the number of significant skills that everyone should know. The rest are optional. Some of us know how to fix cars and some just hire mechanics to do it for us. Some of us know the law and some just hire lawyers to help us out. Some of us know how to drive trucks and some choose other careers.
In any case, I don't think computer programming would even make my top 20 of broadly useful skills.2 It's a great thing to learn if you plan a STEM career or if you just feel like learning it. But useful? For the vast, vast majority of us it's of no use whatsoever. Reading and writing are useful in nearly all careers, and are useful personally even if your job doesn't require them. But coding? Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you. Nor is it something that's useful in its own right because it promotes clear thinking. Nor is it a steppingstone to other, more broadly useful skills.
Coding is a specific skill needed for certain specific jobs. That's it. There's no need to put it on a higher pedestal.
1Tiresome because this comes up so often. Why do so many people insist that whatever skill they happen to know is one that everyone should know? There are lots of skills in the world. All of us know only a tiny fraction of them, and that's the way it should be.
2As a time-wasting skill, however, computer programming is hard to beat. I can no longer count the number of hours I've spent coding (or scripting) little utilities that did me no real good at all. But it was fun!
> But coding? Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you.
It's silly to reduce this to "Programming is useless outside of STEM". I once saved an admin assistant _days_ of work because I happened to stop by her desk to chat and noticed the task she was doing (combining some spreadsheets) would be trivial to automate. She had estimated at the rate she was going, she had 17 hours of work left.
I'm not suggesting she should know how to write script to parse and combine a bunch of csv's... But a basic 'literacy' in programming would have at least let her know there was a better way...
I have plenty of similar anecdotes, and I would guess many of you do as well...
Good point. Knowing it could be done would have been good enough for her, because then she would have known to ask someone to help her. If you have at least an idea of what's possible, you can then have a good idea when it makes sense to ask the expert to give you a little help.
She certainly would never _need_ to know how to do it herself, although there's nothing wrong with that. If she were asking the expert for something every day, then it might make sense to teach her more, but if the requests are infrequent and not time-consuming, then the productivity wins can be had without teaching someone something she doesn't need to know.
I think you are confusing things. Nobody wants the entire world to be CS experts. What most people are advocating is that an entry level CS course be given to all students. Just how we make them take Chemistry, Physics, literature.
No, I'm not confusing things, I'm trying to suggest that even just understanding what basic coding can provide would be of a lot of benefit to people. I think having everyone take a basic CS course is a fine idea.
While I think you make a good and valid point, why programming specifically?
For instance, I have been exposing myself to electronics and it suddenly became obvious how I can build certain circuits to save me time/money, where it was never obvious before. Why isn't Obama pushing for everyone to learn electronics?
Caveat: I'm not from the US. Maybe electronics is already part of the curriculum. (Basic) programming has been part of the public school curriculum here for several decades. My father even recounts using punch cards back in his day.
>>But a basic 'literacy' in programming would have at least let her know there was a better way...
That has very little to do with programming and much to do with skills like analysis, reasoning, problem identification and thinking in the direction of automation(Reduction of human effort).
Let me as you a simple question. If learning programming teaches you to naturally thing about automation. Why haven't programmers automated programming itself completely?
Programmers have been automating "programming itself" through the creation of higher level languages (ASM->OOP) and through things like libraries. Programmers are always thinking about how to automate the automating. The entire notion of abstraction could be thought of as automation.
Literacy in programming does help people recognize ways of reducing human effort. I believe it fundamentally changes the way you think especially in areas of analysis, reasoning and problem identification.
>>Literacy in programming does help people recognize ways of reducing human effort.
Literacy in any equivalent domain, which uses significant level of Math helps you recognize ways of reducing human effort.
Programming is one such domain.
>>I believe it fundamentally changes the way you think especially in areas of analysis, reasoning and problem identification.
We already have a subject to take care of that. Its called 'Math'. If you are not teaching Math properly, merely replacing with an abstract domain of Math and teaching it equally badly won't cause any reasonable impact.
What's more learning nearly anything well, encourages analytical skills, reasoning and problem identification. Law, medicine, accounting, teaching, farming, nursing, personal finance etc etc the list is endless.
I don't agree with Kevin. It's true that you can function without programming, but it's also true that being able to program could improve pretty much any job. Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him.
And more broadly, I really do think programming improves the quality of my thoughts. I remember when I was 10 or 11 consciously experiencing the sensation of getting smarter as it dawned on me at deeper and deeper levels how to think precisely about problems. And that skill set invades every aspect of my thought process now. I find it to be a remarkable improvement.
On a practical level, programming is probably the best employment fall-back ever. I don't know many fields that you can enter without any credentials and make $100k+ within a couple years. That may change, but I expect it'll stay the same or improve for at least a few decades. So just for that reason, it may be wise for anyone who is capable to learn it.
"it's also true that being able to program could improve pretty much any job. Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him."
If a janitor develops the skills to go that far, why would he still be a janitor?
I'm not saying that to be glib. I'm saying that because coding is a specialty that requires a great bit of practice to get functionally good at. The time and effort invested in getting good at programming just isn't worth it for many professions, whereas hiring specialists to do the programming is.
Sure, our hypothetical janitor would be able to do some cool stuff if he could develop apps. But if he can develop apps, economically speaking, he should be transitioning into higher-value and higher-paying services. (Unless he wants to disrupt custodial services with a startup -- but not every janitor should found a startup. That would be impractical.)
Saying "everyone should be able to code" is a bit like saying everyone should be able to do college-level statistics. I can't think of a single profession that wouldn't benefit from a college-level understanding of statistics. But not everyone's cut out for it; it's not fundamentally necessary to every profession; and in the context of a market economy, it functions better as a knowledge-specialty than as a broad foundational skill. (This isn't a flawless analogy for any number of reasons, but hopefully you see what I'm getting at.)
Absolutely. The real tragedy of our economy is not that everyone should be coding but isn't, but that it's not generating enough demand so that even people who are good at laying bricks and driving trucks, etc. have enough job opportunities
> Even a janitor could develop, say, a logistics application to optimize his path through the building he cleans, or build a roomba to vacuum for him.
Those require a lot of effort (and required knowledge) for minimal returns. A better example might be a janitor could make a web-app which lets himself/others note what places need to be cleaned, what time they were cleaned, and then potentially notice patterns that might help him find a source of the problem, minimize the response time, etc. I feel like that kind of a thing might be more useful and given the right tools/frameworks, might not even be all that difficult to implement.
Americans encounter basic statistics and charts in everyday life. Many media reports cite studies in health, social, economic, and political trends. Understanding statistical concepts is important to understanding the meaning of these studies and, consequently, to scientific literacy (Crettaz von Roten 2006). One test of these concepts included on the 2008 GSS found that 74% of Americans could read a simple chart correctly and 66% understood the concept of "mean" in statistics. Understanding these two concepts was associated with both formal education and the number of math and science courses taken. Older respondents were less likely than younger adults to respond correctly to these two questions. Men and women were about equally likely to answer these questions correctly (appendix table 7-15).
This is really absurd. Most janitors are paid by the hour. Why would someone engineer their paycheck away? You obviously don't want to spend a real long time doing your job less get fired or be seen slacking off. However if you were paid to clean a school after school and had a set task and you engineered a 4 hour job into a 1 hour job, EXCELLENT you just cut 3 quarters of your paycheck away.
Why would you build a roomba when you can buy one?
Have you ever used a roomba? You'd need like 500 of them to cover enough ground for a school or a store and they'd have to run overnight and avoid falling down the stairs if you were in school and good luck finding them all the next day.
There's a whole custodial industry that has already thought of and solved many problems and perhaps they do things the way they do because that's the best solution, because roomba may be good for a room in a house but bad for a whole school
If you had set hours, you still wouldn't want to optimize your route. I know that the time goes by much faster if I'm busy and doing work than if I'm sitting around with no work to do. Nobody wants to walk around and see employees sitting around doing nothing, that's a good way to get fired. People complain. Your hours get cut. Your paycheck gets cut.
I had a job in high school that was awful because between the hours of 2 and 4 there was nothing to do. Two hours felt like a whole lifetime. I tried to make up work like scrubbing walls and stuff but I couldn't do that all the time because the walls were dirty once. It would have just been fine if I had some friggin work at that time.
I think most importantly it's about being computer-literate in a broader sense. Introducing kids to programming should be seen as a general knowledge matter. We introduce children to many fields so that they understand better the world they live in. Coding should be no exception, especially as computing becomes ever more dominant in our society. An introduction to programming would give children the basic vocabulary to understand what it's all about, and maybe the idea to go further when they need to or want to. Importantly, it also serves to demystify the field: a child might feel that programming is way beyond her reach, maybe requiring a significant technical background and complex and expensive tools to do anything? She might look at it differently when she discovers what she can do with Notepad, a browser and 20 lines of Javascript.
> Unless it's part of your job, the odds are vanishingly small that it will ever be of much use to you.
There are very few, if any, areas of knowledge work (which is broader than STEM, but subsumes it) to which a small amount of programming skill cannot be productively applied -- even the ones where institutional IT policies have restricted the available means of applying that skill to, say, Excel macros.
> Nor is it something that's useful in its own right because it promotes clear thinking. Nor is it a steppingstone to other, more broadly useful skills.
I'd have to disagree with this pretty strongly. There are probably ways you could develop some coding skill without learning broadly-applicable problem decomposition and analysis skills that are usable almost everywhere and not usually taught in other contexts, but you'd have to make a special effort.
Eh, lots of people end up using information systems incidentally to what their main task is. I wrote a script in 20 minutes to automate some email->shipping labels work and saved someone about 5 hours of work a day.
As more people start using datasets in some capacity for their "real jobs", being able to automate things becomes increasingly important. The amount of insane labor going on using Office boggles my mind. Knowing coding will at least get people to say "wait, there's gotta be a better way" even if they can't accomplish it themselves. Not to mention the cognitive benefits from thinking through problems.
"I wrote a script in 20 minutes to automate some email->shipping labels work and saved someone about 5 hours of work a day"
I see a number of anecdotes like this and they all seem to miss that their actual anecdote is actually something like: I saved a non-coder X hours by drawing on my thousands of hours of experience.
No one disputes that knowing how to code would be useful to many people. What's being disputed is how useful it is for the time everyone would have to invest. Perhaps it would be more efficient to have professional coders going around and helping automate tasks for admin people than it would be to enroll all the admin people in coding classes.
Maybe everyone should know how to brew delicious coffee or maybe only the coffee aficionados will do that and the rest of us get by with a combination of whatever dreck our Mr. Coffee at home spits out and by handing our money to baristas the rest of the time.
This case was actually embarrassingly simple -- a keyboard macro script. Arrow down, tab, ctrl-a, ctrl-c, alt-tab, ctrl-v, alt-tab, tab, repeat. I had never written such a script before, I just saw her hand motions were repetitive and figured it could be automated. Time spent was 1 minute looking at the keys entered, 15 minutes searching how to send keystrokes, and a few minutes deploying.
If admin people had some familiarity with coding and such, they'd be more quick to realise "wait, I'm acting like a mindless robot - this has to be scriptable somehow". Yet I've seen this kind of manual repetition (copying parts of an Excel sheet, concatenating files, etc.) plenty of times. It's often surprising to the admin people that some things are automatable, and some things are so obvious to programmers, that sometimes neither side realises there's a problem that can be fixed.
I'm working in a site with a sysadmin type and graphic designer currently. They don't realize that when we need to uncheck a box in the admin for 800 products, sitting there and manually unchecking 800 boxes is not the way to do it. I just shake my head as if they're insane and write 1 line of SQL.
I don't think anyone's saying that non-coders need to become thousands-of-hours coders. But being aware that it's possible to automate these tasks makes (or so the thinking goes) people more likely to realize that specific tasks can be automated.
I have a project rather similar to your "going around and helping automate" in my backlog at work, actually, but it'd be a lot more efficient if the people doing the work were in a place to have an idea of what my time would be best used doing rather than me having to do the digging.
I have to agree with Kevin Drum on this. On the list of vital life skills that everyone should know, coding is not in the top ten.
This being Hacker News, it shouldn't be surprising that we tend to put software development on a pedestal. This thread is devoid of "I saved a coder 20 years of his life by administering CPR"-type anecdotes that would make coding appear far less attractive as a skill.
Agreed, but when there's an important skill that's being developed overseas and neglected domestically, well, its worth beating that drum. Agriculture doesn't have that problem.
The world is becoming more and more digital. Encouraging domestic success in technology should be a national goal and, no, "I have an MBA and an idea for an iphone app" isn't enough. Software is still eating the world. The Chinese, Russians, and Indians certainly understand that. Do we?
While I think more people should learn code, I think the president getting up and telling everyone to do anything that isn't applicable to... well... every-freaking-one... is stupid.
Washington is clueless in two ways. (1) It normally doesn't get new things and lags behind. (2) When it does get things, it proceeds to fail at execution or not really get them and do ham-fisted things like this. So that means that Washington is always clueless about everything.
Sometimes I think the only thing that keeps us from being invaded or otherwise run over by the rest of the world is that nearly all other governments are at least as incompetent as ours.
I agree. How many of those making laws right now know anything about technology let alone how to code? So why does Joe Public specifically need to know how to code? It would be much better to teach people math and proper grammar, that would get them much further in life.
Proper grammar, for practical purposes, should be defined as "is capable of talking in a way that will not put them at a disadvantage in job interviews". Use of the the word "ain't" probably isn't worth worrying about; stunted vocabulary and inability to match tenses probably is.
Yes, this is exactly what I meant. I'm not pedantic enough about the "you and me" stuff, or even fully correct in my own punctuation and I'm a native English speaker. But knowing the difference between "there, their and they're" is very important for example.
It seems like you might be more concerned with people knowing how to communicate well. Knowing how to format their thoughts so that they will be understandable through conversation or text. The ability to adapt this formatting process to fit the audience they are trying to reach.
Yes, that also. As a programmer, half the battle in trying to understand an issue exactly what you have just stated. In my job the second part is also very true, tech speak for other developers, business/marketing for everyone else. But I've found this applies to all walks of life.
To me, programming comes down to breaking a problem down into smaller pieces, which is basically like algebra. My first internship (way back) required us to carry out a written test: here are some simple algebra equations, you have a basic calculator with one (or two, can't remember) memory bank, write out the exact exact key presses to solve the equations. To me it was simple, but apparently not to everyone.
It's stuff like this which the education system should already be teaching, work on improving that rather than trying to get _everyone_ to code. Coding is not for everyone, your doctors, lawyers, actors, artists and many others are not going to need it
Possibly, I presume you mean because it is not phonetic? But that is not going to be so easy to change... My biggest gripe of the modern school leavers is when dey ryt n txt spch & i hv 2 decifa evry wrd. That's ok in an actual text message, but I've heard of stories where it has been carried over to exams, CV's and the workplace.
You seem to have a big gripe about the English language. There is nothing prestige about it, some of the upper class may like to pretend there is but it's just a means of communication like every other language and I would make the same observations about those too.
There are different version of English. Please refer this most interesting paper "Grammatically Deviant Prestige Constructions" (http://fine.me.uk/Emonds/).
Do you really think the parent is talking about "nit-picky" stuff such as that ... Are you aware of no grammar problem anywhere in the US??? Really? You would have to be pretty sheltered for that to be the case.
It's nice that he likes programmers. But the talking heads from DC should be encouraging people to learn job skills in proportion to the numbers needed by the economy of the future.
Clearly, an economy entirely composed of programmers is not viable. There has to be at least one other person to dig out all the basements.
When I was growing up in Silicon Valley, everyone learned to code using Logo in (iirc) third grade. Everyone also learned to type. It was a required part of the curriculum.
Teaching us to code didn't mean we didn't learn to communicate. We still were taught math. At no point did the small period in programming and typing done once a week somehow deprive us of critical life skills.
It did however have a dramatic effect on myself and a good amount of my class. By the time I was in 6th grade, I knew three people running their own BBSes out of their houses (this was about 1989).
Not everyone who went through Bullis Elementary went into programming, but thinking procedurally (though technically Logo is a functional language), is a valuable skill to be learned regardless. In my opinion, being able to break a large task down into simple steps is a critical life skill.
I frequently disagree with the president, but he really hit the nail on the head with this one. I've been saying for a while now, if we were to replace high school and college foreign language requirements with a computer programming language class, you would propel America way ahead of everyone else (more-so than now) in terms of industry and innovation, and do wonders for the economy, all within a decade.
Think about it. Teachers, scientists, psychologists, poly sci majors, doctors, all with basic computer programming abilities. With the ability to build efficiency into their work. That would be so immensely powerful, the investment would be untold dividends. Way more than memorizing spanish vocab for a grade and then forgetting it.
There are a couple of assumptions built into your proposal that I would want to see some data to support:
1: Computer programming competes with foreign languages in high schools and colleges.
2: The economic value of programming languages is greater than the economic value of foreign languages.
Your last sentence also suggests you are comparing apples and oranges, a grade of a foreign language that is dropped against achieving basic computer programming abilities. These are not the same level of achievement.
I think understanding computation is a key 21st century skill that we would do well to invest in but I think foreign languages also have value.
In the US, meeting the foreign language requirement doesn't require actually learning a foreign language. I know many people who took the obligatory college prep Spanish who can't respond to "Buenos días." This is a better argument for improving foreign language education, though, than replacing it with computer language education. And, frankly, if the latter were taught as poorly as the former, it wouldn't be worth the trouble.
I don't think I was being clear. My point about apples and oranges was based on the view that if the programming languages achievements were as limited as the described foreign language achievements then not much would have been gained.
1) I don't know what country you're from, but in America here is how it works: In general, competitive colleges require at least two years of foreign language classes in high school. Stanford would like to see three or more years, and Harvard urges applicants to take four years.
When a college recommends "two or more" years of a language, they are clearly signaling that language study beyond two years would strengthen your application. No matter where you apply for college, a demonstrated proficiency in a second language will strengthen your application.
Students who have just the minimum can win admission if their applications demonstrate strengths in other areas. Some less competitive schools don't even have a high school language requirement and assume some students will simply study a language once they get to college.
If you score a 4 or 5 on an AP (advanced placement) language exam, most colleges will consider that evidence of adequate high school foreign language preparation (and you're likely to get course credit in college).
2) Foreign language requirements are originally a product of enlightenment era education curriculum and have been kept afloat with notions that in a globalizing economy candidates who can work internationally will garner higher wages and be more productive. This is true, to a degree, but wouldn't you rather work for a Swedish web design firm from your US based coffee shop?
US universities should really ditch the general language requirements and leave it up to the college or department within the college to decide whether it would even be useful.
Air traffic controllers and software programmers only need to know English. Business students intending to work for a multinational need at least one more language, and they should be from this list: Spanish, Mandarin Chinese, Cantonese Chinese, Japanese, Russian, German, French, Portuguese, Korean, or Standard Arabic.
The vast majority of graduates of US universities who are from the US will never need a second language other than Spanish, and they won't even need to know it all that well.
I still don't see that dropping the foreign language requirement would immediately lead to an increased take up of programming languages. I don't understand why foreign languages are what should be dropped.
If there is limited time for learning and there is no space for programming then any changes should be discussed in light of the full current curriculum. The original post suggested that foreign languages should be dropped in favor of programming languages, there may be other subjects of the curriculum that could be dropped instead, especially if the yardstick of economic value is the measure to be used.
> I've been saying for a while now, if we were to replace high school and college foreign language requirements with a computer programming language class
Computer programming has absolutely nothing to do with learning a foreign language. Learning a foreign language provides excellent perspective on your own, leading to a much greater understanding of grammar.
I took four years of Spanish and it's the only thing that made the endless, repetitive English lessons finally 'click'. For the record, I also took four years of programming and passed both CS AP exams (not that it mattered, since at the time colleges wouldn't acknowledge it b/c it was taught in Pascal and everyone wanted C -- yes, they were really that dumb).
Learning a foreign language provides critical insight into language. Learning to program provides critical insight into how to break problems down and how to structure a solution. Both are valuable and dissimilar.
It's easy to point to the feel-good topic of education and cry foul when anyone is against it.
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.
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.
I really wish I could find the original paper I read on the subject for you. I just went looking for it again and I didn't find it. It was something I read randomly in my travels, it was really long and really well researched with lots of data. I wish i bookmarked it. I found some more interesting stuff though.
I don't have any links off-hand, but I've seen some very convincing, scholarly analyses in the past. The research tends to come up during discussions about H1-B quotas and so on. IIRC, one of the features of a real shortage is supposed to be that prices go up, but in our IT "shortage", wages are approximately flat.
I have to believe that there is a happy medium somewhere between prematurely categorizing kids and trying to make every single person to learn to code and obtain a 4-year STEM degree.
Might be better for the USA to use the British system and have kids specialize at 16 and reduce the standard degree to 3 years (seems to work for Cambridge and Oxford) thats a 25% saving in costs right there.
Call me a cynic, but I'm really indifferent to this entire "everyone should learn to code" nonsense. There are so many mistruths that Code.org is spreading that it's shameful.
Let's get down to the biggest one: that with a "little bit of math and science" you can build the latest video game or write an app.
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.
"Only that nobody in their right minds would tell people to make mechanical engineering a part of the curriculum"
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
Not exactly. Those used to focus on "actually doing stuff" and tradesman type careers, which about half the grads eventually end up doing after dropping out of super expensive university. Socially that has an incredible negative opinion over the past few years (lots of marketing by the .edu and banking complex to spend more on schooling). So between irrational hatred of the trades and liability costs and/or insurance, shops have been mostly although not entirely removed.
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?
Yep. Can't have high-paying jobs. That would empower people.
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."
They worked for a while. Now new approaches are needed. Everything is like that. Human progress requires both a continuous input of energy and a continuous state of change and innovation. There is no formula for progress of any kind that can be applied unchanged forever.
I know where you're going with this. It's possible to ask the converse question: what happens when everyone has a low-paying job?
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
when you go to codeacademy that is your choice to improve yourself, and you either enrich yourself or quit. Fine. Very few on HN say, "you're an awful person, you tried to code on codeacademy and couldn't do it" (OK maybe someone might rag on a non-technical MBA that tries to pull the strings on engineers without understanding the damage they are causing).
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.
Can't they get the stuxnet guys to help with that, or even their managers who understand how to get software done? Don't tell me they don't have some overlapping skills.
To be fair, stuxnet proved that some government agencies could create code to break things; healthcare.gov is already broken, so they don't need help from the stuxnet team.
Well, stuxnet breaks things in one or two specific known ways on purpose and the healthcare site is broken in lots of unknown ways by accident. You think that is fair?
Judging from the responses so far, it seems the thread is going to evolve into a similar fashion to these previous threads discussing the same topic (not to say it isn't worth discussing again - but it has come up quite often recently).
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.
I went to the code.org site, looked around and tried the objective-C version. I was (positively) surprised that it did work because I am not in the USA at the moment, meaning it's not blocked for non-USA access.
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.
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.
Wow, that was a lot of strawman arguments. (1) The OP's title calls for every American. (2) "Code" is pretty agnostic as far as paradigms. Many people would be served just fine by learning how to do basic computation, graphing, and scripting in Excel. (3) These folks are not computer scientists, but they don't need to be to advocate tech literacy. (4) It's about life skills (esp. tech literacy) -- more like Thoreau-style self reliance rather than becoming a disposable cog. (5) Cart before the horse... (6) You mean like math, science, reading, and writing? (7) Learning to code basic programs helps you accomplish real tasks. Insight into "software development" be damned. I drive a car, but I'm not a ICE thermodynamics expert.
I'd rather have every American learn how to vote. Far more damage is being done to this country by ignorant voters. Far more benefit could be derived by having an intelligent, well informed voting population. The best way to protect your future and that of your children is to elect representatives that will truly do what's best. The economic implosion of 2008 had nothing to do with not knowing how to code, write, cook or weld. It had everything to do with horrendously misplaced public policy and legislation. Learning how to critically analize issues without the influence of emotion, religion or political indoctrination to then intelligently cast votes is what we need people trained on.
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."
I learned to code. Listened to all the advice of hackers who said it was the most important thing ever, and they'd never work with you on startups unless you coded as well.
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.
Can Obama call every doctor or scientist or pharmacist to find cancer cure? Technology has gone too far, medicine and pharmacy are not moving forward. I really appreciate Obama's speech.. but why there aren't any initiatives in other fields...
In the back of my mind, I secretly resent this code.org initiative. It is clearly a good effort that needs to happen, but man, I really enjoy my cozy position as a web developer in 2013 making an insane amount of money doing relatively little work.
Wow. Looks like Youtube comments haven't improved much after all.
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.
Disclaimer: I'm a major contributor to Code.org's own tutorials.
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.
Shameful? And the president himself is not shameful? We are witnessing the biggest information scandal in the history of mankind ie- 'Snowden revelations' - and it all happened under his watch.
Well, here on HN, there's a different undercurrent of negativity. Keep that in mind, when you read through this thread, because it's an important distinction.
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.
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.
The most important aspect is more to think like an engineer (software/system/data whatever). This lets you at least recognize common information problems:
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.
How about rather than asking everyone learn to code, we encourage everyone (skilled or not) to maybe pick up a trade or other skill with marketable options.
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.
I feel like that's like saying not everyone has the skill set to learn Math, Science, English, or History. And to a sense it is true, there are many Engineers that have terrible grammar, vocabulary, and can't write worth a damn. And then there are plenty of excellent writers, artists, graphic designers have terrible Math skills or know nothing about Science. And then History, let's not get started how many people don't know some extremely basic facts about American history, let alone history from other places around the world.
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.
I for one welcome anything that exposes people to programming. I don't think it will necessarily transform the US economy or anything, but I think it will be genuinely good for people to have the exposure. K-12 and college students are taught all kind of things that may not click with them or be relevant in their daily life when they get out of school (plenty of people never use math or writing skills in their actual job/life). What I'm getting at is even though many people won't "get" programming or will simply have no desire to pursue it, exposing them to it wont kill them. There are also people who never thought of programming but try it and it does click with them.
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.
Sounds like an easy way for University to use an incentive to encourage more people into a degree path that might yield dividends for them, and move people away from majors that don't lead into employment.
it's only brutal because those jokers take themselves too seriously. If I were president, I'd pay myself a minimal salary, go on extended vacation, veto everything, and the only responsibility I'd take upon myself would be that big fat red button.
Working with the congress that has the lowest approval rating in history, and the congress that has passed the least amount of bills will do that to you.
I get what you're driving at, but the analogy doesn't quite work.
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.
We don't want government to simply "perform functions". The best government is the least government. Like code, we want no more government than is absolutely necessary, and I say we have way too much government already. Your stance would make sense only if adding more laws would improve things.
In other fields we recognize that there is a bifurcation between the knowledge required by practitioners of that field and the base level of understanding from non-practitioners. A 'good driver' isn't expected to know about ignition timing or the stoichiometric ratios of various fuels. For first aid we ask people to learn CPR, not to do '1 hour of surgery'. We expect people to know countries and capitals but not GIS maps. I feel like we haven't drawn the line between user vs creator as clearly in technology.
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?
Learning the technology used every day - more specifically and most importantly learning not be afraid to explore that technology - can be done without even touching on programming. It's a lot more akin to learning critical thinking: do not accept that things must be the way they are because you have been told it is so (or because these are the default options presented to you.)
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.
I do think it would be a good thing if more people, preferably in management positions or office-positions would get the chance to learn to code, or at least an introduction to it.
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.
So much work could be saved if most people learned a tiny bit of scripting, or really even what code is capable of doing. My girlfriend was telling me how one of the people in her office spent a few days renaming a huge number of files, so they'd be consistently named. I cringed when I heard that - it was repetitive, followed a pattern, and could have been done in minutes with a python or perl or bash script written in an hour or two by someone with a basic knowledge of code. That's the kind of coding everyone should know - the same way everyone should be able to add columns of numbers without using their fingers.
I agree with your point. As for the example, it's the type of thing that should be built into the OS. The absence of such features in Windows is the tip of the iceberg on how modern computer OSs have failed users and even society.
We've seen that before when in 90-ies everybody tried to learn some Visual Basic and later some Java.
Maybe I am wrong, but programming require quite a systematic effort in knowledge acquisition, lots of practice and a good mentor. I also think community is not a substitute for mentorship, well it is a superset of it one may say, nevertheless.
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.
I don't get the controversy. I don't see this as being about making everyone into a professional programmer, no more than having every student take music class will make them a professional musician. I believe it is more about the ancillary benefits in opening up new ways of problem solving, and having some rudimentary awareness of the inner workings of a world that one might otherwise never have the chance to explore.
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.
I think this is an amusing idea; however the truth is most people are not meant to be programmers. For those of you in the industry think back to your first couple of programming classes and the people who could not grasp the idea of a FOR LOOP. There was a small group of people who could do it and larger group that just couldn’t. It’s not personal, I was never meant to play basketball it is what it is.
I have to say, coding is definitely not for everyone. A rather specific kind of person (such as myself) is drawn to program computers. While I enjoy it most people I know would not.
Certainly having the option to take Intro and AP CS courses (both of these are available at most public high schools) is great, but "calling on all Americans," to code seems a little excessive.
HN has this funny attitude: whenever someone is "bad at math", it's the fault of our education system and the way math is taught in schools, because everyone is clearly born with good sense of logic, however coding is for some reason such a different skill, and only a selected few (aka HN readers) can truly master it.
I didn't mean to sound elitist, its not about "mastering" coding, the question is more about whether someone actually wants to code in the first place.
I've taught my daughter the basics of programming with Python to do things like sort her photo library. I think basic programming is a skill any American who uses a computer will find useful and the majority of Americans use a computer from day to day. Knowing programming is a force multiplier in computers. I don't know how many times I've seen someone spend 2 weeks hand editing some stupid spreadsheet that I could have written a script to do in 45 minutes.
We see programming as a lifestyle, a vital part of our everyday lives. The goal with hour of code is to encourage people to learn programming as a utility, not necessarily as a lifestyle.
In my view, the impact of the President's message will not be on those of us who are already teaching our kids programming, but on the kids who live on the other side of the digital divide, and have nobody around them -- parents and even teachers -- who are fully aware of what programming consists of. Many parents think that programming is dangerous.
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.
Hmmm, I wonder what this says about the iOS ecosystem, where programming on your device is strictly verboten Even former Apple Fellow Alan Kay, chosen by Steve Jobs way back when, couldn't get a suitable for children version of Smalltalk approved. The Gambit-C Scheme crew got their's approved, and then banned.
This is why when the government wants a website done, those Shove ready jobs are just waiting for us all.
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.
If we define programming as the stuff that we on HN do for a living with C, Java, JavaScript, and the like, then teaching every American how to code is a futile goal. Something on the order of half of all CS majors fail the introductory CS course. There is a really eyeopening paper by Saeed Dehnadi and Richard Bornat[1] that has a test that can be given BEFORE the course that demonstrates fairly well who will pass and who will fail. There are 5 fundamental concepts that it tests for
- assignment
- statement sequence
- iteration
- recursion
- concurrency although that is not needed for basic literacy
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.
The main problem I foresee with this is that the American school system is based on a religious school template whereby the students become very good at unquestioningly following instructions... and the whole point of coding is to describe to machines how to do exactly that so we can think about more interesting things.
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.
Learning anything new is all well and good, but the thing that's actually valuable to society and "america's future" isn't really more coders, it's people who are really fantastic at what they do; whatever it may be. I'd rather someone dedicate their life to becoming the best preserve-maker in the world than fixing bugs in groupon. The preserve-maker may not reach billions of people with his/her work, but based on my own observations, I've found that the relative quality of one's achievements in a field has more leverage than the scale.
hmm I suppose it seems obvious to some people, but I've met a number of people trying to become programmers for reasons that won't get them very far. Just my two cents.
Giving some workshops I did with non IT (marketing, middle management, ...) here at the company, I think a lot can be gained by some 3 hour workshops with e.g. Scratch/Blockly.
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.
I think it should be taught in school, but it shouldn't
be forced on students; sorry, but some of your programming
books are 600 pages of absolute boredom. I've wondered for
years why computer programming books are so terribly written. It's not a crime to include diagrams, and highlight
the really important concepts. I would like to see a Hacakathon for writers of programming books. The shortest
book that got across the material would Win!
While we're at it we can have our brains extracted and placed in jars. Then we can write web pages, surf and play videogames forever. Solipsistic Nation!
i think he is saying the right things! I think there is a problem that many kids like to play games, but that they are not quite interested to look at what is going on behind the scenes (does that sentence make me a grumpy old fart?)
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.
I wish algorithms were emphasized rather than code. Programming languages and frameworks are too much in flux right now. Education curriculum dont evolve very quickly so they would be baking in programming as it exists currently and recreate scenarios like Pascal being taught long after it was relevant in the mainstream.
Electrical engineering, computer engineering, and computer science are related.
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.
Just focus on recursive functions all along primary and secondary school, with a more regular syntax (see G. Sussman on mathematics), and you'll get free programmers.
I'd rather have a 20th century healthcare system, or a 20th century prison system, or a 20ths century set of .gov regulations, or a 20th century separation of church and state, or a 20th century social welfare system or ...
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"
You are correct. Political and bureaucratic types with no experience in building big systems called the shots until the 3rd week or so of October, and were making major change orders in August, and other changes in the week before launch. And no single manager had it as his personal, full time responsibility (although in fairness, it just occurred to me that anyone savvy in HHS would have avoided such a position like the plague). The infrastructure was grossly under-provisioned, and when the general contractor/integrator including integration testing, HHS's CMS (now "fired" and replaced by the private QSSI) finally did integration testing in the couple of weeks before launch it failed hard. But somehow, in best waterfall in practice tradition, that had no effect on the decision to launch.
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....
Being able to code "hello world" is almost useless, but knowing something about scalability would help. Even if nothing more than "its important".
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)
It's an observation. Perhaps someone else who watched this video has some information about something that happened immediately prior. I could have been more explicit in my request, you're right.
>Starring Bill Gates, Mark Zuckerberg, will.i.am, Chris Bosh, Jack Dorsey, Tony Hsieh, Drew Houston, Gabe Newell, Ruchi Sanghvi, Elena Silenok, Vanessa Hurst, and Hadi Partovi. Directed by Lesley Chilcott, executive producers Hadi and Ali Partovi.
>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.
> What the fuck is this shit? They really pumped billions in marketing!?
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.
Doubt whatever you want. I'm telling you a fact: Nobody bribed anybody in either political party to participate in our campaign in any way. Code.org runs with a tiny team and an astonishingly small budget. It's the easiest lobbying job anybody has ever had to do ever.
"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?"
Every kid should be able to learn this stuff and should understand why they would want to. If we have more kids programming in 2013 then I assure you by the time they are in a position to take your job they will deserve it.
The fact that you think of programmers as a brotherhood tells me all I need to know, but I'd just like to add that the problem today is that there are an incredible number of mediocre programmers out there (many in this thread). I, for one, want it to get HARDER for mediocre products to make an easy living. The goal of teaching programming to children is to help kids decide if they even like programming. There are waaay too many kids in the US who have to wait until college to even learn programming formally.
> 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. <
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).
If he really meant it, if he really cares about education of young Americans, he should try to fight with the sh*t teacher unions. Oh no, that's politics, don't go there. So just let politicians say nice things. Don't let them talk about their dirty politics! Yes, just say nice things! No politics!
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 just divided America... How will all the Americans respond who thought guns were the answer around and after WWII?
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.
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?