Published
Thursday, April 24, 2008 12:48 PM
by
martin
No, this isn't a post about Roy Orbison :-)
I consider myself lucky to have had what you might call a classical education in software. I mean, I was taught about principles rather than specific technologies. That means I was exposed to lambda-calculus, finite automata, turing machines, etc., rather than Visual Basic, for example.
I believe industry wants graduates to have been grounded in current programming technologies, but industry is wrong to want that. What industry needs is graduates whose skills are deeper than the flavour-of-the-month technology at the time of their graduation.
No offence if you belong to the newer school, by the way. Software development is a broad church, and all that.
Anyway, now to the point. One of the areas I studied was something called "Algorithmics", including algorithmic complexity. As part of this I was introduced to asymptotic notiation, or "Big O" notation. If you don't know it, Wikipedia has a pretty good introduction here.
My recent work has been focused on efficiently caching large numbers of objects in memory and indexing them in various different ways. I'm using C#. What's great is that the MSDN online documentation for the various collection types in the .NET Framework includes a description of the algorithmic complexity of the various operations. For example, it might state that insertion in a given collection takes O(log n) time, for collection size n. This knowledge is invaluable when trying to choose the right datastructure for the job. If performance is at all relevant to your work, I heartily recommend getting a thorough understanding of algorithmic complexity and "Big O" notation. Not only will you find MSDN documentation more useful, but it'll give you a valuable new way to think about your code.