Syllabus

Instructor: Dr. Mark Lewis

Office: Halsell 201K

Office Hours: 9:30-10:00 MWF, 8:30-11:30am T, 3:00-4:00pm MW or by appointment

Class Meetings:
1320-1: 8:30-9:20 MWF, Halsell 228
1320-2: 10:30-11:20 MWF, Halsell 228

Text: "An Introduction to Object-Oriented Design in C++" by Perry and Levin

Additional Readings: In addition to the text, there are a number of books that students might find useful when trying to work with the C++ programming language. None of these will be absolutely required for the course, but they will certainly prove useful for anyone intending to do significant C++ programming beyond this course. A very complete, though high level, discussion of C++ can be found in "The C++ Programming Language" by Bjarne Stroustrup, published by Addison-Wesley. A more approachable treatment can be found in "C++: The Core Language" by Satir and Brown published by O'Rielly or "Practical C++ Programming" by Oualline also published by O'Reilly. For information on the standard C++ libraries you can go to "The C++ Standard Library: A Tutorial and Reference" by Josuttis published by Addison-Wesley or "C/C++ Programmer's Reference" by Schildt published by Osborne/McGraw-Hill. Also check out the links page of this website for additional references for the C++ language.

Course Description: This course is the first course for computer science majors, following the guidelines established by the Association for Computing Machinery. This course also partially satisfies the requirements for Understanding the World Through Science of the common curriculum. The course content will include learning about block structured strongly typed programming languages as well as conceptual information including beginning data structures, computer arithmetic, computer organization, operating systems, programming languages, sorting and searching. Our study will include data types, arrays, strings, structures, classes, files, recursion, decisions and loops.

Course Overview: The primary objective of this course is to teach you how to do solve problems using a computer through programming. In addition, special attention will be paid to the methods of object-oriented analysis, design, and programming. I will try to follow the text fairly closely. The material presented in class will typically go beyond what is in the text. It will also be presented in a format that assumes you have previously read the material in the text. The first third of the class will focus on the language constructs and the way in which they can be used to build solutions to simple problems. The middle third of the class develops the idea of data structures that can be used with algorithms to solve certain problems more efficiently. In the last third of the class we will look at more advanced aspects of object-oriented programming languages and C++ in particular and tie them into our model of developing algorithms and data structures to solve problems.

As is the case for any course which I teach, my overlying objective is always to get you, as a student, to think. This class will emphasize concepts over details. You will have to know some of the details in order to get through, but it will be the broader concepts that I test for when assessing your knowledge of the material.

Programming Assignments: Eight programming assignments will be given over the course of the semester. These will test your ability to implement the principles learned in class to solve specific problems. Each assignment will specify exactly what is to be submitted for credit. In general it will include documentation of analysis and design, as well as the final working code. You will be required to submit paper versions. The programming assignments will increase in complexity and scope as you learn new aspects of the C++ programming language and new logic control constructs. All the assignmnets are worth equal credit however, so you should be certain that you complete the first ones.

One aspect of programming that can be very time consuming is debugging. This is the process of finding errors in your code and correcting them. There are many different types of errors that can occur in your programs, some are easier to find, others are harder. They all take time though, and generally the only way to get good at finding them is through experience. Programs that don't work will inevitably receive low grades. For this reason I strongly urge that you provide sufficient time for programming assignments. Don't start them the night before. In some cases you could very well finish the programs in a short period of time, but do not be surprised if on several assignments during the semester you find that you spend a considerable amount of time looking for and trying to correct small errors.

Academic Integrity: The composition of computer programs should be treated in much the same way that the composition of standard writing assignments is treated in other classes. Copying code or submitting code written by others is a violation of Trinity's academic integrity policy and will be treated as such. Late in the semester you will receive assignments that are to be completed as part of a group. In general though the work for this class will need to be done on an individual basis. You can work with your fellow students to try to develop high level design decisions, but the code you turn in must be of your own creation. When you have questions I strongly recommend that you try to ask me first. By doing so you are not only less likely to violate academic integrity, you will also not put your fellow students in the uncomfortable position of not being sure how much detail they can safely provide you.

Coding Practices: The code that you turn in will need to follow certain guidelines. I expect code to be properly indented, and I will not help solve problems in code that is not properly indented. This might seem odd at first, but in time you will realize that indentation is virtually required for code to be understandable. You should also appropriately comment your code so that it is understandable to anyone who might happen to be reading it. This includes a header comment at the beginning of each function as well as comments occasionally in the functions that describe what actions the function is performing at that time.

Grading: The grade for this class will be determined by four components: programming assignments, quizzes, tests, and class participation. The contributions of each of these to the final grades is shown in the table below and described in the text that follows.

Assignments (8)
50%
Quizzes (6 drop 1)
10%
Tests (2)
30%
Class Participation
10%

Assignments: The eight programming assignments constitute the single largest section of your grade at 50%. Late assignments will receive a deduction of 10 points (one letter grade) for each day that they are late up to a maximum of 5 days. Assignments turned in after 5 days will receive no credit though I will give feedback on them if requested.

Quizzes: There will be 6 short (10-15 minute) quizzes given during the course of the semester at the beginning of class sessions. No make-up quizzes will be given, but the lowest quiz grade will be dropped. The quizzes are not intended to have a dramatic impact upon your grade and as such will only count for a total of 10%. They serve two main functions outside of their impact on the course grade. Their primary function is to let me know how students are progressing in their understanding of the course material, and for me to provide feedback to you. The quiz questions will also be of the same general format and type as what I will give on tests. In this way they provide you with example questions and experience with answering them under specified time limits. This is mainly to benefit you so that you can direct your studying and not walk into the midterm (15% of your grade) completely blind.

Tests: I will give one midterm and a final in this course. Each will account for 15% for the final average. The test questions are intended to focus on the concepts, and I will use them to assess how well you understand the main themes of the course. They will require you to write some code, but I will not focus on the syntax of the code in the grading. I view understanding of the algorithms as more important than placement of semicolons. The final is scheduled for 6:30pm, December 13th for the 8:30 section and 2:00pm, December 18th for the 10:30 section.

Class Participation: The final 10% of the course grade comes from class participation. I expect for you to be present in class and to participate in discussions.

Extra Credit: During the course of the semester I will provide a number of opportunities for students to earn extra credit. These will typically take the form of extra extensions on homework assignments. I will also give extra credit for demonstrations that you are thinking about computer science in significant ways outside of the class. In particular, I'd like for you to bring me problems from other fields of interest to you that could be solved efficiently using computers.