Welcome to CSCI 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
- Program documentation - specifically Javadocs
- Rapid prototyping
- Version control
- Design patterns
- Alternative domains, e.g., GUI applications, Network-based applications, Web applications
Classroom work will consist of lecture, discussion, and lab experimentation. You will be evaluated primarily on programming assignments, programming projects, written assignments, and exams.
After taking this course, you should be able to
- Discuss software development and practices knowledgeably, using the appropriate terminology
- Design, implement, test, and document efficient applications of increasing size and complexity
- Understand, describe, and analyze the designs and implementations of others
- Use a version control system, such as Git
- Use many of the capabilities of the Eclipse IDE adeptly
- 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.
Office: Parmly Hall 410
Office Hours: MWF 11:15 a.m. - 1:15 p.m. via Zoom and by appointment
Phone Number: (540) 458-8309 (it is better to email me than to call)
Section 01: MWF 10 a.m. - 11 a.m.
Java for Python Programmers - requires a login to do assignments/exercises. While the book and registration is free, please consider donating $10 to help with their costs of hosting and development.
If you want a Java reference book, you can try one of these:
Other good books, on Safari:
- Effective Java by Josh Bloch
- 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.
- Arrive to lectures promptly.
- 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 as a last resort. This is a good skill to learn; however, I find that students often try to apply much more difficult solutions to relatively simple problems when they are just starting to learn and understand a language. Document where you found the code.
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 on 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.
Unless otherwise specified, you may discuss individual programming assignments informally with other students. However, sharing a solution, in the form of the design or implementation of a program or in experimental results, 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, unless otherwise specified, should be done individually.
You should not look at solutions from students who took this class previously, nor should you share your solutions with any future students of this course.
You may search the web for reference help, e.g., git commands, a Java class's API, general facts. I provide a lot of resources. My assignments typically require you to build on the slides and provided examples. (A common exception is any kind of machine/software configuration on your own computer.) Use my resources first, and search online as a last resort. You need more experience to be able to sort through the results. How do you get experience? More practice in CSCI209!
Especially early in the term, if it takes more than about 3 minutes to get an answer on the web or from a person, check in with me.
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 (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.
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.).
Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the term and schedule a meeting outside of class time to discuss accommodations. It is the student's responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking must be arranged with the professor at least a week before the date of the test or exam, including finals.
Student Health and Classroom Expectations
Our collective responsibility as a University community in the face of COVID-19 applies equally to students, faculty, staff and members of the Lexington and Rockbridge County community. Specifically, our responsibilities with respect to classroom behavior are as follows:
- Before coming to campus each day, you must complete the daily health attestation (https://attest.wlu.edu) to affirm that you are not exhibiting symptoms and have not recently been in contact with anyone suspected of having COVID-19. Refusal to do so will lead to a request to depart campus immediately.
- Masks (or face shields where approved) must be worn over your mouth and nose in the classroom at all times. You will be asked to leave the building if you do not comply.
- You also will be required to maintain physical distancing of at least six feet from others.
- You will be asked to wipe down tables, chairs, and desks that you use before you depart your classrooms.
- DO NOT attend class or other in-person course meetings if you are sick. Anyone with new onset symptoms of COVID-19 and/or recent close contact with COVID-19 should stay in their residence hall room or apartment. Seek medical advice.
- Students placed in isolation due to illness or quarantine because of possible exposure should be cleared by a health official before returning to class. It is the responsibility of the student to communicate with faculty about how they can keep up with their studies and make up missed work.
- Personal travel should be limited, where possible, to the State of Virginia. In all circumstances, the University reserves the right to require a 14-day self-quarantine requirement upon your return.
Recall that behavior outside of the classroom, such as travel and social gatherings, has an effect on everyone in the community. You are expected to follow the guidelines in the full Statement of Community Expectations.
Grades for the course will be computed as follows:
- (44%) 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
- (6%) Testing Project
- (20%) Final Team Project
- (5%) Participation and attendance