April 21, 2008
Edsger Dijkstra had this to say about Beginner's All Purpose Symbolic Instruction Code:
It is practically impossible to teach good programming style to students that have had prior exposure to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration.
I'm sure he was exaggerating here for effect; as much as I admire his 1972 "The Humble Programmer" paper, it's hard to square that humility with the idea that choosing the wrong programming language will damage the programmer's mind. Although computer languages continue to evolve, the largest hurdle I see isn't any particular choice of language, but the fact that programmers can write FORTRAN in any language. To quote Pogo, we have met the enemy, and he is us.
Dismissing BASIC does seem rather elitist. Like many programmers of a certain age, I grew up with BASIC.
I mentioned in an earlier post the curious collision of early console gaming and programming that was the Atari 2600 BASIC Programming cartridge. I had to see this for myself, so I bought a copy on eBay.
I also bought a set of the Atari 2600 keypad controllers. The overlays come with the cartridge, and the controllers mate together to make a primitive sort of keyboard. (Also, if you were wondering what kinds of things I do with my ad revenue, buying crap like this is a big part of it, sadly.)
Surprisingly, the manual isn't available anywhere online, so I scanned it in myself. Take a look. It's hilarious. There is a transcribed HTML version of the manual, but it's much less fun to read without the pictures and diagrams.
I booted up a copy of the Basic Programming ROM in the Stella Atari 2600 emulator, then followed along with the manual and wrote a little BASIC program.
You'll notice that all the other screenshots of Atari 2600 Basic Programming on the web are essentially blank. That's probably because I'm the only person crazy enough to actually try programming in this thing. It may look painful, but you have no idea until you've tried to work with this funky "IDE". It's hilariously bad. I could barely stop laughing while punching away at my virtual keypads. But I have to confess, after writing my first "program", I got that same visceral little thrill of bending the machine to my will that I've always gotten.
The package I got from eBay included a few hand-written programming notes that I assume are from the 1980s.
Isn't that what BASIC – even this horribly crippled, elephant man Atari 2600 version of BASIC – is all about? Discovering fundamental programming concepts?
Of course, if you were at all interested in computers, you wouldn't bother programming on a dinky Atari 2600. There were much better options for gaming and programming in the form of home computers. And for the longest time, every home computer you could buy had BASIC burned into the ROM. Whether it was the Apple //, Commodore 64, or the Atari 800, you'd boot up to be greeted by a BASIC prompt. It became the native language of the hobbyist programmer.
Even the IBM PC had BASICA, GW-BASIC and finally QBasic, which was phased out with Windows 2000.
It's true that if you wanted to do anything remotely cutting-edge with those old 8-bit Apple, Commodore and Atari home computers, you had to pretty much learn assembly language. I don't recall any compiled languages on the scene until the IBM PC and DOS era, primarily Turbo Pascal. Compiled languages were esoteric and expensive until the great democratization of Turbo Pascal at its low, low price point of $49.99.*
Even if you lacked the programming skills to become the next David Crane or Will Wright, there were still a lot of interesting games and programs you could still write in good old BASIC. Certainly more than enough to figure out if you enjoyed programming, and if you had any talent. The Creative Computing compilations were like programming bibles to us.
For a long, long time, if you were interested in computers at all, you programmed in BASIC. It was as unavoidable and inevitable as the air you breathed. Every time you booted up, there was that command prompt blinking away at you. Why not type in some BASIC commands and see what happens? And then the sense of wonder, of possibility, of being able to unlock the infinitely malleable universe inside your computer. Thus the careers of millions of programmers were launched.
BASIC didn't mutilate the mind, as Dijkstra claimed. If anything, BASIC opened the minds of millions of young programmers. It was perhaps the earliest test to determine whether you were a programming sheep or a non-programming goat. Not all will be good, of course, but some inevitably will go on to be great.
Whether we're still programming in it or not, the spirit of BASIC lives on in all of us.
* as an aside, you may notice that Anders Hejlsberg was the primary author of Turbo Pascal and later Delphi; he's now a Technical Fellow at Microsoft and the chief designer of the C# language. That's a big reason why so many longtime geeks, such as myself, are so gung-ho about .NET.
Posted by Jeff Atwood
I still use VBScript for all my scripting needs and stick to procedural code. In VB.NET I try to avoid creating new class files and methods for every little thing. I cram as much code into Page_Load as possible. Oh, the coding horror!
Seriously though, I waste too much time hunting through hundreds of class files and thousands of methods which none of you OOP geniuses ever bother to document. In my code you'll find everything in the event handler for the button click. In the code I've inherited I need to trace my way through who knows how many class files and methods to figure out where something is being done. I've seen methods that just call other methods and methods with just a few lines of code that could have been directly used where they were required.
It's like saying learning Arabic, Navaho, or English would turn your mind to mush.
Hmmm... maybe he's right.
FORTRAN was to engineers and scientists (i.e., "real (wo)men") what BASIC was to hobbyists -- their first foot in the door to programming. So don't diss it, hobby boy ;-P The first FORTRAN compiler was named by IEEE in 1998 as one of the ten best algorithms of the 20th century.
Nowadays Matlab (or Octave, Scilab, R, ...) largely fulfills the role that FORTRAN used to play, for prototyping numerical codes. But FORTRAN still is faster than C for many applications, mainly because its compiler doesn't have to reason about pointer aliasing.
Sadly, I'm a BASIC kid too... The linked Atari BASIC manual is priceless.
From the manual:
"Let's do a simple program. Make sure the left difficulty switch is in the b position and turn your console unit off and then on again."
Hey wait, that's just like Visual Studio... :)
My first programming language was Solder ....
Oh, and people actually used to write OSs and other systems code in Pascal, before C compilers were widely available. So people actually did practical low-level stuff in Pascal.
One more thing -- I also learned on BASIC -- C64 and Apple ][e. Fun stuff :-)
Man, that dialectic of Atari BASIC is pretty odd looking. Apparently this is all you need for a game of Pong:
1 Hor 1!Hor 1+Key
2 Hor 2!Hor 2+8
3 Ver 2!Ver 2-3
4 If Hit Then Ver 2!99
5 Goto 1
I think I would have indeed been mentally mutilated beyond hope of regeneration had I tried to learn programming on that! Good thing I started with QBASIC instead, which was good fun even if it did involve a GOSUB every once in awhile. Somehow, alas, I regenerated.
Nice post. My first days of programming were in the mid 80's writing Applesoft BASIC on the old green-screen Apple IIc's. It was a "downhill skiing" game that essentially involved moving characters on the screen around an "I" that was the player.
I started out with HP Instrument BASIC in 1995, a BASIC dialect to control scientific instruments, which my dad brought home for me one day on a floppy. I envied these people with their mysterious QBasic, which didn't seem to exist on my new Windows 95 machine, and I kept wondering where I could get it...
Anyways, being 11, I was mostly interested in writing programs that spat out the word "spaghetti" on infinite loop. My most ambitious project was a text adventure / role playing game of sorts, but I had no idea on how to structure my code to do what I wanted - imagine an RPG-style battle scripted out linearly with fixed choices at every step. Ouch. Fortunately I didn't get too far into the combinatorial explosion, before giving up on the game.
I'm a software engineer today. What did I learn from BASIC? The basic concepts, and that it was fun to write computer programs, and that it was hilarious if those computer programs printed out the word spaghetti.
while true do
print("Spaghetti, spaghetti, spaghetti, spaghetti")
I hate Dijkstra, he cost my 3 points in my Data Structures test just last week. Damn Dijkstra algorithm for shortest path in a graph. Never listen to anything he says.
I owe my entire IT career and computer interest to BASIC. I got my first taste when I was eight or nine back in 1993 on my dad's XT Turbo (before we bought a "family" computer). I knew from that moment I wanted to be a programmer, and I stuck to it. I went from BASIC to Pascal, Java, VB .NET, C# and many scripting languages and went through college (and was subsequently hired by them) in a computer science program. I love programming, scripting and hardware alike, and I owe it all using BASIC.
Software engineer, programmer, computer scientist ... I think in the end your delimiter should be 'what do you want to do'?
If you are looking to be the next Google -- then you'd better start digging into some low level shit.
I'm never going to do that. And I don't care about writing/working on an OS. Maybe it's because I'm not that smart, maybe it's just because that doesn't interest me.
In the end, I think it just depends on whether or not you can 'do what you want with what you've got' -- or whether you decide that you need to explore using different tools to build different types of buildings.
I need a faster button on my keyboard.
Ha, I taught myself the beginnings of programming in BASIC on my ZX Spectrum 48K. I still remember the day I figured out arrays - boy did that make things easier...
As much as I dislike BASIC now, I don't believe it stunted me.
One minor historical note: there was a compiled basic available in the 8 bit era. Digital Research CBASIC was available for Z80 based computers and was included with the Osborne 1. Jerry Pournelle used to promote it in his BYTE magazine column.
BASIC was also my first programming language but on a time-shared DEC machine. In 1970, we used a teletype machine connected with a 300 baud acoustic coupled modem. Storage was on paper tape. I consider the experience enlightening not brain damaging.
I bought a version of C, Deep Blue C if I remember, on floppy for my Atari 800. It was compiled, but it offered only ints and chars.
This post, combined with the "choose your own adventure" posts, leave me with the feeling that you know me a little too well.
Around the age of 12-13, when I first ran qbasic on the command-line of my parents' 386... I wrote "Choose your own adventure" adventures in BASIC. To be honest, it's probably because the only things I knew how to do at the time were print statements and goto statements. The whole "variable" thing didn't happen for me until I started ripping into VB4 later that year.
I remember learning BASIC around 1981-82, the same time I learned to read, with none other than that very book, BASIC Computer Games. I was 3 or 4 years old at the time, and it sparked my interest in computers.
My opinion was that I learned BASIC so early and so easily because it was so simple. When I was 8 or so, I was aware that C existed, but it was still over my head in terms of complexity.
In high school, I transitioned easily from that old BASIC to QBASIC and DOS Batch, then in college I tackled C++, Java, and C#.
Newer languages carry new structures, and you learn the structure at the same time you learn the syntax. The logic is the only thing that stays the same. If you can wrap your brain around newer ways to do old things, then you don't fall into the rut that Dijkstra talked about so long ago.
BASIC was the learning language of our generation. The current generation has newer things like Python to play with. Languages evolve just like the people who create them.
As a 30something programmer, I first learned the basic concepts of programming via my trusty old Commodore VIC-20. I remember begging my parents to buy me the "Zap! Pow! Boom!" book of type-in games. By entering in the code, I learned several basic programming concepts and then made little changes to things here and there to customize the game as I wanted. Along the way, I learned a lot about debugging, too.
That's hilarious, I totally had those Basic programming books you show. I started on an S-100 computer, with a 2mhz Z80A processor, programming in Basic, and here I am, 30 years later, still going on a 3.4ghz quad-core in C++ and C#. So, it didn't quite mangle my mind.
I do remember getting Turbo Pascal and thinking at first, how cool is this! Then, thinking, WTF? Pascal sucks!
Haha, wow, even as a 23 year old programmer... before I was 10 I checked out that yellow Basic Computer Games book from the library faaar too often. Thanks for bringing back some incredibly dorky memories for me.
Yep, I was in 3rd or 4th grade on a TI 49/9A when I made my first "program" (typed it out of the How to Program book that came with the computer) that bounced a ball and played a random beep when it hit the edge of the screen. I was hooked ever since!
For those nostalgic folks out there, I found this image courtesy of Boing Boing that is my current wallpaper. A full fledged Atari setup, probably more suited for the programming too 8^D
Well, when I was a kid, we didn't even have computers. We had to implement our algorithms the hard way: by hand. We didn't have any of your fancy transistors, or vacuum tubes. We didn't even have slide-rules; slide-rules would have been a luxury. All we had were sticks and dirt. And rocks. And we were thankful! We had to scratch our assembler instructions into the dirt with our bare hands, even when it was twenty below zero. And did we complain? No! We were thankful because the blizzard made our hands too numb to feel the pain. If we wanted to write something to a register, why, we had to carve the bits into stones, and if the value changed we had to carve a new stone. And if we wanted to push or pop code we had to carry the stones 20 miles to the Stack. On our backs. Uphill. Both ways. But did we complain? No! Because that was all we had and we were thankful for it. These young whippersnappers like Dijkstra with their "functions" and "compilers" and "linkers" make me want to puke! They've probably never done an honest day's coding in their lives. If you want to really understand the performance differences between Quick Sort and Bubble Sort, it takes hard work and honest sweat, not some fancy-pants PDP-10...
BASIC is a excellent first programming language when you're 12 years old.
However, the second language should be assembler, preferable PowerPC or MC680x0. It makes sure that you - as a programmer - actually knows what a computer is all about. 80% of the programmers I spoke with don't even know what BCD is (Binary Coded Decimal). An introduction to processor design and digital circuits is also helpful. Boolean algebra is a must-know. The next step would be C (because it's an abstraction of asm). From there on learn OOP and pick your language of choice, java, C#, C++. And don't forget to type with 10 fingers, otherwise you look like a g@y.
I started with GW-BASIC on my Tandy 1200, am a C# dev now.
10 PRINT "Long live BASIC!!"
20 GOTO 10
Hunt the Wumpus!
BASIC (and machine language) was all that was available when the Commodore 64 came out. My first science fair project compared access times of cassette and disk drive on the Commodore 64.
Then I moved on to Pascal, C, C++, VB4/5/6, SQL, Perl, VB.NET, C# and whatever will come in the future.
VB.NET is really not bad at all. It's roughly equivalent to C# in capability and there is only some non-OO baggage. Apart from the half-dozen real feature differences, VB.NET is really just a more verbose version of C#, which is certainly a first-class OO system (for people who like strongly typed OO systems).
The main thing I've steered clear of is weakly-typed systems - I really prefer the compiler to do as much work as possible in ensuring bugs are not allowed to go into the program.
Wow. Thanks for this (too short) article. Never knew about 2600 BASIC but your mention of Turbo Pascal brought back memories. What a great compiler and IDE (for the mid-eighties, that is)! To your point though, Apple II+ and TRS-80 BASIC quickly taught me to move on to assembler--but could always be trusted to be there when needed. It was a great launching pad. Thanks BASIC! Those were the days.
(Wish we cared even half as much today about optimization and tuning as we did then. If we did, think what we could do with these billions of bytes of RAM.)
It was the TI-99/4A BTW.... My bad 8^D
BASIC did allow tinkering that compiled languages didn't:
I remember playing "Temple of Apshai" on my Atari 400.
It loaded from a cassette tape. One day I hit the break key by accident and got a READY prompt. For the hell of it I typed LIST and got the whole program listing in BASIC. I started reading it and had no idea what I was doing but was terribly proud when I discovered I could change the names of the weapons and then run around the game with a "gimmer stick" or a "two-handed butt whapper".
I suppose it was inevitable that I would grow up to be a chronic game programmer.
For me, I learned basic on a TRS-80 coco ( http://oldcomputers.net/coco.html )
I learned file operations by loading and saving data to a cassette tape. Later, I moved on to PC's with the 8086 processor. Starting with GWBasic, then later I moved to Turbo Basic (a compiled version of basic from Borland). When Turbo Pascal came out, I got a copy of it. As a matter of fact, I wrote my first contract application in Turbo Basic.
Personally, I think anything that allows you to get up to speed quickly and start exploring machine control is a good entry point to programming.
To be a good programmer, it doesn't matter what languages/methodologies/whatever you know. A good programmer is one who can think quickly and logically, has good problem solving skills, and understands planning. Anything else can be learned as needed.
Aaah, the screenshot of GW-BASIC on Wikipedia takes me back to a misspent youth... :)
Brian, that was actually basic, and it was probably a TRS-80 :)
I remember buying discs that were nothing but basic programs that made line and pixel art on the screen, sometimes with sounds. Examining those was interesting as a neophyte.
As a much earlier generation, I learned programming using Turbo Pascal when I was 15 and I'm very happy with that, I advocate that Pascal should be used in University as an introductory language. I see all too often my colagues from CS course to struggle in their first semestre to compile _anything_ using those awfully complicated IDEs like Dev C++. They don't get #include or int main(arg...) that the IDE puts in there when you start a new project.
My first language was Applesoft-Basic. Shortly after i had to learn and use 6502-Assembler in order to have a nice input-routine, which allows the usage of the arrow-keys and other editing feature for nicer text-input.
The next big jump was the transition to UCSD-Pascal, which was a nice language, but had a very bad IDE - you had to switch (floppy)discs for every compiling.
After a little bit GFA-Basic on the Atari ST, Turbo-C on the Atari ST was the next advancement. It was really great, like turbo-pascal, but C. You could build neat GEM-applications, with mouse-usage, windows and all of this - in times where MS-DOS was dominating, and windows 3.x was in far future.
I smiled at the IBM-PC Users with their crap-machines, very expensive, but less strong than the Ataris of that time - and even the monitor was so much more advanced (SM124).
Actually i'm happy with C#, and i'm very thankful for the latest innovations there, like Generics, Extension Methods, or LINQ.
Cheers to Anders Hejlsberg!
Now we could use great IDEs, with Versioning, Profiling, Debugging, great Database-Layers, and very rich and mighty libs!
But there is much work ahead, and i'm greedy to experience the next advancements!
Wow, lovely post, brought back a lot of memories.
I learnt a major portion of my programming with BASIC on the C64. I used to love those books where you had the source code that you could type out (like the ones you mention in the post) and run and voila, you would have a game or a simple application. What magic that used to be. And there were these listings in computer magazines that you could just type out and watch the magic on the screen. You really get the programmers high when that happens.
There is a lot to be said about learning programming by just typing out stuff that is over your head and then figuring it out over time. Sadly, this seems to have become extinct :(
Edsger Dijkstra comment is one of those things that is often repeated and is totally wrong.
I remember programming in BASIC. The first line was always:
1 GOTO 10000
That's because the interpreter always looked for GOTOs and GOSUBs starting from the beginning of the program, one line at a time. So you put the program's initiation code next-to-last (the comments where always last). Since initiation was done only once, putting all your subroutines near the beginning of the program made sense; it ran faster.
Programming in BASIC made me think about what I was doing and gave me the willingness to experiment. Mr. Dijkstra comment is the total opposite of my own experience and I can help but think he was was more concern about some intellectual abstract (and by that I mean impractical) purity of code rather than getting the job done.
Dijkstra point was that although in most languages it possible to write badly, in BASIC (the early versions most people used) it is hard not to ...
You can write badly structured programs in any language and you can write well structured programs in any language, but some languages encourage well written code and some don't ...
VB.NET is far far removed from the early Basics the same as C# has very little to do with C and Delphi.NET has very little to do with early Pascal
But Microsoft stuck with Basic because that is where they started, how much better would xxx.NET have been had it not been based on Basic ...?
I think Basic was a good start to learn about Statements and Expressions. But when it comes to structure and other concepts one is in the cold in Basic. I wish I had learnt Forth with the Jupiter ACE instead of the Sinclair Basic from the ZX81 ;) But, at that time it was more of an exploring adventure, and not much else todo where I lived 1981 :D
I can't express how fondly I remember growing up with QBasic. I have one of those books, too (the yellow cover one). :) This makes me want to dig out all the old programs I wrote and bask once again in that familiar blue glow.
Great! It reminded me childhood. I have had an Goldstar MSX with Z80 CPU.
I started writing software when I was 11 and now I am a industrial software engineer.
Still using BASIC in both PC (VB 6.0, VB.Net ) and non-PC devices such as robotic applications (Trio-BASIC) and embedded devices.
I have thosands lines of code which runs for assembliy lines automation, quality control test devices (even thermal image processing) and all were done by BASIC.
BASIC may evolve, but I believe it will never die.
Old Guy said:
Too many folks here don't seem to understand the fundamental truth
of programming - the language is irrelevant. "It ain't the
paintbrush, it's the artist".
That's because it's not a fundamental truth. A bad programmer will be bad in any language, but that is less true for average developers and some languages. And the bad ones will be worse in some languages (the gold standard here is APL, IME - you can't write readable code in it at all)
The point seems to be a version of "a poor workman blames his tools", but actually, tool quality *does* matter.
And now that the only difference between C# and VB.NET
Dijkstra wasn't talking about VB.NET - you can't take his remark out of its historical context. Early BASICs *did* force you into bad habits, and it was difficult/impossible for many people to break them.
started with logo, go to batch scripts and only half a year basic in shool in the 80s. Pascal rules ;-)
Those books remind me of the fact that I tried entering in 3 different BASIC programs from books just like those when I was 11 years old or so. After the 3rd one wasn't a video game, I didn't touch a computer again until my second semester of college, where I eventually got a BS and MS in CS. Strange how first impressions are not always correct -- or are they? :) Even funnier that I've only ever done 1 other program in any form of BASIC besides those first 3... but I don't think that first experience had anything to do with it.
My first program was to calculate solution of a system of linear equations using Casio Programmable Calculator. It built a solid basis for understanding my next programming language FORTRAN.
This is an obvious plug, but I've written a book (it's in final editing stages) based on the book that taught me simple game programming in BASIC. My version is in Python (which makes it much easier to teach).
This book gives source code examples for games, much like the Atari books you linked to. I've found those most books on programming for kids either read like mathematics textbooks or don't teach programming so much as how to use "game creation" software.
I'm open to comments.
Great article as I too learned how to program using Basic, I think I had the book on the right on programming Basic games. Without getting hooked on programming early, I doubt I'd be where I am today...which is why I loved working on the Non-Pro team building things like Visual Studio Express and Popfly to enable the *next* Anders to get hooked on programming early.
I'll agree that most of us nearing 40 learned using some form of BASIC, for me it was the Timex Sinclair 1000, but I also must agree with the Dutch guy. While BASIC got me interested in programming it also hampered me by making C and C++ look harder than it is.
This is why I was so disappointed that Microsoft made VB.Net. There's no need for it. C# is the way to go, it's the best of both worlds.
Clocking in at almost-29 here.
Instead of buying me Chuck Yeager's Advanced Flight Simulator for my 7th birthday, as I'd begged for months and months and months, Mom and Dad grabbed me a Tandy BASICA programming book instead. It's been downhill ever since.
BASICA and GW-BASIC an QBasic taught me a TON. Basic structured programming, controlling flow, logic. They also taught me a lot about what I NEEDED but they didn't OFFER -- like encapsulation, events, all that other OO goodness.
If it weren't for BASIC, I wouldn't be where I am now -- senior software engineer of a major managed care provider, CTO of a promising , socially-responsible startup, and all-around kick-ass consultant. Sure, it took 15+ years from my first taste of BASIC to start grokking OO -- and it's a continuous learning process still -- but I firmly believe BASIC was, and maybe still is, a valuable tool.
Had I known about Smalltalk, had I had access to C++ tools, would I have gone another route? Maybe. I certainly would now, if I had my druthers -- I'd love to be immersed in the raw power of C++. But am I unhappy with where BASIC has led me? Not in the least.
+1 on the TI99/4a with Extended Basic Cartridge. Alas the *hours* I spent locked up in my room in the early 80's at the tender age of 13 figuring out how to write a space invaders like game with sprite graphics (I could only ever get the laser to take out an entire column of invaders at a time). The image of the little stick figure generated by CALL CHAR 995A3C3C2424 will be forever and indelibly etched in my brain. And long live the Pirate Adventure cartridge. Give fish to crocodiles. Say Yoho!
TI? Apple? Vic???? I learned BASIC-PLUS in Jr. High HS on a *REAL* machine with 588K of honest-to-god *CORE* memory (magents and wires, kiddies, none of this RAM chip crap), hard drives bigger than my washing machine, up to 48 other users plugging away on the same machine, and sucking down more electricity per day than most 3rd world countries consume in a decade!
Christ, I'm getting old.
No joke. I leared BASIC-PLUS, BASIC-PLUS2, and Pascal on a PDP-11/70 in the mid- to late-1970s. I later became the sysadmin for the machine which ran like a champ until decommissioned in 1988 and replaced by a Prime that was about 1/8 the size, took regular 110 current, and didn't need an AC unit with a dedicated 2" water line to keep the room cool.
Today I carry around a USB drive in my pocket that has more storage than all of the disk drives on the 11/70 put together over the 13+ years it was in service and have fluency in something like a dozen different coding languages. We've come a long way, baby.
Fantastic post, Jeff!!!
just by reviewing some of the code of co-developers I'm quite sure that unfortunately the knowledge about programming paradigms and constructs did not increase since the good old basic days... all they know for sure is how to:
use a flag
use some looping construct
with this simple constructs it's almost impossible to depict current software problems efficiently and in a maintainable way, yet all they do is exactly that: basic coding in basic. (just the file ext are .cs or .java)
ask developers what an IF-statement does, all will know and understand
ask developers what the visitor/factory/command pattern does
or what the diff between Interfaces and Abstract Classes is, or how and when to use virtual methods, and you'll be surprised.
I'd really like to see stackoverflow to increase the common knowledge level in that area! ;)
I HAD THAT BOOK!!!!!!!
My introduction to BASIC was none other than the yellow "BASIC Computer Games" book you show in the post. I probably typed most of them into my trusty Apple ][+. That's hysterical.
This takes me back. I used the fact that I could get BASIC with an Atari 400 to convince my parents that I could make my own games if they bought me one, and they did.
I think that BASIC was a great place to start. At that time (1984/85) our high school had a number of different systems, Apple II and IIe's, a pile of Commodore PETs, some TRS-80's and KayPro Luggables running under CP/M (Anyone remember that?). Though each of these system had their own flavour of BASIC, it was still BASIC and I could move from one system to another and confidently write programs.
I've since moved on to Java, PHP, and Perl but the foundation of my interest in coding came from a simple little program in BASIC.
10 print "Hello World!"
20 goto 10
I liken the effect of BASIC to that of Charles Shaw. Both provide an intriguing initialization to the vast world of programming/wine. While there is much to improve upon in both cases, it is ultimately the accessibility and affordability of the these options which sparks the interest of the budding programmer/vintner.
I essentially grew up on an Atari 800xl. There actually were a number of compiled languages for that old machine. There was a "Small C" implementation that I was actually able to use while learning C as an undergrad (when I didn't feel like heading to the computer lab to use the universality's VAX). The Atari 8-computer actually had a number of languages implemented for it in the 80's: Pascal, Forth, Logo, and a number of machine specific languages.
There was also a really cool language called "Action!" (circa 1982) which was really like an "ultra assembler". It took the idea of macro assembly a large step forward by introducing variables, loops control structures, functions, a primitive function library, etc. It sat somewhere between C and Assembly in terms of syntax and could generate standalone executable programs.
But I did learn "Atari BASIC" as a first language then dabbled in 6502 assembly. I wouldn't say that I was "mentally mutilated" by the experience... Though Java is my current favorite language, so some may disagree. :)
I remember spending many, many hours on my Atari ST with GFA Basic.
While reading this, I couldn't help thinking that BASIC was the original inverse Turing test. A Turing test determines whether a machine understands humans. For a lot of programmers-to-be, BASIC was the first confirmation of an innate ability to understand machines.
Personally, though, my first program was written in COMAL. As a Dane, I find that entirely fitting.
QBASIC...man I remember reading the source for Nibbles and Gorilla. It was beautiful.
I'm surprised no one has mentioned the Micro Adventure books!
These were essentially a beguinner's guide to BASIC, with a fun storyline to boot. I think I had most of them as a kid; I wonder if my parents have thrown them out already. I loved trying out the programs in them. Those were the good old days.
Dijkstra doesn't backup any of his statements. So I see him as just another religious nut who thinks his way is the only way.
A piece from Code Complete comes to mind. We write WITH a programming language, and not IN a programming language. Meaning that we should use languages as tools and not as a distraction.
The article brought back fond memories of my TRS-80, and the things about performance, speed, and virsatility in development that it taught me. I never believed (and still dont) that I know everything I need to be a great programmer/developer. I still study new techniques, new languages, and try to bring everything together to build the best individual product that I can. I'm also not unwilling to revisit old code... and improve on it. I write mostly thin client now, and I find that ASP has many of the same issues with it as early basic had ... performance = 1/(size*speed). Perhaps the guys who write MS Office and Vista should be required to spend a year writing software for the TRS-80 Model I. If it can't be stored on the tape drive and loaded into 4K ram, it can't be released!!
The BASIC Dykstra knew "in the day" bears about as much resemblance to VB-dot-anything as does an ox cart to the automobile. They both have wheels, and both can get you into accidents if you aren't careful.
I learned about "real programming" which at the time meant "structured programming" after learning TRS-80 BASIC, a dialect somewhat better than Dykstra's, though not much.
What was interesting about the structured programming course was that while it Taught structured programming, the FORTRAN dialect (FORTGI under IP/CMS iirc) didn't really support it. This lead to lectures along these lines:
"This is a while loop...."
"And THIS is how you implement the while loop in FORTGI..."
That involved inverting the test condition and an unconditional goto to get back to the initial test.
Several years later I was using QuickBASIC, which supported all the structured programming constructs one might want, while hearing about this new language called "C" ...
August 1985 ... Scientific American; Martin Gardiner's "Mathematical Recreations" carried probably the first popularization of Mandelbrot sets and all that. That's when I learned to do what I did so often later: on my C=64 I wrote a "microscope" in BASIC, using it to call BIOS and hand-crafted assembler routines. A coupla years later I did the same using the original QuickBasic 4.5 on an XT: use BASIC to string together Fortran routines for the math and C routines for mouse and graphics.
It's quite possible to write good code in BASIC ... it just ain't likely!
thanks for this walk down memory lane
I guess kids of this generation ( that includes me ) are lucky because we have Python ! The first time I saw basic, it was in a computers class in school and I hated every bit of it. It looked disgusting. Python was excellent. The indentation, the readability.... paradise. Python has excellent documentation and a community that loves teaching first-timers. I believe I saw a comparison once:
"Python is to Basic as Optimus Prime is to a truck."
Great post Jeff. Like most here, the memories... thanks.
The first time I saw that comment by Dijkstra, some time close to getting my CS degree, I felt a wave of guilt, confusion, almost hopelessness. I didn't know at the time, when I was 9 and I got tired of playing the Star Raiders game that came with the Atari 800 and my dad told me after dropping all that money on a computer I had to write my own games using Atari Basic, I was crippling my mind and coding ability and future. And after expending every keyword, learning how to peek and poke memory, digging even a little into assembler, I didn't know I was dooming myself. And through the nights of GW-Basic, then QBasic, I didn't know I was sentencing myself to...
Hey, wait a sec, I picked up OOP the same way, code C#, C++, Java, PHP, VB.NET, vb circa 5.0 6.0.....
As much as I respect Djikstra and his contributions, Basic is what it is ... A GATEWAY DRUG :)
Major flashbacks here too. I had that Atari cartridge too. Got bored pretty quickly when I realized that no persistent storage=waste of time.
I guess I qualify as one of the ancients too. I wrote basic code on:
The Atari 2600 Cartridge.
Apple II, II+, IIE, etc.
GWBasic/QBasic on a 286, 386, 486.
VB4 through .NET.
I guess that pretty much means my mind is permanently warped.
I also had every one of those books you showed. I used to also like typing programs from magazines too.
you don't necessarily gain much by looking at things dijkstra slagged off. you can find a quote from him dismissing virtually any technology of the data with much venom and vitriol.
I started reading your blog not too long ago, and I enjoy it. You've got a fresh approach that's more personal than most technical blogs and more technical than personal blogs. I like the fact that you give thought to the IT industry and approach them from an intellectually honest perspective.
Usually, I find myself nodding in recognition when you talk about experiences growing up as a technically oriented kid. I wasn't quite on board, though, when I started reading your blog entitled “Everything I needed to know about programming I learned in BASIC”. BASIC was a long time ago for me, and my my memories of it do not exude a rosy glow. I was thinking that maybe Edsger Dijkstra's position wasn't all that outrageous. I didn't count BASIC as the foundation of my career.
My attitude changed when you reprinted the graphic of the covers of the “BASIC Computer Games” books. The effect was somewhat akin to finding an old scrapbook and discovering that I had spent my childhood in China, but that I had forgotten about it. If you had just cited the books, it would have meant nothing to me. But seeing the pictures of the cheesy computer/robots brought a visceral reaction.
I read the post again. This time it came right at me. It reminded me of writing BASIC on the Apple II's at my high school's computer lab. It reminded me of when one of my first girlfriends asked to me to “teach her how to program computers” -- so I wrote her a BASIC program on my Commodore 64 that put her through a battery of questions that seemed super suave to my hormone-addled brain. The relationship didn't last, but the program was the least of it. Although, the experience snuffed out any small hope I had that programming skill would impress girls.
The most startling memory, though, was about a sequence of events that happened when I was in grade school. My school got a Commodore PET – the first computer I ever got to touch. They put the computer in the library, so all the kids saw it – but some administrator had the idea that only the kids in the “gifted” program would be able to use it. This, of course, was an act of breathtaking stupidity by the faculty. Not only did it reinforce the notion that we kids were different, but it rubbed the other kids' noses in the fact that we got a privilege that they did not. Any time I wanted to use the computer, I sat in the middle of the library, surrounded by kids who could not. Put that unpleasantness aside, though. I was happy to use the computer, under whatever terms I needed to.
The Commodore BASIC that it ran felt natural to me. Line numbers, GOTOs, GOSUBs – loved it. I recall some quantity of stilted documentation, but I couldn't tell you whether it was in a spiral binder or something more permanent. It wasn't long until my interest turned to creating games. I had an idea for an outer space game. The details are lost to me, but I remember it being conceived something like the modern version of minesweeper. You had a series of spaces on a grid that you “explored”; sometimes there would be enemies and sometimes there would be treasure. Or something like that. There were no graphics, of course. Just a command line and feedback, based on your choice of quadrants.
I remember working on it when a teacher got interested. He was the adviser to the gifted program, and probably the one who had a brainstorm about restricting the computer's use. We talked a lot about it. Went over the code, the algorithm, etc.
At some point, the teacher gave a demo of the game to one of my classes. I kept expecting him to mention that I wrote and “produced” the game. He never did. He took credit for the whole thing. It was disturbing and confusing to me that an adult, much less a teacher, would do something like that. Even thinking about it now, with a lot of years between then and now, it's a difficult memory. Something like this is impossible to analyze rationally. Maybe in the teacher's mind, giving me the opportunity to use the computer was just as important as what I did with it. I never talked with him to find out what he was thinking. Maybe there was a perfectly good reason that I can't tease out. Maybe I've distorted it in some way.
It's also difficult to put the memory into context. Even though I programmed throughout my youth and loved it; it took me several years in the workforce before I gave serious thought to making a career of software development. Did the intensely negative experience have any contribution to that? Or did it not really matter? Until I read your column, I hadn't even thought of the issue for – I don't know – 10 years, 15 years. Maybe longer. Maybe I would have a similar gut reaction if someone wrote a piece about youth swimming, and it brought back a memory of being DQ'd after winning a race.
Wow. Kind of strange this much heat came from a technical blog post, not strictly on this topic. But those robots, man. Those crazy, cheesy robots on the cover of those books.
Keep up the good work.
That was the order in which I learned my first three imperative languages for dominating the machine.
Anyone that had more that 4K of memory is a pussy, 'nuf said.
No new blog today (April 30th)? Someone must be playing GTA4 on their home theater.
Wow! I had not heard that quote in 10+ years. I think I heard it from my C teacher in college for the first time. I personally want to thank the creator of BASIC. It has netted me a career for 20+ years now. I still work in BASIC. (Ok, VB.NET.) But still a warped and twisted form of BASIC.
I spent years on TRS-80 mod iii and my Timex-Sinclair with a lousy 12 inch BW tv punching in code. Although, BASIC lead me to assembly because there was some stuff I could not do in BASIC.
I always considered BASIC a gateway drug.
Maybe I am the only one person alive that thinks BASIC is not worse than any other language. Think of it: you can write crap in PERL, Java, C#, Lisp, FORTRAN, you name it. Ever heard the expression "write-only code"?
BASIC.. oh, the nostalgia. I had a program called "Learn to Program BASIC" by a company called Interplay, in 4th grade. I've since become a C# developer for web applications. I don't really see how learning BASIC could hold one back.. if nothing else, it gave me the initial passion for development.
Fact is, BASIC as an intro to programming is awesome.
With kids it is about getting them "hooked"... BASIC did that for me starting with an Atari 400 and then an Atari 800. I actually started coding at around 6 years old... when I got to 10, I'd spend hours reproducing the code from magazines.
From there graduating up through the versions of BASIC (GW, Q, etc).
On to VB3 and 4 which I found fascinating, if not difficult for making valuable software. Still very cool for the groundbreaking concepts of "Visual" development and the IDE.
Then VB6, which while often produced spaghetti code, really could make some useful stuff. OOP... no... useful, yes.
Ignored VB.net until asp.net 2.0... .net 1 was awful, but I guess it did have some OOP oportunity.
Finally OOP in VB. (asp.net 2, 3, 3.5)
I respect C#, and can code in it, but why???
Why relearn syntax I already know like the back of my hand just to use braces and save a few words?
In the end, the code will be parsed by the .net runtime anyway, so there is not an appriciable difference in the cusotmer's product or performance.
VB.net is NOT the same as BASIC used to be. From where I sit, VB, C#, is just which syntax you prefer. You can use the same techniques in VB as C#.
BASIC as a beginners language does teach the most fundamental concepts of programming; MOST importantly it opens up the idea that "I" can actually make a computer do what "I" want it to.
That is powerful stuff... and I think more important now days when kids are just used to googling to find what they want.
To me coding is a creative effort, and if BASIC lets people express their creativity, why knock it?
Are there more efficient (even necessary) programming methods, you bet... but let's at least give BASIC the credit it deserves!
I grew up in India long before anyone there heard of IT. I used to go to 'Digital Computers' when I was 12 dragging a water bottle where a man in his 60's used to teach BASIC. Beyond programming, I got to BASIC graphics from there.
I must admit though, that BASIC was my second step to programming. LOGO with the obedient turtle was the first language I got to.
As I graduated from Engineering, my friends were all into VB, VC++ etc. and were quite shocked when I used GWBASIC to interface to a 320x240 LCD display through the printer port. Ah.. good times.
I still have my Basic Computer Games: Microcomputer Edition book (the one with the yellow cover) that is shown above. In fact, it isn't in a box... it sits up on a shelf next to my desk along side a "Best of Creative Computing" book.
Patrick - while it's true that compiled VB.NET code is MOSTLY the same as compiled C# code (there are actually a few counter-intuitive differences), C++ is an entirely different beast.
Also, when you refer to Basic in this context - please say VB.NET. There are several BASIC dialects that have nothing to do with .NET, thereby potentially making the C# comparison invalid.
But I agree, there's no point in bickering about which is better between C# or VB.NET.
While a lot of people were not looking, Basic grew up. Those who judge Basic by what it was years ago are showing their ignorance. What other programming language has not only lasted as long as Basic, but also has the popularity of Basic?
When Basic is compiled, the compiled code is no different than if had been written in C# or C++. Granted, other languages have some capabilities that are lacking in Basic. Each languange has its advantages and disadvantages as well as its place and purpose. Elitist snobbery reveals immaturity, no matter how many degrees one may hold.
Thanks for pointing out those facts, KG. My amateur status as a developer is showing.
Yes, I had forgotten that C++ was designed to drive developers into absolute incurable madness, or so I am told. grinJust a joke I am not picking on C++. It is just my way of acknowledging the hard work and skill it takes to program in C++
BTW, if someone wants to persuade me of the virtues of a particular brand of code, tell me about the great features and capabilities of the code. Bashing some other code is not appealing.
Please note that my comments about C++ was an attempt at well intended humor. The Website mistook my "grin" enclosed in angle brackets as HTML!
The truth is I admire those who have the dedication and ability to use C++. That comment was removed from my last post also.
Qbasic was the first programming language other than HTML that I wrote a actual usable program. Though I could only write programs that made sounds and basic text RPG's, press 1 to do this and 2 do that. I got my compiler off my Windows 98 CD.
BASIC is as it suggests beginners code and there is nothing wrong with that. What I like in BASIC is that it is basic and simple. That's the fun in it. You can create hobby programs in minutes and teach someone to program in no time. And there is no need to compare it to C/C++ type languages (or Pascal type) because that is not the purpose of the language. It is not invented with the purpose of creating Operating Systems like C.
There is no such thing like a Best Computer Language. Every one of them is stronger in one area and weaker in another. I thought C/C++ would be great to program until I realized it behaves so differently from compiler to compiler and from OS to OS. I had a very difficult time debugging it.
My advise to someone who wants to begin in programming is to learn a widely used language like Java, C/C++, PHP, Python and etc. And if you would like to develop web applications then HTML is a must. You should dream in HTML. However there could be no serious programming without some use of C/C++ or Delphi.
Thank you very much for this post. It reads so true.
For me, the journey started with the Atari 2600 and approx. 10 games I bought with my saved money(Adventure being my favorite - that DOT easter egg was the best).
Then thanks to my suppotive parents, who put their faith in me and believed in my dream, purchased an Apple ][+ with floppy drive and green phosphor monitor III for me ($2000 back in 1982, I think). Here I spent most of my youth, not playing only video games (I loved video games), but learning through programming. First in Applesoft, and later (when I could not get my written games to run fast enough in Basic, in Assembler).
Amiga 2000, and later PC's followed, but none with the intensity of the Apple ][+. I had become a WIZ, fluent in computer logic, even thinking in Base16 arithmetic when needed. So what if I had to drop GOTO later on; it was not such a hard habit to drop.
This computer experience helped me through Turbo Pascal, Cobol, Fortran, Assembly, and all other forms of computer courses that I took through my schooling. I breezed though every singe related course thanks to this (high school, college, and university).
Now at 40+ years old, senior Electical Engineer in a company I've worked at since 16+ years with Electrical Utilities, I look back with nostalgia and am so thankful for my Atari 2600, my parents support, the Apple ][+, War Games, and Tron; all key factors that formed the person I am today.
Borrowing the words from Skinner above, I wouldn't trade that early experience for anything. Period.
May our children find as much magic in their youths.
Thank you for listening,
After learning Sinclair BASIC and doing loads of poking, peeking and typing in reams of code that never worked from ZZAP! magazine, I used to write simple games in GWBASIC on the 8086 on long nightshifts at work. Following a brief sortie into AmigaBASIC I went to nightschool to learn C.
Now I can't stand the sight of a programming language, and besides, you can get most software you want written a lot better than I could do it nowadays.
I guess I'm a Shoat.
the key controllers reminds me of a hp?8 calculator ^^ ( which is lisp enabled , something i didnt understood until 10 years after buying it _ )
REAL programmers use: COPY CON PROGRM.EXE
But seriously, I have lobg felt that the biggest disservice that Microsoft did to professional VB programmers was to promote VB as easy. That brought out the folks who didn't know how to anything but plop down controls wire them up (and that badly).
I played around with BASIC in high school on a PDP-11, then didn't do much with computers 'til years later. Started the mainframe program at a trade school with BASIC on Commodore Pets, then moved over to the IBM System/360 for COBOL, Assembler (fun!) and RPG (yes, there is at least one BAD language...). A few years in ops, then more in restaurants before I came back to software with VB 3. Skipped 4, worked extensively in 5 6. Now I'm getting my feet wet with VB.NET and following along in C#. All versions of VB with which I've worked have been fine languages (for their time) IF you had the conceptual framework with which to build a proper structured (not necessarily Structured) program.
How far the discussion has gone! The point was that BASIC isn't the goto hell language as some have suggested. Sure the home computers back in the day had limited capability, and the need for a programming language to make them accessible was dire; thus BASIC was what was best for the job. Any evils for spaghetti code done in the way are way compensated by the availability for young people to actually code on a machine.
Sure some people who weren't serious about it in the first place write spaghetti code today, but that's hardly because BASIC was their first language, it's because they're lazy. The 1980s home computer revolution was the forerunner of todays computer in every home. I did learn the wrong way of programming with Commodore 64 Basic, but I learned not to do the goto hell stuff pretty quick.
Clarification for my previous comment: I quickly learned to use subroutines for doing all the stuff that is done again and again, and the spaghettification (i.e. goto statements) went to the minimum. My programming on the Commodore 64 tended towards object oriented stuff. Using kernel (OS) calls was a must to do any real stuff too.
I gotta end my comment spree with an anecdote:
My first program when I was about 6 years old consisted of print and end statements, in the style 10 print If you want to do this, type run 50 etc. I tried to save the program on tape. My elder brother whose computer I was programming on came to help me to troubleshoot why the program wouldn't load again. He finally asked did I press the record button together with the play button on the Datasette. I was embarrassed. And he said user error. User error is still the culprit in most problems. :)
you can still make basic stuff in Liberty Basic, and do awesome things like cut paste copy you couldn't do before. I use to make all kinds of tiny role-playing games, i don't know why, but i made another one on the link above and am finishing up another one to put up soon as well. those 2 books stuck out in my head instantly, i had totally forgotten about them, i used to program basic on a TI-99 with those books. one of the programs that i still remember was a virtual psychiatrist named Liza i think, she would ask you all kinds of questions and what you answered would move her on to the next question. There were also some huge programs that were fun (hunt the wumpus?). anyways thanks for the memory rehash! =)
I'm not sure what's up with the VB6 bashers. Sure many dreaded Morts learned from it and continue to be coding monkeys because of it, but it was one of the best options during its time, just like BASIC was during the early 80s (well, BASIC was the *only* option then come to think of it).
Thing is, a programmer wallowing in Visual Basic 6 and deciding to step up and do serious learning of things like OOP and functional programming and TDD and the rest of the agile stuff is ema conscious effort by the person/em, not a limitation set by VB6. I came down that path, and I do not have a CS degree, and I can say that today I have a fair understanding of some of the above concepts.
Again, if anything, emit's the people who refuse to learn/em that is the problem, not the tools.
You certainly won't blame an nail gun if your carpenter doesn't want to use hammers anymore, would you?