О невозможности хорошего кода
О невозможности хорошего кода
Когда в этой истории Джон спрашивает: «Хороший код стал невозможным?», в действительности он спрашивает: «Профессионализм стал невозможным?» В конце концов, в этой печальной истории пострадал не только код. Пострадала его семья, его работодатель, заказчики и пользователи. В проигрыше оказались все.[11] И проигрыш объясняется непрофессионализмом.
Кто здесь действовал непрофессионально? Джон недвусмысленно намекает, что это были руководители «Горилла Маркета». Схема, описанная им в конце, ясно указывает на их непорядочное поведение. Но было ли это поведение плохим? Я так не думаю.
Они хотели иметь приложение для iPhone к «черной пятнице». Они были готовы заплатить за него. Они нашли кого-то, кто возьмется за эту работу. Так в чем их винить?
Да, в процессе общения явно возникали проблемы. И очевидно, руководители фирмы-заказчика не знали, что такое веб-служба; это обычное дело – одно подразделение крупной корпорации не знает, чем занимается другое. Но все это следовало предвидеть. Джон даже признает это, когда говорит: «Несмотря на годы постоянных напоминаний о том, что каждая затребованная заказчиком функция всегда оказывается сложнее, чем кажется из его объяснений…»
Итак, если виновником был не «Горилла Маркет», то кто?
Возможно, непосредственный работодатель. Джон явно не говорит об этом, но намекает в своей снисходительной фразе: «В бизнесе фигура заказчика играет важную роль». Может, работодатель Джона раздавал неразумные обещания «Горилла Маркету»? Он оказывал давление на Джона (прямое или косвенное), чтобы эти обещания оправдались? Джон не говорит об этом, так что мы можем только догадываться.
Но даже если так, за что в этой истории отвечает сам Джон? Я возлагаю всю ответственность исключительно на него. Это Джон согласился на исходный двухнедельный срок, отлично зная, что проекты обычно оказываются более сложными, чем кажется на первый взгляд. Это Джон согласился написать серверную часть на PHP. Это Джон согласился на требование о регистрации по электронной почте и ограничении срока действия купона. Это Джон работал по 20 часов в сутки и по 90 часов в неделю. Это Джон отказался от своей семьи и нормальной жизни, чтобы не сорвать срок сдачи.
Почему Джон так поступил? Он об этом говорит вполне определенно: «Я нажал кнопку „Отправить“, откинулся в кресле и с довольной ухмылкой начал представлять себе, как заказчики несут меня на руках, а на 42-й улице походит парад, где меня венчают лаврами „Величайшего Разработчика Всех Времен“». Короче говоря, Джону захотелось быть героем. Он увидел шанс добиться славы и ухватился за него.
Профессионалы часто совершают героические дела, но не потому, что хотят быть героями. Профессионалы становятся героями, когда они хорошо выполняют свою работу, без нарушения сроков и бюджета. Стремясь стать «героем дня», Джон действовал непрофессионально.
Джон должен был сказать «нет» на исходный двухнедельный срок. А если не сказал – то должен был сделать это, когда обнаружил, что никакой веб-службы для получения данных не существует. Он должен был сказать «нет» в ответ на требование регистрации по электронной почте и ограничения срока действия купонов. Он должен был сказать «нет» на все, что приводит к немыслимым жертвам и перерасходу времени.
Но самое главное, Джон должен был сказать «нет» своему внутреннему решению о том, что выполнить работу в установленный срок можно только одним способом – устроив неразбериху в коде. Обратите внимание, что говорит Джон о хорошем коде и модульных тестах: «Чтобы компенсировать возросший объем работы, нам придется программировать немного быстрее. Забудьте про паттерн „Абстрактная фабрика“. Заменяем паттерн „Компоновщик“ большим и уродливым циклом for – некогда!»
И еще раз:
«Я провел эти восемь дней за яростным программированием. Я пустил в ход все возможные средства, чтобы справиться со своей работой: копирование/вставку (AKA повторное использование кода), „волшебные числа“ (чтобы избежать дублирующихся определений констант с их последующим – о ужас! – повторным вводом) – и НИКАКИХ модульных тестов! (Кому нужны проблемы в такое время, они только отобьют охоту работать!)»
Все эти решения и стали истинной причиной катастрофы. Джон принял тот факт, что прийти к успеху можно только через непрофессиональное поведение, и получил то, чего заслужил.
Возможно, это звучит излишне сурово. Я этого не хотел. В предыдущих главах я описал, как неоднократно совершал ту же ошибку в своей карьере. Искушение «быть героем» и «решать проблемы» велико. Однако все мы должны понять, что отказ от профессиональных принципов не решает проблемы, а создает их. Учитывая сказанное, я наконец-то могу ответить на исходный вопрос Джона:
«Хороший код стал невозможным? Профессионализм стал невозможным?»
Я говорю «нет»!
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
9.1. Выбор хорошего пароля
9.1. Выбор хорошего пароля Многие пользователи используют пароли вроде 1, 1234, qwerty, а потом удивляются, почему их почтовый ящик или страничка в социальной сети взломана. Ответ прост – к ней подобрали пароль. Причем злоумышленнику было это сделать очень просто (точнее
1.11. Найдите хорошего партнера, работающего в сфере веб-разработок
1.11. Найдите хорошего партнера, работающего в сфере веб-разработок Сложность создания и поддержки современного веб-сайта настолько велика, что решение этой задачи только собственными силами компании, как правило, невозможно и экономически нецелесообразно (хотя на первый
§ 83. Секреты хорошего гипертекста
§ 83. Секреты хорошего гипертекста 18 февраля 2002Учебники по гипертексту обходят стороной вопросы: где именно нужно делать ссылки и сколько их должно быть.Есть несколько способов определения хорошего гипертекста (речь не идет о меню, разделах со ссылками и прочих
12.3. Размер кода
12.3. Размер кода Наиболее эффективный способ оптимизировать код заключается в том, чтобы сохранять его небольшой размер и простоту. Ранее в данной книге уже рассматривалось множество весомых причин для сохранения небольшого размера и простоты кода. В данной главе
15.4. Обеспечение невозможности модификации своих объектов в функции-члене
15.4. Обеспечение невозможности модификации своих объектов в функции-члене ПроблемаТребуется вызывать функции -члены для константного объекта, но ваш компилятор жалуется на то, что он не может преобразовать тип используемого вами объекта из константного в
Просмотр CIL-кода
Просмотр CIL-кода В дополнение к тому, что вы можете видеть пространства имен, типы и их члены в компоновочном блоке. Ildasm.exe дозволяет также просмотреть CIL-инструкции любого члена. Например, если выбрать двойным щелчком метод Main() класса CalcApp, то появится отдельное окно, в
8.1. Общие принципы хорошего программирования
8.1. Общие принципы хорошего программирования Главный вопрос, касающийся хорошего программирования, — это вопрос о том, что такое хорошая программа. Ответ на этот вопрос не тривиален, поскольку существуют разные критерии качества программ.Следующие критерии
8.3.1. Некоторые правила хорошего стиля
8.3.1. Некоторые правила хорошего стиля • Предложения программы должны быть короткими. Их тела, как правило, должны содержать только несколько целей.• Процедуры должны быть короткими, поскольку длинные процедуры трудны для понимания. Тем не менее длинные процедуры
13-я КОМНАТА: Лучшее — враг хорошего
13-я КОМНАТА: Лучшее — враг хорошего Автор: Владимир ГуриевЧеловека очень просто сделать счастливым.Надо сначала что-то у него отнять, а потом вернуть. Мне, например, вчера вернули горячую воду, которой не было три недели, и я уже второй день нахожусь на седьмом небе. Мне до
Смартфон за $20: а что хорошего? Евгений Золотов
Смартфон за $20: а что хорошего? Евгений Золотов Опубликовано 08 мая 2014 Смартфон шагает по планете. Пусть из каждых шести землян, пользующихся мобильной связью, пока лишь двое (по самым смелым оценкам — больше трёх) делают это с помощью смартфонов — с