CSCI 162: Resources and links
(very much under construction)

The material referenced here is intended to supplement/expand on the topics discussed in the lectures.


Section 1: Binary systems (Jan. 7 - Feb. 1)

Data representation
Wikipedia: Floating Point, BCD, One's and Two's Complement
BBC: Bitesize, Binary Numbers and Binary Addition, and Hexadecimal
Sample programs:
six small C programs illustrating issues in data representation
C representation of floats, and C++ limits on data ranges

Boolean algebra
Boolean Algebra (Y. Bakos, mines.humanoriented.com)

Digital circuits (logisim)
Logisim
Digital Logic Tutorial Guide (from D. Belton, Elec. Eng. at U. of Surrey)
WikiBooks: Logic Operations
Digital Logic Circuits (Emil Petriu, U. of Ottawa)
Digital Logic Circuits (Ben Chen, U. of Singapore)
Conjunctive Normal Form (CNF) (Wikipedia)


Section 2: Computer architecture and operating systems (Feb. 4 - 22)

Von neuman architectures and execution cycles
Dave's ollld notes

Assembly language and machine code (marie)
A lecture on MARIE Assembly language (E. Bosworth)
Examples of MARIE code (M. Mariani at github)
A lecture on MARIE Architecture (E. Bosworth)
Opcodes (marie-js at github)
Marie: Intro to a simple computer (chapter 4 from The Essentials of Computer Organization and Architecture, J. Lobur and L. Null)
MARIE instruction set cheat sheet and other resources (from HWMath.com)

Operating systems and shells (linux and bash)
Dave Wessels Guide to *nix
Android is based on Linux
Gara Pruesse: Operating Systems notes


Section 3: Programming languages (Mar. 4 - 29)

History and evolution of programming languages
Dave's notes (antiquated)

Examples of programming languages
RosettaCode.org (code examples in 700+ languages)

Functional programming (lisp)
Dave's lisp resources
Wikipedia entry
Practical Common Lisp (Peter Seibel)
ANSI Common Lisp (pdf) (Paul Graham)
- chapters 1 and 2 are a good intro to lisp
- chapters 3 through 10 cover things in more depth and are a good supplement to the lecture/lab material
Beating the averages (also by Graham)
Common lisp cookbook (github)
Functional Programming for the rest of us (Akhmechet at defmacro)
The Nature of Lisp (also by Akhmechet)
Let over lambda - 50 years of Lisp (D. Hoyte)
Additional
Common Lisp the Language 2nd ed. (Guy Steele)

Logic programming (prolog)
Dave's prolog resources
swi-prolog (see tutorials section)
Wikipedia entry
Wikibook: Prolog
Learn Prolog Now! (learnprolognow.org)
Logic, programming, and prolog (Nilsson and Maluszynski)


Section 4: theory of computation (Apr. 1 - 12)

My old complexity summary

Models of computation and computability
Wikipedia: Church-Turing thesis and computability theory

Regular expressions and finite automata
Why regular expressions are useful (xkcd..com)
Moreno's Automata Notes (M. Moreno, U. of Western Ontario)
Wikiversity Finite Automata
Regexes on page 556 of Foundations of Computer Science (J. Ullman, Stanford)

Regular expressions and grammars for C
Note that the syntax is slightly different than we looked at for prolog: the : is used instead of -->, and the | is used instead of ; to represent or.
yacc-based grammar for C
lex-based grammar for tokenizing C

Analysis of algorithms
Analyzing complexity of algorithms (Georgy Gimel'farb slides - pdf)
What Are Algorithms (video and transcript: KhanAcademy.Org)
Intro to Algorithms (C. Leung, through gitbooks)
example: prove 16n2+5n ∈ O(n2/2 - 1). (Gara Pruesse)