/
04-learning.tex
72 lines (63 loc) · 4.85 KB
/
04-learning.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
\section{Dojo and Learning}\label{sec:learning}
The main goal of a \emph{Coding Dojo} is learning through practice. Like a pianist
plays scales and a martial arts student practices basic moves, the \emph{Code Katas}
serve as focused exercises that allow the participants to improve on specific skills.
Ericsson et al. studied what influences the acquisition of expertise in
different domains such as music, chess, and sports~\cite{DeliberatePractice}. They found
that deliberate practice over a long period of time (usually more than 10 years) is at the
heart of attaining expertise. Their empirical study shows that experts carefully schedule
deliberate practice and limit its duration to avoid exhaustion and burnout. Although it
takes time to become an expert, the role of deliberate practice is still important through
the learning process.
The Dreyfus Model of skill acquisition defines five developmental stages when learning
a new skill: novice, competence, proficiency, expertise, and mastery~\cite{Dreyfus}. A
\emph{novice} needs a set of pre-defined rules that can be applied without
previous experience on the domain. \emph{Competence} comes with experience, when the student
can identify recurring patterns and understand his environment. With increased practice and
experience, a \emph{proficient} student starts to question the guidelines and is able to
apply different rules considering longer term consequences. Once the repertoire of
experienced situations becomes so vast, an \emph{expert} student is able to intuitively
trigger the appropriate action for a specific situation. According to the Dreyfus model,
there is no higher level of mental capacity than expertise, but there are moments when an
expert can cease to pay conscious attention to his performance and still produce the
appropriate perspective and its associated action, reaching a stage of \emph{mastery}.
Although the \emph{Coding Dojo} can not provide the intuition and unconscious competence
required to achieve expertise and mastery, deliberate practice
can help participants to go from novice to proficient. Also, since
there is no single master for all subjects, participants of different levels can
share their knowledge and improve the group as a whole.
\subsection{Dojo at the University}
Running the \emph{Coding Dojo} at the University gave the authors an example of
the good impacts of the sessions in one particular student. One of the attendees joined the
\emph{Coding Dojo} since the first sessions, when he had just finished his first semester in
Computer Science. He is now on his third semester and he uses TDD in most of his assignments,
no matter what language is being used. His latest
work involved implementing common sparse matrices operations in C. He decided to
implement it using TDD and a simple testing library developed during a \emph{Coding Dojo}
session~\cite{Dojo31}. He was able to write clear code with full test coverage. His ability to
identify and pin down the required tests to drive the correct implementation far surpasses his
colleagues'.
He has been showing strong evidences that the knowledge and practices obtained from the
\emph{Coding Dojo} can be absorbed and understood regardless of prior experience on the
subject. Since such testing practices are not part of the regular class' program, it shows
how the participation on the \emph{Coding Dojo} can help a novice to become competent. Practices
that were just followed as rules in the initial sessions became more natural and could be applied
to different contexts and situations. It also shows that the informal, non-directed, and non-rigid
learning experience can be effective and complement more traditional teaching methods.
\subsection{Dojo at ThoughtWorks}
More recently, one of the authors started running a
\emph{Coding Dojo} in a different environment: inside a company. He
took over the responsibility of running a bi-weekly meeting called
``Ruby Tuesdays''. The session's goal was to share knowledge about the
Ruby programming language between expert and novice
developers. Although focused on a specific language,
when the author became the moderator, he made a presentation and
suggested the use of a \emph{Coding Dojo} format for the meetings.
So far the results are very positive. The use of a more structured format allowed the session to
flow better and the use of a single projector proved to help everyone follow the same train of
thought. The retrospective at the end is also helpful to consolidate the lessons learned and to
discuss points for improvement. Running a \emph{Coding Dojo} within
a company can help developers to share their interests in particular concepts and practices, allowing
the rest of the organization to experience the benefits of applying different techniques. It also
creates a safe environment, free of normal project pressure, allowing them to conduct controlled
experiments before applying the practices on their day-to-day work.