This document contains slides from a presentation by Kev McCabe on software craftsmanship. The presentation discusses agile development and its focus on individuals, interactions, working software over documentation, and responding to change. However, McCabe notes many agile projects are producing mediocre software due to a lack of technical practices and professionalism. He advocates for an emphasis on software craftsmanship principles like clean code, testing, code reviews and continuous integration to help developers build high quality software through practice and experience. The document contains numerous slides on specific techniques and practices to achieve software craftsmanship.
3. http://bigmadkev.com/resources
About
Me
Software
Craftsmanship
Mentor
@
General
Electric
• ColdFusion
since
1996
(v2)
• London
CFML
&
Web
Community
Leader
• Scrum
Master
• Kanban
Practitioner
• Agile
Coach
T:
@bigmadkev
W:
BigMadKev.com
3
5. http://bigmadkev.com/resources
Agile
Software
Development
Individuals and interactions over
processes and tools
!
Working software over
comprehensive documentation
!
Customer collaboration over
contract negotiation
!
Responding to change over
following a plan
7. http://bigmadkev.com/resources
&
then
we
spend
10
year
focusing
on...
…
people,
interactions,
team
building,
the
ecosystem
!
Process
and
Interactions
became
more
important
than
technical
practices
11. http://bigmadkev.com/resources
Agile Software Development
!
We are uncovering better ways of developing software by doing it
and helping others do it. Through this work we have come to
value:
!
Individuals and interactions over processes and
tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
!
That is, while there is value in the items on
the right, we value the items on the left more.
13. http://bigmadkev.com/resources Manifesto for Software Craftsmanship
raising the bar
As aspiring Software Craftsmen we are raising the bar of professional
software development by practising 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
14. http://bigmadkev.com/resources
What
is
Software
Craftsmanship?
Software
Craftsmanship
is
all
about
putting
responsibility,
professionalism,
pragmatism
and
pride
back
into
software
development
23. http://bigmadkev.com/resources
Keep
Learning
䡧Learn
stuff
all
the
time
!
䡧Small
and
often
!
䡧You
don’t
want
to
be
out
of
work
and
having
a
large
learn
curve
!
䡧Learning
is
remembering
what
is
important
30. http://bigmadkev.com/resources
Software
Craftsmanship
is
not...
…
a
church,
trying
to
convert
all
developers
It's
about
leading
by
example
and
showing
how
we
can
be
better
…
about
beautiful
code
It's
about
continuously
delivering
value
not
writing
crap
code
35. http://bigmadkev.com/resources
䡧Agile
and
Craftsmanship
complement
each
other
and
both
are
necessary.
!
䡧Agile
processes
assume
technical
excellence
and
a
professional
attitude.
!
䡧Software
Craftsmanship
takes
technical
excellence
and
professionalism
to
a
whole
new
level.
36. http://bigmadkev.com/resources
Clean
Code
䡧Meaningful
Names
䡧Short
Functions
▪ Single
Responsibility
Principal
▪ Minimal
Arguments
䡧Show
intent
▪ No
need
for
comments
䡧Formatting
䡧Unit
Testing
41. http://bigmadkev.com/resources The
Elements
of
Programming
Style
䡧 1st
edition
1974
䡧 2nd
edition
1978
!
䡧 56
lessons
䡧 Most
of
which
are
still
valid
today
!
䡧 Book
costs
$150+
43. http://bigmadkev.com/resources
Some
of
the
rules
valid
today
1. Write
clearly
-‐-‐
don't
be
too
clever.
2. Say
what
you
mean,
simply
and
directly.
3. Write
clearly
-‐-‐
don't
sacrifice
clarity
for
efficiency.
4. Replace
repetitive
expressions
by
calls
to
common
functions.
5. Parenthesize
to
avoid
ambiguity.
6. Choose
variable
names
that
won't
be
confused.
7. Write
first
in
easy-‐to-‐understand
pseudo
language;
then
translate
into
whatever
language
you
have
to
use.
8. Modularize.
Use
procedures
and
functions.
9. Don't
patch
bad
code
-‐-‐
rewrite
it.
10. Write
and
test
a
big
program
in
small
pieces.
11. Check
some
answers
by
hand
11. Make
it
right
before
you
make
it
faster.
12. Make
it
fail-‐safe
before
you
make
it
faster.
13. Make
it
clear
before
you
make
it
faster.
14. Don't
sacrifice
clarity
for
small
gains
in
efficiency.
15. Don't
strain
to
re-‐use
code;
reorganize
instead.
16. Make
sure
special
cases
are
truly
special.
17. Keep
it
simple
to
make
it
faster.
18. Don't
just
echo
the
code
with
comments
-‐-‐
make
every
comment
count.
19. Don't
comment
bad
code
-‐-‐
rewrite
it.
20. Use
variable
names
that
mean
something.
21. Format
a
program
to
help
the
reader
understand
it.
22. Don't
over-‐comment.
44. http://bigmadkev.com/resources
INTUITIVE
䡧 SOLID
principles
䡧 Coupling
and
cohesion
䡧 Abstractions
in
code;
Details
in
data
䡧 Design
patterns
䡧 Presenter-‐
or
Controller-‐
first
Design
MECHANICAL
䡧 Four
Elements
of
Simple
Design
䡧 Test-‐Driven
Development
䡧 No
integrated
tests
for
basic
correctness
䡧 Check
one
thing
at
a
time
䡧 Start
with
what
you
want
to
check
䡧 Inject
dependencies
through
the
constructor
http://www.jbrains.ca/permalink/the-‐four-‐elements-‐of-‐simple-‐design
J.
B.
Rainsberger
51. http://bigmadkev.com/resources
䡧 Clean
Code
!
䡧 Robert
“Uncle
Bob”
Martin
!
䡧 Changes
your
thought
process
!
䡧 +
Videos
!
䡧 Also
Clean
Coders
–
More
about
your
career
54. http://bigmadkev.com/resources
CFML
Software
Craftsmanship
䡧Google
group
!
䡧http://cfml-‐craftsmanship.com
!
䡧Come
Join
Talk
Craftsmanship
!
䡧2
Online
Video
discussions
a
month
䡧2nd
Thursday:
US
Centric
-‐
3pm
PST
6pm
EST
11pm
UK
䡧4th
Thursday:
Euro
Centric
-‐
9am
PDT
12pm
EST
5pm
UK
57. http://bigmadkev.com/resources
Contact
Me
Happy
to
work
with
people
over
Google
hangout
/
Skype
/
Saros
After
5pm
UK
(12pm
EST
/
9am
PST)
FREE
/
Amazon
Wish
list
☺
T:
@bigmadkev
S:
bigmadkev
W:
BigMadKev.com