Computer Science 360: Systems Programing

Undergraduate course, UTK Computer Science, 2016

Teaching Assistant for undergraduate computer science course focusing on labwork for required class teaching principles and methodologies of operating systems.

Lab Homepage

Systems Programming Course Syllabus

In this course, CS360, we devote our attention to the principles and methodologies of operating system, a computer tool that is indispensable to today’s society. The name of this course, Systems Programming, tells the uniqueness of this special kind of programming. For details about such uniqueness, we have an entire semester to elaborate. At the same time, systems programming is also inherently related to the latest development of open source movement in the field. Here, I would like to emphasize that CS360 makes a great contribution towards student learning outcomes, as outlined by our department’s mission statement. Throughout this course, you need to pay special attention to the following capabilities:

  1. Analysis and Problem Solving - Students are able to use theoretical knowledge to critically analyze abstract programming problems to develop effective software solutions.
  2. Computer Skills - Students are able to understand and use a variety of software tools, operating systems, computer architectures, data structures, algorithms, and programming languages.
  3. Communication - Students are able to communicate ideas and technical concepts in a clear, concise, and meaningful way, both verbally and in writing.
  4. Social and Ethical Awareness - Students understand the impact of computers in society, the key ethical issues affecting computer science, and their own responsibilities as computer science professionals.
  5. Foundation for Continued Learning - Students have a solid understanding of the foundations of computer science, enabling them to pursue further learning as part of their continued professional development.

To become good general-purpose C programmers

This means that when you see a problem that needs to be coded, you can envision the overall structure of the solution, and then set about solving it in an ordered way, using the appropriate data structures where necessary.

To become decent Unix hackers

This means that you know how to make use of the many tools that Unix provides, be it commands, library calls or system calls. This also means that you understand the model of computation that Unix presents.

To become well-versed in the language of systems programming

If you finish this course with a decent grade (B or better), then my goal is to ensure that you can talk systems. This means that when you go out to the job market or to graduate school, when anyone wants to talk systems with you, you not only understand what they are saying, but can communicate back with them in a common language. This also means that if you have to read research papers in systems, you can do so without a huge amount of difficulty.

To understand basic uniprocessor organization

This means to know pretty much what goes on from the time that a computer gets turned on, to writing and executing programs in a multi-user enviroment.