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

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

Все было очень театрально

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

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

В этом что-то не так. Код не выписывается сам, извините, и вы могли видеть, как эти группы распадаются, и люди уходят домой очень неприятным образом. После всех этих обсуждений отведенное время истекло, и члены этой группы один за другим вспомнили, что им есть куда пойти. Они сказали: «Извини, мне нужно успеть на последний поезд, увидимся в следующий раз» и уехали. Обратите внимание, что никогда не было обсуждения «что мы здесь делаем?» или «что мы делали сегодня?» Было такое ощущение, что если интересные разговоры выдохлись, это уже не весело, и теперь нам будет лучше, если мы пойдем домой. И интересно, и весело!

Что ж, вот несколько вещей:

Если вы не компилируете и не запускаете, вы не добиваетесь прогресса

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

Итак, когда это будет сделано? Какое место занимает обсуждение в цикле кодирования? Между кодированием.

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

Мы обсуждаем с кодом

Программное обеспечение - это создание прототипов. Доска? Значит, слишком широкий чат. Подходит для интервью. Плохо для производительности. Актуальный код? Да, мы так разговариваем. Нужно ли нам помещать в обсуждаемый код каждый мьютекс и условную переменную? Конечно, нет! Мы доберемся до этого, но начнем с кода scrapy. Возможно, нам потребуется кодировать и обсуждать API или то, как будут выглядеть наши тесты.

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

А как насчет спецификаций и требований? Это тоже обсуждения, поэтому ответ тот же.

Мы определяем и записываем требования между кодированием

А как насчет исследований? Это также обсуждение (часто одностороннее, путем чтения отчетов) с людьми, которые делали то же самое раньше. То же самое.

Мы занимаемся исследованиями в перерывах между кодированием

Как я могу написать код перед исследованием? Простой.

Код возникает из-за вопросов

Предположим, что возникает вопрос: «Как получить среднее значение массива?».

Теперь те, кто обсуждает группу людей, сразу же начинали с вопросов. Какой список? Что в этом есть? Насколько он большой? Но это пустая трата времени. Это обсуждение, и оно отвлечет нас.

Ответ на вопрос таков:

print(average(array))

Верно? Поместите это в компилятор. Это не удается! Ага! Нам есть над чем поработать. Нам есть что обсудить. Мы не знаем, что это за массив, и компилятор возвращает нам это. Только теперь у нас есть следующий вопрос. На самом деле это просьба.

«Дайте мне массив». Вот массив:

array = [3, 43, 4, 4, 12] print(average(array))

Мы бежим. Компилятор снова жалуется. «Средний» не определяется. Большой! Вот среднее:

def average(array): return 43 array = [3, 43, 4, 4, 12] print(average(array))

Отлично - у нас что-то работает! На нем напечатано 43. «Это правильно?», - спрашиваем мы? Один говорит нет. Среднее из этих чисел - 13,2! Ага!

def average(array): return 43 array = [3, 43, 4, 4, 12] assert 13.2 == average(array)

Теперь утверждение неверно. И мы продолжаем идти, пока в конце концов не обнаружим и не получим то, что хотим.

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

  • Мы будем использовать Python
  • Массив - это массив целых чисел
  • В массиве относительно небольшое количество целых чисел.
  • Мы начинаем с требования видеть результат на экране и заканчиваем утверждениями.

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

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

Если вы не компилируете и не запускаете, вы не добиваетесь прогресса

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

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

Спасибо за прочтение. Если вам понравился этот, вы должны подписаться на меня для следующего, или проверить мою последнюю историю: