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 science 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 Curriculum Updates 2019-2020 - Summary
- 2 Course Descriptions
- 2.1 BS Major Courses - All Concentrations
- 2.2 BS Major Courses - Computing Science
- 2.3 BS Major Courses - Information Science
- 2.4 BS Major Courses - Data Science
- 2.5 BS Service Courses - Required in Other Majors
- 2.6 BS Elective Courses - Not Required in Any Major
- 2.7 MS Major Courses - Required of All Concentrations
- 2.8 MS Major Courses - Professional Concentration
- 2.9 MS Major Courses - Academic Concentration
- 2.10 MS Major Courses - Bioinformatics Concentration
- 2.11 MS Major Courses - Data Science Concentration
- 2.12 MS Elective Courses - Not Required in Any Concentration
- 3 BS in Data Science from Math
- 4 OLD
CS Curriculum Updates 2019-2020 - Summary
BS and MS Programs
- Existing concentrations revised
- New concentrations in Data Science in BS and MS
- New accelerated BS+MS program - see below under MS programs
Minors and Certificates
- New undergraduate minor in Computer Science Teaching - CS 101, CS 151, CS 260, CS 305, ECT 173. Mapping from courses to IN licensing exam
- Revision of undergraduate CS minor and Certificate in Applied Computer Science
- New (Graduate) Certificates?? Unix/Linux Administration, Web Programming, Database Administration, Algorithms, Data Science, Informatics, Software Development, Systems Development ??
- CS 305 Computer Science Teaching Methods (part of CS Teaching minor) model syllabus
- CS 401 Programming for Data Science - undergraduate analog of existing CS 501
- Name change CS 201 Programming Structures (was Computer Science I), CS 202 Data Structures and Algorithms (was Computer Science II), CS 303 Discrete Structures and Computing Theory (was Discrete Structures), CS 351 Computer Organization (was CS 451 Computer Architecture), CS 499 Senior Design (was Senior Seminar), CS 501 Programming for Data Science (was Programming for Data Science & Analytics I), CS 601 Programming for Data Science II (was Programming for Data Science and Analytics II)
- # of credit hours CS 303 4 hours (was 3), CS 351 4 hours (was 3), CS 456 4 hours (was 3), CS 458 4 hours (was 3), CS 499 4 hours (was 1)
- Catalog description updated for all of those courses as well
- Required courses no longer required for the BS (to make room for increase # hours in key courses above) - CS 420 Theory of Computation, CS 421 Formal Methods, CS 452 Software Engineering
Credit hours and prereqs in parenthesis.
|All (25)||CS (26)||IS (25)||DS (26)|
Stats - Math 241 or 341 (3)
Math 131, 132 Calc I, II (8)
101 Fundamentals of Computing (3)
Math 131, 132 Calc I, II (8)
- Culminating Exam - must be passed before graduating, students who have not passed it will be given an incomplete for their culminating experience until passed. Content - programming questions graded all-or-nothing covering basic programming and data structures, WHAT ELSE. Sample exam and grading rubric is provided at the beginning of each term, exam is given at least once per term.
Minor and Certificate
- Minor - CS 151 (3), 201 (4), 303 (4), 351 (5). Or do we leave off 303 and 351 and let them choose...??
- Certificate - CS 151 (3), 170 (3), 201 (4), 457 (3), 479 (3). Or do we let them take CSS stuff...??
- MS Program catalog description - must pass a comprehensive exam (given at least once per term, over basic programming and data structures, WHAT ELSE, sample and rubric provided at the start of each term), if comp exam not passed then given incomplete for culminating experience. Also give incomplete for culminating experience if insufficient progress by end of term.
- Courses required for all concentrations - unchanged
- Bioinformatics concentration - allow either CS 500 or CS 501 (can count CS 501 in place of CS 500)
- Professional concentration - also require CS 501 Programming for Data Science I
- Academic Concentration - CS 658 Algorithms II (4), 671 Operating Systems II (5), and CS 558 Algorithms I (5), CS 556 Systems Programming (4) if CS 456/458 not taken as ISU undergrads. See updated 4 semester degree plan.
- Data Science Concentration - see below.
- Accelerated MS - 4+1 BS+MS. Common components of all 4+1 programs - student must have at least 3.0 GPA and have completed at least 80% of credits by start of fourth year, can take up to 9 500 level credits as senior and have count for both BS and MS, can take up to 6 600 level credits as senior which do not count for BS or towards 120 credits or for full time status for financial aid. Specific to CS 4+1 - approved to take any 500/600 level CS for which students have met prereqs, a 4+1 degree map for each concentration is attached. The university-wide policies are - policies. An example program is - accelerated Math MS
Data Science - New Concentration
Admissions 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)
- Electives and culminating experience approved by the advisor to complete student's plan of study and at least 17 credits of 600 level coursework
Official catalog course descriptions. If a name is being changed, mark name with *. If description being changed, mark with name with ++.
BS Major Courses - All Concentrations
- CS 151 Intro to CS - ++ Core concepts that are foundational in computer science including - programming, use of computers for dealing with files and programs, how data is stored, number systems. Focus on building skills needed for programming and further study in computer science, and intermediate mastery of a particular programming language. Previous description - History of computers and computer science, principles of process description, and problem analysis. The basic structures of sequence, iteration, and selection. Programming style, artificial intelligence, current applications.
- CS 201 Programming Structures (4) - This course begins with a history of programming languages, then focuses on programming in a particular language. The following topics are covered in some detail: variables, expressions and operators, control structures, simple data types, arrays, classes, and objects. Algorithm design and security issues are also discussed.
- CS 303 Discrete Structures and Computing Theory (4) - This course is an introduction to discrete mathematics for computer science. The course covers the basic topics from set theory (including functions and relations), logic, number theory, counting, graph theory, and discrete probability. It involves a detailed study of proof techniques.
- CS 351 Computer Organization* (5) - 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.
- CS 470/570 Programming Languages - 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.
- CS 499 Senior Design (2+2) - 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.
BS Major Courses - Computing Science
- CS 202 Data Structures (4) - This course is a continuation of CS 201. It involves a deeper study of programming languages, but emphasizes programming in a particular language. Topics include algorithm design and analysis, data structures, recursion, threads, network programming, graphics, security, and ethics.
- CS 456/556 Systems Programming (4) - 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.
- CS 458/558 Algorithms (5) - 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.
- CS 471/571 OS - 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.
- CS 473/573 Networking - 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.
BS Major Courses - Information Science
- CS 101 Fundamentals of Computing - The main focus of the course is to give students a practical understanding of computing to become well-informed citizens and professionals in the computing age. Topics may include a basic study of - computational thinking, computer security, big data, artificial intelligence, and current trends in computing.
- CSS 210 Intro Networking - Topics include network types and communication models, hardware components, applications, protocols, standards, internetworking and routing concepts, OSI Model, TCP/IP, LAN and WAN networking technologies.
- CSS 211 Intro Security - This course focuses on the foundation for the study of computer system security. The course centers around the domains comprising the information security common body of knowledge. Students will learn the security management practices as well as security architecture and models security laws, and investigations.
- CSS 331 Files and Databases - This course introduces the basic database concepts. The course stresses the implementation of databases in the real world. Students learn about basic database design and terminology, and learn how to create a variety of databases using MS Access.
- CS 457/557 Database Processing - 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.
- CS 469/569 Unix/Linx Admin & Networking - 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.
- CS 479/579 Web Prog II - Advanced programming for the World Wide Web and the Internet. This course includes three approaches: the older CGI/PERL, Microsoft’s Active Server Pages (ASP), and Sun’s Java Server Pages (JSP). The course also includes the setup and configuration of World Wide Web servers including Apache and Microsoft’s IIS.
BS Major Courses - Data Science
- CS 202 Data Structures (4) - see under Computing Science Concenration
- CS 401/501 Programming for Data Science I - Thorough programming course with a focus on solving problems in data science and analytics, specifically focusing on big data and dealing with different data formats.
- CS 457/557 Database Processing - see under Information Science Concentration
- CS 475/575 Artificial Intelligence - Concepts and applications, including artificial intelligence programming languages, history, present and future development and research, expert systems, natural language processing, intelligent machines/robots, and vision. Development of artificial intelligence course project.
BS Service Courses - Required in Other Majors
- CS 256 Principles of Structured Design - IT major - An introduction to structured programming and top-down design; applications to a wide variety of practical programming problems.
- CS 260 Object Oriented Programming - some tech majors - Object oriented programming concepts and methods. Includes encapsulation, data abstraction, class development, instantiation, constructors, destructors, inheritance, overloading, polymorphism, libraries, and packages.
BS Elective Courses - Not Required in Any Major
- CS 420/520 Theory of Computation - teach out - A sampling of the different areas of theoretical computer science: finite state concepts, formal grammars and automata, computability, Turing machines, and program verification.
- CS 421/521 Formal Methods - teach out - 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.
- CS 440/540 Graphics Programming - Development of monochrome and color computer graphics software. Includes animation, two-dimensional translation, rotations, clipping, and magnification; introduction to three-dimensional graphics, hidden lines, paging, windowing, and fonts. Computer graphics course project required.
- CS 452/552 Software Engineering - teach out - This course studies the software life cycle: specification, object-oriented programming and design, program development, validation, testing, debugging, documentation, maintenance, revision control, CASE tools. The course serves as a culminating experience in the CS major. Students complete a significant software project during the course that ties together much of what has been learned in other CS courses. Students give a presentation describing and demonstrating their project; these presentations are open to the rest of the department.
MS Major Courses - Required of All Concentrations
- CS 685 Software Project (3-6) - The total development of an advanced software project in areas such as artificial intelligence, expert systems, data bases, data communications, operating systems, compilers, assemblers, coding theory, graph theory, word processors, and editors.
- CS 695 Computer Science Research (3-6) - Research studies in computer science.
- CS 699 Computer Science Internship (0-3) - Coordinated computer science work experience in business/industry or equivalent project work within the department. A comprehensive written report of the experience, including documented samples of software developed by the student, is required.
MS Major Courses - Professional Concentration
- CS 500 Programming Fundamentals - Review of undergraduate topics in Computer Science including Data Structures, Computer Architecture, and Computer Organization. Review of a computer programming language that students can expect to use in advanced courses.
- CS 600 Concerete Mathematics - An introduction to discrete mathematics for computer science graduate students. Students gain the skills needed to model problems abstractly, analyze solutions, and prove program correctness and efficiency. Typical topics include logic, induction, basic combinatorics, discrete probability, graph theory, and asymptotic growth of functions.
- CS 602 Mobile and Cloud Computing - The course deals with development and design of applications and systems for mobile and cloud computing. Challenges inherent to mobile and cloud computing are studied, such as security, consistency, faulttolerance, useability, and efficiency in mobile and cloud settings. Students are exposed to development on mobile devices and writing software for cloud computing.
- CS 603 Networking and Security - Introduction to the architecture and protocol of the internet and other networks, including networking configuration and management. Security considerations in networking and in general, including the types of exploits that are possible and how to mitigate risk.
- CS 609 Web Programming and Applications - An introduction to development and administration related to the web. Topics may include software design, client-side and server-side development, web applications, data management, and security.
- CS 610 Survey of Programming Languages - An introduction to programming in a wide variety of programming languages and paradigms. Paradigms include: imperative/procedural, object-oriented, functional, logic, and scripting. A focus is placed on obtaining basic proficiency in many languages. A second focus is on understanding language theory, design choices, and implementation.
- CS 611 Software Spec and Design - Approaches to software specification and development, such as Z and VDM. The course also explores the use of software tools available for use with software specification and development methods.
- CS 617 Databases, Data Mining, and Big Data - see under Data Science Concentration.
- CS 618 Computational Biology - see under Bioinformatics Concentration.
- CS 619 Trends in CS - A seminar on the current topics within computer science that are both new and of high interest within the research community and/or industry. Exposure to the latest technologies is provided.
MS Major Courses - Academic Concentration
- CS 658 Alg II (4) - Recurrences, probabilistic analysis, randomized algorithms, red-black trees, amortized analysis, Fibonacci heap, disjoint set union, the all pairs shortest path problem, and maximum flow.
- CS 671 OS II (5) - Understand and use the basic concepts of operating systems. Introduction of processes such as the processing unit, process management, concurrency, communication, memory management and protection, and file systems.
MS Major Courses - Bioinformatics Concentration
- CS 500 Programming Fundamentals - see under Professional Concentration.
- CS 501 Programming for Data Science I - see under BS.
- CS 600 Concrete Mathematics - see under Professional Concentration.
- CS 557 Database Processing - see under BS.
- CS 617 Databases, Data Mining, and Big Data - see under Data Science Concentration.
- CS 618 Computational Biology - An introduction to computational biology. Topics may include principles and methods used for sequence alignment, motif finding, structural modeling, structure prediction and network modeling, as well as currently emerging research areas. A focus is placed on the computational cost of solving problems in terms of CPU time, memory, and disk space. Study of the core algorithms used to solve problems.
MS Major Courses - Data Science Concentration
- CS 501 Programming for Data Science I - see under BS.
- CS 557 Database Processing - see under BS.
- CS 575 Artificial Intelligence - see under BS.
- CS 601 Programming for Data Science II - A second course in programming related to data science and analytics. Ability to handle data in non-standard formats, utilize cloud/cluster for computationally intensive analysis/simulation, and produce interactive interfaces to data and results. Use of machine learning tools.
- CS 617 DB, Data Mining, and Big Data - Introduction to using relational databases to accomplish common data storage and analysis needs. The techniques and tools available to deal with data that is too large to store in a database running on a single server. Topics may include data warehousing, map reduce, association rules, machine learning, and streaming algorithms. Note - keep 501 in Python and 617 in Python?
- Note - for Math 503, update to remove diff eq, put it more towards regression and progression, gradient (since no calc III)
MS Elective Courses - Not Required in Any Concentration
- CS 620 Theory of Comp II - Turing machines, the Church-Turing thesis, decidability, the halting problem, reducibility, recursive function theory, the recursion theorem, time and space complexity, classes P and NP, NP-completeness.
- CS 621 Discrete Struct II - Symmetry and counting, automorphism groups of combinatorial structures, finite fields and applications, error correcting codes, and generating functions.
- CS 652 Soft Eng II - Topics covered include design patterns, aspect-oriented application development, business rule approach to application development, XMLÂ processing and applications, refactoring, clean room techniques, and domain driven design.
- CS 670 Concurrent Programming - Fundamental concepts are covered including concurrency, synchronization, safety and liveness, fairness, axioms and inference rules. Concurrent execution with shared variables, semaphores of, critical regions, monitors; concurrent execution using message passing: asynchronous and synchronous message passing; concurrent programming languages and environments.
- CS 673 Networking II - Topics include internetworking philosophies, unicast and multicast routing, congestion control, network quality of service, mobile networking, router architectures, network-aware applications, content dissemination systems, network security, and performance issues. Material for the course will be drawn from research papers, industry white papers, and Internet RFCs.
BS in Data Science from Math
Note - Math is considering adding a BS in Data Science. What they are thinking is the following.
- Math 131 Calc I, 132 Calc II, 313 Elementary Lin Alg, 241 Principles of Stats, 252 Programming in Math, 341 Prob and Stats, 342 [what was the name?], 403 Stats for Data Science
- CS 151 Intro to CS (in python), 201 Programming Structures (in python), 401 Programming for Data Science (python and R), 457 Database
- Math 320 Discrete Math or CS 303 Discrete Structures
- Bus 180 Business Information Tools
- OSCM 310 Data driven decision making
- OSCM 320 Problem solving with spreadsheets
- Capstone - Math 494
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?).
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 - create a Data Mining certificate and/or minor? Would there be demand for this?
Question - electives?
Course outlines and notes
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
- Note - overall theme - make it fun, get them to spend as much time programming as possible (and enjoy it)
- Manipulating files and directories: ls, cd, cp, mv, rm, mkdir, nano, cat, (stdin, stdout, stderr)
- Few extra commands: date, find, grep, ps, kill
- Changing shell to zshell
- echo and environment variables $HOME $USER
- Number Systems: binary, octal, decimal, hexadecimal, conversions, and ASCII/UTF-8 character encodings
- Basic Components of a Computer: CPU, RAM, Hard Disk, Motherboard, etc. Binary representation of data.
- Python 3 Interactive Mode, Syntax, Identifiers
- Statements and Expressions - expressions get evaluated to a single value
- Variables and Assignment
- print() - stdout, input() - stdin
- Basic Data Types and conversion: int, float, bool, str
- Data Operators and Expressions:
- Numeric Operators: Arithmetic and Comparison, round(), bit operations
- String Operators: Concatenation, Comparison, containment (in), and length (len())
- Boolean Operators: and, or, not
- Conditional Logic: if, elif, else, code blocks
- String manipulations: string casing, str.strip(), str.replace(), \n vs \r\n
- Functions: Data are nouns, Functions are verbs, defining vs calling, arguments, return values
- Collections: list, dict, reference by index or key, converting dict,keys(), dict.values(), iteration with for loop
- Loops: for and while, while is most powerful, for is syntactic sugar, collect stdin on a loop
- File I/O: read, write, append, import os.path
- Parse File Data: CSV, .split(","), .split("\n")
- Random Numbers
- Terminal Animation - sleep()
- Sets, Tuples
- System Arguments - import sys
- Can take a specification and produce code implementing it
- Python3 programming and debugging
- Understanding of primitive data types and basic Boolean logic
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
- Note - overall goal - get them to spend as much time programming as needed (and enjoy it)
- Review/new - all of the python3 from CS 151, assume that the average student will have retained half of it and be able to refresh it in half as much time as the first time
- 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)
- Algorithms - searching and sorting, demo different running times for different algorithms
- Data structures - focus on python3 data structures (lists, tuples, dictionaries) and running time for these, basic idea for how they are implemented
- Algorithms - basics of big-O, be able to make predictions of running time for larger dataset sizes
- Running time - algorithms with log, linear, n log(n), quadratic, cubic, exponential growth - and demonstrate different running time behavior of them
- I/O with different data formats and number systems
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)
Common to all CS majors
- CS 151 Intro to CS, 201 Programming Structures, 303 Discrete Structures / Intro Theory, 351 Intro to Systems, 470 Programming Languages, 499 Senior Design
- Math 241 Principles of Stats or 341 Prob and Stats
Required for DS concentration
- CS 202 - see CS concentration
- CS 457 - see IS concentration
- CS 475 AI
- CS 401 Programming for Data Science and Anal I
- Math 131 Calc I, 132 Calc II, 313 Linear Algebra
- Math 403 Stats for Data Science [assuming prereqs work out] - once this course is created. In the meantime, substitute Math 252 on the proposal?