CSE 219 : Computer Science III

Instructor: Ritwik Banerjee
Lecture Schedule: Monday and Friday 1:00 - 2:20 PM @ Frey Hall 104
Office Hours: Monday 11:30 AM - 12:30 PM, and Friday 2:30 PM - 3:30 PM @ New CS 206

A development of the basic concepts and techniques from Computer Science I and II into practical programming skills that include a systematic approach to program design, coding, testing, and debugging. Application of these skills to the construction of robust programs of thousands of lines of source code. Use of programming environments and tools to aid in the software development process.

Topics   

  • Programming style and its impact on readability, reliability, maintainability, and portability.
  • Decomposing problems into modular designs with simple, narrow interfaces.
  • Determining the proper objects in an object-oriented design.
  • Selecting appropriate algorithms and data structures.
  • Reusing code, including external libraries designed and built by others.
  • Learning systematic testing and debugging techniques.
  • Maintaining a repository of code during incremental development of a software project.
  • Learning how to use threads to synchronize several tasks.
  • Improving program performance.
  • Making effective use of a programming environment, including:
    • Syntax-directed editor
    • Build tools
    • Debugging tools
    • Testing tools
    • Source code management tools
    • Profiling tools

You must have taken CSE 214 and received a grade of C or better in order to take this course. In more detail, you are expected to have the following knowledge and skills at the beginning of the course:

  • Ability to write programs of a few hundred lines of code in the Java programming language.
  • Understanding of fundamental data structures, including lists, binary trees, hash tables, and graphs, and the ability to employ these data structures in the form provided by the standard Java API.

  • Ability to construct simple command-based user interfaces, and to use files for the input and output of data.
  • Mastery of basic mathematical and geometric reasoning using pre-calculus concepts.

At the end of the course you should have the following knowledge and skills:

  • Ability to systematically design, code, debug, and test programs of about two thousand lines of code.
  • Sensitivity to the issues of programming style and modularity and their relationship to the construction and evolution of robust software.

  • Knowledge of basic ideas and techniques of object-oriented programming.
  • Familiarity with the capabilities and use of programming tools such as syntax-directed editors, debuggers, execution profilers, documentation generators, and revision-control systems.
Communication

Please follow the communication decorum below as strictly as possible for effective and efficient communication with the instructor and the teaching assistants:

  • Do not use any email address for the instructor other than the one provided on his home page.

  • Do not use any email address to communicate with a TA other than the one provided on the ones provided in the course web page.

  • Clearly state the course in your email subject. For example, "CSE 219: homework 3 doubt".

  • Follow announcements carefully.

    • Emails asking for information already available in announcements will not receive a response. 

Regrading Policy
  • All homework and final project grading will be done by appointments.

    • Regrading later, or grading homework assignments by any other means, is not possible. 

  • The mid-term exam papers will be retained by the instructor at first.

    • Any request for regrading must be made during instructor office hours within a 2-week period from the day the grade was provided on Blackboard.

    • Mid-term papers, once returned (which will be done during instructor office hours), will no longer be considered for regrading. 

  • For the final exam, there will be a special office hour designated to resolve any grade queries or disputes. This will be announced after the final exam.

    • The final exam papers are not returned.
Recitations

Students will attend weekly recitations that will introduce use of essential development tools and will require completion of an exercise for submission.

Homework Assignments

Programming assignments will be electronically submitted. Submission instructions will be made available along with the first homework.

  • Uncompilable code will receive no credit. 
  • Late submissions will receive no credit. 
Exams

There will be a mid-term and a final exam. The schedule for exams can be found here.

Reference Books

Traditionally, the following books (available online for SBU students) have been used in this course:

However, there may be additional reference material posted under the lectures and reading materials section.

Grading Scheme
5 Homeworks 25% (5% each)
Final Project 20%
Midterm Exam 25%
Final Exam 25%
Recitation 5%
100%


The final grade you receive in this class will reflect, as far as possible, the extent to which you have mastered the concepts and their applications. How much someone needs a grade, or how close they are to the next higher grade, will have no effect on grade. As the instructor, I want everyone to do well in this course, and will make every reasonable effort to help you understand the material taught. However, the grades provided at the end of the semester are final, except for rare situations involving grading errors. They will not be altered for any reason, so please do not ask me to do so.

CEAS Policy
  • The Pass/No Credit (P/NC) option is not available for this course.

  • Incomplete or un/satisfactory grades cannot be given for this course.


You may discuss the homework in this course with anyone you like, however each student submission, including written material and coding, must be his or her own work, and only his or her own work. Any evidence that written homework submissions or source code have been copied, shared, or transmitted in any way between students (this includes using source code downloaded from the Internet or written by others in previous semesters!) will be regarded as evidence of academic dishonesty. Additionally, any evidence of sharing of information or using unauthorized information during an examination will also be regarded as evidence of academic dishonesty.

Each student must pursue his or her academic goals honestly and be personally accountable for all submitted work. Representing another person's work as your own is always wrong. Faculty are required to report any suspected instances of academic dishonesty to the Academic Judiciary. Faculty in the Health Sciences Center (School of Health Technology & Management, Nursing, Social Welfare, Dental Medicine) and School of Medicine are required to follow their school-specific procedures. For more comprehensive information on academic integrity, including categories of academic dishonesty, please refer to the academic judiciary website at http://www.stonybrook.edu/commcms/academic_integrity/index.html

If you have a physical, psychological, medical or learning disability that may impact your course work, please contact Disability Support Services, ECC (Educational Communications Center) Building, room 128, (631) 632-6748. They will determine with you what accommodations, if any, are necessary and appropriate. All information and documentation is confidential. Students who require assistance during emergency evacuation are encouraged to discuss their needs with their professors and Disability Support Services. For procedures and information go to the following website: http://www.stonybrook.edu/ehs/fire/disabilities

Stony Brook University expects students to respect the rights, privileges, and property of other people. Faculty are required to report to the Office of Judicial Affairs any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students' ability to learn. Faculty in the HSC Schools and the Schoolof Medicine are required to follow their school-specific procedures.

Midterm Exam

Monday, Nov 06
1:00 pm – 2:20 pm
Frey Hall 104


Final Exam

Wednesday, Dec 20
2:30 pm - 5:00 pm (actual exam duration may be shorter)
Frey Hall 104

The complete final exam schedule for Fall 2017, as provided by the Office of the Registrar, can be found here.

Recitations

All recitations for this section will be held in New Computer Science 115. The complete recitation schedule is available here.

Undergraduate Teaching Assistants

Details on your undergraduate teaching assistants, a.k.a. the "homework gurus", are available here.

Office hours will be held in (Old) Computer Science 2203. For a detailed schedule of the office hours held by them, please consult the weekly schedule table.

Graduate Teaching Assistants

Our graduate teaching assistants are Vasily Patov (vpatov@cs.stonybrook.edu) and Wasif Khan (waakhan@cs.stonybrook.edu)

Topic(s) Relevant Reading/Resources
Monday, Aug 28 Introduction Please go through the syllabus carefully.
Friday, Sep 01 Introduction to JavaFX Getting Started with JavaFX (Oracle Documetation)
Friday, Sep 08 Event Handling Tutorial on Event Handling in JavaFX
Monday, Sep 11 UI Controls and Multimedia in JavaFX JavaFX UI Control Overview and the Canvas API
Friday, Sep 15 Inheritance in Java Tutorial on Inheritance
Monday, Sep 18 Type Erasure and Bounded Generics

Erratum:
The second point in the last slide on bounded generics has a mistake. The code below adds the int to a list of any supertypes of int, but not to a list of subtypes of those supertypes. That is, it will not compile if the second formal parameter of the addTo method is, say, List<Double>.

Tutorial on Generic Programming in Java
Friday, Sep 22 A deep dive into OOP concepts in Java
Monday, Sep 25 - ctd -
Friday, Sep 29 Multhreaded Programming - I
Monday, Oct 02 Multhreaded Programming - II Code Examples:
multithreading_examples.zip
Friday, Oct 06 Multhreaded Programming - III Code Examples (read the documentation carefully):
TimerDemo.java
Progression.java
Monday, Oct 09 Software Design and the Unified Modeling Language (UML)
Friday, Oct 13 Creational Design Patterns
Monday, Oct 16 Behavioral Design Patterns
Friday, Oct 20 - ctd -
Monday, Oct 23 Test-driven Development
Friday, Oct 27 - ctd -
Monday, Oct 30 practice mid-term
Friday, Nov 3 Designing with Exceptions
Monday, Nov 6 mid-term exam
Friday, Nov 10 Annotations
Structural Design Patterns - I
Monday, Nov 13 Binary IO in Java
Friday, Nov 17 Structural Design Patterns - II
Monday, Nov 20 Reflection - I
Reflection - II
Java Reflection Tutorial
Monday, Nov 27 Functional Programming in Java - I Code Examples:
FunctionalProgrammingExamples.java
Friday, Dec 1 Functional Programming in Java - II
Monday, Dec 4 Practice questions on Reflection (Q&A in class) Code Examples:
ReflectionExamples.java
HackingSingleton.java
Friday, Dec 8 Final Review

All homework must be submitted on Blackboard, and graded by appointments.

Submission Deadline
Homework 1 Friday, September 22, at 11:59 PM HW1 Grading Criteria
Homework 2 Friday, October 13, at 11:59 PM HW2 Grading Criteria
Homework 3 Monday, October 30, at 11:59 PM HW3 Grading Criteria
Homework 4 Monday, November 13, at 11:59 PM HW4 Grading Criteria
Homework 5 Monday, November 27, at 11:59 pm HW5 Grading Criteria
Homework 6 [Final Project] Friday, December 8, at 11:59 pm