«Кандидат має право уточнювати завдання», або Як довести інтерв'юера до істерики

Нещодавно я прочитав запис у блозі одного хлопця, який скаржився, що на його інтерв'ю попросили написати функцію, яка повинна скопіювати файл. Ні, я розумію, як можна взъесться на таке завдання, але якщо б у подібній ситуації опинився я… я б відірвався по повній:

Кандидат: Що конкретно Ви маєте на увазі, кажучи «скопіювати»?
Інтерв'юер: Ну… створити новий файл, вміст якого є копією вмісту вихідного файлу.
: Потрібно скопіювати також і метадані про час створення і модифікації оригінального файлу?
І: Ні, не потрібно.
: чи Повинен файл-копія мати те ж ім'я, що і початковий файл?
І: Немає.
: Може файл-копія мати те ж ім'я, що і початковий файл?
І Хммм… немає.
: чи я Повинен передбачити захист від атаки через підміну букв зі схожими іншого формату (наприклад, турецької I)?
І: Не турбуйтеся про це.
: чи Повинен файл-копія знаходитися в тому ж каталозі, що і вихідний файл? Хочу відзначити, що якщо так — то він, ймовірно, не може мати те ж саме ім'я. Якщо тільки мова не йде про копіювання файлу самого себе (це теж цікаве питання...)
І: Так.
: Як щодо атрибутів файлу?
І: Скопіюйте їх теж.
: чи Повинен я модифікувати атрибути вихідного файлу? Якщо функція копіювання, яку Ви просите мене написати, є частиною операції резервного копіювання або архівування, то я ніби як повинен скинути архівний атрибут у вихідного файлу.
І: Ні, залиште їх у спокої.
: Ви сказали, що я повинен тупо скопіювати атрибути файлу на файл-копію. Але якщо архівний атрибут у вихідного файлу скинутий, а я його «тупо скопирую» на файл, то це може ввести в оману програми резервного копіювання, які можуть використовуватися на цьому комп'ютері.
І: Просто скопіюйте атрибути. Мене не хвилює, що там користувача організовано резервне копіювання.
: Ну, мені здається, що це не самий розумний підхід при розробці програмного забезпечення, яким все-таки будуть люди користуватися, але раз Ви так наполягаєте…
І:…
: Як щодо атрибута «стиснутий»? Адже може окзаться, що файлова система, на якій знаходиться каталог призначення, не підтримує стиснення.
І: Робіть копію нестиснутій.
: Навіть якщо початковий файл — стислий, а у каталозі призначення підтримується стиснення?
І: ТАК.
: А як щодо атрибута «зашифрований»? Що, якщо вихідний файл зашифрований, а у каталозі призначення не підтримується шифрування?
І: В цьому випадку не шифруйте копію.
: Не хочу відхилятися від теми, але мені здається, що така поведінка створить серйозну дірку в безпеці. Особливо в разі якщо файлова система, на яку ми копіюємо файл, підтримує довільні атрибути (прямо або побічно).
І: Послухайте, просто скопіюйте чортів файл!
: Як щодо інформації про творця файлу?
І: Плювати!
: Як щодо інформації про власника файлу?
І: Плювати!
: А як щодо прав доступу? Чи повинен я по-різному обробляти успадковані і призначені права?
І: До біса права!
: На якій ОС повинна працювати моя функція?
І: Windows XP.
: Home, Pro, Media Center, або якийсь їх комбінації?
І: Pro.
: На який пакет оновлень я можу розраховувати?
І: Service Pack 2.
: тобто я можу не підтримувати попередні рівні оновлень?
І: Вірно.
: Яким чином мені буде передано ім'я файлу?
І: Як параметр.
: чи воно передано рядок, завершена нульовим байтом, рядок з довжиною, або як об'єкт?
І: Рядок, завершена нульовим байтом.
: Передбачати ситуацію з передачею мені порожнього покажчика?
І: Немає.
: Передбачати ситуацію з передачею мені порожній рядок?
І: Немає.
: Передбачати ситуацію з передачею мені неправильно сформованої рядка (наприклад, без завершального нульового байта)?
І: Немає.
: В якому кодуванні буде передане мені ім'я?
І: Unicode.
: Вибачте, але Unicode — це взагалі-то не кодування. Unicode-дані повинні бути в якійсь конкретній кодуванні — наприклад, UTF-8, UCS-2, UTF-16…
І: Добре, нехай буде UTF-8.
: Добре, але смію зауважити, що тоді для передачі виклик Windows API мені доведеться перекодувати у UTF-16, а це кілька геморройно…
І: Тоді UTF-16!
: З яким порядком байтів?
І: Ррррр… з яким хочете!
: Передбачати чи обробку відносних шляхів, або тільки абсолютних?
І: Тільки абсолютних.
: чи Є якісь особливості у переданих мені шляхів, за якими я повинен їх фільтрувати?
І: Немає. Вважайте, що викликає програма це вже зробила.
: Як буде формуватися (чи передаватися) ім'я файлу призначення?

[… текли хвилини, перетворюючись на годинник...]

: чи Повинен я підтримувати (або допускати) асинхронне копіювання?
І: Немає.
: Як я повинен повідомляти про аварійних ситуаціях — виключенням або кодом повернення?
І: Без різниці.
: чи Повинен я обробляти винятки, що приходять з викликаються мною функцій, або просто пропускати їх до викликав мене кодом?
І: Пропускайте.
: Що, якщо файл вже існує?
І: Мамою клянусь, що ні.
: тобто викликає програма це гарантує?
І: Ось саме.
: тобто якщо усе-таки виявиться, що він уже існує, то це значить, що гарантії порушені, і мені слід було б обрушити програму — щось явно пішло не так, і мало що ще вона там зараз наробить?
І: Як хочете.
: А як щодо вторинних потоків даних у файл?
І: Так робите що хочете, чорт би Вас побрал!
: Послухайте, Вам може здатися, що я на Вас тисну, і мені дуже шкода, але мені життєво важливо з'ясувати всі деталі Вашої задачі. Очевидно, раз Ви хочете, щоб я написав Вам нову функцію копіювання файлу, — замість того, щоб скористатися однією з безлічі вже реалізованих у всіляких бібліотеках і фреймворках — то у Вас є якесь дуже-дуже специфічні вимоги, яким бібліотечні функції не задовольняють, і я маю намір ці вимоги з Вас витягнути. Звичайно, я вже можу швиденько накидати що-небудь підходяще, але повинен відзначити, що у нас ще ціла купа не до кінця з'ясованих деталей…
І: ААААААААААААААААААААААААААААААААААААААААААА!!!

Справу зроблено.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.