Peter's undergraduate subjects
As an undergraduate, I specialized in Systems, with minor
specializations in Networking and Databases. (That was back in the day
of specializations, before the Threads curriculum.) I've described
these classes mostly for the benefit of current undergrads who might
be considering taking them.
- CS 3210 – Design of Operating Systems
- Although this is often thought of as an "introduction" class, it
would be better to call this "micro", as in micro- and macroeconomics.
This class explores many of the components of a major operating system
by studying how Linux implements them. The big ones include
kernel-level locking constructs, interrupts, the scheduler, memory
management, file systems, and more recently, access control locks.
Projects involve writing new components or implementing new techniques
on an older kernel.
- CS 3251 – Computer Networking I
- This class covers all the basic stuff about networking and how
things work today, flaws and everything. (Other classes cover how
things should work.) Basic bus-style networks, up to bridges,
hubs, switches, and modern Ethernet, protocols at every level, and
routers and routing techniques.
- CS 4210 – Advanced Operating Systems
- As mentioned above, this class is really "Macro Operating
Systems". It spends a lot more time in user-space than 3210, and
explores problems that affect all operating systems (and the
applications that use them) and many possible solutions to these
problems. The project is to build a multi-threaded HTTP server and
test client, then a proxy server, and then implement a function on the
proxy server that modifies some of the incoming data. For each part,
testing must be done to determine how various parameters (number of
threads, size of file, etc.) affect performance.
- CS 4240 – Compilers
- This class is kind of a big momma: your single on-going project is
to build an optimizing compiler for a teaching language called Tiger.
Components of such a compiler are: lex, parse, convert to an abstract
syntax tree, type check, manipulate the tree into a different form,
generate assembly, perform graph analysis, optimize by using the
graphs, and assign registers. The lectures and tests cover a lot of
the theory from a high level.
- CS 4400 – Introduction to Database Systems
- Industrial Engineers are required to take this class, and it is a
specialization for Computer Scientists. It covers all the major points
in relational database theory (no NF2 or anything) and
design. The project varies, but always involves designing and
implementing a database for some particular use. (When I took it, it
managed political campaign finance tracking.)
Want my advice? Just ask me for
it. But I'll give you some basic advice here anyway: