Do you need a computer science degree?

I recently read an article on whether it was necessary to have a computer science degree to program computers professionally.  This is hardly a new topic, but it is one that will not go away. Well, I suspect unless it becomes mandatory to have a CS degree, this topic will periodically be raised.

Most times I read an argument from one side or the other, what becomes clear is whether the author has a CS degree.  If the author has one, then they tend to be in favour of a degree being mandatory.  Not surprisingly, those without one, are on the opposite side.  The university faculty that I went through was having an identity crisis at that time.   So, I started doing a science degree in computing and ended up with a Bachelor of Information Technology.  (That actually makes it sound quite dated!) The way I remember it, the course content hardly changed, so I think it is fair to say I have the equivalent of a CS degree.  This, of course, entitles me to take the high-and-mighty road and tut-tut anyone who doesn’t.  But, I’m not about to do so. “Why?”, I hear you ask…

Well, here is a list of the computer languages that I Iearnt in university:  Assembler, C, Cobol, Fortran, MicroSQL, Pascal, Prolog and SimScript  .  There may have been others, but these are the languages that spring to mind. (and not always for a good reason!)  Obviously, there were other subjects that weren’t computer languages in my studies.  There were four different strains of mathematics and various other topics based on what you would need to learn for the “real world”.  But, most of those units would now be as dated as the languages I mentioned above.  Bits and pieces of what I studied still help me today, but I struggle to believe that my almost twenty-year old university degree is a great asset to my current employer.  Fortunately for them, I try to keep learning 

I believe that the computer industry is still very much in its infancy.  These days are the technological equivalent of living in the wild-west.  There are certainly plenty of cowboys around!  Another popular blogging theme amongst programmers is whether our jobs should be described as a “craft”, “engineering”, “discipline” and so on.  People use the term “software engineer”, but this is an injustice to the more formalised strains of engineering.  The real question should be “What do we want our profession to be thought of? 

I am lucky enough to have a job I love doing.  I enjoy coding.  I can empathise with people who do not have a CS degree, but have a similar passion for programming.  I have no doubt that there are better programmers than myself, nor do I doubt that some of them will not have a formal qualification.  Given that they provide good work, would it be wrong to exclude these people from programming careers?

If we want to be taken as a serious profession, then we need to start being serious about it.  When you go to a doctor, you do not want an unqualified person treating you, no matter how much they like helping people. 

Is a comparison between the medical profession and computing justifiable?  Computers are so pervasive in western society, that bad software can and does kill people.  Granted not all software is as critical – maybe bad software in your area merely leads to people having “a bad day at the office”.  But, if you are serious about professional levels of service, then you will probably want to start emulating more formalised professions.  What I think this means is:

1.      A formal qualification in the field of computing.

2.      Compulsory membership in an accredited professional body – which includes a “Professional code of conduct” by which you must abide.

3.      Periodic examination to ensure skills remain up to date.

Point 1 could be seen as me condoning the requirement for a Computer Science degree.  But I wouldn’t want to rule out some other level of qualification counting.  At this point, I am just suggesting something that indicates a level of competence.

I could for-see that Points 2 and 3 are related.  A professional body would be able to provide training and examinations etc.  What I think should form a professional code of conduct is probably large enough to fill its own blog post, so I will leave that as a story for another time.

Am I daunted/scared by what I outlined above?  If I am honest, yes!  I never was the best student.  Exams have always daunted me somewhat, even in the rare instances where I knew the subject material very well! 

Do I see I.T. requiring this level of professional conduct?  Not at this stage.  Apparently, there is still a skills shortage, so employers will be unlikely to impose restrictions that see them unable to fill vacancies.  I do see one possible fundamental shift that will swing the industry towards formalisation, but that too, is a story for another time.

Motorcycle Suspension (Part 1)

Motorcycle suspension has a variety of roles to play.  While rider comfort is one of the roles, the most important role is actually keeping the tyres in contact with the ground surface.  As the ground surface is rarely perfectly smooth, this means wheels need to travel “up and down” relative to the rest of the motorcycle to stay in contact with the surface.  This comes back to the laws of inertia.  The bike with its mass and velocity will not “track” to the bumps and so the suspension alters the distance between the road and the bike’s sprung mass.

After my own spectacularly underwhelming career as a motorcycle racer, my interest in motor-sport (and in particular motorcycle road-racing) has remained.  Club level racing is a great way of witnessing the enormous difference in talent from the A-graders down to the “also rans”.    I have attended club-days as a spectator and they provide an insight that watching top-level competition does not provide. 

One such revelation was the difference between suspension that has been set up well, and suspension that has not.  The event that stands out in my mind was at Victoria’s Broadford circuit.  At the end of the front straight was a particularly bumpy entry into turn one.  The riders would be braking heavily for Turn one, across a series of “ripples” that had formed in the track.  Watching the bikes at either end of the field (i.e. the fastest riders and the slowest riders) revealed vastly different “behaviour” from the bikes:  The fastest bikes were smooth and composed across the bumps.  The slowest, jumped and skipped across the bumps.  If you watched the two and were asked which ones looked faster, you would have probably guessed the wrong way around.  Put simply, the slowest riders were trying far harder to control their bikes, whilst the fastest riders didn’t look to be expending hardly any effort at all! 

There is obviously more to being good at motorcycle racing than having decent suspension, but the difference was striking.  Bad suspension fails to keep in contact with the road surface.  A wheel in the air, has no grip.   Good suspension also relays the “feel” of the road surface through to the rider.  The feedback given allows a rider the ability to judge the grip levels available.

Motorcycle suspension has an extra limitation applied to it, that cars do not have:  Motorcycles lean.  If you hit a 25mm high bump (approximately one inch) when travelling in a straight line, the suspension needs to compress 25mm to avoid the bump being transferred through to the rest of the motorcycle.  Once the motorcycle leans over, compressing the suspension changes both the vertical distance between bike and ground, as well as the horizontal distance. 

Amy O'Mara from 2008 ASC Round at Qld Raceway

By recalling year nine trigonometry, we see that if you hit a 25mm bump at a 45 degree lean angle, the suspension now has to travel 29.4 mm.  Increase the lean angle to 50 degrees (from vertical), and the distance the suspension needs to travel increases to 33.6 mm.  (And you used to complain that you’d never use the stuff you learnt in maths in real life!)

On a lot of roads, the notion of a bump only being 25mm high is laughable.  In the real world, motorcycle suspension does not prevent some of the bump being transferred to the rest of the motorcycle.   Some transference is necessary or else the rider cannot feel what the bike is doing.  Bump (or “shock”) absorption occurs not only through the motorcycle suspension, but through the flexing of the tyres and indeed the motorcycle chassis.  If I recall correctly, in the early 90s, a lot of race bike manufacturers would make their frames with as little “flex” as possible in an attempt to improve the handling of their machines.  They reasoned that such an approach worked for car racing.  However, they found that some chassis flex (in certain directions) actually improved the handling of their bikes. 

In terms of components used for motorcycle suspension there are some fairly common approaches and a few that are less common.  Most modern sports-bikes consist of two front telescopic forks with internal springs controlling the front wheel and a single rear shock absorber with an external spring, controlling the rear wheel.  This is a fairly-standard evolutionary design, but by no means the only one.  Like most aspects of motorcycle design, this system is a compromise and alternative systems offer alternative advantages and disadvantages.  But that is a story for another time.

The wrong way to reach programmers

As I alluded to previously, if you are blogging to reach an audience that do not read blogs, then you’re doing it wrong I am sure there is a small percentage of programmers who want to be better at their profession but who do not know where to look, but these days this number must surely be approaching zero.  Those that will be inclined to search for good programming blogs have already done so.

Some programmers learn their craft in the approximate equivalent of a traditional trade-apprenticeship.  There is a risk though: the programmers may not be taking advice from the right channels.  In other words, the mentors in their programming journey are themselves, misled.  I do believe that as long as “students” still ask questions, they will continue to learn, despite the competence of their “mentors”. 

Despite this risk, verbal communication, feedback on progress and “learning by doing” appear to me to be the most powerful ways of learning technical skills.  At the other end of the effective learning scale, is “learning through cartoons”.  This approach may well work for young children, but I find the approach patronising!  I am wondering if there has been a sudden influx of cell-shading artists in the ranks of some of the bigger tech companies.  To be truthful, the cartoons are thinly veiled advertising for up-coming products or services, rather than an attempt at educating developers, but there is still an “undercurrent of teaching” and they are pitching to the technical end of the market. 

So far, I have only been exposed to two such cartoons.  I am fearful that they are the first of many…  The first was an introduction to the Google Chrome Web browser.  It was vaguely tolerable and not too condescending.

The second cartoon was from Microsoft.  Now I should point out that I am not a Microsoft basher.  No M$ abbreviations from me! :-) Despite a general interest in other technologies, it is programming on Microsoft Windows, that puts food on my table at the end of the day.   As a company, an IT leader and pretty much any other respect, Microsoft is not perfect, but nor is it clueless.  Which makes it harder for me to comprehend what were they thinking when they dreamed up “The Amazing Adventures of Kevlarr and the SDL.”   It really is head-shaking-ly terrible.

If you know of any other appallingly condescending cartoons for technical topics, please leave a comment.