Course Overview
Welcome to CS 209: Software Development!
"If you don't think carefully, you might think that programming is just typing statements in a programming language."- Ward Cunningham
Catalog Description: An examination of the theories and design techniques used in software development. Topics include the software life cycle, design patterns, the Unified Modeling Language, unit testing, refactoring, rapid prototyping, and program documentation.
In this course, you will learn and use tools and techniques that are commonly used for the development of large software systems. Topics covered include
- the Java Programming language - introduction to a statically typed language and its libraries
- the Eclipse IDE (including refactoring tools and debugger)
- Packaging, software libraries
- Code organization: interfaces vs abstract classes vs classes
- Software life cycle
- Testing and debugging - including unit testing, specifically JUnit
- Design principles--small and large
- Refactoring
- Program documentation - specifically Javadocs
- Rapid prototyping
- Version control
- Design patterns
- Alternative domains, e.g., GUI applications, Network-based applications, Web applications
- Unix tools
Structure
Classroom work will consist of
lecture, discussion, and lab experimentation. You will be
evaluated primarily on programming assignments, programming
projects, written assignments, and exams.
Objectives
After taking this course, you
should be able to
- Talk about software development and practices knowledgeably, using the appropriate terminology
- Design, implement, test, and document efficient applications of increasing size and complexity
- Understand the designs and implementations of others
- Use a version control system, such as Subversion or CVS
- Use many of the capabilities of the Eclipse IDE
- Test and debug large applications systematically, using standard tools
- Understand design principles such as Unified modeling language and design patterns
- Discuss the benefits and limitations of a statically-typed language. Specifically, you should be able to compare and contrast Python and Java and know situations where one is preferred over the other.
Instructional Staff
Sara Sprenkle
Office: Parmly Hall 410
Office Hours: MWF (G) and by appointment
E-mail Address:
Phone Number: (540) 458-8309 (it is better to email me than to call)
Course Information
CS 209, Section 01
Lecture: MWF 11:15 a.m.-12:10 p.m.
Textbook
There is no required book for this course. We will use many online resources.
If you want a Java reference book, you can try one of these:
- Thinking in Java by B. Eckel
- Core Java by C. Horstmann and G. Cornell
- Java How To Program by Deitel and Deitel
Another good book: Effective Java by Josh Bloch
Course Policies
Student Responsibilities
- It is very important that you attend lectures (see Grading below). There will be considerable information given in class that is not available elsewhere. Family and medical emergencies and conflicts with University-recognized extra-curricular activities are the only reasons to request that work be rescheduled.
- You are expected to arrive to lectures promptly.
- Please turn off cellphones.
- Actively participate in the class by asking and answering questions.
- Check your W & L email frequently and check this web page and the schedule for new information.
- Throughout this class (and life in general), keep in mind a cowboy's wisdom: "Good judgment comes from experience." You may ask, "How do I get experience?" Bad judgment works every time. My point? Don't be afraid to make mistakes in this class, but make sure you learn from them!
- Use the Web to find solutions to some of your problems. Document where you found the code.
Instructor Responsibilities
I will try to
make this course and its material as exciting for you as it is for
me. I will be respectful of student questions and misunderstandings.
I will give prompt, constructive feedback from assignments. I will
be available during office hours and by appointment. I will do my
best to respond to questions via email within 24 hours.
Honor System
Unless otherwise specified, you may discuss individual
programming assignments informally with other students.
However, sharing a solution, in the form of experimental
results or the design or implementation of a program, is an
honor violation. Students should know where to draw the line
between getting legitimate outside assistance with course
material and outright cheating. Students who obtain too much
assistance without learning the material ultimately cheat
themselves the most. If you have any uncertainty about what
this means, consult with me before you collaborate. All
written assignments should be done individually.
Participation and attendance
To receive full
credit for class participation and attendance, you must have less than
three unexcused absences from class and you must be actively
engaged in the classroom by answering and asking questions each class when
appropriate and by being respectful of other students. The average grade
for participation is a B-.
The schedule, including important dates, is posted at the beginning of the semester. You should plan accordingly. If there are acceptable conflicts, tell me at the beginning of the semester and then remind me about a week in advance. This is especially important for exams. If you miss the exam period, you will receive a 0 for the exam.
General grading policies
Programs
turned in with syntax (i.e., compiler) errors will receive
no credit. "Roll back" your program (later in the semester,
using version control management software) into a state
where it does not have compiler errors.
In general, correctness is no longer sufficient for a good grade. Your program must be efficient, elegant, well-commented, and easy to read. You must also demonstrate that it is well-tested.
Late policy
All assigned work is due
on the date specified. Any assignment turned in after the due
date/time but on the same day will be penalized 10%. Any
assignment turned in after the day on which it is due will be
penalized an additional 10% for each late day. No assignment
will be accepted that is more than three school days late. If
you turn an assignment in late, you must indicate this somehow
(in comments, on paper, etc.).
Grading
Grades for the course will be computed as follows:
- (45%) Individual programming and written homework assignments, including but not limited to:
- Writing, documenting Java applications, of various sizes
- Refactoring software
- Reading/discussion assignments
- (25%) Two Exams
- (25%) Projects
- (5%) Participation and attendance