This semester I decided to audit my colleague Chris Tyler’s Software Portability and Optimization (SPO600) course at Seneca College. I think it is important to keep learning new things especially in our field that is ever changing. I remember how as a student and my profs would talk about punchcards (or how they luckily missed having to deal punch cards by one year). Now I think back to all the things that were true when I was a student that are so not true today (2MB of RAM was standard on a PC, significantly lower processing speed, no way to get viruses via emails cause its just text…). Things keep evolving and it is good to keep learning.
I decided to take this course in particular because Chris had told me about how compilers don’t actually translate the code we write into what we think . I thought it was fascinating how our model of what happens is so different from what actually happens once our code compiles. I wanted to find out more.
Another reason I wanted to do the course was because I also teach the data structures and algorithms course(dsa555 and btp500) and in that course we talk about algorithms and their implementation at a high level. We make broad generalizations like division is same speed as addition and we look at run time at an algorithmic level without any consideration of hardware. There, big-O runtime is king. SPO600 goes to the other end and looks at how optimization works when you get really really close to hardware. We even look at assembly code (last time I did assembly it was on 68000 ). I am finding the material fascinating and the next few posts that I write will be about things I’ve learned so far.