Представьте: вы сидите в кофейне в наушниках с шумоподавлением, работаете за терминалом, а на фоне играет драматическая музыка в стиле синти-поп. Экран мигает зелёным текстом, пока вы в одиночку отлаживаете распределённую систему, используя сырой ассемблер. Поздравляем — вы только что провалили собеседование по программированию в реальной жизни.
Правда в том, что разработка программного обеспечения — это не одиночный вид спорта. Давайте разберём миф о «гениальном программисте» с хирургической точностью стека трейса:
Разрушение мифов с помощью кода
Давайте рассмотрим распространённый сценарий, когда сотрудничество спасает ситуацию. Рассмотрим этот код на Python, написанный нашим гипотетическим одиноким гением:
def process_data(data):
# Получает данные из API, преобразует, сохраняет в БД
temp = [x*2 for x in data if x % 2 ==0]
db = MySQL.connect()
cursor = db.cursor()
for item in temp:
cursor.execute(f"INSERT INTO numbers VALUES ({item})")
return len(temp)
Наш герой может похлопать себя по спине, пока команда не укажет:
- Нет обработки ошибок для подключений к базе данных;
- Уязвимость к SQL-инъекциям;
- Отсутствие пакетной вставки операций;
- Магические числа без объяснения;
- Отсутствует проверка данных.
Теперь посмотрите, как командный вклад преобразует его:
def process_data(data: list[int], batch_size: int = 100) -> int:
"""
Обрабатывает целочисленные данные с проверкой, выполняет пакетные вставки в базу данных
и возвращает количество обработанных чётных чисел
"""
validate_input(data)
even_numbers = [x * 2 for x in data if is_even(x)]
with DatabaseConnection() as db:
batched_inserts(even_numbers, batch_size, db)
return len(even_numbers)
Разница между этими версиями? Около трёх проверок кода, две диаграммы архитектуры на белой доске и один жаркий спор о том, являются ли табуляции лучше пробелов (это не так).
Сборник практик командной работы
Вот как создавать программное обеспечение, похожее на джаз-ансамбль, а не на соло-музыканта:
- Парное программирование Ежедневно меняйте партнёров по кодированию. Это как свидание вслепую, но с подсветкой синтаксиса.
- Бинго-карты для PR
Создайте контрольные списки для рецензирования с такими пунктами, как:
- Нарушен принцип единственной ответственности;
- Найдены магические числа;
- Отсутствуют тесты для крайних случаев;
- Документация написана на клингонском языке.
- Визуализация систем перед реализацией
- Время праздновать ошибки Отмечайте, когда кто-то находит ошибку в вашем коде. Серьёзно — приносите кексы на следующую встречу по устранению ошибок.
Почему это важно
Команда Google Chrome обнаружила, что код, проверенный четырьмя и более инженерами, содержит на 60% меньше проблем после выпуска. Между тем исследования показывают, что команды создают в 10 раз больше ценности, чем любой отдельный участник, благодаря коллективной собственности на код.
Так что в следующий раз, когда вы почувствуете давление и захотите стать супергероем в мире кодирования, помните: даже Железному Человеку нужен Воитель. Или хотя бы Д.Ж.А.Р.В.И.С. А теперь найдите себе напарника по программированию — миру нужно больше динамичных дуэтов и меньше разочарованных монологов в тёмных домашних офисах.
Какой у вас был самый смешной момент в командной разработке? Поделитесь своими военными историями в комментариях, пока я пойду объяснять HR, почему нам нужен бюджет на резиновых уток.