Overview
This is part of the foundational CS courses: courses designed to cover content needed in later CS courses.
Eligibility
You should take this course only if
You have credit (or passed the placement test) for at least one of CS 1110, CS 1111, CS 1112, CS 1113, or CS 1120
You do not have credit for CS 2110 or CS 2150
You will know some C- or Java-like language by the middle of the class, as e.g. by one of
Having previously taken or being concurrently enrolled in DSA1
Having had Java, C, or C++ in your Introduction to Programming course
Independent study sufficient to understand this example:
Example code (click to expand):
int example() {
for(int i = 0; i < 10; i += 1) {
double j = 3;
if (i/3 != i/j) return i;
}
return 10;
}
You should be able to describe the use of int
, double
, braces, semi-colons, and for
and why the function returns 1, not 10.
More information about the transition from previous courses to the new foundation may be found at http://advising.uvacs.org/.
Scope and Content
In this course, we
- Begin with how data can be stored as charges in silicon and work up
- In hardware design, through gates and registers to general-purpose computers.
- In data representation, through bits and bytes to records, arrays, and pointers.
- In process representation, through circuits and assembly to C.
- Learn basic command-line tools and accessing command-line documentation.
- Practice quite a bit of C coding and using the C standard library.
- Discuss how security and social topics are related to these ideas.
For the sake of conversing with those familiar with our previous course offerings, this course covers the assembly-and-C half of CS 2150 Program and Data Representation
; the basics of ECE 2330 Digital Logic Design
; and the first part of CS 3330 Computer Architecture
; in addition to having several new topics we felt were under-represented in our previous set of course offerings.
Logistics, etc
See the course policies page.
Writeups
The following are the main writeups created for this course:
- Boolean Algebra and Gates including bit-fiddling
- Bits and Beyond including number representations and a little information theory
- Components of digital computers, including voltage, registers, and HDLs
- Designing a processor, including von Neumann architecture, ISAs, condition codes, and RISC/CISC
- How to store data, including enumeration, adjacency, and pointers
- x86-64 Summary, including calling conventions
- How to store data, including enumeration, adjacency, and pointers
- Compilation example, outlining how a simple C program is compiled
- C, a guide and reference, including the C preprocessor
- An overview of memory, including garbage detection and common memory errors
- C standard library manual pages, including a guide to using the
man
command
- C++ Inheritance, including how vtables enable virtual functions
The following are additional references:
- Using SSH, including how to set up passwordless authentication
- Command-fu, a few simple command-line examples (unfinished)
- Debugger example, using
lldb
and ghex
- Eduroam on Linux, including how to connect to UVA’s instantiation of eduroam and handling digital certificates.
The following are assignment writeups:
The following are lab writeups: