Welcome to CSC-207, Grinnell College’s computer science course. This is the third course in our introductory sequence of programming paradigms. In this course, we will introduce you to the object-oriented computational model. While we will be using Java as our programming language for this course, the skills and concepts we learn in this class are applicable to other languages.
Note: Due to the rapidly changing world that we find ourselves in, the policies of this syllabus are perpetually subject to change. Significant changes to course policies will be announced in class in addition to being reflected in the syllabus online.
You have already studied the functional and machine-oriented imperative models of computation. In this course we will learn about the object-oriented model. This abstraction facilitates a certain way of thinking that can help us solve many computational problems in a manner similar to the way we solve problems in our everyday lives. It scales well and will facilitate our study of an important area of computer science: the organization, representation, and access of information. Thus, we will learn about some common ways of organizing data and the algorithms that allow efficient access to it. Such data structures are integral to many computational artifacts, from your computer’s operating system to genome sequencing, to GoogleTM-scale Internet-wide indexing. Our major objectives for this course include fluency in object-oriented fundamentals, learning about object design patterns, sharpening algorithmic analysis skills, practicing good software development with unit testing, understanding how data organization affects access efficiency. Like the prior introductory programming classes, this is a lab course. The lecture and discussion will take about 20 minutes per class session, and the remaining time will be devoted to hands-on learning through conducting labs with a partner. Attendance is therefore required for every class period. See the “Class Attendance” and “Accommodations” sections for more details.
Understanding how to do efficient computation with the right data structures is a fundamental job of any computer scientist. In addition, object-oriented techniques have become a prevalent, widely used method of design and development. An understanding of these tools will take you to the next level of maturity in computer science.
This course assumes you have experience with a (moderately) typed imperative/procedural programming language (e.g., C, or even C++ or Java). You should also be familiar with some basic computational ideas like encapsulation and code re-use with procedures and recursion.
Universal Learning Outcomes
Create correct multi-file programs in Java 11+ to meet requirements specification.
Collaborate with one or more other students in creation of programs and completion of labs.
Apply object-oriented design principles to the creation of Java programs: Abstraction, Encapsulation, Inheritance and Composition, and Polymorphism —ad hoc, parametric (a.k.a. generics) and subtyping.
Use and build core abstract data types to design solutions to programming tasks: Arrays, Lists, Maps and Sets, Stacks and Queues, Hash Tables, Heaps, and Trees.
Use and implement core algorithms to design solutions to programming tasks: Sorting, Searching, Iteration, and Traversal.
Analyze run-time complexity of algorithms.
Create effective unit tests of Java programs using tools such as JUnit.
Use Java’s Exception libraries to detect and handle run-time errors.
Use version control software program, such as Git, to maintain multiple versions of software under development.
Exercise good practices in code documentation and create documentation for Java programs using Javadoc.
Other skills (Instructor-specific)
Debugging and Evaluation.- Experience code from a different perspective by testing, reviewing, and refining their code.
Communication.- Demonstrate effective use of written and verbal communication by creating reports (Labs write-ups) with other peers by discussing and consensus on acquired knowledge.
Independence and Curiosity.- Habitualize learning programming languages within the scope of individual assignments through self-driven, hands-on exploration and problem-solving practices.
Some readings will be in digital format and available from the schedule.
Other good books/documentation:
This course follows a lab-based format. Thus, work related to [almost] all class sessions proceed in three stages:
Tokens reflect that life inevitably rears its ugly head in some fashion and ruins your best-laid plans. You begin the course with 3 tokens, and you may:
If you plan to use a token you should let me know in advance so I can update the extension/deadlines in the platform. You may not re-do lab writeups or assignments.
Communication is key.
In the interest of simplifying grading and keeping students up to date on their progress, all points are equally weighted. This means that you can easily calculate your current grade by summing your scores and dividing that sum by the total points possible so far. Then the letter grades are assigned by the following schema:
|90 - 100||A|
|80 - 89||B|
|70 - 79||C|
|60 - 69||D|
|0 - 59||F|
and the modifiers (+ and −) are based on the last digit of the score, as follows: [+] for 8-9, [None] for 4 - 7, and [-] for 0 - 3. D or F however, is not modified. And given the Grinnell College grading scheme, there is no A+ or C- either.
Grinnell has indicated that a 4-credit course, like this one, should involve approximately 180 hours of work, which matches some guidance from the U.S. government. Across a 14-week term (plus a week finals), that ends up being approximately 12 hours of work per week.
Class meetings will involve a mix of discussions, lectures, and lab activities. In short: You are expected to attend and actively participate in class. I know that sometimes “things happen.” Therefore you will be granted one unexcused absence from class without penalty. However, this is a collaborative discussion and lab-based course, so your presence is integral to your learning. If you think you might have to miss class or be late, I would appreciate a written explanation (email is appropriate) at least a week in advance so that we can make arrangements to keep your progress on track. It is very important for you to attend class because you will often work collaboratively on the labs with another classmate. In addition, our discussions during class benefit from your contributions. If you do miss a class, you must first talk to a classmate about any material that you may have missed. After that, you may follow up with me about any further questions or concerns.
We will use Microsoft Teams to communicate with me and your classmates (some of the questions that you might have can be answered by your classmates or mentor). You can post questions in the Teams course “General” channel.
Communication is key.
I try to support the class’s religious diversity and anyone who needs to balance academic work with religious observations. Please let me know by week two if you will need to be absent from class for any religious holidays this semester, and we can work out an appropriate schedule for making up absences or missed work.
Our class is a community. We should behave as such. Among other things, that means treating others with respect, not only in the language that we use, but also in taking ideas, approaches, and perspectives seriously. We will discuss appropriate guidelines for the class throughout the semester, developing those guidelines as a community.
The normal instructional structure of this course requires that you be present, physically and mentally, each day. I hope you don’t get sick but I will consider adjustments for those who test positive for covid and are required quarantine if that is the case.
There are a limitless number of dimensions to diversity and inclusion, the totality of which are unaddressable with a finite set of policies. These may include other issues best addressed earlier in the semester (e.g., student-athlete scheduling) or as they arise (e.g., chronic health flare-ups). I will do my best to be flexible in these cases with the overall goal of facilitating your growth in this course. To do this, I need to receive advanced notice from you at least one week in advance so that we can make suitable arrangements. For situations that arise within a given week, I will ask you to utilize the token system (described in the evaluation section) to manage your workload. Grinnell College makes reasonable accommodations for students with documented disabilities. Students need to provide documentation to the Coordinator for Disability Resources, located on the ground level floor of Steiner Hall (641-269-3124) and discuss your needs with them. Students should then notify me within the first few days of classes so that we can discuss ways to ensure your full participation in the course and coordinate your accommodations.
Communication is key.
There are several software packages we use in this course both for learning how to program as well as conducting learning online.
Please make sure you can access all of these resources, and please let me know if you have any problems with access.
Computer Science Department has a great support system (please use it) and a carefully designed pedagogical methodology design for you to succeed.
We know this can be a very challenging course since it asks you to think in yet another way about problems that can be solved with computers. It will also cover quite a few topics and move quickly. So, I encourage you to reach out with questions as soon as they arise and seek help from one or more of the following sources:
When contacting the course staff, please use direct messages (DM) on Microsoft Teams. While we will generally not respond immediately—we will check our messages at fixed times throughout the day—we will prioritize responses to student questions over Teams versus queries sent through other means, e.g., email.
The CS department also provides individual tutors as needed. If you find yourself struggling with the material, please let me know and I’ll work with our peer education coordinator to get one assigned to you.
Note that if I find that you have fallen behind on labs, assignments or are showing difficulty on quizzes, I will invite you to meet with me. Please accept those invitations; they are intended to be supportive, not punitive.
All work in this course is governed by the rules of the college regarding academic honesty. In summary, standard practice requires that you must acknowledge all ideas from others.
When you work in a lab write-up, the names of all students in the group should be added in the lab day. Turning in work with multiple people listed as authors implies that all members of the group agree with what is presented. If a group member does not agree with some part of the work, the group should continue to discuss and revise the material until agreement is achieved. In summary, a group activity is a joint effort, and all group members have equal responsibility for the finished product.
Every programming assignment or lab write-up that you submit must include: