It's kind of weird to think that no-one gets their start like this anymore.
It's kind of weird to think that no-one gets their start like this anymore.
I've gotten bug reports for Hackety Hack where people say "I can't copy and paste from the lessons. Can you fix that?" I reply (obviously at more length and warmth) "Working as intended."
> You must type each of these exercises in, manually. If you copy and paste, you might as well just not even do them. The point of these exercises is to train your hands, your brain, and your mind in how to read, write, and see code. If you copy-paste, you are cheating yourself out of the effectiveness of the lessons.
I still think it's kind of amazing how such simple advice can be so effective. I often find that when I'm struggling to grok a new language or framework, that I've forgotten to hand-type at least a few examples.
The part of the body that learns how to program[1] doesn't speak English. You hear it even in the metaphors programmers use: code smell, this "feels" like a recursive problem, "listen to your code," etc.
That means to learn as quickly as you can you want as many parts of your body involved -- the English-speaking part, your muscles, your eyes, your memories of all the times you've made a stupid mistake only to have it cause you hours of frustration down the road, etc.
[1]: Really, the part of the body that learns anything doesn't speak English. English is just the data exchange format. ;)
Also, I don't know many professional programmers who type everything in by hand. It'll be something copied from a previous project, or cribbed from the documentation / somewhere online, then hacked into shape.
Of course, in order to do any of that you need to understand what's going on, but there might be easier ways to do that than manually typing in code.
Just because they're learning to code, doesn't mean that you should put artificial hurdles in front of them.
My pet theory is that it has something to do with information compression in the brain, kind of like Huffman coding, except you keep the table for life.
To me the weird part is that nobody gets their start sitting at a computer with somebody else. Or at least, if you do get a group of kids around a single computer, they're sooner going to watch YouTube (or play Minecraft) than learn to program.
My experience tells me that when you are just a bit beyond hello-world, it's way better to sit alone and maybe even disconnect from the Internet. I was starting with nothing more than a book on Delphi and the help system of Delphi, which included Win2k SDK, and feel that only by this way you could develop good debugging skills. I know some people who are learning software development, and the single skill they need badly is troubleshooting complex problems on their own and not relying on colleagues.
edit: now I see that my point is about sitting together with someone more skilled, but you're talking about kids leaning together, which is totally different.
This is one of the reasons the Raspberry Pi was created.
I can even use AIDE on my phone to write applications for my phone!
I have no idea why anybody claims we have less programming freedom than in the past.
But I also started earlier than most folks I know.
In my opinion, the abundance of dynamic and interpreted languages, powerful tools, programmable hardware, and the internet make getting into programming WAY easier than it was before.
Those home computers? You load a game, or you start programming. Since loading a game often meant fiddling around with a tape cassette and cable, and a few minutes hoping it would load, it's easy to see why people decided to try to code themselves.
I know abstraction is a good thing. I know it's powerful and etc etc.
But there's something nice about being able to squirt data to an address, and know it's coming out the parallel port, and having a hokey resister-ladder DtoA converter hooked up to turn that data into music. Or to have a single instruction to draw a pixel.
I remember being utterly confused by what a statement beginning with "while" did, but eventually I was reasonable enough to mostly implement a (very weak) checkers-playing AI.
This then lead to programming Lego robots in C, which was pretty neat. (Actually, thinking about that, the first programming I did was using the graphical LabView thing that Lego provides for Mindstorms robots.)
PRINT "Hello from the Computer"
And I worked my way up from there with the help system, and a lot of trial and error.It helped that our parents limited us to 30min/day of playing games, but were okay with me spending more computer time programming (or playing my own games, though I rarely did that. Making them better was way more fun than actually playing them).
I don't remember how old I was at the time, but it was definitely I was using Windows 3.11 (it was installed, but you couldn't run any decent apps when all your RAM was used up by win). By the time we got a Win95 computer (which in fairness was probably in '98 or '99) I was pretty decent at BASIC.
I continued to play around with it 'til I started learning C++ in maybe 2003? Luckily prolonged exposure to BASIC doesn't seem to have done any lasting damage :)
I think perhaps we might not be starting programming with computers directly all the time, but perhaps there will always be some object that younger folks will learn to program. Heck maybe the next kids will decide to program phones or connected home appliances or something.
As a kid, I was never really exposed to programming. It wasn't offered in middle school or high school. It just so happened that I was never prompted to try it. I majored in something non-technical, and didn't write my first 'for' loop til I was 24.
Which is a shame, because as a kid I totally would have loved it. If only there was one class, one teacher, one person, somewhere, telling me to try programming -- I would have tried it, most likely, if someone pushed me.
Oh well. As a grown up, I've discovered programming, I have a job doing programming, and I love it.
I was also given an Atari 130XE by an uncle that booted to BASIC, explored GORILLAS.BAS when DOS 5.0 came along, etc.
Access to this kind of information is easier than ever.
All this doom and gloom is self-pitying bullshit.
[1] http://en.wikipedia.org/wiki/Type-in_program
[2] http://www.atariarchives.org/mlb/introduction.php
[3] http://arstechnica.com/business/2012/08/experiments-in-airbo...
Don't forget that DATA statements just contain comma separated constants, and they were useful for a lot of stuff, not just POKEing a byte into memory. Manipulating these constants gave some people their first taste of 'reverse-engineering' level data. :-)
And the fact that people were typing in machine code, to directly manipulate the hardware, is pretty impressive. It's even more impressive if they went on to learn more about assembler in order to modify the code somehow. Instruction manuals for the machines included information about machine language programming.