Be sure to read all of this page!
Knowing the basics of algorithmic thinking and programming is a good start, but there's must more beyond that. What types of problems can be solved this way? Are there different ways of structure a program that might better suit some problems? What about more intricate algorithms and data structures? With these ideas in mind, this course will have two goals:
Object orientation provides another layer of abstraction beyond the creation of procedures (a.k.a. functions or methods). It not only allows you to define new kinds of data (beyond the primitive types such as int, char, float, etc.), but also to define the methods that operate on that type of data. From this basic idea comes a number of ways to extend and refine known data types, encouraging the creation well-encapsulated solutions. Using OOP, we will quickly find that the focus of solving a problem becomes less the sequence of steps performed by a specific method, and more the structural and functional relationship between parts of the program. (Sound like gibberish? That's OK -- it will make sense before too long.)
We will begin with a review of basic Java. The we will be dig into OOP, concepts, all the while using those concepts for increasingly complex problems. Some of our focus will also be on producing elegant code -- after all, programming is writing, and intended, at least in part, for other people to read. As we hone our programming and problem solving skills, we will explore a set of interesting uses of computation, including cellular automata, machine learning, and data compression (and perhaps others).
The basic topics are given below, grouped (loosely) into categories. We will address these topics in some kind of interleaved order:
Java and OOP:
Data structures and concepts:
Higher-level topics:
We will meet three times per week for a 50 minutes each. The class lectures are WF at 1 pm in SMudd 205, and the lab is M at 1 pm in SMudd 014. Note that sometimes we will vary the use of labs and lectures in a given week -- watch the course annoucements for such changes.
You are responsible for the material presented in every lecture. There is no attendance policy, but I strongly recommend that you attend all lectures. If you miss one, it is your responsibility to obtain the material that you missed.
If you must miss a class meeting due to illness, please contact me as soon as is reasonable. We will then make arrangements to address the material and discussion that you may have missed.
If you must miss a class meeting due to another commitment (e.g., a musical performance, an athletic contest), then do not contact me. How you choose between scheduling conflicts is for you to decide. If you choose to miss a class meeting in order to do something else, then you are responsible for the material that you miss; moreover, you should not expect that I will help you to address that missed material. If any work is due at the time of the class meeting that you miss, then I expect you to submit it beforehand.
There is no text book for this course. If you really want one as a reference, come and talk to me, and we'll try to find one that suits your needs. Keep in mind that the web can, if used wisely, be a handy resource for programmers.
There will be a more-or-less continual stream of projects throughout this course. New projects will typically be assigned during one of our labs so that we can discuss and begin work on their solutions. These projects will, at times, build on previous projects. It is therefore important not only that you complete each assignment correctly and in a timely fashion, but also structure in a way that modifications and additions are easier; that is, you should write modular, well encapsulated, well documented code.
You will use the College UNIX servers, remus and romulus, for your programming work. While you may choose to program on another platform, your programming ultimately must compile and run on the UNIX servers, since those are the machines on which I will test it. Submissions will be performed electronically from remus and romulus, and graded work will be returned to you electronically as well.
The policy for late submissions is simple: A project not submitted by its deadline will receive a failing grade.
Here are the critical rules regarding extensions for an assignment:
If you fall ill, are injured, or must handle some other emergency, then you should notify me of your need for an extension at the first reasonable moment. I will expect, in these circumstances, that the Dean of Students office can corroborate that your situation would merit an unexpected extension on a deadline.
If some important (non-emergency) circumstance will impinge your ability to submit work by its deadline, then you must contact me at least 48 hours prior to the deadline to request an extension. I will try to respond in a timely fashion, and depending on the nature of your request, I may or may not grant the extension. Some examples of acceptable reasons for extentions are: A sudden request for a job interview, just-in-time scheduling of a post-season athletic contest (for a student in good standing), personal emotional distress (again verifiable through the Dean of Students).
There are a number of common circumstances that do not merit extensions. Specifically, I expect you to handle any forseeable conflicts between coursework and other responsibilities by doing your work early. For example, athletic events, musical performances, or other extracurricular commitments that were scheduled more than 1 week prior to a deadline will not constitute a reason for an extension. Similarly, there will be times when coursework from all of your classes will pile up. Telling me that you also have a lab, a paper, and an exam at around the same time is not a reason for an extension; you are expected to carry the workloads from all of your classes.
This class will move from one project to another too quickly for late submission to be regularly handled. I will seek to grade and return your work to you quickly, and that will be possible only if all submissions are provided by the given deadlines. Those deadlines will always be explicitly and clearly stated.
There will be three exams:
Each exam may ask questions both from lectures and from projects. I am likely to ask you to apply ideas and methods in combinations that we have not yet explored; that is, I expect you to understand the material well enough to use it in ways that are novel to you.
Your grade for this course will be calculated based on the following forumla:
Note first that although the projects will likely take much more of your time and effort, the exams count substantially toward your final grade. Also note that there are no participation points. This absence is not at all a recommendation that you sit quietly. To the contrary, I highly recommend that you participate in class, not because it earns you points, but because it is the best way to ensure that you are on top of the material and understand it well.
I hope that this page has made clear the structure and intent of the course, and well as the expected workload and your responsibilities. By presenting this information at the onset, I hope to avoid using our valuable time on misunderstandings and negotiations.
I will be available to meet with you about the material, projects, exams, lectures, or any other aspect of the course. Simply email me and we will set a time to meet as soon as possible. You can also try to find me in my office (SMudd 406) or the Faculty Research Lab (SMudd 015).