I think we also forget about how common Microsoft BASIC was.
In the late 1970's the hobby market existed with machines then being many and diverse. Almost all of them licensed Microsoft Basic. Only later with the home market and the likes of Commodore, Sinclair et al. did home computers come with their own versions of BASIC.
We all know that BASIC is a load of rubbish. But the MicroSoft BASIC on those hobby machines set the mood for what home computers would have, even if it was not MicroSoft's BASIC.
Early home computers did have custom ROMs for all kinds of exciting languages, on the BBC Micro you could get BCPL (C, early version), Forth and probably Pascal. Same on the Sinclair machines, there was even a ZX81 clone - the Jupiter Ace - that ran Forth.
Despite this plethora of languages we ended up with BASIC. Boring BASIC. There were no resource excuses, Microsoft had just set the tone of what the home computer market was to be.
Same problem happened with Windows. Instead of networked UNIX style computers with some security worked out with things like 'user space' there were this ugly DOS and Windows things and it was 'personal computing' with people carrying disks from one PC in the office to another. Although I liked Windows at the time it really was the second time round that Microsoft had stunted computing, first with BASIC and second time with Windows/DOS.
Coming from a BBC Micro background where the BASIC was awesome and the disk filing system was okayish I was massively underwhelmed when I first had to use DOS. I felt 'is this all there is' as I experienced the kludginess of it.
MSX made precisely zero impact in the UK other than giving the likes of Personal Computer World something to waste dead tree and ink about. From what I remember it was not that hacker friendly as back then you needed to write code that was familiar with the hardware, not abstracted out through some convenient operating system. With a BBC micro you knew that you could write something performant - as in arcade machine grade - with the built in assembler and a lot of work with the A/Y/X registers of the 6502. MSX on a 16 register Z80 with some mystery meat video interface made that possibility unattainable.
All considered I think MSX hampered the computer cause, promising something that was never delivered. It was also off in that blind alley of BASIC that MicroSoft foisted on the hobby market a decade earlier.
I don't think this is right - BASIC was quite well designed considering these machines' capabilities and projected use. The model of a BASIC-powered home computer was essentially that of a programmable calculator with "computer" features tacked on. You could start by PRINT-ing math expressions at the REPL, and these would give you the sort of result you would expect, using software floats. Then you could make more complex programs, using simple line numbers, variables, and a handful of reserved words like PRINT/?, INPUT, IF, GOTO, FOR. You also had PEEK, POKE, SYS and/or USR to access the hardware directly. Sure, in theory FORTH might have been more elegant, but its RPN-like approach was far from intuitive.
I wrote some basic for the first time in like 25 years. Forgot how there were no local variables nor parameters to functions. Everything is a global variable and GOSUB is just GOTO with a return stack (no parameters). Also forgot depending on the BASIC that some BASICs only allowed 2 letter variables.
Those were my biggest issues trying to get back into it.
Also forgot depending on the BASIC that some BASICs only allowed 2 letter variables.
For those not familiar with these systems, the way you coped was usually by keeping a "data dictionary" on a sheet of paper.
On a sheet of paper you'd have...
$AA = Name of foo
$AB = Selected color of baz
$AC = Blah blah
$AD = Length of qux
etc.
It wasn't TOO bad. Until you lost the damn thing, or had to work on somebody else's code and you didn't have the data dictionary. You could keep the data dictionary in the code's comments, but on systems with just a few kilobytes of RAM (ie, the systems that restricted you to 2-char identifiers) this was not always a feasible luxury.
Luckily, I managed not to have to deal with this personally. All the BASIC environments I used as a kid in the 80s did not have this limitation. But I heard horror stories.
Yes, but the systems with two-char identifiers were also the ones with the most extreme RAM restrictions.
Some commercial Apple II software was actually written in BASIC, and you could read the code. It was usually fairly liberally commented. Example code in magazines was liberally commented as well. Folks didn't seem to comment individual lines of code, but tended to "name" and sometimes describe their GOSUB (subroutine) blocks.
But, Applesoft basic didn't force you to use two character variable names. Because most Apple II's on the market had a luxurious 64KB or 128KB of RAM, and none had less than 48KB.
I think it was a different story on systems with 4KB or perhaps 16KB of RAM. On those systems I bet you were often squeezing out every byte.
I also think some older languages (COBOL?) often had restrictions like this.
Yeah there are a lot of limitations, and to make it more fun the limitations were different across computers at the time.
I wrote a simple BASIC interpreter recently in golang, and I'm amazed I had the patience to write "large" programs in BASIC in my youth with the limitations that were present.
> I'm amazed I had the patience to write "large" programs in BASIC in my youth with the limitations that were present.
what else did you have to do with your time? :)
i've had similar thoughts, but looking back, outside of gaming, the entire use of the computer, for me, was keying in programs. some were from others (in magazines/books), and some were learning to write my own. for the first few years of having one, i had no bbs connections, so... there was really nothing else to do except read books/magazines and type in programs.
I guess that's true! I switched from writing in BASIC to writing in Z80 assembly after a year or two - though it has to be said that I "compiled" my program by hand, referring to the opcode table(s) at the back of the manual.
My resulting programs tended to look like this:
10 FOR N=60000 TO 60000 + 20
20 READ A
30 POKE N,A
40 NEXT N
50 RANDOMIZE USR 60000
100 DATA 1,2,3,4,5,....
As you can imagine it was a tedious process. Most of my time was really spent trying to hack games for extra-lives, which I guess wasn't so unusual back in the day. Later I used the same skills to patch binaries to accept serial numbers - before I started writing real code in C, Java, Perl, etc, etc.
A lot of custom business software for the IBM PC was written in BASIC and it worked very well.
I helped a restaurant that had their inventory, crew scheduling, payroll, and accounting all written in BASIC. Ran on a PC AT in the back office. It worked flawlessly.
BASIC on those systems was rubbish, every platform had its own dialect, some like Commodore BASIC 2.0 didn't provide full support for hardware capabilities, the systems shipped without a compiler. As a consequence, when you got your first computer you learned the bare minimum through BASIC and then quickly moved on to assembler in order to get the efficiency and be able to make the hardware do something useful.
Many of us have fond memories if BASIC, but let's face it, it was, well, quite basic (pun intended).
Actually the core of all those early systems was Microsoft Basic even the original IBM PC had a Basic in ROM.
If you wanted low-level access you just poked Assembly code
Most of the really early Home Pc's had such limited hardware that running a compiler was not practical - you could get compilers for CPM systems but they where more professional systems with a price tag to match.
Even than a top of the line Cromecho s100 was a lot cheaper than say a pdp11/03
BASIC has a very inconsistent syntax, and did so from the very first version. Over time it got worse.
For a specific example, just look at the syntax for drawing primitives like PSET, LINE or CIRCLE. Something like this is neither particularly discoverable, nor consistent with the normal function call syntax in the language:
LINE (0, 0) - (100, 100), 2, FB
(I wonder how many people with BASIC experience from that era remember what "FB" means here.)
You have to know where to start looking though, and it's not at all obvious that LINE is what you need to draw a filled rectangle.
It also throws you off once you learn about subprograms (in dialects that had them), and realize that all this stuff is almost but not quite like them - and all the differences are there for no good reason.
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
I never got to own a Jupiter Ace or to have a go at FORTH. I don't think the options were 'BASIC or FORTH', neither do I think that computers had to have 4K of ROM and 1K of RAM by the time the 8 bit microprocessors came along in the hobby era. Sure 8K of anything cost more than a paltry 4K but were those machines with 4K ROM of BASIC and 1K of RAM useful for anything whatsoever?
The ZX81 with 1K just mentally mutilated programmers, other than that you learned that you needed more memory.
Your first programming language constrains how you think, I was deeply wedded to the 'GOTO' concept and could not understand how a program could work without line numbers. BASIC took me a long way off the object-oriented paradigm!
Anyway, thanks for grumbling about my sweeping statement - that I still stand by - I have now found some Dijkstra that is totally relevant to today and how web development has gone:
Your first programming language constrains how you
think, I was deeply wedded to the 'GOTO' concept
and could not understand how a program could work
without line numbers. BASIC took me a long way off
the object-oriented paradigm!
Maybe! This wasn't the case for me. I'm no genius programmer, but going from BASIC to Pascal was very, very natural for me and it was a welcome change because even as a high schooler it was obvious that BASIC programs quickly became unmanageable.
Recently though I have struggled a bit in my brief encounters with functional languages, though, thanks to so many years of OO. But I got the sense that if I spent some time with it, I'd get it.
The first programming language I learned was Microsoft BASIC on an MSX. I then moved on to learn Z80 assembler, Pascal, X86 assembler, C, Scheme, Java, Python, Haskell, Standard ML, Objective C, Rust, and whatnot. I believe I'm a pretty good programmer.
Claiming that learning BASIC as the first language somehow permanently broke they way I think about programming is bullshit.
He was really just having a dig at some colleagues, it wasn't meant as a serious proposition. In any case he's not talking about productive practical programming.
I learned the ropes on BASIC in the 80s as well and it was a fine introduction to programming as a practical task but e.g. is in no way any kind of preparation to understand theoretical computer science topics like algorithm verification and provably correct programs. They're different worlds and that's really all he was saying. He'd get students come into his classes who thought they already knew all about programming and hit a brick wall when they had to deal with the level of analytical rigour his classes required.
I hit this problem myself when I try to learn functional programming. I've had a go at Haskell a few times and got nowhere. I had a similar problem getting my head around object oriented programming. Switching theoretical domains can be a significant issue.
In the UK an entire generation of professional developers started with BASIC on toy machines like the Spectrum, before moving on to professional languages, often after a degree.
Calling it bullshit is actually being far too polite about it.
To be fair, all good craftsmen care a lot about their tools. But gatekeeping other people based on the tools they use rather then the results they achieve is just snobbishness.
> Your first programming language constrains how you think
I call bullshit on that. A whole generation of programmers started with BASIC and went on to different languages. I went from BASIC to Pascal and had no problem at all going from GOTO to structured programming, but I did miss the REPL of BASIC.
Btw. if BASIC cripples your mind, then so would Assembler, which is presumably how how Dijkstras generation got their start.
Honestly I think it was just snobbishness. BASIC was available on cheep microcomputers which was affordable for regular people and hobbyists, as opposed to the machines and languages only available for businesses and academics.
Obviosly Dijkstra didn't see the benefit of a REPL, since be believe that you should sit down an prove the correctness of software by hand before you were allowed to execute it.
In the late 1970's the hobby market existed with machines then being many and diverse. Almost all of them licensed Microsoft Basic. Only later with the home market and the likes of Commodore, Sinclair et al. did home computers come with their own versions of BASIC.
We all know that BASIC is a load of rubbish. But the MicroSoft BASIC on those hobby machines set the mood for what home computers would have, even if it was not MicroSoft's BASIC.
Early home computers did have custom ROMs for all kinds of exciting languages, on the BBC Micro you could get BCPL (C, early version), Forth and probably Pascal. Same on the Sinclair machines, there was even a ZX81 clone - the Jupiter Ace - that ran Forth.
Despite this plethora of languages we ended up with BASIC. Boring BASIC. There were no resource excuses, Microsoft had just set the tone of what the home computer market was to be.
Same problem happened with Windows. Instead of networked UNIX style computers with some security worked out with things like 'user space' there were this ugly DOS and Windows things and it was 'personal computing' with people carrying disks from one PC in the office to another. Although I liked Windows at the time it really was the second time round that Microsoft had stunted computing, first with BASIC and second time with Windows/DOS.
Coming from a BBC Micro background where the BASIC was awesome and the disk filing system was okayish I was massively underwhelmed when I first had to use DOS. I felt 'is this all there is' as I experienced the kludginess of it.
MSX made precisely zero impact in the UK other than giving the likes of Personal Computer World something to waste dead tree and ink about. From what I remember it was not that hacker friendly as back then you needed to write code that was familiar with the hardware, not abstracted out through some convenient operating system. With a BBC micro you knew that you could write something performant - as in arcade machine grade - with the built in assembler and a lot of work with the A/Y/X registers of the 6502. MSX on a 16 register Z80 with some mystery meat video interface made that possibility unattainable.
All considered I think MSX hampered the computer cause, promising something that was never delivered. It was also off in that blind alley of BASIC that MicroSoft foisted on the hobby market a decade earlier.