Way back in the '80s I took a couple of high school computer programming classes. They were taught using old Apple II computers and BASIC. Even though I was a total n00b and had no prior exposure to other computing platforms or environments, I intuitively knew that the whole process of writing software on those machines was really complicated and awful. Just to print out some text, write branching constructs, and do simple loops meant jumping through all kinds of syntactic loops.
To enter a BASIC program in Apple's DOS you'd have to literally type the program at the DOS prompt, entering each line of code into the computer's memory, complete with line numbers. If you needed to change the program you could LIST it out to the screen and retype the code lines but there was really no editing in the modern sense:
In the above Virtual ][ screenshot I entered a two line Applesoft BASIC program that simply prints the string "HELLO, WORLD." To make sure my program was actually there I LIST'ed my two lines of source code to the screen. I then decided to change the "HELLO, WORLD" string to "HELLO, APPLE II HERE" by retyping that line. Finally, I LISTed the modified program and ran it. As expected, the string "HELLO, APPLE II HERE" appeared on the console.
Archaic, huh? But in a nostalgic sort of way it's kinda cool nonetheless.
For simple programs it was okay but it got unwieldy for really big BASIC programs. And god help you if you needed to insert more lines of code than you had numbers for, i.e. you needed to insert six new lines of code between lines 5 and 10 of your program. There were programs you could use to redo the line numbers in your program but it still sucked.
The editing environment was bad but the BASIC language at that time was simply awful. Whereas in modern Visual Basic.NET you can do something like this
For counter As Integer = 1 To 10
If counter Mod 2 = 0 Then
Console.WriteLine(counter & " EVEN")
Else
Console.WriteLine(counter & " ODD")
End If
Next
in Applesoft BASIC you had to do this:
10 FOR C = 1 TO 10 STEP 1
20 LET R = C = INT (C / 2) * 2
30 IF R = 0 THEN PRINT C,"EVEN": GOTO 50
40 IF R = 1 THEN PRINT C,"ODD": GOTO 50
50 NEXT C
60 END
Yuck.
They do the same thing (print if an integer between 1 and 10 is odd or even) and in about the same number of source lines but one is a whole lot more readable. Note the lack of a Modulus operator in the Applesoft version!
It gets worse. If you wanted to interface with the operating system - what little there was of it - then you had to resort to PEEK'ing and POKE'ing values into and out of arcane memory locations. Any non-trivial program's source code would be littered with hardcoded memory locations, making them all but impossible to understand. So, in one sense you were working in a high level language (BASIC) but if you needed to do anything with the machine then you immediately found yourself working very close to the "metal" as they say.
Fortunately, back in the later half of the '80s our programming teacher must've realized that learning the guts of a decade old personal computer was a pointless waste of time and I never learned what all those PEEK and POKE addresses were for. I suspect that the only reason we were still using Apple IIs and not IBM PCs was budgetary problems. The school probably got a big technology grant a few years before and someone filled the classroom full of good old Apple IIs.
Okay, so that's your trip down memory lane for this Sunday morning.