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.

Prerequisites and Expectations

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.