COS 470 The Art and Craft of Software Development
This class is aimed at students who want to become more effective and more productive programmers. This class is about programming as a craft. It steps beyond knowledge of principles, patterns, and tools and into what makes code good (or bad). Students will discuss and examine code that is readable, maintainable, and effective and how it got that way. They will put these ideas into practice using clean and pragmatic coding methods. They will learn and use tools for modern source code control, development, and delivery along the way.
Instructor
Stephen Houser houser@maine.edu
Course Objectives
The objectives of the course are as follows.
- To be a better programmer.
 - Recognize good and bad code.
 - Practice making bad code into good code.
 
Prerequisites and Expectations
- COS 285 or Permission of the Instructor
 
This course will involve frequent code-reading and code-rewriting inside and outside of scheduled class time. There will be a fair bit of self-directed work and decisions you will need to make and a fair bit of research and searching you will need to do in finding code examples.
You will be expected to be prepared for and participate in in-class discussion about code practices. You will need to read, understand, and be prepared to discuss the relevant textbook and other material at each in-class session.
Be prepared to work across platforms and with multiple (new to you) languages. There will be a fair amount of moving from one technology to another throughout the course and perhaps within a single project.
Textbook
Required: Clean Code : A Handbook of Agile Software Craftsmanship by Robert C. Martin. We will work directly from this book through the semester.
Suggested: The Pragmatic Programmer: Your Journey To Mastery by David Thomas and Andrew Hunt. This book may be referenced through the semester but we will have no assigned readings or work from it.
Other: We will also be using articles and other materials freely available on the Internet throughout the course. Links will be provided on the course website.
Assignments
There will be six (6) required assignments through the course. Their point value is shown below. These are code-refinement assignments where you are requred to re-write code to demonstrate the clean code practices covered in class and explain (in writing) the changes and how they accomplish the clean-code guidelines.
| # | Assignment | Possible Points | 
|---|---|---|
| 1 | Names and Functions | 10 | 
| 2 | Comments and Formatting | 10 | 
| 3 | Objects | 10 | 
| 4 | Successive Refinement | 10 | 
| 5 | Smells and Heuristics | 10 | 
| 6 | Student Choice | 25 | 
Your work should be your own! The Internet is full of helpful material and the work of others. Feel free to use outside sources as reference for doing your work, but simply copy and pasting is plagiarism. Plagiarism is a serious offence and will be treated accordingly.
Assignment Grading Rubric
| Score | Notes | 
|---|---|
| 9-10 | Met all assignment requirements | 
| 8-7 | Met most assignment requirements | 
| 6-5 | Met some of the assignment expectations. | 
| 3-4 | Met few of the assignment requirements. | 
| 0-2 | Did not complete the assignment or submission was empty | 
Participation and Discussion
Each week’s class session will be a discussion of the current week’s topic. Participation in the dicussion (and the session) is a required part of the course. We will use a variety of discussion formats; instructor-led, student-led, small groups, and individual reflection. Your participation will be assesed on your engagement and preparedness for these sessions over the entire course.
NOTE: You may be called on at any time during the class session to present your thoughts on a subject or topic. Be prepared!
Participation Grading Rubric
| Score | Notes | 
|---|---|
| 23 - 25 | Always prepared, attended all classes, contributes often | 
| 20 - 22 | Mostly prepared, attended most classes, contributes sometimes | 
| 14 - 19 | Sometimes prepared, attended some classes, contributed | 
| 11 - 13 | often unprepared, often misses classes, does not contribute | 
| 0 - 10 | unprepared, often misses classes, does not contribute | 
Examinations
None.
Schedule
The following is the schedule for the course. Topic coverage and due dates may change based on progress, snow-days, holidays, and other events.
| Week | Topic | Notes/Reading | 
|---|---|---|
| 1 | Introduction | Ch. 1 | 
| 2 | Names and Editors | Ch. 2 | 
| 3 | Functions and Licenses | Ch. 3 | 
| 4 | Comments and Source Code Control | Ch. 4 | 
| 5 | Formatting and Microservices | Ch. 5 | 
| 6 | Objects and Data Structures | Ch. 6 | 
| 7 | Error Handling and Boundaries | Ch. 7-8 | 
| 8 | Classes and Cloud Development | Ch. 10 | 
| 9 | Systems and Codes of Conduct | Ch. 11 | 
| 10 | Emergence and Concurrency | Ch. 12-13 | 
| 11 | Successive Refinement and Documentation | Ch. 14 | 
| 12 | Smells and Heruistics and CI/CD | Ch. 17 | 
| 13 | TBD | |
| 14 | TBD | |
| 15 | Final Exam Session (none) | 
Grades
Grades for the course will be based on an simple accumulation of points from the projects and in-class participation/discussion
| Points | Item(s) | 
| 50 | Assignments #1 - #5 (10pts each) | 
| 25 | Assignment #6 | 
| 25 | In-class participation | 
Schedule of Point Accumulation for Final Grade:
| Points | Grade | 
|---|---|
| 90 - 100 | A | 
| 80 - 89 | B | 
| 60 - 79 | C | 
| 50 - 59 | D | 
| 0 - 49 | F | 
Late Policy
Extensions on assignments, presentations, and examinations will not be granted except in the case of an emergency. Technical difficulties do not constitute an emergency. Late submissions will be penalized. Lateness will be determined by submission time and the assigned due date.
Accommodations and Inclement Weather
Should you need services or accommodations due to a disability to fully participate in the class, please speak with the instructor or contact the Office of Academic Support for Students With Disabilities, Luther Bonney 242 on the Portland Campus.
Class cancellations are posted on USM’s website http://usm.maine.edu and on the Storm Line at 780-4800. You can also receive cancellations and emergency information from the USM Alert text messaging system http://usm.maine.edu/usmalert.