teaching and learning software development
TRANSCRIPT
Teaching and Learning Software Development
SoCraTes UK 2013
Who is this guy?
Technical Lead at Granta Design
Founder of Cambridge Software Craftsmanship Community
Get in touch! Twitter: @alastairs Email:
[email protected] Find me in the bar
Why do I want my team to learn?
To continually improve our products and processes
An improving team is an engaged team
To be a part of a team sharing my motivations and drives
To make my life (and theirs!) easier
What motivates us to learn?Why are you here?
Mastery
MasteryEngagementAutonomy
What is Mastery?
Flow is essential to mastery
Mastery is a mindset
Mastery is painful
Mastery is asymptotic
Mindful Learning
Mindfulness vs. Mindlessness
How does Mindlessness come about?
Mindless vs. Mindful learning
Selective Attentionhttp://youtu.be/lHd_L7dg3U4
Three Myths About Learning
1. The basics should be learned so well that they become second nature
Learning the basics mindfully teaches you to adapt them
2. To pay attention to something, we should hold it still and focus on it
Varying the target of attention provides better recall
3. It is important to learn how to delay gratification
Anything described as “work” is less enjoyable
Learning at Granta Design…and the journey I have taken with my team
The foundations for my efforts
“Coffee Break” talks Knowledge sharing Education on new topics
Occasional conference attendance (DevWeek)
Expanding the programme
“Rebranded” Coffee Breaks
Added Learning Lunches
Introduced a regular programme
Approached people directly for talks
Why do you give talks?
“I was asked to, and I thought it would be a good way to get involved with the team.”
“I see teaching as an act of altruism.”
“There’s nothing like doing a talk on a subject to make you realise that you don’t yet understand it. If you can spot this before you give the talk, you can refine your own understanding of the subject.”
“It gives me an excuse to investigate interesting/new ideas and technologies. I enjoy being able to impart knowledge anyway, but in this case I enjoy learning about stuff myself at least as much.”
“I was interested in the subject and wanted other people to experience the interest I had in the subject, or the benefit I got from it.”
“I like learning new stuff and sharing that with others.”
What do you enjoy talking about?
“F#, the SOLID principles, and what does good code look like.”
“I think I mostly like talking about concrete technologies rather than methodologies, probably because that's what I'm interested in. I find it harder to talk about things I am more apathetic about.”
“Largely abstract stuff such as patterns, ideas, architecture, code structure, code smells, object orientated best practices etc.”
“I enjoy talking about things that I enjoy and am passionate about. This can be technology, but is also techniques, approaches, etc… I do also enjoy the actual act of talking in front of a group about something of which I am knowledgeable.”
Book Club
Set amount of reading from the text
Monthly discussion sessions
Started with The Pragmatic Programmer
VA(R)K Model
Four styles of learning: Visual Auditory (Reading/Writing) Kinaesthetic
[the evidence supporting this model (and similar ones) is not conclusive!]
Why do people read?
“I love acquiring knowledge for its own sake.”
“I sometimes pick up books specifically for a purpose, but nowadays I use the internet when I need something.”
“I don’t usually feel I have time... Most of them are just too big. Something like ‘The Clean Coder’ is about the right size, but you wouldn’t spot it on the shelf next to most computing books. I think there’s a conflict between writing something that looks heavy enough to be worth selling, and writing something concise.”
“I love books. I like learning, and the advantage of a book is the ability to easily dip in and out. It also provides a chance to get away from a screen.”
“To learn new stuff, to make sure what I’m doing is correct, to provide grounding for further thoughts on improving our software.”
“I struggle to read books, partly because I find it hard to find the time to, but also because I have never been an avid reader and it takes a lot of concentration to take in what I am reading.”
What do you enjoy reading?
“I read anything that catches my eye, but I think I again prefer real-life usages of concrete technologies, rather than people waffling on for ages about their own opinion.”
“I read everything I can get my hands on.”
“Uncle Bob / Martin Fowler / Michael Feathers, but I read more blogs than books lately.”
“things I enjoy and am passionate about. I have occasionally bought a book because I think it would be useful, but because I am not really passionate about it found it much harder to even pick up.”
Workshops
Kinaesthetic learning style
Started craftsmanship-style workshops Introduced Test-Driven
Development Object Orientation Brutal Refactoring, Keyboard-
Driven Development, Introduction to F#
Resistance to Change
Vocal resistance
Passive participation
Company Culture
Little autonomy over many aspects of work
Time pressure, no slack. 100% utilisation
Revising our induction
Expose Your Ignorance, and Confront Your Ignorance
Introductions to our products
Talks, workshops, pairing sessions
“Buddy”
Four Stages of Competence
1. Unconsciou
s Incompeten
ce
2. Conscious
Incompetence
3. Conscious
Competence
4. Unconsciou
s Competenc
e
Four Stages of Competence
Which stage of competence are you at with the following skills? Test-Driven Development Object-Oriented Programming Java / C# / Python / Ruby / JavaScript / Go Reading and Writing Playing the piano Pottery Photography … choose your own
Video training library
Pluralsight subscription
Visual and Auditory learning styles
Personal choice
Technologies: frameworks, languages
Techniques: unit testing, object orientation
Paradigms: Functional Programming, Prototypical Object Orientation
Practices: (A)TDD, BDD, Refactoring, Object-Oriented Design
Why do you use Pluralsight?
“I use it for mainly for introduction to/development of topics I had no/little knowledge of.”
“I prefer video courses as you can do something else at the same time (eat dinner… play the sousaphone...).”
“You can see work in progress. It's easier to understand how/why people write the code etc. they do when you can see them doing it instead of trying to work it out from static content on a page.”
“To learn new stuff, to make sure what I’m doing is correct, to provide grounding for further thoughts on improving our software.”
“I like Pluralsight because it is a very passive way of absorbing information. I still find it hard to find the time to watch as many as I would like, but do enjoy watching them.”
How do you choose what to watch?
“I typically choose courses on subjects that I have seen mentioned elsewhere but am not fully up to speed on what they are.”
“I choose courses that are different and new, rather than ones that look like they will be going over the same kind of ground.”
“So far have only watched a few courses on web stuff but intend to just have a dig through ‘what looks interesting’ at some point.”
“Sometimes I choose a course about something I already know to see if I can further my knowledge. Other times I choose a course about something new (to me) to learn about it - even if I don’t watch the whole course, the overview is useful.”
What I tried
Expanded programme of talks
Book Club
Workshops
Revised induction process
Video subscriptions
Conclusion
Try many different learning methods And don’t stop until something works
Utilise mindful learning on your journey to mastery Culture is important Mastery requires engagement, engagement requires autonomy
Any Questions?Thank you for listening!
These are Sousaphones
References
Four Stages of Competence: Wikipedia
List of Cognitive Biases: Wikipedia
NLP Learning Styles: Wikipedia
Mindful Learning, Ellen J. Langer http://www.thehawnfoundation.org/sites/default/files/Langer_Mindful%20Learning.pdf
Apprenticeship Patterns, Adewale Oshineye & Dave Thomas Amazon (priced £18.99)
Drive: The Surprising Truth About What Motivates Us, Daniel Pink Amazon (priced £6.99)