One of the intents of this blog is to publicly keep track of my before and after impressions of classes to share, and since another semester is complete, it’s time to repeat the process. My before for Fall 2009 is here (and quoted below), and the link chain should go back from there for previous semesters. The big mistake for the semester was time management; I worked out a schedule to handle the time consuming, project-oriented classes better, but I failed to count the time I spent on SC09 against my total time to get things done, and as a result found myself two weeks behind, too late in the semester to fully recover. I managed to walk out of both classes with a B, so it wasn’t terrible, but I definitely missed out on some of the value of the courses because of it.
It would be nice if FlatPress supported a “Read More” feature like some of the other blogging engines, because this is about to be a long post.
EE685: Digital Computer Structure/Heath
– Expected: This is rumored to be the most time consuming class offered by the ECE department at UK, and 1/3 of the grade is derived from a single project. I’ve only had one class with the instructor, and didn’t have a terribly positive experience with him. The biggest day-to-day issue is he has a number of mannerisms that drive me slowly insane (”favorite” example: “In this case” is NOT a flavoring particle). There are few enough English-speaking instructors in this field it would be really wonderful if the native English speakers actually did so. I also find some of his grading policies grating, I once had a concrete example where more points were awarded for syntactically correct, algorithmically incorrect solutions than algorithmically correct syntactically flawed solutions on an exam. This is what highlighting editors are for. The other snag is that the tools we will be using for the big project (Xilinx’s ISE and MentorGraphic’s ModelSim) are both big, hateful pieces of software, which are incredibly ponderous to use, and will do all manner of unpredictable things with your input, sometimes changing behavior after simply restarting the program. I am not looking forward to spending more time with them. Gripes aside, it IS a topic I really, really love, and the opportunity to play with it in depth is highly desirable, and further instruction on the underlying theory should be useful for my research.
– Actual: Not a bad experience, but not as enriching as it might have been. The big problems for the course were pacing, both in the course layout, and my own, mentioned above. The distribution of work, with a large number of time consuming homeworks early in the semester, and very little non-project coursework late in the semester was less than ideal; replacing some of the homework with more checkpoints on the project might have helped. The pacing of the material itself was also an issue; I found the lectures ponderous, and we didn’t make it significantly further or deeper into the material than when I took EE480. I will grant that It is an almost impossible course to schedule well; for a project of that scale to be workable, it would basically have to be two semesters, one for the material and one for the project.
I also found that I liked my old 3rd edition of Computer Architecture: A Quantitative Approach a little better than the 4th edition we used. I’m not sure if it’s just that I know where things are in the old one, but the focus and organization seemed better in the old version. It’s also a little inconvenient that they moved most of the appendices (which are about 2/3 of the book by volume) over to a CD instead of printing. There is also an odd skew in the Henessy and Patterson books that I’ve been slowly noticing as I deal more with computer architecture, but since they are pretty much the definitive texts on the topic, it is appropriate to run a course like this out of the upper level one.
I think the most useful skill I picked up is I now have a much better HDL workflow arrangement, using GTKWave and Icarus on top of my usual Linux platform. I think the key factor in switching is learning to write good procedural testbenches, which are better than doing it manually even with the heavier tools. Because Verilog is actually an IEEE standard, porting from my preferred setup to ISE is usually pretty much copy and run, but there are a few features that don’t translate quite right, particularly to the older version of ISE in the labs on campus. The thing I found most disappointing was that I never managed to get the project working. I still think my design was good, but the experience I wanted was seeing a processor design all the way from design to HDL implementation, and that didn’t happen.
* CS655: Programming Languages/ Finkel
– Expected: I took CS450 (same basic course) from the same instructor (who is a VERY interesting person and a fairly notable figure in computing) a few years ago. It was quite a bit of work(program in a new language every 2 weeks on top of the theory!), but it was the CS prefixed class I feel I gained the most from as an undergraduate, so I have very high hopes that this will prove invaluable as well. It appears to be structured the same way: language theory supplanted by rudimentary forays into various examples, which should be fascinating, I just hope the theory is a little more in depth and implementation-focused for the graduate version.
– Actual: This was a very fun class. Very informative, and very broadening as far as my ability to get my head around different programming paradigms. Dr. Finkel’s lectures, were, as always, excellent, and the spectrum of topics were well chosen. Explanations were conceptually complete, and included historical context, which is often missing in engineering classes. Everyone studying a computer-related field at UK should take at least one class from Dr. Finkel, just for the experience. I would have liked to have seen a little more attention to implementation, but that isn’t really the point of the class so I can’t complain. I’m not sure that it was as enriching for me as CS450, but is strongly suspect that is because I already picked up allot of the important general lessons from CS450. The only other complaint I have is also my own fault; in a case of unfortunate timing, the section on concurrency, which is probably the thing I was most looking forward to in the class, was the week of SC09, so I completely missed it.
The textbook Advanced Programming Language Design(mirrored in full text online here), is really excellent, if a little out of date. It uses interesting examples, either exotic or archetypal, instead of the usual (almost exclusively procedural) familiar standbys and current fads. Being Dr. Finkel’s own book also means it was well-matched to the course. The other book on the topic I am familiar with, which was used for CS450, Programming Languages:Principles and Paradigms, is really inferior by comparison, despite being over a decade newer.
As a final added bonus, there was a paper option for the final project, which I took, and the grading process included editing on writing quality as well as content; something I haven’t had done in far, far too long so I am getting horrendously sloppy. Even though I disagree with some of the style edits (C’s eccentricites are endemic to the language…), having the sentence structure and “its/it’s”-type errors pointed out, instead of just being rewarded for still being able to write something strongly resembling correct English, is really good for keeping me able to write.
All in all, a pretty good semester. Both classes being ostensibly extended versions of things I had previously did detract a little from my experience, and my schedule fuckup didn’t help matters, but neither of those is a condemnation of the classes.