Apprenticeships – the missing ingredient

I started my first computer job in 1985, July to be exact. Just after completing what was called “National Service”.

Lucky for me I got a good amount of computer experience doing my National Service. I learned RTL2, RSX 11M the PDP Operating System, and got to do some numerical optimisation algorithms that were tested in real life!

Anyway when I arrived for my new job as Software Designer (mmm better than Programmer) my boss Greg threw a copy of “The C Programming Language” by Kernigan and Ritchie onto my desk and said: well around here we are going to use this language.

Eager to please I began devouring the book. What was nice it had lots of practical examples. I worked my way through and in just under a week I showed my boss my word counting program. He said I must write a spell checker, with a dynamically updatable dictionary. I started to get used to the idea of parsing text streams. And this was getting exciting.

Now unknown to me, It seems that somehow I had learnt this language in under two weeks and the other old hats had not got to grips with it yet! Just shows you, If you have enough necessity you can do most anything. Well I had no clue, but really enjoyed all the things I could do with this language.

Next we needed a document pre-processor. It needed to include and exclude sections of text based on command line arguments, It had “If” sections and allowed inclusions and exclusions of text in the “If” section or “else” sections.

Challenge was nesting these, and I made my first use of recursion to handle this simply. I even had boolean (Evaluating to True or False) expressions in the “If” sections. This started a monster which I will cover later.

Anyway the point I am making here is that I was apprenticed by Greg and Chris both experts in this programming field. They tasked me and corrected me and kept me learning. This gave me confidence, and caused a large transfer of competence from these two bosses with years of experience to me.

I am very grateful to these mentors. After working with them I got the confidence, I knew how to code, I could do anything in code, all I needed was business requirements!

The sad thing is I don’t see that happening these days. I have seen so many Honours and Masters graduates starting at companies and not knowing HOW to get things done in programming. They have a fair amount of data about programming and what is incomputable and what is provably correct et cetera, but no knowledge how to DO programming and create systems.  In fact what I noticed most was that the longer they had studied, they more they knew was impossible or very difficult to do in computing!

The drop in expertise of the average programmer is very evident to me looking back over these times. And I think the key element causing this is this dropping out of Apprenticeship.

Real time programming

In my first actual job in 1985 we did real time programming on Digital Equipment Corporation VAX computers.

I liked these machines vax780, they had 32 bit address space, so no fiddling with selectors or active page registers.

However compared to today they were highly primitive. My Apple watch has more memory than those VAX machines, and who knows maybe more processing power!

Anyway we programmed in RTL2.

My job was to design faster versions of the built in operating system functions for synchronising processes and inter process communication.

We had separate VAX machines connected via shared memory. That is memory that is accessible to both computers.

I wrote code to synchronise the clocks using the shared memory once. It was amazing. When I ran the program, because the two computers were also connected on a LAN and the LAN also synchronised the system times, it caused a system crash. It couldn’t handle the times synchronising so quickly!

I also has to write a program to  close all programs the system for shutdown. I ran it first time and it came back with an access not allowed error, so I asked the system admin to grant me access to test my program. When I ran it again, people started                                  saying that their terminal sessions were suddenly ending. I realised that I failed to check that the processes where in the correct group!, and then mercifully the next bug showed up. The process terminated itself by mistake, saving the other users from losing their sessions. I did testing after hours after that!

I learnt a lot about process synchronisation those days. We didn’t have threads then only processes!

Its interesting how things have changed. In those days Real Time Programming was a separate discipline, nowadays with the improved hardware speed its hardly ever mentioned anymore. I think all we have to do these days in programming if it is real time is to ensure we don’t have garbage collection threads suddenly consuming cpu cycles when we need performance!

Actually the UI of any decent smartphone is using real time programming fundamentals! (In my humble opinion!)

I enjoyed the Real Time World those days, we were considered “System Programmers” not just ordinary programmers.

Anyway the contract ended and new more interesting things were becoming available GUI’s and graphics, and Windows had just become 32 bit!…..