CS112 Introduction to Programming, Spring 2017 - Course Info
CS 112 is an introductory programming course, using the
Java programming language. There is no
prerequisite for the course -- in particular, no prior programming
experience is required -- although it helps to be "computer
By the end of the course you should be able to write useful Java programs. But the focus of the course is programming concepts, so besides learning how to write cool artifacts you will also learn things like object-oriented programming (classes, methods, objects, etc.), control structures (conditionals, looping, recursion, etc.), data types (arrays, strings, numbers, lists, queues, stacks, etc.), basic algorithms (sorting, searching, etc.), and some advanced ideas (exception handling, input/output streams, etc.).
The required textbook is:
An additional book that we will draw examples and exercises is:
A few additional good Java books include:
Additional course materials will be available "on-line," as described below:
You have probably heard of Java. It has received more media attention than probably any other programming language. Most of this attention is unfortunately hype, but nevertheless Java is a good programming language, and has many pedagogical advantages over other languages.
You may have also heard of other programming languages, such as BASIC, C, C++, Object C, Ada, Lisp, and FORTRAN. Although all of these languages are billed as "general purpose," some are better at certain things than others, and thus one's application often dictates one's choice of a language. For example, in the Computer Science Department, FORTRAN is taught in CS-130 (for scientific computing), C in CS-323 (systems programming), Lisp in CS-470 (artificial intelligence), etc. Using this line of reasoning, Java is usually billed as being good at portability and the Internet.
Java is a good general-purpose programming language that uses many recent innovations in programming language design, making it a quite modern and powerful language. It is also simple enough to use in a course such as CS-112, and once you know one programming language, it is much easier to learn another (in contrast to learning natural languages). Java has many attractive characteristics, including the following:
There will be weekly or biweekly programming assignments (called psets) -- about 9-10 in all. For the most part, these will be computer programs written in Java. Each student is expected to do each assignment on her/his own except when we specify specific format. See the Collaboration Policy below.
Grading will be based not just on whether your program runs or not, but also on how well it is written: it should be well-structured, documented, and generally easy for someone else to read and understand. In other words, the style of your program is important.
Each programming assignment (pset) will be given equal weight. We will have a midterm and a final project, where the midterm counts for 1.5x pset and the final project counts for 2x pset.
To allow for the exigencies of computer failures and personal crises, each student will have 9 discretionary late days for problem assignments, but any one assignment may only be up to 3 days late (this is because we may discuss solutions to assignments in class). These are calendar days, not business days. As the homework assignments will be submitted electronically, the "write date" on the student's homework file will be considered the completion date for late assignments. Thus, a student may "hand in" a late assignment on a Saturday or Sunday.
After you use up all of your discretionary late days, assignments turned in late will be graded according to the following formula: S = R * (1 - t / c), where S is the grade given, R is the grade the work would have gotten if turned in on time, t is the amount of time by which the work was late, and c is equal to 6. Thus, the value of a late assignment decays daily, with a half-life of just over 3 days. Examples: work turned in five minutes late gets 99.9% credit, one hour late gets 99.3% credit, six hours late gets 95.8% credit, one day late gets 83.4% credit, two days late gets 66.7%, and three days late gets 50.0%. Assignments submitted more than 72 hours late (after the official deadline) will not be accepted.
Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate -- the program must be your own work (although you may ask teaching assistants or lab assistants for help in debugging).
Do not, under any circumstances, copy another person's program. Writing code for use by another or using another's code in any form violates the University's academic regulations and will be dealt with harshly. We will carefully screen programs for evidence of copying, using a combination of automated tools and human eyeball.
Attendance at lectures is expected but will not be recorded. Students are, however, fully responsible for all material presented in lectures, even if some of it does not appear in the "official" lecture notes. Class attendance is recommended strongly.
We will use the class server to keep in touch.
If your question is more like "What in the world does this homework assignment mean?" or "Help!", come see us in person.
You should read both the course home page rather frequently as they appear for important information, such as lecture notes, instructions on submitting your assignments, clarifications and hints, last minute schedule changes, etc.
Copyright (c) 2000-2017 Y.R. Yang, Department of Computer Science, Yale University