So this is part 2 in my mini-course-description series.
Please excuse my absence, the last week has been a drag to say the least and seriously stressful to say a little more. I couldn’t possibly explain the ups and downs; the highs, YES WE CAN SLEEP, the lows, DEAR GOD WE NEED SLEEP BUT WE HAVE NO TIME SLEEP. We spent 80 hours over the course of Thursday to Monday – no exaggeration, we track time with toggl (great time tracking tool by the way) – on PintOS. I shed a tear at one point, took a power nap on the carpet in the seminar room we invaded and did endless amounts of push-ups to stay awake… Also, I ate an unhealthy amount of cheese sticks.
Bearded man ripped out beard each time we watched as absolutely nothing happened. Nothing, zero, 14 hours of no output. For each hour more beard could be found scattered around him, and for each hour we became a little less sane.
And yet we didn’t hand it in in time, and when we did hand it in… it wasn’t finished. It was heart breaking. And what’s even more heart breaking is that the next project builds on this project, so we have to finish it. And yet we must move on.
Anyway, don’t worry; this time I won’t ramble about some examples relating to the course, I’ll just give you some food for thought about Operating Systems and Part 3 of this series will contain the remaining courses!
This course is the bane of my existence (duh, you just read my excuse of absence moan). Although truth be told, I think I’ve learnt more during these projects than I have throughout these last few years in CS. It sort of puts everything together and simultaneously tears everything to pieces. You get away with a lot of crap in the beginning of your education, but OS is one of those courses that’s a wake up call. It slaps you time and time again and brakes rulers across your knuckles. No, NO, NOO it shouts as you pretend as if the wrong ordering of two lines of code out of 3000 doesn’t make a difference. It’ll shout No, but it won’t tell you where those two lines are or that they’re in the wrong order.
You probably know what an Operating System is, it is the first thing that runs when you press the on button on say your Computer or smartphone. It’s the thing you take for granted, it’s what keeps you safe and it’s what makes everything work – quite literally. As you work with OS you’ll start to see everything that isn’t the kernel as dirty and mischievous little critters that must constantly be put at bay, you may not access that you prat, go back to where you came from. Oh you want a file? We’ll tell me exactly where I should look for it, and if I can determine that it’s yours I might just give it to you. Might.
So in Operating Systems, which is a compulsory course in CS, we learn about what goes on inside the system while we’re tapping away in its user interface.
It’s all about synchronisation and taking decisions about it’s own resources and what to do about the users needs.
Usually in an Operating System course the students get to work with a “simple” operating system. They’re called simple because that’s what they are compared to their commercial counterparts (think Microsoft or OSX), but you’d be amazed about the intricacy and vastness of something that is so basic.
The reason we take OS is because it gives us, as Computer Scientists, a deeper understanding of what we’re working with and why certain things are the way they are. Understanding what the foundation is lets us build more stable constructions, and so we learn about every part of the foundation. We even build some of that foundation, because knowing about it isn’t the same as understanding all the aspects and the difficulties surrounding its implementation.
This particular course is very hands on and shoves us students in the deep end, where we get to code our way out or drown. It teaches us to be precise, to plan ahead, and to really abstain from the yearning to just start coding. We get to design our Operating System, which means that we must understand the needs of the system and the pros and cons of certain designs. This course really gets you thinking like a programmer, and sure it’s hard, but I’m getting through it by imagining the feeling of accomplishment at the end. I know if I can do this I’ll be 10 times the engineer and programmer I was before taking this course.
I’ll probably look back in a few years time with rose tinted glasses going Oh PintOS, you taught me so much. Actually it’ll probably be more like PintOS you bastard, I didn’t leave campus once because of you.
And lastly, I do have to tell you about our professor. I find him quite relatable, he’s quirky and slightly forgetful (he forgot his lecture notes today and stood for a full 2 minutes just looking at us, smiling) and he has an unhealthy love for Dijkstra quotes. He loves Dijkstra above all else; he fills up every end of lecture with Dijkstra quotes if we
have any time over. We even had a quiz today where one of the questions was “what’s your favourite Dijkstra quote?”. Also, every algorithm we look at has some relation to Dijkstra. Oh and how about the homework that was – you guessed it – reflect over your favourite Dijkstra quote.
And so here’s one of my favourite quotes;
“If in physics there’s something you don’t understand, you can always hide behind the uncharted depths of nature. You can always blame God. You didn’t make it so complex yourself. But if your program doesn’t work, there is no one to hide behind. You cannot hide behind an obstinate nature. If it doesn’t work, you’ve messed up.”
I think that’s the kick in the gut we get every time our program doesn’t compile or when it outputs something ridiculous; it’s the knowledge that it’s all our fault. Boom, we’re the root of our crisis, yet we’re also the solution to our crisis.