Недостатки кода ката


41

Code kata - это концепция, которая предлагает оттачивать навыки программиста, многократно выполняя небольшие задачи, пытаясь улучшить код на каждой итерации. Название происходит от аналогии с ката боевого искусства, где формы (он же ката) - это практики, совершаемые снова и снова, ведущие к улучшениям.

Из реакции, которую я получил на мой последний вопрос по теме, я хотел бы знать, каковы недостатки этого подхода?


+1, чтобы противостоять непродуктивным -1 примененным. Кажется верным вопрос, как и мои сомнения по поводу кода ката, но не могу точно определить, почему.
Mattnz

9
до сегодняшнего дня я понятия не имел, что это за ката. Теперь я только что проверил это, и imho, это просто причудливое название для того, что каждый здравомыслящий программист делает и изучает автоматически во время разработки: практика. Таким образом, недостаток для меня был бы: просто требуется дополнительное время, которое можно было бы использовать иначе.
Stijn

11
Хм ... очевидно, один из основных недостатков кода ката, по-видимому, заключается в том, что люди критикуют код ката, не понимая, что такое код ката :-)
Йорг Миттаг

19
@ JörgWMittag - Это потому, что термин «ката» является плохой аналогией, поскольку он подразумевает практику жесткой формы с небольшим практическим значением в реальных ситуациях. Применение слов боевых искусств, таких как «черный пояс» или «ката», для программирования или деловых ситуаций раздражает меня.
jfrankcarr

Ответы:


22

В принципе, я не вижу недостатков в коде ката. Вы пытаетесь выполнить одну и ту же задачу много раз, используя разные подходы и разные языки. Но

  1. довольно сложно внедрить его на рабочем месте. От вас обычно ожидают, что вы опытный или достаточно продуктивный. Я не говорю, что это было бы бесполезно (лучше потратить некоторое время на улучшение навыков нового найма, чем платить за не очень хороший код, который он напишет в будущем), но тем не менее это довольно сложно.
  2. Вы должны на самом деле попытаться улучшить в каком-то смысле. Написание одного и того же кода одним и тем же способом тысячу раз не улучшит вас (скорее, вы будете скучны). Вы должны понимать свои предыдущие ошибки, что пошло не так или не сработало, как ожидалось. Это самая важная часть. Это форма самообучения, поэтому вы должны учиться.

1
Я принял этот ответ, потому что он затрагивает вопрос напрямую (вместо терминологии «ката») и фокусируется на потенциальных проблемах практики кода ката. Нельзя сказать, что другие ответы не являются хорошими - на самом деле, я был бы рад принять больше, чем один!
Сардатрион - Восстановить Монику

43

Я думаю, что программирование ката, как и ката боевых искусств, в основном связано с формой над функцией. Это может научить вас писать элегантный код, но не научит вас решать проблемы, для которых вы пишете код. Я думаю, что лучший способ улучшить себя как программиста - это решать головоломки, которые требуют реального решения проблем, и работать над более крупными проектами, которые научат вас ценности хорошо продуманного кода таким образом, что код ката никогда не научит вас.

Кроме того, я думаю, что такие термины, как «кодовое ката» и «мастерство программного обеспечения», больше направлены на романтизацию нашей профессии, чем на описание чего-то нового или полезного.


4
Сделайте это +2 для этого предложения.
Эрик Дитрих

6
Хотя я согласен с тем, что решение проблем является хорошим способом усовершенствования программиста, обучение написанию элегантного кода также может быть полезным занятием. Мне бы хотелось, чтобы некоторые из первоначальных разработчиков кода, которые я сейчас поддерживаю, потратили время и усилия на написание элегантного кода, а не на копирование и вставку, чтобы просто заставить вещи работать.
Майк Партридж

1
+3 за комментарий Майка. В целом, на поддержание кода тратится гораздо больше времени, чем на его написание. Вы ожидаете, что мастерство будет применено, когда кто-то строит ваш дом, так как вы собираетесь жить в нем долгое время. То же самое следует применять, когда кто-то создает программное обеспечение, но в большинстве случаев это не так.
Калеб Брэйз

@KaptajnKold: Вы говорите по своему опыту? Я хотел бы услышать некоторые комментарии от кого-то, кто действительно попытался улучшить свои навыки через CodeKata и потерпел неудачу.
dzieciou

2
@dzieciou: У меня есть опыт в ката боевых искусств, я несколько лет занимался каратэ. И хотя я считаю, что есть некоторые полезные аспекты боя, которые можно извлечь из ката, я также считаю, что в конечном итоге это не очень эффективный способ тренировки. Вы должны тренироваться, как вы боретесь, как они говорят. Это если ваша цель - стать лучшим бойцом. Некоторые люди считают занятия ката радостным занятием само по себе. В этом нет ничего плохого. В конце концов, некоторые из них становятся очень хорошими. На ката.
KaptajnKold

20

Код ката просто занимает время.

Будучи полностью занятым разработчиком и отцом, я не хочу заниматься компьютерными хобби.

И я не думаю, что мой начальник заплатит мне за разработку приложений, не связанных с моим текущим проектом.


10
Есть ли какое-либо обучение, которое не требует времени? Если вам не повезло работать каждый раз над новыми проектами.
Den

38
Если вы не потратили хотя бы небольшое количество своего свободного времени на регулярное совершенствование своих навыков программирования, ваша профессиональная карьера находится в большой опасности.
Ладислав Мрнка

7
+1 к этому. Хотя я очень люблю программировать и могу зарабатывать деньги на том, что я люблю делать, я не вижу смысла в БОЛЕЕ программировании вне работы. У меня так много других увлечений (например, диджеинг, создание музыки, тяжелая атлетика, рисование и уличные танцы), что я не вижу смысла тратить больше времени на то, что я уже делаю 40 часов в неделю.
Андреас Йоханссон

7
@ Mouviciel: И это именно проблема: ваш босс готов заплатить за ваше профессиональное развитие, если это необходимо для проекта, но вы должны быть готовы улучшить свои навыки, не связанные с вашим текущим проектом - возможно, не связаны с вашим текущим Платформа вообще. Это то, что строит вашу карьеру / социальное обеспечение.
Ладислав Мрнка

6
@LadislavMrnka - я согласен с тобой. Тем не менее, Code Kata не является решением этой проблемы.
Mouviciel

13

Как боксер, я бы не согласился с принципом ката. Это слишком жестко, чтобы быть действительно полезным. На ринге вы должны понять, как применять принципы, которые вы изучили, в свободно текущей среде.

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

Самое главное, все учат вместе, как это будет фактически использоваться. Если вы можете написать самый красивый цикл for, но не можете понять, как вписать его в программу, тогда что в этом хорошего?

Я бы сказал, что если вы хотите попрактиковаться, то лучше было бы создавать инструменты самостоятельно или работать над инструментами, которые вы используете. Это требует отработки всех ваших навыков, и в конце концов вы можете получить что-то полезное.


место на. я тоже боксер / программист :).
Пол Санвальд

1
Кодовые каты не о жестком повторении; они больше работают над решением проблемы, а затем работают над улучшением вашего решения, пока вы не будете удовлетворены. Из Kata One: «Цель этого ката - практиковать более свободный стиль экспериментального моделирования. Ищите как можно больше разных способов решения проблем. Рассмотрите различные компромиссы каждого из них. Какие методы лучше всего использовать для изучения этих моделей? записывать их? Как вы можете проверить модель является разумным? "
Майк Партридж

4
Я согласен, что термин «ката» несовершенен, но не упустил из виду их точку зрения из-за названия. Кроме того, они не все проблемы со словом; из Kata Two: «Реализуйте процедуру бинарного поиска (используя приведенную ниже спецификацию) на языке и методике по вашему выбору. Завтра внедрите ее снова, используя совершенно другую технику. Сделайте то же самое на следующий день, пока у вас не получится пять совершенно уникальных реализации бинарной отбивки. (Например, одно решение может быть традиционным итеративным подходом, другое может быть рекурсивным, можно использовать функциональный стиль, передавая кусочки массива и т. д.). "
Майк Партридж

3
@MikePartridge Это иллюстрирует мою точку зрения. Ката будет включать один метод бинарного поиска, который улучшается каждый день, скажем, с меньшим количеством строк или меньшим количеством времени, затрачиваемым на его написание с нуля. Как описано понятие, важно определить его. Он мог бы просто назвать это практикой программирования, о чем и пишут статьи, не привлекая неправильный багаж. Ответственность за выбор слов и понятий, которые правильно определяют его идею, лежит на авторе, а не на жалобах на то, что его аудитория вызывает неправильные ассоциации из-за выбора метафоры.
Спенсер Рэтбун

3
@MikePartridge В моем случае, я считаю, что все программисты учатся / совершенствуются, или должны быть, все время. Таким образом, код ката - это метод, помогающий в достижении этой цели, и я ответил, что этот метод, на мой взгляд, не имеет смысла. Я полностью согласен с целью, но это был не вопрос.
Спенсер Рэтбун

11

С моей точки зрения главный недостаток в том, что это будет ужасно скучно. Также программисты, кажется, преуспевают в разработке программного обеспечения, которое делает что-то полезное или классное. Подход кода ката, казалось бы, противоположен этому.


2
Катас научит тебя новым вещам. Как это может быть противоположностью тому, что программисты стремятся сделать? Это также решает загадку, а не то, что большинство хороших программистов воспримут как «скучную». На самом деле, это в самом сердце взлома.
Конрад Рудольф

5
@KonradRudolph Я думал, что повторение было сердцем катам? Таким образом , вы бы решить проблему раз (новое и интересное , возможно) , но тогда вы бы держать на решении же снова и снова проблемы. Я едва посмотрел на Катаса, поэтому могу ошибаться.
Кевин Д

@Kevin Я согласен, что это звучит глупо (если вы специально не пытаетесь найти разные способы решения проблемы). Я никогда не делал «каты» как таковые, просто общие головоломки программирования.
Конрад Рудольф

Как проделывать одно и то же снова и снова, «обучая вас новым вещам»?

Из вашего ответа ясно, что вы не читали ссылку, представленную в вопросе.
Майк Партридж

8

Ката означает полную противоположность тому, к чему вы должны стремиться.

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

Термин ката (происхождение: 1950–55; <японский язык: форма, рисунок), используемый в боевых искусствах, и ваш вопрос касается запоминания мышечной памяти, как, например, сенсорного набора текста .

В оригинальном упражнении «Карате Кид», вощение машин, шлифовка полов, покраска забора - все это было обучено катам, совершенно вне контекста и в данном случае без объяснения только для обеспечения мышечной памяти. Только когда вошел сэнсэй и дал контекст пустых действий , они что-то значат.

Я думаю, что то же самое применимо и здесь, без наставника, чтобы поставить вещи в контекст, повторное решение проблем неправильно на нескольких языках не лучше, чем на одном. Без наставника, чтобы сказать вам, где улучшить, они пустая трата времени.

Это полная противоположность творческого решения проблем путем изучения новых вариаций идиом и семантики языка или платформы.

Если вы хотите иметь возможность печатать System.out.println()как можно проще, то практиковать это будет ката.

Если вы хотите улучшить решение проблемы в другой реализации, сократить требования к времени и / или пространству или применить более идиоматические принципы, это не то, что Kata поможет вам в этом.

Уже существует общепринятый в отрасли термин для повторного внедрения одного и того же снова и снова, после того, как он уже работает, стремясь к небольшим постепенным улучшениям и сомнительным преимуществам совершенства, он называется Gold Plating !

Термины, которые они должны были использовать, - это рефакторинг применительно к одному и тому же языку / среде выполнения / платформе. И портирование при перемещении рабочей программы на другой язык / среду выполнения / платформу. Ката, вероятно, была выбрана ошибочно, потому что она звучит хипстерски, круто и мистично, не понимая семантику полностью.

Решать различные сложные проблемы с небольшим планированием, опытом или руководством - это то, что большинство разработчиков, особенно начинающих разработчиков, должны делать каждый день.

Только ученые могут выполнять одно и то же упражнение снова и снова только для того, чтобы отточить конкретное решение. Умение иметь успешную карьеру разработчика является адаптацией , а не повторением.

Кто сказал, что нет умных людей, которым не нужно учиться после работы, и которые могут узнать все, что нужно знать, а иногда и больше за 8 часов работы?


Что если вы практикуете редизайн и улучшаете дизайн - повторяя процесс проектирования, не может ли этот термин применяться? Можете ли вы придумать лучший?
Билл К

термин для реорганизации и улучшения существующей системы - рефакторинг (рефакторинг кода - это «дисциплинированный метод реструктуризации существующего тела кода, изменения его внутренней структуры без изменения внешнего поведения»). Они выбрали Kata, потому что это звучит круто и мистично, без понимания семантики.

Термин рефакторинг - это совсем не то же самое, что практика рефакторинга. Любой может рефакторинг кода, это никоим образом не означает, что он делает это хорошо или практикует распознавание хороших возможностей рефакторинга. Хотя термин «Практика рефакторинга» является термином нисходящего происхождения, он не отражает самоотдачи, которую делает Ката, поэтому я думаю, что Ката может быть немного лучшим выбором, хотя я открыт для теории, что есть еще лучшая фраза.
Билл К

1
На самом деле Gold Platting означает «... дополнительные или более отточенные функции». То, что вы описываете, кажется более сродни преждевременной оптимизации, хотя и после факта.
Джошуа Дрейк

5

Я согласен, что метафора "ката" может быть не самой лучшей. Ката в каратэ выполняется с целью отработки определенного, дискретного движения, пока оно не может быть выполнено безупречно, четко и автоматически. Это не очень хорошо подходит для деятельности, требующей критического мышления и творчества. (Лучше бы, скажем, печатать).

Тем не менее, провал имени не является провалом деятельности. Какой возможный недостаток может быть в том, чтобы практиковать что-то, в чем кто-то хочет поправиться? Я полагаю, можно сказать, что время, потраченное на это, является недостатком с точки зрения альтернативных издержек, но на самом деле это инвестиции. Таким образом, время, потраченное на то, чтобы потренироваться в искусстве разработки программного обеспечения, отводится разработчикам программного обеспечения, поскольку деньги, потраченные на акции или облигации, являются долгосрочным вкладчиком / инвестором. Это не «недостаток» - это ставки на стол.


3

Вы поправляетесь, пытаясь делать вещи, которые сложны и просто недоступны вашим способностям; бросить вызов себе. Выполнение одного и того же «кодового ката» снова и снова, как в форме боевых искусств, этого не делает. Я думаю, что это стагнирует ваши способности, а не помогает развивать ваши навыки.

Он имеет свое применение в качестве метода практики в первый раз, но он ограничен. Я говорю людям использовать проект Euler вместо этого. Больше проблем и больше проблем.


Написание одной и той же программы снова и снова может быть полезным и интересным, например, если вы делаете это с использованием другого алгоритма и / или на другом языке каждый раз. Но, вероятно, это не ката.
9000

2
Прочитайте ссылку, указанную в вопросе; идея не является бессмысленным повторением, как вы, вероятно, предполагаете из названия.
Майк Партридж

@ 9000 На самом деле, именно так я понимаю Code Katas. Часто используется при изучении нового языка или при попытке нового подхода к уже решенной проблеме.
Джошуа Дрейк

3

Для меня главным недостатком этой техники, как я вижу, является ее неоптимальное использование вашего времени.

Учебная ценность этого упражнения также сомнительна: когда вы делаете что-то слишком много, чтобы стать лучше, обратная связь с экспертом очень важна. Без качественной обратной связи вы тоже чему-то научитесь, но есть шанс очень хорошо выучить неправильную вещь.

Не поймите меня неправильно, практика остается единственным способом стать хорошим программистом, а ката - это определенно форма практики. Но то же самое можно сказать и о решении задач в области кодирования, написания собственных «веселых проектов», изучения новых языков программирования и так далее. В конечном счете, вам нужно выбрать технику, с которой вы будете чувствовать себя наиболее комфортно, и убедиться, что у вас есть четкие указания на этом пути.


Как вы нашли руководство? Я борюсь с той же проблемой.
CodeYogi

1

Я верю, что без какой-либо формы ката вы никогда не станете великим программистом. Ката - это практика, это буквально означает. Возьмите это в качестве примера: спортсмен говорит: «Я просто покажу и пробежу 100-метровую черту, тренируюсь винтом». Это похоже на выигрышную стратегию? Это когда-либо было сделано таким образом?

Я предлагаю людям прочитать « Чистый кодер » дяди Боба , он углубляется в эту (и другие) темы профессионализма в области программирования.

О, и выдвигаемые аргументы, что вы не можете заниматься ката и воспитывать семью, - это просто оправдания. Говоря по опыту: дети в какой-то момент ложатся спать ...


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

2
-1 Обучение может происходить на работе, даже в оплачиваемое время (не знаю, почему люди, кажется, забывают об этом). Не все это либо чистая работа, либо чистое обучение.
joshin4colours

@JarrodRoberson сценарий, который вы только что изобразили, - это то, что солдат делает ежедневно. Итак, вы выбрали довольно плохую аналогию. Честно говоря, я должен быть рад людям, которые выполняют свою 9-5 работу, а потом идут домой и перестают учиться, поскольку это дает мне конкурентное преимущество.
ThaDon

3
У Мартина Фаулера однажды спросили о том, как потратить деньги на обучение ваших сотрудников: «Вы не боитесь, если вы обучите их, они уйдут?» и он ответил: «Нет, я боюсь, что если я их не обучу, они останутся!» , Не каждый работодатель видит в обучении расходы, а хорошие - в качестве инвестиций!

Решать различные сложные проблемы с небольшим планированием, опытом или руководством - это то, что большинство разработчиков, особенно начинающих разработчиков, должны делать каждый день. Я думаю, что это довольно точная аналогия. Только ученые могут выполнять одно и то же упражнение снова и снова только для того, чтобы отточить конкретное решение. Умение иметь успешную карьеру разработчика является адаптацией , а не повторением. Кто сказал, что нет более умных людей, которым не нужно учиться после работы, и они могут узнать все, что нужно, и даже больше за 8 часов.

1

Делать только каты в контексте боевого искусства бесполезно. Как уже было сказано, каты - это хореография движений, которая учит вас форме. Вы знаете движения, но не знаете, как их применять. Вы не знаете, в каких ситуациях они полезны. Если вы действительно хотите сделать что-то полезное с ними, вам нужно приложение (я), которое является Bunkai .

В контексте программного обеспечения, ката кода - это алгоритм, инструмент, шаблон проектирования или любая другая технология. Знание это хорошо, но вы должны применить это, чтобы понять это. Вы должны использовать это в различных контекстах, чтобы действительно справиться с этим. Бункай - это конкретная ситуация, в которой эта ката или ее часть полезна.

Я не вижу ничего плохого в этой методологии, вот как все осваивается: учиться чему-то, практиковаться, добавлять детали, практиковаться, добавлять еще детали, тренироваться и т. Д.


-1

Программирование - это искусство, как живопись или музыка. Когда кто-то становится музыкантом или артистом за деньги, вы можете сказать, что нет вдохновения, представление не стоит вашего времени. Если вы увлекаетесь искусством, ничто не может помешать вам практиковаться и постоянно совершенствовать его - каждый день совершенствуя одну технику, замечая нюансы, которые большинство людей никогда не увидят.

Всегда есть место для людей, которые счастливы быть барными музыкантами и малярами, но это совершенно другой класс талантов. Я полагаю, что большинство маляров посмеялись бы над идеей практики, но я держу пари, что художник, который занимался исследованиями и практиками, - по сути, признание их работы как искусства сделало бы заметно лучшую работу, даже над чем-то столь же обыденным, как покраска вашего дома. ,

Некоторые люди признают ценность практики, а некоторые - нет. Одно это должно иметь ценность, если вы в состоянии оценить, и вы ищете людей, которые могут сделать искусство (простой, простой, понятный код), а не просто решение.

пс. Я не называю себя удивительно артистичным или что-то в этом роде - я не занимаюсь Ката абстрактными проблемами, но я осознаю ценность и пытаюсь немного реорганизовать свой производственный код.


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

Не смешивайте тренировки с практикой. Чрезмерная подготовка сильно отличается от чрезмерной практики, и если вы не думаете, что уровень выражения в вашем коде проявляется во сроках доставки и стабильности кода, я не знаю, есть ли у нас общая основа для обсуждения.
Билл К

Неважно, что я думаю, я знаю, что большинство клиентов не узнают и не будут заботиться о тщательно созданном коде и о том, насколько элегантно он создан, пока приложение работает в большинстве случаев. То же самое, что большинство населения никогда не интересовало качество звука и видео VHS и сильно сжатых интернет-видео или кассет, а теперь и сильно сжатых mp3-файлов, которые устраняют все эти нюансы без каких-либо жалоб. Чрезмерная подготовка хуже, чем чрезмерная практика, чрезмерная подготовка заставляет игнорировать «достаточно хороших» и несчастных в индустрии программного обеспечения.

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

Если вы не думаете, что хорошо сделанное программное обеспечение доставляется быстрее, дешевле и просто лучше, чем программное обеспечение, созданное мастерами, вы не увидите, что оно сделано правильно. Весьма маловероятно, сколько людей смотрели мастер-музыканта, музыканта или играли с / против профессионального спортивного игрока - они просто не так уж часто встречаются, и в нашей отрасли НАМНОГО сложнее распознать, но разница в талантах одинакова как и результаты. Один художник может превзойти 5 мастеров по скорости и качеству, но немногие из них достаточно удачливы, чтобы увидеть это, поэтому они не верят, что это существует.
Билл К
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.