BASIC at 50
dartmouth.edu
dartmouth.edu
Best of all, being an interpreted language meant that you often had the source available to tinker with--"open source" of sorts. I remember tweaking GORILLA.BAS when I was 12, altering colors, inserting extra screens and text and silly stuff like that.
I think there's a whole generation that grew up on BASIC. I wonder what today's generation growing up on?
So much of this! I remember the older kids talking about Pascal (they were using TurboPascal at the time) and to me it was some mystical, highly-advanced form of magic, a sort of "more complex" BASIC. However, I never actually learned Pascal or used it, because I jumped directly from BASIC to C (actually ended up doing both for a while). The reason I even found out about C, was because I asked my computer teacher in junior high how people made games, and she told me that it was a language called C. So that summer I got myself an ANSI C book and started teaching myself C.
It was very difficult at first but I slowly got the hang of it. By junior year of high school we were doing C++, and having done C it was really easy for me to switch to C++.
In my experience this is the common question amongst everybody (myself included) that started programming young. Some adult somewhere (how sad that I don't remember) took me seriously enough and gave me some books so I started writing in C, BASIC, and assembly and I was too stupid to realise that it was supposed to be too hard for a 9 year old.
Today (as in literally this moment in time) I am still writing C for games.
To be fair this approach has many merits with the computers of the time. My main machines were a Commodore 64 (8-bit) and then the Amiga (16 bit models that were very popular by 1988~1991, although the later Amigas are 32-bit). Lots of people followed this progression.
At the time many of us saw programming as a more advanced, "cooler" activity than just playing. It was admired in the nerdy circles that you came up with some clever routine in assembly that did something seemingly impossible for the machine.
I think the form of BASIC that came with the Commodore 128 is ideal for kids to learn. It even came with an asm monitor runnable directly from the BASIC prompt.
If I have kids I think I will teach them this way, it's so effective.
http://www.ticalc.org/archives/files/fileinfo/268/26877.html
I had no trouble understanding pointers when I had a go at learning C++ later (although I'm sure the experience has left a number of other bad coding habits).
The folks over at http://cemetech.net/ are working on a new version of that tutorial you linked, IIRC.
Immediately HTML+Javascript comes to mind, as a language interpreter that every kid's computer comes with.
I would guess that is the top "first language" for kids today, with things like C#, Python, Ruby, PHP and Java somewhere in 2nd place (as popular server side and classoom languages).
Which means, by extension, many of today's JavaScript frameworks are the VisualBASIC of this generation: frameworks that let you use a "child's" language for grown-up work. The reactions to using JavaScript for real applications exactly parallels what people thought about VB when it came out.
Javascript is so basic (pun intended), it's not even considered a real language. Someone who tweaks Wordpress templates wouldn't consider himself a programmer.
Take here to ask the same question.
What hooked me on BASIC was the graphic capabilities. It was relatively easy to create dumb little graphic programs: circles that changed colors and grew, etc.
My kids are growing up on the same old 8-bit machines that I grew up on. After all: those old 8-bit machines still work just fine for the task of learning to write code.
Any reason not to still use old 8-bit machines to learn programming? I can't think of a single one.
About 6 years ago when I was in high school we were using...Pascal! During that time I actually did some work experience with Borland (creators of Turbo Pascal) and they found it hilarious we were still using it.
Though the beginnig was with a blow to the head, I did enjoy the immediacy of BASIC.
(Edit: I had to change the variable to caps)
- read in the text file of the new process, which was a specially programmed QBasic program that included predefined hooks to facilitate preemptive multitasking and that was capable of saving and loading its state (i.e. values of all variables).
- merge this text file with the text files of all other running processes, including the "kernel", and saving the new "system image" to disk.
- call the "save state" of all running processes
- exit from QBasic by running a batch file that would restart QBasic with the new system image, which would initiate by calling the "load state" of all processes.
It kind of worked :-) Such a pity I lost that code...
It's a strange language to celebrate in retrospect in that it lacks the street cred of both academics and hard core engineers. To your point, in a sense it's like remembering your first bike.
Of course the first mechanic of that first bike made his way to the Dartmouth presidency.
Pretty much every 8-bit came with a BASIC[1]. I would imagine a lot of kids today don't program anything since it is much less accessible.
1) had to buy the cartridge for the Atari 8-bits
In most every possible way (except possibly writing files), Javascript simply wipes the floor with Basic.
I think there's a lot of value in letting people approach programming through doing very simple stuff such as automating calculations. Of course a potential downside to that, which was a big problem for Basic, is that this can get in the way of learning about program structure early on and encourages spaghetti code.
But you could get a ZX81 for only $25, which is $56 in today's dollars. But that's about the price of a Raspberry Pi.
I could get a ZX81 and Atari 400 in retail stores, the average non-tech parent has no hope of ordering a Raspberry Pi.
What? The above post just discredited that. Remember, you have to factor in inflation and equivalent purchasing power.
The fact about ordering a Raspberry Pi is more about distribution than price.
If you want to look at ZX81 equivalents, you have extremely cheap Android-powered devices. In my country (3rd world) you can get an awful Android tablet for U$ 50 (your ZX81 equivalent). Not to mention EVERY school-age child in my country owns a computer (because we bought into OLPC).
I agree that it's harder to learn programming on a tablet than on a ZX81 (which cheated by not including a display).
If you count a computer with no displa as an equivalent, you can buy a refurbished tower with no monitor for U$ 50 (and they are sold in stores here).
When people talk about computers getting cheaper, particularly the car comparison that Bill Gates made, they don't factor in either. Low income families in 80s could come up with $100 easier than they can come up with $600 now. Non-techincal parent don't buy their kids refurbished and have no hope of getting a Raspberry Pi in a condition that their kids can learn to program on. OLPC is a government partnership program that has not been generally available in the US except as a 2 for 1.
In those days I was enamored with graphics and the idea of creating games, and it was dead simple to do simple graphics in BASIC.
Although I haven't written any code in BASIC in over 10-12 years, it still holds a special place in my heart since it was the language that I used to realize my passion for programming and computers in general. I most definitely wouldn't be where I am today, if it wasn't for BASIC (and QBASIC).
10 PRINT "I AM THE BEST!!!"
20 GOTO 10
I fell in love.Well, BASIC was --- but the CTSS timesharing system had already been in use at MIT since the summer of 1963: http://www.multicians.org/thvv/7094.html
There are other earlier systems: JOSS, which featured a rather BASIC-like language, was in service by January, 1964: http://en.wikipedia.org/wiki/JOSS
And both JOSS and CTSS had been demoed in earlier form before going into general service --- in fact, the first primitive CTSS demo was in 1961.
But when you think back on how assembly looked and worked at the time, you realize that the line numbers are sort of analogous to addresses in memory. If you were on a 6502, you might JMP to a point in memory. You'd do the same in BASIC, except instead of a point in memory, it was an arbitrary number you used for the line.
So, weirdly, my thoughts on BASIC today is not that it was really BASIC. Not even that it was necessarily a great beginner language, though some people treated it that way. It was an easier shorthand for assembly.
Because in most computers at the time, you didn't have an editor that could edit an entire source file. I remember writing BASIC on a TRS-80 and an Apple IIe. Those just had line editors.
Line numbers let you identify which line in the program you want to edit. Typing in:
20 PRINT "HI"
meant, "replace line 20 with that".You spaced out your numbers (usually multiples of ten) so that you had some available numbers if you need to insert some code between two lines. If that got crowded, typing in "RENUM" would renumber all of your lines and neatly space them out again.
At a child, I remember thinking RENUM was the most magically complex algorithm I could imagine.
I suspect it had something to do with the display technology. Fortran and COBOL were designed with punch cards in mind. Lisp and Algol were designed for research computer scientists; I don't know what they used for I/O or hardware, but I suspect it was significantly more advanced than the line printers that Dartmouth students used.
I think this helped make BASIC a good match as the first micro language a decade later where, as you say, most of those computers couldn't handle functionality beyond a line editor.
I remember putting off RENUM as long as possible, because it forced me to re-learn where all of the useful GOTO/GOSUB targets were located.
I think the sequence of topics in math education is really wrong. Another example: in the USA, "discrete math" is a college class at the same level as calculus (or higher!), even though it mostly builds off elementary algebra.
To this day, my preferred way of understanding maths is by looking at implementations of the algorithms - I find mathematical notation and every maths textbook I've seen to be extremely tedious and overcomplicated compared to code (of course with the caveat that at least some of this is because I've spent far more time learning to understand programming, though I still found that route easier when I was in school)
My progression went: Spectrum BASIC, Z80 assembler, x86 assembler, C, Java .. more.
http://www.6502.org/source/interpreters/sweet16.htm
"While writing Apple BASIC, I ran into the problem of manipulating the 16 bit pointer data and its arithmetic in an 8 bit machine..."
[1] http://www.amazon.com/The-Dream-Machine-Licklider-Revolution...
I happened into a copy of Kemeny's book "Man and the Computer" (http://www.amazon.com/Man-Computer-John-Kemeny/dp/0684130432) sometime around 90-91, and it fascinated me. I've gone back and read it since and, while many of Kemeney's predictions didn't hold up, the tone of the book is definitely inspiring.
http://bitsavers.trailing-edge.com/pdf/dartmouth/BASIC_Oct64...
http://www.bombjack.org/commodore/
And this one: http://www.atarimania.com/list-atari-magazines.html
(though they say Commodore and Atari respectively, both of them have some magazines that are more generic)
I looked up Ray West recently, wondering if he's still alive. Turned out he was until recently, but he'd turned into a mad, racist, tinfoil-hat-wearing crackpot, paranoid about Jewish conspiracies and government hoaxes. Fluoride, fake moon landings, the whole nine yards. So sad. That guy was my hero, and he just went off the rails and, as far as I could ever find, completely disappeared.
ETA: nope, he's still around, and still antisemitic. Ah well.
Learned BASIC in 1973, first computer class at my high school. Pascal, FORTRAN, and COBOL in college. Started working at IBM in 1978. "High level languages are for wimps". Assembly all the way baby!
Ah those were the days.