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
Too funny. The 2600 basic programming cartridge to Atari 800 basic constituted my entry into the world of programming as well. At first, I had no tape drive and no disk drive, so you'd type in a program (usually from a magazine), play with it for a while and then press the reset button and start all over again. The best would be when a program listing had a whole bunch of assembly code that you would 'poke' into some address. You'd be typing in a huge string of gibberish and if there was one typo, nothing would happen when you ran program. Or if you were really lucky, you'd get some garbage displayed on the screen.
I wouldn't trade that early experience for anything. :)
Dijkstra's quote does have a ring of truth to it.
My first programming language was VB5, followed by VB6, then only briefly Java until I went into college to study CS.
Looking over my old VB6 projects, and old emails with my first professor (I never delete emails), made me realize just how bad of a programmer I was. I still made cool stuff (it was amazing when I discovered the Microsoft Speech SDK - I totally had that thrill you described, jeff), but I didn't understand OO at all. For a long time, when programming I would actually think only in VB.
But alas, I was saved. I graduated with a degree in computer science, having learned tons of languages and programming paradigms. But, if it wasn't for a university CS education, I know I'd still be stuck in the dark ages with that old VB mindset, even if I continued my hobbiest programming.
(Insert obligatory good-natured complaint about how "Fortran" is being used synonymously with "bad code", when these days it's evolved into a perfectly good structured language that's got some significant advantages over C and C++ -- which, by comparison, have remained largely stagnant since they were invented.)
commadore 64... my uncle had one.
I grew up with Basic, too - back in the good old days of 80286 cpus :-) I started with GW-Basic as a 8-year old and learned to code my first game. Later I moved on to QBasic, Turbo Pascal, Delphi, ... Without Basic perhaps I would never have started programming. Dijkstra is a nice guy - but not always right :D
I couldn't agree more, especially considering I'm one of those "programmers of a certain age".
I remember vividly one of the first programs I have analyzed - a phone book that was included in the (5 1/4", of course) floppy that came with my first computer, an Apple II.
Since I was learning my way into BASIC, I couldn't understand how the software could keep the entries between boots, since there was no data file!
Then I looked the code, and it had some lines like these, in the beginning:
10 REM ......................................
20 REM ......................................
After insterting an entry, next time it would look like this (I'm oversimplifying here):
10 REM Altimari, Rubens 257-9637 ....
20 REM ......................................
In other words, I've learned, right in my first weeks as a developer, still in high school, the concepts of memory as a single repository for data and code, as well as several dirty tricks related to direct memory access, saving things on disk programmaticaly, and so on.
I wonder how Dijkstra would feel about *that*... :-]
Yes, a lot of us began learning to program with BASIC, but that doesn't make it a good language. I learned to ride a bike with training wheels, but you won't see any of those on my bike now.
I'm in high school and looking to start programming. I have the Programming for dummies book (it was a gift) and it includes tutorials in Liberty Basic and a disc for it. Is basic in general a good language to start with, with so many other languages available now? I don't want to get stuck with the problems understanding Object Oriented programming that other people have described...
Great post. And just curious, did anyone get started with programming through Texas Instrument Graphing Calculators (TI-82, TI-85, etc.) like I did? I can honestly give credit to TI-BASIC for sparking my interest in programming.
Great post, brings back a lot of fond memories!
I first learned BASIC on a machine (confusingly) called the BBC Basic, which was the only computer in my primary school. Consisting mostly of "guess the number" type games, and the occasional screen full of brightly coloured text I also felt the buzz of this "brave new world" and was hooked. Next came the ZX Spectrum, and the weird and wonderful experience of cassette tapes, but then came the Amiga 600... I soon left BASIC behind and became an ARexx lover, before going on to learn Pascal, which taught me the fundamentals of OOP - useful concepts that I still carry with me today.
I can see where Dijkstra is coming from, but without BASIC there wouldn't be nearly as many hobbyist coders as there are. These days I work in a school, and see kids in the IT room getting their first taste of coding with VB scripting in Excel - not something I'd want to be doing myself, but everyone has to start somewhere. Those of them that are determined enough to take it further _will_, just like our generation did - and these are the developers of tomorrow. As much as I dislike BASIC, I believe it's a crucial first stage for a huge number of coders, and for that reason alone shouldn't be entirely dismissed.
I grew up with GW-BASIC in the mid-80s. I loved programming, and I actually made some reasonably complex software. I’m convinced the accounting software I created was what landed me a scholarship to a prestigious private school here in Sydney. Other software: a graphics program, many, many games (culminating in a loderunner type game with *a level designer*), a text editor and many others. I even built an interpreted language *IN BASIC* (these days the cool kids would call it a DSL, and yes, I was crazy and young).
Ah BASIC, like you said it was the first language I programed in (good ole TI-83) Thats why I am here now studying Computer Science Network Security. I fell in love with programing because of BASIC.
Aren't you supposed to be working?
Yep, it is a bit of nostalgia there. I was programming in BASIC on my Apple IIe when I was about 6 years old. Haven't stopped programming since.
I think the thing that Dijkstra was getting at had more to do more with the notion of knowing how to program in BASIC does not really demonstrate one's mental ability and maturity of thought processes to program more sophisticated solutions demanded of harder problems only realistically implemented in more sophisticated languages.
ie: Just because you are in command of the BASIC language and perhaps can even use it so solve some potentially useful problems, does not necessary demonstrate you have the inherent skills needed to solve more complex problems. Of course, somewhat contrary to Dijkstra's exact word choice, just because you only know BASIC doesn't necessarily mean that you don't have that ability once truely enlightened by a superior language.
Joel, I think, addressed this bent on the topic well relative to his comments about Java in the following article:
I never got around to code in BASIC, i see it as a reserve for the oldies (programmers who started in the 90's).I guess you didn't need to know OOP then, concluding from your title.
"If anything, BASIC opened the minds of millions of young programmers. "
Yes, that's all good and well. But young kids grow up, move past a language for Beginners and move on to something else.
The whole IDE "method" of software development introduced by Microsoft (with Visual Basic) got too deeply in some people's heads, allowed too many bakers and butchers to "program", and were never able to dig their way out. Plonking controls on a form is fine - but hooking up datasets and controls on a form, text boxes, dropdown lists, etc. to datasets on the form is a horrendous way of doing things. Not to mention polluting all the code in the forms with database connections, SQL statements, etc. - you end up with a massive ball of spaghetti. This way of doing things, at least for anything but the five minute Microsoft demo showing off Visual Basic, some article or anything even remotely more substantial, it's just not kosher. Sure, great to get you started, and you can improve as a developer with BASIC, but a lot of people don't move on and stay with corrosive habits learned early on. And I don't necessarily mean move on away from BASIC, I mean to move on with learning new and better skills. Basically, BASIC has a lot to answer for - especially Visual Basic 6.
I grew up on Spectrum Basic and was very surprised to find out recently that it had support for functions. Amazing.
I owned the Atari 2600 BASIC cartridge when I was about eight and taught myself how to "program" on it. The only thing I ever really used it for was writing programs that would play little songs I'd write in BASIC. I still hum one of my mutant compositions to this day. :)
The good that came out of it is that my parents saw how enthusiastic I was about it and bought me an Atari 800, which I used to teach myself Atari BASIC and write a bunch of silly applications and games on that.
The first *program* I actually wrote was in Qbasic. Boredom set in after the first few minutes of "typing class" and I needed something better to do with my time. Halfway through the semester, most of the class joined me in my multiplayer q-basic rendition of the arcade game Spy Hunter. I have fond memories of the ridiculous routine I wrote for the collisions, shooting out random polygons and such. Makes me miss the days when it was a hobby instead of writing business objects the like.
OMFG I'm having such crazy flash backs. I had one of those. No way.
Basic for programmers starting in the 90's!
Try the 70's. By the mid 80's there were Pascal flavors for the PC, and C compilers.
got to say even for a young programmer like me BASIC was still being used as a teaching tool at A-Level (UK exam type taken 16-18). This was QBASIC through windows then later visual basic. However most of us taking the computing class already had experience in other languages so it seemed a bit backwards but you can demonstrate some algorithms easily like different sort methods so it was good to get everyone on the same language.
Perhaps a better teaching tool now would be a web language.
I became interested in programming in around sophomore year in highschool when I learned I could write a program to take in values and do my repetitive math computations for me (compound continuous and compound interest formulas)
...not sure how strict of basic this is but sorry I can't resist to post this little program I wrote a little while ago on the TI-83+ which I think is loosly BASIC
If ((X/3-(int(X/3))=0 and (X/5-(int(X/5))=0)
...(other code here)
you know how this ends
As far as compilers on 8-bit computers go, there were actually a few BASIC compilers for the C-64. I know because I used at least two of them. They were very slow at actually compiling the code, but they did actually create reasonably fast versions of the original BASIC program. One of them (I think it was the official Commodore product) produced what they called "p-code", which is similar to Java or .Net byte code today, and that one only produced a mild speed-up. The other one put out something close to true assembly code, and thus made much faster executables. Still, like most people who programmed for the C-64, I ended up moving to hand-coded assembly language, since it was the only way to get real speed out of the machine.
I think it shows a lack of understanding here -- people's minds aren't *only* shaped by the programming language and its flaws and finesses. If people aren't agile thinkers, it won't matter what language they start with -- they won't be agile programmers.
That's a really interesting viewpoint, I actually hadn't thought much about that aspect of things.
For me, BASIC actually turned me off from programming. If BASIC was all that had been available to me, I probably would have been bored and maybe never gotten into development. I had a bit of fun programming in TI-BASIC (the calculator language), but that's because you don't expect a calculator to be very powerful, and it was a very domain-specific language with an "IDE" that made it very easy to write.
I think you're right that BASIC doesn't fundamentally mutilate the mind. I would never laud it with praises as a programming language, but perhaps as a cultural phenomenon, it was valuable.
I started off by writing scripts within [m]-I-R-C. Very procedural kinda stuff. Everything mashed into one alias. It was ugly - it was horrible. Then I moved on to Visual Basic and wrote up some very simple 'business apps' as assignments in school. I learnt a little about functions and encapsulating parts of code. It was still very procedural and event driven stuff.
I continued with my [m]IRC scripting and wrote a few more simple scripts that were much tidier than the previous ones but still nothing special by todays standards.
Then I went onto uni and learnt some java and c/c++ coding. This taught me the basics of OOP and then eventually the advanced OOP. I returned once again to write an [m]IRC script that interacted with a website and discovered I could write it in such a way that slightly mimicked the OOP principles I had learned.
The point if you're wondering is - you can start with whatever language you like. Once you learn the principles of programming (or of a particular methodology), it's easy to transpose those ideas into whatever future project or language you choose to use. It's also easy to put aside previous things you learn if you discover they are no longer relevant, or there's a better way of doing something.
heh [m]I-R-C is filtered!
It's also easy to put aside previous things you learn if you discover they are no longer relevant, or there's a better way of doing something.
- If you're worth anything at all.
I have a different opinion: Everything I know about what to forbid in programming, I learned in BASIC.
Goto statements: since I learned basic 20 years ago, I have not found a single case where a goto is acceptable. This INCLUDES web services that return 302 redirects by the way.
Global variables: Since learning to avoid Global variables in Basic, I have learned a refined rule that all variables should remain in the innermost scope possible.
If statements: good programmers can avoid if statements. Your function should not need to ask whether the red button was clicked or the blue button was clicked. The code should be event based so that you have a different function running depending on whether the red or blue button was clicked.
Basic is a good way to contrast the way programmers did things back before they knew any better.
Austin: Any programming language can teach you the basics of programming, but you probably want to learn something with a larger community and more practical application.
I would recommend Ruby or Python, if you want to write useful little personal applications for your computer; PHP or Ruby (on Rails) if you want to write small to medium websites; C# or Java if you want to write more formal applications or websites and take immediate steps toward paying work; or Scheme or Lisp if you want to get a serious theoretical introduction to computing theory.
Ruby or Python would be the most fun, and would stay useful even if you don't stick with programming. Each language has a legendary guide: the one for a href="http://www.poignantguide.net"Ruby/a is infamously surreal and cutesy, which makes me love it, but your mileage may vary if you are a heartless curmudgeon who hates all beauty and fun.
Will there be a BASIC section on stackoverflow.com?
Ah yes, the Atari 2600 BASIC programming cart. One of the few that I didn't actually have (and don't own now).
I actually started programming on a Sharp MZ-700 Series (http://en.wikipedia.org/wiki/Sharp_MZ) that used a tape drive (audio tapes, btw). I got so good at BASIC that by the time I got to the BASIC programming semester for Maths II in High School, I was banned from talking because I knew more than the teacher.
Ah, yes, fun days.
I think I agree with some of the previous comments. Any programming language can teach you the basics and get your mind receptive to programming, but most people can't get their brain out of that first way of thinking. You need to be agile enough to change your way of think as appropriate to the task/language you're dealing with.
As an introduction to programming, I remember eagerly typing in BASIC programs into the Vic 20. I hated searching for the typo or 'paper debugging' the article source. I was always frustrated that there was no possible way I could write a decent program like the ones you could load from disk. The only interesting program I can recall was getting a sprite on the C64 to bounce around the screen, or doing a choose your own adventure style text game. I realized it was more fun to play spy hunter or impossible mission than wallow in that mess.
Upon reflection, I think a better 'first language' is LOGO with Turtle graphics. You can understand enough to make a simple shape in 10 minutes, and soon you're naturally wondering how you can replicate other geometric shapes. Fundamentals of math, geometry, variable assignment, looping, recursion, functions, etc. All easy to demonstrate and get tangible, visible feedback. Brilliant.
My 2 cents.
Since when is VB actually BASIC?
Anyway, I wrote my first piece of code when i was like 6 in basic on a ti99-4a. It was my first experience of creating something... just a few simple lines that solved a problem I needed to solve. Because of that I'm a lazy CS major who enjoys to code. I'll agree, I was "mentally mutilated beyond hope of regeneration". Before I was content to do nothing but play games and sleep, and now I want to do something productive as a hobby. Is this regeneration such a good thing, no hope that I'll regenerate cause I don't even wish to.
I don't go round coding in basic though. I need to take a year off or something and actually write a sizable chunk of code. Early years of CS as a major seem to just make you busy with general stuff and you never seem to actually do that much code-wise.
apple][, GWBasic, TS/1000 (aka ZK81) Sinclair QL were my early exposures.
I grant you that my first few reads through a pascal book left me with no freaking clue how to do anythingin pascal - the concepts were mighty foreign and I learned how to use forth long before I did pascal.
Not because Pascal was hard, but because the person who wrote the book failed to explain the fundamental differences between basic development and pascal - mainly the lack of an interpreter editor. Once you understand why all the line numbers are missing and how you get code in and run it, the rest of the differences go away.
I had the strangest interpreted C for my old 8086 system as well - if you wrote something like strcpy("abc","def"); and ran it, the source would magically change to strcpy("abc,"abc");
Obviously, with no experience in pointers - I was baffled. Time in 6502 and 8086 assembler cleared that up problem.
Basic doesn't really warp the mind, in fact, I still think its a great starting point for programmers. The problem is there are so few good bridges for the conceptual differences once you move on to other languages like C and Pascal etc. I believe that chasm has actually grown since plain basic all but died of neglect years ago.
Sad really. A good basic interpreter can really get you started in a hurry in ways that C and Pascal just can't.
For some reason I have the following, my first line of code EVER, stuck in my head. I think I was about 8 or 9 and was walking by a Radio Shack and they had a machine near the front entrance. I watched some guy type his name and it scrolled up and down the screen then he added a semicolon and it repeated until they hit the break button. This is all from memory from almost 30 years ago so it may be a little off but this is what I remember the line to be.
which resulted in something like this:
it was the coolest thing I'd ever seen, anyone else do this or remember what machine and language?
A lot of the VB bashers are horribly unfamiliar with the language and seem to think somehow that it is still the same language as MS Basic (down to coding with line numbers).
Java might optically look a lot like C++, but effectively it is a lot closer to VB.Net or even VB6 (yeah yeah, inheritance and constructors are missing. But still...), even down to the way it is implemented (one class per module file, p-code compiler, references but no pointers, no way to kill objects yourself, etc).
My father always told me: there is no bad language, there are only bad programmers. Altough my sister begs to differ after learning RPG.
Great post. I'll recommend it to somebody I know will be interested in it too!
Looks like most of the comments are in the "+1" topic, so I'll not deviate:
I started my programming addiction with a Radio Shack TRS-80. Pretty dandy thing if you ask me!!
The programming manual that I could grab was an edition to teach Basic on teletype terminals... That's right: Typewriters with a wider toilet roll as a Screen :)
That was all I needed to get my mind around the basics of programming: Decisions, Loops and Assignments.
Next stop was an Amstrad CPC6128 and that gave me more addiction.
After the Amstrad I entered Uni and stumble upon a Turbo Pascal Filedisk( or something ) Book that introduced me to Turbo Pascal 5.5 and the wonder world of OOP.
So what I have to say is simply that, yes, Basic was the foundation of my programming career but I'm glad I had the opportunity to get into OOP in that early stage cuz if I would remain on a functional only language, I could get that hindering to my brain that the other guy was complaining about!!
What I perceive of this issue is that someone is complaining that someone that rode a horse chariot would be mentally challenged to learn how to drive a car, forgetting that, at the time the guy was born, the only thing available was a chariot. It's also true with us programmers: At the time we discovered the computers we only had Basic. But like most of you that prospered on the programming career it was a mean to a goal, so you have not been hindered by Basic!!
Just my 2 pence, with a bit of inflation ;)
To Harry G: All paradigms have limits.
How's that for universal truth?
Oh my gosh I spent innumerable hours nerding about in BASIC on the Color Computer 3 and Tandy 1000 computers. I typed in or made my own games, screen savers, you name it. Then I got Turbo Pascal 4.0 or something. Finally I found a copy of Visual Studio 98 and learned C and C++ right before I started college. The last two definitely took a leap of faith out of the comfort of languages that didn't require (or have!) things like pointers. Nowadays I can't get enough of C# 3.0 and its embracing of functional programming idioms with lambdas and extension methods. Although those lambdas can really tie you into a knot if you aren't careful -- nest them at your own peril!
I still have both of the BASIC computer games books, as well as my old VIC-20. I moved on to PASCAL and FORTRAN soon after those days, and still have a working Amiga 500 that I played with as well.
Since the advent of the web I moved ahead to Perl, and now work primarily with PHP. I'm of the opinion that programming is like speaking. It doesn't matter which language you use, as long as you're able to get the information through in the way in which you intended. Programming skills and the thought processes involved can be taught using any language.
My uncle was one of the people that actually created BASIC back in the 1960s. Carried a teletype machine around in his car and connected from people's offices and homes using phone couplers (better wiki that, kids) to demonstrate how you could write programs from remote locations.
I actually took BASIC in high school, then Pascal for several years. But I didn't touch a computer for 10 years after that until I realized I had to do something with my life and taught myself Java. Now I do .NET at work, Rails and Cocoa at home.
What I remember most about learning BASIC in 1982 or so was the teacher teaching us how to bend it into something resembling functional programming. Then Pascal came along and it was like a breath of fresh air. But if I were to teach kids programming today I would skip all of those and start with Smalltalk. It's not terribly "useful" in today's business world but it's a wonderful way to learn programming.
I started programming from this book:
It was on a then ancient TRS-80 in my Grandmother's basement. I rode my bike for about 3km to get to her house just to program! From that, I typed in that lemonade stand program. Inspired by that program, created my own stock market emulator. (Minus the stochastic differential equations, because I was 9 years old.) Fun! That stock market program, stored on a cassette tape, was most likely taped over with C+C Music Factory recorded from MTV.
I even went on to create an almost finished version of Tetris on a Commodore 64 using BASIC.
Then Pascal, C++, COBOL, C, PHP, Java, etc...
I started doing assembler on a 4k Univac. Yeah, four thousand bytes of octal. Then there was Fortran, Cobol, RPG, PL/I, 370 assembler, debugging native hex from unknown sources, and lots of other weird stuff. I don't think any of it ruined me. What it taught me is most languages have some basic similarities: moving and comparing data, branching, and loops. I wrote lots of Basic on my first home machine, and I still dabble in it today.
The exact language you write isn't half as important as the care you use writing it. The most important part, in my opinion, is leaving something maintainable for those who have to work on it later.
So please, people, no matter where you are in your career, write stuff that's straightforward and not obfuscated. Let your successors know what it does and what it was supposed to do. You're professionals and you should be proud of your work.
Great post. Brings back fond memories of my first experiences with programming (had a TRS-80). Judging by the comments, it seems that many of us came from the school of GOTO. I for one am not embarrassed by my BASIC heritage because despite its flaws, it was accessible in a way that Lisp, Fortran, etc. were not.
Even though I code in C++, C#, Java, etc, when I want to throw something up quickly for algorithm testing, I use Blitz Basic (Blitz + or Blitz3d, depending on the application), since you can get something up and running so quickly and not deal with projects, solutions, header files, resource files etc., of course I also am a long-time BASIC guy from the days of the vic-20, apple ][ and trash-80.
Ah, a nice trip down memory lane.
Thanks for the nostalgia, it gave me some great memories of hacking away in Basic on my Amstrad.
"Since when is VB actually BASIC?"
Ever since they put "Basic" in the name I guess. It's a lot more powerful than the BASICs of yesteryear, but it's a flavour of BASIC all the same. If it was anything else, it would be called "Visual [anything else]".
I learned programming by doing twelve exercises in BASIC, then repeating the same exercises in Pascal. Oh the pain.
Then I was totally into Turbo Pascal and became a undergraduate graduate research assistant for the university I attended.
I have seen VB code which is total spaghetti at (unnamed original silicon valley instrumentation company) on their laser-interferometer software, which I had to straighten out for them so it would run the same way twice in a row. Simply horrible.
I have seen C/C++ code which is equally spaghetti with numerous unneeded threads which had to be thrown out because it was essentially incapable of being expanded or debugged.
The problem with Basic is that it allows people to get in far above their heads, as these electrical engineers did. But VB 6.0 could be used to develop relatively well-structured and sophisticated programs in a fairly rapid fashion - as I hopefully did on my last large project where I used VB 6.0 to develop the user interface, equipment object model and OPC interface to real-time components and hardware for a large LCD flat panel manufacturing equipment. The application would have taken twice as long to develop in any other language available at the time IMO.
I hated VB until I used it, and now think it is certainly a useful tool for certain parts of certain applications when done the proper way - as with all languages.
My first foray into programming was on a TI-83 Plus, building text games in BASIC. I also wrote an annuity calculating app and amortization table generator. I used them on my Algebra II final (with permission) and completed the final a full 30 minutes ahead of everyone else.
P.S. - Only one small quote in this post, you're on the upup.
Of course everybody started with basic.
but the statemetne "everything i needed to know about programming" + basic gives a bad perspective on outsourcing with regard to the needed qualifications for it!!!
YOu started with basic - as all of us did
You learned the basic things - as all of us did
Guess what ... LANCE ARMSTRANG started with a simple bike..
and learned EVERYTHING he needed to know about biking..
I grew up learning Basic, in the UK here we had this programming magazine called Input. Last week I was testing my new scanner and thought I would try it with an old issue of this magazine.
That is a page for a C64 V20 program. Just thought I would share the basic.
Good post Jeff my man!
Except that I did learn to compile Pascal on my Apple //c, but not before dabbing with both "The Woz"'s Integer Basic and a bit later Microsofts (yes really) AppleSoft basic (of wich I believe your Apple //e screenshot to be a fine example).
Nowadays its pretty much all c# but I sure didnt suffer any from starting with several dialects of the good old beginners all purpose symbolic instruction code.
There's a difference between playing around with BASIC, and writing full-scale applications with it. One is good for you, the other teaches you bad, bad things that are hard to unlearn later on.
I started programming with QBasic. I know it's not as old, as "cool," or as respectable as the older BASICs, but thanks to QBasic I ended up with the developer career I have now.
I started making games with QBasic in grade school and shared them with friends. Eventually I had other things to do besides make games, but then later in life a situation presented itself where I had to learn ASP. I didn't know ASP. At that point in time, had you asked, I would have said, "I don't know any programming."
As I started to read about ASP, I realized the stuff I learned during my QBasic days would be a huge help. I dug out my old QBasic notes and programs and with that confidence and understanding I learned the ASP, which then lead to PHP, which eventually ended up landing me a full-time job right out of college.
Now thinking about it, QBasic probably played a more important role in my life that I'd probably admit. Go figure.
Heh .. Commodore 64 programming... This always sticks in my head...
10 For X = 1 to 255
20 Poke 53280,X
30 Poke 53281,X
40 Goto 10
I am quite certain that there were compilers before the PC area, since I am quite certain I still have PASCAL and C compilers for the C64. I never used them much though, they were quite a pain compared to the standard BASIC and even when compare to direct assembly - especially if you had one of those extension cartridges, assembler programming could be quite comfortable.
My programming experience has a similar beginning to Mattkins'. It started in Algebra I class with a TI-81. I automated the steps required for a lot of our problems with BASIC. When I graduated to my TI-85, I actually wrote an ASCII based RPG, with battles, magic, and everything. Heck, my first PC-based programming experience was VB 6.0. A friend bought me the Sams Teach Yourself in 24 Hours book that came with a debug-only version of VB Studio; I actually used it to write nice front-end to manage a Microsoft Access database for a final project in high school. Most of it was already automated by the ActiveX controls, but so what? I was learning!
Now I use C++ and, looking back, coding in VB seems sort of like poking myself in the eye with sharp things, but I wouldn't take it back for the world. It's just like Jeff said...it made me who I am today.
Great post Jeff! Me too started with 'Basic' on an X386 at school. Initially with reluctance but later got hooked to it and realized what my 'vocation' was. Am thankful to Basic for giving the initial playground for launching me into this career path.. It was then I realized that I could 'learn something and apply it'..
I learned BASIC for the Sinclair ZX Spectrum when I was six, and I also knew quite a bit of BBC BASIC (school had them), but the only remotely useful BASIC I encountered was Mallard BASIC, a commercial flavour of it that shipped with Amstrad PCWs.
It was reasonably close to BBC BASIC with the distinction that it included a set of tools for interacting with the file system, disk drives, peripheral interfaces and the like out-of-the-box, called JETSAM, which made it considerably more, uh, pythonic:-) I mean, with Mallard you could hop from "hello world" to actually pulling real data off the 3" drive, interacting with the operating system, and sending stuff to printers, serial ports and the like.
I wrote an application to wrap the CP/M command line in something less 'orrible for managing files, but my dad wouldn't use it. (He had more sense, and used the file manager functions in PROTEXT.)
I started with BASIC, sure, who in the same demographic cannot say the same.
But my first real code was in Turbo Pascal, and later Turbo C/Assembler.
What I cannot understand is people, who to this day, still *like* BASIC.
I like it in the sense that I am nostalgic for those simple days, but I much prefer, well, any other programming language really.
I grew up learning Basic and Visual Basic, but my first real taste of
real programming was with 'Learn to Program Basic' from InterPlay nearly
11 years ago which I soon moved to QBasic and finally Visual Basic.
After programming for over 10 years now I agree that if you plan on
writing a large program that you should do it in a curly-bracket language
like C#, C or C++ simple because, from my personal experience, they are
a hell of a lot easier to read and maintenance but never the less BASIC
is a great introductory language, particularly to children.
You can still get LtPB on Amazon and eBay, I'd suggest everyone look at it
as its a lot of fun, sort of like edutainment:
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 learnt BASIC on the Dick Smith TZ300 (a rebadged Radio Shack number I imagine) and then with Visual Basic on the PC and AMOS on the Amiga.
AMOS did allow you to do some pretty cutting edge stuff including providing an interface to the blitter chip and an animation language so again BASIC was a pathway for many of us growing up in the 80's.
Basic is a good way to contrast the way programmers did things back before they knew any better.
The point is that programmers already knew better, but BASIC was available for almost all micros and early PC's (Thanks to a small company called Microsoft who wrote most of them)
Microsoft evolved Basic into a fully featured programming language that is now VB.NET but it considered by many including Dijkstra that they started with the wrong language ... C# is based on C and Pascal/Delphi ... Perhaps if they had started with C or Pascal we would have more "good" programmers today ..?
My first programming was QBasic. Loved it! Who remembers Gorillas? Then I went to Fourth Forth, which is a bit like programming in Haiku if you follow common good style.
I resisted HLL for a long time after that. I spent about three years writing Win32 API programs in x86 assembler, including some DirectX! There's something amazing about writing a Hello World COM executable in (about) 26 bytes.
One day I rediscovered my old Forth code and wrote an interpreter in... wait for it... Perl!
Hahaha I crack me up.
Nothing like perpetuating outdated stereotypes.
VB wasn't the Basic Dijkstra was talking about. I consider Hejlsberg one of the most destructive individuals in computing.
Most programmers eschewed VB either out of hatred for Microsoft or to hide their own poor coding among the curly braces - or both. But VB's been dead for many years now. Can't you people come up with another whipping boy to excuse your failures?
My first programming was in commodore pet basic, but the first computer the family owned was a Timex Sinclair. No RAM to speak of, makes you choose your commands wisely. Then we moved on to a Vic-20 with basic and Forth! So exciting, then the C-64 which eventually someone had a Basic Compiler for so you can just get your basic programs to run faster -- not quite a fast as assembly, but well worth the ease of programming in basic, even though much of it was PEEK this and POKE that...
For long time I've thought of VB as a culprit why so many mediocres and idiots decided to do programming for a living. Before VB came to scene, C and C++ were too hard for them to learn so they stayed away from programming career. 95% of VB-VBSCript people I knew produced horrible, unmaintainable coding horror.
It took me some time to realize it wasn't their fault but it was failure of management to weed out such types by enforcing good policies like quality control, code reviews, conventions etc.
Feel free to visit my site and read some stories from the programming trenches, VB rants etc.
Bojan Markovic, Croatia
I totally agree with Hejlsberg. "Original" Basic IS retarded!
Like many others I have started programming in Basic on ZX Spectrum. I did pretty cool things for that time but I always wanted more and had that feeling that I am being limited by the language.
Only years later when I got introduced into Borland C++ for DOS, then I got that feeing of unlimited possibilities, and truly in command of hardware. So C++ effectively started my carrier, not Basic. And I thank all gods frequently for that fact.
Great post Jeff.
Learned BASIC in 1976. First language; 110-baud hard copy terminal in high school Math Lab, dialed into the mainframe at the Board of Education.
I remember programming WUMPUS, BASKET, etc. from Ahl's books... and being blown away by the sheer scope of a friend's project to type in all of STARTREK.
I was also blown away in 1980 by introduction to the Structured Program Theorem. Here was everything, in 3 basic building blocks! This was elegance, and programming would thereafter be elevated from merely fun to thrilling.
Years later I came to understand the broader truth about programming languages: while they all *permit* programming elegance, brevity and clarity, not all directly *support( and *encourage* it. BASIC doesn't prevent programming elegance, but it certainly never showed anyone the way.
I started out with Fortran, Applesoft BASIC, 6502 assembler, Pascal, Ada, C, C++, 60000 and 808XX assemblers, Lisp, C#...
A now what do I program in professionally, Visual Basic.
A the wheel keeps turning...
Oh by the way, if all you have is a hammer, ... I think you get where I'm coming from.
"the only remotely useful BASIC I encountered was Mallard BASIC, a commercial flavour of it that shipped with Amstrad PCWs."
It was a nice version.
I remember it supported index-sequential storage (rare in BASIC) and I coded some album/track management software that would allow me to optimise my use of blank tapes.
I grew up with Benton Harbor Basic and Microsoft's MBASIC on a Heathkit H89. But the real eye-opener for me was when Heathkit made the source code available (in printed and bound form). They had everything in there, the OS (HDOS), assembler, basic interpreter, system tools. It was a stack almost one foot thick of 8080 assembly language written by J. Gordon Letwin (of OS/2 fame) and I pored over ever single line trying to figure out how it all worked. No wonder my eyes are so bad!
As a younger programmer I wish that BASIC or some form of it was written into the operating system. My first encounter with computer programming was with BASIC, but it was really bizarre. My younger sister got one of those kid laptops that has games and math puzzles and what not on it. Since I liked computers so much I would get it when she wasn't playing with it and mess around with it. While digging through the menus I found a BASIC program. I asked my dad what it was and he told me it was a computer language. I got out the book for the laptop and it had lessons on how to write basic code. I got about as far as the book could push me and then I had to go on my own. Trying to find a BASIC interpreter on the net is getting harder and harder and I wish that there was an easy way for kids to learn about computer programming, because without that little laptop I probably wouldn't be programming today.
If anything, I think learning BASIC made me appreciate good programming practices more than anything. I consider myself a very elegant programmer and I owe a lot of that to my experiences with BASIC programming languages.
I started programming using STOS BASIC for the Atari ST (can't remember the model number) and I can remember how frustrated I got having to cope without the ability to write my own functions, create my own data types, work with polymorphism or inheritance etc. I think you can't truly appreciate the features of more "advanced" languages until you've tried programming without those features.
Jeff, you say BASIC doesn't mutilate the mind. But then you mention being gung-ho about .NET. Those whose minds are mutilated often don't recognize it. ;-)
I started with BASIC on my Atari 1200XL and a bit on the Apple II, learned a little 6502 assembly, then some Pascal on a Mac, then Modula-2 in college, and finally C, after which I never looked back to the pre-C stuff. Perl, PHP (talk about mutilating the mind!), and Ruby followed, along with bits of C++, Java, and Lisp/Scheme interspersed.
Dijkstra was perfectly correct. There is no such thing as a good version of BASIC; they are all evil. And when he made that remark, it was even more true. It practically forced you into bad habits.
My first job was working with BASIC programmers. Dijkstra may well have had those particular ones in mind :-)
I learned BASIC on a CYBER 6400 mainframe my freshman year of college. I became so enamored with my ability to bend the machine to my will that I changed my major to CS my sophmore year. Unfortunately for me, BASIC wasn't part of the curriculum; my first formal programming class was in PASCAL. That might not have been so bad, but my PASCAL prof was one of those that insisted on 'linear programming'--no goto statements. There was a way to do that in the language, just not in his class. Which might not have been so bad if I hadn't grown so dependent on them as a self-taught BASIC prgrammer (for lack of a better term). Still might not have been so bad, except that he delighted in giving us exercises in which the obvious solution was to break the linearity of the code, but expect us to write much more complex code in order maintain efficiency. I just didn't have that kind of agility of thought. I grew to really hate PASCAL. I sometimes wonder where I would be now if I learned PASCAL first, but I wouldn't have taken the PASCAL class if I hadn't gotten interested in programming through BASIC...
All of my peers starting programming in BASIC, a good 30 years ago now. Those who kept at it quickly migrated to FORTH which was one of the best languages available for the early 80s PCs. I had an Atari 400, and I was able to write some pretty plausible, reasonably fast games without having to write assembler.
Of course, I also 6502 assembler. It's amazing what you could do with 64k.
My high school had a VAX 11/780, so we also got to see Pascal and C.
Seems like the elitist bashing of BASIC is still alive and well, judging by the comments above. Dijkstra had a number of stupid things to day, and this quote is one of them. There are quite a few others, however.
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".
And now that the only difference between C# and VB.NET is the syntax, the whole attitude makes even less sense. If you need to have *something* to look down your nose at just to feel better about yourself, maybe you're just too insecure to be doing anything in the real world.
I'm in high school and looking to start programming. I have the
Programming for dummies book (it was a gift) and it includes
tutorials in Liberty Basic and a disc for it. Is basic in general a
good language to start with, with so many other languages available
now? I don't want to get stuck with the problems understanding
Object Oriented programming that other people have described...
I've always had a lot of respect for Dijkstra, but you have to be really careful with his quotes. Most of the more famous ones are both a bit over the top and rather out of date.
In the case of BASIC, judging from my own experience, the main problems you will have moving to other languages occur through two issues. The first is that the language has crappy support for control structures, which means you have to use totally unstructured branches (GOTOs) to get anything done. I suspect newer versions of the language fixed this.
The other big issue is that once you learn the language well, you may get the idea in your head that you know all about programming. That's what happened to me as a youngster. Of course, I really didn't know a damn thing. This can happen to you with any language though. You have no idea how many C and C++ progammers out there with this same attitude.
So I'd say if you have a good learning environment with BASIC, please go ahead and learn. That beats the crap out of never learning at all. But take great care to keep yourself humble. When you move to a new environment, you have to be open to its new way of doing things. More importantly, you have to be open to learning to think about problems in completely different ways.
Learning is the one constant in this industry. Anything that impeeds it is the enemy.
I was doing some thought on BASIC yesterday, that I've been an "open source software" user since I started with computers in 1979. In school I would fiddle with the BASIC source of cassette programs to try stuff out and share my changes. Later I got source code in printed format (magazine type-ins) to type in, learn and enjoy.
As for the quip abut brain damage from BASIC some may find the easy style of BASIC enough for them, others move past if for the sake speed and better coding for larger projects. I think in this day you could say the same for just any programming language that isn't the one YOU prefer.
Once again the religious argument emerges. Isn't this really just VB versus C++ or VB vs. Java all over again? Windows vs. Unix vs. Mac.
I've programmed in probably 20 different programming languages, and I can confidently say that anyone can write really crappy code in any language.
What no love for the Tandy CoCo 3?
Oh thank god "Old Guy" I thought nobody was going to say it. It has been posted before, by Jeff no less, that it doesn't matter what the language is, they are ALL training wheels TNBT (the next big thing).
Of course BASIC would be horrible today, but the fundamentals of structuring and the base concepts of programming are in EVERY language. No, you don't have to use global variables anymore, but you know what a variable is now. No, you don't have to use if/else anymore, but you know now that computers can be made to execute different commands based on user input.
Elitism gets you nowhere in the real world or otherwise :)
My dad brought home a new Apple IIe in the late 70's. He taught me how to write the very simple 10 print Wayne 20 goto 10 stuff and then gave me a book that had some sample programs. I typed them in and thought it was a blast.
Then in my 8th grade computer lab, we had to make a graphical game of sorts. Low Res Graphics and mine was just 2 planes with a moving background. Pretty craptastic. But that summer one of my friends came over with a Turbo Pascal 3 disk. I never touched basic again.
Turbo Pascal carried me through High School, then Oregon Pascal in College (with some C in my later courses), and back to Turbo Pascal 6 or 7 for my first professional job. That morphed into Delphi 1-7 and then Delphi for .Net in my last job.
Now, I program in Java or C# for most things. I miss my Pascal since I had 20+ years using it, but sadly there just wasn't a calling for it. It was a great learning language and Delphi is a powerful tool, but too many people treat pascal like they treated basic: good for learning intro stuff but not good for real programming...
I started programming in BASIC too, that was the only available option on the really old computers at my school !
When I got my CS degree I programmed in JAVA and worked on a linux server and a couple of open source projects.
Now I am doing .NET development all the time.
If it was not for basic, I wont have been posting this comment now :)
Great post btw.
Something must be in the air. I spent the weekend in nostalgic longing for my C64 days, so I ended up blowing most of my economic stimulus rebate on 64 stuff, included a couple programming books. http://mynerditorium.blogspot.com/2008/04/commodore-64-tax-refund-revival.html
While scrounging around for vintage gear, I came across those Atari programming controls. I had never seen those before. I’ll admit, they are pretty cool, but programming must have been a real pain.
I too got my start programming in basic. Although I think learning procedural programming long before I learned OO created a mental barrier that was difficult to break through, I do not disparage the BASIC language as the cause because I’m sure the same barrier would have been built if I had learned C first. BASIC definitely serves a functional purpose, and maybe more importantly, it teaches the concept of how a computer executes instructs in a very simple and understandable way.
Austin’s question about how to learn OO (implied), got me to thinking. Your typical “damaged” coders who come from the procedural world see OO as this: The syntax of the meat of OO code is made up procedural instructions, however the main difference between OO and Procedural is code organization and how different pieces of the code are brought together at run time. I dare say this pretty accurately describes how programmers think about OO when the barrier is still up. I’d also say this more of an Object Based programming mindset (classic VB is pretty close to this). Once the barrier is down and the programmer is truly thinking in objects, the programming views OO as being about loosely coupled entities interacting with each other in a dynamic and loosely coupled way. Sets of instructions are an afterthought in OOP IMHO.
Unfortunately, I’ve never really seen an introductory OO book or curriculum that doesn’t start off teaching procedural programming inside objects (or within a main method). There has to be a better way, maybe approaching OO from the top-down rather than the bottom up. You’d think something like .NET Terrarium would make the perfect sandbox for teaching and learning OO.
Thanks for the memories. My first computer was an Osborne 1, with no hard drive, 256K ram and 2 SSSD diskette drives. The programs I used, such as Wordstar, Supercalc, DBase (1) all fit neatly on one diskette, booted quickly, ran quickly, crashed very rarely and were remarkably powerful for their time.
When I look at todays programs, with their huge footprint on disk and in memory, their instabilities and mediocre speed, I cannot help but wonder whether (at least with respect to programmers) Darwin was wrong!