Отже, маючи на увазі, що це питання інтерв'ю, а не фактичний сценарій реального життя, я вважаю, що правильним підходом (і, можливо, те, що шукає інтерв'юер) є задати уточнююче запитання або написати "Це не може робиться "і рухатися далі. Ось чому.
Що запитує інтерв'юер:
Напишіть функцію, яка гарантовано ніколи не поверне одне і те ж значення двічі. Припустимо, що до цієї функції будуть доступні кілька машин одночасно.
Що потрібно інтерв'юєру:
Чи ефективно оцінює цей кандидат вимоги та чи потребує додаткового внеску, коли це вимагається?
Ніколи не припускайте.
Коли інженеру вручається вимога (через SOW або Специфікацію або якийсь інший документ із вимогами), деякі є само собою зрозумілими, а інші - абсолютно незрозумілими. Це прекрасний приклад останнього. Як показали попередні відповіді, немає можливості відповісти на цю вимогу, не роблячи декількох основних припущень або (a) щодо природи питання або (b) щодо природи системи, оскільки вимога не може бути виконана як написано (неможливо).
Більшість відповідей робить ту чи іншу спробу вирішити проблему за допомогою ряду припущень. Спеціально рекомендується просто зробити це швидко і дозволити клієнту хвилюватися з цього приводу, якщо він неправильний.
Це дійсно поганий підхід. Як замовник, якщо я даю незрозумілу вимогу, а інженер відходить і розробляє мені рішення, яке не працює, я буду засмучуватися, що вони пішли на роботу і витратили мої гроші, не намагаючись спочатку запитати мене. Таке прийняття рішень кавалера свідчить про відсутність роботи в команді, невміння критично мислити та погану оцінку. Це може призвести до будь-яких негативних наслідків, включаючи втрату життя в критичній системі безпеки.
Чому задавати питання?
Справа, якщо ця вправа полягає в тому, що будувати дорого і забирати багато часу потрібно до неоднозначних вимог. У випадку з ОП вам поставили неможливе завдання. Вашою першою дією має стати запит на роз'яснення - що саме потрібно? Який ступінь унікальності потрібен? Що станеться, якщо значення не унікальне? Відповідь на ці запитання може бути різницею між кількома тижнями часу і кількома хвилинами. У реальному світі одним із найбільших рушійників витрат у складних системах (включаючи багато програмних систем) є нечіткі та недостатньо зрозумілі вимоги. Це призводить до дорогих і витратних за часом помилок, перепроектувань, розчарування клієнтів та команд, а також невмілого висвітлення засобів масової інформації, якщо проект досить великий.
Що відбувається, коли ти припускаєш?
З огляду на мій досвід роботи в аерокосмічній галузі та через дуже помітний характер аварійно-космічних збоїв, я люблю наводити приклади з цього домену, щоб проілюструвати важливі моменти. Розглянемо пару невдалих місій на Марсі - Марсовий кліматичний орбітер та Марський полярний десант. Обидві місії зазнали невдачі через проблеми із програмним забезпеченням - тому що інженери зробили неправдиві припущення, частково, через незрозумілі та погано передані вимоги.
Марсовий кліматичний орбіт - цей випадок, як правило, цитується як те, що відбувається, коли NASA намагається перетворити англійську мову на метричні одиниці. Однак це надмірно спрощена та погана репрезентація того, що насправді вийшло. Правда, виникла проблема перетворення, але це було пов’язано з погано переданими вимогами на етапі проектування та неправильною схемою перевірки / перевірки. Крім того, коли двоє різних інженерів помітили проблему, оскільки це було очевидно з даних про траєкторію польоту, вони не підняли проблему до належного рівня, оскільки вважали, що це помилка передачі. Якби команда операторів місії була б обізнана з цим питанням, був би достатній час для її виправлення та збереження місії. У цьому випадку виникла неможлива логічна умова, яка не була визнана тим, що це було, що призвело до дорогої відмови місії.
Марс Полярний десант- цей випадок трохи менш відомий, але, можливо, більш неприємний через його тимчасової близькості до провалу Марс Клімат Орбітер. У цій місії програмне забезпечення контролювало спускання ракети на землю Марсія. У точці на 40 метрів над поверхнею ноги земляного судна розгортаються, готуючись до посадки. На ногах також був датчик, який виявляв рух (сигналізував, коли вони вплинули), щоб повідомити програмному забезпеченню, щоб вимкнути двигун. Найкраща здогадка НАСА щодо того, що сталося (оскільки існує безліч можливих збоїв та неповних даних) полягає в тому, що випадкові коливання в ногах внаслідок їх розгортання одночасно і неправильно спрацьовують механізм відключення на 40 м над поверхнею, в результаті чого відбувається аварія та знищення 110 доларів США М космічний корабель. Ця можливість була піднята в процесі розвитку, але ніколи не звертався. Зрештою, команда програмного забезпечення зробила неправдиві припущення про те, як цей код потрібно запустити (одне з таких припущень полягає в тому, що помилковий сигнал був би занадто короткочасним, щоб його можна було сприймати, незважаючи на тести, що показували протилежне), і ці припущення ніколи не ставили під сумнів до після факт.
Додаткові міркування
Інтерв'ю та оцінка людей - справа хитра. Є кілька аспектів кандидата, які інтерв'юер, можливо, бажає дослідити, але одним із найважливіших є здатність ідивідуального до критичного мислення. З найрізноманітніших причин, не останньою з яких є те, що критичне мислення є погано визначеним, у нас дуже важко оцінювати навички критичного мислення.
Як інструктор з інженерії, один з моїх улюблених способів оцінювати здатність студента критично мислити - це поставити дещо неоднозначне запитання. Більш гострі студенти підхопили б несправне приміщення, відзначили це, і будь-яку відповідь, якщо врахувати передумову, або взагалі відмовитись від відповіді. Як правило, я б задавав питання, подібне до наступного:
Ви вибираєте креслення зі своєї роботи. Малюнок містить безліч різних описів, але найважливіші точки вказує на горизонтальну поверхню і говорить "Ідеально плоска". Поверхня довжиною 5 "шириною на 16", а частина виконана з алюмінію. Як ви будете обробляти деталь для створення цієї функції?
(До речі, ви були б вражені тим, як часто така погана специфікація з’являється на робочому місці.)
Я очікую, що студенти визнають, що створити ідеальну особливість неможливо, і що вони заявлять про це у своїй відповіді. Я, як правило, присуджую бонусний бал, якщо вони скажуть, що повернуться до дизайнера і попросять роз'яснення, перш ніж зробити участь. Якщо студент продовжує розповідати, як вони збираються досягти .001 планарності чи іншої складеної вартості, я присуджую нульові бали. Це допомагає мені зазначити моїм учням, що їм потрібно думати про більшу картину.
Нижня лінія
Якщо я опитую інженера (чи подібну професію), я шукаю когось, хто може критично мислити і ставити під сумнів те, що було поставлено перед ним. Я хочу, щоб хтось задав питання "Чи має це сенс?" .
Немає сенсу просити ідеально рівну частину, бо немає такої речі, як ідеальна. Немає сенсу просити функцію, яка ніколи не повертає повторюваного значення, оскільки така гарантія неможлива. У програмуванні ми часто чуємо фразу "сміття, сміття." Якщо вам передають сміття відповідно до вимог, ваша етична відповідальність зупиняється і задавати будь-яке питання допоможе вам виявити справжній намір. Якщо я беру інтерв'ю з кандидатом, і я даю їм незрозумілу вимогу, я очікую роз'яснень.