Чи можете ви насправді створити високоякісний код, якщо вам не вистачає сну? [зачинено]


37

Я чув про програмістів, що кодують два дні без сну і пиття кави та Red Bull . Також у фільмах, таких як "Соціальна мережа" , на сцені вони показують, що Марк Цукерберг програмував 36 годин. Також я десь читав, що у таких компаніях, як Facebook, Google, чотирикутник тощо, вони можуть кодувати більше 24 годин без сну.

Це справді правда? Чи можете ви насправді створити якісний код, якщо вам не вистачає сну? Чи можуть такі речі, як Red Bull, компенсувати сон?


4
О ні! Я не думаю, що це люди / програмісти. Може бути інопланетянами? :)
Gopi

25
"Соціальна мережа" не є документальним фільмом. Це лише вільно базується на фактичних подіях, пов’язаних із заснуванням Facebook. Як маркетинговий сюжет відтворювався аспект "справжньої історії", але щоразу, коли автора та режисера забирали інтерв'ю, вони визнавали, що в основному це була їхня фантазія щодо того, "що могло бути".
Чарльз Е. Грант

8
Можливо, це слід перенести на skeptics.stackexchange.com ...
Еван

6
Деякі можуть, але це тому, що вони зазвичай створюють високоякісний код. На жаль, набагато частіше виготовляти код середньої якості, навіть коли повністю відпочили ...

4
Я прочитав це запитання наступного дня після того, як прокинувся 38 годин, 32 з них на роботі. Я хотів щось про це сказати, але в основному будь-який не відволікаючий час на програмування корисний для ваших результатів, але коли ви зовсім втомилися, ви не відволікаєтесь. Однак ви можете створювати, тестувати, налагоджувати, документувати та відшліфувати, якщо ви одержимі, щоб отримати його до якогось уявного правильного стану.
dlamblin

Відповіді:


77

Просто ні . Кодування протягом 36 годин не має нічого спільного з програмуванням, скоріше це атрибут людини. Дуже мало людей можуть не спати протягом 24 годин, і навіть коли вони не сплять, їх розум дійсно втрачає навички вирішення проблем. Водії, які сплять, просто наїжджають на інші машини. Бухгалтери, які сплять, просто роблять помилки у своїх розрахунках. Також багато програмістів, коли сплять, пишуть код менш якісний.

PS: Існує недуга під назвою безсоння, яка змушує вас менше спати. Але я не думаю, що Google наймає людей з такою хворобою. :)


28
+1: Дійсно хороші програмісти витрачають більшу частину часу на роздуми над проблемою, перш ніж торкнутися компілятора. Коли вони вирішують рішення, як правило, добре продумане, просте, абстрактне і легко підтримується, кодування потім стає тривіальним.
Джастін Шилд

1
@EOL: D Досить правда, що слід читати "клавіатуру"
Джастін Шилд

4
Мій власний досвід полягає в тому, що близько 21:00, після початку 9 ранку (так що 12 годин), я втомився, дратівливий, не можу думати прямо, і не в змозі нічого написати або налагодити. Будинок і сон набагато ефективніше, ніж дурні речі, як, наприклад, тягнути всіх себе. Те, що це зроблено, не кажучи вже про ефективне, - це міф.
quick_now

3
@quickly_now Рівно. Код стає гіршим і гіршим експоненціально у функції часу. Таким чином, технічно ви можете кодувати, поки зможете сидіти перед комп'ютером. Але тоді не підходьте до SO і запитайте, як можна оптимізувати функцію сортування O (n ^ n);).
Доктор Маккей

20
Зачекайте, вам дозволяється спати лише через 24 години кодування? Я знав, що ця робота звучала рибно, коли я починав!
Нік Крейвер

41

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

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

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

Винятки доводять правило.


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

1
Переписування в Twitter не відповідає дійсності відповідно до публікації, з якою ви пов’язані. Подивіться на оновлення.
jjnguy

@jjnguy: Досить справедливо, але приклад все ще здається актуальним, враховуючи проблеми простою та масштабованості.
Роберт Харві

2
Це може не призвести до високоякісного коду, але якщо у вас є основи і ви зможете робити TDD «уві сні», код не буде таким поганим. Найголовніше, що кодування під час втоми полягає в тому, що ваш мозок рідше ігнорує випадкові думки, і тому ви станете більш творчими. en.wikipedia.org/wiki/Sleep_and_creativity
Ape-inago

29

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

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

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


3
+1 за додавання ідеї, що безперебійний час може бути якісним часом (але лише у розумних дозах).
Ерік О Лебігот

1
Концентрація @DXM дуже допомагає. Якість часу за кількість часу
любить

1
@lovesh - я б не сказав саме цього. (якість часу) x (кількість часу) = результати. Збільшення будь-якого збільшує результати. Однак збільшення часу, з часом знижується якість. Наша мета - завжди максимізувати результати.
DXM

13

Вся справа просто звучить як перебільшення того, що перебуваєте «в зоні». Коли ви цілком зосереджені, як кодер, час викривляється, хвилини стають секундами і т. Д. Ви, мабуть, у вас найбільш продуктивні. Іноді важко потрапити в такий стан, і вийти з нього досить просто (в основному зовнішні фактори), але коли ти .... ух!


2
Я писав свій пост, думаючи про те, як включити фразу "в зону", коли ви опублікували це.
кнб

Я просто збирався розмістити це як коментар, тому що в цей момент усі відповіді "я теж", але я подумав, що це дивно, як ніхто ще не згадував про це явище.
MPelletier

2
Дійсно, якщо ви знаходитесь в зоні, кодування набагато простіше дуже довго. Однак втратити фокус після того, як ви закодували це довге, неприємно сказати.
DasIch

10

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

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

Зараз ви рідко знайдете якісний код, який виробляється під час таких марафонів. Однак головною причиною цього є обставини, в яких трапляються ці марафони: Ситуації, коли вам потрібно забезпечити особливості X, Y і Z за дуже короткий проміжок часу. Ніхто насправді не дбає про якість коду в цей момент, саме тому ви накопичуєте багато технічної заборгованості за допомогою виправлень та інших хакерів.
У той же час це вказує на недоторкану працездатність мозку: для швидких виправлень та злому потрібен як огляд, так і творчість.

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

Суть полягає в тому, що: Ви повинні працювати лише до тих пір, поки можете, і не довше . Якщо ви можете працювати лише 4 години, тоді добре. Зробіть перерву і працюйте після цього. Намагатися не спати протягом 36 годин, протягом яких ви отримуєте 8 годин роботи, безглуздо. Ви зробите вдвічі більше роботи, якщо зробите 4 сеанси по 4 години кожен і використовуєте решту 20 годин для регенерації.
Якщо ви можете працювати такі довгі години, це означає, що ви більш гнучко реагуєте на недооцінку. Однак довгострокове рішення покращує процес планування та оцінки. Якщо це неможливо на вашому робочому місці, замініть роботу. Якщо люди очікують, що ви будете працювати так довго, перемкніть роботу. Не потрібно нікому нічого доводити.


Це звучить як велика далека брехня. Ніхто не може працювати 36 годин, а насправді виробляти щось корисне
BЈовић

@VJovic: Ну, якщо ти так скажеш, то, мабуть, ми просто всі мусимо повірити;)
back2dos

5

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


1
І лише тому, що ви не можете, це не означає, що ви ефективні , особливо після приблизно 12 - 15 годин.
quick_now

10
Погані програмісти також можуть програмувати протягом 36 годин. Тривалість часу кодування не має нічого спільного з якістю кодера.
Мар'ян Венема

5

Ви можете залишатися неспаними і працювати 36 годин, якщо ви здорові. Але в цей час ви не напишете свій найкращий код або вирішите дуже складні проблеми. Я працював дуже довгі години раз у раз. Більшість часу це стосувалось дотримання деяких строків. Але робота тоді здебільшого додавала незначні функції, такі як друк деяких списків, полірування деяких макетів. Нічого, де потрібно багато думати, більше, як багато друкувати. Основні особливості та складні частини програм, де вже закінчено.

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


5

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

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


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

6
Зараз є втішна думка;) Сон позбавлений інтернів та людей із загрозою життю. Спробуйте виправити ці помилки "пізніше".
Лі

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

4

Це не неможливо і це сталося реально. Оскільки розділ довгий, дозвольте мені навести фактичний параграф:

Члени тісно пов'язаної групи називали себе "хакерами". З часом вони поширили опис "хакера" і на Стеллмана. У процесі цього вони прищеплювали Сталлмена етичні традиції "хакерської етики". Бути хакером означало більше, ніж просто писати програми, дізнався Сталлман. Це означало написання найкращих можливих програм. Це означало просидіти в терміналі протягом 36 годин прямо, якщо для цього потрібно було написати найкращі програми. Найголовніше, що це означало мати доступ до найкращих машин та найкориснішої інформації у всі часи. Хакери відкрито говорили про зміну світу за допомогою програмного забезпечення, і Стеллман дізнався про інстинктивну хакерську зневагу до будь-яких перешкод, які заважали хакеру виконати цю благородну справу. Основними серед цих перешкод були погане програмне забезпечення,

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


3

Я думаю, що це можливо, якщо ти машина - я не сумніваюся, що деякі можуть це зробити. Але досвід навчив мене, що переважна більшість програмістів будуть писати гірший код незабаром після позначки 8 - 10 годин, а жахливий код - після 16 годин.

Декілька разів, коли наша команда була змушена витягнути все-більш, ми фактично опинилися з деяким кодом, який потрібно було відкотити назад.


добре, якщо на якість впливає, як хлопці в Facebook роблять весь час (принаймні, це говорило, що робіть)
Loveh

4
... грунтуючись на моєму недавньому досвіді з Facebook, я б сказав, що він цілком відповідає моєму аргументу. Я сьогодні отримав близько 3 або 4 помилок, використовуючи різні частини Facebook.
Kaleb Brasee

3
@lovesh "Кажуть, що вони роблять" і "вони роблять" - це дві різні речі.
Скотт C Вілсон

3

Я сумніваюся, щоб бути чесним. Насправді, незважаючи на міфи та історії про те, що люди досягають X, Y і Z, пробуджуються протягом 24 годин, вони трапляються в екстремальних обставинах і є рідкісними.

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

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


2

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


2

Я та багато інших творчих людей демонструємо риси біполярної особистості. При розробці програмного забезпечення я схильний дотримуватися алгоритму Фейнмана:

  1. Запишіть проблему. (Хвилини)

  2. Думайте по-справжньому важко. (Між днями та роками)

  3. Запишіть розв’язку. (Днів)

Гіпоманічний епізод із різко зменшеним сном (кофеїном чи ні) - лише квиток на фінал №3.


2

Будь ласка, дивіться цю пов’язану публікацію в Skeptics.SE: Чи справді Балмер Пік? , і зокрема ця відповідь ESultanik .

Чому я вважаю, що ці два питання пов'язані? Мені здається, що порушення, спричинені позбавленням сну, дещо схожі на випивання, хоча я не маю жодних посилань на підтвердження своєї претензії.

Цитуючи цитовану посилання ESultanik,

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

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


2

Коли когось змушують кодувати протягом 36 годин, це зазвичай через термін подачі товару. Коли хтось у такий термін, якість коду, як правило, перше, що викинуто. "Просто зробіть це" - це мантра. "Ми виправимо це у версії 2" - це ще одна мантра.

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

Коли ХОЧЕ кодувати прямо протягом 36 годин, це тому, що у вас є сильний творчий сплеск, і ви не хочете його переривати. Ви не будете писати код якості протягом 36 годин, але ви будете писати творчий код. Потім ви повертаєтесь пізніше і дивитесь на цей код і дивуєтесь, як він працює.

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


1

Кілька місяців тому я виїжджав із співавторами. Наступного дня ми повернулися в офіс, зависли ... але на наш подив ми закрили рекордну кількість помилок.

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

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

О, і для схильних більшість із нас максимумували на JD & Coke :)


+1 Я не впевнений, що це відповідає на питання, але мені все одно сподобалась відповідь :-)
Danny Varod

0

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

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

Однак для мене після цього повинен слідувати період відновлення; скажімо, пару ночей зі звичайним 7-8 годинним сном.


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