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
- Java
as a compromise between interpreted and compiled languages
- Building from source
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
- Advanced merging and conflict resolution
- Remote branches
- Submodules
- 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