78 comments

[ 3.6 ms ] story [ 149 ms ] thread
(comment deleted)
This is so close to my heart. I first wrote programs in BASIC on a TRS-80 at the local Tandy store in 1978. I bought my own in 1979, then got frustrated with how slow it was. I hacked the machine, smashed the stack, wrote a Z80 command line interface, and then wrote a compiler for a limited subset of BASIC. (Hand-built recursive descent. I was planning to write a peep-hole optimiser (it desperately needed one) but never got the time).

Then I got my first "freelance" programming "contract" to write some stock prediction code. I still didn't have a clue, but my second project - still in 1979 - was a restaurant layout and waiter allocation program. It used what I now know to be simulated annealing to find good (not optimal) layouts for the restaurant given the sizes of parties that were book.

All in 16K RAM on a 1.77 MHz Z80 processor.

Why not write a simulator for a simple machine that goes into a full-screen window and emulate the simplistic language and graphics of the time? Most kids would blow it off with scorn and go back to their play-stations or whatever, but some would love it.

Which ones would become programmers? Shouldn't we encourage them?

Kids need sandboxes in which to build sand-castles and let their imaginations run wild. Can we build one for them?

have a look at scratch programming language by MIT Media Lab, Which is an active and ongoing effort. This article is written by a complete idiot!
I'm not sure if you noticed, but Scratch was started in 2007, and this was written in 2006.
WOW I USED TO THINK HN WAS ABOUT NEWS. GOOD LORD YOU PPL SRSLY NEED SOME HELP
> On-Topic: Anything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one's intellectual curiosity.

http://ycombinator.com/newsguidelines.html

Article written by a complete idiot, agreed. Just because your computer doesn't air-drop you in a hostile land of command lines and forces you to program or be left watching a blinking cursor slowly burn in your screen doesn't mean "Johnny" is unable to program.

In 2006 Johnny could download Visual Studio Express on his Dell. In 1976 Johnny would be typing in programs from magazines and hoping the power wouldn't glitch out before he could save to tape.

I still remember typing in pages of A4 sheets of code for a football management simulator on my commodore 16, reading every line to try and figure out where I could alter a line or two to give me an edge in the game over my brother :-) good times!
I started on BASIC, too, when I was 9.

I think the sandbox of today would need to run inside the browser to achieve the instant gratification of BASIC back in the day. I wonder if JavaScript could be the new BASIC - I find it hard to judge how hard it would have been to learn for my 9-year-old self. The barrier to entry for JS programming is probably a little too high (you need to know HTML, need to host your code, etc.) but a simple web based JavaScript environment with a REPL and some wrapper functions for a Canvas element and keyboard & mouse input might just do the trick.

A technical problem I can see with that is the event-based model of the browser, which is probably harder to understand than the explicit event loop. You'd need a blocking waitForNextFrame() of some kind. I guess you'd have to precompile and transform the code into continuation-style closures. Or just call their code periodically with setInterval(). Either way, the framework could gather up relevant events between frames to make them available more easily.

Damn, I really want to make this now.

Chrome and Safari have a REPL console - you can type JavaScript and get immediate feedback.

Great idea for a library that builds on what modern browsers can do to provide an environment that is similar to the old micros (I started programming on a Apple II).

Chrome and Safari have a REPL console - you can type JavaScript and get immediate feedback.

As do Firefox (with Firebug) and Opera (Dragonfly). The mental model of raw client side JS, along with actually saving your code isn't exactly "instant gratification" though. This should be a web service that lets you easily save your code, and gets rid of most of the accidental browser complexity. And while we're at it, you should be able to embed the stuff you made elsewhere, hosted or not. (though IE throws a spanner in the works if you're using Canvas and want to embed it to show others)

This is sounding better and better the more I think about it.

You could use the client side database support in Chrome/Safari to save local copies of code and allow stuff to be loaded back into the environment of the current page.
You should check out http://tryruby.org, http://tryhaskell.org, and http://tryerlang.org.

If you'd like to see the source, http://github.com/Sophrinix/TryRuby

Those run server side though, right? And I don't see any obvious way of displaying graphics, which is probably the closest you'll get to "tactile" feedback when programming.
It's true, it's all server side.

TryRuby's history (if I remember right) is that it comes straight from Hackety, so I don't think graphics displaying was really a consideration...

I'm going to set up a PC for my five year old son, and have it boot into the shell only, no GUI. I know he'll love having it do addition and subtraction for him, but I bet he might want to start asking it questions, like "how many legs does a spider have?"

Is there a CLI program out there which does text-only Q&A via some web service?

>Is there a CLI program out there which does text-only Q&A via some web service?

You could probably whip something up in Python, httplib2 and BeautifulSoup in a couple of hours. If I can't sleep tonight, I might play around with this.

Sure, my question isn't about how to do it technically though, instead I want to know if there is a Q&A website out there which will return either, clear legible answers or null.
Best word processor I had in high school was typed in line-by-line from Compute magazine (better than the ones I would've had to spend $$$ on).

That said, why didn't he install a C-64 emulator or an Apple II emulator - no need to buy the box. Also, Logo, another good starter language has implementations, including 3D extensions. Processing + JavaScript is another decent alternative, or Canvas if that's your cup-of-(tea|joe).

It's a nice rememberence of a language many of us started with, but it's okay to let it go and move on to other things.

The world is a circle.

I figured, maybe I'll port some basic program for linux, so I did a search of basic in debian and found:

http://packages.debian.org/lenny/basic256

Click on the homepage link and:

http://www.basic256.org/

Perfect! I'm about to write to the author of the post and then I notice:

Check out "Why Johnny Can't Code," the article that inspired BASIC-256.

LOL

Someone should update the title to point out that the article is from 2006, and the link above is the answer.

(The actual link on debian is http://kidbasic.sourceforge.net/en/index.html but that no longer works, so I adjusted it.)

Unfortunately it's a GUI application. I have a very strong feeling that if you can't force your kids out of the windowed OS environment, the temptation to just go fritter away their time on some Flash game will be too strong. Who's young children haven't already been introduced to online gaming before BASIC or Python or Bash?
Like many people here, I learned to program in a windowed OS environment. I learned to write windowed applications because I wanted to write real programs. I never had an interest in doing anything with Flash or the like.

I think all it takes is the right personality and the right inclination. The idea that you have to subvert modern technology to teach kids how to program is ludicrous; the kids who actually want to learn this stuff are going to learn it.

I agree, but it wouldn't be a bad thing to make it more accessible to them. I started with mIRC scripts myself, and that was because it was just so easy to get to it.
As a 19 year old kid thats trying to learn web programming right now (After becoming reasonably proficient in java first), I can tell you first hand that there is a pretty big barrier to entry. It's frankly just hard to know what all the moving parts that you are supposed to include as padding actually do.

And it goes without saying that the "black boxes" or function calls that make OO programming or functional programming so efficient to do in groups are hell on someone learning to code.

In order to get people involved, its much better to make it easier instead of telling people to try harder.

The best way to learn web programming is to start with the fundamentals. I would recommend to pick a technology stack, like RoR or whatever, and start reading the basic tutorials, but as soon as you get to a part which references HTML DOM, HTTP, CSS, or Javascript, diverge into those subjects, learning all you can about them, until you are either satisfied or bewildered, then come back to the original tutorial. The key is to not let all the time-saving effort that has gone into the frameworks prevent you from learning the fundamentals, otherwise they'll always seem like black boxes.
I'm the original author of Basic-256, if you have any suggestions, please let me know.

Most people seem to be pleased with it, but I'm starting to wonder if it's the right approach; maybe it's the C64 and not BASIC that's the key. I recently downloaded a C64 emulator and the "Programmer's Reference Guide" that I had as a kid; you almost have to try NOT to understand how a computer works in order to not get something out of a C64 and that guide.

Right away they delve into changing bytes in memory to draw on the screen, and I remembered drawing sprites on graph paper and figuring out what the binary representation would be. I was in second and third grade at the time, figuring this out on my own.

There is something about the C64. It's at the perfect spot of advanced and simple that makes learning easy.

I don't think it's the C64 - I started on a Laser-128 (an apple clone). I didn't start with graphics though, I started with a guess the number game (computer picks, and you guess and it tells you higher or lower).

I still remember the day I learned about strings in variables - that simplified my program quite a bit from a mass of hard coded strings combined with gosub.

If I have just one suggestion it's to increase your visibility. About a year ago I actually searched quite a bit for program exactly like yours. And didn't find it. I eventually found an online BASIC emulator in a browser.

I have 2 suggestions:

1) How hard would it to write a JavaScript/HTML port of it? I don't see why anyone in the modern day and age should need to download and install a program to play with BASIC. It should be possible to interpret BASIC directly in JavaScript, all within the browser. I don't believe any server round trips should even be necessary.

2) Have you let David Brin know about your effort? He seems to be doing talks on the subject still as recently as '09, so he might be able to at least mention it to people.

Oops, nevermind, silly suggestion. It's already been done, you just have to Google "basic interpreter javascript" to find it.

http://www.calormen.com/Applesoft/ - Starts right at the interpeter

http://www.ngbasic.com/ - Has more of the classic BASIC feel, opening a window that looks like ye olde BASIC interpreter, but requires two clicks before you can find it.

http://www.quitebasic.com/ - Also starts at the interpreter, but with a more complicated example program.

He'd been on that quixotic quest for three years? For some reason, I have a hard time believing it.

When the first sentence is not credible, what does that say about the rest?

I've actually got GW-BASIC running on DOSBOX on my home computer. Every now and again I get nostalgic and fire up one of the ASCII graphics video games or text adventures I wrote when I was a teenager.
I'm glad you mentioned it. I'm not certain if Atari Logo at school, or GW-BASIC at home was my first encounter with programming.

My dad was a EE, and he set me up with GW-BASIC after I checked a book out from the library that had each chapter ending with a "Try it in BASIC!" section. I figured that there would be no problem getting GW-BASIC up and running under dosbox.

My first thought was "PYTHON!"

But then, we have an ongoing transition to 3.0, and it turns out the turtle module from 2.6 is "an extended reimplementation" that is "(nearly) 100% compatible" with the prior version included in 2.5. This is probably not a problem for textbooks being written today, but it does make me wonder how durable an actual source code listing in any 'modern' language would be. How long would the average code listing remain usable?

It'll remain usable as long as previous distributions of python are available for download.

PyGame is quite a fun resource for learning programming, there's something there about pressing play and seeing your code changes translated into direct visual feedback which is particularly appealing.

The previous distribution of python will only remain usable as long as it installs and runs on whatever machine you're using.

PyGame might be fun, but I don't really see it as a true beginner's environment. It's a serious library, so it takes a lot of initialization, requires flip() calls, and runs in event-oriented style. It's also not included in the standard library.

In fact, for graphics, anything that doesn't create its own window and give you calls like drawPoly/drawEllipse is probably not simple enough to approach AmigaBASIC or QBASIC.

My path to programming, as a product of the internet generation:

As a child, I loved the idea of computer programming. I got books at the library that told you how, but they always needed equipment I didn't have. I actually wrote fake programs in Ami Pro because of sample code I found in books! My parents were cutting-edge with computer purchases, but were otherwise nontechnical. They didn't know that toy programming languages existed, and probably didn't care. They just wanted me outside!

Time passed, and in 8th grade I needed to sign up for high school classes. I saw "Computer programming" in the class listing and I registered immediately. I didn't want to enter the class knowing nothing, so I researched C++ (the language taught by the class) and came across DJGPP. I spent a lot of nights that summer careening through internet tutorials and wrote a mountain of crap, but it was fun!

The first day of school was very disappointing - I got the syllabus, and saw that I'd already learned everything on the sheet. I was equally disappointed 2 years later when I signed up for the AB C++ exam and realized I knew nothing on the sheet. The next year was the worst yet - I knew everything on the AB Java exam, but I had to spend the year relearning it all in Java! Yuck!

JavaScript and a web browser. The parallel is obvious to me, I'm not sure why it's not to him.
I started out programming using Sinclair BASIC on my ZX Spectrum +2A purely because I wondered what the menu was for, other than loading games off a tape. It wasn't really "programming" though, so much as typing in the Breakout clone listed in the manual. Once in school we learned programming using MacBASIC on a Macintosh 128K, doing basic trigonometry formulas and answer/response programs.

Now that I've experienced everything from PL/SQL to PHP, I would agree to a certain extent that beginning your programming experience with the language supplied with your machine has its advantages, but I would question the long term benefits - there's no harm in learning how to set up a new programming environment in order to be taught the rudiments behind how a computer works, and arguably having that base level knowledge is more advantageous.

This article, poetic as it is, is very wrong, imo.

I got my start in programming working with qbasic as a 12 year old, then graduating to some VB programming. I loved being able to go to any house, quickly type up a program I knew by heart, then mess around with new ideas I had. So I'm pretty nostalgic towards basic as well.

Having said that, today's situation is better. Anyone who wants to can get started on any computer with some simple HTML. In fact, people can come very close to replicating the look of their favorite sites, without needing anything but their computer and access to a few tutorials. Not to mention the fact that the other languages (Python, Ruby) are much better. Better for working, but also better for learning. I don't understand what his problem with Python as a beginner language is: it lets you do actual stuff you want to do much more easily, which is especially important when learning.

> Anyone who wants to can get started on any computer with some simple HTML.

"Lots of people wrote in to say that HTML and JavaScript are the new BASIC. NO!!! You can’t be serious!!! So people have to write two languages now, which are intertwined in an almost inexplicable and unfathomable way? This doesn’t do it.

Hello world should be one line." - _why, "The Hackety Manifesto" http://wiki.github.com/steveklabnik/hacketyhack/the-hackety-...

I'm inclined to agree with him. (Surprise!) Don't get me wrong, I love HTML/CSS, but I think it's far too much to get started with.

Thanks for the link.

I disagree with that though. Especially the sentence "Hello World should be one line". In html, it is. You create a new text file, put the line "Hello World" in it, then you can open it up in your browser and voila. You've got something everyone recognizes: a website.

Of course the more you code, the harder it gets, and eventually you have to add CSS, then JS, and then all hell breaks loose. But you can coast pretty far on basic HTML, with either no CSS, or inline CSS. And I'd argue that that's the direction we should be sending people just getting started in programming.

> I disagree with that though. Especially the sentence "Hello World should be one line". In html, it is. You create a new text file, put the line "Hello World" in it, then you can open it up in your browser and voila.

It depends. It's one line in the sense that 'it works.' It's not one line in the sense that "it works but enables quirks mode and it won't necessarily work right equally in all browsers unless you do all this stuff ..." and that's why I dislike HTML/CSS for learning. Yeah, in the simplest cases, it's kind of easy, but it can get really complex really quickly.

That's not even counting the fact that markup is not really programming, and if you'd like to add some, you've now got TWO languages to learn, HTML + Javascript. And then you might want to do something server side, so now you've got three.

The complexity explodes really quickly.

Yeah, but as a beginner, you don't need to see the complexity.

Mind you, I'm not comparing HTML to other languages for learning, I'm comparing it to QBasic as a "first try at programming" language. The basics had their own problems.

You do end up seeing the complexity. What can you do without Javascript and/or a server side language? Not too much, really.
I just don't buy the premise. Kids get interested in programming by being able to create things. Back in the day creating things meant getting any kind of text/ascii on the screen was an achievement.

Now, kids want to learn how to do things that look as nice or do as much as the rest of the computer (or web) features they are used to.

For those that get interested some will go back to the roots and become hackers, some will continue to work in higher level languages. I don't see the problem.

It's a different world that the one we grew up in. My son showed no interest in understanding the CLI or programming, but he loved scratch: http://scratch.mit.edu/
I am sorry but the author of this article hasnt even performed basic research. He is completely bullshitting about Media Lab. Media Lab has created Scratch programming language which is actively being used by many kids in large number of schools around world.

Sad to see such as stupid article.

http://scratch.mit.edu/

The article is from 2006; Scratch was released in 2007.

It's hard to fault him because his time machine wasn't working.

Also WTF about BASIC with GOTO? You should teach your kid nothing but Python, which helps him understand the functional and OO aspects of programming.
In looking for a first programming language for a grade school kid, I'm not particularly sure that needing to learn how to write functional or object-oriented code is particularly high on the list of priorities.
Other articles in this series:

  Why Johnny can't repair a carburetor.
  Why Johnny can't stack his vinyl records properly.
  Why Johnny can't ride a horse.
  Why Johnny can't prepare a basic white sauce.
  Why Johnny can't find the outhouse.
</JustKidding>

I've been around long enough to understand OP's argument and sympathize with him. I've also been around long enough to appreciate that there has never been a better time to learn programming.

Why? Two words: "View Source".

I've been through many modes of programming (all the way back to punch cards and once a day compiling) and I am nostalgic for none of it. I can't imagine going back.

Today, anyone can learn HTML, CSS, and Javascript. Resources are everywhere. Results are instant. And best of all, examples are everywhere. How many times have you been to a webpage and wondered, "How'd they do that?" "View Source" is often your window into so many other worlds. It's hard to believe that there was a time when you couldn't do this.

Like OP, I get nostalgic, too. I miss a lot of things about the good old days, like Willie Stargell hitting 500 foot home runs without steroids, 35 cent Stroh's drafts, and hot Big Macs. But not old technology, even BASIC.

OP, turn your kid on to the "basics" of web programming and let him find his way with his generation's technology, not yours. You'll think he's missing something because his experience won't be your experience. You'll be partially right, but don't forget about all the stuff he'll be able to do that we couldn't.

I would suggest starting with language such as MIT Media Labs Scratch. Which is a great resource, it is also an active project with web based ide. http://scratch.mit.edu/ He is complete ass when he talks bullshit about MIT Media Lab without knowing about their current efforts. The OP is an complete idiot lost in nostalgia, is he nicholas carr??
I hit "view source" on google. Here is some of the javascript:

    ar _IG_MD = _IG_MD_Generate({ct:0,t:[{i:0,n:"Home"},{i:1,n:"arxiv.org"}],dt:[0,1],m:[{i:2,mt:25,u:"http://www.quotationspage.com/data/qotd.rss",ti:"Quotes of the Day",sn:"A3",t:0,dd:["ed","del","ming","shg","rg","ag"]},{i:139,mt:25,u:"http://lwn.net/headlines/newrss",ti:"LWN.net",sn:"Ne",t:0,dd:["ed","del","ming","shg","rg","ag"]},{i:137,mt:25,u:"http://blog.jgc.org/feeds/posts/default",ti:"",sn:"",t:0,dd:["ed", [...Lots more snipped...]
This will help Johnny learn to code how?
Straw man. 1 counterexample != refutation

"View Source" doesn't help on every web page.

But it does expose more examples of code than ever before. That's all.

I don't think you're using the word strawman correctly. I believe it means that you create an easily refutable argument and pretend your opponent used it when he really didn't. You then knock the argument down and proclaim victory.

Also, the example given above is an excellent example of the fact that Javascript has become the assembly of the web and that there are a large number of tools that are going to spit out code like that.

I'm not exactly sure you got the point of the article here. One of the nice things about BASIC to which the author alludes is that it's a quick and dirty language. The implication is that, by being a quick and dirty language, it is well-suited for these educational ventures. I tend to agree. (I say this as someone who learned how to program using MIT Scheme!)

This isn't an issue of generations at all; it's an issue of accessibility. Doing the same educational tasks in a Web development environment that you would also do on a household microcomputer like the Commodore 64 is comparatively much more difficult. On the Web, you're learning HTML, Javascript, and potentially something like PHP. That's two or three different languages just to get out the door! On the other hand, on the C=64, you're learning only Microsoft BASIC. The barrier to entry is lower.

Face it. He's a kid. If he's enough of a nerd, he's invariably going to want to write cute little games to show off to his friends (I know I did when I was the tender age of nine, which was in 1996), so if you really want to make it a generational gap issue, give him a TI graphing calculator and tell him to have a ball. He'll thank you for it later.

"cute little games to show off to his friends"

Just you, javascript, and a canvas tag. No CSS, PHP, or further HTML required.

The biggest impetus to my programming excitement as a kid was how hard it was to share what I'd done with my friends. A website is the easiest way to share a program I've ever known.

Javascript is a very simple and forgiving language. Basic might be easier to learn, but I've never seen any evidence for this. I know I found it incredibly tricky, in hindsight largely due to limitations and design errors in the language.

I wish I could have learned programming with Javascript.

Imagine all those kids learning JS/jQuery first, and having an implicit understanding of callbacks/evented programming from the beginning. <sigh>. Some of those kids have a massive advantage which I admit I find a bit intimidating at times. They certainly don't seem to be suffering from a lack of BASIC.

I would also like to point out: http://www.u.arizona.edu/~rubinson/copyright_violations/Go_T...

Basic only really forms a decent introduction to assembly.

The important difference is that with A CBM64 or BBC micro, you turned it on and typed.

10 print "I am great"

20 goto 10

Now after it has booted and you have logged on and started the visual blah IDE you start programming with

from microsoft.java.net.jrhvbieurbv import sun.microsoft.jobs security model com.apartment.nice_view

#include <stdio>

public virtual void extern _main():

And tell little jonnie that he isn't supposed to understand any of those words - they are grown up computer stuff, he should just type in whats in the book.

"The "scripting" languages that serve as entry-level tools for today's aspiring programmers -- like Perl and Python -- don't make this experience accessible to students in the same way. BASIC was close enough to the algorithm that you could actually follow the reasoning of the machine as it made choices and followed logical pathways."

Wow, and here I thought I was using conditions in P&P all these years--I'll have to run a "grep if *p[ly]" when I get back to the office. Though I do agree that there is a certain satisfaction in coding at a lower level, if the level is assembler.

I don't know what the story is in the Mac world, but as far as I can tell most of the Windows boxes out there will let you code and run VBScript if you have a passion for that sort of thing.

Has this guy simply never heard of Python and Ruby?
Those were very different in 2006.
How?
The community and support was not nearly as developed as it is now, for one. Both languages have seen an explosion in usage. And community support is a big part of getting help when you're starting out.

Also, he explicitly mentions why he doesn't like Python in the article.

I learned to program in BASIC on an Apple II, and although it was my entry language, I don't see it as necessary now. The school I work at uses MIT Scratch with the 5th graders, and they love it. I'm teaching Java in a high school computer science elective because that's what is used on the AP Exam, and they're likely to start with in college. I think Python, Ruby, or Lua would be better choices, but Java is good enough.

However, I'm also exposing them to logic circuits, machine language, and assembly so that they have a better understanding of how the computer actually works. I want them to understand the basics of what the compiler and VM are doing so that Java is not completely abstract to them. As experienced developers know, these abstractions have leaks so it's helpful to know what's going on underneath. I see BASIC as a dead-end abstraction. I would rather use assembly to teach a low-level understanding, and then use modern languages at the higher level.

C is as close to machine as any other language can get. Why not new Johnny learn programming in C?