BECOMING A BETTER
PROGRAMMER
a guide for people who care about code
pete goodliffe
@petegoodliffe
PETE GOODLIFFE
PROGRAMMER / AUTHOR / COLUMNIST /
TEACHER / CONSCIENTIOUS CODER
@petegoodliffe
PETE GOODLIFFE
PROGRAMMER / AUTHOR / COLUMNIST /
TEACHER / CONSCIENTIOUS CODER
STILL LEARNING
@petegoodliffe
@petegoodliffe
+
WORK OUT WAYS TO
BECOME BETTER
PROGRAMMERS
the plan
DO YOU WANT TO
BECOME BETTER?
QUESTION
DOES IT EVEN
MATTER?
QUESTION
IT’S ALL ABOUT
ATTITUDE
Attitude
Attitude
“
Attitude
Attitude is a little thing
that makes a big
difference.
Winston Churchill
“
Attitude
For success, attitude is
equally as important as
ability.
Walter Scott
“
Attitude
To be a great champion you
must believe you are the
best. If you’re not, pretend
you are.
Muhammad Ali
KNOWLEDGE
Attitude
TECHNOLOGY
IDIOM
ATTITUDE
APPLICATION
WISDOM
WHAT?
WHY?
HOW DO YOU GET
BETTER?
TECHNOLOGY
LEARN
Attitude
(anyone can do this)
IDIOM
LEARN
Attitude
(build mastery)
HOW TO
APPLY IT ALL
LEARN
Attitude
(wisdom)
ADJUST
ATTITUDES
“
PHYSICIAN, QUOTE THYSELF...
Pretty early in any programmer’s career comes the realisation
that there’s more to being a great coder than a simple
understanding of syntax and a mastery of basic design. The
awesome programmers, those productive people who
craft beautiful code and work effectively with other people,
know far more. There are methods of working,
attitudes, approaches, idioms, and techniques
you learn over time that increase your
effectiveness. There are useful social skills, and a
whole pile of tribal knowledge to pick up.
Pete Goodliffe (Becoming a Better Programmer)
WANT TO
IMPROVE
KNOWLEDGE
ACQUISITION
MODELS OF
Models of learning
YOU
NOW
YOU, BETTER
FUTURE
liability
super-awesome
<future view=“unclear”>
A tangent...
“
The future
Prediction is very difficult,
especially about the future.
Niels Bohr
1962
DECCA RECORDING COMPANY
The future
“
The future
We don’t like their sound,
and guitar music is on the
way out.
Decca Recording Company
1974
MARGARET THATCHER
The future
“
The future
It will be years
- not in my time -
before a woman will
become Prime Minister.
Margaret Thatcher
1977
KEN OLSON
The future
“
The future
There is no reason anyone
would want a computer in
their home.
Ken Olson
Chairman of Digital Equipment Co
</future>
A tangent...
Models of learning
YOU
NOW
YOU, BETTER
FUTURE
liability
super-awesome
Models of learning
PER-SKILL
FOUR LEVELS OF
(IN)COMPETENCE
Models of learning
Abraham Maslow
unconscious incompetence
conscious incompetence
conscious competence
unconscious competence
Models of learning
THE
DUNNING–KRUGER
EFFECT
Models of learning
David Dunning
and Justin Kruger
unskilled
fail to realise own ineptness
skilled
underestimate their relative competence
assume others are as good
Models of learning
“
Models of learning
The miscalibration of the
incompetent stems from
an error about the self,
whereas the miscalibration
of the highly competent
stems from an
error about others.
David Dunning and Justin Kruger
"Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to
Inflated Self-Assessments". Journal of Personality and Social Psychology
“
Models of learning
Real knowledge is to know
the extent of one's
ignorance
Confucius
DREYFUS MODEL OF
SKILLS ACQUISITION
Models of learning
Hubert and Stuart Dreyfus
Models of learning
novice
advanced beginner
competent
proficient
expert
Models of learning
novicerule-centric, no judgement
advanced beginner
breaks from rules, gets stuck, can get answers, can’t filter
competent
mental model, plan routes, solves unknown problems
proficient
corrects previous errors, learns from others,
interprets maxims, has tacit knowledge
expert
authority, interlinked with other skills, intuition
Models of learning
aid learning
describes you can learn right now
teamwork
how you work with others in your team
Models of learning
PER-SKILL
KNOWLEDGE
PORTFOLIO
Models of learning
The Pragmatic
Programmers
10,000
10,000
10,000expert
8,000shows potential
4,000
“music teacher”
10,000
um…
10,000
= 10 years
* 3 hours
10,000
“
10,000
The theoretical framework presented in this article
explains expert performance as the end result of
individuals' prolonged efforts to improve performance
while negotiating motivational and external constraints.
In most domains of expertise, individuals begin in their
childhood a regimen of effortful activities
(deliberate practice) designed to optimize improvement.
Individual differences, even among elite performers, are
closely related to assessed amounts of deliberate practice.
Many characteristics once believed to reflect innate
talent are actually the result of intense practice
extended for a minimum of 10 years. Analysis of
expert performance provides unique evidence on the
potential and limits of extreme environmental adaptation
and learning.
K. Anders Ericsson, Ralf Th. Krampe,
and Clemens Tesch-Romer
The Role of Deliberate Practice in the Acquisition of Expert Performance
K. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer, 1993
FIVE STAGES
OF LEARNING
Models of “learning”
(with apologies to)
Elisabeth Kübler-Ross
FIVE STAGES
OF LEARNING
Models of “learning”
(with apologies to)
Elisabeth Kübler-Ross
denial ○ anger ○ bargaining ○ depression ○ acceptance
DENIAL
(I don’t need to learn about that)
ANGER
(damn...
I need to get something done,
and I don’t know about that)
BARGAINING
(I’d better learn as little about that as I can)
DEPRESSION
(bloody hell...
this is a big and complex topic;
I’ll never learn enough to get anywhere!)
ACCEPTANCE
(oh ok, it’s not that bad after all)
DENIAL ○ ANGER ○ BARGAINING ○ DEPRESSION ○ ACCEPTANCE
Three pillars
WHAT SHOULD
YOU LEARN?
What should I learn?
WRITING CODE
THE PRACTICE OF
PROGRAMMING
PERSONAL SKILLS
WORKING WITH OTHERS
WRITING CODE
code
presentation
avoid
unnecessary
code
removing code
learn from your
old code
working with
unfamiliar code
dealing with
“bad” code
handle errors
well
write robust code
effective
bug hunting
programmatic
tests
avoid
unnecessary
complexity
good
design
THE PRACTICE OF PROGRAMMING
know what software
development is
define
cultural rules
keep it
simple
use your
brain
nothing is set
in stone
“correct”
code reuse
effective
version control
working with
QA
“code freeze”
making software
releases
PERSONAL SKILLS
learn to learn
know what makes
a “good” developer
seek out fulfilling
challenges
avoid
stagnation
act ethically
love languages;
learn them adopt good
posture
work smarter;
not harder
define what
“done” looks like
focus to find
the solution
WORKING WITH OTHERS
work well
in a team
accountability
communication skills
manifestos, rules,
tribal knowledge
(an ode to code)
dealing with
conflict
CONCLUSION
“
Learning
Any fool can know.
The point is to understand.
Albert Einstein
“
Learning
The more that you read,
the more things you will
know. The more that you
learn, the more places
you'll go.
Dr. Seuss, I Can Read With My Eyes Shut!
BETTERPROGRAMMER
IT’S ALL ABOUT
ATTITUDE
“
Attitude
Learning is like rowing
upstream: not to advance is
to drop back.
Chinese proverb
DO YOU DESIRE TO?
BECOME “BETTER”?
WORK “BETTER”?
WRITE “BETTER” CODE?
“
Attitude
From caring
comes courage.
Lao Tzu
WHAT WILL YOU DO
NOW TO IMPROVE?
“
Workshop
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
Benjamin Franklin
THIS IS THE 1ST DAY
KEYNOTE
COMPETENCE
IS PER-SKILL
novice journeyman expert
session
selection
?
COMPETENCE
IS PER-SKILL
novice journeyman expert
session
selection
HOW WILL YOU LEARN
IN EACH SESSION?
WHAT INFO DO YOU NEED
IN EACH SESSION?
ASK APPROPRIATE
QUESTIONS
Questions... (keynote version)
LOOKING AT THE TIMETABLE:
WANT WILL YOU EXTEND
YOUR KNOWLEDGE ABOUT?
WHAT WILL YOU LEARN
AS A NOVICE?
HOW WILL YOU SHARE YOUR
KNOWLEDGE WITH HUMILITY?
HOW WILL YOU ENSURE THAT
YOU IMPROVE YOUR
PROGRAMMING SKILLS?
(it’s easy to coast!)
Questions...
DO YOU WANT TO GET BETTER?
WHAT’S IN IT FOR YOU?
WHAT IS YOUR MOST DIFFICULT
ISSUE AT THE MOMENT?
WHAT WILL YOU WORK ON?
(does this benefit you or the team?)
HOW WILL YOU ENSURE THAT
YOU DO IMPROVE?
WHAT WILL YOU DO
NOW TO IMPROVE?
WHAT WILL YOU DO
NOW TO IMPROVE?
WRITING CODE
THE PRACTICE OF
PROGRAMMING
PERSONAL SKILLS
WORKING WITH OTHERS
THANK YOUfor listening
pete goodliffe
@petegoodliffe
© 2015 Pete Goodliffe
All rights reserved, etc, etc
Image credits:
Science: http://commons.wikimedia.org/wiki/File:Distillation_by_Retort.png
Entertain: http://www.fraternalclipart.com/cgi-bin/csGallery/index.cgi?page=9&lpage=&command=s&query=&ccat=6
Axe: http://etc.usf.edu/clipart/19500/19545/mattock_19545_md.gif
Plane: http://3.bp.blogspot.com/_CKmMSJVSZ8I/TGnEXK-bagI/AAAAAAAAADo/u-Pyz5Sf5aE/s1600/Ekran+Alıntısı.JPG
Annoyed: http://www.sxc.hu/photo/1327383
Wine: http://www.sxc.hu/photo/1337577
Cheese: http://www.sxc.hu/photo/750248
Ladder: http://printablecolouringpages.co.uk/?s=download+ladder
Evolution: http://www.tenvinilo.com/vinilos-decorativos/Vinilo-decorativo-evolucion-senor-192
Denial: https://thenounproject.com/term/denial/43010/
Anger: https://thenounproject.com/term/anger/94082/
Scale: https://thenounproject.com/term/scale/22202/
Depressed: https://thenounproject.com/term/depressed/127839/
Like: https://thenounproject.com/term/like/9666/
Boring stuff at the end

Becoming a Better Programmer