Преднамеренная практика
Дмитрий Нечаев
As the levels of performance in the domain increased in skill and complexity, methods to explicitly instruct and train individuals were developed. In all major domains there has been a steady accumulation of knowledge about the best methods to attain a high level of performance and the associated practice activities leading to this performance.
— Dr. K. Anders Ericsson, Deliberate Practice
Три вида деятельности
-
Работа - создание ценности.
-
Игра - деятельность, направленная на получение удовольствия.
-
Преднамеренная практика - деятельность, разработанная специально для того, чтобы улучшить текущий уровень навыков.
Что происходит в других доменах?
...спортсмены, музыканты, артисты, военные, медики...
практикуют
Результаты преднамеренной практики?
На протяжении всей истории Олимийских Игр спортивные результаты улучшались, причем в некоторых видах спорта более, чем на 50%.
Концерт для скрипки Чайковского во время создания считался неисполнимым, сегодня же входит в стандартный репертуар лучших исполнителей.
В чем сила преднамеренной практики?
The costs of mistakes or failures to meet deadlines are generally great, which discourages learning and acquisition of new and possibly better methods during the time of work.
— Dr. K. Anders Ericsson, Deliberate Practice
Что происходит в нашем домене?
We were too busy writing code to think about practicing our skills.
— Robert Martin
Наш домен молод
ENIAC - 1946 год
FORTRAN - 1954 год
Закат перфокарт - конец 1960 гг.
80 колонок на перфокартах самого распространенного вида
Школа мысли зарождается на рубеже тысячелетий
Роберт "Uncle Bob" Мартин, Дейв "pragdave" Томас (Agile Manifesto) пишут о методах преднамеренной практики для программистов
Методы
Code Kata
Coding Dojo
Pair Programming
Code Kata
Упражнение по программированию, помогающее программисту улучшить свои навыки с помощью практики и повторения. Ката - это задача, которую достаточно легко решить и можно решать снова и снова, пока не будет достигнуто совершенство. Выполняя такое упражнение, программист с каждой попыткой улучшает свое умение решать задачи.
Примеры:
- Codebreaker
- Конвертация числа, записанного арабскими цифрами, в римские и обратно
- Разложение на множители
- ...
Coding Dojo
Выполнение ката в группе
Ретроспектива - важная часть:
- Что нам удалось сделать хорошо?
- Чему мы научились?
- Что бы мы сделали иначе?
- Что по-прежнему вызывает сложности?
Над чем работать нам?
Практиковать существующие ката
-
Ruby
-
AngularJS
-
Bootstrap 3.0
Задачи, вызывающие сложности, и представляющие интерес, можем оформлять в виде ката и решать всей командой.
И не только ката
RoR, Sinatra, Node.js, AngularJS
⇧
Ruby+pry, PostgreSQL+psql, JS+Chrome Developer Tools
⇧
bash/zsh, grep, sed, awk, ...
IDE/vim/emacs, git
⇧
Touch Typing
Ресурсы
- http://www.codewars.com/
- http://cyber-dojo.com/
- http://katas.softwarecraftsmanship.org/
- http://codingdojo.org/cgi-bin/wiki.pl?KataCatalogue
- http://codekatas.org/
- http://codekata.co/category/katas/
In software we do our practicing on the job, and that’s why we make mistakes on the job. We need to find ways of splitting the practice from the profession. We need practice sessions.
- Dave Thomas