Чому «Гра життя» Конвея використовується для відступу коду?


15

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

Одне, чого я досі не розумію, - це те, що "Гра життя" є хорошою проблемою для TDD, і що таке хороший і поганий TDD для цього.

Зрозумійте, це досить відкрите питання, тому не соромтесь коментувати.


Це відчувається як дуже орієнтоване на обговорення питання, яке найкраще було б мати у нашому Інженерному чаті .
Адам Лір

@Anna Lear: Дякую, але не бажаю спілкуватися, шукаю відповіді. Якщо це не гарне питання, це добре.
помилки

3
@AnnaLear Я думаю, що це питання більше, ніж тематика, ніж ОП дає себе.
Том Сквайрс

1
@Том я думав про це самостійно, і радий бачити, як це добре. Щасливий, що помилився. :)
Адам Лір

Відповіді:


26

Спочатку гра «Життя життя Конвей» була обрана тому, що у нас був аплет Java на роботі над першим кодовим рекреацією у січні 2009 року. Ціл дня полягала в тому, щоб експериментувати з деякими ідеями навколо розробленої часом практики, і ми просто вибрали аплет GoL, тому що ми його мали.

Після цього, хоча, як пара активних фасилітаторів (зокрема, я під час моєї подорожі дорожнього руху в 2009 році та Алекса Болбоаки в Бухаресті) досліджувала використання GoL як інструменту навчання. У той же час ми розвивали формат кодерекреації таким, яким він став сьогодні. У 2009 році Алекс спробував принаймні ще одну проблему (забиття рук у покер), але не вважав її такою корисною, як GoL. Докладніше про історію можна знайти на веб-сайті http://coderetreat.org/history

Coderetreat зосереджується на вдосконаленні нашого розуміння простого дизайну (зокрема, 4 правил простого дизайну), тестової розробки та інших основних аспектів розробки програмного забезпечення. GoL має перевагу, оскільки вона є дуже простою проблемою, яку можна зрозуміти, будучи ще дуже багатою з точки зору структур. Він легко надає частини системи, які можуть бути використані як приклади всіх тем, які ми практикуємо під час кодування. Наприклад, загальна реалізація, яка приймає (x, y) параметри в декількох методах, - це чудова можливість поговорити про принцип DRY (кожен предмет повинен мати одне і лише одне представлення у вашій системі) щодо топології система. Є багато інших аспектів, які можуть бути використані як приклади створення дизайну, що мінімізує вартість змін.

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


10

Гра життя Конуея була б добре підходить, оскільки це досить простий набір кодування, який має надзвичайно потужні результати. Що стосується його використання для керування тестовими розробками, я би ставлю його на те, що тести досить складно написати, оскільки результати, які ви шукаєте, не очевидні з коду, який ви пишете. Написання коду, який отримує планер - це досить хитрість, якщо ви цього не робили раніше чи не робили це протягом тривалого часу. Таким чином, він підходить для розтягування мистецтва дисципліни, особливо, коли це виконується в парному програмуванні, як зазвичай TDD.

Що стосується того, щоб ви навчали корисних речей; це вправа у вигляді бічного мислення. Ви повинні осмислити, як буде функціонувати ваш код, запустити його, побачити його збій, збирати дані, рефактор та продовжувати ітерацію. Всі ці речі мають вирішальне значення для TDD. Пов’язавши його з реальним світом, це схоже на того, щоб клієнт вручив вам розпливчастий документ із вимогами, який просто говорить "Я хочу X". Таким чином, ви даєте їм X, але потрапляння на X може бути складним. Гра життя Конуея добре навчає цьому. Це також досить легко кодувати і зазвичай не приймає тонни коду для цього. ( APL є одним з найбільш екстремальних прикладів впровадження.) Отже, цілком підходить для коротких сеансів відступ повинен мати швидше тиждень або два тижні ітерації, як це зазвичай можна знайти у виробничих умовах.


10
Я б вважав, що планер - це "надзвичайна" поведінка. Ваші одиничні тести потребують лише кодування правил життя та загибелі клітин, визначених певною кількістю сусідів.
Роберт Харві

1
Планер, безумовно, нове поведінка. Деякі учасники кодекретрек будують кілька великих тестів, які включають такі речі, як планер, але це тести наведення, а не тести, орієнтовані на одиницю / tdd. Поведінка випливає з побудови правил, які добре визначені.
coreyhaines

3

Гра життя - в одній руці дуже простий набір правил, з іншого містить деякі найгірші застереження просунутого програмування, пов’язані зі масштабованістю . Хоча результати детерміновані, виникає проблема нескінченного ігрового поля та нескінченної кількості осередків для обробки.

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

Ви отримали відомий вхід і відомий вихід після X ітерацій, і ви знаєте всі кроки, щоб дістатися туди ... за винятком того, що кроки займають занадто багато і занадто довго. Ви повинні виконати досить екстремальні оптимізації, щоб вписатись у специфікації. Тривіальний алгоритм зі скануванням двофазного масиву бітів 2d фіксованого розміру стає абсолютно неадекватним, оскільки його продуктивність погіршується з розміром O (n ^ 2). Поводження із заповненими блоками як новими породженими об'єктами раптом з'їдає тонни пам’яті та стає повільною. Поділ всього на дошки обмеженого розміру працює іноді, іноді не вдається ...

А оскільки більшість "глобальних" тестів не вдасться до стандартних показників продуктивності, вам потрібно розробити менші цілі, менші субтести, які дадуть застереження прасувати ...


2

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

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

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

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.