|Monday, Wednesday, Friday||11:00 - 12:00|
|Tuesday||1:00 - 6:00|
|Wednesday||4:30 - 6:00|
|Thursday||1:30 - 2:30 and 4:30 - 6:00|
For more details about my schedule, please refer to
Please feel free to contact me via email if I am not in my office. If you need to schedule an appointment, you may call my office or my home. I am often able to schedule student meetings at times outside of office hours.
Lecture and Discussion: Monday, Wednesday, Friday 10:00 -10:50
Laboratory Session: Thursday 2:30 - 4:20, Alden Hall 101
The essence of the discipline of computer science is algorithms. We
can also create a computer program to serve as a concrete
representation of an algorithm. This course will expose students to
the notion of an object-oriented data structure. Students will delve
into the issues that are related to algorithm design, implementation,
and analysis. Specifically, the course will introduce the student to
abstract data types such as
Hashtables. Next, the course will expose the student to
fundamental concepts such as recursion, searching, and sorting.
Finally, this course will provide a student's first introduction to
the analysis of algorithms. We will explore the analysis of
algorithms on two fronts. First, students will consider the analytical
(i.e., asymptotic) evaluation of algorithms. Second, students will
conduct an empirical analysis of an algorithm with a variety of
workloads and experimentation environments. Since the majority of the
software implementation tasks will use the Java programming language,
this course will frequently require students to use the
object-oriented programming paradigm and design patterns.
At the completion of this semester, the student should be comfortable
with the object-oriented programming paradigm. Also, students should
be able to handle many of the important, yet accidental aspects of
implementing programs in the Java programming language. That is,
students should be comfortable with one or two program editors and
compilers and be able to understand the purpose of shell environment
variables such as the
CLASSPATH. Students should have a
"toolkit" of abstract data types that he/she can use in the context of
the solutions to larger problems. Students must have a strong grasp
of the basic building blocks of a programming language and a growing
knowledge of more advanced topics like loop invariants, formal
specification, and recursion. Finally, students should have a basic
knowledge of analytical and empirical techniques that they can use to
measure algorithm performance.
The primary text for this course is Data Structures and Algorithms in Java, Fourth Edition. This text was written by Michael T. Goodrich and Roberto Tamassia. This text provides a balanced, high quality treatment of the topics that were listed in the Course Objectives Section.
The required articles could be supplemented with excerpts from a number of different sources. Additional articles from important computer science and software engineering magazines and journals, such as Communications of the ACM, IEEE Software, IEEE Computer, and IEEE Transactions on Software Engineering, could be examined to further expand and deepen the scope of the required material. Technical papers that have been submitted to the Networked Computer Science Technical Report Library (NCSTRL), the CiteSeer Repository, or the ACM Digital Library could also be used as additional texts. Finally, selected chapters from additional texts could be examined during the semester.
The grade that a student receives in this class will be based on class participation, grades on two interim exams, the grade on the final exam, the grade for all of the laboratory and homework assignments, and the grade for the final project. The grade breakdown will follow the form below. All percentages are approximate and it is possible for the assigned percentages to change if a need to do so presents itself.
|Laboratories and Homework||30%|
All assignments will have a given due date. The printed version of the assignment is to be turned in at the beginning of the class on that due date. Late assignments will be accepted for up to one week past the assigned due date with a 10% penalty. All late assignments must be submitted at the beginning of the class that is scheduled one week after the given due date.
It is mandatory for all students to attend class. If you will not be able to attend a class session, please see the Instructor at least one week in advance in order to describe your situation. Students who miss more than five unexcused classes will have their final grade in the course reduced by one letter grade. Students who miss more than ten unexcused classes will automatically fail the course.
In order to explore the discipline of computer science, it is essential for students to have hands-on experience in a laboratory. Therefore, it is mandatory for all students to attend laboratory sessions. If you will not be able to attend a laboratory, please see the Instructor at least one week in advance in order to explain your situation. Students who miss more than two unexcused laboratories will have their final grade in the course reduced by one letter grade. Students who miss more than four unexcused laboratories will automatically fail the course.
Laboratory assignments will require students to conduct experiments to learn more about the Java programming language and explore different techniques for analyzing, designing, and implementing software solutions to real-world problems. All laboratory assignments will require the use of the provided tools to write programs that conduct experiments and solve problems. Students must conduct laboratory assignments in an individual fashion. Each laboratory assignment will normally be provided on the day before our scheduled laboratory session. The Instructor expects students to read the laboratory assignment before attending the session in order to prepare themselves appropriately. Unless specified otherwise, each laboratory assignment will be due at the beginning of the next laboratory session.
This class will present you with the description of a problem and require you to implement solutions. The final project in this class will require you to utilize all of the knowledge that you have accumulated during the course of the semester in order to solve a problem with multiple programming languages and software development tools. The project will require you to draw upon your problem solving skills and your knowledge of the principles and practice of software engineering. Furthermore, the final project may involve a significant experiment to discover, understand, and/or evaluate one or more algorithms or software applications.
Throughout the semester, we will experiment with many different software tools that computer scientists use throughout the software development life-cycle. The Instructor and the Department's Systems Administrator have invested a considerable amount of time to ensure that our laboratories support the completion of laboratory assignments and the final project. To this end, students will be required to complete all assignments and the final project while using the Department's laboratory facilities. The Instructor and the Systems Administrator will only be able to devote a limited amount of time to the configuration of a student's personal computer.
The study of the computer science discipline is very challenging. Students in this class will be challenged to learn the principles of algorithm analysis, examine a host of abstract data types, hone their problem solving skills, and learn about new software development environments. During the coming semester even the most diligent student will experience times of frustration when they are attempting to understand a challenging concept or complete a difficult laboratory assignment. In many situations some of the material that we examine will initially be confusing : do not despair! Press on and persevere!
In order to minimize confusion, students must invest time to prepare for class discussions and lectures. During our class periods, the Instructor will often pose demanding questions that could require group consultation, the creation of a program, or a vote on a questionable issue. Only students that have prepared for class by reading the assigned material and reviewing the laboratory and reading assignments will be able to effectively participate in these discussions. More importantly, only prepared students will be able to extract the knowledge that is needed to be successful in this course. Important portions of the material that will be discussed during the semester will not be in the textbook.
In order to help students to remain organized and effectively prepare for classes, the Instructor will maintain a class schedule with reading assignments and additional Instructor notes. The reading assignments will be directly integrated into the class schedule. Throughout the class sessions students will also be required to download, use, and modify Java programs (it is also likely that students will be required to use programs that are written in other languages). Each of these program segments will be provided on the course Web site. Students who are not comfortable with compiling, editing, and using simple Java programs should see the Instructor immediately.
Remember this motto, semper paratus!
No source code will be accepted unless the code is printed with the
enscript -2rG or the command
--pretty-print=Java. This means that your code must
have the date clearly printed at the top of the page. (If the
a2ps programs are not correctly
printing your files, please see the course Instructor or teaching
assistant(s)). All source code that is not submitted in this fashion
will be assigned a total of zero points. That is, the
student will earn an "F" on this laboratory or portion of the final
project! The first time that a student violates this requirement,
he/she will be given a resubmit option. After this single resubmit
option has been exercised, a student will be awarded an "F" for all
The Americans with Disabilities Act (ADA) is a federal anti-discrimination statute that provides comprehensive civil rights protection for persons with disabilities. Among other things, this legislation requires all students with disabilities be guaranteed a learning environment that provides for reasonable accommodation of their disabilities. If you believe you have a disability requiring an accommodation, please contact the Learning Commons at 814-332-2898.
The Academic Honor Program that governs the entire academic program at Allegheny College is described in the Allegheny Course Catalog. The Honor Program applies to all work that is submitted for academic credit or to meet non-credit requirements for graduation at Allegheny College. This includes all work done in class (such as examinations, quizzes, and laboratory work), all papers, and any other material that might be assigned in this class. All students who have enrolled in the College will work under the Honor Program. Each student who has matriculated at Allegheny College has acknowledged the following pledge:
I hereby recognize and pledge to fulfill my responsibilities, as defined in the Honor Code, and to maintain the integrity of both myself and the College community as a whole.
In this course, students are encouraged to conduct high-level discussions with their fellow classmates about the laboratory assignments. The Instructor considers it a violation of the honor code for students to share segments of source code on the laboratory assignments. If a student is experiencing difficulties with the low-level details of a laboratory, they are encouraged to seek help from the Instructor. The Instructor reserves the right to use several different automated tools that scan Java source code to check for plagiarism violations. Furthermore, the Instructor reserves the right to use different automated tools to scan written responses to assignments for plagiarism violations.
Unless otherwise specified, this work is licensed under a Creative Commons License