CS Curriculum Revisions 2019-2020
This page lists proposed changes for the CS programs. A few guiding principals...
- BS - widen the split between the computing science and information science concentrations - making the IS concentration more doable/attractive to more students, firming up the foundations in the CS concentration, adding a data mining concentration.
- MS - new data science concentration, streamline academic concentration
- BS and MS - shift some key courses to be 4-5 hour courses, ensuring a stronger foundation for more students.
- 1 CS Undergraduate Majors/Minor
- 2 CS MS Major
- 3 Teaching Schedule
CS Undergraduate Majors/Minor
CS 401 Programming for Data Science - CS 501 exists, need to create CS 401 and decide on prereqs.
CS XYZ - Programming for the Sciences - check with NSM chairpersons on what they would want (something with CS 151 as a prereq, or what, is there something they would recommend their majors take?).
CS 305 - Computer Science Teaching Methods - to be used in CS Education minor - model syllabus.
New Minor - CS Education
Current proposal for CS Ed minor is - CS 101, CS 151, CS 260, CS 305 Computer Science Teaching Methods, ECT 173 - Fundamentals of Information Technology. Mapping from courses to licensing exam
Note that the current major includes 10 courses required of all majors, 5 additional courses required for information science, 3 CS courses required of computing science, and 2 math courses required for computing science.
Names of courses. Bold part of CS minor and CS certificate. # credits in ().
|All (26)||CS (27)||IS (24)||DM (28)|
Stats - Math 241 or 341 (3)
Math 131, 132 Calc I, II (8)
101 Fundamentals of Computing (3)
Math 131, 132, 231 Calc I, II, III (12)
Note - courses that are currently part of the major that no longer would be - CS 420 Theory of Computation, CS 421 Formal Methods, CS 451 (changes to become CS 351).
Note - courses that we haven't offered in a while - CS 440 Graphics Programming, CS 463 Compilers - what should we do with them?
Note - current major is 51-53 credit hours, including 3 credits of 300 level and 25-28 credits of 400 level. Proposal would be for 50-54 credit hours, including 9-12 credits of 300 level and 16-22 credits of 400 level. Students need 45 300-400 level credits overall to graduate. Students will normally have at least about 12 credits of 300-400 level courses as part of Foundational Studies.
Question - also add - programming for the sciences, with CS 151 as a prereq? Check with NSM chairpersons.
Question - DS concentration called Data Mining?
Question - Data Mining?
Question - electives?
- 101 or 151 -> CSS 210, CSS 211, CSS 311
- 151 -> 201, 203, 251, 170
- 201 -> 202, 470, 499, 457
- 202 -> 458, 456, 471, 473, 475
- 456 -> 471, 473 ??
- 351 -> 456, 469, 479
- 303 -> 457, 458
- 170 -> 479
- Math 313 -> 401, 475
- Math 231 ->
6 Semester Plan
|Fall 1||151||101||151, Math 131|
|Spring 1||201, Math 131||151, CSS 210||201, Math 132|
|Fall 2||stats, 251||202, Math 132, 203||170, CSS 211||202, Math 231|
|Spring 2||456||201, 203, CSS 331||Math 313, 401|
|Fall 3||499||458, 471||457, 479||457, 475|
|Spring 3||470, 499||473||469|
Course outlines and notes
Courses required for all concentrations
CS 151 Intro to CS
- First course for CS track, second course for IS track.
- Note - for the first 3 weeks, they have things to do as well that don't require unix
- Ability to use Unix at the command line
- Basic understanding of files and directories
- Can take a specification and produce code implementing it
- Python3 programming and debugging
- Understanding of primitive data types and basic Boolean logic
- Basic programming concepts such as scope, functions, conditionals and loops, objects and classes, file I/O
- Most important math needed - bases, modular arithmetic, bit operations
- Simple algorithms for searching and sorting and simple mathematical concepts as they relate to programming such as numeric bases, summation and modulus arithmetic.
- Send some stuff to CS 201 instead
CS 201 Programming Structures
- Viewed as a 2-course sequence with CS 151, after CS 201 one should be a decent python programmer and have dabbled in key CS topics
- Language is currently python3
- Modular programming, including object-oriented, separating into modules
- Data formats and number systems (binary, decimal, octal, hex), signed/unsigned, two’s complement, floating point, long, int, short char, strings
- Python3 - (nearly) all keywords and operations, scripting and command-line arguments
- Python3 - all builtin functions, use of commonly used libraries (string, re, math, os.path, csv, json, tkinter)
- I/O with different data formats and number systems
- Python3 data structures (lists, tuples, dictionaries) - competent use, can do operations on paper, can do calculations of runtime for each.
CS 303 Discrete Structures / Intro Theory
- Logic - De Morgan's law, boolean operations, truth tables, inclusion-exclusion principle
- base systems
- algebra / logarithmic / exponential growth
- Big O, formal and informal definitions of important complexity class (L, P, NP, PSPACE, EXP)
- Concept of a general-purpose computer (maybe TM, maybe VN), Church-Turing thesis
- Proofs - line/geometry/propositional logic, contradiction, induction (weak and strong)
- pattern matching (maybe don't call it DFA's/NFA's/RE's)
- grammars - look at grammar for some programming language (e.g., subset of C) as an example, basic terms and concepts
- Counting - permutations, combinations, binomial theorem, pigeonhole principle
- Discrete probability - definitions, basic theorems/formula, conditional probability, independence, expectation, linearity of expectation
- "Big ideas" - Monty Hall, 100 prisoners problem, probabilistic method
- Number theory - modular arithmetic (division, exponentiation, Euclid's algorithm, inverses), sieve of Eratosthenes, primes, RSA as a big goal
- Graph theory - basic terminology, basic properties, matchings, Hall's marriage theorem, some algorithm or few
CS 351 Intro to Systems
- Assembly language - small subset of something real, or something artificial. Should include key concepts, doing coding in whatever language is chosen.
- Circuit fundamentals - logic gates, decoders, encoders, multiplexors, ROMs, universal gates, adders, flip-flops, latches, Karnaugh Maps, counters, bit pattern detectors, incrementers, multipliers, etc.
- Architecture - CPU design/organization, instruction set, RTL, registers, microcode, pipelining.
- Architecture - memory design/organization including cache, virtual memory, segmentation, paging.
- Architecture - I/O units, buses, interrupts.
- Architecture - parallel / multi-core considerations.
- Linux - more in depth use of the shell, etc.
- Linux - system calls, including using them to make programs
CS 470 Programming Languages
- Design choices in programming languages - terms, pros/cons, examples, history of programming languages
- Functional programming, including reasonable sized programming assignments
- Object-oriented programming - review, including laundry list of terms and such
- Concurrent programming - in particular how programming language design plays a role
- What else? Logic programming?
CS 499 Senior Design
- prereq - senior standing, CS 201, 203, 251
- 2 credits/term, taken for two terms
- First term - reasonable sized project involving whatever is hot at the moment. Currently - using a cloud-based system to do a website, app, DB, and have them work together.
- Second term - job search and interview prep - job search, resume, cover letter, interview questions, portfolio, personal website, git, presentation skills
CS 202 Data Structures and Alg
- C programming - nearly all keywords, operations. All C data types (and use to review binary, decimal, octal, hex, two's complement, floating point, add in long, int, short char, C strings). I/O with different data formats and number systems.
- Memory organization - text, data, heap, stack, malloc, free, pointer arithmetic
- Unix and debugging - gdb, grep, sed, awk, find, compiler options, makefiles, unix regular expressions, reading manual and manual organization, pipes, I/O redirection
- Basic data structures - start with Python3 data structures and do them in C (and compare run times).
- Other basic data structures - linked list, stack, queue, heap, sorted array, unsorted array, binary search tree - do code for all either in class or as assignments (an A student should have done code for all of these).
- More data structures - some collection of "other" data structures - balanced binary tree, B tree, skip list, trie, etc.
- Other basic data structures - unsorted versus sorted array, heap, stack, queue, binary search tree. Can do all on paper, do code for some in class and as assignments.
- Search and sorting - linear and binary search, selection and insertion sort, mergesort, heapsort, quicksort - code for all in class and as assignments
- Asymptotic analysis and running time - big O/Omega/Theta, little o/omega, definitions, basic proofs, polynomials / exponentials / logarithms, recursion trees
- Graphs - terminology, adjacency matrix, adjacency list, basic algorithms (BFS, DFS, shortest path, minimum spanning tree) - do all algorithms on the board, code for some in class, running time for all
- Classes and objects in C++ - data abstraction and encapsulation, defining classes, creating objects, inheritance, protection, virtual functions and polymorphism
- The Standard Template Library
- Comparison of C++ and other OO Languages (Java, Python, etc.)
CS 456 Systems
- Version control: Make, RCS, Git
- File system I/O - open/close/read/write, printf/scanf, opendir/closedir/readdir/stat
- Disk organization - inodes, superblocks, etc.
- 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).
CS 458 Algorithms and Theory of Computation
- Some things that are listed under CS 202
- String matching algorithms
- Graph algorithms - BFS, DFS, connected components, shortest path, MST. Others?
- Linear programming
- Dynamic programming
- Sorting algorithms - quadratic time, merge sort, quick sort, heap sort. Others?
- NP-complete / optimization problems - definitions and reductions, a few example problems
- NP-complete / optimization problems - approximation algorithms, hardness of approximation
- NP-complete / optimization problems - brute force / backtracking / CSP
- Models of computation - DFA, NFA, CFG, PDA, TM, NTM - definitions and basic properties, normal forms, equivalences, pumping lemmas.
- Complexity classes - definitions, basic properties, example problems, undecidability, diagonalization, reductions.
CS 471 Operating Systems
- Review - functions every citizen should know, basic data structures in C
- Device Management, typically focusing on storage devices and filesystems
- ext2 file system in detail
- Other filesystems at a high level
- Process/Thread Management
- Single CPU execution - time slicing, scheduling
- Multi-core execution
- Shared data - semaphores, other mechanisms, synchronization issues, race conditions
- Memory Management
- Memory organization, virtual memory, pages, page faults, CPU cache
- Other Topics, as time allows
CS 473 Networking
- 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.
CS 101 Fundamentals of Computing
- Somewhat closely parallel AP CS Principles (it happens to work out to what we'd want to do)
- basic understanding of how computers work
- basics of programming
- how information is stored and transferred between computers
- do’s and don’ts of security
- basic understanding of concepts of computational complexity and artificial intelligence
CS 170 Web Programming I
- Client-server relationship and front-end back-end architecture
- Editors, multi-file projects, code linters, and workflow
- EcmaScript latest additions
- Regular expressions
- Intro to PHP: Hypertext Preprocessor
- Separation of concerns and ideal abstraction
- Build tools and test suites
- Simple back-end in NodeJS
CSS 210 Intro Security
CSS 211 Intro Networking
CSS 311 Files and DB
CS 457 Databases
- 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)
- DataFrames - Python/pandas
- many more possibilities
CS 469 Unix/Linux Administration and Networking
- 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
- Resource limits
- Memory layout: security issues: buffer overflows, ASLR
- 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
- 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)
CS 479 Web Programming II
- Review of CS170 concepts:
- Basic HTML: basic formatting, lists, tables
- Extensive HTML forms review
- Basic CSS: selectors, box model, colors, fonts
- The DOM, document and window objects, events and the event object
- PHP Scripting:
- Data-types and scoping
- Super-Globals: $_GET, $_POST, etc.
- Language features: functions, conditionals, loops: while, for, foreach
- Databases and tables
- 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)
CS 202 - see CS concentration
CS 457 - see IS concentration
CS 475 AI
CS 401 Programming for Data Science and Anal I
CS MS Major
Required for all Majors
Culminating experience - one of the following -
- CS 699 - Computer Science Internship (0-3)
- CS 685 - Software Project (3-6)
- CS 695 - Computer Science Research (3-6)
- BIO 692 - Research in Biology (1-10) (bioinformatics concentration only)
- BIO 699 - Master’s Thesis (6) (bioinformatics concentration only)
Pass Comprehensive Exam
Note - an incomplete will be given for culminating experience if insufficient work to be complete, normally given 1 additional term to complete.
- CS 658 Algorithms II (5)
- CS 671 Systems II (5)
- CS 558 Algorithms and Theory of Computation (5) - required if 458 not taken as undergrad
- CS 556 Systems Programming (4) - required if 456 not taken as undergrad
Note - courses that are currently part of the concentration that would no longer be - CS 620 Theory of Computation II, CS 621 Discrete Structures II, CS 670 Concurrent Programming, CS 673 Networking II
- Retain current requirements - CS 500, CS 600, 1 course from 602-609, 1 course from 610-618, 1 additional course 602-618
- CS 501 Programming for Data Science & Analytics I - now required
- Retain everything from current requirements
- Allow CS 500 or CS 501 to count
Data Science - New Concentration
To declare the data science concentration, students must demonstrate competency (through coursework/transcript or otherwise) in the following - basic programming and data structures, multivariate calculus, matrix algebra. To be prepared for the DS MS, an undergraduate at ISU should complete the following - CS 151 Intro to Computer Science, CS 260 Object Oriented Programming, MATH 131/132/231 Calculus I/II/III, MATH 313 Elementary Linear Algebra.
- CS 501 Programming for Data Science & Analytics I (3)
- CS 557 Database Processing (3) (if 457 not taken as undergrad)
- CS 575 Artificial Intelligence (3) (if 475 not taken as undergrad)
- CS 601 Programming for Data Science & Analytics II (3)
- CS 617 Databases, Data Mining, and Big Data (3)
- MATH 503 Linear Algebra and Modeling for Data Science and Analytics (3)
- MATH 540 Statistics for Data Science & Analytics (3)
This is 7 required courses. Adding the 3 credit culminating experience then gives 8 courses, and 3 courses of 600-level electives (need all 3 to be 600 level so the total is 18 credits of 600 level).
Accelerated 4+1 BS+MS
- Students must have 3.0 GPA and have completed 80% of their required credits by the start of their 4th year.
- Students must finish their BS with 3.0 GPA.
- Can take up to 9 credits of 500 level courses and 6 credits of 600 level courses in final year of BS. Up to 9 credits of 500 level can count for both BS and MS. Note that 600 level courses don't count towards being full time for financial aid.
Note - this section is out of date and needs to be updated.
When these changes are in effect (2020-2021), the CS teaching schedule could be ...
- Fall and Spring (52) - 101, 151, 151, 151, 170, 201 (4), 202 (4), 203 (4), 256, 256, 260, 351 (5), 499 (2), 500, 401/501, 685/695/699
- Fall (30) - 479, CSS 210, CSS 331, 458 (4), 457, 470, 671 (5), 600, 603/611, 617
- Spring (30) - 469, CSS 211, 456 (4), 475, 658 (5), 601, 602/610, 618/619, 609
- Total - 52*2+30+30 - 164 credit hours,
And taught by ...
- Abhyankar - fall CSS 210, 603/611, 470, 256 | spring 256, 256, CSS 211, 602/610
- Baker - fall 457, 479, 351(5) | spring 351(5), 456(4), 469
- Exoo - fall 617, 401/501, 671(5) | spring 475, 601, 401/501
- Kinne - fall 151, GH 101 | spring 151, BD4ISU
- Rafiey - fall 458(4), 600, 256 | spring 658(5), 618/619
- Sternfeld - fall 500, 499(2), 170, 203(4) | spring 203(4), 500, 609, 499(2)
- New CS Faculty Member - fall 202(4), 685, CSS 331 | spring 202(4), 685, 170
- Boulware - fall 260 | spring 260
- May - fall 101, 201(4) | spring 101, 201(4)
- GAs - fall 151, 151, 260 | spring 151, 151, 260
- not offered with current staffing - , , , , 
Note - this assumes that Math is able to offer MATH 403/503, 440/540