CS151 - Structured Programming and Elementary Algorithms
Time
11:00 AM - 11:50 AM, Monday, Wednesday, and Friday
Location
Lovejoy 203
Textbook
- Wu, C. T. (2000). An introduction to object-oriented programming with
Java. Boston: McGraw-Hill.
Course content
The intent of this course is to teach you how to program computers.
As part of this course, you will learn a modern programming language,
called Java. However, that will in some ways be incidental to the
primary purpose of this course. By the time you finish this course,
we hope you will have developed the skills to:
- Systematically decompose complex problems into manageable pieces
- Apply logic to formulate problem solutions
- Design structured, object-oriented computer algorithms
- Create well organized and understandable computer programs
- Debug and repair incomplete or incorrect computer programs
- Write small programs in Java
- Learn new programming languages relatively easily
From the above list, it is hopefully apparent that the main point of this
course is to teach you the analytical skills and programming conventions
the will make you into capable computer programmers, and eventually
competent computer scientists. Your day-to-day activities will focus
on learning the Java programming language, but you should view that
mostly as a tool that helps you learn generally how to make computers
do what you want them to do.
I hope to cover (at least) the following general topics during the course
(these correspond roughly to Chapters 1-4, 6-10, 12, 14, and 16 of your textbook):
- Overview of computers and computer programs
- Systematic and disciplined approaches to problem solving with computers
- Object-oriented design and programming
- Basics of the Java programming language
- Processing numerical data
- Problem decomposition, and extending the power of Java
- Flow of control in computer programming, including:
- Conditional flow of control
- Repetitive flow of control
- Processing alphabetic character data ("strings")
- Sorting data
- Searching through data
- Well-designed programs with reusable objects
- Extending the power of Java with inheritance
- Recursive solutions to problems
Evaluation
The course will include a variety of homework assignments, quizzes, exams,
and projects.
Homework
This will be assigned occasionally, based on contents of the
textbook and lectures.
Quizzes
Each quiz will take up only a portion of class time. You will have a quiz
or exam every few weeks.
Exams
There will be two midterm exams, each taking an entire class period. The
midterms will be on October 11 and November 15.
There will also be a final exam during the scheduled final examination period
for this class.
Projects
Projects will be assigned, collected, and returned during your lab section.
Typically, you will receive a new project every week at the beginning of
lab, and you will have a week to finish the project.
In many ways, the projects and lab sessions are the most important parts
of this course. It is very difficult to learn computer programming without
lots of practice. Although the lectures, homeworks, quizzes, and exams
will allow you to build up background knowledge, you will ultimately learn
the most from putting all this knowledge into action by solving problems
and creating and debugging programs for the laboratory projects.
Grading
I will compute final grades for the course using the following proportions:
- 10%: Homework and quizzes
- 40%: Laboratory projects
- 30%: 15% each for two midterm exams
- 20%: Final exam
- Attendance and class participation will also be factored into your grade
Each score you receive will be normalized to a 100 point scale. These
will not map directly to letter grades until everything is tallied at
the end of the semester. However, as a rough guide, I generally consider
90 points or more to be ``A'' work, 80 points or more to be
``B'' work, 70 points or more to be ``C'' work, and 60 points or more to
be ``D'' work.
I also generally assume that if you do everything I ask,
that's worth about an A-minus. To receive an exceptional grade, you need
to do exceptional work, show particular enthusiasm, come up with
especially industrious
or innovative solutions, or otherwise impress me with your grasp of the
material.
The lab instructor will set the grading policy for your laboratory projects.
Your daily duties
To prepare for each class, I expect you to do the following:
Show up
I expect you to attend every class. As a class member, your regular
attendance is an individual and a collective obligation. In-class
discussion and questions are an essential feature of this course that only
you can provide. Your absence can disrupt the continuity of the
class, my effectiveness in presenting the ideas I want to cover, and the
group's responsiveness to those ideas. Therefore, unexcused absences will
adversely affect your course grade. Excessive absenteeism will result in your
failing the course (and it doesn't take much to count as excessive). See your
college handbook for a definition of excused absences. You are responsible
for knowing all the information presented in class, whether or not you are
there.
Be prepared
Before each class, you must review the material from the previous lecture.
You should write down and bring to class any questions you have on the
material, as well as questions on the current laboratory assignment. We will
devote a portion of each class to answering those questions. Also, before
each class, you should read (but not necessarily completely understand) the
portion of the textbook pertaining to that day's material. In addition to
helping you learn the course subject matter, this should help you develop
general skills for reading and understanding written materials. Discussion
should be an important part of each class, and you will not be able to
participate effectively if you have not prepared. During discussions, I do
not expect you always to have the "right answers", but I do expect you to have
thoughtful contributions, and to try to give reasonable justifications for
your answers.
Appropriate academic behavior
Students often have some confusion about what might or might not be considered
"cheating" in a computer programming class. In general, we want you to take
advantage of your instructors, teaching assistants, and fellow
students in working out solutions to assignments. However, we also need to
make sure that you are actually learning, and not simply using all of these
resources as a crutch. As with writing a paper for an English class, there is
a point at which working together becomes plagiarism. As a rule of thumb,
if you find yourself turning in work that looks substantially like the work of
someone else, you should seriously examine whether you have crossed the
line. If you have any doubts, talk to your instructors before
turning in the assignment.
In all cases, you must give credit to any source (like a written work
or help from some individual) that you use to help complete an assignment.
Again, this is similar to writing an English paper; if you use a quote or
material from someone else, you have to give credit where credit is due.
Otherwise you are inappropriately plagiarizing or borrowing ideas.
The lab instructor will set the specific policies cheating on the laboratory
assignments.
Be an active learner
This is the first of many times that I will ask you to come see your
instructors any time you have questions. Whether you are aware of it or not,
one of the reasons you came to Colby is because we have relatively small
classes, and faculty who are willing to take the time to help you learn when
you ask. It frustrates us when we miss opportunities to pull students
out of confusion.
This is particularly important in this course. All the concepts we will cover
build on each other. If you find yourself stuck trying to understand
something, it will only make catching up later that much worse. A former
faculty member likened this class to a cruise ship. "If you stay on board, it
can be quite pleasant. But if you fall overboard, you have to yell for help
quickly, while we can still send back a lifeboat."
So take advantage of your instructors (and your fellow students and your
teaching assistants). Ask questions in and out of class. I'll try
to make the material as easy to digest as possible, but I'll need help
identifying the things that are confusing you. But also note that
you
also won't know what you are confused about unless you keep up with
the assigned work.
Randolph M. Jones
(rjones@colby.edu)