- Instructor Prof. John Lasseter
- E-Mail: email@example.com
- Office: Lansing 300
- Phone: 315-781-4652
- Time: MWF 12:20 - 1:15, Th 10:20 - 11:45 (lab)
- Class Location: Trinity 305 (regular class) / Gulick 208 (Thursday lab)
- Required Texts
- David Eck, Introduction to Programming Using Java, Seventh Edition, August 2014
- This text is freely available online at http://math.hws.edu/javanotes/. If you'd like a printed copy, the book's web page has a link to order this from Lulu.com (with a cost that's cheaper than printing it on campus!).
- Recommended Texts
Java Tutorials: The Java language ecosystem is enormous, and it can be difficult to find a starting point. Our textbook serves as a general reference, but there are many others, as well. A good one is the set of tutorial documents provided by Oracle: http://docs.oracle.com/javase/tutorial/
General Program Design: This course is more about the intricacies of program design than it is about Java or any other programming language. A particularly good work on this subject is the book How To Design Programs, by Felleisen, Findler, Flatt, and Krishnamurthy. While we won't use this book directly, the authors have an uncanny knack for capturing the elements of the creative process in program design. You can buy a physical copy from MIT Press, but the book is also freely available online at http://htdp.org/.
All software necessary for this course is available on the lab machines in Gulick 208, as well as the machines in the Math/CS lab, on the 3rd floor of Lansing Hall. You can also install versions of everything on your personal machines, as it's all available for free.
Java compiler and Java runtime. The most recent version of the language is Java 8, but our labs only have Java 7 installed, and this is the version we'll use for our class. If you wish to install the system on your personal machine, it is freely available from this site:
Regardless of your machine's platform (Mac, Windows, Linux), you should install using the "JDK" link, not "Server JRE" or "JRE".
Plain text editor. For the first several weeks of the course, we will work with the Linux command line and a plain text editor. There are several choices available for Mac, Windows, and Linux systems. In the Gulick lab, the easiest one to use is probably Komodo Edit (not GEdit, which is truly wretched). For our purposes, another particularly good one is ...
... DrJava (http://www.drjava.org). DrJava combines a text editor with a debugger and interactive interpreter, allowing you to experiment quickly with various Java constructs. It is available for MacOS, Windows, and Linux, though there are some inconvenient quirks in its interaction with Java 7 on MacOS.
- Eclipse. Eclipse is an industrial-strength, integrated-development environment (IDE). We will begin using around the second half of the course. Details will be taught in class
- Log Book
- In addition to an ordinary notebook for class lectures, I strongly suggest that you keep a binder for the in-class projects. You will find useful not only the code you write with your partners during this time, but also the notes you take for each other.
- CS 124 Web Page
- March 6—First Exam
- April 20—Second Exam
- May 12 (8:30 - 11:30 am)—Final Exam
Format of the Course
All of the above goals, along with the questions that motivate them, are best achieved by active engagement. Each class will therefore be a mix of lecture time, discussion, quizzes (if appropriate) and in-class projects.
Please come to each class having completed the reading assigned for that session, prepared to discuss questions, insights, or observations as they occur to you.
- Laboratory Assignments
Over the course of the semester, there will be a total of 9 lab assignments. Each of these will be given at the start of a Thursday lab, and they are designed to be completed within the 85 minutes of that session. In each case, you will turn in a report of of your work the following day. The labs themselves will be done occasionally in groups of two or more, but each write-up must be completed individually. The due dates are given on the class calendar.
There will be 6 programming assignments throughout the semester. Some of these will be individual efforts, while others are designed for group work. You will have about a week to complete each one, and in some cases more. The due dates are given on the class calendar.
- Participation and Attendance
You will be evaluated on your regular attendance, timely preparation of the readings, and your efforts to bring helpful observations and insightful questions to the classroom.
See also the policy on class attendance, below.
- There will be two exams during the semester, one final exam, and all are clearly marked on the calendar and the syllabus. We will discuss the format in class. Barring extraordinary adverse circumstances, an exam cannot be taken on an alternate date (CTL proctoring for documented accommodations excepted, of course).
- Final Exam option
The final exam is optional. If you elect to take it, your grade will be calculated according to the "with final" breakdown, below. Otherwise, it will be calculated according to a breakdown that weights the two intra-term exams and homework/lab assignments more heavily. Both are given in detail below.
You may choose either option up until 8:30 am on May 12. If you elect to take the final, your grade will be calculated according to both breakdowns, and you will be considered to have earned the better of the two. Note, however, that without the final exam, the highest grade you can earn is an "A", even with perfect marks.
Policies (READ ME)
I do not take attendance at the regular classes, though it is a poor idea to miss too many of them, and this will negatively impact the participation component of your grade. I reserve the right to determine on a case-by-case basis exactly what impact this will be.
Attendance is required for every lab session. Both your learning and the success of your colleagues in the class depend on this. You may take up to two unexcused absences, and after that, you will forfeit the participation component of the course grade.
- Late Policy
Lab Assignments. Lab reports are due before the beginning of class on the day after they are assigned. This deadline is absolute: no late work will be accepted.
Programming Assignments. Late submissions of the take-home assigments will be accepted, but you must make arrangements with me in advance of the due date. In almost all circumstances, the following penalty will be imposed on late work: 10% for each day late, up to 40%. That being said, do not get behind on the assignments. Although this is an introductory course, the pace is intense, and you will get overwhelmed. If you are having trouble, please ask for my help, as early as possible.
- Students with Disabilities
Students with documented disabilities who may need accomodations, who have any emergency medical information an instructor should know of, or who require special arrangements in the event of an evacuation, should contact me as early as possible, preferably no later than the first week of classes.
If you are a student with a disability for which you may need accommodations, you should self-identify and register for services with the Coordinator of Disability Services at the Center for Teaching and Learning (CTL), and provide documentation of your disability. Disability related accommodations and services generally will not be provided until the registration and documentation process is complete. The guidelines for documenting disabilities can be found at the following website: http://www.hws.edu/disabilities
Please direct questions about this process or Disability Services at HWS to David Silver, Coordinator of Disability Services, at firstname.lastname@example.org or x3351.
- Academic Honesty
I take this very seriously: a breach of academic honor will result in a failing grade for the course, and may be subject to further college sanctions. These standards are clearly laid out in the HWS Catalogue
Collaboration: This is something of a gray area, and a common source of misunderstanding.
To clarify: Learning is usually more successful when it is done in community rather than in isolation. For all assignments, you are permitted—indeed, encouraged—to discuss course material with each other, to evaluate, trace, debug, refute, validate, or otherwise compare each others' work, and to adjust your own work if this collaboration results in new understanding.
However, you are not free to simply mail or print identical copies of the same work, and claim that it is the work of two separate individuals/groups. This is plagiarism, and is a breach of academic honor standards (it is also extremely easy to spot, especially in a class this small). While I encourage you to learn from each other, at the end of the day, the work you submit for a grade must be yours and yours alone.
If you find yourself unsure whether a form of collaboration or borrowing is acceptable, please ask me, in advance.
Relative weights for your final grade, with the final exam, are as follows
Participation: 5% Lab Assignments: 25% Programming Assignments: 30% Exam 1: 10% Exam 2: 10% Final: 20%
If you elect not to take the final exam, your grade will be calculated according this criteria:
Participation: 5% Lab Assignments: 30% Programming Assignments: 35% Exam 1: 15% Exam 2: 15%
As discussed above, those who elect to take the final will earn the more favorable of the final/no final breakdowns. Only those who complete the final with an exceptional performance (along with an exceptional performance in the rest of the class) will be eligible to earn an "A+" grade.
Me, outside of class: The best way by far to get in touch with me is in person, during office hours. Any kind of class-related discussion is encouraged, whether it be a specific question about a homework problem, a request for encouragement and help getting started on an assignment, a point of confusion about the reading, or just plain curiousity about some of the further scientific directions that are possible. I am often available outside of office hours to answer questions, offer further explanation, or just to shoot the breeze. I am always available during posted hours. I encourage you to drop by.
Please note that my office (on the third floor of Lansing) is not wheelchair accessible. If this or another physical disability prevents your from reaching me there, please let me know, and I will happily arrange an alternative meeting place with you.
In Writing: Barring that, your best bet is by email, which I check late, early, and often. In fact, email is very often the most effective way for you to ask a question, as the effort involved in articulating what you want to ask can help clarify many things. It also makes it easier for me to give succinct replies to which you can refer later. I'm a pretty early riser, though, so don't assume I'll answer anything after 9 pm or so.
By Phone: Phone calls are, frankly, lousy. You're certainly invited to call (315-781-4652), but it's difficult to communicate technical questions and answers clearly without reading or writing down anything. Phone messages are generally a poor choice: you might wait as much as 24 hours before I get any voice mail message you leave.
Teaching Assistants We have drop-in help available every week, in the Lansing 3rd floor lab. The hours are Sunday - Thursday evenings, 7:00 - 10:00 pm.
Philosophical Overview: What this course is
CS 124 is an introduction to computer programming: the "practice", the "science" and the "art". We will use the Java programming language for this course, and one component of the course will be a study of the main elements of the language. We assume no prior experience with Java nor any other programming language, nor with computer programming in general: this is the prior experience!
Broadly speaking, the task of computer programming rests on three pillars:
Information Modeling. In order to write programs of even moderate complexity, it is necessary to consider how we will represent the information handled by our program. At a low level, this requires the understanding of data types: the fundamental types of information that are built in to a given programming language. Although such types suffice for rudimentary programming tasks, more complex problems require more complex models of information. Hence, we will also gain experience with the use of various data structures, in which we consider not only an organization of information, but also the functionality that naturally accompanies such organization. Of the many ways to implement these structures, the one most natural to Java and many other languages is the definition and use of objects. We will introduce this idea in the second half of the term, and it will likely accompany you through the whole of your career as computer scientists.
Algorithmic Problem Solving. This is the beating heart of all computer programming, and we will study it at many different levels of abstraction. At the lowest level, we will learn the fundamental imperative constructs of assignment, branching, and iteration. We will also study the alternative (and equally powerful) mechanism of recursion. We will study various problem solving patterns that will help guide intuition to a needed solution. Finally, we will gain an introduction to the study of algorithms themselves, learning to read these independently of a particular language, so that we can implement them in every language.
Abstraction. Although the elements of algorithmic problem solving elements can be combined in various ways to express all possible algorithms, most programming problems are too complex for this level of detail to be practical. We will therefore study many different ways of managing this complexity, through the mechanism of abstraction in its various forms: contracts, encapsulation, information hiding, structured programming, and incremental development.
If you have ever written a computer program, most of the concepts you learn in this class will be familiar. This is not an accident. Although you will learn programming in the Java language, you should understand that in some sense, the language elements we study exist in every programming language that ever has or ever will be created. The ideas we study—program design, classical algorithms, and early concepts in object oriented programming—will accompany you throughout your development as scientists and engineers, no matter what language you use.
Even broader, the ideas behind computer programming have application that goes well beyond the task of writing or reading code. Computer scientists are not the only people required to perform systematic problem solving, but in a century of investigation, we have made a science (and great beauty) out of it.