Fri Dec 3 18:24:45 EST 2021
This is a rough summary of the topics that we have covered in class. It doesn't include material in problem sets or labs. You are responsible for important ideas and facts in those as well, but not for detailed trivia like how to write syntactically correct HTML or Python or how RSA really works. The readings are only a minor component at most.
On exams, the emphasis is meant to be on understanding, which is usually tested through problems that require you to think and reason about something new or unfamiliar that is based on material covered. Often that reasoning is quantitative; the theory is that if you understand the material, you will be able to do the right computation to demonstrate your understanding. Sometimes the reasoning requires recognizing that some unfamiliar system or artifact is analogous to one seen in class. Sometimes it's just applying common sense and some of what you've learned.
Broadly, these are the kinds of topics that I hope you understand well enough to answer questions about:
Here's the approximate outline of what we covered:
HARDWARE logical/functional organization of a computer physical structure major pieces: cpu, memory, disks, peripheral devices, etc. acronyms and typical numbers: MHz, GHz, MB, RAM, ROM, Kbps, ... prefixes: pico, nano, micro, milli, kilo, mega, giga, tera, peta, exa, ... bits, bytes, representation of information analog versus digital binary numbers and arithmetic hexadecimal notation powers of two and powers of ten meaning of bits depends on context numbers of various sizes characters in various scripts machine instructions and addresses ASCII and Unicode color encoding and representation CPU operation arithmetic, memory access, decision making, control different processors and tradeoffs laptop vs cellphone vs IoT vs ... toy machine various kinds of instructions, including branches & conditionals how it works, but NOT detailed syntax be able to accurately follow the steps of a program fetch / decode / execute cycle instructions in same memory as data computer architecture caching in CPU and elsewhere von Neumann model of computer Turing equivalence of all computers integrated circuit fabrication Moore's law, exponential growth Rule of 72 other kinds of computers SOFTWARE algorithms: defined operations, defined steps, terminates linear-time algorithms searching, selecting, summarizing log n algorithms binary search; divide and conquer sorting algorithms quadratic (n^2), quicksort (n log n) complexity of algorithms (log n, n, n log n, n^2, n^3, ..., 2^n) what these complexity formulas mean towers of hanoi, traveling salesman problem, hard problems, P vs NP evolution of programming languages machine and assembly language high level languages: Fortran, C, C++, Java, Javascript, Python, ... languages vs programming languages compilers, compilation executable files; interpretation and simulation Python variables and expressions assignment statements, input(), output(), etc. if-else for making decisions while loop for repeating a computation so long as a test succeeds functions how Python works, but NOT detailed syntax be able to accurately follow the steps of a program be able to identify and fix simple errors operating systems history what they do: manage memory, run programs, store files, communicate applications vs operating systems system interface: system calls, APIs virtual machines file systems directories/folders and files logical structure vs physical implementation file system implementation blocks, allocation table, free list finding files file open, save, delete, etc. what's remembered where for how long network file systems other file systems Unix / Linux open source software programming in the real world patents, copyrights, licenses intellectual property issues for software COMMUNICATIONS history Ethernet, broadcast media Internet structure names, addresses, routing, protocols traceroute domain names, DNS, root servers, nslookup who is responsible for what services caching IP addresses, IPv4 vs IPv6 dotted decimal notation, net id's vs host id's IP protocol unreliable datagrams packets TCP protocol reliable streams higher-level protocols: SSH, SMTP, HTTP layering, encapsulation bandwidth communications technologies Web url, http, html, browsers client-server risks cookies, spam, ad networks viruses, spyware active content, Javascript, extensions attacks on clients, servers, networks denial of service defenses cryptography history secret key crypto: DES, AES public key crypto, digital signatures, secure hashing, RSA, MD5, SHA-1,... how clients & servers do key exchange applications: Tor, bitcoin intellectual property patents & copyright DMCA compression lossless: Lempel-Ziv, GIF, PNG lossy: JPEG, MPEG, MP3 error detection & correction checksums for ATM, ISBN, etc.; parity wireless cell phones GPS, RFID IoT; other devices machine learning supervised learning vs unsupervised neural nets, deep learning AI issues legal, economic and political issues for communications