Давайте представим, что на свете есть крутые программисты — намного продуктивнее, точнее в принятии решений и богаче нас с вами. Не Керниган, Торвальдс или Кармак, а обычные ребята, сидящие за соседним столом. На самом деле, у меня даже есть друзья — такие крутаны. Я всегда смотрел на них и удивлялся: как им удаётся так (много шипить|правильно принимать решения|мало спать)? Мне вот если и удаётся, то редко, особенно в контексте работы.
Давайте разберёмся, что в них особенного.
🔥 Крутаны сначала делают, чтобы их код работал. Недописанная программа — худший вариант её существования: она не решает никаких проблем, а только создаёт; она уродлива по своей структуре; хуже всего — она оставляет кучу вопросов "а если...", ответов на которые уже никогда не получить.
На этом этапе код может быть кривым и глючным, тормозить и не проходить ревью коллег — но он уже существует и работает.
Как и любой творец, программист не понимает всех свойств своей программы, пока не побалуется с ней вдоволь, не попробует порефакторить так и эдак, не заметит проблем в первом, наивном исполнении. Поэтому даже грубый работающий прототип чрезвычайно полезен — и, главное, разносит в пух и прах прокрастинацию и запускает думалку на полную катушку.
🎯 Потом крутаны убеждаются, что программа решает задачи, стоящие перед ней — помочь пользователям добиться своих целей, впечатлить инвесторов, порадовать проджект-менеджера или улучшить архитектуру системы. Инсайты, полученные на этапе прототипирования, дополняются обратной связью от пользователей и стейкхолдеров — и становится понятно, что именно нужно делать на самом деле.
Контекст может быть разный — корпоративный, стартаперский или любой другой. Важно, что уже можно правильно спланировать разработку и разделить обязанности в команде, собрать полезный и не страшный MVP, получить первые результаты от введения системы в эксплуатацию.
🏅 И только в самом конце крутаны тратят силы на увеличение эффективности кода и уменьшение издержек его существования: подбирают эффективные алгоритмы, лаконичные структуры данных и оптимальную конфигурацию системы, делают код понятным и поддерживаемым, пишут интеграционные тесты, чтобы не ломать систему с каждым следующим обновлением.
Больше 15 лет назад, только начиная заниматься программированием, я сразу понял эти прописные истины. И следующие лет 10 всё делал наоборот.
Мой код не работал, а я не заканчивал проекты и не получал никаких результатов. Мне было интереснее всего написать код "правильно" и сделать его быстрым (недаром я впирался в Си, Ассемблер и прочую низкоуровневую шнягу), подобрать "наилучшую" архитектуру, пропустить все полезные промежуточные шаги и сразу сделать приложение, решающее все задачи. Разумеется, доступные моему прозорливому взгляду ещё до начала работы.
Проблема в том, что так не бывает — по крайней мере, у меня. Не получается перескочить десятки итераций написания кода и создания продукта. Мозг отказывается работать и сползает в прокрастинацию, пусть даже и с учебником по очередной технологии. Разумеется, большая часть моих программ так и лежит в ящике для недописанных шедевров.
Не повторяйте глупых ошибок, будьте крутанами! Пишите код, который работает, показывайте результаты как можно раньше, переписывайте и дорабатывайте его так часто, как необходимо, и оптимизируйте в последнюю очередь 🤘
А пока будете обдумывать следующий рефакторинг, поделитесь этим постом с друзьями и коллегами 😜