Intro CS Syllabus

Table of Contents

Syllabus

Instructor

Jason Healy
Memorial 003
Phone Extension 4434

Feel free to stop by my office to ask questions, or just to say hi. I keep a schedule posted outside the door showing when I'm generally available. If you'd like to make sure I'm available to meet, please speak with me or e-mail me ahead of time so I can keep my schedule free for you.

Structure

This course meets four times per week (two 45-minute periods and two 70-minute periods). Class time consists of lectures and laboratory assignments. Homework consists of readings, short exercises, and completing unfinished lab work. As this is an honors-level course, students should expect to spend significant time outside of class working on their assignments.

I also expect that students will read about topics prior to learning about them during lectures; lectures serve as a time to review and ask questions but not necessarily to hear about material for the first time. We aim to spend the majority of class time working actively on programming assignments so that I am available to help students in person.

Objectives

This course has the following primary objectives:

Materials

As one might imagine, you'll need access to a computer for this course. I expect that you will bring your computer with you to every class, unless I tell you in advance (on the homework assignments page) that you won't need it.

The latest version of Mac OS X 10.13 ("High Sierra") is required for this course. Other tools (compilers, build tools, and editors) will be provided by me to students (either as a direct download or an in-class installation).

No textbook is required for this course. I'll provide readings and resources online and in class.

Philosophy

Computer Science requires two major efforts of a student. First, they must learn how to break problems down into a structured solution that can be turned into a program. Second, they must learn the syntax and operation of a programming language to code their solution in. Note that the ability to solve problems is at least as important (if not more important) than the ability to write functioning code; students should be prepared to spend a significant amount of their time planning their solutions before coding.

In my experience, learning by doing provides the best route for absorbing the material. Thus, the student should feel free to make mistakes (in fact are encouraged to make mistakes), ask questions, and try untested methods. I cannot overstate the value of asking questions early and often; Computer Science poses many difficulties, and these should be addressed as early on in class as possible.

Grading

Given my belief that learning by doing is best, the grades in this course are based heavily on programming assignments. A breakdown of how grades are computed follows, along with a description of each grade component:

Test Programs (30%)
Test programs resemble take-home exams; students have a long period of time to design, code, and test solutions to problems assigned to them. Students may consult lecture notes, assigned readings, and previous assignments, but may not receive help from other students or sources. If a test program is not offered during a term, the percentage for Lab Programs shall increase to 60%, and the percentage for Tests shall increase to 30%.
Lab Programs (35%)
Students must complete lab programming assignments approximately once per week. Lab programs reinforce concepts from the reading and allow students to practice their skills, and therefore have a smaller scope than test programs. Students may consult with each other about errors of syntax, but should only consult with the instructor regarding other difficulties.
Tests (25%)
Written examinations testing conceptual understanding make up the final major part of a student's grade. Students may not consult any sources (such as notes) during a test.
Class Participation (10%)
Students should participate in lectures by answering questions, completing in-class assignments, and by helping other students (or seeking help for themselves) during laboratory sections. I may also give short quizzes during the course to quickly assess student's understanding of recent topics. I may not announce quizzes ahead of time, so students should keep up with the reading to prepare themselves. I also reserve half of this grade (5% of the total) to assess the quality of failure exhibited by the student. I'll describe this more in class.

I grade assignments on a point scale, and convert raw point scores into letter grades during marking periods. If you need an estimate of your grade during the term, visit me in my office.

I evaluate programs based on the following primary criteria:

Correctness
Programs should produce results that meet the requirements of the assignment. Students should test their programs in several different ways to ensure that their software always produces correct results.
Logic
Programs should follow good design principles; someone who has never read your source code before should not have difficulty understanding how your program works. Programs that work, but that are convoluted or inefficient, may not receive full credit.
Style
Programs must also follow good style principles. Documentation must exist for all major variables, classes, and methods. Students should name entities with clear, concise names. Finally, students should use a consistent style throughout a program to maintain readability.
Correctness, while very important, does not count for everything! Students should remember that their programs must exhibit good design and style in order to receive full credit.

Late assignments receive a penalty for each day past their due date. Unless otherwise noted, assignments are due by the beginning of class (not during or after class). Students should always turn in late or incorrect programs, as a zero grade can cause serious damage to the term grade.

Extensions may be granted under certain circumstances. However, be warned that extensions usually require some form of "trade" to be made with the instructor (for example, detention in exchange for extra time). Extensions are more likely if there is evidence that the student has been working diligently and has an honest need for more time; waiting until the last minute to ask for an extension is not recommended.

Finally, some assignments may have a small amount of extra credit available by implementing extra functionality. However, the student should ensure that their program meets all of the regular requirements before attempting extra credit, or else the points lost will outweigh those gained from extra credit.

Academic Honesty

Unless otherwise noted, all programming assignments should be completed without the help of other students, adults, or resources (such as Internet sites, tutors, or source code). While being stuck on a problem can cause frustration, working through these difficulties remains the best way to truly learn the material. Turning in work that is not your own is not only dishonest, it prevents you from developing a full understanding of the material. Please see me if you need any extra help, or if you have any questions about these rules.

In general, my motto is "help in English is OK; help in code is not". This means that you may receive hints from a classmate about how to perform a general task, but you should not ever copy pure source code from another student (or the internet, or any other source). Again, if you have questions, ask me beforehand to make sure it's not an issue.