Skip to content

Commit

Permalink
practice: rewrite deliberate practice overview, add architecture kata
Browse files Browse the repository at this point in the history
  • Loading branch information
practicalli-johnny committed Feb 28, 2024
1 parent 9d2ac88 commit ba73433
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 20 deletions.
33 changes: 33 additions & 0 deletions docs/practices/deliberate-practice/architecture-kata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Architectural Katas

An architectural kata is a deliberate practice technique to grow experience and skills with respect to architectural design.

A challenge is selected (or assigned), discussed and a solution presented - usually in a group setting.

The Architectural Katas website generates kata challenges to solve as well as the recommended rules to maximise the value of the activity.

[Architectural Katas website](https://www.architecturalkatas.com/){target=_blank .md-button}

??? EXAMPLE "Kata: Mock Internet UN"
Organization running "Mock UN" events wants to take its events online, permitting students to participate online

Requirements: student-diplomats must be able to video-chat with one another; student-diplomats must be able to "give speeches" to the "assembly" (video-chat to the entire group); (mocked) world events (created by moderators) distributed via (mock) "news sites"; moderators must be able to monitor any video chat for appropriateness

Users: 500 or so "diplomats" per "mock UN" gathering; dozens of moderators per "mock UN"; many "mock UN"s simultaneously; no new hardware requirements on students


> A kata is a technique from martial arts training, encouraging repetition of actions to increase skill.

!!! INFO "Related: Code kata"
Code kata encourages the same challenge to be solved in several different ways, to grow experience with solving a solution with a programming language.


### Group practice

The architectural kata technique can be used within a group setting, with one or more groups.

Groups of 3 to 5 people tend to be the most effective, especially where there are a good mixture of experiences.

> Architectural kata workshops are commonly run at technical conferences and Ted Neward has run many of these workshops
17 changes: 3 additions & 14 deletions docs/practices/deliberate-practice/code-kata.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# Code Kata

Coding Kata
A coding kata is a small coding exercise that you repeat over and over again, helping you improve your coding skills.
A code kata is a small coding exercise that you repeat over and over again, helping you improve your coding skills.

The kata is not about producing a usable solution as this detracts from the learning experience.

A coding kata for a developer is like an athlete doing warming up exercises before a run.

A coding kata is often used to warm up your skills before you start work each day. Working on a kata problem that is not related to any of your work allows you to think about how you write code rather than thinking of delivery and meeting estimates.

Coding kata's normally use a test first approach, as in TDD.
Coding kata often uses a test first approach, as in TDD.

[:fontawesome-solid-book-open: Kata Challenges - Practicalli Clojure](https://practical.li/clojure/simple-projects/tdd-kata/){target=_blank .md-button}

Expand All @@ -26,16 +25,6 @@ Each step must make sense to everyone present

Audience only interrupts if something is not understood.

### Group Kata

## Code Dojo

A coding dojo is a group event to help you learn a language, a framework or development technique.

At the coding dojo, a laptop is connected to a projector so everyone can see the coding taking place.

At regular intervals, one pilot and one co-pilot take there positions at the computer and have a set time to create a new test, implement code to fix a failing test or refactor the code.

The pilot writes tests or code whilst the co-pilot asks questions and discusses the approach they are taking.

If the pilot and co-pilot need help, they can ask the audience for guidance.

86 changes: 80 additions & 6 deletions docs/practices/deliberate-practice/index.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,91 @@
# Deliberate Practice

We learn by doing, but we need to do something many times before it becomes instinctive or ingrained. Deliberate practice is about doing something in order to learn rather than produce a finished product
People learn by doing. People need to do something many times before it becomes instinctive or ingrained.

In studies of accomplished individuals, researchers have found few signs of precocious achievement before the individuals started intensive training. Similar findings have turned up in studies of musicians, tennis players, artists, swimmers, mathematicians, and others.
Deliberate practice is about doing something in order to learn rather than produce a finished product with all the presures that entails.

Deliberate practice is a specific and unique kind of activity, neither work nor play. It’s characterised by several elements that together form a powerful whole.
Deliberate practice is not aimed at being an effective way to develop a software product, rather training tools which encourage high levels of learning and improve skills effectively.

Most fundamentally, what we generally do…. isn’t designed by anyone to make us better at anything. Usually it isn’t designed at all: We are just given an objective that’s necessary to meeting the employer’s goals and then expected to get on with it.
??? INFO "Academic Research"
In studies of accomplished individuals, researchers have found few signs of precocious achievement before the individuals started intensive training. Similar findings have turned up in studies of musicians, tennis players, artists, swimmers, mathematicians, and others.

Working on a software project under deadlines and other pressures detracts from what you can learn, unless you take the time to setp back from the "doing" and "deadline". Coding dojo and coding kata are not aimed at being an effective way to develop a software product, they are training tools to help you learn and improve your skills effectively.
!!! HINT "Delivery can limit learning"
Working on a software project under deadlines and other pressures detracts from what you can learn, unless you take the time to setp back from the "doing" and "deadline".

By attending a coding dojo on a regular basis will gain a lot of experiences that will help you become more effective when working on projects. A coding dojo helps developers become comfortable with pair programming, and helps pair programming and promiscuous pairing happen at work. At a coding dojo you will also lean a great deal from the practical experience of others, things that people forget they know or do almost instinctively.
Most fundamentally, what we generally do…. isn’t designed by anyone to make us better at anything. Usually it isn’t designed at all: We are just given an objective that’s necessary to meeting the employer’s goals and then expected to get on with it.


## Kata

Kata is a form of deliberate practice that uses repetative actions to improve skills. Code kata involves solving different challenges or the same challenge in different ways.

[:fontawesome-solid-book-open: Code kata](code-kata.md) is used to implement different code solutions to the same design challenge.

[:fontawesome-solid-book-open: Architecture kata](architecture-kata.md) is a way practice creating high-level solutions to business challenges.


## Code dojo

A coding dojo is a group event to help you learn a language, a framework, tool or development technique. Ideally the scope of the challenge should be designed around what is most useful to learn each time.

Attending a coding dojo on a regular basis gains a lot of experience to become more effective when working on projects.

Dojo experiences create a familarity and higher comfort level with pair programming, increating the levels of pair programming and promiscuous pairing happen at work.

A coding dojo provides exposure to the practical experience of others, especially things people forget they know or do almost instinctively.

!!! HINT "Next simplest thing that can be done"
Dojo events are only 1 to 2 hours long, so only doing the next simplest thing each time minimises the risk of analysis paralysis (discussing many options and paths without actually coding anything).

By considering the next simplest thing that can be done, a specific piece of code can be written and evaluated once it has been created. Then the next simplest thing can be done.


??? INFO "Classic style dojo can be challenging"

The original coding dojo approach was to have a single laptop connected to a projector (or very large screen monitor) so everyone present can see the coding taking place.

At regular intervals a pilot and co-pilot take there positions at the computer and have a set time to create a new test, implement code to fix a failing test or refactor the code.

The pilot writes tests or code whilst the co-pilot asks questions and discusses the approach they are taking. These discussions are spoken aloud so the audience can clearly hear them.

If the pilot and co-pilot need help, they should ask the audience for guidance.

> This approach can feel quite high pressure, especially when in a group of people that are not well known.


### Group show and tell dojo

Collectively identify one or more challenges to work on and divide up in to small groups of 2 to 3 people. Larger groups tend to lead to disjointed discussions and very limited progress.

Each group decides how to tackle the challenge and takes turn driving the code.

Toward the end of the event, each group presents their design decisions and interesting aspects of the code.

!!! HINT "Share code dojo results"
Use a code sharing service such as GitHub / GitLab to share the code with the group and wider community, continuing the discussion and learning opportunity beyond the dojo event.

[London Clojurians Org](https://github.com/ldnclj) is an example of a GitHub Organisation which the community shares there dojo experiences.

[:fontawesome-brands-github: London Clojurians Organisation](https://github.com/ldnclj)



## Code Retreat

A group event where the same code challenge (code kata) is attempted over again with different pairs of people each time.

The group is organised into pairs (or trio's if there is an uneven number in the group).

Each pair starts the challenge from scratch and has a set time to attempt the solution (typically 45 - 60 minutes).

Pairs show and tell their approaches, with the ephasis on why a design was chosen.

After a short break, the group is organised into different pairs and the same challenge is attempted from scratch.

A retrospective is run at the end of the day, reflecting on the code retreat approach and designs shared throughout the day.


<!--
## Further thoughts
Expand All @@ -32,3 +104,5 @@ There is a definitive ‘before the work’ component. Self-regulation begins wi
There is a ‘during the work’ phase. The most important self-regulatory skill that top performers in every field use during their work is self-observation. Even in purely mental work, the best performers observe themselves closely. They are able to monitor what is happening in their own minds and ask how it’s going. Researchers call this metacognition – knowledge about your own knowledge, thinking about your own thinking. Top performers do this much more systematically than others do; it’s an established part of their routine.
There is an ‘after the work’ component as well. Practice activities are worthless without useful feedback about the results. These must be self-evaluations and the best performers judge themselves against a standard that’s relevant for what they’re trying to achieve. Sometimes they compare their performance with their own personal best; sometimes they compare it with the performance of competitors they’re facing or expect to face; sometimes they compare it with the best known performance by anyone in the field.
-->

0 comments on commit ba73433

Please sign in to comment.