I want them all to know this kind of thing, regardless of anything else. Plus it will make me the coolest uncle ever.
http://spins.fedoraproject.org/soas/
It has tons of great interactive python programming tools and projects, plus all the hours are logged and you can review how much time the kids spent on each project.
They are already being expected to impart to the kids sex education, anti bulling education, physical education, sun safe education, how to not eat too much crap and get fat education and many other things that in a normal society would be the responsibility of parents but the government now seems to believe should be imparted by the formal education system.
There are many things wrong with the modern education system, and I don't think many of them are going to be solved by imposing the requirement to teach programming on teachers who in many cases struggle themselves to even turn on a computer let alone be able to make it do what they want in any meaningful way.
BASIC was interpreted, and not object orientated. You'd have a book, and that book would contain every keyword, with a description of what it did, and some example code.
So you'd buy magazines or a book, you'd type out the programs in those books, you'd debug what you'd typed, you'd modify what you'd done, and then you'd start creating new programs. You'd write a little program, and then realise that you needed to do X; so you'd read the book and find the instruction for X, and you'd grok the example and write it in your program and debug.
Where is that workflow, that learning journey, recreated today? Perhaps with the "learn X the hard way" series?
Also, most people here are either technically brilliant or at least proficient. Now imagine the general population. These are people who just don't know how to plug in a printer. (In the days when computers had parallel ports and serial ports you could not plug the printer into the wrong port. You just had to look at the cable, and look at the computer, and try to mash the connector into all the ports. It would only fit one, and it would only fit one way. Yet I was seen as some kind of genius, by more than one person, because I could plug a printer in.) Or these are people who will not, seemingly cannot, read and act upon a short simple error message.
I love to think that maybe a bit of programming / coding teaching could change that, but I'm not sure it will.
Finally:
> Learning to code is learning to use logic and reason, and express your intent in a consistent, understandable, repeatable way.
Author uses "coding" and "programming" in weird ways. Normally programming is the design process, with pseudo-code and flowcharts and jackson structured programming charts and etc, while coding is just taking that and writing it in some language. Maybe I'm showing my age and the words are now used in a different manner, but it threw me for a while.
That sounds more like software engineering to me. Most people do indeed use the words 'programming' and 'coding' interchangeably.
The people who learnt to program computers in the 70s and 80s weren't taught at school by teachers, they taught themselves (maybe with help from friends).
The OSes of the 1980s were much simpler than MacOS/Linux/Windows. In particular most of them had a standard BASIC built in which was very easy to start using. One could just turn the computer on and immediately type in a program.
I agree, but that kind of programming is very different from the type of programming that will be useful to non programmer kids when they grow up. There is also google, stack overflow and a waltz of easily accessible information on how to do X in language Y that was not online then.
I am drawing a distinction between coding and programming. Let me explain - When I graduated from college in 1999 the career office was very assertive that I should use and describe my ability with the MS Office productivity suite. When and how it had become an important enough to include on my resume doesn't matter, it was an important skill to have for the types of jobs I was going to be applying for. So programming and programmers will always have to dive deep and be able to develop complex systems. I am using the word coding in the same context as what I started with: I worked in a laboratory and collected lots of scientific data. I learned how to automate the tedious parts of manipulating, formatting and emailing out the results to save my time and reduce the errors I made doing it manually. To me, this was a self taught journey to learning to code with vba and even back in the first half of the Aughts there were decent places to figure things our for VBA.
I think in the future, kids or prospective employees in general that are not programmers, being able to put "can write JavaScript and VBA to automate repetitive tasks" will not be required. But, the candidates who can will have a marketable skill that sets them apart from their peers even though they are both trying to get a job in Supply Chain or Regulatory Affairs.
And these days, JavaScript is very easy to get started with, fire up a modern browser, open up the console and type in your program on any web page. It's been a while since I worked with VBA but I assume it is discussed on stack overflow.
It's still the truth these days. Of course, we don't have basic installed by default anymore. Instead, I have a desire to make video games and it took me several tries over my childhood until I started to program seriously at age 15.
I found in it the potential for excitement that I found when I recently looked at the demo programmer live coding at http://iquilezles.org/live/index.htm
The live OpenGL editor he uses for immediate feedback made me figure out how to get an OpenGL triangle rendered on my laptop right quick. I can imagine that having storytelling control over 3d characters could do the same for kids.
It takes a certain mindset to write code. Not everyone has it or is interested in it. My children couldn't care less about it and that's up to them. They'd rather be digging holes in the garden and covering things in paint. I'm not here to indoctrinate them with my own interests but to nurture their interests.
Education is fundamentally flawed on the basis that it mandates knowledge on political whim and percieved societal need rather than nurturing and developing interest. Consequentially society is filled with people doing what they are bad at and hate.
And yet I'm glad that, when I was a kid, people encouraged me to plant things and paint things.
Just because learning to code is societally approved doesn't mean that kids shouldn't be encouraged to practice it for fun. Trust me, if the kids decide they hate it they'll figure out how to avoid it as much as they can in the future. They're good at that.
Mind you, your attitude that you shouldn't expect your kids to take after you is a healthy one, and I don't want to discourage it. But don't take it too far. It's good that people are trying to figure out better ways to teach kids about programming.
It takes a certain talent to write or play music, or paint, or do science. We encourage kids to try all these things, most won't pursuit them, some will. The kids choose without coercion.
How many parents encourage kids to learn how to code compared to the number of parents that encourage their children to do the above mentioned things? It is the children who decide what they want to do, it's about offering them a broader spectrum of things to choose from.
It takes a certain mindset to make a living as an author, and my kids might not have that. But I'm damned if I'll let them grow up not knowing how to read and write.
I know I would have loved programming in my younger years, just didn't have too much access at the time. That's at least my two cents :-)
Is it something that most people really can't do? If so, that scares the hell out of me. And not because they can't write computer programs, either. My concern is, how sloppy is their thinking in general? How easily do they fall for circular arguments, or succumb to "lost purposes", where what they do no longer has any connection to their goals?
I'm all for providing exposure to a variety of things in school and at home, coding included, but we need to let our children be themselves. Give them exposure, let them taste what the world has to offer, but don't compel them to be the über-coder that you wanted to be.
Include group work and gentle supervision.
Programming just isn't for everyone (and that's OK), but everyone should give it a try to find out.
Teaching programming in schools would probably get the same result was teaching math: courses that normal people promptly forget a year after school. Because, really, how often have you factored a polynomial?
But still, you got a little taste of Math in school. Maybe you liked it, maybe you barely made it through math. Same thing would happen with mandatory programing classes.
Thinking the talent crunch will be solved by teaching CS as part of mandatory education is probably wishful thinking.
You wouldn't accept that if we said: Well not everyone has a "natural ability" to read, so we'll only teach the people that are show some "talent".
(Quotes because I don't actually believe those things exist, you can be taught everything, and be good at everything).
I'd rather teach my children things that get them out of the house exercising and learning to be friendly, well adjusted humans.
The next thing we tried was Kodu from Microsoft (http://research.microsoft.com/en-us/projects/kodu/). He found that enjoyable - very visually appealing and you can get something basic but interesting running quickly. Getting something moderately complex became hard however due to the limited palette of design tools.
The next step was Scratch (http://scratch.mit.edu/) which is a step down in eye candy but a step up in control. You get a lot more flexibility but it is still very approachable. Everything is visual as well, which makes it really easy to see what's happening. Scratch allows variables and lists, control flow structures, etc and thus gets into "real" programming.
However, Scratch has some big limitations, especially around instantiating new 'objects' at runtime. I think the next logical step forward is Stencyl (http://www.stencyl.com) though there's some additional layers of abstraction that are causing a little consternation.
I keep trying to push Python and Java, but for my son at least, not being able to start with something visual is a big drag. Maybe next year.
[0] - http://processing.org/
Now, back at home we didn't have many fancy electronics stores, so this huge emporium of transistors was pretty amazing for all of us.
My mother hinted that they were going to buy us a Nintendo (NES), and I was ecstatic. I had never heard of such thing, but seeing Super Mario Bros. on the display machine was pretty mind blowing for an eight year old.
But, my oldest brother (who was a bigger nerd than me) did not want the NES. Crap. I was furious, and really disappointed. Instead, he wanted some stupid computer. It was big, bulky, ugly (light brown with black function keys!), and required a huge monitor to be of any use. It also required a disk drive (a 1541 model).
Yes, my brother wanted a Commodore C64.
So, my parents decided against the NES (oh the humanity!), and purchased the C64 with a 13-inch (I think) color monitor, a 1541 disk drive, and a color dot matrix Okidata printer. They must have spent like a million dollars. An amazing feat, because we were barely middle class.
After learning how to turn it on, writing to the diskette, printing demo images, playing Ultima, I started to code some BASIC. Nobody taught me, I just picked the manual and started coding.
My first programs were something along the line of:
10 PRINT "HELLO" 20 GOTO 10 30 END
Now, for an 8 year old kid who was teaching himself how to use the damn thing it was pretty awesome to pull such simple programs.
Then at age 9 I bought my first "computer", a Tandy PC-7 at the local Radio Shack (after saving my lunch money for months).
Now, as a hacker/programmer/software engineer/whatchamacallit I look back at those days and appreciate what my parents and brother did.
Such experience has led me to teach my nine year old niece how to "program" in HTML. She enjoys it very much, and even asked me to put Ubuntu on her desktop. My daughter will also learn how to code, even though I don't expect her to follow in my footsteps.
tl;dr: Teach your kids how to code. They might go on to become hackers themselves.
They may be interested in these links.
(http://hackaday.com/2012/01/23/maximite-harkens-back-to-the-...)
(http://geoffg.net/maximite.html)
> The Maximite is a small and versatile computer running a full featured BASIC interpreter with 128K of working memory.
It will work with a standard VGA monitor and PC compatible keyboard and because the Maximite has its own built in SD memory card and BASIC language you need nothing more to start writing and running BASIC programs.
The Maximite also has also 20 input/output lines which can be independently configured as analog inputs, digital inputs or digital outputs. You can measure voltage, frequencies, detect switch closure, etc and respond by turning on lights, closing relays, etc - all under control of your BASIC program.
The design and the firmware including the BASIC interpreter is free to download and use.
Really? Computer science has the highest unemployment rate of all degrees in the UK.
http://www.thecompleteuniversityguide.co.uk/league-tables/ra...
That first term consisted of multiple choice exams in C and HTML, where one of the questions didn't have a correct answer.
In short, I sadly don't think that any lines can be drawn between 17% unemployment of CS graduates and a supply of great available talent.
Speaking as someone who's processed 200+ applications and hired 7 engineers in London the past 2 years, sharing stories with my colleagues at other companies - great talent is very hard to find.
It seems kind of cold, hearing myself say this, but before concluding the article is 'wrong', I'm inclined to explore possible alternative interpretations.
Programming is a kind of problem-solving. Learning it makes you better at solving the kinds of problems it solves. I have seen no evidence for the assertion that the kind of discrete-approximation problem-solving style inherent in most programming necessarily makes you better at solving problems in the general case.
Most of my friends with computers at that time spent 5-6 hours a day playing games instead of learning.
In my childhood I'd be easily entertained by a text adventure or a pretty simple sprite based game. Now a days your kid would have to create the next Call of Duty.
Perhaps a strategy that would make more sense in today's world is to get them the Valve Hammer Editor (or equivalent SDK) and instead have them make levels for their favorite game engine.
My first serious programming was Povray scene desciption language on a 486dx2. (yes, it was turing complete)
The joy of programming was not in ipressing anyone with the fancy graphics, but tweaking and trying new things to see what would happen - being creative.
My older brother and I, actually messed around with a hybrid Autodesk Animator / text based adventure, earlier. I think it was batch file based, but nothing came of it. Still, it was great fun to mix together sprites from my favorite dos games.
Your mileage may vary: my kid was quite happy to muck around with a text-based game he crafted.
Then he laid it to one side: he's enthralled by actual engineering: building things made out of atoms, not bits.
Yes, all schools should have a fantastic Computer Science department. And it should be more than CS, it should be "doing fun stuff with computers". However, there is a very large segment of the population who cannot program.
I've got a friend who's quite smart. She's charming and extremely capable at her job. I discovered that she has absolutely no ability to think in three dimensions. She cannot follow even a very simple series of motions. She parked her car near a post, came out, got confused, and destroyed the whole side of her car because she couldn't work out the spatial problem to get out.
I've known people who simply cannot grasp calculus. They're interesting people who offer value in the world. Calculus is a fundamental and wonderful thing to know, but that doesn't mean everyone can or should learn it.
I love programming, but I respect the variety of humanity enough to understand that it should not be mandatory.
The point of the article is that coding is in some sense a core/intrinsic skill. That anything you do is actually deeply tied to coding in the sense that "something you do" (technology, in the general sense) is equivalent to "algorithm." Weaving is coding. Playing a game is coding. Building a house is coding. Painting a picture is coding. Proving a theorem is coding (Curry-Howard Isomorphism). Sure, they're different, more intuitive, weird types of coding, but the fact that you can't see that they -are- coding implies a limitation on your ability to abstract the concept of "coding" sufficiently.
The fact is that coding is a deeply human activity, and that by understanding coding we are really understanding ourselves and the fundamental means by which we -collectively- understand reality. The fact is that we need some shared understanding of ourselves, of our logical facilities, of the basis of our ability to produce and thrive and know how to interact with the universe. Without a shared framework, communication is useless/impossible.
Which would be why I said, "I think..."
driving is a 2d problem
Uh. Okay, sure. I submit to you that it's possible I was referring to more than simply driving, and that your claim of driving being a 2d problem is just silly.
Programming is not a deeply human activity, not in the least. It involves strict, logical thinking, abstraction, and hierarchy. You disrespect the variety of humanity by claiming it to be intrinsic.
Seriously, though, while I'm of the opinion that people learn different things at different speeds, I have yet to encounter someone who was simply unable to grasp a mathematical concept or a concept in CS (not counting some people I know with debiliating mental illnesses).
The trick is to break it into smaller and smaller chunks of logic until people get it. As long as these people are capable of basic arithmetic, I think it's possible to make them 'get it'. And yes, teaching can be very hard.
Having said all that, I do agree with ^ that programming should not be mandatory.
I honestly don't know what to tell you. We can do the whole, "some people don't get it," "oh yeah, you just didn't teach it right," circular nonsense all day. I don't really care. All I can tell you is that I've been close to a number of people who would never be able to grasp programming in any meaningful way.
HN is an echo chamber of highly intelligent people, a disproportionate number of them in the Bay Area. I don't think HN participants have much of value to say about what people in general can and cannot do or understand.
We are using the Corona SDK (in case anyone is interested).
Dave
In all honesty, people have an aversion to code like they have an aversion to anything math related besides simple arithmetic. I also disagree with his slight criticism of Codeacademy as being a place where people simply learn syntax. I was 10 years old when I wanted to know how we pages were made. I learned the HTML, then as I grew older learned the syntax. I only learned what I wanted to get something done. Eventually, through learning simple syntax I gradually began to understand the logic and theory behind programming. Of course I got much deeper into it during CS classes in college. My point is, people get turned off by code. Teach them how to print 'Hello World!' and you eventually teach them the underlying principles of programming in a sneaky way. It's like wrapping medicine in a piece of cheese so your dog will swallow it. If the dog knows its there he'll likely spit it out.
The title got me angry at first. I don't think we should be teaching children any specialized skill they don't have an interest in. My father is a pilot and tried to make me like flying because of the same kind of "this is good for you" thinking but it didn't work out. Also, as far as everyone using computers but only a few programming them, I think that's fine. It's more important that people get a broad overview of how hardware and software works and thats all. Does everyone need to know how to rebuild an engine to drive a car? No. Knowing how to check fluid levels, change a tire, and filter your oil will suffice.
Maybe I took it wrong but we don't need to teach our kids to code. There are a lot of ways to teach critical thinking skills (which is what he's getting at). Critical Thinking was a first year college course I was required to take. They should be teaching that course far far earlier here in the States. I was in AP classes all the way through school and even the Advanced Placement kids weren't offered a course even close to critical thinking.
Computing is a basic skill on the same level as math and literacy. It's only getting more important. You don't have to be an aspiring author for reading and writing to be relevant to your life. And you don't have to be an aspiring software engineer for basic computation and programming ability to be important in today's digital, networked world.
Its actually not as basic of a skill as math and literacy. Proof of this is that it takes math and literacy as foundational skills to then program. I agree that programming is a good skill but please don't pitch coding as being at the same level as basic literacy. The difference between someone who is illiterate and someone who is illiterate at programming is vastly different.