Skip to content

Commit

Permalink
syllabus for 2270
Browse files Browse the repository at this point in the history
Signed-off-by: Gabe Johnson <gabe.johnson@gmail.com>
  • Loading branch information
johnsogg committed Jan 11, 2013
1 parent 265f376 commit 9fb99e9
Showing 1 changed file with 191 additions and 3 deletions.
194 changes: 191 additions & 3 deletions 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 &amp; Algorithms - University of Colorado Boulder

0 comments on commit 9fb99e9

Please sign in to comment.