About a year after joining Intel I started to take the classes required for a Masters degree in Computer Science at OGI. After quitting twice, having a second child, watching OGI's enrollment drop by 90% (and their subsequent purchase by OHSU) I finally finished. What follows is my attempt to document the classes and some of the class projects I worked on. I am writing this two years after graduating so some of the descriptions may be a bit thin.
CSE 521 - Introduction to Computer Architecture
I had initially decided to take this class first as I was working for the computing support group in the processor group which had designed the Pentium III processor. I figured this class would help give me the greatest insight into what the group I was working for was actually doing. Seeing as how the class was an "Introduction" I figured it would be a great place to start, nothing could be further from reality.
Several things went wrong with this class. First, I had not taken a real class since graduating with my undergraduate degree some five years earlier so I was already having a hard time readjusting to actually taking classes and doing actual homework. On top of that the book was terrible. (I'll try to dig up the name at some point and post it here but the book was really complicated to follow.) This was also not just my opinion as nearly everyone I have talked to since has agreed that the book was bad. To this we add two instructors who had never taught the course. They were good instructors, but since teaching a class is not a trivial task they ended up often lecturing directly from the book, which was of almost no help. Lastly, there was no TA for the class so our homework often went ungraded for long periods of time which left me with no feedback and even less motivation to actually do the homework.
The fall out from all of this was that I had a hard time caring about the class. I first received a C in the class and only after arguing with the instructors was I able to get the grade promoted to a B. In retrospect I should have taken this class as one of the last classes in the program and not the first. It was after this class that I decided to drop my quest for a Masters for the first time. At the encouragement of my wife I returned in the winter to take CSE 514.
CSE 514 - Introduction to Database Systems
My second class at OGI was a much better experience. I had already been using SQL databases for several years so the first third of this class was mostly review for me. The rest of the class served as an excellent formalization of what I had been teaching myself and clarified a lot of issues I had been confused with.
It was with this class that I started to consider focusing on a degree in "Data Intensive Systems" which really just means a focus on database systems.
CSE 513 - Introduction to Operating Systems
This class taught me more about operating systems than all my years as a system admin. We worked on the academic operating system Nachos which taught me a lot about operating system internals. To the Nachos operating sytem our group added a virtual memory subsystem and file system. This was probably one of the most time intensive classes for me as I remember spending hours and hours debugging kernel error messages and crashes. I am a little disappointed in myself that I got an A- in the class but I can't recall why.
CSE 500 - Introduction to Software Engineering
This was probably the only other class I disliked at OGI. Either I was not yet ready to learn about software engineering concepts, or I felt the topic was outdated and did not apply to me. I honestly don't remember. These days I have been trying to learn Adgile Software Development practices. I got a B in this class and probably deserved it.
CSE 533 - Automata and Formal Languages
I liked this class and I remember that this was the first time I truely understood how Perl type regular expressions worked. This helped me to explain regular expressions better in the Perl classes I was teaching.
CSE 511 - Principles of Compiler Design
I loved this class. Although we bought the "dragon" compiler book for this class it was barely touched as the professor taught this class mostly from his own notes. Building on the Automata class we wrote a top down parser and then moved on to BNF grammars. Using bison we wrote a play language called Finprol which compiled down into NASM assembly, which could then be compiled to executable code for Linux or Win32. Our language supported blocks, scoped variables and recursion. We were in the process of exploring common sub-expression elimination when the class ended.
CSE 581 - Computer Graphics
This was my first elective class which I took simply for my love of 3d graphics. I had taken a 3d graphics class in undergrad which I loved so I jumped at the chance when I saw it was being offered at OGI. The class was nothing short of awesome. It was taught by Roy Hall who was a pioneer in the field and who is now the CTO of Thetus. Everyone in the class started off writing their ray tracer in the enviornment of their choice. I started with Java on Linux, but when that proved too slow I jumped to Qt on Linux. For my final project I enabled caustics for my ray tracer using a paper I had read on Photon Mapping by Henrik Wann Jensen. You can view the images I created in this class here.
CSE 532 - Analysis and Design of Algorithms
Although I enjoyed this class, I had taken a simular class (using an earlier edition of the same book) while in undergrad so I found this class mostly a review. The instructor was Mark Jones (of HUGS fame) who I found to be an excellent professor.
I believe I had a good rapport with the instructor so, as is my style, I wrote a little joke at the end of my evaluation form. Mark is from England and talks with an accent so I wrote "please drop the phony accent, it just gets in the way", knowning full well that it was not phony. I might have even added something about how the accent "may work on the girls, but it just gets in the way of the class," but I honestly can't remember the full extent of what I wrote. I probably chuckled to myself and didn't give it another thought.
It was not until a fully year later while I was sitting in my CSE 550 class that I casually overheard two students talking together when one of them commented that the professor for a different class had mentioned today that he once received a review stating that a student thought his accent was phony. The professor was not angry or upset, but more could not believe that anyone would think he was faking his accent. Since I had mostly forgotten about the joke it did not even occur to me at the time that they were probably referring to Mark Jones and that he was likely referring to my off the cuff joke. It does humor me to think of Mark getting in front of his students each year and telling about the time he got a review which commented on his phony accent. So Mark, if you ever read this, he he he ... that was me.
CSE 580 - Principles of Databse Systems
This class was taught by both Dr. Lois Delcambre and Dr. David Maier. The class was interesting but to be honest I don't recall too much about the class at the moment. I do remember that I like both of the professors, Dr. Delcambre I had taught my first database class and Dr. Maier is well known in the field. If I recall, this class was something of a survey of the various database languages. I remember we covered Datalog and a few other, not as well known languages. We also spent a portion of this class reading current databse related research papers and talking about them in the class.
CSE 541 - Database Implementation
This class was taught by a new instructor to OGI who had, at one point, worked for one of the major comercial database teams. I think she might have mentioned IBM at one point so perhaps it was the DB2 team. Regardless, she was an awsome professor who taught us a lot about how "real" databases are built. I did have some differences with the TA as I think, even to this day, that he was on a bit of a power trip. However, the professor was excellent.
CSE 583 - Real-Time Rendering
This class spent a lot of time learning how to program the video card to do very fast real-time graphics. However, what I did not realize when I signed up for this class was that it was mainly intended for those people who were in the PhD. program in real time rendering. Aside from me, everyone in the class knew eachother and the professor and were all very surprised to see me in the class. Another 3D graphics class it was not, but I still enjoyed it and felt I got something out of the class.
CSE 550 - Spoken Language Systems
I think I took this class as it was one of the only classes being taught in the Summer and it had a condensed schedule so the class was only like 7 weeks longs, which left enough time for me to still enjoy the Summer. The class was okay, but we had to use TCL which I don't particularly enjoy so all in all the class was okay, but not one of my most memorable ones. The final project for this class was something like an Eliza system where you can ask the "Doctor" for help and she advises you based on your input. If you have never run Eliza then try loading the "doctor" module in emacs.
CSE 524 - TCP/IP Internetwork Protocols
By this time I was mostly done with my core classes so I was taking general and database electives. This class covered the internet protocol stack from the bottom to the top. We started out by calculating how "long" a bit is when it goes over an ethernet cable, and worked our way up to applications written on TCP and UDP.
For my final project in this class we had to implement a networked application. My application was a network game of Pong, written in Python. Ball and paddle updates between the client and server was written on UDP as they needed to be quick. If packets were dropped it was not a big deal as the client game could guestimate where the ball was going. However, I also added a "chat" feature so the two players could talk to eachother while playing. Obviously this is not entirely practical in Pong, but I was going for functionality, not practicality. The chat was written over TCP as dropped packets in a chat would mean missed letters. All in all it was a fun class and a fun project.
CSE 528 - Cryptography
I truely loved this class. The professor was awesome and I loved the topic. This class started with simple cyphers and took us all the up to the enigma and then to RSA and DSA. Along the way we wrote an RSA encrypter and decrypter and spent a lot of time learning to break simple encryption schemes by hand. My only regret for this class was that after the mid-term (which I did quite well on) I got a pinched nerve and suffered significant pain in my left arm. To this day I still have a small patch on my left arm which has no feeling. This greatly distracted me from both work and school and as a result I did not do well in the second half of the class. I ended up with a B+ which is still good, but not what I was hoping for.
I took this class just before OGI took a real nose dive. The instructor who taught my class ended up leaving the following year and took a job at Intel and for a while worked in the same building and floor as I do. I heard that the replacement instructor was something of a joke and the students no longer build their own encrypters.
CSE 542 - Object Data Management
My last class for my CSE masters. This one was taught by David Maier and again we spent a lot of time reading over current research papers about object oriented databases, and object relational databases. I think we also had a project we developed using Zope which is probably one of the only real object oriented databases out there (the rest being more like object relational systems). Although I remember liking the class, I don't think it was very memorable.
Two or three months after my last class ended ten of the OGI professors left to work at PSU in what was seen as a snub to the new OHSU management. I returned to take my first (and so far only) year of electrical engineering.