While waiting for the last exam on Wednesday, I kept checking the online grade administration system for signs of the grade for either programming or machine-oriented programming. (Inexplicably this system is unable to notify the user by email when an upgrade occurs.) Just before the exam I suddenly discovered a new grade entry, the first in this term’s box. To my utter surprise it was for databases, the exam we had taken less than 24 hours earlier! At this time there were 6 or 8 of us hanging around in the cafeteria, and I startled the whole crowd by suddenly exclaiming “I’ve got an A+ in databases.” Nobody had expected that grade to be out so soon. And apart from myself, nobody had brought a computer, so everybody checked their grade on mine. Amazingly, in spite of the really quite easy exam, the grades were all over the place. One of our group had even failed. I think many people underestimated the course because the material was easy to comprehend and as I said quite limited. Since we were not allowed to bring a crib, you still had to take the trouble of learning it, but I suppose most people concentrated on the more difficult courses and thought they would just sort of do this on the fly. Personally, I had always done a few hours a week for this course for the past couple of months, for a total of just 45 hours outside lectures. And that includes doing the homework assignments for the practical course accompanying the lectures, so it’s really just a quarter-hour per day for actual studying. That’s really a very small price for an A+ that was almost certain.
So I went into the automata theory exam in a sort of elated mood. It quickly evaporated when I perused the exam questions in the ten-minute grace period before we were allowed to write anything down. First of, they were endless–I didn’t count, but certainly more than 20, maybe close to 30. And only some were basic stuff. A whole section at the end was devoted to involved proofs, including a final killer where we had to provide an algorithm for reducing the problem of finding whether a polynomial has a positive root to one that simply indicates whether it has a root at all. That was so far removed from anything we had done in the course–or in fact ever–I had problems believing I was in the right room.
So quite unlike the logic exam with the same professor a few days earlier, this was the bad kind of exam: Constantly pressed for time, I hardly had a chance to think anything through. And that in a subject area where thinking things through is what counts. In logic, you can mostly just apply algorithms. With automata, you have to reflect what they do, or what they should do (if you are required to construct them), and with proofs it’s all about having the right idea anyway. Unfortunately, in one of the two areas where we had to mechanically apply a procedure in this exam, I quickly realized that I had neither really understood Kleene’s Algorithm, nor practiced it enough. Mine simply didn’t work, i.e. it never produced the correct regular expression. So much for not having known what else I could have done for this exam! I did probably solve most of the minor questions on context-free grammars correctly. But I messed up a proof for a simple deterministic finite automaton, because I didn’t take the time to check whether it actually did what we were supposed to show. And that in spite of the assignment’s saying explicitly “show or refute“. Will I ever learn that? Making a non-deterministic finite automaton epsilon-free was a mess too. It had five states connected by just a single non-epsilon edge (i.e., one that actually takes an input to move from one state to another), so basically any state could do more or less the same, including accept the word: A spider web of edges, most of them crossed out and scribbled back in at least once.
When the professor announced that the regular time (90 minutes) was up and we should familiarize ourselves with the thought of handing in soon–we had another 10 minutes to complete whatever we were at right then–I had done the basic things, including my failed attempt at Kleene’s, and scribbled some nonsense on one proof assignment (is the question whether a context-free language is finite decideable? I said yes). But I had a glaring gap of several more involved proof assignments–basically the whole final third of the exam, including most of the questions with the hightest point count. So what to do? At this point I suddenly had an unlikely inspiration. One of the proofs involved showing that a regular language was still regular if you dropped in a certain symbol somewhere. What occurred to me then was that my programming partner and I had done this exact proof two days ago: You make a copy of the automaton that accepts the original language and connect the corresponding states with a single edge that takes the symbol in question as input. So when that symbol occurs at any point, you just switch to the copy and complete reading the word there (to make sure the symbol is actually being read once, you have to remove the accept state from the original automaton and the start state from the copy, evidently). I sketched that idea within the remaining minutes, but still handed in the sheets with a feeling of humiliating defeat. Not only had I done some things wrong that were definitely doable; unlike in the logic exam, I hadn’t even come close to finishing. And this was the exam that was generally supposed to be easier than logic!
There was a small consolation. Before we left, we were “unofficially” informed of our grade in the logic exam, and not entirely unexpectedly I had another A+. In fact, there were six A’s among the 36 people who had taken the exam, and our core group took four of them. Unfortunately, in a way this outcome made the automata theory exam rankle even more in comparison. How could the one be so doable, particularly involve only a token proof assignment, and the other one be so hard–with the same professor?
BTW I questioned the professor about his earlier suggestion that at UAS we were taking things easy in the math courses. I had meanwhile checked his claim that at UHH the same material was covered in a single course instead of two, and fact is, yes, they are doing both automata theory and logic in what they call “Formal Foundations of Computer Science”, but no, they are not really doing it with the same depth or breadth. He admitted that, but still clung to his claim that in the end they were covering less material in even less time. So what gives, I asked. Are UHH students all math geniuses? My programming partner suggested that probably UHH attracted the more theoretical-minded kind of CS student, whereas UAS took the more pragmatic sort. The professor pointed out that first, of course math at UHH weeded out students by the score, and secondly, everyone there had a high school diploma (Abitur), whereas a high percentage of UAS students had not. I do doubt that’s true. In our semester group, I know only of one student who has a technical diploma (that qualifies only for a certain range of study areas) and two more who don’t have a diploma at all. That leaves well over 90% with exactly the same formal qualification as any UHH student.
We went to the local pub again, just like at the close of the winter term, but the mood was somewhat different. The second term had been much tougher than the first, the final exam had been an unpleasant experience rather than the breeze CS 101 had been last time, and the outcome of the programming exam is still looming on the horizon. Nevertheless, plenty of beer over more than 7 hours helped us to relax and realize that, all in all, we are doing fine. And particularly, we are a very competent, active, and socially cohesive semester group. Yes, I suppose enough alcohol can do this to any group. But in our case, even sober, I am convinced it is true. I was very lucky to end up in just this group.
Nevertheless, the first day after the end of the term greeted me with a slight hangover and a moderate depression. A large part of it was of course exhaustion after an extremely demanding term and the inevitable feeling of purposelessness that comes with lessening tension. Just like last term, in the first 48 hours I couldn’t face anything even remotely CS-related on the one hand, but was unable to relax and let go of it on the other hand. Most of all, the automata theory exam rankled me. Again and again I was replaying the details of my failure to do better, and scolded myself for not at least practicing Kleene’s Algorithm more. For the first time since the Math 101 exam I was faced with the perspective of a mediocre grade. Also, I was severely disappointed that you should work so hard and not be able to get a better result. According to my log, I have spent over 110 hours outside lectures, i.e. close to the completely insane official requirements, on this single course. Above and beyond doing the homework and recapitulating the lecture slides, I have read almost the entire classic textbook on the subject, done a lot of research on the internet, and so on. And since we will have algorithms with this same professor next term, I was sort of becoming worried how this would turn out. Doable with a lot of work, like logic? Or almost not doable in spite of a lot of work, like automata theory?
But more to the point, on a more general level I felt I had failed exactly where it mattered: In the very theoretical foundations of our discipline. You see, in the end whenever you talk CS, it’s ultimately about Turing machines and that kind of thing. Just today I found that a novel I am reading right now (Diamond Age by Neal Stephenson) has a several-page metaphorical introduction to Turing machines in the guise of a fable. Can’t escape these things. So somehow I had managed to taint my entire fascination with my field of studies with this one botched exam. As if I were not worthy now to even think about computers.
Or at least so it appeared to me in my slightly depressed and exhausted state. A couple of days sleeping some more and getting my mental distance would probably have cured me. Except yesterday afternoon our professor sent the stats for the exam in an email. Just the stats, no individual grades, obviously. So what I learned was that the 29 people taking the exam had done rather well, all in all. Only 4 had failed. On the other hand, only 3 had an A, and all of them an A+. There were no straight A’s or A-‘s. The bulk was between B and D, as it rightly should be. And since I had hardly completed two-thirds of the exam, I was almost certain to be in there somewhere. Hopefully with the B’s. Since there was no way I could be among the A+’s, particularly since I had a very good idea who those would be.
Even though our professor had said the actual grades would not be in the computer system for a few more days, and it being Friday afternoon, I kept checking, but there were no updates. When I switched the computer off for the night and came down to the living room around 9 o’clock that night, the short message signal on my phone went mad. The grades were out! With shaking hands I logged in, half expecting something with just one digit (i.e., a C+ or worse), but there wasn’t anything like that in the list. A second glance revealed nothing but A+’s. One for databases. One for logic. And on top of the list, one for automata theory. I could barely believe my eyes. Then I sort of starting rolling on the floor laughing. That result was really insane.
Mind you, what it means is that the professor must have gone out of his way to get a decent result. Maybe realizing belatedly that the exam was rather a tall order, he must have lowered the grading ceiling to something like at best two-thirds of the total points. While I would certainly have preferred him to do a doable exam in the first place, I am relieved to learn that he is not afraid to pull the emergency break if necessary to ensure an adequate outcome. Particularly since I now feel better about taking his algorithm course next turn.
I know, at this point you are probably thinking what some of my co-students say, “this guy is forever worrying and complaining, but in the end he always gets an A.” (Even my wife said a C once in a while would be good for me to lower my expectations and thus take some pressure off.) I can’t deny that I am generally the worrying kind and that three times now I’ve been rather pleasantly surprised by a grade much better than I expected, but never the other way round. (Mind you, I do prefer it that way!) Still, I usually have quite a good idea of my performance in an exam. I knew logic could well be an A, I was quite confident databases was (go back to check if you like!), and last term I was right about three out of five exams. In the three cases these two terms where I did indeed do better than expected, everyone did, i.e. these were exams where the professor either awarded points extremely generously, or later adjusted the grading scheme to ensure a favorable overall result.
One can argue, of course, about the ethics of that–adjusting the expectations so to match the result. Theoretically, it might be a slippery slope at whose bottom we might end up where reasonable expectations aren’t being met by the students without the grades giving any indication of that. But actually I believe in the courses where this happened to us the expecations were rather too high in the first place. The automata theory exam, just like the programming one, was certainly beyond being doable even by the best students, at least in terms of number of assignments per time. So the adjustment, while unexpected, was–at least in my humble opinion–entirely justified. Let’s hope the programming professor sees it the same way.