“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.
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.
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!