/CS35L

Computer Science 35L - Software Construction Laboratory

Primary LanguageHTML

UCLA's Computer Science 35L - Software Construction Laboratory

Professor: Paul Eggert

Quarter: Fall 2017

This course covers command-line interfaces, UNIX, shell scripting, open-source tools (e.g. git, make), systems programming, compilers, security/encryption, Python programming, parallelism, faults, emacs, vim, C programming, and regex.

Skills Demonstrated

  1. Multiuser and multiprocess operating systems
  2. Unix File System
  3. Makefiles
  4. Pipelines and Redirection
  5. C compilation & Linking

Projects

Description of the following homeworks:

Project 1:

This project covers multiuser and multiprocess operating systems, GUI basics (e.g., X, Wayland, GNOME, KDE), CLI basics (e.g., Bash), Unix file system layout, device files, Unix permissions, Basic commands: ls; pwd, cd, mkdir, rmdir; echo, cat; cp, mv, ln, rm; chmod, kill, ps, man pages, emacs basics, basic editing, directory editing, running shell commands, building programs, and Emacs Lisp.

Project 2: Files and Editing

This project covers unix wildcards, basic regular expressions, more advanced commands (e.g., grep, find), pipelines and redirection, simple shell scripting, and interpreted languages

Project 3: Commands and Basic Scripting

This project covers the basics of Python, Java as a compromise between interpreted and compiled languages, and how to build our source code using make, automake, and autoconf.

Project 4: Change Management Basics

This project covers the basics of Makefiles, diff and patch, retrieving a package to build and install, basic version control (Git, Subversion), committing a change and dealing with merge conflicts.

Project 5: Low-level Construction and Debugging

This project covers the C compilation and linking process, an introduction to C, debuggers and debugging tools (GDB, Valgrind, strace).

Project 6: Systems Programming

This project covers C and system programming and Library calls vs. system calls.

Project 7: Faults, Failures, Errors, and Holes

This project covers ways in which a program can go wrong, buffer overruns, and techniques for avoiding them.

Project 8: Security Basics

This project covers threats (including eavesdropping, tampering, forgery, and denial of service), authentication, authorization, accounting Chains of Trust, firewalls, kernels, sandboxes, intrusion detection, backups, and security policies.

Project 9: Advanced Change Management

This project covers commits branching and merging, rebasing branching workflows, searching, advanced merging and conflict resolution, remote branches, submodules, and git internals

Project 10: The Future of Computer Software

This project covers trends in computing research and development. This topic covers how machine learning software has helped to predict the occurences of earthquakes. This algorithm uses decision trees to examine how much strain is being up on the Earth's crust.