CSE 278 Systems I: Introduction to Systems Programming (3 credits)

Typically offered during both the fall and spring semesters.

Catalog description:

Principles of Von Neumann computer architecture through the C/C++ programming language. Data representation and computer arithmetic. Memory hierarchy. CPU structure and instruction sets. Network programming including use of sockets. Database programming through SQL.


CSE 102 and CSE 271

Required topics (approximate weeks allocated):

    • C++17  (5 weeks)
      • Compiling, running, and testing program through IDE
      • Stepping through code & observing stack using the IDE’s debugger, e.g., gdb
      • Compilation on linux command line
      • Header files
      • Conditionals & Looping: if-else, switch-case, while, for, range-based for
      • C++ I/O and file I/O (not printf/scanf)
      • Objects & containers: string, vector, set, unordered map, (STL)
        • Type aliasing via using declaration
      • Constant variables/objects
      • pointers & references (prefer references)
      • Function/method calls
        • Function Prototype declaration
        • Pass by value, pass by reference, and const modifier for parameters & methods.
        • Handling Command Line parameters argc, argv[]
      • algorithms (e.g., sort, find) and iterators
      • dynamic memory – using shared_ptr
      • C++ classes
        • Constructors & destructors
        • Declaration vs. definition (header vs. source files)
        • Split Design (header vs. source file)
        • Constant methods
        • Operator overloading, friend visibility modifier
        • Basics of inheritance
      • Functional testing (manual & automated)

    • Basic computer architecture (3 weeks)
      • CPU components, ALU
        • Stack, heap
        • CPU registers
        • synonymity of pointers and addresses 
      • Review Number representation (Binary & hexadecimal)

    • Unix (Linux) tools (1.5 weeks)
      • Command Line basics
      • I/O Redirection
        • Using script command to record user activities
      • Editing using console-only editors (nano/vi/emacs)
      • Compilation & running at the shell command-line using g++
      • SSH (keys, command line uses, scp/sftp/Cyberduck)

    • Intro to networks (2 weeks)
      • Network Overview - IP addresses, RFC1918 addresses, Ports.
      • TCP/IP Protocol Stack
      • TCP versus UDP
      • DNS, DHCP, NAT
      • Basics of network protocols
        • HTTP protocol (using telnet to generate HTTP request)
      • Socket programming in C++
        • Developing an HTTP client (using BOOST socket streams)
        • Developing an HTTP server (using BOOST sockets)

    • Intro to databases (1.5 weeks)
      • Database Schemas
      • connecting to a db (command line client and C++ API)
      • Intro to SQL
      • Review of HTML form, URL encoded string, GET vs POST
      • Running C++ programs with both database & HTTP via Apache CGI

    • Testing (.5 weeks)
      • Functional testing (using diff) and other tools (e.g., CODE plug-in on Canvas) as part of programming assignments
    • Exams (1 week)

Learning Outcomes:

  1. Develop programs using a high level, systems programming language (currently C++) in a Linux environment.
  2. Critique properties and characteristics of various computer architecture choices including the major components and their functions.
  3. Analyze the salient aspects of machine instructions and memory addressing modes
  4. Convert a high level language program to machine language, generate assembly code from high level programs using suitable tools.
  5. Convert unsigned integers between the following representations: decimal, binary, and hexadecimal.
  6. Demonstrate the use of compiler optimizations to improve performance (e.g., by address issues in a pipeline, etc.).
  7. Use basic networking and socket programming concepts to develop a textual client-server program using sockets
  8. Develop SQL statements to manipulate a simple database including the use of APIs (e.g., ODBC) to access a database from a program.
  9. Use appropriate systems tools including those from a command line interface.