Получение непрограммистов, чтобы понять процесс разработки

66

При запуске проекта для компании, которая не является в первую очередь программистской, одно из ожиданий состоит в том, что в конце есть готовый продукт, свободный от всех ошибок, и сразу же делает все необходимое. Тем не менее, это редко так.

Как можно управлять ожиданиями и объяснять непрограммистам, чем разработка программного обеспечения отличается от других видов разработки продукта?


источник
Иногда вы находитесь «под контролем», и ваши нетехнические коллеги по-своему умны, а не невежественны, скромны и любопытны. На другом конце спектра (как в моем случае) вы могли бы работать с кем-то, кто хочет, чтобы магия была сделана за 1 час, и вы объясняете, почему компания должна уважать разработчиков. Излишне говорить, что я на охоте на работу. В какой ты среде, потому что ответом может быть «Беги, беги!».
Работа

Ответы:

34

В наши дни почти все с компьютером сталкивались с понятием «жучки», так что вы можете начать с него. «Какой самый неприятный способ, когда приложение когда-либо выходило из строя? Умножьте это на десять, и вы получите опыт наших пользователей, если мы не выделим достаточно ресурсов на тестирование и обслуживание».

И не стоит недооценивать ценность установления хороших рабочих отношений с непрограммистами. Если вы сможете доказать, что вашему суждению можно доверять, они воспримут вас всерьез, когда вы поднимете тревогу о том, что X потерпит неудачу, если вы не сделаете Y сразу, даже если они не до конца понимают вашу аргументацию.

BlairHippo
источник
+1 за указание на это. Нет ничего более опасного для проекта, если технические и нетехнические парни практически не уважают друг друга.
н
28

Один подход, который я нашел успешным, заключается в следующем:

Все мы знаем, что компьютер делает только то, что ему говорят.

Программирование - это способ, которым мы сейчас сообщаем компьютеру, что мы будем делать позже .

Это означает, что то, как вы сейчас себя ведете, обусловлено объединенными намерениями каждого, кто написал какой-либо код, работающий на вашей машине. Если принять во внимание сложность операционной системы, драйверов, среды программирования, библиотек и т. Д., То легко увидеть, что в большинстве систем задействовано свыше 20 тыс. Человек, а их может быть более 100 тыс.

Код, написанный каждым человеком, отражает его собственное понимание, мотивацию, намерение и возможности. Учитывая, что безупречная работа системы требует, чтобы весь код, написанный этими 20 тысячами человек, взаимодействовал без ошибок - что весь код должен согласовывать значение и интерпретацию требуемого поведения, удивительным фактом является не то, что у нас есть ошибки, а что у нас их так мало.

Беван
источник
4
+1 за «говорить сейчас, что мы хотим позже». Также с учетом того, что большинство программного обеспечения делает новые вещи
12

ИМО, я обнаружил, что прозрачность, обеспечиваемая гибкими процессами (например, Scrum, Crystal и т. Д.), Во многом показывает, как разработка работает для среднего заинтересованного лица.

Brandon
источник
1
Это превосходная стратегия, если вы делаете 100% разработки. Если какая-то часть разработки обрабатывается другой стороной, вам придется пойти на компромисс, возможно, немного.
JBRWilkinson
3

Объяснение метафорой - это утечка, но вот некоторые идеи, которые часто работают для меня:

Обратите внимание, что ни одно из этих объяснений не оправдывает небрежную работу.

Думайте о компьютерной программе как о машине, где каждая переменная является движущейся частью. Это делает даже тривиальную программу машиной, состоящей из сотен движущихся частей.

Когда это терпит неудачу, я возвращаюсь к тому факту, что хотя математически возможно доказать, что в программе нет ошибок, это занимает огромное количество времени и не будет стоить усилий.

Наконец, я спрашиваю, могут ли Intel и Microsoft избежать ошибок, как они ожидают нас?

KevDog
источник
2
Очень хорошая мысль о Microsoft
Casebash
1
Невозможно доказать, что программа делает то и это. Однако для компьютера невозможно сказать, прекратит ли какая-либо конкретная программа то или иное.
1
-1 @ ThorbjørnRavnAndersen правильно. Этот пост неправильный. Очень возможно доказать правильность программ (с определенным понятием правильности), некоторые из нас делают это постоянно. Я думаю, что автор неправильно понимает гносеологические последствия проблемы остановки и, таким образом, путает непрограммистов с ложными утверждениями.
Филипп JF
2

Я ответил на аналогичный вопрос более подробно , но суть в том, что «программирование похоже на строительство фабрики или конвейера».

Huperniketes
источник
Печально. Я верю, что программирование - это искусство. Вы пытаетесь создать что-то, что имеет много функций, опираясь на крошечные кусочки простых команд, методов и классов. В основном вы не работаете с молотком - вы стараетесь аккуратно
оформить
@mri - Любой, кто на самом деле построил завод, скажет вам, что независимо от того, насколько хорошо спроектировано заводское оборудование, его части все равно придется устанавливать вручную. Наши инструменты могут упростить ручную настройку, но мы больше (большинство из нас) не «создаем» ассемблерный код, чтобы использовать преимущества циклов и границ памяти. Так же, как красивая, выполненная вручную, мебель в стиле ремесленника извлекла выгоду из автоматизации своего дня.
Дэйв
2

Традиционный способ обозначить это - треугольник управления проектами: три конкурирующих критерия объема, стоимости и графика; обычно выражается как «дешево, быстро, хорошо - выбирай два».

В конце процесса проектирования, разработки и развертывания ожидание того, что продукт является относительно свободным от недостатков дизайна и работает с указанной функциональностью, вполне оправданно. То же самое ожидание совершенно необоснованно в отношении проекта, процесса или профессии.

Какой профессионал, основанный на науке, жесткий или мягкий, не проходит через процесс исследования, формируя неточные и неточные концептуализации, следуя менее чем оптимальной (или просто ошибочно) тактике, обнаруживая, что работает методом проб и ошибок, и повторяя обрабатывать снова и снова, пока не истощатся ресурсы или не будет достигнут достаточный уровень производительности?

Ни один процесс не свободен от недостатков, хотя он может асимптотически приближаться к более высоким уровням качества.

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

jerseyboy
источник
Отличная черта автомобильного сравнения, это отличный способ подчеркнуть необходимость постоянного развертывания развернутого приложения.
Kingsolmn
0

Если у вас есть какие-либо знания в области разработки высокоуровневого программного обеспечения, такого как управление ядерным реактором, связь в дальнем космосе или устройства медицинских имплантатов (и т. Д.), Вы можете объяснить, как структура затрат и времени доставки для этого уровня управления объектами и обеспечения качества может быть на величины больше, чем типичные предприятия могут позволить себе для своих программных проектов.

hotpaw2
источник
0

Вы можете сравнить это с тем, что они могут видеть и, если возможно, использовать каждый день.

Например, автомобиль. На авто завелось гораздо менее изысканные и надежные устройства, чем у нас сегодня. В то время как автомобили были сделаны более 100 лет, но программное обеспечение, вероятно, примерно вдвое дольше. Автомобили доступны со значительной настройкой, некоторые из которых включены в цену (например, выбор цвета), другие, такие как размер двигателя, тип трансмиссии, колесо / шина, уровень комплектации, являются существенными затратами водителей.

Есть много функций, качества и стоимости драйверов для автомобилей и программного обеспечения. Затем вы можете обсудить, как технология программного обеспечения, наличие опыта, может быть, даже там, где он построен, будут иметь большое значение. Соответствующие циклы разработки (например, ежегодные модели с небольшими изменениями, изменения кузова / двигателя / платформы примерно каждые три года) определяются сочетанием потребностей клиентов и сложным процессом проектирования. Некоторые продукты начинаются с небольшого размера и выглядят непривлекательными (например, Honda Accord), но совершенствуются каждый год, пока не получат наивысшие оценки.

У автомобилей есть отзыв (часто более дорогой, чем обновление программного обеспечения) и постепенные улучшения в форме внесения изменений в их списки деталей (например, исправление ошибок), и часто им требуется долгосрочная поддержка (например, обратная / прямая совместимость). Большая часть стоимости вашего автомобиля приходит после того, как вы едете домой. Большая часть стоимости программного обеспечения приходит после первоначального выпуска продукта при обновлении и обновлении клиентов.

В некоторых случаях вы можете ссылаться на хорошо известные продукты, которые включают программное обеспечение или другие программные продукты. Например, телефоны имеют цикл выпуска и обновления и методы добавления функциональности после первоначальной продажи, чтобы увеличить доход. Телефоны являются отличной иллюстрацией прямой / обратной совместимости. Слишком много, и люди не будут бросать старый, чтобы купить новый. Слишком мало, и клиенты отчаянно нуждаются в телефоне, который они не будут ненавидеть, пока его контракт не истек.

Такие продукты, как Windows, Microsoft Office, веб-браузеры и веб-страницы - все это программное обеспечение, которое можно использовать в обсуждениях. Они обновлялись на ежегодных или трехлетних циклах, но могут иметь автоматические обновления чаще. У них есть ошибки и дыры в безопасности, которые в разной степени затрагивают клиентов, но являются частью общей картины, несмотря на все наши усилия Клиенты могут получить исправления бесплатно, но обычно платят за улучшения, часто в виде пакета, иногда в виде отдельного модуля или с помощью лицензионного ключа.

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

DeveloperDon
источник
0

Возможно, попробуйте пройти их, в идеале, в одиночку или в небольших группах, используйте те варианты программного обеспечения, которые вам нужно разработать. По мере того, как они описывают варианты использования, определите точки в случае, когда могут произойти разные вещи (неожиданные, но не неразумные случаи). Начните перечислять их, попросите дать некоторые разъяснения и проиллюстрируйте все решения и указания, которые необходимо принять или согласовать, и компромиссы, которые будут сделаны при этом. Продолжайте, пока они не озадачены и не могут дать вам ответ. Заставьте их понять, что то, что вы делаете с ними сейчас, это именно то, что вы делаете весь день, возможно, самостоятельно, возможно, с гораздо менее четким руководством, как при выборе курса, так и при написании кода, для сотен или тысяч случаи использования, которые могут или не могут быть изложены кем-либо. И когда там Если вы не думали о себе, вы не можете гарантировать, что программа сделает. Может быть, это делает "правильную" вещь, может быть, обратите внимание. И это то, что ошибка. И именно поэтому написание программного обеспечения требует времени. Чем меньше у вас времени, тем меньше случаев, которые вы имели возможность рассмотреть и учесть, и тем более вероятно, что программа не будет делать «правильные» действия в неизвестных обстоятельствах.

huntmaster
источник
0

Стоимость и время.

Время

Установите ожидания, что вы поставите X в Y количество времени. У него не будет ничего больше, ни меньше. Затем скажите им, что будет в следующей версии. Поначалу они могут удивиться, полагая, что сборка X занимает Y времени - это то, где вы объясняете затраченное время и сложности создания программного обеспечения. Если они не удивлены, либо вы оценили очень мало времени, либо они знали лучше, чем вы думаете о создании программного обеспечения.

Стоимость

Это из книги Code Compete Стива Макконнела (цитата из памяти, так что извините, если я не смог передать это с тем же эффектом) - клиенты могут легко запрашивать новые функции. Как менеджер продукта, вы не должны говорить, что спрашивает клиент. Вы должны оценить, сколько усилий и затрат требуется для создания этой новой функции. Они постепенно поймут, что новая функция на самом деле не стоит денег / времени или, возможно, им даже не нужна. Я не предлагаю вам использовать это оружие, чтобы напугать их, но используйте его честно, и это могло бы помочь в достижении цели.

Sundeep
источник
-2

Метафоры - это утечка абстракций, но они - маленький шаг, который приближает вас к пониманию.

Мне нравится то, что создание программного обеспечения часто происходит как процесс, похожий на проектирование дома. Тем не менее, точнее думать об этом, как о создании системы, которая распечатывает проект, созданный по индивидуальному заказу, на основе некоторых параметров и создает разные для каждого из своих пользователей. В гиках говорите, что будете мета-архититировать.

Питер Лада
источник
-2

Я обнаружил, что это может действительно помочь, когда вы показываете им, что значит писать код. Покажите заинтересованным сторонам кодовую базу, с которой вы работаете. Даже когда вы выбрали хорошие имена переменных и методов, большинство людей подумают, что вы используете какую-то черную магию. Может быть, они поймут, почему вам нужно больше, чем «несколько дней», чтобы реализовать новую функцию для их программного обеспечения.

MHR
источник
Это плохая идея ИМО. Это все равно что передать швабру клиенту, чтобы показать ему, как трудно мыть мокрый пол.
Sundeep