Friday final test

31
Software Craftsmanship The Fifth Agile Value Rik Dryfoos February 17, 2010 (802) 778-0877 [email protected]

description

This is a final test for this sunny day.

Transcript of Friday final test

Page 1: Friday final test

Software CraftsmanshipThe Fifth Agile Value

Rik DryfoosFebruary 17, 2010

(802) [email protected]

Page 2: Friday final test

• Introduction

• The Costs of Delivery -vs- Ownership

• What is Craftsmanship?

• A Manifesto for Software Craftsmanship

• Problems with Top Down Dictates

• Working Environment

• The McBreen Model

• A Role for vtSDA

• School Curriculum

Software Craftsmanship

Page 3: Friday final test

Introduction

• Field trip

• Master of the obvious

• Goal today is to spark dialog

Page 4: Friday final test

Introduction

• We have all seen or heard of cost and time overrun due to “spaghetti code” or systems that become too complex to maintain and update

• Is a mess inevitable? - If yes, deal with it by:

• Big Design Up Front

• Change Control

• Today there are tools to address the root issues.

• It is not only fiscally and professionally responsible, but also profitable.

Page 5: Friday final test

Introduction

Title:

The Pragmatic Programmer

Authors: Andrew Hunt & David Thomas

Publisher: Addison-Wesley Professional

Pages: 321

Date: October, 1999

Page 6: Friday final test

Cost of Delivery

Page 7: Friday final test

Cost of Delivery

• Features

• Delivery Dates

• Appearance

• Performance

• Capacity

• Availability

• Security

• Cost

Common Acceptance Criteria:

Page 8: Friday final test

Cost of Delivery

• Client budget is tight - forego tests

• Get it running now - polish it later

• Perceived quality is skin deep

Page 9: Friday final test

Cost of Delivery

It is July 2006...

You decide that you will cut the delivery cost of your webapp by making it only work with IE6.

IE6 is favored by over 85% of your users and you don’t want to spend extra time and money to be standards compliant AND work with IE.

Page 10: Friday final test

Cost of Ownership

Now it is February 2010...

Your application won’t work with modern browsers and there are twenty-two unpatched vulnerabilities in IE6, some of which are rated moderately critical in severity. *

Page 11: Friday final test

• Spaghetti code

• “He Left Things a Mess”

• Large patches of code that is commented

• No one wants to touch it for fear of breaking it

• Documentation is outdated, misleading or wrong

Cost of Ownership

Page 12: Friday final test

Cost of Ownership

Page 13: Friday final test

Cost of Ownership

• Is not disposable

• Is produced in-house, or

• Is produced as part of a long-term relationship

If the project...

Then you should stabilize the productivity curve.

Well crafted solutions are cost effective in the long term, and help establish a relationship built on trust.

Page 14: Friday final test

Cost of Ownership

When code is not written in a way that is “clean” and easy to understand, development slows over time.

Eventually the codebase will be so tangled that it seems easier to rewrite the whole thing from scratch.

Re-development begins without the discipline required to insure that the code is “clean” and easy to understand.

Repeat.

Page 15: Friday final test

What is Craftsmanship?

Title:

Clean Code

Author: Robert C. Martin (aka Uncle Bob)

Publisher: Prentice Hall

Pages: 464

Date: August 11, 2008

Page 16: Friday final test

What is Craftsmanship?

Page 17: Friday final test

What is Craftsmanship?

“You know you are working on clean code when each routine you read turns out to be pretty

much what you expected. You can call it beautiful code when the code also makes it look like the

language was made for the problem.”

Ward Cunningham, as quoted in Clean Code, Prentice Hall, 2008, pg 11.

Page 18: Friday final test

What is Craftsmanship?

“Habitability is the characteristic of source code that enables programmers, coders, bug-fixers, and people coming to the code later in its life to understand its

construction and intentions and to change it comfortably and confidently.”

R. Gabriel, Patterns of Software, Oxford University Press, 1996, pg 11.

Page 19: Friday final test

What is Craftsmanship?

Well crafted code demonstrates:

• Simplicity

• Lack of duplication

• Readability

• Elegance

Page 20: Friday final test

What is Craftsmanship?

A Continuum of Understanding

• Apprentice - Software works, or it doesn't.

• Journeyman - Software judged by how clean it is.

• Master - Software development becomes a series of calculated trade-offs.

When the design works and is habitable, it is easier to live with the outcomes of your decisions.

Page 21: Friday final test

Manifesto

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft.

Through this work we have come to value:

• Not only working software, but also well-crafted software

• Not only responding to change, but also steadily adding value

• Not only individuals and interactions, but also a community of professionals

• Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

©2009, the undersigned. this statement may be freely copied in any form, but only in its entirety through this notice.

http://manifesto.softwarecraftsmanship.org/

Page 22: Friday final test

Manifesto

• Puts a name on the concept of Code Craft that we actively encourage and foster in our company.

• Clarifies expectations and helps with the mutual selection process of hiring.

• Creates a dialog which we were previously struggling to have.

Page 23: Friday final test

Top Down Dictates

Managers often don’t know what to ask for, let alone how to encourage best practices.

There are well over 10,000 Java jobs on Dice.com

• 3690 mention “J2EE”

• 2466 mention “Linux”

• 98 mention “Refactoring”

• 39 mention “Dependency Injection”

• 10 mention “Inversion of Control”

Page 24: Friday final test

Top Down Dictates

Similarities between Software Development when viewed as a craft, and blacksmithing:

• Technical knowledge required, but not sufficient

• Need practice and skill with specialized tools

• An eye for aesthetics

It takes a blacksmith to train a blacksmith

Page 25: Friday final test

Top Down Dictates

As a manager, I can...

• Hire craftsmen who are skilled mentors

• Hire motivated apprentices and interns

• Set an example: Right Thing – Right Way

• Provide an environment that values craft

Page 26: Friday final test

• Communication

• Professionalism

• Pair Programming

• Continuous Integration

• Test-Driven / Behavior-Driven Development

• Quality Metrics - Monitoring for Code Smells

• Sufficient backlog to minimize wait time

• Short feedback loop

• Continuous Learning

Working Environment

Page 27: Friday final test

The McBreen Model

Title:

Software Craftsmanship

Author: Pete McBreen

Publisher: Addison-Wesley Professional

Pages: 208

Date: August 23, 2001

Page 28: Friday final test

The McBreen Model

• A great craftsman is worth more than her manager

• A great craftsman is probably worth $150K-$250K

• How would you spend a $600,000 salary budget?

• Three great craftsman with three motivated apprentices, or ten mediocre developers?

Page 29: Friday final test

A Role for vtSDA

Raising the bar of professional software development...

• Community

Linkedin Subgroup

• Practicing

Dojos and Randoris

• Helping Others Learn

Internships

Page 30: Friday final test

Two Dozen Things You Probably Did Not Learn in School

• Agile Software Development

• Aspect-Oriented Programming (AOP)

• Behavior-Driven Design (BDD)

• Big Design Up Front (BDUF)

• Continuous Integration

• Convention over Configuration (CoC)

• Domain-Driven Design (DDD)

• Don't Repeat Yourself (DRY)

• Duplication is Evil (DIE)

• Domain Specific Language (DSL)

• Fluent Interface

• Gang of Four's (GoF) Design Patterns

• Lean Software Development

• Loose Coupling and High Cohesion

• Release Early, Release Often (RERO)

• The S.O.L.I.D. Principles

• Single Responsibility Principle (SRP)

• Open/Close Principle (OCP)

• Liskov Substitution Principle (LSP)

• Interface Segregation Principle (ISP)

• Dependency Inversion Principle (DIP)

• Test-Driven Design (TDD)

• eXtreme Programming (XP)

• You Ain't Gonna Need It (YAGNI)

Page 31: Friday final test

Thank you.