Computer Science Advanced Courses
CISC 240 - Computer Organization and Assembly Language
This is the course where you really learn how computers work. First, you learn how they store information as you delve into the world of binary, hexadecimal, and two's complement mathematics. Then it's off to machine language and assembly language programming. Not only are these important in their own right, byt they also provide deep insights into high level languages.
In the last part of the course, we turn to digital electronics. Starting with Boolean algebra, we'll learn how things like adders, ALU, memory, and CPUs work on a fundamental level.
CISC 320 - Programming Languages
In the class we briefly review the history of programming languages. Then, we study the theory and principles underlying today's sophisticated programming languages.
The lab sessions are really special. We spend the entire thirteen week semester developing one large project.
- First, we learn a very simple machine language.
- Then, we program a virtual machine to run programs written in the machine language.
- Next, we learn an assembly language that corresponds to the machine language.
- Our next step is to write an assembler to convert assembly language programs into machine language programs.
- Then, we write a couple programs that will be critical for our final two steps.
- Now we learn a simple variant of the Basic language.
- Finally, we write a compiler that converts Basic language programs into machine language.
Students who have completed this project will have an incredibly impressive project to talk about on job interviews. Or, if they go to graduate school, they will find that they have a leg up because this type of project is typical in graduate school.
CISC 325 - Data Structures
Data Structures is a pretty standard course at most schools. The critical data structures and algorithms that every computer scientist must master are carefully and systematically covered in the classes and labs of this course.
This course, however, is special in that it goes beyond the fundamentals of a typical data structures course. Long ago, architects realized that there are certain fundamental design patterns that go into all good architectural plans. A number of years ago, it was realized by a group of four computer scientists, who have become known as the Gang of Four, that there are some twenty odd design patterns that are critical to good programming. As time permits, we delve into these design patterns.
CISC 430 - Operating Systems
In the classroom, we learn about the underlying principles of modern operating systems. Learning what makes operating systems work on a fundamental level is absolutely critical for a computer scientist.
We spend some of the laboratory time in this course learning multi-threaded programming. More and more programming involves two or more things happening at the same time. Just like having two people working together, this does not just double the difficulties; in this course we spend some time learning how to deal with them.
Then comes the really fun part of the lab. In the %newwin%[[CISC Clubhouse]] students are given computers with no operating system whatsoever.
- Their first exercise is to install and master Desktop Ubuntu Linux.
- Once they have mastered Desktop Ubuntu Linux, students install Ubuntu Linux Server. Ubuntu server has no graphical interface. Working at the command line, students learn to install all types of services: databases, blogs, webservers, everything you can imagine.
- Finally, we go on to create our very own Ubuntu Cloud.
This course combines theory and practice in the way that makes Hartwick special.