Difference between revisions of "CS Courses Standard Content"

From Computer Science
Jump to: navigation, search
(CS Courses Standard Content Pages)
(TODO/Possible New Pages)
(4 intermediate revisions by the same user not shown)
Line 21: Line 21:
 
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 62: Line 33:
 
* [[CS 420 Theory of Computing]]
 
* [[CS 420 Theory of Computing]]
 
* [[CS 421 Formal Methods]]
 
* [[CS 421 Formal Methods]]
* [[CS 451 Architecture]]  ''(missing information)''
+
* [[CS 451 Architecture]]   
 
* [[CS 452 Software Engineering]]
 
* [[CS 452 Software Engineering]]
 
* [[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 44:
 
* [[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/
 

Revision as of 13:21, 18 May 2021

Basic Information About CS Courses

Note: as of summer 2018, this document contains information about all courses that are required in the CS or IT majors. Other CS courses are not listed here yet.

Points of Contact

Steve Baker - CS 151, 469, 479
Laci Egri - CS 303, 420
Arash Rafiey - CS 256, 458
Geoff Exoo - CS 456, 471, 473
R.B. Abhyankar - CS 421, 451, 452, 470
Jeff Kinne - CS 170, 202, 260, 499
Rob Sternfeld - CS 101, 201, 457

Prerequisites

CS 151 is prerequisite for - CS 170, 201, 260
CS 170 is prerequisite for - 479
CS 201 is prerequisite for - CS 202, 303, 469, 479
CS 202 is prerequisite for - all 400 level except 469, 479
CS 303 is prerequisite for - CS 420, 421, 457, 458
Math 115 is corequisite for - CS 201
Math 115 is prerequisite for - CS 202, 303
Courses with no prerequisite - CS 151, 256

CS Courses Standard Content Pages