Змушення непрограмістів зрозуміти процес розробки


66

Розпочинаючи проект для компанії, яка не є перш за все програмістською компанією, одне з очікувань полягає в тому, що готовий продукт в кінці є вільним від усіх помилок і робить все необхідне відразу. Однак так трапляється рідко.

Які існують способи управління очікуваннями та пояснення непрограмістам, чим розробка програмного забезпечення відрізняється від інших видів розробки продуктів?


Колись ви "контролюєте", а ваші нетехнічні колеги розумні по-своєму, а не неосвічені, скромні та цікаві. На іншому кінці спектру (як у моєму випадку) ви можете працювати з тим, хто хоче, щоб магія була зроблена за 1 годину, і ви опинилися, пояснюючи, чому компанія повинна поважати розробників. Потрібно говорити, що я на пошуках роботи. У якому оточенні ви знаходитесь, бо відповідь могла би: "Біжіть, біжіть!".
Робота

Відповіді:


34

Вже сьогодні всі, хто має комп’ютер, стикалися з поняттям "помилки", тож ви можете почати саме там. "Що найприємніший спосіб, коли програма коли-небудь вийшла з ладу? Помножте це на десять, і ви отримаєте досвід наших користувачів, якщо ми не присвятимо достатньо ресурсів для тестування та обслуговування".

І не варто недооцінювати цінність налагодження хороших робочих відносин з непрограмістами. Якщо ви зможете встановити, що ваше судження може бути довіреним, вони сприймуть вас серйозно, коли ви будете звучати тривогу про те, що X невдало вийде з ладу, якщо ви не зробите Y pronto, навіть якщо вони не повністю зрозуміють ваші міркування.


+1, щоб вказати на це. Ніщо не є більш небезпечним для проекту, якщо хлопці-технологи та нетехнологи майже не поважають один одного.
1313

28

Один із підходів, який я визнав успішним, такий:

Всі ми знаємо, що комп’ютер робить тільки і саме те, що йому сказано робити.

Програмування це спосіб , яким ми говоримо комп'ютер прямо зараз , що ми , що це зробити пізніше .

Це означає, що поведінка вашої поведінки зараз обумовлена ​​спільними намірами всіх, хто написав будь-який код, який працює на вашій машині. Якщо врахувати складність операційної системи, драйвери, середовище програмування, бібліотеки тощо, легко зрозуміти, що в більшості систем повинно брати участь 20 тисяч людей, а їх може бути більше 100 тис.

Код, написаний кожною людиною, відображає власне розуміння, мотивацію, наміри та здібності. Зважаючи на те, що бездоганна робота системи вимагає, щоб весь код, написаний цими 20-тисячними людьми, взаємодіяв без помилок - що весь код повинен погоджуватися щодо значення та інтерпретації необхідної поведінки, факт, що дивується, полягає не в тому, що у нас є помилки, але що їх у нас так мало.


4
+1 для "сказати зараз, що ми хочемо пізніше". Також з думкою, що більшість програмного забезпечення створює нові речі.

12

IMO, я виявив, що прозорість, запропонована спритними процесами (наприклад, Scrum, Crystal тощо), проходить довгий шлях до того, щоб показати, як розвиток працює для середнього зацікавленого учасника.


1
Це чудова стратегія, якщо ви робите 100% розробки. Якщо будь-якою частиною розробника займається інша сторона, вам доведеться трохи піти на компроміс.
JBRWilkinson

3

Пояснення метафорою - це хитра абстракція, але ось кілька ідей, які часто працюють у мене:

Зауважте, що жодне з цих пояснень не виправдовує неохайну роботу.

Подумайте про комп'ютерну програму як про машину, де кожна змінна є рухомою частиною. Це робить навіть тривіальну програму машиною, що складається з сотень рухомих деталей.

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

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


2
Дуже хороший момент про Microsoft
Casebash

1
Неможливо довести, що програма робить це і те. Однак комп’ютеру неможливо сказати, чи яка-небудь програма зрештою перестане робити це і те.

1
-1 @ ThorbjørnRavnAndersen вірно. Ця публікація неправильна. Це дуже можливо довести програми правильними (до певного поняття правильності), деякі з нас це роблять постійно. Я думаю, що плакат неправильно розуміє гносеологічний наслідок проблеми зупинки, і, таким чином, плутає непрограмістів з неправдивими твердженнями.
Філіп JF

2

Я відповів на подібне запитання детальніше , але суть полягає в тому, що "програмування - це як будівництво фабрики чи конвеєра".


Це сумно. Я вважаю, що програмування - це мистецтво. Ви намагаєтесь побудувати щось, що має безліч функцій, будувати на крихітних бітах простих команд, методів та класів. Переважно ви не працюєте з молотком - ви намагаєтесь ретельно формувати речі так, як ви хочете, щоб вони були ...
1313

@mri - Кожен, хто фактично побудував фабрику, скаже вам, що незалежно від того, наскільки добре сконструйована фабрична техніка, її частини все одно доведеться підходити вручну. Наші інструменти можуть спростити примірку рук, але ми більше (більшість із нас) не розробляємо код складання, щоб скористатися циклами та межами пам’яті. Настільки ж, як красиві «ручні» меблі в стилі майстра, виграли від автоматизації свого дня.
DaveE

2

Традиційним способом її викладення є Трикутник управління проектами: три конкуруючі критерії обсягу, вартості та графіку; зазвичай виражається як "дешевий, швидкий, хороший - виберіть два".

В кінці процесу проектування, розробки і розгортання, очікування того, що продукт є відносно вільно від недоліків конструкції і працює із заданою функціональністю цілком розумно. Це ж очікування є абсолютно необгрунтованим щодо проекту, процесу чи професії.

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

Жоден процес ніколи не позбавлений вад, хоча він може асимптотично наближатися до більш високих рівнів якості.

Це вірно з медичною професією, де тактика часто передбачає здогадки та протоколи, і значна частина діяльності в основному налагоджує в основному апарат для мокрого програмного забезпечення. Це стосується цивільного будівництва та архітектури, де застосування нових інженерних матеріалів повинні бути перевірені на місцях і можуть різко вийти з ладу після років служби, незважаючи на чітке дотримання стандартів. Це стосується автомобільної галузі, де вік і зміни умов експлуатації зазвичай впливають на продуктивність до точки збою, не зважаючи на технічні чи ремонтні послуги. Розробка програмного забезпечення принципово не відрізняється від цих професій у таких аспектах, вона просто приділяє більшу частину своєї уваги залученню до нових, цілеспрямованих машин.


Відмінний момент із автомобільним порівнянням, що є чудовим способом зробити точку щодо постійного обслуговування розгорнутої програми.
Кінгсолмн

0

Якщо у вас є ознайомлення з розробкою програмного забезпечення високого рівня, такого як управління ядерними реакторами, комунікації з глибокого космосу або медичні імплантаційні пристрої (тощо), ви можете пояснити, як структуру витрат і часу доставки для цього рівня управління передбаченням та забезпечення якості може бути на величину більше, ніж те, що можуть дозволити типові підприємства для своїх програмних проектів.


0

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

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

Існує багато драйверів функцій, якості та витрат як для автомобілів, так і для програмного забезпечення. Тоді ви можете обговорити, як програмні технології, наявність досвіду, можливо, навіть там, де він побудований, матимуть велике значення. Відповідні цикли розвитку (наприклад, щорічні моделі з невеликими змінами, зміни кузова / двигуна / платформи приблизно кожні три роки) керуються комбінацією потреб клієнтів та складним процесом проектування. Деякі продукти починають з малих та маневрених поглядів (подумайте про Honda Accord), але вдосконалюйтесь щороку, поки вони не будуть найвищими.

Автомобілі мають відкликання (часто набагато дорожче, ніж оновлення програмного забезпечення) та додаткові вдосконалення у вигляді зміни змін у своїх списках деталей (виправлення помилок помилок), і часто їм потрібна довгострокова підтримка (подумайте про сумісність назад / вперед). Значна частина витрат на ваш автомобіль приходить після того, як ви їдете додому. Значна частина вартості програмного забезпечення надходить після первинного випуску продукту під час оновлення та оновлення клієнтів.

У деяких випадках можна посилатися на добре відомі продукти, які включають програмне забезпечення або інші програмні продукти. Наприклад, телефони мають цикл випуску та оновлення та методи додавання функціональності після первинного продажу, щоб отримати більший дохід. Телефони - це чудова ілюстрація сумісності вперед / назад. Занадто багато, і люди не будуть скидати стару, щоб купити нову. Занадто мало, і клієнти відчайдушно мають телефон, якого вони не зненавидять до того, як його договір закінчиться.

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

Такі лідери галузі, як Microsoft, Apple, Google та Amazon, доставляють користувачам порівняно недорогі клієнти. Але вони мають величезні витрати, які давали змогу ці продукти. Їх досвід показує, що програмне забезпечення дороге, але цінне і вигідне. Вони часто йдуть на компроміс між якістю, маючи всі необхідні функції та виходять на ринки, коли терміни підходять. Не кожен продукт, який вони роблять, є успіхом, і вони іноді перетворюють собак на переможців шляхом перейменування, вдосконаленого маркетингу та продажів, або скорочення їх втрат та використання того, що вони дізналися в пізніших продуктах.


0

Можливо, спробуйте їх пройти, один на один або в невеликих групах в ідеалі, використовуйте випадки програмного забезпечення, які ви повинні розробити. Описуючи випадки використання, визначте точки у випадку, коли можуть статися різні речі (несподівані, але не необгрунтовані випадки). Починайте їх перераховувати, попросіть деякі роз’яснення та проілюструйте всі рішення та вказівки, які необхідно прийняти чи вирішити, і компроміси, які здійснюються при цьому. Продовжуйте продовжувати, поки вони не наткнуться і не зможуть дати вам відповідь. Дайте їм зрозуміти, що те, що ви зараз робите з ними, - це саме те, що ви робите цілий день, напевно, самостійно, напевно, з набагато менш чітким напрямком, як вирішуючи курс, так і писати код на сотні чи тисячі використовувати випадки, які може бути, а може і не бути викладений ким-небудь. А коли там ' Так що ви не думали про себе, ви не можете гарантувати, що програма буде робити. Можливо, це робить "правильну" річ, можливо, зауважте. І ось що таке помилка. І тому написання програмного забезпечення вимагає часу. Чим менше часу у вас є, тим менше випадків, коли ви мали шанс розглянути та вмістити, і тим більше шансів, що програма не зробить «правильну» річ у невідомих обставинах.


0

Вартість та час.

Час

Встановіть очікування, що ви доставите X за Y кількість часу. У ній більше нічого, ні менш. Потім скажіть їм, яка наступна версія буде мати через який час. Спочатку вони можуть здивуватися, вважаючи, що на створення X потрібна Y кількість часу - саме тут ви пояснюєте витрачений час та складності створення програмного забезпечення. Якщо вони не здивовані, або ви оцінили дуже менше часу, або вони знали краще, ніж ви думаєте про створення програмного забезпечення.

Вартість

Це з книги «Compete Compete» Стіва Макконеля (цитата з пам’яті, тому вибачте мене, якщо я не зміг би передати це з тим же ефектом) - Клієнти легко запитують нові функції. Як менеджер продукту, ви не повинні говорити про те, що запитує клієнт. Ви повинні оцінити, скільки зусиль і витрат потрібно для створення цієї нової функції. Вони повільно зрозуміють, що нова функція насправді не коштує грошей / часу або, можливо, навіть не вимагає цього. Я не пропоную вам використовувати цю зброю, щоб відлякати їх, але чесно використовуйте її, і це може допомогти в русі точки додому.


-2

Метафори - це непрохідні абстракції, але вони є маленьким кроком, який наблизить вас до розуміння.

Моя думка полягає в тому, що створення програмного забезпечення часто є процесом, подібним до архітектури будинку. І все ж точніше думати про це як про створення системи, яка виводить проект, створений на замовлення, заснований на деяких параметрах і будує інший для кожного з його користувачів. У гейк-розмовах, які мають бути мета-архітектування.


-2

Я виявив, що це насправді може допомогти, коли ви покажете їм, що означає писати код. Покажіть зацікавленим сторонам кодову базу, з якою ви працюєте. Навіть коли ви вибрали хороші назви змінних та методів, більшість людей подумають, що ви використовуєте якусь чорну магію. Можливо, вони зрозуміють, для чого вам потрібно більше, ніж «кілька днів», щоб реалізувати нову функцію для свого програмного забезпечення.


Це погана ідея ІМО. Це як вручити клієнту швабру, щоб показати йому, як важко чистити мокру підлогу.
Сундіп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.