Programming Is Heading Back To School
the agent man writes "Researchers at the University of Colorado at Boulder are exploring what it takes to systematically get programming back to public schools. They have created a game-design-based curriculum, called Scalable Game Design, using the AgentSheets computational thinking tool. Annual summer institutes train middle school teachers from around the USA to teach their students computational thinking through game design and computational science simulations. What's truly unique about this is that it is not an after-school program; it takes place during regular school courses. Entire school districts are participating with measurable impacts, increasing the participation of women in high school CS courses from 2% six years ago to 38-59% now. Educators would like to be able to ask students, 'Now that you can make Space Invaders, can you also make a science simulation?' To explore this difficult question of transfer, the researchers devised new mechanisms to compute computational thinking. They analyze every game submitted by students to extract computational thinking patterns and to see if students can transfer these skills to creating science simulations."
Everyone should learn how to program, because knowing how to program gives you total power over your computer. You can only say you truly control your computer when you can use programming to make it do anything you want it to do; otherwise you are at the mercy of software vendors that seek to take that control away from you.
Learning to program isn't just about learning the language. It's about conceptualizing and problem solving. Those aren't perishable skills.
Give me Classic Slashdot or give me death!
You seem to have a completely distorted idea of what programming is.
It has nothing to do with knowing the different kinds of USB plugs. It's knowing how to describe a calculation so that it can be automated by a machine.
It's essentially applied math.
The same reason the average persons should know that a toaster works by running current through some wire coils to heat up the bread. The same reason people should know how to do basic math without a calculator. Basic programming skills simply don't go out of date. Put a 70 year old FORTRAN programmer who's willing to learn in front of any modern language and they could be up to date in a matter of weeks. Knowing how your computer works, hell, just knowing that it isn't a magical box that is impossible to understand is a huge, huge deal.
High school should be about turning every kid into a little Renaissance Man, familiar with as many subjects as possible but experts in none. They don't have to know coming into graduation what they want to do with the rest of their life, but they should know where to start looking. That means a good base in all the essentials of modern society: language skills, math, science, computers, and yes, they should have some experience doing manual labor as well. At least then if they choose to enter the work force they'll know what they're getting themselves into.
I taught myself BASIC at 13, and Assembler at 14.
I wanted to do it, but little else so college didn't work for me,
so I dropped out.
Later I saw that ti would shift to countries that can pay their
coders less, and US firms went for it a great deal and or
brought them to the US via one of the 73 different Visas.
So while I am glad to see them do something for those
with this desire, it came about 3 decades late for me.
Good Luck to all the neo-serfs under the new world order.
google "32 trillion offshore needs IRS attention"
But I just don't see the need to waste nonprofessionals' time by teaching them perishable skills they will not use.
As Hatta noted, these "perishable skills" include conceptualizing and problem solving.
I simply can't explain why an average student needs to know this.
Perhaps that is a symptom of how you view knowledge? Everything nontrivial we learn or do has some application outside the narrow confines of the knowledge or activity in question.
I'd be thrilled if Mom knew that USB ports were pretty much interchangeable (thank you USB 2.0, 3.0, and high-power USB for wrecking that bit of simplicity, BTW). But she's scared to death that if she plugs something in wrong, hardware damage will result (thank you APC for making your "data port" [read: USB] connector the same as Ethernet instead of a USB B jack like God intended). And we're supposed to teach people like this programming? And expect it to stick? Give me a break.
The obvious benefit is that if you succeed in this teaching, then they won't be "people like this." The number one lesson of technology is that you have to try stuff in order to learn how it works. Once you learn that, you might still be a technophobe in abstract, but you'll be a lot less scared of your routine, personal technology and more willing to try stuff out.
That said, it's still fair to ask what makes computer programming such an ideal way to learn conceptualization and problem-solving.
There are two considerations. First, that some programming skill helps a lot in using spreadsheets. These are ways to monitor a family's finances or plan financial or life goals. Even for an average joe, this is a specialized skill that can pay off for anyone who saves money or makes loan payments.
Second, programming is unusual as being a remarkably cheap and powerful means of building something of value. In other words, programming has a low barrier to entry compared to other crafts. With a few hundred dollar laptop and an internet connection, you can build programs of significant value. You simply don't need that much to get started.
I had a friend in highschool who played "Drug wars" on his palm pilot. One day his mom was snooping on the palm pilot and found an itemized list of drugs, payments received, payments pending etc...
Confusion and hilarity ensued.
It's knowing how to describe a calculation so that it can be automated by a machine.
I'd go further. It's about understanding your problem well enough to figure out how to *always solve it*.
My example is Sudoku, mostly because a solver is the first nontrivial program I wrote. You need to understand the game on another level, and in an entirely different way, in order to find the answer to (effectively) all of them. "I know how to solve Sudoku puzzles" is not the same, and not nearly as powerful, as "I can solve *every* Sudoku puzzle". Making that leap from the specific to the general is what's important for people to be able to do.
I have developed a truly marvelous proof of this comment, which this signature is too narrow to contain.
This year I turned my son's 4th grade class into a computer using nothing but the kids, baskets, 3x5 cards and a white board.
You should have seen their eyes light up when it hit home that a computer is nothing but a machine that follows simple instructions.
After one afternoon the kids were writing their own "programs"
This is an example of 9 and 10 year old's learning problem solving and conceptualization with about $15.00 bucks worth of materials.
Angry Birds is all the rage for 4th graders. After summer vacation and they move onto 5th grade we are going to "write" Angry Birds with the same 15 bucks worth of materials.
Hey KID! Yeah you, get the fuck off my lawn!
I lose nothing by having someone else build a house to my specifications. Architects don't tell me how I can use my building afterwards, either.
I lose a lot when a company comes along and says I can only do X, Y, and Z with something I bought, especially when they have a vested interest in restricting me.
One in a million people need understand machine language.
One i one a thousand need to understand a high level language.
One in ten need to understand Excel macros.
Everyone needs to have some understanding of how computers "think".
One in ten get by with no knowledge.
One in a thousand pay someone to look after all their computing needs.
One in a million control the programs.
One in a ten million control the architecture.
Programming was a high-school level course as far back as the 1970s and, for many, it was at least as valuable as metal shop.
Why?
Programming should be a college-level course, for those who want to go into the field.
Negative. I flipped an Apple IIe disk upside down on accident and began coding at the age of 8, in elementary school. Teacher was smart enough to find me a couple books on BASIC, and fortunately my step-father had a home computer -- MS DOS came with MS Quick BASIC, and a few simple games. Taking apart video games such as NIBBLES.BAS and GORILLAS.BAS jump started my programming career.
For Christmas I got an expensive Borland C complier (on 24 5.25" floppies) -- I was selling software (shareware) by the time I was 12 (2D Doom CAD programs -- SuperVGA! -- Level & Savegame editors). Wrote my own BBS software and ran it from 3 phone lines. PUT MYSELF THROUGH COLLEGE WITHOUT LOANS.
You, sir, sicken me. GTFO my Internet.
My dear old great-grandmother had this saying from the old country. It went something like this..
"$99 bucks per license per kid. Go Fuck Yourself!"
I had a cool great grandmother. Like she said, this is exact reason charter schools and privatization of public schools is nothing but legalization of theft of public property.
Apple does, by locking the device down. Sure you can jailbreak, but they're still telling you what you can do. Microsoft intends to, with the way they're setting up Windows Phone (and I wouldn't be surprised to see that extended into non-desktop versions of Windows 8.)
Show me a smartphone or other similar device you can buy without software.
Some might say that knowing how to kill and dress an animal is a good thing, if only to understand where your food comes from.
I think your point falls into the pit of the ridiculous, since computers are so integral to our daily lives that being ignorant of how they work and how to make total use of them is bordering on being a plague as bad as the rampant ignorance in math and financial planning that causes so many problems today.
Everyone should learn how to program, because knowing how to program gives you total power over your computer.
Well, that's a stupid reason to learn programming. Do you also only think as far ahead as the next fiscal quarter? Do you only have plans to do work tomorrow, with no clue as to what your assignment in two days might be? Are you looking further ahead into the future of your living space than just next month's rent/mortgage payment? Or is programming the only thing about which you think in such small and short terms?
Sure, power over a set of hardware is a nice immediate benefit of learning computer programming. But computer programming is so much more than that. Anyone can throw a python script together. Anyone can leak memory like crazy in C. But to wield that control over hardware in a way that accomplishes a useful purpose requires a good deal of ingenuity and (occasionally) a touch of magic.
Teaching school-age children computer programming necessarily also entails teaching them to think differently. It teaches them to break a task down into its constituent steps. It teaches them to know exactly what they are doing and to know that they know exactly what they are doing. These are life skills that are useful to very nearly anybody, even if they don't use it to control their own hardware. The ones who want to learn it will learn to think as they must, and even the ones who memorize it for the exam will have to retain some of the skills that are necessary to write a program that does nothing more than start, do an arithmetic operation, and exit. The ones who do not learn this will simply fail the class.
This ideal is why programming should be taught in schools. There is so much more benefit than just bending a few digital logic gates to your will.
Let q be a radix > 1. I am in ur base-q, killing 10 d00ds.
I hear this argument a lot. X isn't just about X, it's about all this other stuff that it sorta kinda addresses too.
I think the question really needs to become, 'Does X teach other important stuff *better* than all of these other things we could cover?' I'm sure there are Shop teachers that would argue building a bird house or fixing a car teaches problem solving.
You can learn a lot playing Monopoly or Checkers or Chess or Dungeons and Dragons or watching TV or studying math or programming or working in a factory. I'm not sure that programming really does a better job of teaching 'problem solving' than many other things. Procedural programming, particularly at an introductory level, doesn't seem like it would do a good job. Algorithmic programming, sure, but to get to that point you need to cover the basics and then, most of the time, I think you could have the same educational experience focusing on the problem and math to solve it.
I'm not really sure if it's fair to assume other people would have your experience.
I'm sure there is some rich, successful business man who has many millions of dollars who started his first lawn care business when he was 8. That doesn't mean the key to future generation's financial success is to make them all cut grass all day. There are plenty of entrepreneurial types who do what you've done, in other areas than computer software. And there are lots of people who study computer science and never make anything worth having.
There are plenty of people who never had to work a single day in their life because of their ability to play football or basketball. That doesn't mean we should emphasis sports in elementary school. There is only so much we can teach in schools if we add something we have to lose something. If we have 'x' hours in the day which material will be the most beneficial for the most students. Maybe CS should be included. Maybe it shouldn't be.
Had I been presented with an educational program based on games, I would have hated it.
The very first program I wrote did real work that I needed done. All programs that I've written since then have also done real work. In this, I was assisted in this by the fact that I was a communication arts major and could choose my own path in learning computer science without the interference of an instructor. I went on to work at Pixar and to be credited in their films, and to be one of the founders of the Open Source movement in software, etc.
I've never liked games very much, and to be able to do something real with the computer made it much more exciting.
Not everybody learns the same way.
Bruce Perens.
Yes, except they should be taught programming as it applies to them, not game programming. Start off with teaching them how to use Excel and basic functions (sum, avg) and move on to some VB Script. Then move on to Access, and some database design with SQL and VB Script. You could then take the same skills and expand on them as needing, moving outside the office suite, making your own GUI. Just think about how much more productive the office would be if everybody understood a little basic computer programming. People could use these skills at home too.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
If software were just a component, companies wouldn't be doing what the GP complained about. That the GP complaint is real and well documented means that software is not "just" a component.
And computers also aren't "just" another tool. It is the tool of informatics, that is the art that is currently revolutionizing ourselves. Computers are "just" a tool the same way that reading is "just" a skill and critical tought is "just" a capability.
Rethinking email
I am pretty sure games apply to teenagers a LOT more then Excel and basic functions do.
This isn't about teaching them how to do something. It is about getting them excited to want to do it.