Code-Fu: The way to be better or Mystery of Code Mastery

What is a code-fu? Is there a code-fu?

Код-фу – это довольно странная штука. Вроде бы разработка, хакерство, процесс творческий. Однако существуют каноны, которые приняты индустрией. И, так называемая, правильная вещь, порой отсутствующая в некоторых людях напрочь, не всегда совпадает с этими канонами.(Определение “правильной вещи” можно посмотреть в The Original Hacker’s Dictionary или прочитать в книге Hackers: Heroes of the Computer Revolution ).

Стиль хакинга, стиль разработки(программирования) – бесспорно являются разными и зачастую диаметрально противоположными понятиями. 

  • Первый больше говорит о том, как вы доводите свое дело до конца, включая хитрые приемы “хаки” в свое области. Getting things done – это главный принцип.
  • Второй больше говорит о том, насколько вы хорошо создаете понятный, поддерживаемый, читаемый код.

Однако, по мнению вашего покорного слуги, есть некое пересечение в этих двух направлениях – правильная вещь. “Грязный хак” может быть вполне уместен в ряде мест. Зачастую трюки, которые делаются по ходу решения, особенно нетривиальных задач, будут грязными. Стоит заметить, что не всегда эти творческие произведения инженерного искусства могут быть полезными.

К примеру, вы создаете что-то, что способны понять только вы. Как вас стоит оценивать? Вы бесспорно молодец, крутой такой, хороший и красивый. Но как инженер, решения которого должны иметь запас прочности, масштабируемости в разумных пределах, дальнейшей поддержки – довольно сомнительный персонаж. Любой нормальный “владелец”(читай заказчик, руководитель, менеджер) будет иметь на карандаше, что вы его узкое место(иначе он свою ли должность занимает…). От узких мест желательно избавляться, нивелировать их максимально. Дабы последствия их не затрагивали отдельные пласты – как с технологической точки, так и с ресурсной точки(людских ресурсов и т.д.).

Вот теперь перейдем ближе к теме. Существует умная такая вещь, как шаблоны проектирования. Я вот лично не скажу, что знаю все шаблоны проектирования. Но что-то да знаю и хотя бы в курсе о чем это. “Gang of 4” безусловно опыт целой индустрии и не одного хорошего профессионала в своей области. Правда, ряд этих шаблонов(аналог далее – паттернов) возможно создаются человеком на интуитивном уровне. К тому же ряд из них в итоге превращаются в некие антипаттерны. Погуглите немного, чтобы получить представление об этом. 

С приходом функционального программирования(концепции) в ряд императивных языков – они изменили свою реализацию(реализация не означает, что паттерн изменился – он реализуется с учетом нового “сахара” языка).

Рассмотрите пример на Java 8(и сравните с реализацией на Java 7) паттерна проектирования “Стратегия”: ( https://gssachdeva.wordpress.com/2016/01/22/java-8-lambda-expression-for-design-patterns-strategy-design-pattern/ ). Бросается разница не просто на глаз, а на много много нажатий по клавишам.

Для каждого языка можно привести(найти) реализации паттернов на любой вкус и цвет. Это не означает, что паттерн изжил себя или не нужно его применять. Он остается на том самом “интуитивном” уровне – хотите этого или нет. Но является ли это главным поинтом? – не особо. Голова дойдет, глаза увидят, мозг осознает и прочитает. Вопрос лишь в уровне технической “входимости” в область. Вот корреляция между наличием головы, соображалки на месте головы, и быстрым осознанием темы, чтобы выдавать результат, – бесспорно существует.

Технологий становится много, в некоторых областях(hello-js) день без новой модной штуки – ну просто не день. Поэтому главным преимуществом вновь становится умение видеть фундамент: фундаментальные принципы, подходы. Увы, (начинаем готовить помидоры), ничего нового на самом деле, в большинстве случаев, просто не делается. Это переосмысление старого на базовых принципах, построенного с новыми инструментами, отвечающими современности: тенденциям моды, развития и т.п.

Но причем же здесь код-фу. Ведь существует все же понятие ugly code – говнокод. Кто-то все же понимает и отличает плохое от хорошего. Много полегло постов в обсуждениях – “что такое хорошо и что такое плохо!”. Ответ хотя очевиден: хорошо то, что работает и хорошо то, с чем можно потом работать. Мантра понятна надеюсь.

Попытаюсь развить это в следующем виде, наверное более верном: сначала необходимо сделать нечто рабочее, потом сделать это правильно(обм – о, боже мой, как это правильно), сделать это быстрым. Принцип придумал не я, для любителей и копателей правды прошу по линку проследовать: http://c2.com/cgi/wiki?MakeItWorkMakeItRightMakeItFast. Чувствуете, опять правильная вещь выплыла наружу.

Мастерство code-fu сложно выразить деньгами, его сложно выразить признанием. Не будете же вы отрицать тот факт, что заработная плата или состояние в банке – никак не определяет успешность человека в профессиональном плане. У создателей стартапов найдется с десяток инженеров, которые намного круче их самих. Такое же рассуждение можно провести и для признания и общественного мнения. Здесь все еще хуже: люди любят всякое дерьмо.

Прыгнем ближним прыжком немного назад, в область технологий. Они создаются людьми с разными уровнями код-фу. А потом люди опять же с разными уровнями код-фу затаскивают эти штуки в свои проекты. И странно так, на бумаге у нас столько умных людей, а по итогу софтвер все равно остается куском “гавна”. “Гавна” этого код-фу мастера плодят еще больше, но зато рассуждений на тему качества и того, как оно правильно – не убывает. Переливаясь при этом из пустого в порожнее. Вопрос остается не раскрытым.

Код-фу, как и любое “чтототам”-фу, требует времени, терпения, усердия и прозорливости. Надо это всё, чтобы заиметь опыт и понимание о прекрасном. Тогда коллеги будут ловить дзен от вашего создания. Вы будете ловить дзен от вашего создания. Нельзя ловить дзен не познав боль. Боль от осознания ущербности и надобности роста, особенно на собой.

Но не стоит зацикливаться на том, что разработчик П называет переменную иначе, потому что она яснее отражает сущность, которую он хочет выразить. Либо структура и связность его объектов отличается от Вашей. Возможно П и видит больше – надо понять его поинт и только после этого линчевать себя. Аргументы – это “лаконичнее”, как и прекрасное, полны субъективизма. Субъективизм субстанция довольно расплывчатая. Нечто среднее из субъективных мнений группы из N членов, будет объективной оценкой группы для N членов. Сделайте N+1, N+2, N+k и среднее изменится. Как изменится и объективное мнение. (Напоминает выборы…..)

Оу-оу, по легче, скажите Вы. Каноны и устои так можно разрушить. Можно. Главным судьей – все равно остаетесь Вы. Поэтому держите сердце горячим, а голову холодной. Не стоит кипятиться, но и не стоит брызгать слюной. Да прибудет с вами Дзен и код-фу.

Advertisements
Code-Fu: The way to be better or Mystery of Code Mastery

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s