CS165 is a heavy systems class. It has a hefty semester-long project that will stress your abilities in the following areas:
- C programming
- Data structures
- Computer architecture
These areas are essential for CS165 and some basic familiarity with all these areas is advised so you can keep up.
The class uses the C language. This is because a low-level language is required to design and build efficient systems as we need to have full control of how we utilize memory and computational resources.
The basic concepts of the C language are quite similar with other programming languages. Once you know how to write for loops and if statements you are good to go and then learning a new language is primarily about getting familiar with the syntax and its structure which is typically a trivial task.
You can easily find several detailed tutorials online to get you started with basic C concepts.
Here are some areas to focus on:
- C syntax including pointer arithmetic/manipulation
- Memory management (malloc/free)
- File I/O
- Header files
- pthreads (concurrency)
- Synchronization Primitives (mutexes, condition variables, etc.)
If you have previous experience with other languages but not with C, then most likely the new thing you need to get familiar with is pointer and memory management. Here is a nice tutorial on that http://pw1.netcom.com/~tjensen/ptr/pointers.htm.
If you do not have any familiarity with programming before, then you should not take CS165.
Data structures are essential in data systems. They drive the physical organization of data and the access methods we use to retrieve data. You will design several simple and complex data structures during CS165 such as arrays, lists, and trees.
There are two aspects when it comes to data structures. The first one has to do with the abstract design of data structures and their properties. The second one has to do with their proper implementation.
If you have done C programming in the past, it is likely that you have implemented a few data structures. If not, then it is advisable that you spend a few days prior to class to experiment with some basic concepts. For example, an excellent exercise is to create a simple linked list. You can find numerous detailed tutorials online: search for “linked list C”. If you go through such a task then you would have developed enough C skills as well.
Also check the Project 0 that we provide which walks you though such a programming task.
Algorithm design is essential in any area of computer science. You will design several algorithms during the semester for your data system and we will discuss several algorithms in class.
A basic familiarity with algorithm design at the level of an introductory CS class is fundamental. For example, do you have trouble understanding how a basic sort algorithm (e.g., quicksort) works or how a basic tree traversal happens? If yes, it is advisable that you refresh your basic algorithms skills. The two examples mentioned here can be excellent starting points and you can easily find several resources online. In addition, the simple exercise suggested in the previous section about creating a linked list will force you to think about the proper algorithms to manipulate the linked list efficiently such as insert new items, remove items etc. So it is an excellent exercise for that as well.
Modern systems are designed in such as way that they utilize modern hardware properties. This is essential in order to get the maximum efficiency (speed but also energy consumption).
CS165 teaches you about modern systems tailored for modern hardware and so it requires good understanding of modern computer architecture. We will give enough background during class, office hours and sections but some initial familiarity will certainly cut down your workload during the semester.
For example, if you are not aware of the basic properties of a multi-core CPU, memory, disk or a cache then you it is advisable that you spend an evening or two browsing some basic tutorials.