Simon Stuart recently shared a comment on Google+ about the modern relevance of BASIC. This prompted me to think about BASIC, it’s role in my career and how software development career’s get started today.
This post is what came from those thoughts.
Whilst it may be true that BASIC is irrelevant in professional/commercial software development practice, I think back to when I first started in this game…
I don’t mind admitting that BASIC was my first programming language, on a variety of machines. Certainly I didn’t have access to sophisticated GUI’s or OS facilities, but no matter what computer I sat down at – ZX-81, TRS-80, Spectrum, C64, TI-99 or even Amiga or IBM PC etc – with a BASIC interpreter (and one was built in/provided with just about every system/OS!) I could further practice and learn.
Yes, I was limited to learning about the fundamentals of variables, conditional statements, flow of control. IF, FOR, GOTO and GOSUB were the order of the day, without the luxury of objects or even “functions”.
But as limited as it was, I could quickly and easily make a computer do what I wanted it to do (even if that was just 10 PRINT “JOLYON WOZ HERE”).
This inspired me to want to make it do more, but more importantly taught me the basics [sic] and as I progressed to more sophisticated programs (thanks to the lack of structure inherent in the language) the value of taking responsibilty for organising my code.
I then progressed to more advanced forms of BASIC (on the Amiga) that had these more advanced constructs and error handling primitives, and so learned about the principles of error handling (in principle) and further refined my code organisation practices.
When I then stepped up to the multi-module Pascal and the (seemingly) chaotic world of C/C++, those early lessons stood me in good stead. Well grounded in the fundamentals I was then able to tackle (and appreciate) the concepts of memory management and object orientation etc.
These days, the first introduction to the craft of software development is for most people Java or C#. The learning is accelerated, but the philosophy is that you don’t need to tackle those fundamentals, just jump straight in to the deep end. Let the IDE take care of code organisation and let the frameworks take care of the attention to detail.
This I think is all too often reflected in the quality of the code when the IDE and the framework finally stand back and leave the developer to actually create something. No matter how rich your framework or how intelligent your IDE, there comes a point where you end up having to write some code, and the quality of that code will be informed and influenced by all that you know at the craft that underpins it.
Someone in the UK (I forget who, or where) recently bemoaned that UK education/IT is excellent at teaching people how to use software but woefully inadequate at teaching them how to create it.
I agree, and I think BASIC had a place in that.
I believe there is still a place for it, or something like it.
Not in the workplace but in the class room.
Not the Computer Science lecture theatre, but in high school.
In fact, primary school!!
Before you throw inheritance, polymorphism, test driven development, mocking, agility, patterns, exceptions, generics, code completion, anonymous methods, anonymous CLASSES, interfaces, intents, contracts, aspects and lord know’s what else at someone, a gentle, hand-held introduction to identify, foster and nurture the initial instinct and desire to create software and inspire the willingness to learn all that other stuff and how to apply it properly ….
How can such a thing not be relevant ?
I think the problem is that we have all moved on from that learning time. BASIC is no longer relevant to *us*.
It’s the same process I think that resulted in phonetics being dropped from the teaching of (English) reading skills in schools. More recently there has been a realisation that, whilst we may not use phonetics once we have learned how to read, the use of phonetics is absolutely the best way to learn (for most children).
Maybe we should learn that lesson, and go back to BASICs ?
First, I’m glad that my provocative statement about the relevance of BASIC has inspired you in this way….
This is normally the point at which I’d disagree with you…
On this occasion, however, I agree with 100% of your thoughts on the subject. I, too, started with BASIC (on a Spectrum as well as a Black & White “Amstrad” 286). In retrospect, BASIC is a limited and primitive language (much like using a rock where today we’d use a hammer)… but it was enough to teach me the “finer points” of software development (the fundamentals, if you prefer).
It’s a part of development education lacks today, and in the early education sector where BASIC retains any relevance in the modern world.
As you said, BASIC has no relevance to *us*, but for the lessons we took from it in our early days.
What would be wrong in teaching Pascal in schools?
I don’t think it is more complicated than Basic and the “fundamentals” would be better covered IMO.
The main advantage BASIC had was it’s ubiquity.
@Francois: I did say “BASIC, or something like it”. 🙂
But if you were to teach Pascal, which variant would you use ? Modern Pascal involves pointers, generics, anonymous methods, interfaces, OO, exceptions … even “Medieval” Pascal involves things that an absolute newbie simply could not get their heads around until they had some sort of more basic [there’s that word again!] primer.
Even something as simple (to us) as modular organisation (units in Pascal) is actually an advanced concept that comes from the need to organise *complex* programs. Similar to “chapter books” in reading.
Extending the language teaching analogy, using “Pascal” to teach programming is like using Famous Five stories to teach reading. Certainly Enid Blyton is no Shakespeare (no offense or disrespect intended – I enjoyed Enid Blyton as a child), but when you are first starting to learn to read you need “Janet and John” to guide you. You may quickly progress to spend time in the company of Julian, Dick, Anne, George – and their dog Timmy – but if you were introduced to them at the start you wouldn’t stand a chance and could easily be put off reading for life.
@Jolyon, gotcha!
We would need a “basic Pascal” 😉
Well you can use DWScript for that: “basic” scripts don’t need no complicated setup and you can achieve a lot of things directly (cf. samples on Rosetta Code), and when you need to ramp up the complexity, it supports procedures, units, classes, interfaces, etc.
Actually had some people introduced to code through it.
/shameless plug
Great post. When I was 10 I started writing programs because computers came without software. I fear that my own young children will never have the opportunity to discover programming that way.
It’s not just the language, it’s also the machine and what you can do with it.
I started out on a VC20/C128/Amiga. Those machines gave you full access to the hardware, without the operating system standing in the way. I remember that on the Amiga, you could tell the SEKA assembler where to load itself. Then you just started writing the program starting from a memory address. To start the program, you just said jmp and that was it. The first assembler command was usually to turn multitasking off, then the whole 512mb belonged to you and you could do what you want with it. It would be great if someone could come up with a modernized version of the Amiga.
@Francois: I feel BASIC should be taught first and then Pascal as BASIC is an interpreter and is easier on the learner and Pascal being a compiler will be a headache to learn.
Only if there were a Pascal variant which was interpreter the I don’t think it would be usable to teach the first essential steps of programming because I personally believe that Pascal like COBOL forces quite a bit of discipline and this discipline is necessary as it stands by programmers side irrespective of which language he/she uses for the task at hand.
Agree totally. Code never dies as long as it is written manually and although because the analysis done will not be repeated. As long as people use a language it is alive. I used Basic a long time in fashion of VBA over last decade. No chance – the real world sees things a lot more relaxed than we the ‘Geeks’ do.
Languages have very often been a symbol for a certain mind-set, evolution step in technology. Maybe the smart thing about the JVM and .net is that they allow different languages to benefit from the same offering concerning the programming infrastructure and of course having a layer in between that acts as a reliable standard everyone who is interested can get to know makes sense. These things grow and grow leave room for more smart and compact approach. Interesting that class libraries don’t shrink:) Wonder why?
After 10 years of IT education (ins school not university) in Austria we can say – without having an idea about fundamentals in IT people do enormous hard when entering jobs. It is nice that things could be formatted in JSON but if you have an AVG SAP + Windows IT with more admins that provide messages per flatfile, because they always did never keep up something, just try to send the message and job is done for them … they are doing enormous hard finding defensive protocols and are not aware about the leak that false information can provide… In Austria they have little .net and Java and early start with Hibernate, no relational DB almost 0 … in school a pain.. because the economy demands so the teachers jump … I know many of them, these have been those in the bigger projects who did coordination and never wrote a line of code but educate the developers … sad.
Instead of BASIC, you can start with PYTHON, and get all of basic’s benefits.
1. No overhead (extra code you have to type).
2. Interactive mode (just like basic).
3. You can delay a discussion of Types until later. Start with variables being names that hold values. (X=3, fine or X=’hello’, also fine).
I loved BASIC back in the day. But kids want to see results. Today, start with Python, and you get graphics, and sound, and games, and everything, with a minimum of teaching “syntax cruft”.
warren
Or use the BASIC/Pascal mixture, COMAL and its later variant COMAL-80 which takes the best from BASIC and Pascal and mixes it together.
It was used as a teaching language in Denmark in the 80s in schools. It was also the first language I came into contact with (in 7th grade) and made it very easy for me to “step up” to Pascal (Compas Pascal, PolyPascal, Turbo Pascal, Borland Pascal, Delphi).
I graduated with a B.S. in Computer science in 1993. Although we experimented with many languages in my intro (101 classes). My Entire Academics was in Turbo Pascal. In 1995 I was programming in ObjectPal (Paradox Database) when Delphi 1 was released. It opened a whole new world for me!
COMAL samples mostly seem to use line numbers. That’s one thing I do NOT miss from BASIC.
W