Недоліки ката-коду


41

Код ката - це концепція, яка пропонує відточити майстерність програміста, роблячи невеликі проблеми багато разів, намагаючись покращити код на кожній ітерації. Назва походить від аналогії до ката-бойового мистецтва, де форми (ака ката) - це практики, які здійснюються знову і знову, що призводять до вдосконалення.

З реакції, яку я отримав на своє останнє запитання по темі, я хотів би знати, що є недоліком такого підходу?


+1, щоб протидіяти непродуктивним -1 застосованим. Як видається у мене сумніви щодо «Ката-коду», справжнє питання, але я не можу точно вказати, чому.
mattnz

9
до сьогодні я поняття не мав, про що йдеться у цій справі. Тепер я просто перевірив це, і я це просто фантазійне ім'я для чогось, що кожен розумний програміст робить і навчається автоматично під час розвитку: практикується. Тому недолік для мене був би: це просто зайвий час, який можна використати інакше.
stijn

11
Гм ... мабуть, одним із головних недоліків кодової ката є те, що люди критикують код-ката, не розуміючи, що таке ката-код :-)
Jörg W Mittag

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

Як боксер, я повинен був би не погодитися з принципом ката. Це занадто жорстко, щоб бути фактично корисним. На рингу ви повинні зрозуміти, як застосовувати принципи, які ви навчились у вільному потоці.

Це не означає, що навчання та вдосконалення техніки не слід робити. Практикуючи на мішках, ви можете працювати за допомогою удару та відчувати, як ви його кидаєте, те саме, що і ката. Але це не так жорстко. Ви практикуєте багато речей одночасно, рухаєтесь по мішку, кидаєте зі стійкої платформи, прицілюєтесь, дихаєте, список продовжується.

Найголовніше, що все вивчається разом так, як воно буде фактично використовуватися. Якщо ви можете написати найкрасивіше для циклу коли-небудь, але ви не можете зрозуміти, як його вписати в програму, то яка користь?

Я б сказав, що краще, якщо ви хочете практикувати, - це будувати собі інструменти або працювати над інструментами, якими ви користуєтесь. Це вимагає виконувати всі свої навички, і врешті-решт у вас може бути щось корисне.


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

1
Каталогічні коди - не про жорстке повторення; вони більше працюють над тим, щоб вирішити проблему, а потім працювати над вдосконаленням вашого рішення, поки ви не задоволені. З Ката Першої: "Мета цього ката - практикувати більш слабкий стиль експериментального моделювання. Шукайте якомога більше різних способів вирішення питань. Розгляньте різні компроміси кожного з них. Які методи найкраще використовувати для вивчення цих моделей? Для записуючи їх? Як можна перевірити модель розумною? "
Майк Партрідж

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

3
@MikePartridge Це є прикладом моєї точки зору. Ката включатиме один метод двійкового пошуку, який з кожним днем ​​вдосконалюється, скажімо, з меншою кількістю рядків або менше часу, щоб його написати з нуля. Як описано поняття, важливо визначити його. Він міг би просто назвати це практикою програмування, про що йдеться у статтях, не привозячи неправильного багажу. Наголос на авторі підбирає слова та поняття, які правильно визначають його ідею, а не скаржиться, що його аудиторія тягне неправильні асоціації через свій вибір метафори.
Спенсер Ратбун

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

11

З моєї точки зору, головний недолік - це було б жахливо нудно. Також програмісти, здається, процвітають у розробці програмного забезпечення, яке робить щось корисне чи круте. Підхід до кодового коду здається протилежним до цього.


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

4
@KonradRudolph Я думав, що повторення є серцем ката? Таким чином, ви вирішили б проблему раз (можливо, нову і захоплюючу), але потім будете продовжувати вирішувати одну і ту ж проблему знову і знову. Я ледве дивився на Катаса, щоб я міг помилитися.
Кевін Д

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

Як робиться те саме і знову і знову "навчати тебе новим речам"?

З вашої відповіді зрозуміло, що ви не прочитали посилання, подане у питанні.
Майк Партрідж

8

Ката означає точно протилежне тому, до чого слід прагнути.

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

Термін Ката (походження: 1950–55; <японське: форма, візерунок), як використовується в бойових мистецтвах, і ваше питання стосується рота запам'ятовування м’язової пам’яті, як дотик на дотик .

У первісному карате-маляті воском машини, шліфуванням підлог, фарбуванням огорожі це були всі катаси, яких навчали, абсолютно поза контекстом і в цьому випадку без пояснень лише для забезпечення м'язової пам’яті. Тільки поки сенсей не прийшов і не дав контексту цих порожнистих дій, що вони нічого не означають.

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

Це якраз протилежність творчому вирішенню завдань шляхом вивчення нових варіацій ідіом та семантики мови чи платформи.

Якщо ви хочете вміти набирати System.out.println()якомога більше зусиль, то практикуючи це буде Ката.

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

Існує вже прийнятий галузевий термін для повторного втілення того ж самого випадку знову і знову після того, як він вже працює, прагнучи до невеликих поступових удосконалень та сумнівних переваг досконалості, його називають Gold Plating !

Терміни, які вони повинні були використовувати, - це Refactoring, коли вони застосовуються до тієї ж мови / часу виконання / платформи. І Перенесення під час переміщення робочої програми на іншу мову / час виконання / платформу. Ката, ймовірно, була обрана помилково, тому що вона звучить хіпстерно, класно і містично, не розуміючи повністю семантики.

Вирішення різних складних проблем із невеликим плануванням, досвідом чи вказівками - це те, що доводиться робити щодня більшості розробників, особливо молодшим розробникам.

Тільки вчені можуть робити одну і ту ж вправу знову і знову заради налагодження конкретного рішення. Навик успішної кар'єри розробника полягає в адаптації , а не повторенні.

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


Що робити, якщо те, що ви практикуєте, - це перепроектування та вдосконалення дизайну - повторення процесу проектування, не вдалося б застосувати цей термін? Ви можете придумати кращий?
Білл К

терміном перепроектування та вдосконалення існуючої системи є рефакторинг ( рефакторинг коду - це "дисциплінована техніка реструктуризації існуючого коду, зміна його внутрішньої структури без зміни зовнішньої поведінки"). Вони вибрали Ката, бо це звучить круто і містично, не розуміючи семантики.

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

1
Насправді Золота платформа стосується "... додаткових або більше відшліфованих функцій". Те, що ви описуєте, схоже на передчасну оптимізацію, хоча і після факту.
Джошуа Дрейк

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.