So the die is cast. Our study group, as a body, has cleared all the hurdles and will be admitted to the exams in all five courses. It was touch and go for one of us in machine-oriented programming because after the last one of these nasty little tests he was exactly one point short, but he was allowed to repeat the test and passed on the second try. In databases the last practical course session was designed as sort of a stress test: Based on their database schemes for a webshop developed in the earlier homework assignments, three groups had to simulate an order chain from the customer to the shop to the supplier, in real time. We failed all of us horribly. Interestingly, the professor, who had earlier announced that this exercise would decide over admission to the exams, seemed sort of satisfied with our failure and the conclusions we drew from it. He seemed to consider it the real lesson of the course and officially cleared us for the exams on the spot.
Registration for the exams closed yesterday night, so we’re committed. There is one last week of lectures left before the programming exam next Monday, then machine-oriented programming on Tuesday and logic on Friday, the latter being, of course, the major problem. Still many hours to cram some last things into my mind, though already I am beginning to feel tired of studying and do wonder whether it’s still worth it. At some point it might be more useful to start relaxing and make sure I go into the exam with an easy mind. At this point, after many weeks of frantic studying, there are very few obvious gaps left in my knowledge–at least gaps that I would be aware of. There is the occasional discovery: Just yesterday I finally understood the marking algorithm for Horn formulas, after I realized I had missed exactly the central point before (that the clauses have to be in implication form for the algorithm to work). And maybe I finally got the idea of reduction proofs on undecidability with the universal Turing machine. On the other hand, there are those areas I won’t understand regardless of how many more hours I spend staring at books and slides (sigma algebra or the lambda calculus, for instance). There my consolation is that they were so little prominent in the lecture that there is hope they won’t figure in the exam at all.
Right now it might be more useful to practice the things I know rather than drive myself mad with things I don’t know yet. In the end, with the time pressure in the exams being what it is (and this term no kind professor seems inclined to give us an additional 30 minutes like in Math 101), it’s all about nerves. Chances are I won’t have slept before the exams and will be jittery like hell, so expecting to have creative ideas or time for thinking through a solution to a problem I don’t really understand is idle. Being able to do the simple things in your sleep, like an automaton, so you won’t be derailed by the necessarily adverse circumstances, is the ticket. Not a great performance, but a reliably solid one. Rather skip a nasty problem or two than spend precious time on trying in vain to solve it. If there is time left in the end (not likely), I can still try and scribble a vague line or two in order to maybe get some extra points.
Because let’s face it, the amount of material presented in logic this term was insane. In just two lectures we did every related to predicate logic. In two more, we were given a rapid tour of sigma algebra, equation logic, primitive and μ-recursion, the lambda calculus, and counter machines. Each of these subjects except the last is large enough to fill books or hold a separate full-term lecture on, so how could our professor expect us to grasp them this quickly, let alone reproduce any of it? As I’m wont to, I banged my head against the wall very hard for several days trying to understand primitive recursion (with some success) and sigma algebra. I even got myself a new book just for that latter subject and over several days tried to make some sense of the terms, at least, but finally I realized that the cost/benefit ratio of this enterprise was just too poor. So I finally filed this under “won’t make the difference in the exam.”
But that’s logic, one course among five. So I probably shouldn’t set my expectations too high there and console myself with the fact that none of the other courses has any material that is such a mystery to me as these few areas from logic. Both rote-learning subjects (machine-oriented programming and databases) are under control, and I learned quite a few new things about Java in the last couple of weeks (mostly with the help of Effective Java), so I am confident there. Even in automata theory most things are conceptually completely clear to me and it’s all about practice now.
Of course, in the end it’s still a pity that the grades will depend not on my understanding of the material but on my performance under stress in the exams. But then it’s the same for everyone else, more or less, even if people respond differently to stress situations. My programming partner, for instance, seems entirely unaffected. But then he’s probably certain of his A+ in all courses anyway. That sometimes makes it hard for me to study with him, because he has problems comprehending why I am not getting things that are obvious to him. Particularly Turing machines (let alone Turing machines simulating other Turing machines) is something I have troubles imagining, whereas he seems to have some natural sense of multi-dimensional abstract thinking. But hey, it’s still better to be paired with someone I can learn from. Even though the situation is often awkward and strains my self-esteem.
So for the rest of the week it’s practice, practice, practice, repeat, repeat, repeat, ad nauseam, and then a good night’s sleep, hopefully, the night before Monday.