RSS Telegram YouTube Apple Яндекс Spotify Amazon Почта

57. "Modern Software Engineering" book

23.06.2024

Скачать

К списку выпусков

"Modern Software Engineering" book

Недавно мы столкнулись с ошибкой в нашем сервисе распознавания текста, который безупречно работал в течение многих лет. Этот сервис загружает фото на Amazon S3, получает ссылку и отправляет ее в Google Vision, который возвращает распознанный текст. Однако на этой неделе сервис перестал возвращать текст. Первой мыслью было, что у нас мог закончиться баланс, но вскоре мы поняли, что проблема в другом. Эта ситуация подчеркнула ключевой недостаток в нашей методологии отладки: предположения вместо сбора данных и формулирования гипотез на их основе.

Этот инцидент заставил меня задуматься над идеями из книги "Современная разработка программного обеспечения". Автор утверждает, что Agile является современной моделью разработки ПО, заменяющей старый метод Waterfall. Хотя я не совсем согласен с полным отрицанием метода Waterfall автором, сравнение оказалось интересным.

Waterfall — это линейная и последовательная модель разработки: дизайн, реализация и поддержка. Это как настоящий водопад — как только перейдешь к следующему этапу, назад уже не вернешься. Этот метод хорошо работал в 70-е годы, когда требования к ПО были проще и хорошо определены с самого начала. Однако в современном быстроменяющемся мире требования часто меняются, и начальные предположения могут быть ошибочными. Эта непредсказуемость привела к росту популярности Agile, непрерывной интеграции (CI) и микросервисов.

Agile подчеркивает два ключевых концепта: итеративность и инкрементализм. Итеративность означает постоянное совершенствование одной функции. Вместо того чтобы развернуть полностью готовую функцию, вы запускаете прототип и постепенно улучшаете его на основе обратной связи. Этот подход экономически эффективен, минимизируя инвестиции в неопределенные области и быстро проверяя идеи.

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

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

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

"Современная разработка программного обеспечения" проливает свет на эти современные методологии, показывая, как они помогают нам быстро и эффективно адаптироваться в постоянно меняющемся мире.