Развитие — это итеративное создание чего-то нового и полезного.
Когда мы думаем о развитии, часто на ум приходит разработка новых продуктов. Это отличается от производства, которое выпускает отдельные продукты; вместо этого оно включает создание проектных спецификаций или форм для продуктов.
Таким образом, чертежи или формы, созданные в процессе разработки нового продукта, многократно используются на заводах для производства многочисленных идентичных продуктов.
Существуют также такие применения, как развитие индивидуальных способностей или развитие общества и наций. Это подразумевает не просто увеличение того, чем человек обладает, но способность многократно использовать и извлекать выгоду из развитых способностей.
Хотя экономическая мощь отдельных лиц и обществ может колебаться в зависимости от экономических условий, развитые способности по своей сути являются постоянными.
Даже если они уменьшаются, это считается упадком, а не взлетами и падениями экономического процветания.
Помимо этого, существует также развитие технологий и знаний. В отличие от способностей отдельных лиц или конкретных обществ, они обладают характеристикой легкой доступности.
И среди продуктов, способностей, знаний и технологий, которые являются результатами этих разработок, некоторые могут способствовать последующему развитию.
Разрабатывая такие полезные результаты, расширяется сфера развития, а также повышаются эффективность и качество.
Разработка программного обеспечения с использованием ИИ
Как правило, разработка требовала значительных временных и трудовых затрат. Особенно по мере развития общества и усложнения различных аспектов, создание чего-то нового становится еще более трудным.
Однако с появлением генеративного ИИ эта ситуация меняется. В настоящее время разработка программного обеспечения претерпевает драматические изменения благодаря высоким возможностям генеративного ИИ в области программирования.
В этом контексте видение будущего, где автономные агенты на основе генеративного ИИ станут центральными фигурами в разработке программного обеспечения в качестве инженеров-программистов, уже становится реальностью.
Мы находимся в переходной фазе. Хотя мы не можем полностью доверить разработку генеративному ИИ, умелое использование генеративного ИИ может мощно продвинуть разработку программного обеспечения.
Это называется разработкой программного обеспечения с использованием ИИ.
Развивающееся развитие
Когда генеративный ИИ повышает эффективность разработки программного обеспечения, он может оптимизировать не только разработку конечного целевого программного обеспечения, но и разработку программного обеспечения, которое помогает в самой разработке.
Как упоминалось ранее, результаты, способствующие развитию, расширяют его рамки и помогают улучшить эффективность и качество. Более того, при эффективном создании их можно повторно использовать в других проектах разработки.
Следовательно, разрабатывая программное обеспечение, которое помогает в процессе разработки программного обеспечения, можно повысить общую эффективность, а эти активы могут быть использованы для будущей разработки.
Традиционно разработка такого вспомогательного программного обеспечения была обычной практикой, но она требовала собственного времени и усилий на разработку, что требовало тщательного рассмотрения и целенаправленного выполнения.
Используя генеративный ИИ, можно быстро создавать простое программное обеспечение для автоматизации мелких задач, которые приходят на ум. Если задача включает четкую обработку, генеративный ИИ может точно сгенерировать программу практически без ошибок.
Следовательно, разработка программного обеспечения для помощи в разработке во время процесса разработки программного обеспечения стала проще, чем раньше.
И, глубоко осмыслив это, появляется стиль разработки, при котором полезные инструменты для разработки непрерывно создаются в процессе, тем самым трансформируя саму методологию разработки.
Мы назовем это «развивающимся развитием».
Для практики развивающегося развития необходима привычка объективно наблюдать за своей собственной разработкой программного обеспечения, учитывая, какие части могут быть обработаны программным обеспечением, а какие только людьми, а также навык разработки такого вспомогательного программного обеспечения.
Кроме того, генеративный ИИ может быть встроен в эти программные инструменты. Встраивая его в программное обеспечение, в отличие от агентов генеративного ИИ, можно в некоторой степени сузить область обработки и определить пути.
Хотя агенты ИИ могут достигать аналогичных результатов с помощью подсказок, программное обеспечение со встроенным генеративным ИИ может легче повысить точность, комбинируя как программы, так и подсказки.
Если такое развивающееся развитие будет практиковаться, второй проект покажет улучшения как в качестве, так и в стоимости по сравнению с первым. Более того, с каждым последующим проектом — третьим, четвертым и так далее — улучшения будут продолжать накапливаться.
Это совершенно отличается от простого использования генеративного ИИ для разработки программного обеспечения. Со временем возникнет значительный разрыв между командами, которые просто осваивают инструменты генеративного ИИ, и командами, которые практикуют развивающееся развитие.
Тестирование, управляемое рефакторингом
Существует концепция, называемая Test-Driven Development (TDD) — разработка через тестирование, при которой тесты сначала проектируются на основе спецификаций, а затем разрабатывается программное обеспечение для прохождения этих тестов.
Изначально я также думал, что, используя генеративный ИИ, будет легко разрабатывать тестовые программы для автоматизированного тестирования, что сделает TDD осуществимым.
Однако, когда я начал практиковать развивающееся развитие, я пришел к убеждению, что размышления о тестах до их реализации не всегда являются наиболее подходящим подходом.
Особенно для программного обеспечения, такого как веб-приложения, которые включают субъективные аспекты, такие как удобство использования и визуальный дизайн, с которыми пользователь взаимодействует напрямую, я понял, что фактический запуск и взаимодействие с программным обеспечением имеют приоритет над подробными тестами.
Это связано с тем, что если после взаимодействия с программным обеспечением возникает значительное недовольство на уровне UI/UX, существует вероятность желания изменить фундаментальные части, такие как фреймворк, базовая архитектура, модель данных или варианты использования.
В моем текущем личном проекте по разработке программного обеспечения я заметил проблемы с гибкостью функций и производительностью и в итоге заменил два фреймворка на другие.
Мне также пришлось полностью пересмотреть обработку в некоторых областях из-за неэффективного использования памяти.
Именно в эти моменты рефакторинга тестирование впервые становится сознательным соображением.
Если это ранняя стадия разработки, или если функции и спецификации все равно будут значительно меняться, тесты могут быть излишними.
Однако, если разработка уже достаточно продвинулась и есть много пунктов для проверки, тесты будут необходимы для подтверждения того, что рефакторинг не привел к функциональным дефектам или упущениям.
Поэтому подход создания тестовых программ, когда разработка достигла определенного уровня и становится необходимым рефакторинг, не является плохой идеей.
В этот момент ключ заключается не в создании тестов для всего кода, а в сосредоточении на тестировании зрелых частей, которые вряд ли сильно изменятся в будущем, оставляя изменчивые части без автоматизированных тестов.
Это можно назвать тестированием, управляемым рефакторингом.
Заключение
Генеративный ИИ кардинально меняет разработку программного обеспечения.
В предыдущей статье я писал о важности стремления стать «Всенаправленным инженером», способным разрабатывать системы, объединяющие различные домены, инфраструктуры и среды выполнения, выходя за рамки традиционного full-stack инженера.
Я также написал статью, в которой предполагал, что мы вступаем в эру «Разработки, ориентированной на опыт и поведение», где основное внимание уделяется не согласованию спецификаций с реализацией, а улучшению пользовательского опыта через поведение программного обеспечения.
Развивающееся развитие и тестирование, управляемое рефакторингом, — это именно то, что ведет к этим новым горизонтам в разработке программного обеспечения.