The problem with the Internet (Part 1)

One bad segue deserves anotherWelcome to my first post on the new site. What will happen to rolypolycat? It will still exist, but become the typical “family photo album” type web-site found everywhere on the Internet under obscure URLs. You don’t have to be terribly astute to note that all the old blog postings I made on the site, I’ve transferred over to nerdrider. But (and this is a terrible segue) what if I hadn’t? What if I’d simply abandoned the old web-site to gather virtual dust? The information I’d presented there, would be locked in time. – Both web-sites are hosted on a paid server. The domain names are paid for. So if I simply didn’t renew my account with the vendor, you could imagine that eventually, the hard-drive space would be reclaimed, the DNS entries removed and a small chapter (more like a “generic sentence summarising many aspiring bloggers”) of Internet history would come to a close. But sometimes it appears to be cheaper for a vendor to buy more hard drive space, than reclaim old disk space.

I value my time very highly. I don’t object to anyone who realises its real price. Time is one of those things you can’t buy and only have a limited supply of. IT staff only have a limited time to deal with every issue that comes their way. If they haven’t had the time to set up proper practices, they won’t be using their time effectively. If a hard drive fills, then you have the two choices of “empty it” or “replace it with a bigger one”. Economically, if you spend too long working out what can be removed from a drive, it would be cheaper to replace it. In a world where the global consciousness is finally realising that resources are limited, it’s almost criminal to suggest replacing working hardware is the right choice. But, in the real world, it happens. A classic example: Eighteen months ago, I changed ISP. As is fairly standard, both old and new ISPs offered “free web-space” for a personal web-site. On my old ISP’s website, I had a PHP page with phpInfo() and another page with pictures of strobe ants (that I thought may have been fire-ants). No – I’m not the sort of nerd that studies insects, rather I was concerned that we had fire-ants but the DPI web-site didn’t have the facility to upload photos for them. So, free web-space seemed like an easy solution. Some eighteen months later, my first foray into web-sites still exists.

The computer industry travels at an amazing pace. The technology used today wasn’t here ten years ago. Maybe some research boffin was developing the ideas / software / hardware, but for the most part, it simply didn’t exist. “Best practices” come and go as standards evolve. In our society, we increasingly turn to the Internet as a source of knowledge. We expect that we may have to be wary about the truthfulness of things stated, but we don’t often wonder if its factual basis is still matching any advancements in the field we are studying. Compare this with the Internet’s predecessor AKA a library… Take a book off the shelf, and you always get a feel for how old the information is. Dog-eared pages, faded text, a battered cover, all help convey a sense of age. If you take an engineering guideline off the shelf and see it was published in 1930, you may expect that what you read will be outdated. The cues of age can be far more subtle on a web-page. Without an actual date being displayed on a page, subtelties in fashion and trend (fonts / colours / images etc) will most likely be your only guide. Match that with the pace that the computer industry moves at, and you can see a problem utilising materials found on the Internet as the latest and greatest thinking in the computing field.

I guess my points are:

  • If you are a consumer of Internet material, always look for supporting evidence to indicate what you are reading is correct and up to date. It is relatively cheap to put together a web page. And, you don’t need credentials or a reputable publisher behind you. Without prior writing experience or credentials, try getting a book published in dead-tree form!
    If you are a provider of Internet material, always date your work. It’s current now, but it doesn’t mean it will be by the time someone reads it…

Add to Technorati Favorites

Are you wearing a helmet?

If you live in a “western country” outside of the United States, you are probably required by law to wear a motorcycle helmet when riding a motorcycle. Australia is no exception to this rule. In Australia, this helmet must comply with Australian Standards AS 1698.

Let me state upfront: I have not read AS 1698. I am not a lazy person, but from my “Internet research” it appears reading standards is not a right of all, unless they wield a credit card… Besides, it wasn’t actually AS 1698 that interested me for the sake of this post.

From my understanding of AS 1698 and various reading I have done over time on the standards, it’s one of the better standards motorcycle helmets are tested against. It includes an element of destructive testing which (from memory) includes “batch testing”. In other words, it isn’t a “pass once and you are free to sell all you want” standard.

The standard covers all sorts of aspects – some fairly obvious, some less so. Things like:

  • How much energy the helmet is capable of absorbing. (In other words, making sure your head isn’t subjected to a 300G impact.)
  • Making sure a three kilogram spike does not penetrate the shell.
  • Testing that the strap adequately holds the helmet to your head.
  • Ensuring that the helmet permits a suitable range of peripheral vision.

In the eyes of the law, if your helmet does not have the official AS 1698 sticker, you are not wearing a helmet! So, if you feel the really cool graphics of your helmet clash with the sticker: “suck it up, buddy!”. But as I said earlier, AS 1698 is not what this post is all about.

I want to blog about AS 1609. This is the standard that covers motorcycle helmet visors (and other things like visors for race car drivers). Like AS 1698, if your visor does not feature the standard’s sticker, you are considered to not be wearing a helmet. This standard too, has its intentions on protecting the wearer. As such it features things such as protection against corrosive materials, stability of the material at adverse temperature ranges, strength of the material and optical clarity.

Put simply, it is the last point that I take issue with. It’s not like I ride around with my eyes shut – so optical clarity is important to me too. But currently, there are no tinted visor sold in Australia that pass this standard. But what aspect of the standard do they violate? If it’s the optical clarity – then I can live with that. I always carry a clear visor with me (complete with AS 1609 sticker!) Modern helmets make light work of changing visors, so the inconvenience of travelling with a bum-bag is something I can live with. I am not so sure I want to ride with a visor that may shatter if it is struck by a small stone. The standard is too encompassing. It is my opinion that it would be better for visors to pass two standards – one dealing with strength and another to do with optical clarity. It would be more informative to the wearer than this leaflet that came with a tinted visor I recently purchased:

Blanket disclaimer of unsuitability

So, when riding in sunny conditions, what are your choices? The way I see it, you have three:

  1. Wear sunglasses and use a clear visor. I used to do this a lot and don’t recommend it. Helmets don’t accommodate glasses particularly well. If you need to wear prescription glasses, make sure you test the helmet fit and comfort when wearing them, prior to purchase. The other reason I don’t recommend wearing sunglasses is that if they are not a well-fitting pair of wrap-around glasses, there is the chance for sunlight to get in behind the lenses. When this occurs, all you tend to see is your eyeball staring back at you! This is mildly disconcerting at the best of times and inappropriately distracting whilst travelling on a motorcycle.
  2. Squint. What would those optometrists know anyway? This raises another point. Sunglasses sold in Australia pass yet another Australian Standard: AS 1067. Maybe tinted visors should be subject to this standard conformance too?
  3. Break the law. Ride with a tinted visor… you rebel, you!

Technically, even though I carry a clear visor with me I am breaking the law by wearing a helmet fitted with a tinted visor. At times I have been booked or pulled over for random breath testing / licence checks whilst wearing a helmet fitted with a non-approved visor and I have yet to come across an officer who has even commented on it. Put simply, police officers are people too and are quite capable of applying common sense. If you are riding in conditions where “optical clarity” is unlikely to be an issue, I suspect it would take a fair degree of provocation on your part to provoke the officer into handing over a ticket for not wearing an approved helmet… But don’t count on it!

If you are riding at night or in dimly lit conditions, you can probably expect less favourable behaviour from a police officer, even if you are riding with the visor up, as Jeff Anderson found out:

…I was recently pulled over for wearing my tinted visor at night. The visor was up and not in use as it reduces vision. the officer said that it was illegal even though it wasn’t in use…

Jeff was writing on a forum which featured a section where you could ask an “an active serving motorcycle police officer. Interestingly enough in the response “Hubie” (the aforementioned police officer) mentions a rumour of an upcoming photochromic lens style visor, which is expected to pass the Australian standards testing. I can’t imagine that one will be cheap!
Add to Technorati Favorites

How good is the black-box in your program?

I am a “big fan” of the television series “Air Crash Investigators“. I’m not what I consider “morbid” – the concept of making a TV series from actual plane crashes is slightly disturbing. It’s the methodical investigation that appeals to me. The thoroughness with which the investigations are conducted ensures that the airline industry is always striving to improve its safety record. That gives me comfort everytime I set foot on a plane. – However, I don’t recommend you watch one of the shows immediately before boarding an aircraft!

As you are no doubt aware, key to most aircraft crash investigations is the Black box. It contains vital details of the aircraft and along with the cockpit voice recordings help investigators unravel what happened during the final moments of the doomed flight.

Fortunately, the average software developer does not have to write software with the added pressure of it costing human life if it all goes pear-shaped. Of course, there are exceptions to this. Due to the lower cost of failure, most computer applications won’t be stringently controlled to protect against program failures. When a program fails, resources need to be devoted to resolve the problem for the customer. This costs your company money. “Resolving the problem” for the customer, is different to “fixing the bug that caused the error”. This may involve manipulating registry entries, files on disk or other methods. All’s fair in love and war… The more customers you need to fix this problem for, the more compelling finding the underlying problem becomes.

This is where decent error recording code comes into play. General exception handlers tend to include call-stacks these days. These are invaluable to locating the moment where something went wrong, but unfortunately, they don’t provide much context as to how the program came to this point. What do your support engineers ask for when investigating problems? A registry dump? A file listing? Configuration files? Why not package these up in an archive that can be sent through to your technical support people? Is your software capable of telling you the final moments before the crash? Can it report the features used that led to its demise? If it doesn’t, retrofitting this sort of code to your application can be considered a “long term investment”. It will cost your development now, it’s an unsellable feature for the customer, but you will reap the rewards for your effort down the track. Trust me, it will be worth it!
Add to Technorati Favorites

Biking 101: Turning corners

Believe it or not, riding a motorbike and knowing how one turns are two different things.  Professional rider training organisations will introduce you to the concept of “counter-steering” and some may even attempt to explain how this phenomenon works, but, you don’t have to understand it to ride a bike.  Here’s the briefest summary I can give you on what counter-steering is:

If you want to turn left, you turn the front wheel to the right. 
If you want to turn right, you turn the front wheel to the left.

After you’ve read that, I think you’ll understand why the technique is called “counter-steering”.  What’s more is, it actually works!  Here’s my attempt at something between a layman’s explanation and the physics nerd’s explanation.  The explanation given is based off my understanding and what I’ve observed first hand.  I promise I won’t go close to using mathematics in my explanation!

The gyroscopic effect of the turning wheels is what holds a motorcycle up once it is moving at any sort of speed.  (Say around 20kph / 12mph).  The two wheels on the bike have different roles to play.  If we discount the effect of suspension travel, the rear wheel remains with its axis fixed relative to the rest of the motorcycle, whilst the front wheel allows its axis to pivot left and right (when viewed from the rider’s perspective). 

The rear wheel is responsible for keeping the motorcycle moving in the same direction of travel.  The front wheel is responsible for changing this direction of travel.

Lets look at the rear wheel effect first:
If you spin a gyroscope where the top of the wheel is not centred above the bottom, it will maintain this angle, providing the gyroscope does not lose momentum.  Given the freedom of being able to move, it will circle in the direction matching the side the top leans to.  Therefore, once a motorcycle is leaning, it will move in an arc in the direction of the lean. 

Figure 1: Trajectory of leaning wheel 

Once the rear wheel is spinning with a fair degree of velocity, the weight of the rider and motorcycle become insignificant compared to the gyroscopic effect of the rear wheel.  Although you can use your body-weight to lean the motorcycle into a corner, it’s a slow and arduous process unless you can influence the direction the front wheel is pointing.

Here’s where the front wheel comes in:
Forcefully altering a gyroscope’s orientation will cause it to behave in strange ways.  This is best demonstrated with a loose pushbike wheel.  Spin the wheel up whilst holding the ends of the axle. 

A badly drawn arrow indicating a spinning wheel

Push the left end of the axle “forward” and pull the right end toward you.

Oh look, now there are dodgy green arrows as well! 

You will feel the wheel “react” to this movement and the wheel will lean to the left. 

Dodgy red arrow removed to make blue arrow easier to spot

The easiest way to return the wheel to the vertical plane, is to reverse the action you just did.  That is: pull the left hand toward you and push away with the right.

Putting it all together:
With our increased understanding of what is going on, we’re ready to “hit the road”.  (That should be taken as a “figure of speech”, rather than a “literal interpretation”)

  1. Travelling forward on the bike we push the left handlebar away from us.  As explained above, this will cause the front wheel to lean to the left.  The rest of the motorcycle will follow, resulting in both wheels now leaning to the left.
  2. We stop pushing the left handlebar, allowing it to resume a “neutral” position.  It requires some force on our part to remain at this current lean angle, as the gyroscopic effect of the front wheel will now make it “want to” turn in more.
  3. Because the wheels are leaning, the bike travels in an arc.
  4. Once the joy of turning left has worn thin, we need to stand the bike back up.  So, we reverse the process and push the right handlebar forward.

And that’s the simplified version of turning corners on a bike!  I will leave “turning right” as “an exercise for the reader”. 

Some points in closing:

  • I’ve heard it claimed that the Wright brothers (as in the bicycle makers who forgot that push-bikes weren’t meant to fly) noted that you counter-steer bikes.  Later observations (such as “look, my brother is flying”) seem to occupy most text that you see written on the duo.
  • Whilst counter-steering works for push-bikes, the relative weight of the rider compared with the bike means it is much harder to observe the effect.  Body weight / balance play a bigger role.
  • Rider training will teach you to push  the bars, not pull  on the opposite bar.*  I believe this is taught to stop you gripping the bars too tightly.  A loose relaxed grip with your hands is a safer way to ride.
  • Throttle control also plays a large part to how well you can ride around a corner, but that is a story for another day. 

* Personally, I find it easier to feel the gyroscopic effect of the front wheel by pulling on the bars, probably because my arms are tense when doing so.  From changing between the two techniques, I find pushing the bars easier to control.

An introduction to C# iterators

I want to write a blog article on the inner-workings of iterators. If you’re writing C# code, chances are you’ve consumed an iterator with the foreach keyword. However, if you’re not familiar with writing iterators, here’s an introduction on writing them.

The first example is of a simple counter iterator. Here’s the code in its entirety:

Source code
This produces fairly predictable results:

1 2 3 4 5 6 7 8 9 10
Press any key to continue…

If you’re new to this, all you really need to notice is the yield return statement. You can think of this as a normal return keyword, except it leaves the function “hanging”. Next time the function is used, it will resume from this point – counter will be incremented and the while loop continues. Under the hood, it’s not exactly like that – but it’s a useful approximation of what is going on. You will notice that the return type for the function is actually IEnumerable<int>, however, you need to return the primitive type specified within the angled brackets <> when using the yield return keyword.

One of the classic computer-science problems to solve is reporting prime-numbers. Here’s a version that uses an iterator to report all primes up to a number specified:

Prime number generator source code

Which produces the output:

1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Press any key to continue…

The mathematicians may want to argue over whether or not 1 and 2 are actual prime numbers, but doing so misses the point of this post! Looking at the IsPrime function, you’ll notice a for loop and think: “Hey! Our counter iteration from earlier would do the same thing!” . So in the next version, that’s exactly what I’ve done!

Sexier Prime number generator

I have one final “optimisation” to make. I use the term loosely, because I have done no performance testing to vouch that it makes the program any more optimal… It’s really done to show that you can combine recursion and iterators. To test for a prime number, you need to see if a number has any divisors other than 1 and itself. Furthermore, if you can’t divide a number (y)evenly by a different number (x), then any multiple of x will also not be a divisor of y. Therefore, when testing for prime numbers, there’s no point testing divisors unless they are prime numbers themselves.

Have a look at our IsPrime function again. Rather than using the counter iterator to go through every possible denominator, we can use our prime iterator to only go through denominators that are prime numbers! We do have to tweak it a little, as “1” becomes a special case… (Can anyone say “endless loop”?) Here’s the final version:

Sexiest prime number generator

The point is, iterators are really cool. (Well, in a nerdy sense at least) If you’re not using them in your C# coding, then you should be! I guess it depends on how often you write code that conforms to an iterator type construct, but there’s a lot of scope there, so get thinkin’! I don’t think C# iterators can quite match the power of python’s generators, but I’m not a python coder… Python allows you to append results to the set of results the generator “yields”. There’s a good demonstration of prime number producers written in python on Wikipedia demonstrating this concept.

Very interesting, but I don’t agree with you…

My blog is very much in its infancy. As such I expect the readership to be small in number. At the moment, my main aim is to build content. – Content that people will find interesting and worth their time.

If this blog becomes “successful”, these early articles will help piece together the history of the site and fill in that extra time when people come to the site and find the newest article too short to fill in a lunchtime at work. :-)

Around mid-December, I got a real shock when I received a comment on one of the articles I’d written. The IP-address was based in Canada and as far as I knew, it wasn’t from anyone I knew personally. The comment was light-on, but seemed in context enough, so I approved Idetrorce and their “Very interesting, but I don’t agree with you” comment. Soon after, it became apparent that my readership had not in fact doubled, but I’d been conned by a spam-bot.

Since then there has been much speculation over who Idetrorce is and what their motives are. Hank “The Ozz” Osborne of www.hoei.com has a sinister thought:

In my humble opinion, this is a pre-attack campaign for a bigger spam campaign that will come in the next few weeks. The comment above would be okay on most blog posts since it is not trying to link people back to a product of service and it is just a polite disagreement

If a blogger does not block the email address and user name associated with this comment, then they could be opening themselves up to something much bigger coming down the pipe.

I hope he’s wrong, but it does seem a fairly logical conclusion to draw, given the number of people who have opinions not matching idetrorce’s. In the month or so since idetrorce started disagreeing with bloggers world-wide, he (or she) has managed to attract growing amounts of speculation – people now wondering who idetrorce is… There are now some 431,000 hits on Google.

From the web-browsing I have done, it is apparent that this spam-bot exists in multiple places leading me to the conclusion that it is viral, and not initiated by a single entity with too much bandwidth.

One of the hits now showing up on Google is a link to a user account on “Snowboard mag“. One of the interesting points with this user-account is that it has been active for the same amount of time as these comments have been appearing on people’s blogs. As other bloggers/commenters have pointed out on this one, “This may just be a coincidence”. I’ll let others draw their own conclusions.

“Everybody’s lost, but me!”

I think I need a GPS…  I was leading some friends on a ride today.  I had been keen to go for an “exploratory ride” by myself, to familiarise myself with the roads around the Glasshouse Mountains.  There are a lot of forestry roads, some sealed, and a lot dirt.  I didn’t promise anyone an exciting ride, as I knew a lot of the terrain was flat and bordered pine plantations.  Those two combinations tend to add up to straight, dull roads… 

I had spent some time scouring Google Maps and Google Earth, attempting to work out how to stay on the bitumen and how to find some windy bits.  But my plans still quickly unravelled.  My ancient book of maps (circa 1992) has always proved to be hopeless and inaccurate once you get down to these sorts of roads.  For the sake of anyone outside of Australia reading this, allow me to paint you a picture:

We are not talking “out back” here…  The roads I was on today are less than an hour’s drive from Brisbane (population approx 1.5 million people)  As I mentioned, these roads traverse through pine plantations as well as other farms (namely pineapple)  But, they don’t get much traffic.  Side roads don’t tend to be terribly well signed and I don’t recall passing a car going in the opposite direction for the period of about 20 minutes as we rode along Twin View Road and others.  – So, if you know where you’re going, you will be fine!

As an exercise for the reader, follow along my intended route on Google Earth or, directly in the Web browser if you’d prefer:

  • Head roughly NNW along Old Gympie Roadout of Caboolture.
  • Turn left onto Twin View Road. – I’d already got lost before getting this far!  The main road deviates to the right and becomes Smith(s) Rd.  This takes you back into Elimbah, but, from my map study, I knew I could rejoin Twin View Rd there… Until I’d arrived in Elimbah, I’d no idea I’d left Old Gympie Road!
  • Stay on Twin View Rd as it deviates from Scurr Rd.  – I missed this one too, and gave up at this point.  Following “the main road” takes you along Scurr and then Newlands Road back to Wamuran.  At least I then knew where I was, so stuck to tried and tested roads…
  • If I’d still been on-track…  Turn right onto Raaen Rd.
  • This road merges with the Glasshouse-Woodford Rd.
  • Take that road back to Old Gympie Road, turn left and head for Beerwah. 

The more I look at that with Google Earth, the more convinced I am that we would of traversed lots of dirt roads.  If you use Google Earth, with the “roads” option on, you see a fair degree of approximation between reality and the way the roads look in real life:  Going back to my first missed turn you will see that the “roads” indicated a straight path.  The maps on whereis.com(Search for “Smith Road | Elimbah | Qld”) has a much better indicator that you will need to turn left, to stay on Old Gympie Rd.  Search again in Street Directory and you get even more detail!  I guess “local knowledge” counts for something.

My point is, not all mapping tools are created equal.  As far as I am concerned, a GPS unit is only as good as the maps you get in it.  All the fancy features in the world aren’t going to do you any good, if it can’t pinpoint you and know when you will need to veer down the side road to stay on course.  (Of course, you would expect any GPS to tell you to do a U turn after you failed to correctly navigate the last intersection but that’s still only secondary to getting it right in the first place)   

Ride safely

2007 was a a bad year for motorcycle related deaths on Queensland roads.  It truly is a tragedy that anyone dies in a vehicle accident and if you’ve been personally affected by the loss of a loved one I extend my condolences to you.

I used to summarise motorcycling as “Not dangerous providing you don’t hit something or fall off” and I still believe that thought has merit.  In the event of an accident, your chances of being seriously injured or killed are greatly exaggerated on a motorcycle (when compared to a car) and if you’re riding but not admitting this to yourself, you are probably doing yourself an injustice.  It’s this realisation that can help motivate you to go to the extra effort to keep yourself safe. 

I’ve been riding motorbikes on the road for around fifteen years now – and have yet to have an accident.  I refuse to be superstitious about this (by adding a “touch wood” style comment) – and I still remind myself that it’s not beyond me to have an accident.  Do I have the definitive secret to riding safely on the road?  I can only wish!  Ask enough riders how they keep safe and you will probably end up with a conflicting set of answers.  But I refuse to believe that “luck” needs to play any part of it.

I’ve raced (and crashed) motorcycles on a race-track.  To quote a fellow racer “I never set the world on fire” in terms of my on-track performances, but it did teach me a few lessons.

  1. Motorcycles are harder to crash that you might imagine.  Providing you’re getting gyroscopic effect from wheels turning they are incredibly stable.  In the event that you lock a wheel on the motorbike, the quicker you can get it turning again, the quicker stability returns to the bike.
  2. The biggest issue working against you keeping the motorbike upright is usually yourself…  “Panic” suppresses your ability to deal with an emergency situation.  If you can recognise the on-set of it, you may have a fighting chance of dismissing the panic and saving the situation.

On the road, these points still apply, but can be rather academic if your scenario includes other vehicles.  Road position / covering brake levers / situational awareness and many other factors all help improve your chances but these can best be summarised as “Concentration on the job at hand”.   Don’t ever allow yourself to think that it couldn’t happen to you…  Ride safely and enjoy the sense of freedom only motorcycling can offer.

The Masses Have Spoken

I’m a big fan of Jeff Atwood’s “Coding Horror” blog – and I’m certainly not alone in that respect!  A recent entry “Sorting for humans” talks about how the default sorting algorithm that most programmers use for sorting text doesn’t lead to a “natural” sort order.  When sorting Alpha-numeric entries, you end up with an apparently illogical jumbled order – where “z10″ appears after “z1″ but before “z2″.

Anyone who knows anything about ASCII charts (and Unicode ordering!) will recognise what’s going on.  For those of you who don’t, have a look at Wikipedia’s entry on ASCII character encoding.

I read through the comments on this particular blog entry, expecting to find some clever ideas for “natural sorting” algorithms. – At this point in time, I don’t need one, call it part of my “Professional Development“.   Whilst there were a few implementations with good ideas, the thing that struck me were comments like this:

I’m sorry, but I don’t agree.  Let’s call it alphanumerical.
   
z100 should always go BEFORE z2, the same way that table goes before tar.
   
Also, anyone naming their files *name*-*number* and not putting in the extra digits should not order by name, but by date.

And I take offense at Kate Rhodes’ comments.  It’s yet another case of stupid users.

   
This admittedly, was the harshest comment I saw and you’ll be pleased to note that there were other commenters politely suggesting that an attitude adjustment may be in order.  But the sentiment (that the “strange” ordering was correct) was echoed several times by other commenters.  I’m not saying there weren’t valid points listed in their objections – some commenters noted that Internationalisation (I18n) made the task of natural sorting more difficult.  What I am saying is it’s not good enough to justify your approach and think the matter is resolved.

I’ve programmed for long enough to remember times when I thought differently to users.  – I still do at times.  I also know that I can be a persuasive arguer.  Programmers using their logic skills can be like that…  But, no matter how logical or compelling my argument is, if it’s not what the user was expecting, it’s called “a bug”.   If (or when) this happens to you, swallow your pride and alter the program.  Either make it behave the way people are expecting it to, or make it such that users are expecting it to behave the way it does.

Professional Development

After I left university and started work as a  support engineer, I found myself living in share accommodation with a civil engineer.  I remember thinking to myself: “I’m glad I’m not him.  His profession dictates that he must constantly study to remain qualified.”  It’s fair to say at that stage in my life, I wasn’t the most conscientious of students. 

I can’t quite fathom why I thought that I would never need to learn anything more about computing.  Did I honestly think the computing field was sitting still?  Moore’s Law had been around for over twenty-five years and I had witnessed it first hand.  But somehow, I hadn’t quite made the logical jump in conclusion that the skills I’d learnt in university would become out-dated… 

These days, I take my own professional development quite seriously.  My day job doesn’t see me needing most of the skills I’m currently learning.  As a developer it is a constant struggle to stay abreast with current technologies.  Chances are, if you are developing a commercially successful application, you are committing a lot of your effort to maintaining a legacy code-base that (at best) was developed with the technology that was prevalent at the time the initial version of your application was written.   At times in my career I have suffered from this myself, and witnessed others do likewise.  This has led me to the conclusion: The longer your software product remains a success, the more your programming career will suffer.  But, you can do something about it: “Professional Development”. 

Chances are, if you are a software developer reading blogs about programming, then you already know the benefits of Professional Development and actively do “PD” yourself.  But, if you’re only half-way (i.e. reading blogs but not doing the “PD” thing) here are a couple of guidelines.

  1. Keep it fun.  Work is the serious bit.  – If that were fun, they wouldn’t have to pay you*.  If you get bogged down trying to nut something out, chances are you will give up on the project and learn very little.  If you can think of something you’d like to do, rather than something that could be considered “important”, the pressure to succeed will be less, but the motivation to will be more. 
  2. Set aside some regular time. – I use the time I spend commuting on the train for the vast bulk of my PD time.  It’s consistent and neatly fills in time I’ve already committed  to spending, getting from A to B.  Apart from making your PD a habit, if you share your life with a  partner / family then they can respect your  need for “quiet solace” as you study…  
  3. Don’t go it alone.  – If you can, join an open-source project such that your skills can be honed by other professionals.  Of course, this infers that you can find an open-source project that appeals to you and only requires the amount of time you can afford to spend.  This point is one of those: “Do as I say, not as I do” type edicts…

One important thing to remember though:  Chances are, you signed an “Intellectual Property Agreement” of some sorts when joining your employer.  If you’re thinking about writing your “Get Rich Quick!” application for your PD project, you may want to make sure you are not violating your agreement… 

* I’m sure I got this from a Scott Adams’ “Dilbert” book… But I couldn’t find it, so I can’t give you a proper reference.