>> SPRING 2013 | [ SCHEDULE ] | [ GitHub ]
Instructor: Andrew Cencini (
Credits: 4
Meeting Time: M/Th 10:10am - 12:00pm
Location: Dickinson Computer Science Lab (Dickinson 233)
Office Hours: M 1-2pm, W 1:45-2:45pm, F 10-11am, Dickinson 211
Course Web Site:

In this class, students will undergo an intensive introduction to the field of computer science; this introduction will include learning to command Unix-based operating systems (Linux, MacOS), essential programming skills (Python), computational thinking, and fundamental principles of computer science such as algorithm design, recursion, searching, sorting, and basic data structures. Students will become conversant in the various areas of computer science, and will learn the lore, history, and current problems of the discipline.


  • Become a skilled user of Linux and command-line tools to solve problems and discover information that ordinary users are oblivious to. Some examples:
    • Automating repetitive tasks.
    • Searching through and/or sorting data.
    • Finding, analyzing and acting upon system information.
    • Learning more about networking, protocols, and how the Internet works.
  • Become familiar with computational thinking, in particular, coming up with algorithms, writing and designing basic programs, and exploring the creative process of programming. Some examples:
    • Construct basic Python programs.
    • Manipulate images and sound using Python.
    • Become comfortable using source control systems (GitHub) for tracking changes.
  • Mondays will tend to be an introduction to new material, with a guided hands-on exploration of those topics.
  • Thursdays will allow for practice and discussion of the skills/topics from Monday, and also may occasionally be devoted to exploring a current or historical topic in computing, or may be devoted to covering a specialty topic/request. If there is something you would like to share or present on, there may be time made available in the schedule for you to make a contribution.

Given the usual way things go, the format above is only a loose guideline, and may change as the class goes on.

Learning the fundamentals of computer science is different for everybody, and may even differ from topic to topic or problem to problem in terms of how much time and effort is required to master that topic or problem. This class will require you to work in pairs to complete a series of problems on a weekly basis, as well as periodically work on larger programming or research projects.

There is no textbook required for this class. The recommended textbook (Guzdial and Ericson) is a valuable guide, but is not required. Readings and resources will be provided in class.


  • You will attend every class. More than two absences (excused or unexcused) will jeopardize your standing in the course.
  • You will check-in all required assignments prior to the start of the class in which they are due.
  • You will be a productive and positive collaborator with your colleagues.
  • You will be an attentive and positive contributor to class discussion and activities.
  • You will seek out help promptly if you are struggling or falling behind.
  • You will submit your own ideas and work. Academic dishonesty will not be tolerated, and will be passed along without exception to college authorities.

I strongly advise you to take this class Pass/Fail if you are nervous about grades. This material and way of thinking is likely to be new to many students, and represents a substantial challenge - anxiety over letter grades only increases this challenge and can pose a severe distraction from the subject matter. We all are likely to have way more fun if you're not preoccupied with a letter grade.

  • Class participation and attendance (40%).
  • Assignments and excercises (30%).
  • Mid-term and final exercises/project (30%).
I strongly advise all students nervous about grades to take this class Pass/Fail. While you will "get out what you put in" to the class, programming can be difficult under time and grade pressure - in essence, exponentially increasing that feeling of pressure. Taking this class pass/fail will allow you to feel relaxed and confident as you work through concepts and problems.

If you are struggling in class, or would like to investigate a topic in greater depth, come see me. My office hours are listed on the top of this syllabus. I enjoy and look forward to meeting with you – some general guidance on making sure we are able to meet:

  • I strongly prefer email ( I am on it way too much, so you'll likely get a reply within 24 hours unless I am extremely busy, it is a weekend or holiday period.
  • If you would like to meet with me, please consult my schedule (located at and propose a date and time that is not generally booked.
  • If you plan to drop by during my office hours, I strongly recommend that you email in advance - I like to know if you are planning to show up, and can also let you know if there might be a wait.
  • If you need to meet me outside of my office hours, I need at least a day's advance notice so I can ensure we can find the best time to meet.
The Most Ignored Advice In History: DO NOT WAIT UNTIL THE NIGHT BEFORE AN ASSIGNMENT IS DUE TO BEGIN THAT ASSIGNMENT!!!1!! This is something you can learn the easy way or the hard way. The work we do in this class, particularly programming, can be tricky and detail-oriented, and has a way of getting way out of hand under time pressure. You will make frustrating mistakes when tired and overwhelmed. Work when rested and shoot to have your work submitted in final form 24-48 hours before it is due. That way, should difficulty arise, you will have more time to work through the problem, or even possibly get help.

Everybody works differently; however, unless you are extremely confident in your abilities, start early and make sure you are not tight on time.

Reading and Assignments will be disseminated in class.

Week 0x00 (2/20):  Welcome, Logistics, What do you want to do?, 
		   Linux Scavenger Hunt

Week 0x01 (2/24, 2/27): Ch1.  Linux Scavenger Hunt cont'd, ASCII, 
		   Encoding, Recipes/Algorithms, 
		   Getting started with Python (Hello, World!)

Week 0x02 (3/3, 3/6):  Ch2.  Getting started with Python cont'd.

Week 0x03 (3/10, 3/13):  Ch3.  Lab:  Loops/pictures

Week 0x04 (3/17, 3/20):  Ch4

Week 0x05 (3/24, 3/27):  Ch5

Week 0x06 (3/31, 4/3):  Ch6

Week 0x07 (4/7):  NO CLASS 4/10 Ch 7

Week 0x08 (4/14, 4/17): Ch 7

Week 0x09 (4/21, 4/24): Ch 8

Week 0x0A (4/28):  NO CLASS 5/1 Ch 8

Week 0x0B (5/5, 5/8):  Ch 9

Week 0x0C (5/12, 5/15): Ch 10

Week 0x0D (5/19, 5/22): Ch 11, 12 (or 16?)

Week 0x0E (5/26, 5/29):  Tearful goodbye