CSC 212: Programming with Data Structures

Spring 2016

Prerequisites

  • CSC 111: Intro to Computer Science

Course Description and Goals

This course introduces essential data structures and associated algorithms in an intensive programming environment. We will be learning the Java programming language, as well valuable skills such as working with IDEs and the Unix commandline. There are several course objectives beyond mastery of the course material:

  1. Right tool for the right job. By the end of this course, you should not only be able to understand the key data structures, but also apply them in a variety of contexts. Given a new problem, selecting an appropriate data structure or algorithm is an extremely important skill for software developers.

  2. Linking theory and programming. Throughout the course we'll be learning about data structures in a language-independent way, as well as implementing and applying them in Java. Learning to bridge theory and a specific language is an important skill for this course and afterwards.

  3. Learning a new language. Hopefully you will leave this course with a mastery of the Java programming language, while understanding that Java != computer science. Students should leave this course with the confidence that they can learn how to use data structures in the context of a new programming language in the future.

  4. Good coding practices. These include an effective workflow (make a small change, then test, effective use of print statements, debugging) as well as proper coding style. Part of being a good software developer is writing code that other people (including yourself) can read and use later on.

Assignment Notes

There will be weekly assignments and labs, and it is strongly encouraged that students do not fall behind, since it will be difficult to catch up. Assignments for this course are designed to be challenging and push you to new levels as a computer scientist. There is always room for improvement - hold yourself to a high standard for your work for this class. There are many resources (TAs, office hours, Piazza, textbooks, online Q&A) designed to help you get the most out of the process of completing coursework. Late assignments will generally not be accepted unless there is a documented emergency. All assignments must be submitted on the Unix server Aurora. We will not be using Moodle for this class.

Textbooks

You are strongly encouraged to obtain the following textbooks, but they are not required (and one is free online). There will be suggested readings from these books. They are both on reserve in the library, or you could share with a classmate. If you are a CS major or anticipate using Java in the future, I would recommend having these books as references.

Software Links

  • (Recommended) Eclipse IDE for Java Developers, Download
  • (Windows, non-lab machine) Putty, Download

Online Discussion

This semester we will be using Piazza for online class discussion, homework help, announcements, clarifications, etc. Piazza can help create a supportive community outside of class, as well as provide quick answers to questions outside of office hours. Posting on Piazza counts toward your participation grade, and it is required to either ask or answer a question at least once. Our class page is:

https://piazza.com/smith/spring2016/csc212/home

Tentative Topics

  • Transitioning from Python to Java
  • Classes in Java
  • Primitive Types
  • Arrays
  • Interfaces, Inheritance, and Abstract Classes
  • Graphical User Interfaces (GUIs)
  • Linked Lists
  • Iterators
  • Sorting Algorithms
  • Stacks
  • Queues
  • Complexity and Big O Notation
  • Recursion
  • Trees and Tree Algorithms
  • Decision Trees
  • Priority Queues
  • Heaps
  • Maps and Hash Tables
  • Graphs and Graph Algorithms

Teaching Assistants

There are several wonderful TAs who will be holding office hours for this class, as well as answering questions on Piazza. Their schedule can be found here:

http://cs.smith.edu/classwiki/index.php/Computer_Science_TA_hours

Collaboration and the Honor Code

Credit for this section: Nick Howe

Learning to program requires dedication and hard work. Students are expected to complete the assignments for this course by themselves, and will not benefit from relying too much on others. Therefore, each student will be expected to follow this guideline: on individual assignments, nobody should see your code on a programming assignment but yourself and the members of the course staff! By extension, you should not see anybody else's code either. With the sole exception of your partner on any pair programming assignments, sharing code or working with others to write code for homework assignments is a violation of course policy and may result in a referral to the Honor Board. Similarly, taking code found from other sources (such as the internet) and representing it as your own is dishonest and uniformly prohibited. (Use of small portions of found code is acceptable if you are scrupulous about documentation and attribution.)

Despite the above, many forms of collaboration are specifically encouraged. On any assignment students may and should discuss algorithms, approaches, and issues that arise so long as this is done without reference to specific code. Students may also discuss any programs and code not directly related to the solution of a current or pending programming assignment. In this manner, students may assist each other while ensuring that each ultimately completes the assignments for herself. During in-class labs (as opposed to the homework assignments), students are encouraged to help each other work through problems, and may review each others' programs as necessary toward that goal. Finally, some assignments may be designated for pair programming; on these each pair may work together as one but should observe the usual restrictions above with regard to other pairs.

Students may consult online or print references on all assignments and labs. Standard language references showing syntax, usage, class javadoc, etc. need not be cited. If you use a fragment of code (more than a single line) from some source other than the designated course textbook, you should document and credit the source in your readme.txt. As noted above, you must write the bulk of your program yourself -- just as you may use short quotations in an essay, but would not copy paragraphs wholesale. When in doubt, err on the side of including a citation, and consult the professor if you think you might be in danger of leaning too heavily on a source.

Grading

  • Homeworks, Labs, and Participation: 50%
  • Exams: 30%
  • Final project: 20%

Electronic Devices

During both lecture and lab, you are welcome to use electronic devices in a way that is directly related to the class (taking notes, working on your lab, etc). Please refrain from any other websites or non-class related activities, for the main reason that this is distracting to others sitting around you.

Additional Resources