Difference between revisions of "CS Courses Standard Content"

From Computer Science
Jump to: navigation, search
(CS 202 Computer Science II)
(TODO/Possible New Pages)
(23 intermediate revisions by the same user not shown)
Line 22: Line 22:
Courses with no prerequisite - CS 151, 256 <br>
Courses with no prerequisite - CS 151, 256 <br>
=TODO/Possible New Pages=
= CS Courses Standard Content Pages =
Items to spin off as standalone videos / tutorials <br>
* [[CS 101 Fundamentals of Computing]]
Editors - vim, emacs, pico, atom.  Should be able to edit text files, save changes, make copies.<br>
* [[CS 151 Introduction to Computer Science]]
IDEs - eclipse, MS visual studio.  Should be able to create a project, add source files, compile and run, debug.<br>
* [[CS 170 Web Programming]]
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>
* [[CS 201 Computer Science I]]
Unix tools - grep, sed, awk, find, makefiles, unix regular expressions, reading manual and manual organization, pipes, I/O redirection.<br>
* [[CS 202 Computer Science II]]
* [[CS 256 Structured Design]]
=Programming Assessment=
* [[CS 260 Object Oriented Programming]]
==Catalog Description==
* [[CS 303 Discrete Structures]]
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.
* [[CS 420 Theory of Computing]]
* [[CS 421 Formal Methods]]
== Prerequisites ==
* [[CS 451 Architecture]]  
* ''TODO''
* [[CS 452 Software Engineering]]
* [[CS 456 Systems Programming]]
==Standard Content==
* [[CS 457 Data Base Processing]]
C programming, with one program from five different types:
* [[CS 458 Algorithms]]  ''(needs information)''
* Simple program that requires a loop or nested loops.
* [[CS 469 Unix/Linux Administration and Networking]]
* Program that scans through text a character at a time to do something.
* [[CS 470 Programming Languages]]
* Linked list traversal.
* [[CS 471 Operating Systems]]
* Binary tree traversal.
* [[CS 473 Networking]]
* Bit operations.
* [[CS 479 Web Programming II]]
* [[CS 499 Senior Seminar]]
==Important Assignments and/or Exam Questions==
* ''TODO''
==Standard resources==
[[Programming Assessment|CS Programming Assessment Wiki Page]]
= CS 101 Fundamentals of Computing =
== Catalog Description ==
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.
== Prerequisites ==
Typing and basic computer use - web browser, email, etc.
== Standard Content ==
===Course Outline ===
We will spend 1-2 weeks on each of the following topics:
* What is inside a computer: CPU, RAM, hard drive, etc.
* Internet 101: how data is moved around the internet
* Computer and internet security: how do you know your data is secure?
* Servers and such: logging into a server, transferring files
* Html basics: creating web pages, a little bit of javascript
* Block programming: scratch.mit.edu, code.org, blocky
* Computational problems: things computers can do really well, and things that are impossible for computers to solve
* Artificial intelligence: different meanings of the term, examples
===Learning Outcomes===
The following are the most important learning outcomes for each of the 8 topics listed in the course outline.
* What is inside a computer
* Name the different components that make up a computer.
* Describe what the terminology associated with a component means (e.g., Ghz for CPU’s is the speed of the CPU, GB for the size of a hard drive).
* Evaluate the tradeoffs between different components (e.g., one CPU versus another)
* Internet 101
* Explain the basic infrastructure of the internet and associated terminology.
* Explain the infrastructure of a home network, and be able to configure a home network.
* Explain how web browsing and email works, in terms of which parties are involved (e.g., server and client), where data is stored, and what communication is involved.
* Computer and internet security
* Explain the concepts of encryption/decryption, digital signing, and the difference between public-key and private-key encryption.
* For given situations, be able to say whether a given interaction is secure or not.
* Know the key terminology of internet security (e.g., rsa, sha, https, etc.).
* Servers and such
* Explain what servers are used for
* Be able to log in to a server to transfer files to a server, and login via ssh to issue commands to the server
* How is data stored on a server, and how do we access data
* Html basics
* Explain the basic structure of an html document, and understand that an html document is a plain text file that has markup tags to say how to display different parts of the webpage.
* Be able to create simple html webpages.
* Be able to put webpages onto a web server.
* Block programming
* Understand the concept of a computer program as instructions for the computer.
* Be able to design simple programs in a graphical programming environment (one where there is no possibility for syntax errors, e.g., scratch).
* Computational problems
* Explain some examples of computational problems, and understand how problems are framed (input to the problem, correct output, running time of finding the solution).
* Basic skills in evaluating efficiency of an algorithm.
* Explain some examples of computational problems that either cannot be solved, or require inordinate amount of time to solve (e.g., halting problem).
* Artificial intelligence
* Understand the concept of the “Turing test” as a test of artificial intelligence.
* Know the history of some famous examples of “artificial intelligence” (e.g., chess playing, Jeopardy playing, chat-bots).
* Explain some examples of artificial intelligence techniques (e.g., spam filtering, facial recognition, expert medical systems).
===Important Assignments and/or Exam Questions===
* ''TODO''
=== Standard resources ===
* The Beauty and Joy of Computing - course on CS Principles, including programming in SNAP
* Computer Science Principles - a similar course by Amit Jain at Boise State with much of the content online
* Introduction to Computing - a similar course by Nick Parlante at Stanford with much of the content online
* HTML tutorial, CSS tutorial, More on CSS, Javascript tutorial
* Introduction to Computing: Explorations in  Language, Logic, and Machines by David Evans
* A Computer Science Tapestry by Owen Astrachan
* Blown To Bits: Your Life, Liberty and Happiness After The Digital Explosion by Hal Abelson, Ken Leeden and Harry Lewis
= CS 151 Introduction to Computer Science =
== Catalog 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.
== Prerequisites ==
* None
== Standard Content ==
===Course Outline ===
* Using unix - getting around in the shell, dealing with files and text editors.
* Making directories / folders, what are they?
* Making and editing files, what are they?
* Unix file permissions, ls -l output decoding
* Wild-cards (at least * and ~)
* List of required commands: passwd, chfn, man, ls, cp, mv, rm, mkdir, rmdir, chmod and some editor, ssh/scp/rsync?
* Using the 151check program and auto-checking their assignments
* HTML and CSS
* Basic HTML elements: html/head/body, lists, tables, textual formatting
* Basic CSS styling: selectors, box model properties, colors, fonts
* Probably will deprecate this portion of the class or move to the end if doing ES in the browser examples.
* Used as a lighter introduction to files and editing
* ECMAScript programming:
* Data-types:
* Numbers: Integers/Floats, Bases, formatting, comparing, min-max
* Strings: comparing, searching, more emphasis on what is a character?
* Arrays (Some on objects), min-max element, searching/sorting
* Common methods for the above data-types.
* Using command line parameters
* Console output, some formatted output
* Variables and scope
* Conditionals:
* if, if-else, if-else chaining
* Simple Boolean logic: NOT, AND, OR, Boolean expressions
* Switch?
* Functions and methods, method-chaining
* Loops:
* while, do-while and for loops.
* Nested loops
* Iteration over arrays/objects with for-in / for-of
* Dealing with some file-data (strings/characters or JSON encoded arrays)
* Algorithms:
* Comparing and counting things
* min-max of 2/3/4 elements, finding second largest/smallest
* Searching: linear search then later binary search
* Sorting: insertion and selection sort
* Caesar cipher encryption?
* Arrays as stacks/queues: push/pop, shift/unshift operations
* Math:
* Bases - converting to/from binary and decimal, Hexadecimal and Octal
* Summation
* Modulus arithmetic
* Bases
* Some functions: min/max, floor/ceil, abs, pi, sin, cos
===Learning Outcomes===
* Ability to use Unix at the command line.
* Basic understanding of files and directories
* Can take a specification and produce code implementing it.
* JavaScript (ECMAScript) programming and debugging
* Understanding of primitive data types and basic Boolean logic
* Basic programming concepts such as scope, functions, conditionals and loops.
* Simple algorithms for searching and sorting and simple mathematical concepts as they relate to programming such as numeric bases, summation and modulus arithmetic.
===Important Assignments and/or Exam Questions===
* Using Unix - copying, creating files and directories, using a text editor.
* Hello world - creating a basic program and getting it to run.
* Unit conversion - converting between degrees/radians, etc.
* Looping and iteration over some datum - summation, min-max finding
* 2 dimensional data and nested looping - making a multiplication chart
* Data validation - ask for phone number and check that what they typed is valid. Also for other types of data (e.g., email address, age, …). (students have great difficulty with this type of problem.)
* Caesar cipher encryption/decryption (playfair setup, but not called that)
* Interactive programs?
* Auto-testing has difficulty with anything random.
=== Standard resources ===
* W3Schools
* Mozilla Developer Network (MDN)
* Tutorials Point
= CS 170 Web Programming =
== Catalog Description ==
An introduction to World Wide Web programming methods and scripting languages. Includes Hypertext Markup Language (HTML), Cascading Style Sheets (CSS), Dynamic Hypertext Markup Language (DHTML), JavaScript, and VBScript.  Prerequisite - C or better in CS 151.
== Prerequisites ==
* Basic understanding of at least one programming language’s syntax and primary data structures.
* Variables, primitives, and literals
* Functions
* Collections
* Most important skills/knowledge gained:
* Client-server relationship and front-end back-end architecture
* Editors, multi-file projects, code linters, and workflow
* The JavaScript event loop and asynchrony
* The JavaScript prototype and the `this` keyword
* 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
== Standard Content ==
* Using Unix (refresher)
* Client Server relationships
* Understanding Apache as a System Service
* Front-end Back-end Architecture
* HTML and CSS (refresher)
* Document Object Model (DOM tree)
* Code Editors, Linters, and Workflow
* JavaScript Event Loop and Asynchrony
* Events
* setTimeout() and setInterval()
* Promises
* Latest EcmaScript Additions:
* Arrow Functions
* Rest and Spread operators
* .forEach() and .map()
* Binary, octal, hex literals
* Template sting and interpolation
* The JavaScript Prototype
* Objects, prototypes, and new
* The “this” keyword
* Regular Expre ssions
* ES6 classes
* Abstraction techniques and code reuse
* Building web components
* Intro to PHP (Hypertext Preprocessor)
* Build Tools - webpack, gulp (time permitting)
* Testing tools - jasmine, mocha, jest, ava (time permitting)
* Common frameworks (time permitting)
* KnockoutJS
* Vue
* React
===Important Assignments and/or Exam Questions===
* ''TODO''
=== Standard resources ===
* (optional) [https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742  JavaScript: The Good Parts by Douglas Crockford]
* (optional) [https://www.amazon.com/dp/0596806752/ref=rdr_ext_tmb  JavaScript Patterns by Stoyan Stefanov]
* [https://developer.mozilla.org/en-US/docs/Web  Mozilla Developer Network (MDN)]
= CS 201 Computer Science I =
== Catalog Description ==
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.  Prerequisite - C or better in CS 151.
== Prerequisites ==
* ''TODO''
== Standard Content ==
===Course Outline ===
Data formats and number systems (binary, decimal, octal, hex), signed/unsigned, two’s complement, floating point, long, int, short char, C strings
C Programming - all keywords and operations
C compiler, command-line arguments
C library functions - formatted I/O, C strings,
I/O with different data formats and number systems
Basic data structures - unsorted array, sorted array, linked list, heap, stack, queue, binary search tree.  Can do all on paper, do code for some in class and as assignments.
===Important Assignments and/or Exam Questions===
* ''TODO''
=== Standard resources ===
* ''TODO''
== Notes ==
Taking CS 201 and CS 202 Simultaneously
If a student requests taking CS 201 and 202 simultaneously to stay on track to graduate on time, the following must be met.
At least an A- in CS 151
Number systems (binary, octal, decimal, hex)
Firm understanding of programming fundamentals - variables / data types, arrays, control flow, loops, scope, string manipulation, pointers. 
Ability to write basic programs in C or python - anything that can be done with a few nested control structures (loops, if’s).
Review all of tutorialspoint - data structures & algorithms
Good understand of the following data structures - unsorted array, sorted array, linked list, stack, queue, hash table, binary search tree.  For each can do the following - explain the operations (insert, delete, lookup), run examples on the board, explain the running time of the basic operations
Programming assessment - problems 1, 2, 5 correct, get problems 3 and 4 correct possibly with assistance
Taking CS 201 and 303 Simultaneously
To take CS 303 simultaneously, you must
At least a B in CS 151
Meet items b), e), f) from the above list
= CS 202 Computer Science II =
== Catalog Description ==
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. Prerequisites - C or better in CS 201.
== Prerequisites ==
* basic programming concepts
* ability to use unix
== Standard Content ==
===Course Outline ===
* Review (2 weeks)
** C Programming - all keywords and operations, libraries and header files
** Data formats and number systems (binary, decimal, octal, hex), signed/unsigned, two’s complement, floating point, long, int, short char, C strings
** I/O with different data formats and number systems
** Basic data structures - unsorted array, sorted array, linked list, heap, stack, queue - code for all 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 (1 week) - big O/Omega/Theta, little o/omega, definitions, basic proofs, polynomials / exponentials / logarithms, recursion trees
* Memory organization (1 week) - text, data, heap, stack, malloc, free, pointer arithmetic
* Unix and debugging (1 week) - gdb, grep, sed, awk, find, compiler options, makefiles, unix regular expressions, reading manual and manual organization, pipes, I/O redirection
* Disk organization (1 week) - inodes, superblocks, etc.
* New data structures (4 weeks) - binary search tree (including balanced), hash table, skip list, trie, B tree - code for some in class and as assignments
* Graphs (1 week) - 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++ (2 weeks) - data abstraction and encapsulation, defining classes, creating objects, inheritance, protection, virtual functions and polymorphism
* The Standard Template Library (1 week)
* Comparison of C++ and other OO Languages (Java, Python, etc.) (1 week)
===Learning Outcomes===
* C programming and debugging,
* data structures understanding (can explain lookup/insert/delete for each DS, work small examples on paper, know running times) and
* coding (can finish partially complete DS code, write new functions to traverse DS)
===Important Assignments and/or Exam Questions===
* Programming assessment - must pass with 3 and 2 halves to get a C or better
* Data structures programming, exam/homework question - given prototype for insert/lookup/delete, can give correct code
* Data structures programming, exam/homework question - given prototype for function that should use data structure functions, can give correct code
* C programming play computer, exam question - given any short C program (a few dozen lines, say) and sample input, can trace execution and final output
* Some large project that is interesting - game, etc.
=== Standard resources ===
* Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
* The C Programming Language by Kernighan and Ritchie
* Online courses/tutorials - MIT course - Practical Programming in C , How to Think Like a Computer Scientist, C++ Version - an online textbook, CS 50: Intro to CS I at Harvard - has videos, lecture notes, Reference on C and C++, The C Programming Language, C Programming Tutorial, Fresh2fresh C Tutorial

Latest 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


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