CS 127 - Computer Science I - Fall 2014


A typical computer
A typical computer. We're going to learn how to tell it what to do.

This course serves as an introduction to computer science (CS) as a field, to computer programming as a skill (an art, many would say), and to some of the tools commonly used when programming. We will answer the questions "What is computer science?", "What are computers?", and, most importantly, "What can we do with them?"

Programming is a fundamental part of CS, and we will spend a great deal of time learning how to program. We'll start with a simple one-line program and work towards incorporating many of the tools and techniques that allow people to create complex, valuable code like operating systems, video games, and search engines (but we won't quite be ready to make those, yet). Along the way, we'll learn some "tools of the trade," specifically focused on the Unix command-line shell and programming environments.

Upon completing this course, you will have a good understanding of what CS is, including the diverse branches of study and practice contained within it; you will be comfortable working in a Unix command-line environment; you will understand the fundamental concepts and constructs of programming; and you will be able to create simple programs that make a computer do what you want it to do, giving you a much greater degree of control over it than you had previously. Of course, you will also be well prepared to continue on to other courses in computer science or in other areas that involve programming.

For an idea of the specific topics covered in the course, see the rough schedule for the semester.


     Section 1: MWF 10:00-10:50AM / CNS E210
     Section 2: MWF 2:00-2:50PM / CNS E210

Instructor: Mark Liffiton
Office: CNS C207B   (2nd floor CNS, directly above entrance facing the quad)
Office Hours: (visual schedule) Mon/Wed/Fri 11-12; Mon/Wed 3-4; Tue/Thu 10-10:40; or email/drop in any time.
Contact (you→me): Email is preferred (please start the subject with "CS127:").
     For more pressing matters, my office # is 309-556-3535.
Contact (me→you): I will post course announcements through Moodle, and they will be sent to your IWU email accounts. Check your IWU email frequently or have it forwarded to an address you do check.

TAs: Alan Russian and Mike Kelly
TA Hours: Mon-Thu, 7-9PM in CNS E210
Email: arussian@iwu... and mkelly1@iwu...

Textbook: Python Programming: An Introduction to Computer Science (Second Edition) by John Zelle (programs in the book are available at that site)
ISBN: 978-1590282410
Ebook: Available from RedShelf
Note: Please be sure to get the second edition, not the first edition.

Other Pages

Semester schedule — tentative - see the Moodle for up-to-date details.

Online References — some will be assigned reading, others provide alternative sources or general reference.

Moodle — assignments, quizzes, announcements, and other online resources will be here.

Programming grading rubric — describes how programming assignments will be graded.

Advice from past 127 students — See what students who took this with me last year had to say about it. (Common suggestions: start the assignments early, go to office hours.)

Bilingual CS I

We will initially be using the Python programming language in this class, with later sections done using Processing, instead. This will provide a somewhat "bilingual" introduction to programming, which will give you a better understanding of the material and better prepare you for future work. Learning the same concept with two different languages will help separate the concept from the syntax of any particular language. Not only can this make that concept clearer, but it can make it easier to apply it in new languages in the future.

Therefore, I encourage you to make the course fully bilingual and learn another language alongside Python for the whole course. I'll help anyone who wants to do this. It is not required — it is solely for your benefit — and the reading, lectures, assignments, and exams will all focus on Python. Grades will only be assigned for the "regular" work done in Python and Processing, but I will also help with and correct any work done in another language. I can provide assistance for C, C++, C#, Java, and potentially other languages alongside Python (I recommend Java). In addition to the benefits mentioned above, learning a language now that is used in a later course will save you time later and let you focus more on the topic of the advanced course. Come talk to me if you're interested.


The final grade will be based on the following breakdown:

Exam 115%
Exam 220%
Final Exam25%


Assignments will be posted on the course's Moodle site, usually about a week before they are due, and they will be collected there as well. Submissions should be in the form of plain text or Python/Processing code, and directions will be given for how to submit each assignment. I will aim to get them graded and returned to you by the following week.

Your lowest assignment score will be dropped.

Late Policy

Assignments will be due at set times; they will be considered late at any point after that time. An assignment will lose 10% of the total possible points for every day it is late, and after five days it will not be accepted.

Assignments can't be accepted at all after solutions have been handed out or the graded work has been returned to the class.


Quizzes will be held in class, and there will be roughly 5 over the semester. Your lowest two quiz scores will be dropped.


There will be two exams during the semester, held in class, and the second will primarily focus on the material seen since the first exam. The final will be cumulative. Dates for all exams are given in the schedule.


As you may have heard from other teachers: If everyone does well, that's great! I'm not going to lower anyone's grade to fit some predetermined grade distribution. However, scores given on individual quizzes and exams (especially exams) may not translate directly into a letter grade on the traditional scale. As explained quite well here:

"A percentage shows how much of a particular exam was dealt with successfully, but what test is so perfect that it could completely determine extent of knowledge or ability? If a student gets a grade of 90%, it does not mean they know 90% of everything in the subject. Wise students will begin to look at scores as a place on a continuum of achievement rather than analysis carved in stone."


If you would like to request a regrade, submit a request to me in writing (via email) within one week of receiving the graded assignment, exam, etc. Indicate exactly which part you believe deserves a different score and why.

Engagement / Attendance

Class time will be complementary to the reading, and you will need both in order to learn all of the material in this class. Furthermore, each student benefits from the engagement of all others in the class. Ten points of your final grade will be based on that engagement. Attending every class period on time and prepared will earn a base of 7 points; points can be gained by constructive participation, in class or out, such as asking questions, answering them, responding in the forum, sharing insights or useful/interesting resources with the class (posting in the forum, for example), investigating concepts beyond the requirement in class, working on small independent learning projects, and in many other ways; points can be lost for excessive (more than 3) unexcused absences, disrupting class (e.g., regularly showing up late), dominating the conversation, and the like.

Absences can be excused with documentation from health services or the Dean of Students' office, or if arrangements are made with me more than a week in advance. In general, if you know you will be missing a class, let me know as soon as you can.

Working with Others

I strongly encourage you to form study groups with your classmates, compare notes, explain concepts to one another, and generally help each other learn the material in this course.

You may discuss assignments with other people, but anything you turn in for a grade needs to reflect your own understanding. For every assignment, you should write a brief statement at the beginning indicating who you collaborated with and what help each person provided (e.g., if one person explained a particular idea to everyone else). Simply copying answers and giving away solutions are not allowed. The following show an example of collaborating badly and the same example changed slightly to become good collaboration:

Jane: "Oh! We need to use all three variables in the conditional. It's going to look like this..."
Jim: "I have no idea what you're talking about, but I'll write it down."
Jane: "Oh! We need to use all three variables in the conditional. It's going to look like this..."
Jim: "I have no idea what you're talking about. Could you explain that some more?"

Try to follow this rule of thumb: No matter what help you received figuring out the concepts involved, when you turn something in you should be able to reproduce the whole thing, working through the assignment again, without any outside help. If you can't, you will have trouble on quizzes, exams, and later assignments.

For details on the university's policies regarding academic honesty, please read the sections of the student handbook on conduct, cheating, and plagiarism here. Cheating of any form can result in failing the course and a report to the associate provost.

End-of-Syllabus Advice

Come to office hours. If there is one thing I wish I had done more during my undergraduate education, that's it. (But don't just take my word for it. Many past CS127 students say it's important and useful as well.) If something in class or in the book isn't clear, the one-on-one interaction of office hours is often the best way to work it out. Office hours are an important extension of the class sessions, which won't always be sufficient by themselves. In general, the more we interact, and not just in the classroom, the better the semester will be.