CS 112 -- Introduction to CS II (in Java) -- Summer 2017
CS 111 or programming proficiency in some language, plus an interest in working hard to develop your skills as programmers!
This course will introduce you to advanced programming techniques in Java.
It has five goals :
- Introduce you to programming in the Java platform, and reinforce concepts (such as
recursion) introduced in CS 111. We will also continue to develop
your ability to plan, write, and debug programs which satisfy
a specification, and which can be understood easily (and maintained) by humans.
- Provide you with a "cookbook" of the most important data structures
used in advanced programming;
- Introduce you to the study of algorithms, both as they relate to the data
structures being considered, and as a separate object of study;
- Take the first steps in developing your ability to analyze the efficiency
(running time) of algorithms, from two (increasingly less abstract) points
- Analyze the mathematical characteristics of the algorithm (e.g., analyzing the number of "basic operations" as a function of size of input)
- Analyze the empirical characteristics of the program by running experiments (e.g.,
actually counting the number of "basic operations");
- Introduce you to the "science" of computing -- how do computer scientists think?
The overall goal is to provide you with a firm foundation for further study in computer science.
Course Materials and Handouts
We have no single textbook for the class; instead we will use various online resources and I will provide my Powerpoint slides as PDF files on the web site. In most cases, you will have something to read, or view, before the lecture.
However, for the first 2-3 weeks of the course, where we will be learning Java, I suggest using the following website, which contains tutorial lessons, with executable code snippets (linked from the class web site):
Learning Java Online
In addition one of the following two texts is strongly suggested as a resource for learning Java:
The first is a classic and concise introduction to the language:
Java in a Nutshell, by Evans and Flanagan.
Benjamin J Evans, David Flanagan
O'Reilly Media, Incorporated
You may order this from Amazon (I recommend getting the Kindle version and the Amazon Cloud Reader) or find previous editions online (the parts we use will be unchanged in the various editions). I will be referencing both of these resources as we go through the first week of the course.
The second is a beautiful online textbook of Java, which contains much more explanation and examples than the first suggestion. Use whichever one suits you! Here is the link:
Introduction to Programming Using Java, Seventh Edition, by David Eck.
Finally, a third resource is the following online tutorial in Java:
You do not need to look at all three of these, but choose whichever one suits you, or find additional resources (say, YouTube videos)!
Other reference material will be provided on the web site, and anything else may be found using Google (your best friend when programming in Java!).
week-by-week roadmap, keyed to readings, handouts, and assignments, will be
maintained on the course web page.
- You are responsible for all the material covered in lecture and in the readings.
I will clarify what material is most important before tests, however, it is
important that you do all the readings and review your class notes periodically.
- Class attendence is very important. Although I do not take attendence, I DO remember who comes to class regularly, and this WILL have an effect when determining exact cutoffs for grades (if your face is familiar, and you regularly come to office and tutoring hours, I'll try to give you the best grade I can, considering the whole range).
- Class participation is also very important. I encourage questions, and
will usually start class with a review of the last class, and a request for
questions on that material. Please donít be afraid to ask a question during
the lecture, as often this means that many people may have a similar question,
and it is worth stopping me to get clarification. If no one is saying anything, I'll start calling on people! If I are running out of
time, I may defer your question for after class or email.
- Homeworks are extremely important, as you can not learn these concepts (and
especially you can not learn the programming techniques) by simply reading
a description of them---you MUST get your hands dirty and learn by manipulating
- Homeworks will consist of Part A problems ("pencil and paper problems" not involving explicit programming) to exercise your abstract understanding of the material, and Part B problems, involving Java programming. Generally Part A will be worth 20 points and Part B 80 points. Solutions will be provided for the Part A problems but not for the Part B problems. We are happy, of course, to discuss your Part B solutions at any time.
- There will be about about eight homework assignments, normally given once per week; in the last part of the course we may have longer assignments, one every two weeks. Please see the Topics
link on the web page for the ongoing schedule of assignments.
- You must submit electronic copies of your code using Websubmit (instructions to follow in first homework). You will hand
in no paper in this course (except for exams). Exact details of the submission
method and the late policy will be given with the first assignment.
Tutoring Hours and Piazza
- As in CS 111, we will have undergraduate Curriculum Assistants who will hold tutoring hours to help with programming assignments; it is extremely important that you get to know the CAs and come to the tutoring hours for help with assignments.
- We will use Piazza for a discussion forum; you will get an invitation to join shortly.
- There will be a midterm about halfway through
the term (duh), which will be listed on the course schedule. All exams will be closed book, closed notes.
- The Final Exam date is the last day of class.
- Makeup exams will be given only under the most extreme circumstances, and
only by arrangement with me before the normal exam time.
- 20% Midterm Exam
- 30% Final Exam (cumulative)
- 50% Homeworks
ALSO: In order to receive a passing grade (C) towards the concentration (or for transfer credit), you must achieve a passing grade in both the homeworks (at least 60% of assignments, or 30% in your final overall average) and tests (at least 60% among both midterm and final, or 30% in your final overall average).
These percentages are tentative and may be changed at my discretion at any
I will drop the lowest homework assignment when calculating grades at the end of the term. Please do not strategize about this, as you never know when random events will conspire against you and make you unable to finish an assignment!
- There will be no incompletes in this class except for reasons of dire
illness near the end of a semester in which all previous work has been
- You can not redo any assignment, or do extra work after the semester is
over to improve your grade, as this arrangement would then by fairness have to
be extended to the rest of the class (an impossible situation).
- I have zero tolerance for any kind of academic misconduct (plagiarism, cheating
on exams), and be assured that I will instantly report violations of the Academic
Code to the Academic Conduct Committee. I am a past member and chairman of
this committee. Please read the following section carefully. Also note that
we intend make use of sophisticated plagiarism-checking programs for submitted
Policy on Academic
Collaboration policy for this class is as follows.
- You are strongly encouraged to
collaborate with one another in studying the online, textbooks, and lecture material.
- As long as it satisfies the following conditions, collaboration on the homework assignments is encouraged and will not reduce your grade:
- Before discussing each homework problem with anyone
else, you must give it an honest half-hour of serious thought.
- You may discuss ideas and approaches with other students in the class, but not share actual code. In other words,
the code you write must be entirely your own, which you must write and debug
without looking at other people's code. Don't permit others to copy your code.
You must also acknowledge
in the appropriate portion of your solutions (e.g., in the comments of your
code) people with whom you discussed
ideas for that portion.
- You may get help from TFs and Java tutors in the lab for specific
problems with writing and
debugging your code. Don't expect them to do it for you,
- If you get really stuck with a bug (defined roughly as over an
hour of frustration), you are allowed to get help from a
friend as long as you acknowledge that help clearly in your
solutions (e.g., in the comments of your code).
- You may not work with people outside this class (but come and talk to
us if you have a tutor), seek on-line solutions, get someone
else to do it for you, etc.
- You are not permitted to collaborate on exams.
The last point is particularly important: if you don't make an honest effort
on the homework but always get ideas from others, your exam score will reflect
Violations of Collaboration Policy
Violations of collaboration policy fall into two categories: ones that are acknowledged at the time they occur
(for example, in clearly marked comments in your code) and ones that are unacknowledged.
Acknowledged violations (e.g., using someone else's code for a method you didn't know how to write
yourself, and stating clearly in your code that this is not your own work) will result in an appropriate
reduction in the grade, but will not be considered cheating.
Unacknowledged violations of the collaboration policy--for example, not
stating the names of your collaborators, or any other attempt to
represent the work of another as your own--will result in an automatic
failing grade and will be reported to the Academic Conduct Committee
(ACC). The ACC often suspends
or expels students deemed guilty of plagiarism or other forms of
cheating. I have served on the ACC and
have seen it happen. I will assume that you understand the CAS Academic
Conduct Code (read it if you
If you are uncertain as to whether a particular kind of interaction with someone else constitutes illegal
collaboration or academic dishonesty, please ask me before taking any action that might violate the rules;
if you can't reach me in time, then at the very least include a clear explanation of what happened in your
homework write-up to avoid being treated as a cheater. Citing your sources is usually the easiest way out of
Policy about Extensions to Homework Deadlines or for Individual Exceptions
As the semester goes on, I will start to get requests for individual and private extensions to homework deadlines for various reasons (illness, broken laptop, religious holidays, etc.).
The short answer to such requests is: No, in the interest of fairness, I can not give any individual an exemption from a homework deadline. Everyone is held to the exact same standard. If there is any reason to extend a deadline, I will announce it publicly and everyone will know about it.
The longer answer is: If I start giving people individual and private chances to improve their grade, in addition to the obvious unfairness, by the end of the term, about 5% of the class is asking for extensions on each homework (trust me, I've been teaching 112 for 30 years). In a class this size, that would mean about 30 individual extensions on *each* homework. The concept of a deadline just becomes moot, and keeping track of it all is completely impossible---by the end of term I want someone take me out in back of MCS, shoot me, and put me out of my misery.
I want to live, and I want you all to have an equal opportunity to do well in the class, so I and my staff spend a great deal of time on tutoring (between tutoring hours and my office hours, usually 17 hours a week), plus Piazza, but I do not *ever* give extensions or accept excuses for missing homework deadlines.
To mitigate the harshness of this policy, I do three things:
(1) I do not count a homework late until some fraction of an hour after the deadline;
(2) I drop the lowest homework, as specified above;
(3) I will also announce at the end of the term that you can write me an email if you feel there were extenuating circumstances that the "drop the lowest" policy does not cover. I do not guarantee I will accept your petition, but I will absolutely read it and consider it. Usually, it does not end up affecting your grade anyway.
If there is some truly exceptional circumstance getting in the way of your work, please talk to me and we will have a conversation with the Dean and with all of your professors about how to get you through it.
Happy to talk with anyone about this policy, which is designed to be fair to all, reasonably efficient, and keep me (almost) sane. Thanks for your understanding.