In this course, we will study a variety of data structures and algorithms that are important for the design of sophisticated computer programs, along with techniques for managing program complexity. We will use Java, a strongly typed, object-oriented programming language, throughout the course. Topics covered will include types and polymorphism, arrays, linked lists, stacks, queues, priority queues, heaps, dictionaries, balanced trees, and graphs, as well as several important algorithms for sorting, searching, and manipulating structured data. We will also study some mathematical techniques for analyzing the efficiency of algorithms. The central theme tying all of these topics together is the idea of abstraction, and the related notions of information hiding and encapsulation, which we will emphasize throughout the course. Weekly lab sessions will reinforce the concepts covered in class through extensive hands-on practice at the computer.
Intermediate. Students should have at least one semester of programming experience in an object-oriented language such as Python, Java, or C++.
Prof. Jim Marshall
Office: Ilchman Science Center 100
Phone: 2673 (from off campus: 914-395-2673)
Email: j + my last name + @sarahlawrence.edu
|Big Java: Early Objects, 7th edition
by Cay Horstmann
|Big Java: Early Objects, 5th edition
by Cay Horstmann
We will have lab sessions on Thursdays from 9:30-10:55am in Ilchman Science Center 104. The purpose of the labs is to give you more time for hands-on practice with Java, in order to reinforce the concepts covered in class that week. New material will usually not be introduced during lab. At the beginning of each lab, I will hand out a set of programming exercises for you to work on individually, or with a partner. If you work with a partner, you both should collaborate equally on writing, testing, and debugging your code as a team. You must also take turns typing at the keyboard (this is very important). The lab exercises will typically be due as part of your homework assignment for the following week.
On-time attendance is required and expected for all class meetings and lab sessions. Given the fast-paced, cumulative nature of the course material, students who miss class risk quickly falling behind, and catching up is difficult. Although I realize that missing class sometimes cannot be avoided, you may receive reduced course credit if you miss more than 2 classes or 1 lab session, for any reason. If you are unable to attend class or lab due to illness, please contact me about it as soon as possible. If you must miss class for any other reason, please let me know well in advance. No student will be admitted to the course after the add/drop period ends.
I will often send out announcements to the class through email, so you are required to check your Sarah Lawrence email account at least once per day. I will use your @gm.slc.edu address because it is reliable and easy to remember. You should also check the course web pages frequently for code examples discussed in class, and for the homework assignments. I will be happy to answer your questions by email and will try to respond as quickly as possible to messages that pertain to the course.
Homework assignments will be posted weekly, and will be due by the following Wednesday at 11:59pm. Most assignments will involve writing and testing Java programs. You should expect to spend a substantial amount of time outside of class each week working on the assignments.
You should start each assignment as early as possible. Don't wait until the day before it is due. "I can't get Java to work on my computer!" or "My computer crashed!" are not valid excuses for failing to complete an assignment on time. The computers in Ilchman Science Center 104 are available for you to use outside of regular class time. You may also use your own computer, but it's up to you to install any required software and to manage your time wisely, so that if you run into unexpected problems, you will still have enough time to complete the assignment by other means.
If for some reason you are unable to meet a homework deadline, you have two free extensions available to use at your discretion. See the Late Homework Policy for more details. These extensions expire on Friday, May 8 (our last day of class). After that, no late coursework of any type will be accepted.
You will use a web-based submission system to turn in your Java files for each assignment. Please do not email your homework to me! You are also required to turn in a nicely formatted hardcopy printout of your code in class. If you forget to turn in a printout or some of your files are missing, you will lose points on the assignment.
You should always include your name and the assignment number in a comment at the top of each file that you turn in.
On some assignments, you will be encouraged to work with a partner, if you wish. No more than two people may work together. You and your partner are required to participate equally in designing, writing, and debugging your code. Therefore, you must agree to work as a pair before starting on an assignment. When working with a partner, please submit only one copy of your files and turn in only one printout. However, make sure to include both of your names at the top of each file, and indicate on the printout which one of you submitted the files electronically.
The Java code that you submit must compile without generating any syntax errors! Code that does not compile will be severely penalized.
You must have a copy of the textbook by the first week of class. Copies are available in the SLC bookstore.
Your programs will be graded on both functionality and style. As expert programmers know, programming is about more than just getting your code to run correctly on a computer. It is a highly creative activity akin to an art form, which relies as much on a sense of aesthetics and style as on technical mastery of the programming language. Programs should be written primarily for other programmers to read and understand, and only incidentally for machines to execute. Thus it is very important for you to develop a clear and consistent programming style, making good use of comments, white space, and well-chosen variable names. Your code should follow these general stylistic guidelines:
Homework grades are based on both functionality and style, according to the following scale. Be aware that even if your code works correctly, it could still get a B due to stylistic problems. In order to get an A, your code must work completely correctly, be well-organized and easy to read, and conform to the stylistic guidelines given above.
|A||Work of excellent quality that clearly meets or exceeds all of the expectations of the assignment. All programs work correctly on all of the input data, and are well-written, exhibiting good programming style. A job well done.|
|B||Work of good quality that meets most of the expectations of the assignment in a satisfactory way. Programs work correctly or mostly correctly for most of the input data. Some programs may have minor stylistic problems.|
|C||Work of subpar quality that falls short of expectations. Some programs have serious deficiencies, and work incorrectly for a significant portion of the input data. Nevertheless, the work shows some degree of effort and understanding.|
|D||Work of poor quality that exhibits many severe deficiencies, reflecting minimal effort and understanding. Programs crash or work incorrectly for most or all of the input data.|
Projects will be due the last week of the semester. During that week, everyone will give a short presentation to the class on their conference work. You will also be required to turn in a short written project report. However, if you choose to present your project at the SLC Science/Math Poster Session, which will be held in May (more details will be provided later), you do not have to turn in a project writeup. There are three options available for your conference work:
Your own project idea. If you already have a clear idea of what you would like to do, that's great. I am open to almost any computer science topic, although preferably one related to the course material.
A programming project. This would involve developing a sizable program over the course of the semester to perform some task. Your program would be expected to incorporate at least some of the data structures covered in class. There are many possibilities here: games, simulators, database applications, web applications, graphics, etc. Your project could be a stand-alone system, or could make use of Java's standard libraries or other third-party libraries. The project goal would be a working program, with separate well-written documentation, that you would demo for the class.
A research paper. This option would involve researching some topic related to computer science in depth, by developing a bibliography of books, articles, web sites, etc. and doing extensive background reading. The project goal would be a traditional 15-20 page, well-written conference paper on the topic. If you prefer, you could present your work in the form of a web site instead of (or in addition to) a paper. In this case, the same standards for good writing would apply to your web site.
At times you may find some of the course material to be quite daunting. But don't be discouraged! If you find it difficult, most likely so does the rest of the class. This is just a normal part of the process of learning to program. You are strongly encouraged to come see me as soon as possible whenever you are having difficulty with the material. If you are confused about something, don't stay that way! Staying confused will only make things worse later. Come talk to me as soon as possible so that we can clear up the problem. There is no point in staring at the computer screen for hours trying to figure out why your program won't work, when just a few minutes is usually all it takes to track down the problem together. I'll be more than happy to schedule an appointment. Ask me about it in class, email me, or leave a message on my voicemail. You can also try to catch me on the fly, though I can't always guarantee that I'll have time to meet with you right then.
Our lab assistants Sarah Dennis and Rachel Williams will be available this semester for informal help and tutoring with Java programming, according to the following schedule. This service is available on a walk-in basis in Science 104 (our computer lab), with no appointment necessary:
For the remainder of Spring 2020: To attend an online tutoring session, go to the Mathematics Resource Center page in MySLC.
Read the material before you come to class. Don't worry about total comprehension, but at least get a feel for what we will be covering that day. If you have some understanding of the material coming in, it will be easier for you to ask questions during class, rather than later, when I might not be around. Additionally, I will often discuss code examples in detail during class. If you have read the book before coming to class, the examples will be much easier to follow.
Ask questions if you don't understand. This means both during class and while doing your homework. This course continually builds on previous material, so if you don't understand something one week, it will continue to be a problem the next week, and the week after that, and so on...until you finally do understand it. If you need help, come talk with me in my office, send me email, or ask your classmates (but first read the Academic Honesty Policy below).
Start the homework assignments early. I realize this one is not always easy to do, but if you can get into the habit of doing this, you will be much, much better off. Here are two reasons to start early: (1) if you get stuck early (i.e., not two hours before the deadline), there will be time to ask for help; (2) if you get stuck, you can always walk away, go do something else (like sleep), and come back later. I find I always have at least a few new ideas when I come back to something like this. If you wait until the last minute, you can't do this.
Practice, practice, practice. The only effective way to learn this material is to consistently do the homework. Finish all of the assigned programs (and maybe even do some extra ones for fun!). Even if you don't get them done on time, they will still help you learn the material.
The highest level of academic integrity is expected of every student. You are strongly encouraged to discuss ideas and approaches to solving problems, on a general level, with your fellow classmates, but you are not allowed to share your program files or solutions with others. You may, however, share code with your lab or homework partner if you are working together on an assignment. The code you hand in must be exclusively your own work, with the following permitted exceptions: code provided in class by me, code from the textbook, and code worked on with a partner. Effective learning is compromised when this is not the case.
When in doubt, credit the people or sources from whom you got help. This also goes for any help obtained via the internet. If you are ever unsure about what constitutes acceptable collaboration, just ask. Here are some example scenarios of acceptable and unacceptable collaboration. You are also responsible for carefully reading the College's official Policy on Academic Integrity in your Student Handbook. Failure to abide by these rules is considered plagiarism, and will result in severe penalties, including possible failure in the course. Please do not put me, yourself, or anyone else in this unpleasant situation!