CS222: Advanced Programming, Section 1, Spring 2015

Course Information

Course Title
Advanced Programming
Section
CS222 Section 1
Meetings
MWF 8:00–8:50 AM in RB104
Credits
3
Instructor
Paul Gestwicki, Ph.D.

Overview

The course catalog provides this short description of the course:

Project-intensive study of advanced topics and best practices in software development, including advanced language features, modular decomposition, and development tools.

This semester, our inquiry will be guided by the following essential questions of advanced programming:

  1. What does it mean to practice the craft of software development?
  2. How do you know when a feature is done?
  3. How do small teams of developers coordinate activity?
  4. How does a software developer use ubiquitous and chaotic information to be a lifetime learner?

Note that, because this is a three-credit course, you should expect to invest nine hours of attention to it per week.

Books

Technology

We will be using Google Drive to manage and share information. You will need a Google Account; configuring 2-step verification is strongly recommended. Details on accessing this section's shared drive will be given on Blackboard.

Each student is expected to bring a laptop computer to class that is configured for software development. Configuration should be completed within the first first 48 hours of the semester; be ready to develop in class by our second meeting. This configuration minimally includes:

Mercurial Configuration

Mercurial is a distributed version control system that we will use throughout the semester, both for me to share my code with you and for you to share code with each other. There is also an excellent tutorial on what Mercurial is and how it works at HgInit.com.

You can install MercurialEclipse through the Eclipse Marketplace: launch Eclipse, open the Help menu, open the marketplace, and search for "mercurial". In order for the MercurialEclipse Plug-in to work, you will need to install the Mercurial binaries for your operating system. On Microsoft Windows, these can be downloaded during the plug-in installation process; users of other operating systems will need to install binaries manually. Note that you will not need the CodeBeamer component of the plug-in.

You will need to create and edit a Mercurial configuration file that specifies your BSU username. Refer to the first step of the Mercurial QuickStart for instructions. Note that the Eclipse configuration sometimes gets confused and uses the wrong information; always doublecheck that your username is properly formatted before committing.

Should you encounter difficulties with your system configuration, I recommend that you post on the General Discussion forum on the course Blackboard page or contact the friendly neighborhood system administrator.

Schedule

The following table gives an overview of the planned semester activity. The week numbers are approximate; see the detailed schedule for exact dates.

WeekActivity
1 Assignment 1
2 Assignment 2
3 Assignment 3
4–5 Two-week project
6 Final project preparation
7–9 Final project, iteration 1
10–12 Final project, iteration 2
13–15 Final project, iteration 3
16 Final exam

We will have our last meeting during our final exam period as assigned by the university.

Assignments

The details of the assignments are given on the assignments page.

Two-Week Project

TBA

Date Event
January 26 Form pairs
February 6 Project due at 8AM; Project showcase in class

Final Project

The details of the final project are given on the final project page.

Date Event
February 9 Form teams and workshop pitches
February 11 Pitch your projects
February 13 Start first iteration; repeat pitch as necessary
March 11 First iteration deadline; start second iteration
March 11–13 Iteration 1 presentations
April 1 Second iteration deadline; start third iteration
April 1–3 Iteration 2 presentations
April 24 Third iteration deadline
April 24–27 Iteration 3 presentations

Achievements

After the third week of the semester, you will have the opportunity to earn achievements, one per week (counting the week as ending on Sunday). All achievement artifacts will be posted to our shared folder on Google Drive so that the rest of the learning community can benefit from them.

I will review your achievement claim. If I agree that all the criteria have been satisfied, then I will approve your claim; if I disagree, I will reject it. Either way, this will be made explicit in a comment in the document. You may resubmit one revised achievement claim per week. Note that collaborative achievements will be held to higher standards.

Achievements are earned by individuals, although multiple people may submit a claim based on a shared experience. You are encouraged to read and discuss each others' claims, which is one of the reasons they will all be placed in the shared folder.

Note that when an achievement refers to a "project", this can be either your two-week project or your final project.

The final day to claim new achievements is Sunday, April 26. The final day to revise an achievement claim is Monday, April 27, which counts as a separate week.

Making a claim

To claim an achievement, check the shared folder for a document with the corresponding name. If one does not exist, create it in the shared folder. Begin your entry by typing your name, formatting this line as Heading 1. Once your entry is complete, set a bookmark on this line by going to the “Insert” menu and selecting “Bookmark;” this will allow you to link directly to your entry. Place the achievement artifacts under this heading, using the Normal text style. Finally, submit your achievement for evaluation using the form linked on Blackboard.

You are expected to follow best practices of college-level writing, including consideration for content and form. Following standard typographic conventions, ensure that source code is properly formatted and presented in a fixed-width typeface such as Consolas. We're writing in a digital format, so be sure to use hyperlinks, pictures, and other media when they are appropriate to your message.

An etymological note

Several achievements require the writing of an “essay.” I use this term in the classical sense, to describe a composition that represents an attempt to understand a complex idea. An essay is neither a summary nor a staid five-paragraph construction. As the course prerequisite implies, these essays should represent collegiate-level writing. You are welcome to leverage the digital writing environment to compose multimodal pieces.

List of Achievements

Advice Seeker
For incorporating perspectives of the experienced
Advice
Conduct a timeboxed code and/or design review with a software expert (your instructor, for example). Describe the process and key findings, and demonstrate how this feedback was incorporated into the project.
Build Scripter
For controlling your builds
Build
Incorporate a build scripting language (such as Apache Ant or Gradle) into your project. Post your scripts and describe what they do and how they were developed.
Capstone Connector
For investigating the senior capstone
Capstone
Interview a Ball State University Computer Science capstone team about their project. Write an essay describing the project, its client, and the tools and techniques used by the team.
Clean Classes
For clean classes
Clean
For each class in your project code, compute its cohesion and state its responsibility with respect to SRP. Write a reflection on any changes you made to your system as a result of this exercise.
Clean Coder
For refactoring toward cleanliness
Clean
Document how you refactored a portion of your project toward the rules of Clean Code. Show the portion of the project before and after refactoring, and state which aspect of Clean Code you were focusing on.
Community Connector
For engaging with alumni
Community
Interview a Ball State University Computer Science alumnus about the essential questions of our class. Write an essay about the experience.
Contributor
For adding value where there already was some
Contributor
Make your project as an enhancement to an existing open source project. Submit your changes to the project maintainer, and write an essay reflecting on the experience.
Crystallizer
For being principled about agile software development
Crystallizer
Read 7 Properties of Highly Successful Projects from Crystal Clear with your team before an iteration. Document how you will abide by these principles during the upcoming iteration. At the end of the iteration, write an essay reflecting on the experience.
Data Revolutionary
For using public data
Data
Incorporate a public data source into your final project. Describe the experience, including how the data are accessed and the terms under which it is being used, using examples from your project.
Decaf Cleaner
For applying Clean Code without Java
Decaf
Refactor project code—written in a language other than Java—to follow Clean Code standards. Write a brief essay on the relationship between Clean Code and programming language design, drawing upon your experience for specific examples. (For a holistic experience, complete this achievement without coffee, tea, soda, or energy drinks.)
Didact
For sharing discoveries with the community
Didact
Give a five- to ten-minute presentation to the class to explain something you have learned this semester that is outside the required work. The topic and schedule must be approved by the instructor ahead of time. The claim for this achievement need only indicate the presentation date and topic.
Double-Jumper
For using a new platform
Double-Jumper
Implement your final project using a platform besides Java SE, such as Android, iOS, or GWT. Document the process, including notes on how you learned the new platform.
Dynamic Modeler
For documenting the behavior of a system
Dynamic
Use a UML communication or sequence diagram to document a critical interaction within production code. Post the diagram and a brief description.
Fluent
For making programs read like natural language
Fluent
Design a fluent API within your project. Describe some representative and critical uses of this API.
Hierarchical
For parsing structured data
Hierarchical
Incorporate an XML, YAML, or JSON data source into your project. Describe what parser you chose, your data source, and how you parsed the data, using examples from your project.
Legit
For working with a client
Legit
Develop your final project in consultation with a real client. Your client must send a memo to the instructor indicating his or her willingness to serve as a client. Your client must approve your pitch, and you must meet with the client after each iteration. Document the process and results. This achievement may only be claimed in the last week of the semester.
Maven
For managing your dependencies
Maven
Use Apache Maven to manage your project dependencies. Document the process and share your configuration files.
Paper Prototyper
For mitigating design defects in the cheapest and easiest way you can
Paper
Identify a question about your project's interface design. Develop three different physical prototypes—representing three disparate approaches—and evaluate them with representative end users. Share these prototypes along with documentation of the process and results; be sure to describe the consequences.
Parallel
For leveraging modern hardware
Parallel
Incorporate parallel or distributed processing into your project. Document the process and results, including rudimentary empirical performance analysis.
Pattern Disciple: Builder
For decoupling object construction from other responsibilities
Pattern
Incorporate the builder design pattern into your project. Describe and justify the pattern's reification.
Pattern Disciple: Observer
For decoupling change dependencies
Pattern
Incorporate the observer design pattern into your project. Describe and justify the pattern's reification.
Pattern Disciple: Strategy
For decoupling algorithm specifications from their implementations
Pattern
Incorporate the strategy design pattern into your project. Describe and justify the pattern's reification.
Public Releaser
For doing it in public
Public
Publicly release your final project through a recognized application portal such as the Android Market or the App Store. Document the process.
Reflective Practitioner
For learning from failure
Reflective
Consider one of your failures from this course and write a postmortem about it. Use the format described by Fitzpatrick and Collins-Sussman, explicitly labeling each step. Note that a postmortem only makes sense to write when the issue has been completely resolved, not while a resolution is in progress.
Seeker
For learning from the community of practice
Seeker
Attend a Computer Science Department Colloquium or other approved presentation, seminar, or conference. Write an essay in which you share your experience and tie it into one or more of our course's essential questions.
Static Modeler
For documenting the structure of a system
Static
Use a UML class diagram to document a critical part of your project. Post this diagram and a brief description. Note that the diagram needs to express a coherent message: it should simply be a reverse-engineered blueprint of an implementation.
Studious
For reflecting on what "studying"means
Studious
Read Bill Rapaport's How to Study: A Brief Guide and then write a study plan for this course, including a grade goal and assessment plan. Must be completed before the course withdraw deadline.
Third-Party Librarian
For being pragmatic about features
Third-Party
Meaningfully incorporate a third-party library into your final project. Describe the library you are using, why you chose it, and how it is used, using examples from your project.

Grading

First, a bit of philosophy. I grade almost everything according to my triage grading approach. Briefly, each item is graded as incorrect, partially correct, or correct. These correspond to D, C, and A grades, respectively. If you get some things right and some things wrong, you should expect to get a C; that's how I interpret "average." If you want to get a grade corresponding to "very good" or "excellent", you will need to get things right much more often than not.

Your final grade in the course is determined by your final project grade, and this grade is capped based on your class participation. The grade-capping rules are listed below, in priority order.

Attendance and Related Policies

Your learning is commensurate to your participation, and so attendance is expected. You are responsible for your learning regardless of attendance. If you miss a class meeting, you should consult with trusted classmates to ensure you have the appropriate notes. I will not repeat myself unnecessarily over email, during office hours, or by appointment.

Meetings begin at the time scheduled, and you are expected to be ready to begin at this time; late admittance is prohibited.

Communication

Office Hours and Appointments

Students who come to office hours are helped on a first-come, first-served basis; no appointment or prior contact is required. If a student wishes to make an appointment to meet outside of office hours, he or she should email the instructor the request along with several possible meeting times.

Note that during the second half of the semester, I tend to hold a lot of meetings in the lab. I usually remember to put a note on my door to this effect, but if I don't, you can look for me there.

Email

All email communication to the instructor should be from a BSU-affiliated address. This policy ensures that senders can be correctly identified and protects your privacy. Email sent from other domains may not be answered.

The instructor may access email through services not affiliated with the University. Please note that such messages necessarily pass through the campus firewall in an unencrypted format, and they may be stored on servers not owned or managed by Ball State University. It is therefore advisable to restrict confidential information to office hours or appointments.

If you are emailing regarding questions in a computer program, it is recommended that you send a copy of the code in question in your email. The preferred method is to copy the code into the body of your message, using plain text and following standard formatting conventions. Alternatively, if the code is in a publicly-readable repository, email the URL.

Telephone

Although my office telephone number is listed on my Web site, email and face-to-face communication are strongly preferred. I will respond to every student email I receive; I will likely not respond to telephone messages.

Miscellany

Academic Integrity

Students and faculty are bound by the Student Academic Ethics Policy of the Code of Student Rights and Responsibilities.

Intellectual Property

It behooves you to be aware of fundamentals of copyright law and the university's intellectual property policies for student-created work.

File Formats

When file submission is necessary outside of Google Drive, all files must be submitted in open file formats. Good examples include HTML, PDF, OpenDocument, and my personal favorite, plain text. Note that Microsoft Office and Adobe Creative Suite formats do not qualify.

The Writing Center

Want extra feedback on your papers? The Writing Center is a community of Ball State students and faculty who value writing. Come and collaborate with one of our trained peer tutors on any project for any major. The Writing Center is a comfortable, supportive environment for writers from all communities and backgrounds. It is located in Robert Bell 291. To make an appointment, go to http://ballstate.mywconline.com.

Notice for Students with Disabilities

If you need course adaptations or accomodations because of a disability, please contact the instructor as soon as possible. Ball State's Disability Services office coordinates services for student with disabilities; documentation of a disability needs to be on file in that office before any accomodations can be provided. Disability Services can be contacted at 765-285-5293 or dsd@bsu.edu.