Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
В эпоху стремительной цифровизации качество и эффективность разработки программного обеспечения становятся ключевыми факторами успеха бизнеса. Однако многие компании по‑прежнему сталкиваются с одной и той же проблемой: несмотря на внедрение современных методологий и инструментов, проекты затягиваются, бюджеты перерасходуются, а итоговый продукт не оправдывает ожиданий.
В чём корень проблемы? Ответ кроется в фундаментальном заблуждении: разработку ПО часто воспринимают исключительно как процесс написания кода. На деле же это прежде всего задача оптимизации знаний — управления опытом, навыками и пониманием, которыми обладают члены команды.
Настоящая статья предлагает переосмыслить подход к разработке ПО. Мы покажем, почему:
- традиционный фокус на ускорении кодирования не решает системных проблем;
- ключевая метрика успеха — не скорость написания кода, а величина X (дополнительных часов работы, генерируемых каждым часом разработки);
- истинная ценность заключается в управлении знаниями инженеров, а не в контроле строк кода.
Вы узнаете:
- как снизить X ниже критического значения 1, обеспечив завершение проектов;
- почему консенсус в команде обходится дороже, чем кажется, и как минимизировать коммуникационные издержки;
- какие принципы (от DRY до SOLID) действительно работают на управление сложностью;
- почему искусственный интеллект пока не способен заменить человеческое понимание контекста системы.
Мы разберём семь ключевых принципов качественной разработки, подтверждённых практикой лидеров индустрии, и объясним, как их применение меняет правила игры. От отказа от избыточности (YAGNI) до соблюдения Закона Деметры — каждый принцип направлен на одно: сделать ПО предсказуемым, поддерживаемым и соответствующим реальным потребностям бизнеса.
Готовы взглянуть на разработку ПО под новым углом? Начнём с главного — с осознания, что код — это лишь инструмент, а сердце процесса лежит в головах инженеров.
Управляйте знаниями, а не кодом.
Для более быстрой и надежной реализации проектов командам необходимо рассматривать разработку программного обеспечения как задачу оптимизации знаний, а не как задачу кодирования.
Разработка программного обеспечения никогда не завершается.
Разработка программного обеспечения не заканчивается; она лишь достигает уровня «достаточно хорошо». Это потому, что разработка программного обеспечения по своей природе итеративный процесс. Люди пишут код, который, по их мнению, им нужен, обнаруживают пробелы, переписывают, расширяют и повторяют всё заново.
Это легко представить себе наглядно: каждый час разработки генерирует X дополнительных часов будущей работы.
Если итоговая программа содержит 5000 строк кода, а программист может писать 1000 строк в день, то на выполнение проекта должно уйти 40 часов. Но если X = 0,5, то эти 40 часов фактически создадут еще 20 часов новой работы. Если X когда-либо превысит 1, проект никогда не будет завершен.
Для любого бизнеса крайне важно, чтобы значение X было ниже 1.
Какие ошибки допускают компании
Большинство компаний вкладывают огромные средства и время в попытки ускорить написание кода. Они внедряют Agile , Lean, FDD и другие фреймворки, пытаясь, осознают они это или нет, контролировать X. Но индустрия не понимает, что именно это они и оптимизируют. Они пытаются выбивать страйки, расставляя надувные бортики в желобах, тогда как на самом деле им нужно научиться направлять мяч точно по центру дорожки.
Им не нужно больше кода; им нужно уменьшить X, а способ уменьшить X — это не управление программным обеспечением. Это умение управлять тем, что находится в головах инженеров. Когда вы совершаете этот сдвиг в мышлении, становится возможным успешно создавать хорошее программное обеспечение.
Управление знаниями
Настоящий ключ к успеху в разработке программного обеспечения заключается не в управлении информацией и не в данных в системах, а в знаниях, которыми обладают люди.
Каждый инженер обладает уникальным сочетанием опыта и знаний. Управление программным обеспечением подразумевает управление как имеющимися у них знаниями и информацией, так и знаниями и информацией, которые им понадобятся. Задача лидера заключается в подтверждении того, что знания и навыки достаточно разнообразны для выполнения поставленной задачи, а также в выявлении областей чрезмерного дублирования или областей, в которых наблюдается фундаментальный недостаток.
Начнём с найма сотрудников.
Создавайте программное обеспечение таким образом, чтобы среднестатистический начинающий инженер мог начать продуктивно работать за неделю-две. Отслеживайте время, необходимое для достижения продуктивности, как реальный показатель. За 20 лет я ни разу не видел, чтобы какая-либо компания это делала, и тем не менее это самый верный показатель эффективности вашей архитектуры и процессов. У программистов нет стимула создавать простое и понятное программное обеспечение, но для бизнеса очень важно иметь максимально широкий выбор специалистов.
Освоение нового программного обеспечения должно быть плавным, а не стремительным. Даже опытным инженерам нужно время, чтобы понять новую кодовую базу или стек технологий. И прежде чем начать проект, убедитесь, что необходимые навыки вообще существуют на рынке труда. Многие проекты терпят неудачу просто потому, что ни у кого на земле нет необходимого набора знаний для их завершения.
Цена консенсуса
Это не ограничивается навыками, знаниями и опытом. Консенсус — это также состояние, существующее в голове инженера. Консенсус — это общее понимание, позволяющее команде двигаться в одном направлении. Однако консенсус может быть достигнут только посредством коммуникации, а коммуникация обходится дорого. Ее стоимость примерно пропорциональна квадрату числа вовлеченных людей. Это называется сетевым эффектом. Именно он делает социальные сети ценными, но также делает достижение консенсуса дорогостоящим. Фред Брукс отметил это, пытаясь создать OS360 в IBM несколько десятилетий назад; он изложил свое понимание в книге «Мифический человеко-месяц».
Идеальная проектная команда — это максимально малочисленная группа, которая в совокупности обладает всей необходимой информацией для выполнения работы. Увеличение числа участников приводит к экспоненциальному, а не линейному увеличению коммуникационных издержек.
Стандарты кодирования
Даже стандарты кодирования в своей основе направлены на снижение барьера для понимания кода инженерами. Они существуют для того, чтобы облегчить инженерам, как начинающим, так и опытным, чтение, изучение и быстрое внесение вклада в код. Их истинная цель — сократить кривую обучения, а не навязывать строгий стиль.
Почему ИИ упускает главное
Искусственный интеллект может генерировать код, но он не решает реальную проблему: передачу знаний инженерам (не только о том, как работает код, но и о том, почему именно этот код является правильным для решения проблем пользователей). Настоящая ценность заключается в наличии сотрудников, способных понимать потребности пользователей, разбираться в зависимостях и внедрять эффективные решения, не создавая катастрофических побочных эффектов в контексте всей системы. Искусственный интеллект не только не справляется с этой задачей, но и даже близко к этому не подходит.
Раньше в компаниях был как минимум один сотрудник, который понимал код, потому что кто-то его написал. Искусственный интеллект просто генерирует код, который неизвестен ни одному инженеру в компании. Некоторые компании требуют, чтобы их инженеры понимали код, написанный ИИ. К этому моменту вы ничего не сэкономите, потому что именно это понимание является самой сложной частью.
Смена перспективы
Ключ к успеху не в освоении новых фреймворков или погоне за новыми инструментами. Важно изменить наше видение проблемы.
Разработка программного обеспечения — это не гонка за написанием большего количества кода.
Когда начинаешь рассматривать разработку не как задачу кодирования, а как задачу оптимизации знаний, всё остальное, от структуры команды до архитектуры, начинает обретать смысл.
Мы делали это интуитивно на протяжении десятилетий. Пришло время начать делать это осознанно.
Семь основных принципов качественной разработки программного обеспечения от разработчиков DST Global
Принципы разработки программного обеспечения играют решающую роль в оказании помощи разработчикам в создании высококачественных, поддерживаемых и эффективных программных систем.
DRY (Don't Repeat Yourself — не повторяйтесь)
Принцип DRY (Don't Repeat Yourself — не повторяйте себя) — это фундаментальная концепция в разработке программного обеспечения, которая способствует повторному использованию кода. Он гласит, что если вы написали фрагмент кода, то его следует использовать повторно во всей кодовой базе, а не повторять где-либо ещё. Он призывает избегать дублирования кода или логики и побуждает разработчиков стремиться к единому источнику истины. Придерживаясь принципа DRY, вы получите следующие преимущества:
1. Улучшение качества кода: Дублированный код подвержен несоответствиям. Придерживаясь принципа DRY (Don't Repeat Yourself — не повторяйтесь), разработчики гарантируют, что код будет написан один раз и использован повторно по мере необходимости, что значительно повышает качество системы.
2. Экономия времени и усилий: Дублирование кода требует дополнительных усилий. При необходимости внесения изменений или обновлений разработчикам приходится модифицировать код в нескольких местах, что отнимает время и увеличивает риск возникновения ошибок. Принцип DRY (Don't Repeat Yourself — не повторяйте себя) помогает сэкономить ценное время и усилия за счет централизации логики кода.
KISS (Keep It Simple, Stupid — Делай проще, глупый)
Принцип KISS (Keep It Simple, Stupid – «Делай проще, дурак») — это также основополагающий принцип в разработке программного обеспечения, который подчеркивает простоту проектирования и реализации. Он призывает избегать излишней сложности и стремиться к простым решениям. Применение принципа KISS может значительно улучшить проекты разработки программного обеспечения следующим образом:
1. Улучшенное понимание: Простой код легче понять. Когда программное обеспечение разрабатывается с учетом простоты, разработчики могут быстро понять его логику и функциональность.
2. Улучшенная поддерживаемость: Сложный код, как правило, трудно поддерживать со временем. С каждым дополнительным уровнем сложности возрастает вероятность появления ошибок или непредвиденных побочных эффектов. С другой стороны, следование принципу KISS (Keep It Simple, Stupid — Делай проще, дурак) гарантирует, что код останется управляемым и поддерживаемым даже по мере развития проекта.
YAGNI (You Ain't Gonna Need It)
Чаще всего инженеры-программисты тратят больше времени на обобщение фрагмента кода, чтобы его можно было использовать без изменений для удовлетворения требований, которые могут возникнуть в будущем. Принцип YAGNI (You Ain't Gonna Need It — Вам это не понадобится) в разработке программного обеспечения способствует избеганию реализации ненужных функций или возможностей. Он побуждает разработчиков сосредоточиться на предоставлении того, что необходимо в данный момент, и откладывать разработку на основе предположений до тех пор, пока это не станет необходимым. Некоторые из преимуществ принципа YAGNI перечислены ниже:
1. Эффективное распределение ресурсов: разработка функций, которые не требуются немедленно, расходует ценные ресурсы, включая время разработки, усилия и бюджет. Применяя принцип «если это не необходимо, то и не нужно» (YAGNI), разработчики могут эффективно распределять ресурсы для предоставления необходимой функциональности, удовлетворяющей непосредственным потребностям бизнеса.
2. Как избежать ненужных затрат: внедрение ненужных функций может привести к потерям как с точки зрения трудозатрат на разработку, так и производительности системы.
SLAP (Принцип единого уровня абстракции)
Принцип единого уровня абстракции (SLA) — это важная концепция в разработке программного обеспечения, которая способствует поддержанию согласованного уровня абстракции внутри модулей или компонентов. Он подчеркивает важность сохранения кода на определенном уровне детализации, обеспечивая ясность, читаемость и удобство сопровождения. Преимущества SLAP аналогичны преимуществам DRY (Don't Repeat Yourself — не повторяйте себя). Он улучшает понимание кода и повышает его удобство сопровождения.
SOLID
Принципы SOLID — это пять фундаментальных принципов в разработке программного обеспечения, которые способствуют созданию надежного, поддерживаемого и гибкого кода. Эти принципы, сформулированные Робертом К. Мартином, служат руководством для разработчиков при создании программных систем, которые легче понимать, модифицировать и расширять.
Ниже перечислены преимущества следования принципам SOLID:
1. Улучшенная ремонтопригодность: Принципы SOLID подчеркивают важность организации кода и модульного проектирования, что приводит к улучшению ремонтопригодности.
2. Облегчает расширяемость: принципы SOLID играют жизненно важную роль в создании расширяемых программных систем. Эти принципы способствуют слабой связанности, инверсии зависимостей и принципам открытости/закрытости, позволяя разработчикам расширять функциональность системы без изменения существующего кода.
3. Улучшенная тестируемость: принципы SOLID способствуют улучшению тестируемости, что является важным аспектом разработки программного обеспечения. Следуя принципам SOLID, разработчики создают модульный, независимый и легко тестируемый в изолированном виде код.
Закон Деметры
Закон Деметра (LoD), также известный как принцип наименьшего знания, является важнейшей концепцией в разработке программного обеспечения, которая способствует слабой связанности и инкапсуляции. Он побуждает разработчиков ограничивать прямое взаимодействие между объектами, уменьшая зависимости и повышая модульность и удобство сопровождения кода. Этот принцип гласит, что вместо доступа к свойствам или методам множества вложенных объектов, необходимо инкапсулировать необходимую функциональность внутри самого объекта или использовать четко определенные интерфейсы для взаимодействия с другими объектами. Применение Закона Деметра обеспечивает следующие преимущества:
Снижение взаимосвязи и зависимости: Закон Деметра помогает уменьшить взаимосвязь между объектами, ограничивая их знание внутренней структуры друг друга.
Закон сохранения сложности
Закон сохранения сложности (LoCC) — это принцип в разработке программного обеспечения, который гласит, что сложность нельзя устранить, а можно только перераспределить или переместить. Он признает, что по мере развития программной системы сложность является неотъемлемой частью процесса и должна эффективно управляться.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель
Задать вопрос по почте