On this page:
Computer Science III:   Software Design and Implementation (Spring 2015)
1 Introduction
2 Lectures
3 Assignments
4 Turn-In and Grading
4.1 Github
4.2 Turn-in
4.3 Assignment Scores
4.4 Participation Points
4.5 Numeric Grade
4.6 Letter Grade
5 Help
6 Readings
7 Software
8 Fine Print

Computer Science III: Software Design and Implementation (Spring 2015)

This class is taught by Jay McCarthy. Call him Jay. Email him at jomccarthy AT vassar DOT edu.

We meet in SP309 at 13:30-14:45 MWF.

Jay McCarthy’s office hours are 1pm-4:30pm M-F (except when teaching) in SP104.4.

The coach will be available from on Tuesday from 12 to 4 and Wednesday from 1:15 to 5 in the lounge. (These times may change.)

There is a mailing list hosted at Google Groups. Use it to ask non-revealing questions and receive answers, as well as general course announcements. You are responsible for reading the content of this mailing list.

1 Introduction

Develops techniques for design and implementation of complex software systems. Topics include object-oriented modeling, design patterns, component libraries, inheritance, parametric polymorphism, generic algorithms, containers, iterators, function objects and storage management. Development of a software system of significant complexity is required. A weekly laboratory period provides guided hands-on experience.

There is more information in the commercial.

2 Lectures

 

Day

 

Date

 

Topic

 

Links

 

Notes

 

1

 

01/28

 

Ch 1: Introduction

 

code screen

 

*

 

2

 

01/30

 

Lab: Github, Testing, Property-based Testing

 

code

 

 

3

 

02/02

 

Ch 2: Understanding Objects in Java

 

code screen

 

 

4

 

02/04

 

Ch 3: Procedural Abstraction

 

code

 

 

5

 

02/06

 

Lab: Working on data1

 

 

*

 

6

 

02/09

 

Ch 3: Procedural Abstraction

 

 

*

 

7

 

02/11

 

Ch 3: Procedural Abstraction

 

code screen

 

*

 

8

 

02/13

 

Lab: Game1 Preview, Properties and Errors

 

 

*

 

9

 

02/16

 

Ch 4: Exceptions

 

 

*

 

10

 

02/18

 

Ch 4: Exceptions

 

 

*

 

11

 

02/20

 

Lab: Working on game1

 

 

*

 

12

 

02/23

 

Ch 5: Data Abstraction

 

 

*

 

13

 

02/25

 

Ch 5: Data Abstraction

 

 

*

 

14

 

02/27

 

Lab: Working on game1

 

 

*

 

15

 

03/02

 

Ch 6: Iteration Abstraction

 

 

 

16

 

03/04

 

Ch 6: Iteration Abstraction

 

 

*

 

17

 

03/06

 

Lab: Working on game1

 

 

 

18

 

03/09

 

Ch 6: Iteration Abstraction

 

 

*

 

19

 

03/11

 

Ch 6: Iteration Abstraction

 

 

 

20

 

03/13

 

Lab: Showing off game1

 

 

 

21

 

03/30

 

Bonus: Hash Tables

 

 

 

22

 

04/01

 

Bonus: Self-Balancing Binary Trees

 

code

 

 

23

 

04/03

 

Lab: Working on data2

 

 

 

24

 

04/06

 

Ch 7: Type Hierarchy

 

 

 

25

 

04/08

 

Ch 7: Type Hierarchy

 

 

 

26

 

04/10

 

Lab: Working on data2

 

 

 

27

 

04/13

 

Ch 8: Polymorphic Abstraction & Ch 9: Specifications

 

 

 

28

 

04/15

 

Ch 10: Testing and Debugging

 

 

 

29

 

04/17

 

Lab: Working on game2

 

 

 

30

 

04/20

 

Ch 15: Design Patterns

 

 

 

31

 

04/22

 

Ch 15: Design Patterns

 

 

 

32

 

04/24

 

Lab: Working on game2

 

 

 

33

 

04/27

 

Bonus: Program Correctness

 

code

 

 

34

 

04/29

 

Bonus: Concurrency and Parallelism

 

 

 

35

 

05/01

 

Lab: Working on game2

 

code

 

 

36

 

05/04

 

Intro to C/C++/ObjC

 

 

 

37

 

05/06

 

Memory in C

 

 

 

38

 

05/08

 

Lab: Working on game2

 

 

 

39

 

05/11

 

Garbage Collection

 

 

 

40

 

05/18

 

Final @ 1pm in Your Dorm

 

 

Jay will not be present on days marked with a * in the Notes column.

This schedule is likely to change.

3 Assignments

 

Assignment

 

Code

 

Out

 

Due

 

Finite Sets

 

data1

 

01/28

 

02/13

 

Moving Blocks

 

game1

 

02/13

 

03/13

 

Polymorphic Finite Bags

 

data2

 

03/09

 

04/10

 

Adventure!

 

game2

 

04/06

 

05/11

 

Final

 

final

 

 

 

05/18

Out dates are suggestions—you may need to start earlier.

This schedule may change.

4 Turn-In and Grading

I highly recommend that you read this article about grading. I also recommend you read this article about the stress that you may experience in a computer science program. Please try to make healthy productive choices in your life. I would love the opportunity to help you in any ways I can.

4.1 Github

You should do all your work for the course in public Github repositories. When you create them (named after the code in the assignment table), you should email the course list so that others, including me, can subscribe and follow your progress. You should commit and push often.

4.2 Turn-in

You should email your assignments to me before 6PM Poughkeepsie time on the due date listed. If you send an assignment late (even by a single second), it will not be graded. This is a real due date and due time. Please use this early due time to get a good night’s sleep and enjoy your evenings.

Your email should have [CS203] code as the subject, where code is the code listed on the assignment table. Do not send multiple emails, if you do, I’ll count the oldest one.

Your email should contain one Zip file with your code and data files inside it, such that they extract to a directory with the same name as the code of the assignment. Any non-code documents should be submitted as a PDF and should not be in the Zip (so that I can just look at them in my browser and download the Zip separately.) I recommend producing PDFs with LaTeX.

4.3 Assignment Scores

Each assignment’s page describes how it will be graded. All assignments will receive a grade from the closed interval between 0 and 1.

4.4 Participation Points

One of the goals for the course is to create and participate in a community of programmers. I will try to incentivize the creation of this community by tying participation in it to your grade.

Each student can get 20 possible participation points.

Participation points will be given for presenting your work during lab time. Typically one point will be given, but maybe two will.

Participation points will also be given when another student reports to me that you have given them useful, constructive feedback on their code. You should be reading each other’s commits and making useful comments.

4.5 Numeric Grade

I will take your various points and combine them with this function to get a numeric grade:

> (define (combine pp data1 game1 data2 game2 final)
    (+ (* 0.2 (/ pp 20))
       (* 0.1 data1)
       (* 0.2 game1)
       (* 0.3 data2)
       (* 0.3 game2)
       (* 0.1 final)))

Examples:

> (combine  0 0.0 0.0 0.0 0.0 0.0)

0.0

> (combine 10 0.5 0.5 0.5 0.5 0.5)

0.6000000000000001

> (combine 20 0.0 0.8 1.0 1.0 1.0)

1.06

> (combine 20 1.0 1.0 1.0 1.0 1.0)

1.2000000000000002

A few things to notice about this function: Your final score can be more than 1, which means you can consider pieces of various assignments as extra credit. The first assignments are weighted significantly less than the later ones, so you can get used to how things are graded in the class. Finally, I am committed to faithfully removing my whims from this scoring function, so you can count it. This means, for instance, if you don’t need to do the final to get the score you want, then feel free to skip it.

4.6 Letter Grade

I will then run the following function to convert it to a letter:
> (define (convert-to-letter ng)
    (cond
      [(> ng 0.93) "A"]
      [(> ng 0.9) "A-"]
      [(> ng 0.86) "B+"]
      [(> ng 0.83) "B"]
      [(> ng 0.8) "B-"]
      [(> ng 0.76) "C+"]
      [(> ng 0.73) "C"]
      [(> ng 0.7) "C-"]
      [(> ng 0.66) "D+"]
      [(> ng 0.6) "D"]
      [else "F"]))

Examples:

> (convert-to-letter 1)

"A"

> (convert-to-letter 0.94)

"A"

> (convert-to-letter 0.899999)

"B+"

> (convert-to-letter 0.81)

"B-"

> (convert-to-letter 0.74)

"C"

> (convert-to-letter 0.6999999)

"D+"

> (convert-to-letter 0.62)

"D"

> (convert-to-letter 0.57)

"F"

5 Help

My job is to help you.

If you need a "shallow" amount of help, then look at the Google Group. First, see if I have already answered your question. Then, send your own email.

Only send me personal email if you need to talk about something private, such as your grades. Anything else is best discussed in public, so others can benefit. If you do send personal email, put [CS203] as a prefix in the subject.

If you need a "deep" amount of help, please come to my office or call me (801-361-0732) and we’ll talk and try to resolve whatever ails you.

6 Readings

We’ll be using the book Program Development in Java: Abstraction, Specification, and Object-Oriented Design by Barbara Liskov with John Guttag.

As a programmer, you should find a language reference you like to keep handy. I like mine to be electronic and I find the tutorialspoint guide pretty nice for Java. Java Precisely is good too.

Another good book to look at is Effective Java by Joshua Bloch. I am likely to cite it and highly recommend you check it out if you intend to write lots of Java in your life.

7 Software

We’ll use Java for writing software in this course. Feel free to use whatever IDE setup you’d like. I highly recommend you use a different IDE than you have used before in Java, so that you have the opportunity to learn something new. I like to use Emacs and the command-line for everything. I’ve heard very good things about Netbeans. Eclipse is a huge beast that is very popular, as well. Finally, I’d like you to do all your work on Github, so make sure you get yourself set up with that.

I have precompiled the libraries that you may want to use during the game assignments into JARs:

8 Fine Print

I support and implement all the general policies of Vassar, including but not limited to those related to students with disabilities, plagiarism, and respectful classroom etiquette. I expect you to always attend class. We’ll have an administration-scheduled final. And, from the administration:

"Academic accommodations are available for students registered with the Office for Accessibility and Educational Opportunity (AEO). Students in need of disability (ADA/504) accommodations should schedule an appointment with me early in the semester to discuss any accommodations for this course that have been approved by the Office for Accessibility and Educational Opportunity, as indicated in your AEO accommodation letter."