It’s over. The last exam was yesterday, and we celebrated the end of our first term at UAS in a nearby pub. (I have a slight hangover today.)
The last week was exciting though, and I am not the only one to have accumulated a large sleep deficit over these days. Last Friday I suppose most of us went into the theoretical programming (actually called Programming Methodology) exam with the feeling that we knew more or less all there is to know, since our professor had spent several lectures after New Year’s reviewing the basics, until we were quite fed up with discussing, for instance, the different ways of object comparison in Ruby yet another time. Quite surprisingly (or not?), the first question in the exam was just that. So at least we hadn’t suffered in vain. All in all, unlike the practical exam, this one contained very few surprises, save a somewhat cryptic code line that we should analyse for its output and which contained obscure syntax elements we had never seen. Other than that, it was the usual stuff: Find the errors in a page of code, propose ways to test a function that finds the average of all values in an array, and so on. I think most felt they had performed well in this test, and it was certainly a pleasant surprise after the rude awakening in the practical exam.
Then there was math on Monday. Monday 8:30 AM to be sure, a certain guarantee for hardly any sleep in the night before. I arrived an hour early, just to be on the safe side (and mind you, one of us actually managed to oversleep and miss the exam!), and awaited the examination with an odd mix of heavy fatigue and nervous tension. Math was, afterall, the one exam we had been dreading all along, the one we had done more to prepare for than for all the other exams combined, the one we knew had the potential for containing very nasty surprises, and above all, the one that about half of the people taking it would fail. But by the time the professor handed out the tests, adrenilane and maybe the realisation that I was very unlikely to flunk and reasonably likely to get a good grade seemed to have done the trick: I was quite composed and began solving the problems with good cheer, starting on the first page and not even scanning the entire test in advance. Problem no. 1 was “true or false,” 15 questions, and I was quite certain of my answers. No. 2 was propositional logic, really easy, we had done that a lot. No. 3 was proving or disproving two logical equivalences involving set complements and set differences. I was on the verge of proving the first when I thought of the mock exam and decided I’d rather try an example first. Sure enough, the example proved to be a counterexample: the proposition was wrong. Close shave, that one, because my “proof” had looked rather convincing to me. Instead, I wrote a really nice, by-the-book proof for the second one, first showing that the left-side set was a subset of the right-side set, and then vice versa.
So far, so good. I turned the page to problem no. 4 and then my heart sank: this one was indeed the killer problem. We had to show that a function has to be injective for the intersection of the images of two subsets of the domain to be equal to the image of the intersection of the subsets. Clear? Nor was it to me. I passed that one and then scanned the rest of the test. There was a simple induction, another formula to be proved in two different ways, a linear equation system, and three small problems from combinatorics. I solved these, quickly, and started with the equation system, going through six or seven transformations, very thoroughly, only to arrive at a wrong solution for the position vector. I scanned for the error, first quickly, then thoroughly, without being able to find it. So I decided to move on and come back later.
I did the simple induction and then realized there were only 40 minutes left of the regular time of 100 minutes. In which I had to do an impossible proof, a somewhat involved proof, and find the error in the equation system.
I panicked. Only briefly, to be sure, but there were all the ingredients, just like in the practical programming exam: I’m never gonna make it, I’ll flunk, I will disappoint everyone, they are all so much better, at least in our study group, how embarrassing is this, and so on.
I got my nerves under control and started working on the proof. The assignment was to show, in two different ways, that the sum of an odd number of odd numbers is itself odd. Of course it is. What irked me was that I had seen the proof for this exact proposition just the day before: the problem had been in a previous exam. But at the time I was so fed up with math, and the proof was somewhat awkward, so I ignored it after a quick glance with the certain feeling that our professor would never ask the exact same question again. Yet now she had. I didn’t have much time left, so I tried both a direct proof and an induction, but they both came out rather sloppy. Then the regular time was up.
Did I ever mention that our professor had promised us extra time if we needed it, the proof of our needing it being that nobody had yet handed in and all were still busy writing? I think we can be reasonably proud of the fact that we had managed to communicate this to a large group of people (over 60 took the exam with us), many of which we didn’t know, with enough urgency that in fact nobody handed in early. We got the full two hours.
So I had another 15 minutes to write some very rough illustration of some ideas on problem no. 4, which I won’t dare call a proof, although I was rather surprised to at least have found an example of why the proposition may not work when the function is not injective (the subsets in the domain might have an empty intersection without the intersection of their images being empty, namely if elements of both subsets share the same image). If the professor feels merciful, I may get some points for this.
I never found the error in my equation system though. I just worked with the results of my Gauss elimination to calculate a direction vector so I could write down a complete solution, even though I knew it to be wrong.
All in all, it was a surprisingly easy exam. I am reasonably certain of having a perfect, or near perfect, solution for five of the eight problems (well, with “true or false” you can never be sure), and since there can only be a small error in the equation system, I should get most of the points for that problem too. I feel fairly certain of a B, and an A- is just possible (though unlikely). Mind you, it’s really annoying that I had had the chance to simply memorize the solution for the sum of an odd number of odd numbers problem and was stupid enough to not do it (but then how could I have known?). And it’s a pity that there was no problem of the “show or refute that the composition of two equivalence relations is itself an equivalence relation” sort, because I had studied problems of this kind over and over after having had such problems with them in the mock exam. But in the end I feel the exam was fair and whatever the result, it will be a reasonably accurate representation of my knowledge and capabilities relative to the requirements of the Math 101 course. Mind you, we can still question the wisdom of these requirements. I will always maintain that doing mathematical proofs is not a precondition for being a successful CS student, let alone for working in the field. And it’s still disappointing that you can work so hard and in spite of being reasonably intelligent as well just come out with a B. At the least we might say that this course has a very poor cost-benefit ratio.
But it’s over, and I am sure of having passed, which is more than can be said of quite a number of people in that room. That afternoon I went home with the feeling of having cleared a big hurdle, even of having done so reasonably well, and with the certainty of never again having to cram so much math into my brain in so little time. And with an even more profound fatigue than before. The math exam, simply for the psychological pressure associated with it, is extremely exhausting.
In spite of that fatigue and my “the worst is over” feeling, I managed to spend the one and a half days before the CS 101 (actually it’s called “Elements of Computer Science”) exam reviewing Prolog as well as problems from old exams and trying to memorize as much computer science basics as possible for the notorious question no. 1 for which everything that was ever mentioned in the lecture might be relevant. Since the most obvious choices (elements of a compiler, functions of an OS, subdisciplines of CS and so on) had been in previous exams, and the professor had never yet repeated a question, in about a dozen exams almost identical in general setup, I settled for the more far-fetched things he had nevertheless talked about at length as the most likely candidates for this questions. By the time of the exam, yesterday at 2 PM, I knew by heart the effects of digital disruption on the mail-order business, could name the elements of agile software development, describe the principles of service-oriented architecture, and even explain CORBA.
Yet no. 1 in our exam was a novelty, and in two respects. For the first time ever the professor asked a question again, and the one so notorious we thought it would never come up more than once. And for the first time ever as well he asked in a different way. The first time, it had been “name three notable computer scientists and describe one of their contributions to the field”, and all other no. 1 questions in all other previous exams had also been of the “name three (or two)” kind. The big advantage being, you could pick whatever you remembered. In our case the question was instead “describe at least one contribution to the field of CS for these three persons”. So there was no picking. You either happened to know, or you didn’t.
The scientists were Alan Turing, John von Neumann, and Konrad Zuse. I was half lucky, because like everyone else I had memorized some facts about some, as our professor was so fond of saying, “pop stars of CS”. I had settled for Ada Lovelace (the first person to describe a computer program), Herman Hollerith (the inventor of the punch card calculating machine), and Turing. So I knew a thing or two about him (including his tragic suicide). For Neumann I knew what everyone knows (the von Neumann architecture), and only for Zuse I could remember nothing except that he had built one of the first working computers (or the first?) in the 1940s, and that one of his computers (but was it the first?) had been called the Z3. So I just claimed the Z3 was the first electronic computer.
The other questions were the usual stuff: a formal grammar, pseudocode for inserting an element into a circular linked list, drafting a finite state machine, and Prolog unification. All in all, it was an easy exam, and most people were done after 45 minutes.
So we had an hour to wait until 4 PM, the time our programming professor had announced, on rather short notice, for returning our tests. Quite unusual by the way, as the regulations say professors should grade the examinations within six weeks, and our business administration professor had always said he probably wouldn’t manage to. Yet the programming professor graded two exams within six workdays.
Some of our group went to a local supermarket to buy Coke and cheap spirits to mix. I don’t drink in the afternoon, and particularly not this kind of drink, nor do I like to drink standing around in the street or in a corridor, but I went along for the solidarity. When we returned, we found a large crowd in the cafeteria. Turned out our professor had spontaneously started returning the exams early and down there.
So we received our first grades ever in this study program standing in a circle crowded in the aisle between the cafeteria tables. It was bad news for some, but good news for most, as the results were most encouraging. The practical exam had one of the lowest percentages of failing students, ever: Of those actually showing up, only five had failed (sadly including one of our own study group, however), and most of us had a considerably better grade than we had thought. Remember, this was the exam with the ugly test cases. And the results of the theoretical examination were generally very good, even for those who barely passed in the practical exam. From what I heard, B’s were rather general and even A’s were common. Personally I got out with an A+ in both exams, same as my programming partner, of course, which was somewhat unexpected (but very good for my morale). I can’t completely comprehend the scoring (in the practical exam I got full points for my messy “Part” class that also lacked comments, but some points deducted for my almost perfect deque implementation), but hey, you don’t look a gift horse in the mouth.
We went to the pub in a generally cheerful mood, only slightly dampened by the fact that we had a couple of people with us who had flunked the practical exam and one who had just barely passed in both exams. Originally the idea had been for this to be a term end celebration, deliberately before we knew any of the results, but our programming professor had spoiled this somewhat. It’s hard to be outwardly happy about an A+/A+ when the person across the table has failed in the same exam. But in time, and when people started going home, and we were left with the fifth beer and just our core group, it became a really nice evening.