Syllabus
Location and Time - CSI 488 and CSI 257, 9:55-11:10 and 12:45-2:00 TR
Professor - Dr. Mark Lewis, Office: CSI 270H, Phone: 999-7022, e-mail: mlewis@trinity.edu. The best way to reach me typically is by e-mail. I check it frequently and try to respond promptly.
Office Hours - These are listed on my T-mail calendar. I'm in my office a lot so you should free to drop by. If you are coming from lower campus you can always call or write a short e-mail to see if I'm in and available at that time. I can also do some virtual office hours using Google+ and hangouts.
Text - "Object-Orientation, Abstraction, and Data Structures Using Scala" by Mark Lewis and Lisa Lacher.
Course Description - This course is the second course for computer science majors, following the guidelines established by the Association for Computing Machinery. This course also satisfies the requirements for Using the Scientific Method of the common curriculum. It builds on the material of the first course, but begins to look more seriously at object-oriented programming techniques as well as how to design and write proper code using that paradigm. It aims to improve your ability to solve problems using computer programs of your own construction. This course will further your ability to use more complex data structures and algorithms in the solution of such problems and help you to get a feel for how large programming projects can behave and how you can do things to make them easier to work with and more flexible. Topics to be covered include the following.
Review of control structures, functions, and primitive data types.
Object-oriented design and programming: encapsulation and information hiding; classes; inheritance; polymorphism.
Fundamental data structures: arrays, linked lists, stacks, queues, and simple trees.
Fundamental algorithms: sorting and searching.
Recursion.
Introduction to multithreaded programming.
Use of networking.
Basic analysis of algorithms.
As my previous students can attest, the courses that I teach are aggressive. I have one overriding objective in my courses and that is to make you think. If I make you think new thoughts for most of the semester I will have done well. If I give you new ways to think thoughts (old and new), then I will truly have succeeded. This course is not about busy work, though inevitably a fair bit of work will be required. Exactly how much work you have to put in will often be inversely proportional to how much you think about the work that you should be doing. Writing programs on the scale of most of the assignments for this course requires a significant amount of design and thought to make sure that what you are trying to do will actually accomplish what you want it to and that it will do it correctly. Failure to think nearly always leads to more work for you in the end.
Honor Code - All work that you submit for this class needs to be pledged. In the case of code, this means that you need to pledge in a comment at the top of each file.
Assignments - The assignments in this course will be based around two projects. Each assignment will require you to produce a solution to a specific part of one or more of those projects so that all the pieces can be used together in the end for a single application.
The work you submit for your assignments should be of your own construction. You should feel free to confer with your fellow students or other people you might know about general questions dealing with the design of your programs or about specific syntactic problems. Having other people write code for you, or working from other people's code will be considered cheating and will carry repercussions as dictated by the student handbook. In general, the safest route when you have questions about assignments is to come talk to me. It should be said that this should in no way preclude you from studying the concept of computer programming with your follow students. Only discussions specific to the assignments are potentially risky.
Coding Practices - You are expected to follow certain coding practices for any code that you turn in as work in this course. In this sense I'm fairly lenient. I only require uniform indentation and reasonable documentation. I will not help you to debug any code that is not well indented. I don't care exactly how you decide to align brackets or put in white space (though some white space is helpful), but you have to be uniform, and all blocks of code should be indented beyond what the surrounding code had been. In Eclipse you can format any file by hitting Ctrl-A to select all then Ctrl-F to auto-format.
Grades - The grade for this course will be composed of five components. These components and what they entail is discussed below. This table summarizes how each component contributes to your grade in the course.
Final Projects - The nature of the projects was discussed in the previous section of the syllabus. At the end of the semester I will pull down your code repositories and test that each of your projects compiles, runs, and is playable. Each of the two projects is worth 10% of your grade. All submitted assignments must also compile and run using the Scala install on the CS machines. It doesn't matter if it worked for you in a different environment, if it doesn't work for me with the lab machines you will receive no more than 50% credit for the assignment until it is fixed and resubmitted. Code that does not compile will receive no more than 20%.
Code Shows - During the semester there will be 10 times when we will look at student code and test functionality. Each student will be called on 4 times, and each time will be worth 5% of their grade. Students will be picked randomly in advance. Your code will be pulled from your repository and compiled before class so that everyone can participate.
Tests - There will be two tests during the course of the semester. The first is an in-class midterm exam and the second is the final. Each will count for 15% of your course grade. See the lectures page for the date of the first test. The final will be held during the normally scheduled times of Saturday, May 7th at 12:00 pm for the 9:55 section and Monday, May 9th at 12:00 pm for the 12:45 section. If you are going to miss a test I MUST be told in advance, even if it is a phone call 5 minutes before class. If you have to take a makeup exam odds are good that it will be at least slightly more difficult than the original.
Quizzes - There will also be six quizzes given during the course of the semester. These quizzes serve many purposes in this class. First, it gives both you and I information about how well you are understanding the material in the class. Second, and more importantly, they will help you prepare for the midterm and the final. The quizzes will be short, 10 minutes, however, they will have questions that are similar in format to what you can expect to see on the tests (only fewer of them). They will be given promptly at the beginning of class to help insure that you arrive on time, and they will often cover material from the reading for that day to help provide you with incentive to actually do the readings. Note that these quizzes do not have a huge impact upon your grade.
Video Quizzes - There will be an electronic quiz you take before class each day. They will be short, with the primary intent of checking to see if you actually watched the videos.
Class Participation - I like you to participate in class. Discussion is typically far more entertaining than listening to me drone on for 75 minutes. It can also be more educational as the people most inclined to understand your confusion on certain points will be your peers. This part of the grade will actually come from three sources. The first is attendance. You can't participate in class if you aren't there. The second is verbal participation during class.
Extra Credit - During the course of the semester there will be a number of opportunities for you to receive extra credit. I typically place extra credit problems on the quizzes and tests. You can also get extra participation points by sending me links related to the course material or participating in meaningful conversation on posts I make on Google+ or sending me errors you find in the textbook.