Syllabus for UCLA Computer Science 35L
Software Construction Laboratory
[class home]
No textbook is needed;
   online material will be referred to extensively.
Project
A major part of this course is a collaborative
  software project, in which student groups
  design and construct a user-facing application involving multiple
  software components that communicate across a network.
Lectures
Files, editing, and shells
 
  - Multiuser and multiprocess operating systems
 
  - CLI basics (e.g.,
    Bash)
 
  - Unix file system organization
 
  - Basic shell commands:
    ls;
    pwd,
    cd,
    mkdir,
    rmdir;
    echo,
    cat;
    cp,
    mv,
    ln,
    rm;
    chmod,
    kill,
    ps,
   grep,
   find
 
  - Documentation and
   man pages
 
  - Emacs
    basics: introduction,
    online tutorial (C-h t),
    help (C-h ?),
    basic editing,
    directory editing,
    running shell commands,
    building programs,
    Emacs Lisp.
 
 
Commands and basic scripting
 
  - The Unix shell as a scripting language
 
  - Pattern matching, wildcards and regular expressions
 
  - More advanced commands (e.g.,
   grep,
   find)
 
  - Pipelines and redirection
 
  - Scripting for interactive applications, with
    Emacs Lisp as a case study
 
 
Scripting and construction
 
  - Basics of Python
 
  - Building from source
   
    - Dependencies (e.g., make)
    
 - Makefile basics
 
   
 
 
Client-server apps and user interfaces
Package management
 
  - Dependencies and packages
 
  - Installing a package
 
  - Creating a package
 
  - Package management case study:
    (e.g., Python packaging)
 
 
Change management
 
  - Creating and using patches (e.g.,
     diff and
   patch)
 
  - File-based version control, e.g.,
    RCS
 
  - Package-based version control, e.g.,
    CVS
 
  - Decentralized version control,
    with Git as a case study
   
    - Commits
 
    - Branching and merging
 
    - Rebasing
 
    - Branching workflows
 
    - Searching
 
    - Merging and conflict resolution
 
    - Remote branches
 
    - Git internals
 
  
 
 
Low-level construction and debugging
 
  - Introduction to C
 
  - The C compilation and linking process
 
  - Debuggers and debugging tools, e.g.,
    GDB,
    Valgrind,
    strace.
 
  - C and system programming
 
  - Library calls vs. system calls
 
  - Ways in which a program can go wrong at the low level (e.g., buffer overruns)
 
  - Defenses against low-level misbehaviors
 
 
Security basics
 
  - Security models
 
  - Threat modeling and classification
 
  - Risk assessment
 
  - The trusted computing base