Дао программиста - 3

February 8th, 2010

Те же самые 3 уровня развития можно применить ко многим вещам.
Вернемся к трехчленному пути

Вначале программист находится на уровне Shu - он изучает язык или языки программирования, изучает алгоритмы, улучшает свои навыки написания программ, изучает предметную область и т.д.
Shu-программист может быть вполне успешным и Shu-программистов большинство в нашем мире.
Такой программист может отлично делать свою работу, если задание поставлено четко, но с трудом может ставить себе задачу сам. Он следует правилам разработки, принятым в его компании или отрасли и не спрашивает постоянно “почему?”, не пытается постоянно изменить что-то. Он “следует”, “течет по течению” и эти фразы лучше всего описывают таких программистов.
Уверен, что вы знаете немало Shu-программистов, потому что, подчеркну, их большинство. А может вы и сам - Shu-программист? Тогда читайте дальше и, возможно, вы сможете постичь третью ступень.
Ведь есть и Ha-программисты. Обычно они быстро выбиваются в лидеры или на руководящие должности, потому что они активны, задают вопросы, пробуют постоянно свои знания на прочность и расширяют их.
Ha-программисты готовы изучать новые языки программирования, переходить в новую отрасль для изучения новых знаний. Они готовы ставить под сомнение каждую задачу, которую они получают и каждую книгу или статью, которую они читают. Именно это постоянное сомнение и стремление к познанию порождает в их мозгу постоянную работу и размышления.
И со временем такой программист может достигнуть просветления и перейти на уровень Ri.
Ri-программист уже не думает о задаче, как об обособленной проблеме, но думает о ней, как о чем-то, что интегрировано в огромную систему, состоящую из других компоненов. Каждый класс или переменная - это не просто класс или переменная - это просто точка в огромном многомерном графе проекта.
Ri-программист не думает о том, как написать класс - он думает о том, как НЕ написать класс.
Для Ri-программиста нет задач, которые он не смог бы запрограммировать и главное для него в задаче - это не сложность, а важность.
Когда Ri-программист пишет код, то он не думает о языке программирования или операторах цикла - он видит многомерный граф проекта и расширяет его, а код рождается сам по себе.
Ri-программист оптимизирует граф проекта, а не конкретные функции, поэтому одно его правильное решение может сократить код проекта вдвое и одновременно улучшить качество или производительность.
Про Ri-программистов можно писать и дальше, но проблема, как я уже написал, в том, что невозможно научить быть Ri-программистом, невозможно даже описать что это такое - только другой Ri-программист сможет понять это. Так что, если вы видите смысл в строках про Ri-программиста, то welcome to the club.

Дао программиста -2

January 16th, 2010

Недавно я писал о трех этапах пути от Ученика до Учителя . Какое это имеет отношение к программированию?

Полгода назад я начал учить функциональное программирование. Тогда я был на уровне на уровне Shu и следовал предписанным правилам - правилам из книг. Книги заставляют многократно повторять довольно тупые упражнения и утверждают, что шаг влево-шаг вправо и ничего не будет работать, поэтому я и не делал шагов влево или вправо.
Но в какой-то момент я начала спрашивать - “Почему?” и перешел переходит на уровень Ha. На уровне Ha я уже начал подбирать инструменты.. пробовать отойти от образцов из учебника.

На уровень Ri (離:り) мне еще идти и идти :(

Дао программиста -1

December 27th, 2009

В японских боевых искусствах есть концепция трехэтапного обучения мастерству - Shu-ha-ri.
1. Shu (守:しゅ - “защита”, “подчинение”) — изучение традиционной мудрости — изучение основ, техник, движений.
2. Ha (破:は - “отделение”, “отклонение”) — отступление от традиции — поиск исключений в традиционной мудрости, размышление о правильности традиций, поиск новых путей и техник.
3. Ri (離:り - “покидание”, “отделение”) — превосходство над традицией — нет больше никаких техник или традиционных движений, все движения естественны и рождаются самостоятельно, а не из традиционной мудрости.

Любое обучение начинается с этапа Shu, когда ученик должен преданно следовать всем инструкциям своего учителя. На этом этапе нельзя спрашивать “почему”, нельзя ставить под сомнение правильность движения или слов учителя - только полное подчинение и следование инструкциям. На этом уровне ученик еще не готов к вопросам, а точнее - он не готов задавать правильные вопросы и не готов воспринять ответы на них. Только учитель может решить, что ученик готов перейти на следующий этап - этап Ha.

На этапе Ha ученик начинает изучать границы своей техники и постоянно должен спрашивать “Почему?”. Вопросы позволяют ученику лучше адаптировать под себя фундаментальные знания, которые он получил на этапе Shu. Ученик может даже находить новые техники усиляивающие его потенциал.

И вот в определенный момент количество опять переходит в качество и ученик переходит на уровень Ri. На этом уровне больше нет никаких правил, точнее ученик сам создает правила. Ученику больше не надо спрашивать “почему” - он это уже знает или чувствует. Ученик готов к самостоятельному изучению движений, созданию новых движений, и он видит взаимосвязь между ними.

Каждый следующий уровень включает в себя знания и умения, накопленные на предыдущих уровнях, поэтому невозможно сразу попасть на уровень 3, не проведя долгие месяцы и годы на уровнях 1 и 2.