Course Overview
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."
Catalog Description: An examination of the theories and design techniques used in software development, with an emphasis on making software more maintainable. Hands-on implementation of those techniques. Topics include the software life cycle, design patterns, version control, unit testing, 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
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
- 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, individually and to collaborate on projects with a team
- 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.
Instructor
Sara Sprenkle
Office: Parmly Hall 410
Office Hours: see times and links to
Zoom on the Calendar in Canvas;
other office hours (on Zoom or in-person) are by appointment
E-mail Address:
Phone Number: (540) 458-8309 (it is better to email me than to call)
Course Information
Section 01: MWF 11:30 a.m. - 12:30 p.m.
Section 02: MWF 1:50 - 2:50 p.m.
Textbook
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:
- Thinking in Java by B. Eckel
- Core Java by C. Horstmann and G. Cornell
Other good books:
- Head First Java Select "Institution not listed" and then enter your email address.
- Effective Java by Josh Bloch - Select "Institution not listed" and then enter your email address.
Course Policies
Student Responsibilities
- 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.
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 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.
Honor System
- All written assignments, unless otherwise specified, should be done individually.
- 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.
- 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 online resources. My assignments typically
require you to build on the slides and provided examples. Use
my resources first, and search online as a last resort. (A
common exception is machine/software configuration on your own
computer.) 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. - AI-based assistance: I consider AI-based
assistance, such as ChatGPT and Github Copilot, the same as
collaboration with other people: you are welcome to talk about
your ideas and work with other people, both inside and outside
the class, as well as with AI-based assistants. However, all
work you submit must be your own. You should never include in
your assignment anything that was not written directly by you
without proper citation (including quotation marks and in-line
citation for direct quotes). Including anything you did not
write in your assignment without proper citation will be
treated as an academic misconduct case.
If you are unsure where the line is between collaborating with AI and copying from AI, consider the following heuristics:- Never copy your conversation with an AI assistant. You can copy your own work into your conversation, but do not copy anything from the conversation back into your assignment. Instead, use your interaction with the AI assistant as a learning experience, then let your assignment reflect your improved understanding.
- Do not have your assignment and the AI agent itself open on your device at the same time. Rather, use your conversation with the AI as a learning experience, then close the interaction down, open your assignment, and let your assignment reflect your revised knowledge. This heuristic includes avoiding using AI assistants that are directly integrated into your composition environment: just as you should not let a classmate write content or code directly into your submission, you should avoid using tools that directly add content to your submission.
Deviating from these heuristics does not automatically qualify as academic misconduct; however, following these heuristics essentially guarantees your collaboration will not cross the line into misconduct.
Participation and attendance
To
receive full credit for class participation and attendance,
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-.
You are permitted three sick/personal days for minor illnesses or any other reason (e.g., family occasion). No documentation is needed or requested for these absences. Excused university absences (e.g., for intercollegiate athletics, documented by a note from a faculty or staff member) do not count towards your sick days or personal days.
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.
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.).
Academic Accommodations
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
Please observe the latest W&L COVID-19 policies and act responsibly. Indoor masking is welcome even when not required.
- (37%) 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
- (8%) Testing Project
- (25%) Final Team Project
- (5%) Participation and attendance
Grading
Grades for the course will be computed as follows: