diff --git a/README.md b/README.md index 2433bbe..a62126b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,192 @@ -cs2270 -====== +CSCI 2270 (Spring 2013) Syllabus +================== + +This describes _Data Structures & Algorithms_, sometimes known as CSCI +2270, at the University of Colorado, Boulder. The course home page is +actually a GitHub repository located here: + +[https://github.com/johnsogg/cs2270](https://github.com/johnsogg/cs2270) + +People +======= + +*Instructor:* Gabe Johnson - gabe.johnson@gmail.com + +*TAs:* + +Yogesh Virkar - Yogesh.Virkar@colorado.edu +Xin Pan - xin.pan@colorado.edu +Shang Ma - Shang.Ma@colorado.edu + +*LAs:* + +(none as of yet) + +Course Purpose +======= + +The purpose of this class is to introduce you to some of the +fundamental tools in computer science: data structures and the +algorithms that operate on them. This will be a tricky course, but it +is _not_ by any means meant to be a "weed out" class. If you are +having trouble, please come see me before it is too late and we can +work something out. + +Computer programming, and the more general idea of computational +thinking, is rapidly becoming a basic literacy skill. By the end of +this course you should be prepared to tackle many advanced CS and +programming challenges. + +Grading and Course Structure +======= + +There are two components to your final grade: Homeworks and +tests. Each component is worth 1/2 of your grade. Homeworks are due on +Fridays. Test dates and homework due dates are given on the calendar. + +Homeworks +-------- + +There are _eleven_ homework assignments. Each is worth 15 points, for +a total of 165 points. Homeworks are due at 6pm. After they are late, +you may only receive a maximum of 5 points. You may use RetroGrade to +turn in your assignment as often as you like. Keep in mind that if you +turn it in after it is due, it will cap your score at 5/15. + +Many assignments can be completed in more than one language, though +you are only required to complete it in C++. Happily, you can turn in +assignments in the other available langauges and earn up to 15 extra +credit points. + +At the end of the semester, _provided you received at least 5 points +on all homework assignments_, extra credit will be aded to your total +homework grade, but **extra credit is weighted at 50%**. So for +example, suppose your homework score is 150, you qualify for extra +credit, and you have 40 points of extra credit. Your final homework +score would then be: + + final_hw_score = hw_score + (0.5 * extra_credit) + == + final_hw_score = 150 + (0.5 * 40) = 170 + +So in this example you got 103% on the homework component. Congrats. + +**Collaboration on homework assignments is strongly encouraged.** If +you work together or find a web site with code that you learn from, +_you must indicate the relevant people and web sites in the source +code you submit_. Further, if you do work with other people, or find +code on other web sites, _you must type all the code yourself._ +Obviously we can't police copy/paste, so please realize this is for +your own good. You won't learn anything with Control-V. + +Homework assignment descriptions and file downloads will appear in the +course GitHub repository over time. I will try to make them available +far in advance so you can work ahead if you like. + +Tests +----- + +There are three tests. Two will happen during normal lecture periods, +and the final is held whenever the university scheduled it. (I'll find +out when this is.) The first two tests will cover material covered +just before it; the final will be comprehensive. + +_Tests are not collaborative. The Eye of Sauron will be watching. So +will I. Do not cheat._ + +Tests have the following point values: + +* Test 1: 40 points +* Test 2: 50 points +* Teset 3 (final): 75 points + +Specific information about tests will appear in the course GitHub +repository about a week before they happen. + +Reading Material +========== + +There is no required book for this course. Textbooks are absurdly +expensive, and there are a number of high-quality introductory texts +available online. Learning to program is best done by writing lots and +lots of code. So: I will suggest readings from these books throughout +the course, but _none of it will sink in unless you write code to +convince yourself that you know what you are doing._ + +We will primarily use the C++ version of book linked below by Clifford +A. Shaffer. There are two versions of this book that differ only +slightly---one is for C++, the other for Java. You are required to +turn in assignments in C++, but extra credit may be earned by +submitting in Java or Python. + +The books below are freely available on the web, but in some cases you +can give the author money if you want a nicer version. + +_Data Structures and Algorithm Analysis_ by Clifford A. Shaffer +:: [http://people.cs.vt.edu/~shaffer/Book/](http://people.cs.vt.edu/~shaffer/Book/) + +_C++ Language Tutorial_ + +:: [http://www.cplusplus.com/doc/tutorial/](http://www.cplusplus.com/doc/tutorial/) + +_Learn C The Hard Way_ + +:: [http://c.learncodethehardway.org/](http://www.cplusplus.com/doc/tutorial/) + +_Learn Python the Hard Way_ + +:: [http://learnpythonthehardway.org/](http://learnpythonthehardway.org/) + +General Topics +======== + +Here are the general topics we will cover in CS 2270: + +* Course overview + +* Desired outcomes: + - Write standard datastructs/algos (DSnA) + - Understand when DSnA are appropriate + - Recognize/create test data for well known DSnA + +* Document code: + - pre/post conditions + - function contracts + - class invariants + +* Foundational concepts: + - pointers + - recursion + - linked lists + - binary search (trees) + +* Sorting algorithms: + - Mergesort + - Quicksort + - Heapsort + +* Algorithm efficiency: + - log, linear, quadratic + - identify algorithm big-O + +* Classes (design/write/test) + - List-based collections + - Stacks + - Queues (priority and otherwise) + - Binary Search Trees + - Balanced Search Trees + +* The Art of Defensive Programming + - Two programming activities: debugging, or bugging + - Top-down design + - Programming with pencils + - Collaboration + - Find and fix bugs + - Good programming style + - Testing strategies (unit tests, interactive tests) + +* Optional Advanced Topics: + - Inheritance + - Graphs + - Finite State Machines -Code for CSCI 2270 - Data Structures & Algorithms - University of Colorado Boulder \ No newline at end of file