Finally a breather. With three weeks of lectures left before the exams, our logic professor has announced that he is through with this term’s subjects. This week there will be no lecture, and after that only question time and repetition. Automata theory too is likely to be over after this Wednesday, judging from the program, and in both courses there won’t be any new homework assignments. So the feeling of being constantly and utterly swamped by the masses of new material presented week after week for the past three months in the math courses is finally going to abate somewhat. My cheat sheets for both courses are also more or less current right now, if somewhat on the long side (for I couldn’t resist copying every stupid definition for the most obvious things, just in case we need a formal proof of something at some point in the exams). So there will be some time now to review the material. I am not too confident, as no doubt the review will reveal that I have forgotten half of what we learned and am unsure how to actually apply the other half, but all in all I am confident I will at least pass in both courses.
The other three courses are basically under control by now, I do think. The flashcard studying sprint I started after the test where I blacked out has made me rather confident about machine-oriented programming, and in fact when we finally got the third test back I had a perfect score, 24/24. I am still fighting with pointers in C, particularly with the weird syntax for handling string arrays, but that’s really not something success in the final exam will hinge on.
For programming (the Java course) there can be at best one more and probably rather brief exercise sheet, since the practical course will meet only once more, and there we will also have to present whatever we made of the media player project. That, too, we have basically pretty much wrapped up (although my programming partner is always ready to do a lot more). Anyway, I am fairly confident about my programming abilities, so the worst of my worries regarding the exams is another confusing test suite, this time without the ability to study the source code for the tests, as we could with Ruby last term (in Java, a compiled language, the test will be a .class file, i.e. machine code). With respect to studying for the theoretical part of the exam, I spent a few days going through our professor’s slides and comparing them with a 401 (!) page draft document on programming Java he made available on the internet, in order to compile notes on a few critical new subjects, such as generics. Rather belatedly I started reading Effective Java by Joshua Bloch (2nd ed., 2008), and found it not only a lot more concise on most matters but also the obvious source of most of the dos and don’ts our professor tried to instill into us these past two terms. So I am feeling rather on top of things right now. Anyway we are allowed to bring about everything this time, lecture transcripts, sheets, even a book, if we like, so knowing things by heart is only a minor advantage.
The gap in my preparations until a couple of weeks ago has been databases, a subject not terribly interesting on the one hand, and not overly complex on the other. It was only when I had a glance at some of our professor’s exams from previous years that I realized that this course, too, needed some serious work after all. For one thing, we will have to write correct SQL (the most common database manipulation language) on paper, i.e. without a chance to check its validity, and that’s a pain for someone like me (and many of my co-students). I usually rely on the syntax checker of my IDE to tell me what’s wrong with my code. And SQL is a horribly counterintuitive, convoluted language with a lot of nested parentheses, so without a lot of trial and error with respect to the results it’s extremely hard to get right. For another thing, the rest of the exam will be reproduction of basic theoretical knowledge– defining terms, describing problems, enumerating attributes of concepts, and so on–without the benefit of as much as a single cheat sheet. So it’s all about rote learning, and rote learning of stuff that’s boring like hell. Flash cards to the fore!
With three courses basically in hand, and the two math subjects being the hell they are, but at least now leaving me some time to review the old material rather than be overwhelmed with new concepts week after week, I feel the pressure is somewhat subsiding. There is a fair chance we will soon have survived the infamous second term, and hopefully without failing too badly anywhere.
Of course, by now our first-term tutor, who back then was in the second term herself and assured us it didn’t get worse than the second, says the third term is actually the worst! Admittedly that sounds a little as if the worst term were always the one you’re in right now. But at least it seems obvious that the third is not going to be a lot easier than the second. Afterwards, by all accounts, there will be more actual programming and less rote learning, more autonomy and less time pressure. So there is something to look forward to.