Syllabus
Meeting Times and Staff
Instructor
- Instructor: Prof. Adam J. Aviv
- Email: aaviv@gwu.edu
- Prerequisites: CS 1112 or equivalent (See undergraduate curriculum).
Meeting Time
- Lab: Wednesday 11:10AM - 12:20PM ET (via Zoom)
- Class: Monday 9:35AM - 12:35PM ET (via Zoom)
Course Staff and Office Hours
- Prof. Adam J. Aviv - Instructor
- Tue. 2:00PM-3:00PM ET
- Wed. 2:00PM-3:00PM ET
- Yibo Fu - GTA
- Mon. 5:00PM-6:00PM ET
- Thur. 5:00PM-6:00PM ET
- Xiaoyu Shen - GTA
- Mon. 2:00PM-3:00PM ET
- Fri. 5:00PM-6:00PM ET
- Julia Bistow - UTA
- TBA
- Austin Theriault - LA
- Tue. 9:00PM-10:00PM ET
- Fri. 2:00PM-3:00PM ET
Course Details
Course Description
In this course, students will learn how to write object-oriented code using Java. Concepts will focus on object-oriented thinking, software composition, inheritance and polymorphism, and design patterns. Programming techniques, assignments and lab exercises will focus on Java, specifically, the language and its core libraries. The course will be conducted lab-style with a mix of lecture, lab assignments and projects. The course will also cover an elementary introduction to the C programming language.
Learning Outcomes
By the end of this course, students will be able to:
- Experience programming in C.
- Understand the relationship of language features to static and dynamic memory.- - Design Java classes for a challenging problem involving multiple classes.- Understand objects: static and dynamic classes, interfaces, abstract classes, inheritance, polymorphism, constructors, Java’s object features and syntax, memory representation of objects.
- Understand application development and design principles.
- Demonstrate skill in problem solving by going from complex word description to implementation.
Course Outline
- Weeks 1-4: Introductory C programming
- Syntax, memory management, libraries, file IO
- Weeks 7-10: Intermediate Java programming
- Quick review, objects, class hierarchies
- Weeks 11-14: Advanced Java Topics
- GUIs, concurrency/threading, IO, networking, web
- Throughout: Software engineering techniques
- Requirements, Architecture, Design Principles
Textbook and Resources
The textbooks for this course are:
- Required Learning Java, 5th Edition by Marc Loy, Patrick Niemeyer, Daniel Leuck
- Required Head First Design Patterns, 2nd Edition by Eric Freeman and Elisabeth Robson
- Optional: Practical C Programming by Steve Oualline, published by O’Reilly (3rd edition)
- This text will also be useful in the Comp Arch and Systems Programming courses
There are additional readings if you’re interested:
- Core Java, Volume 1 and Core Java, Volume 2 by Cay S. Horstmann
- Head First Java by Kathy Sierra and Bert Bates, published by O’Reilly (2nd edition)
- Java in a Nutshell, by David Flanagan, O’Reilly Publishing. This book is a handy reference that contains a (rather terse) overview of the language, tools and API’s. Initially, a beginner will find it difficult to read, but it’s probably the only book you will continue to use even after becoming a Java expert.
- For further information, see Prof. Simha’s annotated list of Java books and list of Java resources.
All books listed here are available for free via Safari Tech Books via the GWU library. Just create an account with your GWU email. You can also find a ton more books and resources there.
Workload
Expected time commitment
The GW standard is that one credit hour corresponds to a minimum of 50 minutes of instruction plus 100 minutes of independent learning (e.g., homework and exam prep) per week. This is a 3 credit course, thus you should expect to spend 2.5-3 hours in class and 50 minutes in lab, plus four to five hours doing homework per week. If you are spending substantially less time than this, it likely means that you are not reviewing the modules after lecture or reading them carefully enough when completing assignments. If you are spending substantially more time than this, I encourage you to come to office hours more often and meet with me discuss ways to optimize the time you are spending.
Programming Expectations
The course will be programming-intensive. You should be prepared to spend a significant amount of time writing and designing software. You will be submitting one homework module per week, and three projects with multiple parts. You should expect to spend the majority of your out-of-class time expectations programming.
Having completed the pre-reqs, you are expected to submit well-written code:
- Comments must be substantive.
- Select readable variable names and method names.
- Use consistent indentation (preferred: two or four spaces).
Grading
Grading Breakdown
- 5%: Quizzes
- 25%: Labs (6x, but lowest dropped)
- 45%: Projects (3x)
- 20%: Exams (2x)
- 5%: Participation
Quizzes
Quizzes will be administered during class and lab. They serve both as a check on your attendance and also a way to gauge your understanding. You will not be able to make up a quiz. As a result, we will drop your four lowest quiz grades, so if you miss a quiz (or two, or three), there is nothing to worry about.
Labs
Labs are short programming assignments that are designed to reinforce lecture and prepare you for projects. Note that Lab 0 does not count in this percentage, but is required to complete to pass the class.
There are six lab assignments. Your lowest lab grade will be dropped, so each lab assignment is worth 5% of your final grade.
Projects
There are three projects for this class. Each is substantial amount of work, each worth 15% of your grade, for a total of 45%.
Exams
There are two non-comprehensive exams in this class that cover the C programming unit and the Java programming unit. There is no comprehensive final exam; instead your final project is due during final exam time. Each exam is worth 10% of your grade.
Participation
To get full credit for participation, by the exam day for each unit (C and Java) you must participate 3 times in one of the following ways during each unit of the class (first 7 weeks, last 8 weeks), for a total of 6 participation interactions.
- Ask or answer a question on Ed
- Attend the professor and/or TA office hours
- Submit typos/nits on the course notes.
Submitting a typo or not on the course notes
The online notes for this class were written by your instructor. They have mistakes and errors, unfortunately, but we want your help to fix them. Doing so will count towards your participation grade in the class. To submit a typo/nit fill out the following form.
Late Work Policy
All assignments are due at 1159pm ET (America/New York) on the due date specified via Github classroom. We will grade the last commit that occurs prior to that deadline.
If you commit after the deadline and wish us to grade that version of your submission, you must (1) open an issue in your github repo with the title “Late Submission,” (2) tag @grading-staff in that open issue, and (3) fill out the following google form. For each day late, the deduction will double starting with 10% for one day, 20% for two days, 40% for three days, and 80% for four days. After four days, you can no longer submit the assignment for credit.
Late Passes
Each student is awarded two Late Passes that they may use without explanation for any lab or project submission (except for project 3 — sorry we have to submit grades!). A late pass extends the deadline by 48 hours, and should be requested prior to the deadline and no later than 12 hours after the deadline. A late pass can be used for any purpose (you do not need to explain why you are using it), but extensions will generally not be given after you run out passes! To request a late pass for an assignment, (1) open an issue in your github repository with the title “Late Pass,” (2) tag @grading-staff in that open issue, and (3) fill out the following google form.
Requesting Asynchronous Participation
During COVID-19, some students might not be able to attend synchronously because of their timezone or their available technology. If you will not be able to attend (any) lectures and/or labs, you need to register as a fully-asynchronous student with the instructor by filling out the following form no latter than January 15 and also emailing the instructor. .
Asynchronous students are still responsible for all material, which will be available on the course website, including videos of class and lab. We will offer asynchronous options that need to be completed in a timely manner. You will be asked to make up for in-class activities and participation, which may include:
- Plan to attend office hours. Depending on your progress you might be required to attend office hours.
- You might be asked to complete oral interviews where you explain concepts or code, or do live coding to make up synchronous quizzes.
- You might be asked to submit video recordings where you explain a concept, explain your code, or present a diagram.
Class Communication
We will use two primary forms of communication in this class: email announcements and Ed. You are responsible for remaining up to date on any information sent by email or posted to Ed. This may include clarifications to assignments, updates on grading rubrics, and changes in office hours.
For all general course information, questions, and clarifications, you should preference to using ED. An instructor, TA, or even your fellow classmate can then answer a question. You can even post your questions anonymously.
If you have personal, individual issues you’d like addressed, you should send those by email to the course instructor. However, all course related topics should be directed to Ed.
Course Policies
Illness policy
If you are ill and it will cause you to miss class, lab, or an assignment, you should let me know in advance if possible. It is your responsibility to catch up with the missed material. For extended absences due to illness, you should provide a doctors note. If you are to miss an exam or project deadline due to illness, you should also provide a doctors note.
Academic Integrity policy
It is very important in this course (and in life), that your work be your own. These guidelines will help you achieve that.
You must:
- Do your best to solve all homework, quizzes, projects, labs, and exams on your own.
- Write the names of any students you collaborated with as a comment at the top of your main/README file (subject to the constraints below).
- Notify me if you are using a tutor (this is not a problem, just let your instructor know).
You may:
- Discuss general approaches to solving the homework problems with other students, but the pen-to-papper, fingers-to-keyboard work is your own.
- No! You may not collaboratively write a homework answer and write your names on it and turn it in.
- Have another student look at a specific snippet of your code (e.g., 10 lines) to help you debug a programming error.
You may NOT:
- Copy code to or from other students or people outside of the class.
- Have someone else write code for you.
- Copy code from the internet, unless you specifically reference the source and can explain how it works. This should be a tiny minority of the code you submit.
- Write code as a group and then submit identical or slightly modified versions—if you discuss general approaches to solving a problem together, you still must be writing up your own independent solution.
The Academic Integrity Code will apply to this course. Please read through the code carefully. Penalties for violating the code or the policies described here include failing this course, and are elaborated in the GW Academic Integrity Code. Note that the minimum punishment is failure of the assignment. Additional actions could include failure of the class, suspension, or expulsion.
Please note that in the context of this class, all projects and labs are considering programming/coding assignments. Many actions foll under the "You may NOT" list above
Use of Electronic Course Materials and Class Recordings
Students are encouraged to use electronic course materials, including recorded class sessions, for private personal use in connection with their academic program of study. Electronic course materials and recorded class sessions should not be shared or used for non-course related purposes unless express permission has been granted by the instructor. Students who impermissibly share any electronic course materials are subject to discipline under the Student Code of Conduct. Please contact the instructor if you have questions regarding what constitutes permissible or impermissible use of electronic course materials and/or recorded class sessions. Please contact Disability Support Services if you have questions or need assistance in accessing electronic course materials.
All videos will be shared on password protected links. You should not share the passwords beyond this class or download and share those videos with others. This is a violation of the privacy of your fellow students and could lead to disciplinary actions on the Student Code of Conduct.
University policy on observance of religious holidays
In accordance with University policy, students should notify faculty during the first week of the semester of their intention to be absent from class on their day(s) of religious observance. For details and policy, see “Religious Holidays” at provost.gwu.edu/policies-procedures-and-guidelines
Disability Support Services (DSS) 202-994-8250
Any student who may need an accommodation based on the potential impact of a disability should contact Disability Support Services to establish eligibility and to coordinate reasonable accommodations. disabilitysupport.gwu.edu.
Wellness
If any issue arises that may limit your ability to participate in class, for example, personal illness, family emergency, etc., please be sure to discuss these matters with your instructor as soon as possible and accommodations will be made available to you as appropriate.
Feelings of being overwhelmed are unfortunately quite common in the University environment and something we have all dealt with. You are not alone, and there are a number of resources available to provide support in those moments. Learning to ask for help is an import part of the university of experience, and if you or anyone you know experiences any academic stress, difficult life events, or feelings of anxiety or depression, we strongly encourage you to seek support. GW offers counseling services, and also consider also reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:
- Student Counseling : 202-994-5300.
- National Suicide Prevention Lifeline: 1-800-273-8255
Acknowledgments
Much of the material for this course comes from previous iterations taught by Roxana Leontie, Prof. Wood, Prof. Simha and by Rhys Price Jones. Material was also adopted with permission from USNA courses ic221 and ic211, taught by Adam Aviv, Nate Chambers, Gavin Taylor, Chris Brown, and many others. Thank you.