top | item 476536

The Little Coder's Predicament

138 points| mqt | 17 years ago |whytheluckystiff.net | reply

104 comments

order
[+] Erf|17 years ago|reply
Truth. I got my start in programming with BASIC via DOS. Today, I find that the biggest mental block to learning a new language is the difficulty of setting up a development environment.

It's at least a little bit surprising that platform developers don't put more of an effort into making coding for their platforms more accessible. One might assume that Microsoft would have a lot to gain from a generation of young programmers learning to develop for Windows.

[+] swombat|17 years ago|reply
Yes. I got started on the Commodore 128D, after I got bored of all the games mine came with. Would I have done so if there hadn't been a BASIC manual on my shelf and an interpreter baked into the system? Dubious. I then learned Pascal once I got my first PC, because Turbo Pascal had been included by the previous owner. The first compiler I had to fight for was Turbo C (had to convince my mom to ask one of her colleagues for a copy). But by then, I'd been programming for over 3 years.
[+] helveticaman|17 years ago|reply
So true. It took me months to get a emacs on a mac.
[+] gjm11|17 years ago|reply
What _why describes is half the problem. (Maybe a bit more than half.) In the Good Old Days, you could take your Spectrum/Amiga/BBCmicro/C64/whatever, and (1) write a program that (2) did something comparable to the games you could buy. (Less polished, sure, but not a million miles off.)

Nowadays, #1 is harder because there's no programming language bundled with the system, because it doesn't drop you into a REPL when you boot it up, and because the programming languages you can easily get hold of don't have nice easy facilities for graphics and suchlike. That's _why's point.

But of course #2 is harder too, because modern PCs are capable of all sorts of astonishing 3d moving graphics and stuff, and the games you can get for them exploit that. But that stuff is really difficult for a novice, and poorly supported by learner-friendly programming languages, and really difficult to do well even for experts.

So, for most people, the amount of gratification you get from writing your own code is less relative to what you get from just using other people's software, even if we solve #1 comprehensively. So the motivation to learn to program is less.

(Of course, there's a small minority who fall in love immediately with the very idea of programming. But it is a small minority.)

[+] bd|17 years ago|reply
Exactly, lack of motivation is a big deal. Games these days have crazy production values (GTA IV took 3.5 years, 1000 people and $100 million budget).

I know, there are also some very good indie games, but you have to be very creative to be able to compensate for a lack of production values. Not everybody is so multitalented.

One possible solution is to get into programming by modding existing games (instead of starting from scratch). Many cool games have very good scripting engines (for example Unreal, Civilization or Half-Life).

If you mod an existing game, your work is incremental, you can play with all these expensively produced assets. There is an instant gratification when you see some change in the game world made by you. Additionally, your results are immediately understandable to your gaming buddies.

[+] eli|17 years ago|reply
Guitar Hero is an incredibly popular game and requires no 3d graphics or full motion video.

I'm pretty sure I could write Guitar Hero in Python. (Oh wait, someone already did! http://fretsonfire.sourceforge.net/)

[+] gcheong|17 years ago|reply
The one thing that seems to be missing is the idea of including a programming tutorial with the pc or console. What if your XBox came with a manual called "Programming the XBox - a tutorial introduction"? When I got my Apple II+ it came with a programming manual on Apple BASIC presumably because that was part of the reason for the machine's existence - as an easily accessible platform for people to learn to program on. Nowadays, the idea that the common person would actually want to program their computer seems to have been lost.
[+] jballanc|17 years ago|reply
That's because the Apple II+ was produced in an age where the inventors of computers envisioned everyone learning to program computers...as opposed to using them as really expensive fancy typewriters, which is essentially what most people use computers for today.
[+] diN0bot|17 years ago|reply
iphones kinda come with a 'how to program an iphone app' tutorial, where by come with i mean the internet. presumably most of the comments here are focused more on the existence of tutorials at all, not on implementation. still, the state of open api's is growing tremendously (twitter, facebook<--confusing as all heck but lots of tutorials, greasemonkey).

i don't get what people are talking about. maybe that's because i'm not a video game or linux nerd. i don't like c or assembler or l33t h4x0ring. i mean, i'm not very good at it. but in the past 2 years i've learned how easy it is to program and make things. wow--i can make a twitter app. wow--i can make a robot. wow--i can make a real website. there are so many opportunities that weren't available before, especially in the realm of tutorials and thoughtful introductions.

[+] Jebdm|17 years ago|reply
What about LÖVE? http://love2d.org/

It's really easy to program for; Lua is a language you can pick up without much effort. It's reasonably fast and built upon a few fairly ubiquitous libraries. Game distribution is easy (zip and change the extension to ".love").

Obviously it doesn't come pre-installed anywhere, but it's not hard to get. It would probably take a little work to make it run on game consoles, though, depending on how many of the libraries it depends on are already ported.

[+] iamwil|17 years ago|reply
You can just cat the game on to the love executable, and package it together, so that people wouldn't need to download love, according to their docs.
[+] Klonoar|17 years ago|reply
_why's made significant inroads in this area since this posting, though. Sure, there's definitely a ways to go, but Shoes is one of the best toolkits I've seen period, regardless of being aimed at children.

On the subject of game consoles and development, the PS2 did have a version of Linux where you could use it to run various things (games, scripts, programs, etc). Granted I never got to use it myself, but I recall reading that the reason Sony didn't push it too hard is that there was little to no interest in it, at least compared to the overall market.

I actually reviewed a couple different programming environments for kids about a month or two ago, over on Linux.com (http://www.linux.com/feature/155203). Bit of a shameless plug, but I figure it's somewhat relevant to the discussion at hand. shrug

[+] ojbyrne|17 years ago|reply
I get his point, but can't get away from the idea that he's describing the web... and php. New distribution system, larger audience, same idea.
[+] neilk|17 years ago|reply
Possibly, but PHP limits you to web-style interactions. You have to be excruciatingly clever to get it to act like a chat server or something. And forget about doing animation or sound or anything fun.
[+] thalur|17 years ago|reply
(as a web programming novice) I think the problem with the web in this context is there are still some significant hurdles to getting set up, e.g. getting a server to host your webpages (unless you only want your friends to be able to see it when your PC is on). If you could get rid of these barriers...

I think if someone could provide a browser-based all-in-one solution with language+IDE+hosting+tutorials, then that would fulfill most of his criteria. You could type a few lines, instantly view the page and then send a link to your friends (who can view it at any time).

[+] scott_s|17 years ago|reply
That seemed to the obvious answer to me. Nintendo, Sony and Microsoft aren't going to open up development on their consoles because they make money off of licensing fees.
[+] bryn|17 years ago|reply
Hmm, _maybe_ Javascript. You really need to be able to jump in and see results - visual results. The visual feedback of Logo was definitely instrumental in getting me into programming.
[+] jwb119|17 years ago|reply
completely agree.. even building a basic html webpage hits a decent amount of his marks (transportable, improves connectivity, etc.)

is it so obvious that it was overlooked?

[+] njharman|17 years ago|reply
The BASIC of today is HTML/CSS/JavaScript.

Then there are things such as http://tryruby.hobix.com/ and processing.

[+] pygy|17 years ago|reply
Both "Try Ruby" and "The little coder predicament" have been written byt the same person, namely why the lucky stiff or _why.

His main programming progress for the last two years has been Hackety Hack, a programming environment for kids, based on Ruby.

The first iteration of HH was built on top of Mozilla, but abandonned because of cross platform issues.

The next version, due this march, runs on Shoes, a GUI toolkit he developed with HH in mind.

http://hacketyhack.net/ http://shoooes.net/

[+] snprbob86|17 years ago|reply
First, you are totally right about HTML/CSS/JavaScript

Second, that's a pretty cool link! I don't know Ruby, so I learned a thing or two. Unfortunately, I had to use some of my existing programming experience to save me when I experimented a bit. For example, I decided I liked 'cheese' better than 'honeydew'. That put me in a state where I needed to guess what the tutorial was monitoring for and had to replace cheese to move forward. Additionally, there was times where I experimented and it advanced a page with no way for me to go back. With some polish, this could be a very promising educational tool!

[+] codemonkey|17 years ago|reply
Yeah, that would be great, but I don't see it happening. In 1982, little geeks like me wanted to spend time playing with their computers, but there was almost nothing you could do with them, so you /had/ to become a hacker to have any fun. And the hardware was more accessible. We wrote code in real mode with no protections, and the peripherals were simpler. I wrote my own banner printer when I learned I could control the pins of my dot matrix printer individually. Now you have to learn postscript or something comparable just print "Hello World," or you have to write a kernel driver to talk to the thing directly.

The bar to get the machine to do interesting things is too high, and the distractions are too many. You can spend weeks with your computer without running out of websites to explore.

P.S. If anyone does figure this out, please be sure not to implant damage that must be undone later. The mental leap from line-numbered BASIC to structured programming was a big one.

[+] burke|17 years ago|reply
I learned to program on my TI-83. Over the past few decades, computers have built more and more walls between typical users and programming, whereas on my calculator, it was right there... on a whim, I could, say, make a program to calculate the area of a trapezoid. At the time, if you asked me to do the same thing on a desktop computer, you'd be getting a blank stare.

Graphing calculators today are essentially the new programmer's playground that all computers were 20ish years ago.

Why seems to be making great progress toward reversing this change with Shoes and Hackety Hack, but I think the ultimate solution right now would be some sort of programming environment built into iPod Touches. (EDIT: Heh, I stopped reading before the end. I guess that was his idea too.)

[+] Spyckie|17 years ago|reply
Yeah, I learned on my TI-89. Ironically, made a DnD character stat generator and a function to calculate the first 6 elements of an infinite series... (calc class was quite boring).

I abused the GOTO statement, though... hey, it wasn't like you were going to care about elegant code design at age 14 on a TI...

[+] jsvaughan|17 years ago|reply
Another vote for http://www.processing.org/. It's superb; if you haven't tried it and you, like me, spent your childhood writing programs on your spectrum, you should check it out.
[+] jballanc|17 years ago|reply
While this is rather old, it's also rather timely: http://hackety.org/2009/02/05/theFundamentalLittleHackersSum...

...oh, and personally, I can relate. If it weren't for the Apple IIe in my middle-school math teacher's class room, I wouldn't be a programmer today.

[+] shiro|17 years ago|reply
Isn't this what Squeak guys are (kind of) aiming at? OLPC comes with Etoys, in which children can easily write and modify graphical apps.

What's interesting is that their environment inherently supports concurrency. If kids learn concurrent/parallel programming from the beginning, maybe they'll make better software suitable for this multicore/cloud age later.

[+] diN0bot|17 years ago|reply
it's also relevant.

mac's come with sqlite3, python, a terminal, a decent developing environment (extra cd). it's probably not a big deal for windows folks to download languages and developing environments, too, to say nothing of ubuntu.

the web is a trove of treasure tutorials. open source and the web are thriving, the community is more inclusive and inviting than ever. more and more i run into artists, non-video game players, females, mechanical or electrical engineers and young folks discovering the joy of programming (arduino, processing, openframeworks, scratch and python are examples from recent interactions i've had).

video game consoles might be less programmer-inviting than they used to be, but they're also catering to a more varied and more expecting audience than they used to.

[+] psyklic|17 years ago|reply
I miss how difficult it is to get into graphics programming nowadays. DirectX and OpenGL have somewhat high learning curves for new programmers (especially kids). Even the "simplified" graphics libraries are usually OOPified and take some learning.

I miss the days of mode 13h!

[+] almost|17 years ago|reply
> I miss the days of mode 13h!

Happy memories :) Discovering that what you see on the screen is just bytes in memory, and you can access them directly.

[+] diN0bot|17 years ago|reply
try scratch or alice for kids programming try processing or openframeworks for graphics
[+] davidw|17 years ago|reply
Tcl and Tk are pretty simple ways of getting started and putting something on the screen.
[+] catch404|17 years ago|reply
I owe alot to the Pre-computer 1000 : http://www.vintagecomputing.com/index.php/archives/324

As a 7 year old I just loved the feeling of making the computer do what I want. The instant feed back of print/ input/ run cycle also played a big part in it.

After playing with C++, Pascal and learning Java I didn't get the same feeling until I started learning Python - Really captured that moment again :)

I've enjoyed learning Clojure too - the LISP syntax is so different to what I've learnt that it brings the same feeling :)

Great article!

[+] Spyckie|17 years ago|reply
I think this is a great idea, and there's a lot of weight behind it. In trying to teach my little cousin how to code one of the biggest blocks I faced was that there was nothing right at his fingertips to play with. I had to spend an hour or so getting him to install stuff, and by that time, he was disinterested.

What got me started was that in 10 minutes, I could have a program running on my TI 89 that did something cool, even if I never looked at it again. We need something like that for this generation that uses this generation's portable technology.

[+] neilk|17 years ago|reply
Ok, who else here has

   HGR: HCOLOR=3:
burned into their corneas?
[+] stuartk|17 years ago|reply
I remember as a kid going into the local computer shops, getting onto a speccy or commodore and typing the immortal lines:

10 print "hello" 20 goto 10

Felt great to watch that mother scrolling!

But the first thing that kids of today will do when they get hold of a new pc, is get on internet to search for pron.

[+] danw|17 years ago|reply
The closest modern equivalent is myspace. Myspace users are encouraged to modify their profiles with custom html/css. There's existing layouts to copy and modify. Any changes are instantly visible. It's easy to share layout code with friends.
[+] evanjacobs|17 years ago|reply
The predicament presented is not new since there has always (in my geek lifetime at least) been a division between "computing" devices and "gaming" devices.

Yes, I too learned programming on my TI99/4A and Aquarius and Laser 128 but then I also played games on my Intellivision without a way of trying my code there.

I always saw hacking on my computer as a "gateway" (no pun intended) to creating more advanced programs in much the same way as playing backyard football was a "gateway" to playing professional football (if I was good enough).

Finally, it seems to me that the ultra-portable laptop revolution will be the driver of getting more "computing" devices into the hands of future generations.

[+] skenney26|17 years ago|reply
Learning to program now is easier than ever before.

Last week my partner was in Spanish class and the teacher told her that the most important languages to know in the future will be English, Spanish, and a programming language. Programming is the new literacy. She decided she wanted to learn to program. We opened up Terminal on her Mac laptop, typed "python", and used Mark Pilgrim's Dive Into Python as a guide. Done.

With a PC you at least have access to JavaScript (and Marijn Haverbeke's Eloquent JavaScript tutorial) which is more than suitable for a first language.