I got myself a flashcard program. You learn new things even at my age, and right now I am learning how to learn. You remember the nasty little test in machine-oriented programming where I blacked out and barely got a passing grade? I was so rattled after this experience that for the next four weeks I concentrated most of my studying effort on making sure this could never happen again. Next time I wanted to know all the arcane details of Assembly Language and bit manipulation by heart, so that even on a bad day I would pass the test. I spent a few days transferring all the petty details on flashcards, and then I conscientiously studied them every day, until I could easily reproduce, along with every petty detail of every language command, even the most complex stuff, like the exact order of the bits in a 32 bit command, or how to write a counting loop (yes, that’s a for-loop for the high-level language writers, but in Assembly it’s no mean feat). Even so I was anxious, but the next test went really well. I knew I knew all the stuff, and this time I could also reproduce it. In addition, that test was more about understanding and explaining, for instance how parameter passing and the stack work with Assembly, than about every little detail of the language. (This might be a result of the professor’s finally realizing that with the same test written by four successive groups of students three weeks apart, all groups but the first can simply memorize the answers, provided they are short enough.) In any case, I am confidently hoping for a grade good enough in this third test so I won’t have to worry about the fourth and last. In fact, with what I have learned from my flashcards, I will probably be able to get a good grade in the exam itself. So with a lot of concentrated effort, this little crisis has passed.
Still I am exceedingly busy with the other courses. Our programming professor–the one who spent the first half of the term in China–has unilaterally decided that, unlike last term, when we had a programming assignment every other week, we can now easily spare the time to do one every week. These assignments are of medium size, rather than small–with the last one I spent about 20 hours I should say, within five days–and they come on top of a major programming project to be completed by the end of the term, a media player complete with a graphical user interface, or GUI. Admittedly my programming partner and I again overdid it, designing something with a complete media library and an SQL database behind it, and to boot we started with implementing these major building blocks, rather than with a nice presentable GUI with not a lot behind. So far we have 2,600 lines of Java code, combined. But even with a lot less effort this would be a major project, particularly considering that at least to my programming partner coding comes about as easily as breathing, and while I’ve got nothing on him, I don’t have any real problems writing reasonable Java rather efficiently either. So if it’s a big project for us, I do wonder what kind of effort it means for many of our peers.
And that’s even more true for the math courses, automata theory and logic. Apart from the lectures themselves, each of which needs at least another couple of hours for me to go through the slides again, copy the formulas to my cheat sheet, and in typing them try to understand them (a rather effective method, and the actual justification, I suppose, for allowing us a cheat sheet for the exam in the first place), the homework assignments are really becoming a major time sink. There was a time early in the term when I could do the bulk of the four weekly assignments in each course on my own in less than an hour. By mid-term it regularly needed all four in our study group to accomplish the same, and increasingly, particularly in logic, there was one really nasty assignment among the four that might take us an hour of discussion and then we still didn’t have a solution and the more eager of us would spend a couple of hours more over the weekend or so.
But then two weeks ago logic homework really changed pace with an assignment in four parts that asked us to design and program a conjunctive normal form resolver for predicate logic. Two of us spent 90 minutes coming up with the interface (which was just one assignment of the four), then all four of us programmed for the same time until we had the thing about half done. Fortunately the deadline for this exercise sheet was not next week as usual, but the end of the term. So we thought, rather naïvely I suppose, that’s it, that’s the homework in logic for the remainder of the term. Not so. Next week’s assignment came as always, and this time it involved designing a list and tree data structure in the obscure logic programming language Maude.
None of us had ever before even heard of Maude. And mind you, a logic programming language is as a rule not the most accessible of languages–remember what effort doing even the most basic things in Prolog required–and Maude is no exception. There is a basic introductory tutorial which greets the user with the in my opinion immortal statement
If you’re looking for an in-depth exploration of the capabilities and mathematical foundation of Maude 2.0, this is not it. You’re looking for the Maude manual, a wonderful comprehensive tome that weighs about as much as a newborn child. This primer is meant as a more casual, more cursory introduction to Maude; the main goal is to get the beginning user […] programming in Maude as quickly and painlessly as possible.
This casual, quick, and painless introduction (found here) is 137 pages long. And that’s what we should digest for just one half of a weekly exercise assignment in just one course out of five? An entirely new logic programming language just for that? And mind you, why Maude? Why not Prolog, a language whose basics, afterall, we have already covered in CS 101, and which we are supposed to need again when we do Artificial Intelligence in the fourth term?
In this situation for the first time in two terms I considered going on strike before a homework assignment. So far, we had always tried to submit the best possible solution, and usually succeeded. But the effort required for doing this well was so out of proportion to the relative weight of the assignment–one half of one out of 12 or 14 weekly assignments in a single course–that I would have felt well justified in just submitting a few pro forma lines, as some of our peers usually do, and be reasonably certain of still getting admitted to the exam, at least based on the many excellent solutions we had presented so far.
Instead, of course, two of us sat down and did the compromise thing–we found a sample solution on the internet (actually on the same website that provided Maude itself), adjusted it to our purposes, which needed understanding just enough Maude (knowing Prolog actually helped) to know what these few lines of code were doing, and after 90 minutes were confident that our solution was probably good enough to pass and certainly well in excess of what could reasonably be expected of us. Then we did the homework for automata theory as well, which took another couple of hours, and then thought we had done our share for math for this week.
Which was when we found out that the next exercise sheet for logic was already out. And true to form, it asks us to complete yet another couple of programming tasks: Data structures, parsers, and debuggers for a counting machine (the type of theoretical computer model whose language only increments and decrements counters plus has a single jump condition based on any counter being zero, so it makes Assembly look like a high-level language) and for a Turing machine (a theoretical automaton model that reads and writes from an endless tape of symbols). Now I can easily come up with a data structure three times in an hour, but actually writing a working parser or a debugger is an entirely different kind of animal. Even one of those might qualify for a weekly assignment in programming. Yet this is logic, not programming, and it’s four assignments, two of which casually include two programming tasks of this kind. Quite over the top in my opinion.
So yes, I am busy as hell right now. No time to spare for doing anything but the most pressing things, and even those take now regularly 40 hours a week outside lectures, with hardly any room for actually studying towards the final exams. In fact, I can hardly afford writing this blog any more. I do hope next term there will be more time for that, and things to report other than being completely and utterly swamped.