CSC212: Programming with Data Structures
- Eitan Mendelowitz
- Ford Hall 252
- Office Hours:
- W 10:30-11:50AM
- Th 1:00-2:30PM
- Class Time:
- TTh 10:30 – 11:50AM
- Class Location:
- Ford Hall 342
- Lab Time:
- T 1:00 – 2:50pm
- Lab Location:
- Ford Hall 342
- TA Sessions:
- Su, M, Tu, Th, Sa (details)
CSC 212 is a required programming course in the Computer Science major sequence. It addresses advanced programming techniques using the Java programming language and will examine in detail a selection of useful data structures. While the projects in the course will examine the minutiae of specific programming tasks, we also aim to develop a global understanding of the art of programming. Group discussion and sharing of ideas will support this endeavor. Along the way we will also learn some additional useful tricks with the Unix operating system and become familiar with some common development tools.
This is a programming intensive course. There are weekly labs and homework assignments and a final programming project, totaling 70% of the grade. It is imperative that you do not fall behind in the assignments because this most often proves unrecoverable and leads to dropping the course. Many resources (professor, TA hours, textbook, Web) are available to assist you in completing the coursework and you are expected to take advantage of them. This applies regardless of how well you are performing: even excellent programmers have room for further improvement. While the programming assignments cover practical aspects of the course material, two exams (midterm and final) will test mostly theoretical aspects of the concepts presented.
Areas of Study
- Object-oriented programming in Java.
- Basic GUI (Graphical User Interface) design
- Event-driven programming
- Simple two-dimensional graphics
- Concepts of pointers, references and indirection.
- Theory and usage of fundamental data structures:
- Linked Lists
- Hash Tables
- Searching and Sorting Algorithms
We will be using two books for this class: one covering Java, one covering data structures. The following books are available at the college bookstore:
For Data Structures:
Data Structures and Algorithms in Java (2th, 3rd, or 4th Edition),
by Adam Drozdek.
Either the book or the electronic version are fine. This book is required. It's an expensive book, but one that will be a good reference to keep.
Head First Java,
by Kathy Sierra and Bert Bates
This book is recommended. If you prefer to use a different text, that is fine as long as it supports your learning in the course.
Plan to hang on to these books so you can brush up your skills later on and teach yourself new ones.
Assignments and readings are posted to the class calendar. The calendar may change often in response to the needs of the class so consult it regularly. Lecture "slides" will also be posted to the calendar. These are provided "as is" and are not a substitute for class attendance, attention, or good note taking skills.
Normally students will be expected to take CSC 111 before this course. Students who have taken an equivalent programming course or who have otherwise achieved the requisite programming skills should consult the instructor.
Expected work includes:
- Weekly programming assignments (labs and homework)
- An in-class midterm exam
- A take-home final during the final exam period
- Final programming project
This is a programming-intensive course, designed to help neophyte programmers make the transition into developing software engineers. While programming is one of the most interesting, challenging and rewarding intellectual activities out there, it is almost impossible to learn it without a lot of practice and some frustration! This takes time, especially for debugging a troublesome program that isn't quite working right yet. Often the final small details can be the hardest to fix.
If you find yourself spending inordinate time debugging your programs, you should consult with me immediately — before it becomes a problem and you fall behind or it affects your work in other courses. I can help you find strategies to use your time more effectively. Don't allow yourself to fall behind early in the course; it will be much harder to catch up later!
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 for a programming assignment but yourself and the members of the course staff! By extension, you should not see anybody else's code either. Sharing code or working with others to write code for homework assignments is a violation of the Honor Code. Similarly, taking code found from other sources (such as the internet) and representing it as your own is dishonest and uniformly prohibited.
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.
Use and Citation of Reference Materials
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 code, preferably the header of the file containing the copied code. 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.
- Final Project:
- ± ½ a letter grade.
All students are expected to attend classes and labs regularly and to be well prepared, active participants in course discussions. Participation also includes participating in online discussions on Piazza where you can ask and answer questions about course material. Attendance, preparation, and some participation online and in person is standard participation. Exceptional participation (either positive or negative) may impact your final grade by as much as ½ a letter grade.
- Your program must compile. Avoid submitting code that does not compile, as it will receive a 0.
- It is better to submit a program that works than one which crashes, even if you have not implemented all the required features. Use a version control system like Git or at least keep intermediate versions of your programs in separate directories, so that if you do not have time for last minute debugging, you can submit the last version that (at least partially) worked.
- The way you document your program may affect your grade: be generous with pertinent comments! Students will be expected to meet the documentation standards described in class.
No late homework will be accepted, except at the instructor's discretion for documented extenuating circumstances. You should submit, by the midnight deadline, the homework solution reflecting your work on it up to that point. Note that the homework submissions will be electronically collected at the project deadline, so assignments that have not been properly submitted will be considered late and will not be accepted.