teaching and learning software development

33
Teaching and Learning Software Development SoCraTes UK 2013

Upload: alastair-smith

Post on 26-May-2015

335 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Teaching and Learning Software Development

Teaching and Learning Software Development

SoCraTes UK 2013

Page 2: Teaching and Learning Software Development

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

Page 3: Teaching and Learning Software Development

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

Page 4: Teaching and Learning Software Development

What motivates us to learn?Why are you here?

Page 5: Teaching and Learning Software Development

Mastery

MasteryEngagementAutonomy

Page 6: Teaching and Learning Software Development

What is Mastery?

Flow is essential to mastery

Mastery is a mindset

Mastery is painful

Mastery is asymptotic

Page 7: Teaching and Learning Software Development

Mindful Learning

Mindfulness vs. Mindlessness

How does Mindlessness come about?

Mindless vs. Mindful learning

Page 8: Teaching and Learning Software Development

Selective Attentionhttp://youtu.be/lHd_L7dg3U4

Page 9: Teaching and Learning Software Development

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

Page 10: Teaching and Learning Software Development

Learning at Granta Design…and the journey I have taken with my team

Page 11: Teaching and Learning Software Development

The foundations for my efforts

“Coffee Break” talks Knowledge sharing Education on new topics

Occasional conference attendance (DevWeek)

Page 12: Teaching and Learning Software Development

Expanding the programme

“Rebranded” Coffee Breaks

Added Learning Lunches

Introduced a regular programme

Approached people directly for talks

Page 13: Teaching and Learning Software Development

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.”

Page 14: Teaching and Learning Software Development

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.”

Page 15: Teaching and Learning Software Development

Book Club

Set amount of reading from the text

Monthly discussion sessions

Started with The Pragmatic Programmer

Page 16: Teaching and Learning Software Development

VA(R)K Model

Four styles of learning: Visual Auditory (Reading/Writing) Kinaesthetic

[the evidence supporting this model (and similar ones) is not conclusive!]

Page 17: Teaching and Learning Software Development

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.”

Page 18: Teaching and Learning Software Development

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.”

Page 19: Teaching and Learning Software Development

Workshops

Kinaesthetic learning style

Started craftsmanship-style workshops Introduced Test-Driven

Development Object Orientation Brutal Refactoring, Keyboard-

Driven Development, Introduction to F#

Page 20: Teaching and Learning Software Development

Resistance to Change

Vocal resistance

Passive participation

Page 21: Teaching and Learning Software Development

Company Culture

Little autonomy over many aspects of work

Time pressure, no slack. 100% utilisation

Page 22: Teaching and Learning Software Development

Revising our induction

Expose Your Ignorance, and Confront Your Ignorance

Introductions to our products

Talks, workshops, pairing sessions

“Buddy”

Page 23: Teaching and Learning Software Development

Four Stages of Competence

1. Unconsciou

s Incompeten

ce

2. Conscious

Incompetence

3. Conscious

Competence

4. Unconsciou

s Competenc

e

Page 24: Teaching and Learning Software Development

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

Page 25: Teaching and Learning Software Development

Video training library

Pluralsight subscription

Visual and Auditory learning styles

Page 26: Teaching and Learning Software Development

Personal choice

Technologies: frameworks, languages

Techniques: unit testing, object orientation

Paradigms: Functional Programming, Prototypical Object Orientation

Practices: (A)TDD, BDD, Refactoring, Object-Oriented Design

Page 27: Teaching and Learning Software Development

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.”

Page 28: Teaching and Learning Software Development

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.”

Page 29: Teaching and Learning Software Development

What I tried

Expanded programme of talks

Book Club

Workshops

Revised induction process

Video subscriptions

Page 30: Teaching and Learning Software Development

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

Page 31: Teaching and Learning Software Development

Any Questions?Thank you for listening!

Page 32: Teaching and Learning Software Development

These are Sousaphones

Page 33: Teaching and Learning Software Development

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)