Overview
- Course Title
- Advanced Programming
- Section
- 1
- Prerequisites
- CS121 and CS124
- Meetings
- Tuesday and Thursday, 9:30–10:45AM
- Instructor
- Paul Gestwicki, Ph.D.
- Office Hours
- See instructor Web site
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, we will explore contemporary practices of professional software development. CS121 and CS124 helped you learn fundamentals, and this course builds on those to help you learn the craft of software development. You will learn more about how to deal with ambiguity, how to work on a team, and how to be a lifetime learner. These skills will be valuable as you continue your studies of Computer Science, which is why this course serves as a prerequisite to many upper-level programming-intensive courses.
Our inquiry will be guided by the following essential questions of advanced programming:
- What is software craftsmanship?
- How do you know when a feature is done?
- How do small teams of developers coordinate activity?
- How does a software developer use ubiquitous and chaotic information to be a lifetime learner?
These will guide us toward meeting the course learning objectives:
- Explain, justify, and follow heuristics of code quality, including: coding standards and style documents; refactoring as a technique for improving code quality; clear naming and language-specific naming conventions; using abstraction and decomposition to eliminate redundancy; prudent use of comments and version control commit messages
- Demonstrate and justify software development practices that incorporate the compiler, debugger, version control, and testing features of a modern integrated development environment
- Apply code review techniques to identify design and implementation defects
- Create and analyze software following conventions of object-orientation, including the Single Responsibility Principle and model-view separation
- Apply user-centered philosophy to design simple graphical user interfaces, justify usability considerations, and implement the user-interface in a high-level programming language.
- Plan, manage, present, and evaluate multi-week programming projects created by small teams using an incremental and iterative approach
- Demonstrate reflective practice for professional improvement
Note that, because this is a three credit-hour course, you should expect to invest nine hours of attention to it per week.
Resources
Books
Robert C. Martin's Clean Code: A Handbook of Agile Software Craftsmanship is required for this course.
Technology
This is an Edupunk class: we will be using the best tools for the job, recognizing that learning these tools is also part of your education. You will almost certainly encounter something new that will challenge you—and occasionally frustrate you!—but by working through this, you will gain valuable knowledge and skills.
This course is part of the university's Canvas pilot, although we will use
As specified in the undergraduate catalog, students in Computer Science majors courses at the 200-level and above are expected to have a laptop computer for class. You are expected to complete the following installation and configuration steps before our second meeting of the semester.
You are expected to process your email at least daily.
Software
We will use Java for in-class demonstrations and activities. Download the latest Java SE Developer Kit (JDK) that is appropriate for your operating system and architecture. Take note of the installation location; you will need it in a moment.
We will use IntelliJ IDEA Community Edition as our integrated development environment (IDE) of choice. Download and install “IntelliJ IDEA Community Edition” from jetbrains.com/idea. Choosing the default options during installation should be fine. However, you will need to manually associate your JDK installation with IDEA. I recommend starting IDEA and choosing to create a new Java project. Next to the “Project SDK” combo box, select New...
and navigate to the JDK installation location you noted earlier. This should be all you need to do basic Java development for CS222.
For version control, we will be using git, and although the IntelliJ IDEA integrations are good, I do find it useful to occasionally drop to the command line. Install git according to the installation documentation; for Windows, I recommend the git for Windows project mentioned therein.
Accounts
You will need to sign up for a Google Account, if you don't have one already. Configuring two-step verification on your Google Account is so strongly recommended it may as well be required.
You will need to sign up for a GitHub account if you don't already have one. As always, remember to use strong and unique passwords for different Web services. As a student, you should also request the Student Developer Pack, which gets you limited no-cost private repositories and access to some powerful tools.
Once you have your Google and GitHub accounts, complete the form linked on
Schedule
The semester will be divided into three sections. For the first three weeks, we will explore new ideas and technologies while you individually complete a series of assignments. After this, you will work in pairs on a two-week project, which will provide an opportunity to bring these new ideas to practice. The majority of the semester will be spent on your final project, which will be completed by small teams in three iterations. This project will be your most important artifact this semester, representing all that you have learned so far as a Computer Science student. Note that Occasional assignments may be made during the project portion in order to help keep everyone on track.
Each week, you may do one of the following for course credit. The deadlines are measured from the beginning of class at the first meeting of the week.
- Resubmit a revised assignment, following the steps articulated on the assignments page.
- Claim an achievement, following the steps articulated on the achievements page
You may wish to keep in mind that the last day to withdraw with an automatic W is October 25, although it is strongly recommended to consult with the instructor if you are considering withdrawing. Some past students have panicked and misinterpreted my grading scheme (see below), which can lead to inaccurate self-assessments.
The final exam will be given as scheduled by the university.
Grading
First, a bit of philosophy. I grade almost everything according to my triage grading approach. Briefly, each item is graded on a three-point scale of incorrect (1/3), partially correct (2/3), or correct (3/3). 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 will be computed as a weighted average, using the weights given below. Assignments are evenly weighted, and Up to four achievements can be counted for course credit. Your project score is a composite of the Two-Week Project (20%) and the Final Project (80%); however, if your Final Project score is higher than your Two-Week Project score, the Two-Week Project score will be dropped.
- Assignments: 25%
- Achievements: 10%
- Projects: 60%
- Final Exam: 5%
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
My office hours are listed on my Web site. 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.
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 plain text. Note that Microsoft Office and Adobe Creative Suite formats do not qualify.
Essays
Some assignments and 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 needs to have a point—a theme, a thesis, a central question. This should be supported by evidence, with assumptions identified and claims justified or cited. As implied by this course's prerequisites, our essays should represent college-level writing.
An essay, properly written, should hurt a bit. If you are truly writing to understand, then you have to be challenging yourself. If you are only summarizing something you have read or previously believed, it is not an “essay” by our definition.
Writing in this way has implications for structure and form. One long rambling paragraph cannot be an essay: each paragraph should have a clear and coherent theme that supports the central argument, and you need more than one of these to support an argument worth forwarding. The fact that we are writing in a digital environment should not be overlooked: you can include images, video, sound, and hyperlinks, following the same judgement you would use to include any formal element. Even typefaces, colors, and margins are part of a digital composition. These have meaning, and because of that, you should not change them unless you are proficient in digital document design: the defaults are provided because of their generality, and they are likely appropriate for your compositions.
The Elements of Style provides an excellent refresher on how to produce good, clear writing. It is a short, affordable book in its latest release, and the earliest printings are in the public domain (see archive.org, for example).
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.
General Academic Success
One of my favorite guides for academic success in college is William Rapaport's “How to Study: A Brief Guide”. Note that there is an achievement for reading and reflecting on this guide!
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.
Statement on Diversity
Ball State University aspires to be a university that attracts and retains a diverse faculty, staff, and student body. We are committed to ensuring that all members of the community are welcome, through valuing the various experiences and worldviews represented at Ball State and among those we serve. We promote a culture of respect and civil discourse as expressed in our Beneficence Pledge and through university resources found at http://cms.bsu.edu/campuslife/multiculturalcenter.