Instructor: Prof. Roxana Leontie
Email: roxana@gwu.edu
Prerequisites: CS 1112 or equivalent (See undergraduate curriculum).

Time/Place:

  • Class meets: Wednesdays 3:30PM - 6:00PM ET
  • Lab Sections 31 and 33 meet: Mondays 9:00AM - 10:10AM ET
  • Lab Section 30 meet: Mondays 02:10PM - 03:20PM ET

Office Hours:
TBD check Slack for most updated ones

Course Staff:

Course Description and Learning Outcomes

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.

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: Head First Java by Kathy Sierra and Bert Bates, published by O’Reilly (2nd edition)
  • 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

You can get the e-book or may want to check Amazon.com for a cheaper copy.

Note: You will need the C book in the first week of class! We will not get to Java until week 3-4.

If you feel you need further resources, you can try:

  • The book 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.
  • Suggested companion book: Core Java, Volume 1 by C.Horstmann and G.Cornell. This book, an introduction to Java for programmers, starts from scratch, has plenty of examples and comparisons with other languages. Use this book beyond the course material to get a different take on the same material.
  • For further information, see Prof. Simha’s annotated list of Java books and list of Java resources.

Workload and Grading

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 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 load: The course will be programming-intensive. You should be prepared to spend a significant amount of time writing and designing software.

Approximate grading:

  • 5%: Participation in class and office hours
  • 10%: (Surprise!) quizzes
  • 25%: Lots of small programming exercises
  • 30%: 2 Large programming projects
  • 15%: Midterm exam
  • 15%: Final project/exam

Participation: To get full credit for participation, in each 3 week period you must participate 2 times in one of the following ways:

  • Ask or answer a question in class
  • Ask or answer a question on slack
  • Attend the professor, TA, or UTA office hours

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 (send me an email as soon as possible). You are still responsible for all material, which will be available on the course website and video recordings on BlackBoard.

We will offer asynchronous options that need to be completed in a timely manner. For these students, we will have a different way of counting participation and quizzes:

  • 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.

Bonus Points: throughout the class you will have opportunities to earn bonus points by doing something extra for your exercises or projects. The bonus points from the first half of the semester will be applied to your first exam and the points for the second half will be applied to the second exam.


Course Policies

If you have a disability that may effect your participation in this course and wish to discuss academic accommodations, please contact me as soon as possible.

Late work policy:

  • Late work will lose 10% per 24 hour period, e.g., if an assignment that was due at 3PM on Monday is turned in at 5PM on Tuesday it will lose 20%.
  • Since GitHub is used for assignment submission, we will grade the last commit made prior to the deadline; if you want us to grade a different version submitted later, fill this form and post an issue under your repository and tag your instructor: @rleontie.
  • Each student can use two Late Passes. A late pass allows you to extend a deadline by 48 hours. You should save these for emergencies! In order to use a late pass, fill up this form before the deadline if possible, and at most 12 hours after it. 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!

Email policy: You can send email to my GW email address. I will answer most class email during specific times set aside during the week for this purpose - so do not expect an instantaneous response. Since this is an advanced class, you may not perform “debugging by email”. That is, do not send me code snippets and ask me to identify the problem. If you want me to look at your code, you should have a specific question in mind (not just “it’s broken, why?”). Bringing code to my office hours is far more effective than sending it to me via email.

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.

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, and exams on your own.
  • Write the names of any students you collaborated with as a comment at the top of your main file (subject to the constraints below).
  • Notify me if you are using a tutor (this is not a problem, just let me know).

You may:

  • Discuss general approaches to solving the homework problems with other students.
  • 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.

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.


Further Notes

Coding standards: Having completed the prereqs, 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).

Acknowledgments: Much of the material for this course comes from previous iterations taught by Prof. Wood, Prof. Simha and by Rhys Price Jones.