|
|
(4 intermediate revisions by one other user not shown) |
Line 13: |
Line 13: |
| | | |
| =Prerequisites= | | =Prerequisites= |
− | CS 151 is prerequisite for - CS 170, 201, 260 <br> | + | CS 101 is prerequisite for - CS 151<br> |
| + | CS 151 is prerequisite for - CS 170, 201, 260, 303 <br> |
| CS 170 is prerequisite for - 479 <br> | | CS 170 is prerequisite for - 479 <br> |
− | CS 201 is prerequisite for - CS 202, 303, 469, 479 <br> | + | CS 201 is prerequisite for - CS 202, 469, 479 <br> |
| CS 202 is prerequisite for - all 400 level except 469, 479 <br> | | CS 202 is prerequisite for - all 400 level except 469, 479 <br> |
| CS 303 is prerequisite for - CS 420, 421, 457, 458 <br> | | CS 303 is prerequisite for - CS 420, 421, 457, 458 <br> |
Line 21: |
Line 22: |
| Math 115 is prerequisite for - CS 202, 303 <br> | | Math 115 is prerequisite for - CS 202, 303 <br> |
| Courses with no prerequisite - CS 151, 256 <br> | | Courses with no prerequisite - CS 151, 256 <br> |
− |
| |
− | =TODO/Possible New Pages=
| |
− | Items to spin off as standalone videos / tutorials <br>
| |
− | Editors - vim, emacs, pico, atom. Should be able to edit text files, save changes, make copies.<br>
| |
− | IDEs - eclipse, MS visual studio. Should be able to create a project, add source files, compile and run, debug.<br>
| |
− | Debugging - gdb. Should be able to compile with debug information, use gdb to find where seg fault occurs, set breakpoints and look at variable values, step line by line through code.<br>
| |
− | Unix tools - grep, sed, awk, find, makefiles, unix regular expressions, reading manual and manual organization, pipes, I/O redirection.<br>
| |
− |
| |
− | =Programming Assessment=
| |
− | ==Catalog Description==
| |
− | Basic C programming and data structures. 5 questions. Must pass with 3 and 2 halves for - passing CS 499 and Cs 685/695/699, getting higher than a C in CS 500, getting a C or higher in CS 202.
| |
− |
| |
− | == Prerequisites ==
| |
− | * ''TODO''
| |
− |
| |
− | ==Standard Content==
| |
− | C programming, with one program from five different types:
| |
− | * Simple program that requires a loop or nested loops.
| |
− | * Program that scans through text a character at a time to do something.
| |
− | * Linked list traversal.
| |
− | * Binary tree traversal.
| |
− | * Bit operations.
| |
− |
| |
− | ==Important Assignments and/or Exam Questions==
| |
− | * ''TODO''
| |
− |
| |
− | ==Standard resources==
| |
− | [[Programming Assessment|CS Programming Assessment Wiki Page]]
| |
− |
| |
| | | |
| = CS Courses Standard Content Pages = | | = CS Courses Standard Content Pages = |
Line 66: |
Line 38: |
| * [[CS 456 Systems Programming]] | | * [[CS 456 Systems Programming]] |
| * [[CS 457 Data Base Processing]] | | * [[CS 457 Data Base Processing]] |
− | * [[CS 458 Algorithms]] | + | * [[CS 458 Algorithms]] ''(needs information)'' |
| * [[CS 469 Unix/Linux Administration and Networking]] | | * [[CS 469 Unix/Linux Administration and Networking]] |
| * [[CS 470 Programming Languages]] | | * [[CS 470 Programming Languages]] |
Line 73: |
Line 45: |
| * [[CS 479 Web Programming II]] | | * [[CS 479 Web Programming II]] |
| * [[CS 499 Senior Seminar]] | | * [[CS 499 Senior Seminar]] |
− |
| |
− | = TODO: Add information below to individual Pages =
| |
− |
| |
− | == CS 420 Theory of Computing ==
| |
− | Catalog Description
| |
− |
| |
− | A sampling of the different areas of theoretical computer science: finite state concepts, formal grammars and automata, computability, Turing machines, and program verification. Prerequisite - C or better in CS 202 and CS 303.
| |
− |
| |
− | Most important prerequisite skills/knowledge: Willingness to work hard. Knowing how to write a formal mathematical proof.
| |
− | Most important skills/knowledge gained: Basic understanding of fundamental computational models such as DFAs, NFAs, Turing machines, etc. and their properties.
| |
− |
| |
− | Normal Content - closely follows the first 5 Chapters of the course textbook (see below), except that some topics are not covered in class
| |
− | Regular languages:
| |
− | Finite automata (DFA):
| |
− | Formal definition of finite automata, examples
| |
− | Formal definition of computation, designing finite automata
| |
− | Regular operators
| |
− | Nondeterminism:
| |
− | Formal definition of a nondeterministic finite automaton (NFA)
| |
− | Equivalence of NFAs and DFAs (with proofs)
| |
− | Closure under regular operations (with proofs)
| |
− | Regular expressions:
| |
− | Formal definition of a regular expression
| |
− | Equivalence with finite automata (with proofs)
| |
− | Nonregular languages
| |
− | The pumping lemma for regular languages (with proofs, students are expected to master how to use this lemma that certain languages are nonregular)
| |
− | Context-free languages:
| |
− | Context-free grammars (CFG)
| |
− | Formal definition of CFGs, examples of CFGs
| |
− | Chomsky normal form
| |
− | Pushdown automata (PDA)
| |
− | Formal definition of PDA, examples
| |
− | Equivalence of PDAs with CFGs, proof not covered in class
| |
− | Non-context-free languages:
| |
− | Pumping lemma for CFGs (students are expected to master how to use this lemma that certain languages are not context-free)
| |
− | Church-Turing thesis:
| |
− | Turing machines: formal definition, examples
| |
− | Variants of Turing machines, nondeterministic Turing machines, enumerators
| |
− | Definition of an algorithm
| |
− | Decidable languages:
| |
− | Decidable languages concerning regular languages, context-free languages
| |
− | Undecidability:
| |
− | Diagonalization method, examples of undecidable and Turing-unrecognizable languages
| |
− | Reducibility:
| |
− | Some undecidable problems, reduction via computation histories
| |
− | Computable function, mapping reducibility
| |
− |
| |
− | Sample Exam Questions
| |
− | Give a formal definition of a finite automaton.
| |
− | Let Bn = {ak | k is a multiple of n}. Show that for each n ≥ 1, the language Bn is regular.
| |
− | Use the pumping lemma to show that the language {0n1n0n1n} is not context free.
| |
− | Let Σ = {1,2,3,4} and C = {w ∈ Σ* | in w, the number of 1s equals the number of 2s and the number of 3s equals the number of 4s}. Show that C is not context-free.
| |
− | Define the following terms: (a) Turing-recognizable language, (b) co-Turing-recognizable language, (c) decidable language, (d) enumerator, (e) linear bounded automaton.
| |
− | What does it mean that language A is mapping reducible to language B?
| |
− | Let Q = {<M1,M2> | M1 and M2 are TMs and L(M1) = L(M2)}. Give a proof that Q is undecidable. You are allowed to use results from class.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Introduction to the Theory of Computation, 3rd Edition, by Michael Sipser. ISBN 978-1133187790
| |
− |
| |
− |
| |
− | == CS 421 Formal Methods ==
| |
− | Catalog Description
| |
− |
| |
− | Elements of formal logic; various approaches to automation including resolution; restrictions and search methods; inductive theorem-proving; Knuth-Bendix completion; Boyer-Moore theorem-prover; applications. Prerequisite - C or better in CS 202 and CS 303.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Student must have knowledge of Discrete Structures
| |
− |
| |
− | Most important skills/knowledge gained:
| |
− | A knowledge of deductive logic and its applications in Computer Science.
| |
− |
| |
− |
| |
− | Normal Content
| |
− | This is meant to be a “Logic in Computer Science” course.
| |
− | The main topics covered are Propositional and First Order Logic Syntax and Semantics,proofs of valid arguments via resolution are stressed. Invalidity of arguments is demonstrated through the building of models for the premises and negated conclusions. The use of Automated Reasoning programs such as the OTTER theorem prover and MACE2 model builder is shown.
| |
− | Reasoning with equality , is discussed using equality theories and paramodulation.
| |
− | Reasoning in Inductive Theories is covered.
| |
− | Applications covered are: Program Analysis, Design of Logic Circuits, Plan Generation,Question Answering, Answer Extraction, and Logical Foundations of Databases.
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Assignments include chapter summaries of textbook chapters, and use of theorem provers and model builders ; pencil and paper quizzes are given over the course content.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Symbolic Logic and Mechanical Theorem Proving by C-L Chang and R.C.T. Lee (Academic Press, 1973, ISBN-10: 0-12-170350-9)
| |
− |
| |
− |
| |
− | == CS 451 Architecture ==
| |
− | Catalog Description
| |
− |
| |
− | Data representation, number systems and codes, gates and logic, combinational logic, sequential circuits, flip-flops, memory and storage, computer organization, microprogramming, architectures of supercomputers and micros. Prerequisite - C or better in CS 202 and CS 303.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Student must have knowledge of Programming and Elementary Data Structures and
| |
− | Boolean Algebra and Logic.
| |
− |
| |
− | Most important skills/knowledge gained:
| |
− | A knowledge of the working of a simple computer.
| |
− |
| |
− |
| |
− | Normal Content
| |
− | The course begins with a review of Logic Circuit Design: Combinational Circuits and Sequential Circuits. Covered topics include logic gates, decoders , encoders, multiplexers, ROMs, universal gates, adders, flip-flops, latches, Karnaugh Maps, equivalent states, counters, bit pattern detectors, incrementers, multipliers, etc.
| |
− | This is followed by the discussion of Instruction Set Architectures, and an example architecture: The Relatively Simple Computer. Basic Computer System Organization is considered : CPU, Memory, I/O units, Buses, Linear ad Two dimensional memory organizations.
| |
− | Hardware description using RTL and methods of implementing RTL code are described.
| |
− | Next is the coverage of CPU Design: Registers, Instruction Sets, State diagrams, RTL Code, design of
| |
− | register section, control units, ALUs, and generation of control signals are covered. This is the hardwired control approach.
| |
− | Also covered are Microprogrammed Control and its variations: Horizontal Microcode, Vertical Microcode, and string control signals in the ROM.
| |
− | Next comes the coverage of Cache memory organization, and virtual memory. Topics covered are associative memory, and the associative , direct and set associative mappings and LRU and FIFO cache replacement strategies, and a simulation and estimation of hit ratios. Paging is covered in detail for implementing virtual memory, and a brief coverage of segmentation is provided.
| |
− | Input/output is considered: polling, wait states, interrupt driven I/O, vectored interrupts, and Daisy Chaining, DMA transfers and transfer modes and I/O channels are covered.
| |
− | CISC and RISC computers and pipelining are covered next.
| |
− | Finally, an introduction to parallel and alternative computer architectures is given.
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− |
| |
− | Assignments include chapter summaries of textbook chapters ; pencil and paper quizzes are given over the course content.
| |
− |
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Computer Systems Organization and Architecture by John D. Carpinelli (Addison-Wesley, 2000, ISBN-10: 0-201-61253-4)
| |
− |
| |
− | == CS452 Software Engineering ==
| |
− | Catalog Description
| |
− |
| |
− | This course studies the software life cycle: specification, object-oriented programming and design, program development, validation, testing, debugging, documentation, maintenance, revision control, CASE tools. Prerequisite - C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Student must have completed a course in Object Oriented Programming
| |
− |
| |
− | Most important skills/knowledge gained:
| |
− | Object Oriented Analysis and Design : UML, Processes, Pragmatics, OCL, Model Driven Architecture.
| |
− |
| |
− | Normal Content
| |
− | The course begins with a review of Object Orientation, and of the Software Crisis. Next methods of classification are covered. That is followed by a coverage of UML and various diagrams. Next comes the discussion of Software Development Methods: Incremental and Iterative development, planned and agile methods, phases, milestones , macro and micro processes, are described. Pragmatic issues are covered next: Personnel, Teams, Documentation, Reuse, Tools, Architecture, are discussed next. Next comes the development of functional, static, and dynamic views for example case studies, and a design procedure is given after the completion of these views. Also covered are 3-level architectures, and Jacobson’s stereotypes. The course concludes with a discussion of Object Constraint Language, and Model Driven Architecture. Use of tools for validation of models is described.
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Study of a UML Modeling tool such as Modelio
| |
− | An Object Oriented Design Case Study
| |
− | Quizzes covering aspects of UML , Processes, Pragmatics, Design, OCL and MDA.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | [1] Object-Oriented Analysis and Design with Applications (Third Edition) by Grady Booch et al (Addison-Wesley, 2007, ISBN-13: 978-0-201-89551-3)
| |
− | [2] UML in Practice by Pascal Roques (Wiley, 2004, ISBN-13: 978-0470848319)
| |
− | [3] The Object Constraint Language (Second Edition) by Jos Warmer & Anneke Kleppe (Addison-Wesley, 2003, ISBN 978-0-321-17936-4)
| |
− |
| |
− |
| |
− | == CS 456 Systems Programming ==
| |
− | Catalog Description
| |
− |
| |
− | An introduction to both program translation and operating systems. There will be a survey of topics such as: top-down and bottom-up parsing, scanning, code generation, symbol table management, linkers and loaders, batch processing systems, interacting processes, multiprogramming systems, and memory management. Prerequisite - C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge: C programming.
| |
− | Most important skills/knowledge gained: Solid understanding of the Unix/Linux API. Basic understanding of programming language translation.
| |
− |
| |
− | Normal Content
| |
− | Version control: Make, RCS, Git
| |
− | File system I/O - open/close/read/write, printf/scanf, opendir/closedir/readdir/stat
| |
− | Local interprocess communication: signals, socketpairs, shared memory.
| |
− | Fork and execve: how shells work.
| |
− | Regular expressions (review!)
| |
− | Condensed introduction to x64 assembly language.
| |
− | How assemblers work.
| |
− | Structure of ELF files -- use of tools like objdump, readelf, nm, od.
| |
− | Lex/flex and yacc/bison examples starting with a simple calculator and then a simple programming language (something on the level of Dartmouth BASIC).
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Write a variant of ls(1) requiring accessing permissions and subdirectory traversal.
| |
− | A basic shell (command interpreter) with a read, parse, execute loop using a PATH, I/O redirection and pipes.
| |
− | Assembly language programming exercises, with a view to introducing the subset of assembler needed for compiler code generation.
| |
− | Extend calculator example done in class -- student might add parenthetical expressions or named (one line) functions, for example.
| |
− | A working compiler for a simple programming language.
| |
− | A working assembler would be a less time consuming alternative if more time was spent on the shell.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | The manual.
| |
− | Linux System Programming: Talking Directly to the Kernel and C Library, Edition 2, Robert Love (O’Reilly)
| |
− | flex & bison, by John Levine (O’Reilly)
| |
− |
| |
− |
| |
− | == CS 457 Data Base Processing ==
| |
− | Catalog Description
| |
− |
| |
− | Data independence, relational model, relational algebra and calculus, query languages and SQL, conceptual modeling, database design, data dependencies and normalization, access methods, tables, queries, forms, macros and reports, database administration, introduction to transaction processing, concurrent transactions, and recovery. Case studies of commercial database systems such as Oracle and Microsoft SQL Server. Prerequisite - C or better in CS 202 and CS 303.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Most important skills/knowledge gained:
| |
− |
| |
− | Normal Content
| |
− | Database Models
| |
− | Relational Algebra
| |
− | SQL - A reasonably comprehensive introduction to SQL. SQLite is a very good, easy to use, vehicle for this part of the course.
| |
− | Database design: logical design, physical design, security design.
| |
− | Database design: ER diagrams, normal forms, functional dependencies, transitive closure, etc.
| |
− | Transactions: query processing, ACID, logging, indexing, hashing, B+ trees, joins.
| |
− | SQL - More advanced features (PL/SQL functions, triggers, etc.)
| |
− | NOSQL: discuss a subset of the following (whatever’s hot)
| |
− | XML
| |
− | Mongodb
| |
− | Redis
| |
− | levelDB
| |
− | DataFrames - Python/pandas
| |
− | Cassandra
| |
− | many more possibilities
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Relational algebra exercises (pencil and paper) with a variety of joins.
| |
− | Single table SQLite assignment for experience using SQLite features and basic queries.
| |
− | Multi-table SQLite assignment in the context of normal forms. An example: students at a university with tables for personal data (addresses), financial data (tuition payments), and performance data (credits, grades).
| |
− | Assignment to practice C or Python (or whatever) interface to SQLite.
| |
− | Postgres/Oracle assignment using multiple databases, tables, triggers, transactions, etc. Examples could include the student/university database with the addition of classes, grades, adding, dropping, room assignments, courses, scheduling, faculty schedules, etc.. A more standard example is a company with employees, customers, suppliers, departments, etc.
| |
− | (Mongodb, etc.) Pick smaller database problems and implement them using SQL, mongodb and redis (for example). Compare performance.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Stanford Database Course with Jennifer Widom (available from YouTube). Not a full course, but a nice outline that goes at a slower pace than one might expect from Stanford. PDF files are also available for a more comprehensive version of the course.
| |
− |
| |
− |
| |
− | == CS 458 Algorithms ==
| |
− | Catalog Description
| |
− |
| |
− | Among the topics covered are: review of basic data structures and their implementations; graphs, both directed and undirected; analysis of algorithms; sorting, searching, and merging, both internal and external methods; memory management algorithms; mathematical algorithms; and, as time allows, advanced topics such as NP-complete problems. Prerequisite - C or better in CS 202 and CS 303.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Most important skills/knowledge gained:
| |
− |
| |
− | Normal Content
| |
− |
| |
− |
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− |
| |
− |
| |
− |
| |
− | Standard resources (textbook or online)
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | == CS 469 Unix/Linux Administration and Networking ==
| |
− | Catalog Description
| |
− |
| |
− | Includes installation and configuration of Unix/Linux operating system software; set-up of hardware and software for Unix/Linux networking including TCP/IP, FTP, Telnet, DNS, DHCP, and Apache; Unix/Linux administration tasks including directories, users, tuning, backup, security, and networking. Prerequisite - C or better in CS 201.
| |
− |
| |
− | Most important prerequisite skills/knowledge: Basic Unix skills, some prior programming experience
| |
− | Most important skills/knowledge gained:
| |
− | Comprehensive overview of command line tools used by a system administrator
| |
− | More advanced bash scripting
| |
− | Ability to install and configure a Linux system
| |
− | Some Virtual Machine experience
| |
− |
| |
− | Normal Content
| |
− | Wild-cards and regular expressions
| |
− | Files and directories:
| |
− | The file-system tree, path traversal, links
| |
− | Unix permissions and ACLs
| |
− | The FHS standard: where things go in the file-system
| |
− | Bash scripting
| |
− | Invocation and startup, job control
| |
− | Command lists, pipelines, redirection
| |
− | Positional parameters and special variables, data types, the environment
| |
− | Functions, variable scope
| |
− | Conditionals and loops
| |
− | Bash built-ins: read, printf, alias, etc
| |
− | The core-utilities: sed, col, grep, tr, basename, dirname, etc.
| |
− | Processes and threads:
| |
− | Attributes of processes: understanding ps,top, etc output
| |
− | /proc filesystem
| |
− | Signals
| |
− | Resource limits
| |
− | Memory layout: security issues: buffer overflows, ASLR
| |
− | Libraries
| |
− | The boot process: boot loaders, the kernel, init, runlevels, init scripts
| |
− | Disks: Block devices, partitioning, making file-systems, mounting/unmounting them, checking them, configuring fstab
| |
− | Swap and virtual memory
| |
− | RAID: levels, MD devices and mdadm
| |
− | Basic MySQL administration: DB and user administration and backing up/archiving databases
| |
− | Common Administrative tasks:
| |
− | User/group administration
| |
− | Log files, accounting files and reporting
| |
− | Quotas
| |
− | Networking:
| |
− | SSH and related tools for key generation and management, scp, rsync
| |
− | Various networking terms / OSI model
| |
− | SSL/TLS certificates (openssl), creating signed certificates, setting up a CA purpose of certs, anatomy of a cert
| |
− | IPv4 networking: Packets, Ethernet, ARP, DNS, CIDR, basic routing
| |
− | The Linux Firewall (iptables) (time permitting)
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Various man page reading assignments
| |
− | Bash scripts: iterate over command line parameters and do something with them, find the largest file in a directory tree, etc.
| |
− | Create a Virtual Machine and install Linux onto it.
| |
− | Root administration tasks on a provided VM:
| |
− | Setup and configure accounts
| |
− | Setup and configure services: http and mysql
| |
− | Install and web service(s) requiring a working web server and mysql instance
| |
− | Create a certificate authority and sign other students cert requests
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | The Unix man pages
| |
− | Tutorials Point
| |
− |
| |
− |
| |
− | == CS 470 Programming Languages ==
| |
− | Catalog Description
| |
− |
| |
− | The purpose of the course is to develop an understanding of the organization of programming languages and introduce the formal study of programming language specification and analysis. Topics covered usually include: language definition structure, data types and structures, control structures and data flow, run-time consideration, interpretative languages, lexical analysis, and parsing. Prerequisite - C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | Student must have knowledge of Programming and Elementary Data Structures
| |
− |
| |
− | Most important skills/knowledge gained:
| |
− | Functional, Logic, Object-Oriented and Concurrent programming paradigms, syntax and semantics of programming languages.
| |
− |
| |
− |
| |
− | Normal Content
| |
− | The course begins with a history of programming languages, and the various programming paradigms are introduced. The Logic Programming paradigm is covered using Prolog as the example. Backtracking, unification, recursion, the cut , depth first search are covered. Stack overflows, occurs check , and floundering problems are covered. Applications covered are list processing, state space problem solving, constraint processing, expert systems, natural language processing and parsing.
| |
− | The Functional Programming paradigm is illustrated using Haskell. Covered are list processing and the conversion to tail recursion using the method of accumulating parameters, fixed point computation, square root computation and sorting, testing of perfect numbers, and implementing the Sieve or Eratosthenes using Lazy Evaluation, available in Haskell. Proofs of list properties using structural induction are covered, and the implementation of data structures using Haskell is covered.
| |
− | The Object Oriented Programming paradigm is covered using Smalltalk: introduced are the elements of the GUI: browsers, Workspaces, and Transcripts, Defining classes, and objects, inheritance and aggregation hierarchies are introduced. Avoidance of conditional code through polymorphism, polymorphism within and across inheritance hierarchies is considered, and the model –view – controller pattern through the use of the dependency mechanism are described. The issue of aggregation vs. inheritance is discussed via a concrete example.
| |
− | The Concurrent Programming paradigm is introduced. Three synchronization problems are considered: Serialization, Mutual Exclusion and the Rendezvous. Semaphores are introduced and the use of Semaphores in solving the synchronization problems are discussed. Implementations of the solutions are given in Smalltalk, using the Process and Semaphore implementations available in Smalltalk.
| |
− | Finally aspects of the syntax and semantics of programming languages are covered.
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | In each of the programming paradigms, short assignments, and a larger assignment are given.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | [1] Learn Prolog Now http://www.learnprolognow.org/
| |
− | [2] Learn You a Haskell for Great Good http://learnyouahaskell.com/
| |
− | [3] Squeak Smalltalk https://squeak.org/
| |
− | [4] The Little Book of Semaphores http://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf
| |
− | [5] Syntax and Semantics of Programming Languages http://homepage.divms.uiowa.edu/~slonnegr/plf/Book/
| |
− |
| |
− |
| |
− | == CS 471 Operating Systems ==
| |
− | Catalog Description
| |
− |
| |
− | Major topics include system structure, memory management, and process management. Hands-on experience using the department’s minicomputer facilities are an important part of the course. Prerequisite - C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− | C Programming to the CS201/CS202 Level
| |
− | Understanding logical (boolean) operations to the CS303 Level
| |
− | Functions every citizen should know - close, execve, fclose, fgetc, fopen, fork, fprintf, fputc, fread, free, fscanf, fseek, fstat, fwrite, getchar, getpid, getuid, lseek, malloc, memcpy, memset, open, printf, pthread_create, pthread_exit, pthread_join, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock, putchar, random, read, realloc, scanf, sem_init, sem_post, sem_wait, shm_open, shm_unlink, sleep, srandom, stat, strcasecmp, strcat, strcmp, strcpy, strlen, time, unlink, usleep, wait, write
| |
− | Most important skills/knowledge gained:
| |
− |
| |
− | An Operating System is a complex computer program that mediates access to three essential resources: CPU, memory, and devices. The main goal of this class is gain an understanding of how these three objectives are met. A secondary goal is to understand how some of the ideas which originated as solutions to operating systems problems have contributed to solutions to other problems.
| |
− |
| |
− | Normal Content
| |
− | Review - functions every citizen should know, basic data structures in C (1-2 weeks)
| |
− | Device Management, typically focusing on storage devices and filesystems (3 weeks)
| |
− | ext2 file system in detail
| |
− | Other filesystems at a high level
| |
− | Process/Thread Management (3 weeks)
| |
− | Single CPU execution - time slicing, scheduling
| |
− | Multi-core execution
| |
− | Shared data - semaphores, other mechanisms, synchronization issues, race conditions
| |
− | Memory Management (3 weeks)
| |
− | Memory organization, virtual memory, pages, page faults, CPU cache
| |
− | Other Topics, as time allows
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Process Management: writing a simple scheduler for a simplified OS. A basic data file driven version of this assignment might use a data file which lists a sequences of jobs. For each job, the data file would specify the time and resource demands of the job. Output would include snapshots of the process table at any given time. A more challenging version of this assignment would call for a realistic process table (red-black trees, etc.).
| |
− | Memory Management: an implementation of a basic memory management scheme, e.g., the buddy system. A basic version of this assignment could use a data file similar to the one used in the Process Management assignment. An alternative, more challenging assignment would be implementing a library to replace malloc.
| |
− | Device Management: a program that requires students to read and write to a filesystem, updating inodes, directories, and block bitmaps. The ext2 filesystem is a useful simple example for which one can find a wealth of online resources. The ‘read’ portion of this assignment is significantly easier than the ‘write’ portion.
| |
− |
| |
− | For at least one of these three assignments, the more ambitious variant should be expected.
| |
− |
| |
− | Learning Outcomes
| |
− | Source code for unix system calls - can trace through and explain the code, can make modifications.
| |
− | Unix system calls - can write programs that use the calls to mimic unix utility commands.
| |
− | Synchronization primitives - can explain proper use and write correct code that uses primitives to avoid race conditions or logical errors.
| |
− | Common scheduling algorithms - can explain common algorithms and tradeoffs.
| |
− | Process accounting - can explain in detail at least one process accounting system.
| |
− | File systems - can explain in detail the layout of at least one modern file system, can explain basic properties and tradeoffs of a number of others.
| |
− | Virtual memory - can explain fundamental concepts and their impact on performance, can explain in detail the mechanism of at least one modern memory management system.
| |
− | Modern computer and operating system - can explain the basic architecture of modern computers and operating systems, including how an operating system ensures proper sharing of the following between different programs and users - CPU, disk, memory, other devices.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Understanding the Linux Kernel, Bovet and Cesati
| |
− | Unix Filesystems, Pate
| |
− | The Little Book of Semaphores
| |
− | The ext2 File System
| |
− | The Unix Timesharing System
| |
− | Operating Systems: Three Easy Pieces
| |
− |
| |
− |
| |
− | == CS 473 Networking ==
| |
− | Catalog Description
| |
− |
| |
− | The course is an introduction to networking and includes detailed study of Internet protocols and socket programming. Topics include a study of IP, UDP, and TCP protocols, as well as application layer protocols such as HTTP and SMTP. Students learn to program both a client and server. Prerequisite - C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge:
| |
− |
| |
− | C programming.
| |
− |
| |
− | Most important skills/knowledge gained:
| |
− |
| |
− | Understanding of data flow on the internet.
| |
− | Understanding the fundamentals of network security and encryption.
| |
− | Ability to write client and server programs in C.
| |
− |
| |
− | Normal Content
| |
− | History and Operation of Packet Networks and Switched Networks
| |
− | Layered Protocols: TCP/IP and (maybe) OSI.
| |
− | Socket programming - TCP/UDP - in C.
| |
− | Example higher level protocols examined in some detail (e.g., SMTP or HTTP).
| |
− | Encryption and the four horsemen of the apocalypse: symmetric block ciphers, cryptographic hashing functions, public key cryptosystems, and cryptographic random number generation. Discussion of SHA, AES, RSA, TLS.
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | Reading and analyzing packet dumps.
| |
− | TCP Client/Server programming in C. Writing client and server programs for a specific purpose -- a multiuser game is a popular variant. The application level data might be text. Useful option: instructor writes the server, student writes the client.
| |
− | UCP Client/Server programming in C: Similar to the TCP assignment, but this is a natural place to require detailed packet design (bit fiddling) and introduce big endian/little endian issues.
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | The original BSD Interprocess Communication tutorials are still very useful.
| |
− | Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition) 3rd Edition
| |
− | by W. Richard Stevens (Author), Bill Fenner (Author), Andrew M. Rudoff (Author)
| |
− |
| |
− |
| |
− | == CS 479 Web Programming II ==
| |
− | Catalog Description
| |
− |
| |
− | Advanced programming for the World Wide Web and the Internet. This course includes client and server side programming with HTML/CSS/ECMAScript on the client side and PHP/mysqli scripting on the server. As well as some server side configuration using the Apache web server. Prerequisite - C or better in CS 170 and CS 201.
| |
− |
| |
− | Most important prerequisite skills/knowledge: Basic understanding of HTML, CSS and JavaScript (ECMAScript) in the browser
| |
− | Most important skills/knowledge gained: HTML forms, client side ECMAScript-ing and server side PHP scripting and MySQL. Understanding of basic web security concepts.
| |
− |
| |
− | Normal Content
| |
− | Review of CS170 concepts:
| |
− | Basic HTML: basic formatting, lists, tables
| |
− | Extensive HTML forms review
| |
− | Basic CSS: selectors, box model, colors, fonts
| |
− | JavaScript/ECMAScript review: basic data-types, variables and scope, functions, conditionals, loops.
| |
− | The DOM, document and window objects, events and the event object
| |
− | PHP Scripting:
| |
− | Output
| |
− | Data-types and scoping
| |
− | Super-Globals: $_GET, $_POST, etc.
| |
− | Language features: functions, conditionals, loops: while, for, foreach
| |
− | MySQL/MariaDB:
| |
− | Databases and tables
| |
− | Data-types
| |
− | SQL syntax: creating table, insert, update, delete and select
| |
− | The PHP Mysqli interface (switch to PDO?)
| |
− | simple vs. prepared statements
| |
− | Security, escaping strings, input validation, etc
| |
− | AJAX: Asynchronous client/server pages via XMLHttpRequest and JSON encoded data.
| |
− | HTTP authentication schemes including HTTP auth, PHP sessions, creating long lived sessions using sessions cookies coupled with a user and sessions tables, password hashing, SSL/TLS security
| |
− | WebSockets (time permitting)
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | CS170 style review problems:
| |
− | Creating static HTML forms and submitting to a PHP form handler
| |
− | Dynamic PHP pages using $_GET variables
| |
− | Simple ECMAScript dynamic server pages (PHP generated server side data requested via XMLHttpRequest() on the client.)
| |
− | Creating tables and inserting data into a MySQL database via PHP from files / web forms.
| |
− | Paginated display of a database w/ column sorting via server side PHP/Mysqli
| |
− | Chat client/server (time permitting)
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | W3Schools, Mozilla Developer Network (MDN)
| |
− | PHP.net, Mariadb.org, etc.
| |
− |
| |
− |
| |
− | == CS 499 Senior Seminar==
| |
− | Catalog Description
| |
− |
| |
− | The senior seminar is taken by students in their last year. The course prepares students for the process of applying for and interviewing for jobs or a graduate program. Students also present on current topics in computer science. Prerequisite - senior standing, C or better in CS 202.
| |
− |
| |
− | Most important prerequisite skills/knowledge: ready to graduate
| |
− | Most important skills/knowledge gained: solidify/refresh basic programming, can handle interview questions, well-prepared application materials
| |
− |
| |
− | Normal Content
| |
− | Creating application materials - resume, cover letter
| |
− | Technical application materials - github with sample projects, personal website with information linked
| |
− | Practice interview questions - basic programming, at least one other type (database, web, etc.)
| |
− | Job search and applying for jobs
| |
− | Presentation skills
| |
− |
| |
− | Important Assignments and/or Exam Questions
| |
− | ISU CS programming assessment - must pass to pass the class
| |
− | Hackerrank programming asdfproblems - basic programming and at least one other category
| |
− | Application materials - create and make adjustments based on feedback
| |
− | Visit Career Center to receive feedback on application materials
| |
− | Mock interview with CS 499 instructor
| |
− | Mock interview at Career Center
| |
− | Pick one project from coursework and create powerpoint presentation, give presentation to the class, make corrections based on feedback
| |
− |
| |
− | Standard resources (textbook or online)
| |
− | Cracking the Coding Interview by G. L. McDowell (any edition)
| |
− | Accompanying website https://www.hackerrank.com/
| |
− | ISU Career Center
| |
− | Communications of the ACM - http://cacm.acm.org/
| |