Syllabus

Location and Time - CSI 388, 2:10-3:25 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 - See my T-mail calendar or by appointment. 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. You will also get an e-mail asking you to join this course on Piazza, a course question and answer forum.

Text - "Introduction to Programming and Problem Solving Using Scala" by Mark Lewis and Lisa Lacher.

Course Description - This course is the first course for computer science majors, following the guidelines established by the Association for Computing Machinery. This course partially satisfies the requirements for Understanding the World Through Science of the common curriculum. The course content includes 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, classes, files, recursion, decisions and loops.

This course is being taught as an introduction to programming in the Scala programming language. However, the true nature of this course is to teach you how to use computers to solve problems. We will look at how the basic logical constructs available in most programming languages can be put together to enable you to solve significant problems using the computer. We will be doing the work for this class under the Linux operating system and command line execution of Scala.

The course is run in a flipped format. This means that you are supposed to show up to class having watched videos or read the book so that you can solve problems in class. The reason I run my courses this way is that I found that students retained too little knowledge from the traditional lecture approach. Programming is a skill that you must practice. The flipped classroom gives you three hours of practice time each week in which you can ask questions and get direction. However, it will only benefit you if you come to class prepared.

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 some design and thought to make sure that what you are writing 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.

One tip on how to learn in this course is that programming is much like foreign languages. The best way to learn a foreign language is through immersion. In this case, that means that you want to spend a little time each day writing a bit of code. It only needs to be 15-30 minutes, but you will be much better off if you spend 15-30 minutes each day than if you try to cram it all into a block of several hours once each week or when things are due.

Work/Time Expectations - The general rule for college credit, and the official definition of college credit at Trinity, is that you should spent at least 2 hours of time outside of class for every hour you spend in class. That is my goal for what you will do on average in this course. Each week you should spend, on average, 3 hours watching videos or doing other outside work to prepare for class. Assignments and coding projects should take up roughly another 3 hours. If you find that you are spending significantly more than 3 hours working on a particular coding project, you should make sure to ask questions of me or the ACM tutors. Spending many hours hanging your head against a wall working on a piece of code is not beneficial. Also, planning out how you will do things before you sit down to code them will also help you spend less time overall.

Assignments - The assignments in this course will be coding projects that are designed to test if you understand, and can use the concepts. They will typically have you solving some small problem with the help of the computer. Some assignments will involve the same problem and show you how it can be solved in different ways as you gain new tools.

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 fellow 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 am 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.

Grades - The grade for this course will be composed of five components. These components and what they entail are discussed below. This table summarizes how each component contributes to your grade in the course. All items turned in for a grade in this course are to be pledged. For code, the pledge statement should be put in a comment at the top of the code.

Assignments - The nature of the assignments was discussed in the previous section of the syllabus. Four assignments will be given over the course of the semester and each will contribute equally to this portion of your grade. Unless otherwise specified, a first attempt of each assignment will be due on the date shown on the course schedule. This should be enough work to indicate a significant attempt. Corrections and additions can be submitted later. 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%.

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 12.5% of your course grade. See the lectures page for the date of the first test. The final will be held during the normally scheduled time: Thursday, December 17th at 3:30pm. 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. More advanced notice is preferable. If you have to take a makeup odds are good that it will be a bit harder than the original exam.

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 test 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.

Interclass Problems - On ten class days during the semester, students will present what they have done for certain problems during class time. Each of these is marked on the schedule. At the beginning of each class I will call on roughly half the people in the class to show their solution to the question. Each person will be called on five times throughout the semester. Each time you are called on it will contribute up to two points to this part of your average. These questions will be designed to have fairly short answers. They will test whether you have understood enough (or done enough of the reading) for the most recent topic. Some of them will lead into assignments. If you are going to miss a class you should send your answer to the interclass problem to me before class time via e-mail so you get credit if you are called on.

Video/Reading Quizzes - To help keep you on track with watching videos/reading the book. These quizzes will close at class time. The idea is that you should watch the videos and take the quizzes to demonstrate that you understood them before coming to class each day.

Class Participation - I like you to participate in class. Discussion is typically far more entertaining than listening to me drone on for 50 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 2 main sources. The first is attendance. You can't participate in class if you aren't there. The second is verbal participation and coding problem solutions during class. I do keep track of this over the course of the semester and it does matter.

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 receive extra credit for displaying that you are thinking about the course material in a substantive way outside of class. This includes sending me links to sites that you think might be either helpful or just of interest to your fellow students or engaging in significant discussion on things I post to Google+ on the comments of those posts.