Coffee in the Cafeteria, again. There wasn’t much time for that in the second term that’s now coming to a close with the last couple of exams, databases today and automata theory tomorrow. But just like last term–and in spite of the much higher amount of material to be mastered or memorized this summer–I have now reached the point where studying seems to have lost any marginal benefit whatsoever. It may be because I started studying so early this term that I am now totally tired of it. Or it may be that I have simple already internalized everything I need to know–excepting, of course, the things I have never understood and probably never will.
Like proving problems undecidable by using them to build an internally contradictory Turing machine simulating another Turing machines and thereby proving a problem already known to be undecidable. Unfortunately this technique, which has at least one level of indirection too much for intuitive understanding, figured in the logic exam, and has a good chance to surface again in the automata theory exam, for undecidability was about the only important field covered in both courses. Just in case I collected a few such proofs from the internet and put them on my crib, for their number is limited. In fact, unlike most of my co-students, I am less comfortable with automata theory than I was with logic. Most of them feel that understanding or even drafting automata is more intuitive than transforming first order logic formulas. For me, it’s rather the opposite. I have a good mind for basic math, so arithmetic operations and equivalence transformations don’t bother me. Automata, on the other hand, need a bit thinking through to get right, and there I am severely hampered by my inability to think quickly under stress conditions, particularly where abstract problems are concerned.
Or maybe I just find it easier to see the relevance of logic to programming, as opposed to entirely theoretical automata models.
In any case, the automata theory exam will certainly be doable, but again we will be pressed for time. Databases on the other hand will very likely be completely relaxed. The material presented in the lectures was rather limited–splitting the information in rather atomic bits I needed only 241 flashcards to cover it all–and the exam, judging from those of the previous years, will probably be doable in under an hour, yet we will have 90 minutes. Mind you, that’s the standard I would usually consider reasonable. I will never understand why most of our professors go out of their way to put us under severe time pressure in the exams, giving us more assignments than even they say can be solved within the allotted time. But never mind.
Still over five hours, and I wouldn’t know what I could still do to be better prepared for databases. I know by heart the terms, the theory, and the concepts of database modeling. I know SQL syntax inside and out, or at least so I hope; it will still be tough to get it completely right on paper, without trial and error, but then the questions will probably be quite simple for this very reason. I even know the rather abstract jargon of functional dependency and normalization. Whether that means I can reproduce or apply it is of course a different question. We shall see. At the very least I will have learned something about flashcard-based rote learning. For instance, I do wonder about cloze cards. Say I have a definition in two parts (e.g., what is a database transaction), and two cards that each omit one part of the definition. Given one part, I can easily provide the other, but would I be able to reproduce the whole definition? Worse, would I even think of the definition when just given the term with no clues whatsoever? I suppose that’s the kind of thing I will know after this exam.
Of course, the deeper question is whether rote learning is a reasonable way of studying a practical subject like CS. Shouldn’t we be able to work with databases rather than talk about them in abstract terms? But then that’s what the practical courses are good for. The inconsistency is that we get our grades not for those, but for the theoretical exam based on the material presented in the lecture. Can’t change that without transforming the whole legal basis of our university system I suppose.
The other question that bothers me right now is whether the insane effort needed for the math subjects is in any way justified. You may recall that I had my doubts about first term’s basic math already. At the start of this second term I briefly came to the conclusion that doing all that math had not in fact been in vain, because we could never hope to understand logic and, to a lesser degree, automata theory without the foundations laid in Math 101. Meanwhile, however, I wonder whether it’s not l’art pour l’art after all, because what is all that second term math theory good for? Right now my guess is that it was all a rather convoluted theoretical foundation for a few simple and applicable conclusions, namely not everything is computable, and we have ways of roughly calculating and comparing the complexity of problems and their solutions. The first is a truth I would have been willing to accept at face value without nearly 200 hours of logic. And the second comes down to a single theorem and a handful of formulas. OK, I do grant I am a curious person and I would probably have wanted to know the background in any case. But not to the extent of studying several entirely theoretical automata models to death and doing a challenging 90 minute exam on them.
So if these limited (albeit fundamental) insights were the whole purpose of the exercise, I consider two courses crammed with theoretical material quite over the top for communicating them. Whether anything else from these two advanced math courses will ever again become relevant for our further studies remains to be seen. Since it seems likely the same professor will teach us algorithms and data structures in the coming winter term, I suppose he will make a point of continuing the theoretical perspective and thus justifying the importance of last term’s material … Or maybe he will come round to a more practical approach. At one point he seemed to say that algorithms was a more applicatory subject. In fact he said it was the most practical course he ever teaches, as he explicitly considers himself a theoretician. I wonder if this bodes well or ill for the course?
Enough of the brooding now. My programming partner has arrived for some last-hours studying, so back to reality, i.e. databases.