Easy-to-use programming language that drove Apple, IBM, and Commodore PCs debuted in 1964.
See full article...
See full article...
That is funniest thing I have read in a while. Might have been funnier if she were a full bottle on denotational semantics.Anyway, I remember eagerly awaiting my first algebra class and being one of the first ones to raise my hand when the teacher asked if we had questions. I asked her how variables could help me write programs and if she could explain pointers to me. All I got in response was a completely blank look. Sadly, I didn't figure these things out myself for another couple of years...
Aw, she was just trying to find a nice way to tell you: "Son, if you have to have pointers explained to you, you stay away from pointers."My father also gave me a book on C (I vaguely recall it was named something like "ANSI Standard C") when I was in middle school for mostly the same reason, and I remember getting totally stuck on the idea of a variable. I remember asking my dad what it meant and he gave me examples from algebra (dad was not a programmer) which I also had not yet studied. Now that I am an actual computer scientist, I can appreciate how that advice was a bit off the mark, especially as it related to C.
Anyway, I remember eagerly awaiting my first algebra class and being one of the first ones to raise my hand when the teacher asked if we had questions. I asked her how variables could help me write programs and if she could explain pointers to me. All I got in response was a completely blank look. Sadly, I didn't figure these things out myself for another couple of years...
I have to admit I'm quite curious about what you wrote. Was it an in-memory assembler only, ie while it was running? Or did you edit text files and then assemble those? Did you have named variables and jump targets?Going full circle, a few years later, I had a C-64, but didn't have the money for the macro assembler cartridge. So I wrote an assembler in it's BASIC, along with a simple EDLN style text editor. Supported the complete 6502 instruction set and simple address labels. Best $35 I didn't spend.
Not nice.my first language was Ratfor (bastardized version of Fortran and C).
You quickly learned to assign your line numbers in increments of 10 or 100. (To insert lines.)Correction: Line numbers were a leftover from a time when we didn't have text editors. Most of the BASICs people around here have been nostalgic for have been microcomputer BASICs that had screens -- but there was often no way to edit a text file. The line numbers told the interpreter the order in which to run the lines -- but it was also how you could replace a line of code when it didn't work.
It’s a good thing I wasn’t drinking coffee when I read that. And another one that newer languages made considerable progress w.r.t. these three criteria.[Python and JavaScript] prioritize simplicity, readability, and ease of use
It's been too long since I was working in VB.NET regularly to have a great answer for this, but basically the answer is "when you mostly have programmers who know VB.NET better". There are a handful of cases where I think Microsoft should have copied VB syntax in C# (for one, C#'s switch was basically cribbed from C/C++/Java and didn't get most of the functionality of VB's Select until switch expressions were added in 2019), and early on there were some other things that VB did better but mostly later C# fixed that.Honest question from a rank amateur who hasn’t written anything in Windows since VB6: is there any reason why anyone should be using VB.NET over C#?
Hands up all the 1980s kids who went into local stores with home computer displays and put:
10 PRINT "POOPY PANTS!"
20 GOTO 10
RUN
Meanwhile, other modern languages, such as [...] JavaScript, have taken on roles similar to those once filled by BASIC. These languages prioritize simplicity, readability [...]
Also, the user interface was instant when you turned the computer on that used a BASIC-in-ROM model; you could have written a program in BASIC to solve a simple problem before Windows 2/3 had even booted on a 286.The buety about the days of basic, was that it just worked, no worrying about environmental variables, libraries, configuration files and settings. You could literally type sonething in from the magazines or tutorials of the day and they worked.
Yeah, there was a continuous creep in bootup time in the 1980s that didn't stop until well into this century. Hardware speed finally started overtaking startup task requirements such that the boot time is going down, but we're still not where we were in the early 1980s. I remember my Mac Plus booted System 6.0 from floppies more quickly than a Quadra booted 7.0 from a hard disk.Also, the user interface was instant when you turned the computer on that used a BASIC-in-ROM model; you could have written a program in BASIC to solve a simple problem before Windows 2/3 had even booted on a 286.
Exactly! I would drill the powers of 2 into my brain. It still delights me when I come across numbers like 256 and I can tell people how that is 2 to the 8th power!Ahh back in the days when using a computer more-or-less guaranteed that you would quickly become familiar with all of the powers of 2 up to 2^16 = 65536. Even today sometimes people are surprised if some power of 2 between 0 and 16 comes up and I just know what it is, no thought required. No higher than that, of course. 8-bit data bus and 16 bit address bus meant you could never go beyond 2^16-1 = 65535 ;-)
You went to the Lawrence Hall of Science, at the top of Centennial Drive, overlooking Lawrence Berkeley Labs. Nothing Livermore about it.
Beyond that is easy - 128k, 256k, 512k…Even today sometimes people are surprised if some power of 2 between 0 and 16 comes up and I just know what it is, no thought required. No higher than that, of course.
Just to provide some clarity here: VB.NET had the jump on C#, given all of the VB history, even though technically they were being developed at the same time. The language teams weren't exactly separate (the C# folks were just a hallway over from us). but C# had the advantage in that Anders Hejlsberg could be very intentional with the language, without having to adhere to any previous practices. With VB.NET, we wanted to migrate a lot of VB developers, which therefore dictated the a lot of the direction we had to go. A lot (though not all) of the deviations between VB and VB.NET were dictated by the need to align with .NET, which was being developed at the same time -- otherwise, we tried to stick close to VB (though we didn't/couldn't reuse any VB code, as I've noted elsewhere in this comment section). This led to a lot of "interesting" compromises around the definition of short integers, whether or not arrays were base-0 or base-1 (we ended up just making arrays one size larger so that either would work & old ones would migrate correctly), and so on. The biggest change, though, was the exception-throwing model -- that irritated people to no end, although the resulting model was arguably a lot better, and certainly more in line with .NET.It's been too long since I was working in VB.NET regularly to have a great answer for this, but basically the answer is "when you mostly have programmers who know VB.NET better". There are a handful of cases where I think Microsoft should have copied VB syntax in C# (for one, C#'s switch was basically cribbed from C/C++/Java and didn't get most of the functionality of VB's Select until switch expressions were added in 2019), and early on there were some other things that VB did better but mostly later C# fixed that.
But "go with what your developers know" is pretty much my answer to most language choice questions. If both languages can be reasonably used for a job (not always the case; sometimes you absolutely need features or tooling that don't exist in your normal language of choice or using your normal language of choice on the platform you're working on is otherwise not well supported), even if one's marginally less performant in the optimal case, using what your programmers know is going to be better. My C# (which I use every day) is going to be way better than my C++ (which I haven't touched since college) or even my VB.NET (which I haven't used regularly in fifteen years, even if it can use the same libraries as C# and is structurally quite similar).
TRS-80 definitely had GOSUB. At least on the version of their BASIC that I used. Didn’t realize how much more I should/could have been using it until I learned Pascal, though.Hmmm, can't remember if the TRS-80 had GOSUB. That was my first exposure to BASIC, so I may not have learned about it yet at the point. But definitely on the Commodore 64 and 128, and I learned to make use of it.
Sadly, not as well as I might've done has I understood the concept of studied languages at even a fraction of the level I do now.
But, if I were to write BASIC code today on those old systems, it would definitely look different!
My assembler read text files. Since the C-64 didn't have a text editor, I wrote an EDLIN style one - also in BASIC. And it supported basic address labels for jump targets and variables. Using it, I was able to build a partial implementation of the first Q*Bert game level.I have to admit I'm quite curious about what you wrote. Was it an in-memory assembler only, ie while it was running? Or did you edit text files and then assemble those? Did you have named variables and jump targets?
I've sometimes thought about what it would take to write a 6502 assembler in BASIC, and I'm curious about your approach.
Neat! That must have been a ton of work. Do you remember the limits on file and output size?My assembler read text files. Since the C-64 didn't have a text editor, I wrote an EDLIN style one - also in BASIC. And it supported basic address labels for jump targets and variables. Using it, I was able to build a partial implementation of the first Q*Bert game level.
It also helped that the 6502 instruction set was pretty simple.
I did the exact same thing for the TI 99/4A. It required the Mini Memory cartridge, which had 4K of CPU RAM. As someone else noted, the 99/4A had only 256 bytes on the CPU bus. The built in 16K of RAM had to be accessed indirectly through the video chip.My assembler read text files. Since the C-64 didn't have a text editor, I wrote an EDLIN style one - also in BASIC. And it supported basic address labels for jump targets and variables. Using it, I was able to build a partial implementation of the first Q*Bert game level.
It also helped that the 6502 instruction set was pretty simple.
TI eventually had a fire sale on those, and my parents jumped on it. It was a huge markdown, the box, 32K, and the floppy all together for like $300, when they were originally priced at like $1200 for all three. Man, what a difference that made.The "official" way to do assembly was the Editor/Assembler package, but that required the expansion box, 32K card, and a floppy drive, which was big bucks.
I guess my I always felt (despite starting the .NET era as a VB partisan) that you really didn't stick the landing on this one. Some things felt like they changed when they didn't need to, some stuff I felt was broken was retained purely for backward compatibility we weren't actually getting, and there was a period where it seemed like a lot of stuff was added to VB with un-VB-like syntax that was just copying C# (nullable types were a big offender there) while with other really useful things they didn't really come up with a good syntax for at least while I was working in VB a lot (lambdas and generics come to mind here).It was only when C# and VB.NET shared a codebase (Roslyn) that we could seriously think about any sort of language syntax convergence issues. By that time, C# generally took the lead (as it had far more customers and was also growing faster) -- since VB.NET was more focused on existing code, we mostly had to make sure that new functionality was possible and that the syntax for it felt VB-like. We had two sets of language design meetings -- C# meetings would focus on which new features to drive, and the VB.NET meetings would focus on how to make that work in VB.NET (although there were exceptions to this rule -- sometimes new features only made sense for the VB.NET customer base).
As an aside, the thought of lambda functions in BASIC is kind of amusing. It sounds like adding a turbocharger to a horse and buggy.I guess my I always felt (despite starting the .NET era as a VB partisan) that you really didn't stick the landing on this one. Some things felt like they changed when they didn't need to, some stuff I felt was broken was retained purely for backward compatibility we weren't actually getting, and there was a period where it seemed like a lot of stuff was added to VB with un-VB-like syntax that was just copying C# (nullable types were a big offender there) while with other really useful things they didn't really come up with a good syntax for at least while I was working in VB a lot (lambdas and generics come to mind here).
VB has that disgustingly idiotic "integer division" operator, though. Just divide and store the result in an int. If the language is both untyped and can't cast to a hinted type, then the language sucks.Though not nearly as popular; VB.NET is as functional a development language as C# (indeed, both compile to the same intermediate code and there are only a handful of functional differences, such as VB's support of shadowed classes), and easier for a new person (who lacks experience in a C-style language) to read. I do know of some places that use it for professional development.
I take it you are a fan of Edsger W. Dijkstra.But more precisely, that influence has been to serve as a negative example.
I can't say you're wrong. There was certainly some of this. The VB language meetings were loud and vocal, but at that time we didn't have a lot of telemetry available to us (beyond qualitative opinions from MVPs who tried hard to represent the community) to guide us through the debates on what, whether, and how, and often we had to go with the best educated guesses. Even customers, when polled, were very divided on some of the approaches. (The most divisive one I can remember was the discussion on how to handle "private protected" variables -- that one went on for many months, to the point where I think we all wanted to chew our legs off to escape the conference room.)I guess my I always felt (despite starting the .NET era as a VB partisan) that you really didn't stick the landing on this one. Some things felt like they changed when they didn't need to, some stuff I felt was broken was retained purely for backward compatibility we weren't actually getting, and there was a period where it seemed like a lot of stuff was added to VB with un-VB-like syntax that was just copying C# (nullable types were a big offender there) while with other really useful things they didn't really come up with a good syntax for at least while I was working in VB a lot (lambdas and generics come to mind here).
You’re certain it wasn’t 4 am in the afternoon?
Pascal was great with some of the rough edges (notably strings, arrays, and I/O) fixed, which is what Turbo Pascal and Delphi did.
Python has that operator ( / is floating point, // is integer division), and it's sometimes very useful. And the % remainder operator is super useful for working with modulo math.VB has that disgustingly idiotic "integer division" operator, though.
Turbo Pascal filed off the rough edges. Delphi decided to bring them back by hewing closer to Object Pascal instead.