Course Description and Overview
As more and more aspects of our lives are run by computers, the ability to program becomes the ability to influence the world. In CSC 212 you will learn the programming skills that will make you a part of that conversation. By the end of the course you should be familiar with all the basic building blocks of real programs, and be confident in your ability to design a program that will accomplish the goals you choose to pursue.
CSC 212 is a required programming course in the Computer Science major sequence. It introduces the fundamental programming techniques and data structures that are crucial tools for any serious programmer. The course will be taught in the Java programming language and will make use of its standard libraries. While the assignments for the course will examine the minutiae of specific programming tasks, we will 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.
Direct practice provides the surest path to expertise in programming, and CSC 212 is therefore a programming intensive course. There are weekly lab 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 each one builds upon the previous ones. Prior experience has shown that students who do not fully complete the assignments early in the course cannot easily recover, and usually end up dropping the course. Success means starting the assignments early so that there is time to address any problems that crop up, as inevitably happens. 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
You will need two books for this class: one covering Java, one covering data structures. The following are recommended. It is probably worth owning a physical copy of both for reference purposes, but there are decent alternatives for those wishing to save money.
- For Data Structures:
- Data Structures and Algorithms in Java, by Adam Drozdek [The 2nd edition is freely available in PDF form.]
- For Java:
- Murach's Java Programming, by Joel Murach [Web site includes some free material]
- Head First Java by Kathy Sierra and Bert Bates [Good book but dated to Java 5]
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. If you don't like the books above or want to save money, there are other options available for free on the web: Dale et al.'s Object-Oriented Data Structures Using Java for data structures, and Friedel and Potts' Java Programming Language Handbook for Java.
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 homeworks).
- Regular written commentary and reflection.
- One in-class midterm exam and a self-scheduled 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. 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, so leave yourself plenty of time.
However, if you find yourself spending inordinate time debugging your programs without really making progress, you should consult with me very soon -- before it becomes a serious 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 many times 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 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.
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 with a comment in the code and in your
readme.txt file submitted with the assignment. 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.
- Labs, homeworks, and class participation: 50%
- Exams: 30%
- Final Project: 20%
For the final grade, you have the option to choose one of the homeworks - presumably the one with the lowest grade - which will be dropped from the final average computation. However, you can only choose to drop a homework for which you attempted the work or made prior arrangements with the professor. If you miss a homework you will receive a failing grade, and that grade may not be dropped.
General Grading Guidelines:
- Your program must compile. Avoid submitting code that does not compile, as it will receive at most a grade of C (if it at least resembles a possible solution to the problem -- else it will be an E).
- It is usually better to submit a program that works than one which crashes, even if you have not implemented all the required features. Keep intermediate versions of your programs in separate directories, and if you do not have time for last minute debugging, submit the last version that (at least partially) worked.
- The way you document your program affects your grade: be generous with pertinent comments! Students will be expected to meet the documentation standards described in class.
- The majority of the grade reflects the functionality of the program (whether or not it works), but approximately 20% will be based upon the program design. Elements of good design include the proper use of program documentation, the quality of the user interface (if required for the assignment), and cleanness and elegance of programming style.
- Throughout the semester, interspersed with the technical aspects of programming and theory (data structures), we will discuss and explore simple software engineering principles, which convey discipline to the art of programming. Class attendence, participation in discussions regarding possible solutions, self-study discipline, and good organizational skills are your key to mastering programming and avoiding lengthy debugging sessions. Your final grade will also have to reflect and reward these qualities, and the work on the final project will be the best indicator.
- To summarize: 'A' level work means programs which run efficiently, do what they are supposed to do, are well designed and documented and submitted on time. Programs which largely meet the requirements of the assignment but show stylistic or other imperfections will receive a grade in the 'B' range. Programs which do not compile or are incomplete will most likely receive a grade of 'C' or lower, depending upon how close they are to a complete and correct solution.
Lab, Homework and Lateness Policy
Labwork is designed to be completed during the scheduled lab time. If for some reason you are left behind or want to redo the work later at your own pace, you have to submit everything by midnight the same day. The lab should not interfere with your work on the programming assignment.
Homework assigned on Tuesdays is due the following Monday by midnight. Homework assigned on Thursdays is due the following Wednesday by midnight. As mentioned above, students are expected to strictly avoid sharing code that is directly related to homework assignments.
You should submit via Moodle, by the midnight deadline, the homework solution reflecting your work on it up to that point. Submissions will not be accepted after that time, unless you have been granted an extension. Assignments that have not been properly submitted by the deadline will be considered late and receive no credit.
Limited extensions are possible in extenuating circumstances. To receive credit, all extensions must follow the official policy. Extensions that have not been properly requested will result in assignments considered late and receiving no credit.
The final project is due on the last day of classes.
- John Ridgway
Ford Hall 252
- Teaching Assistants:
- See departmental TA page.
- Meeting Times:
- Lecture: 9:00-10:20 Tuesdays & Thursdays, Ford 240
Labs: 1:00-2:50 and 3:00-4:50 Thursdays, Ford 342
- TA Hours:
- See departmental TA page.
Please read the list of frequently asked questions.
We want everyone to succeed in this course. Students requiring accommodations due to disability or other factors are encouraged to contact the professor at their earliest convenience so that any necessary arrangements may be made.
In order that all forms of self-identity can be honored, students who prefer specific pronouns are encouraged to inform the instructor.