Можете ли вы на самом деле создавать высококачественный код, если вы лишены сна? [закрыто]

37

Я слышал о программистах, которые два дня бездействуют, пьют кофе и Red Bull . Также в таких фильмах, как The Social Network , в сцене они показывают, что Марк Цукерберг программирует в течение 36 часов. Также я где-то читал, что в таких компаниях, как Facebook, Google, Foursquare и т. Д. Они могут кодировать более 24 часов без сна.

Это правда? Можете ли вы на самом деле создавать высококачественный код, если вы лишены сна? Могут ли такие вещи, как Red Bull наверстать упущенное?

Peter Mortensen
источник
4
Святое дерьмо! Я не думаю, что люди / программисты. Может быть инопланетяне? :)
Гопи
25
«Социальная сеть» не является документальным фильмом. Это только свободно основано на фактических событиях, связанных с основанием Facebook. Как маркетинговая уловка, аспект «правдивая история» обыгрывался, но всякий раз, когда автор и режиссер были загнаны в угол интервьюером, они признавали, что в основном это было их воображение о том, «что могло бы быть».
Чарльз Грант
8
Возможно, это следует перенести на skeptics.stackexchange.com ...
Эван
6
Некоторые могут, но это потому, что они обычно производят код выше высокого качества. К сожалению, гораздо чаще встречается код среднего качества, даже когда он полностью отдохнул ...
4
Я прочитал этот вопрос на следующий день после 38 часов бодрствования, 32 из них на работе. Я хотел сказать кое-что об этом, но в основном любое не отвлеченное время, потраченное на программирование, хорошо для вашего результата, но когда вы полностью устали, вы не отвлекаетесь. Однако вы можете создавать, тестировать, отлаживать, документировать и полировать, если вы одержимы желанием привести его в какое-то воображаемое правильное состояние.
Дламблин

Ответы:

77

Просто нет . Кодирование в течение 36 часов не имеет ничего общего с программированием, скорее это атрибут человека. Очень немногие люди могут бодрствовать в течение 24 часов, и даже когда они бодрствуют, их ум действительно теряет навыки решения проблем. Водители, которые сонные, просто бьют по другим машинам. Бухгалтеры, которые сонные, просто делают ошибки в своих расчетах. Также многие программисты, когда спят, пишут меньше качественного кода.

PS: есть болезнь, называемая бессонницей, которая заставляет вас меньше спать. Но я не думаю, что Google нанимает людей с такой болезнью. :)

Саид Нямати
источник
28
+1: действительно хорошие программисты проводят большую часть своего времени, думая о проблеме, прежде чем они коснутся компилятора. Когда они делают решение, как правило, хорошо продуманное, простое, абстрактное и легко поддерживаемое, кодирование становится тривиальным.
Джастин Шилд
1
@EOL: D Достаточно верно, что следует читать «клавиатура»
Джастин Шилд
4
Мой собственный опыт показывает, что примерно в 9 часов вечера, после 9 часов утра (то есть 12 часов), я устал, раздражен, не могу думать прямо и не могу ничего писать или отлаживать. Дом и сон гораздо эффективнее, чем глупые вещи, такие как тянуть всю ночь. То, что это сделано, не говоря уже об эффективности, является мифом.
quick_now
3
@quickly_now Точно. Код становится все хуже и хуже по экспоненте в зависимости от времени. Таким образом, технически вы можете писать код, если вы можете сидеть перед компьютером. Но тогда, не приходите в SO и не спрашивайте, как ваша функция сортировки O (n ^ n) может быть оптимизирована;).
Доктор Маккей
20
Подождите, вам разрешено спать только после 24 часов кодирования? Я знал, что эта работа звучала подозрительно, когда я начал!
Ник Крейвер
41

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

О, конечно, может быть, какой-то молодой ребёнок, только что закончивший среднюю школу, сможет совершить нечто вроде чудеса кодирования за 36 часов. Но так ли написан код, поддерживаемый? Это даже читабельно? Это масштабируется? Это следует за разумными методами программирования? Это задокументировано?

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

Исключения подтверждают правило.

Роберт Харви
источник
6
Можно также рассматривать их как веские причины не беспокоиться о том, чтобы сделать это правильно с первого раза - по крайней мере, когда вы потенциально создаете новый рынок.
Ааронаут
1
Переписывание в Твиттере не соответствует действительности, согласно тому посту, на который вы ссылались. Посмотри на обновление.
jjnguy
@jjnguy: Достаточно справедливо, но пример все еще актуален, учитывая проблемы с простоями и масштабируемостью, которые были у Twitter.
Роберт Харви
2
Это может не привести к высококачественному коду, но если у вас есть основы и вы можете использовать TDD «во сне», то код не будет таким плохим. Самое важное, что кодирование, когда вы устали, делает то, что ваш мозг с меньшей вероятностью будет игнорировать случайные мысли, и вы станете более креативными. ru.wikipedia.org/wiki/Sleep_and_creativity
Обезьяна
29

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

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

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

DXM
источник
3
+1 за добавление идеи, что непрерывное время может быть качественным временем (но только в разумных дозах).
Эрик О Лебиго
1
Концентрация @DXM очень помогает. Качество времени превышает количество времени
lovesh
1
@lovesh - я бы точно так не сказал. (качество времени) x (количество времени) = результаты. Увеличение любого увеличивает результаты. Однако увеличение времени со временем снижает качество. Наша цель всегда максимизировать результаты.
ДХМ
13

Все это звучит как преувеличение нахождения в «зоне». Когда вы полностью сосредоточены, как программист, время искажается, минуты становятся секундами и т. Д. Вы, вероятно, работаете наиболее продуктивно. Иногда бывает трудно войти в это состояние, и довольно легко выйти из него (в основном, из-за внешних факторов), но когда вы… вау!

MPelletier
источник
2
Я писал свой пост, думая о том, как включить фразу «в зоне», когда вы разместили это.
knb
Я просто собирался опубликовать его в качестве комментария, потому что на данный момент все ответы «я тоже», но я подумал, что странно, что никто еще не упомянул это явление.
MPelletier
2
В самом деле, если вы находитесь в зоне, намного проще кодировать очень долго. Однако потерять фокус, как только вы закодировали это долго, неприятно, если не сказать больше.
DasIch
10

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

При этом, мне все труднее. Я бы предположил, что это емкость, которая истощена и в конечном итоге исчерпана. И, может быть, имеет некоторые негативные последствия для здоровья - физические или психические, долгосрочные или краткосрочные, я не могу сказать.
Что я могу сказать, так это то, что вы чувствуете себя зомби, и вы будете чувствовать себя так же и в дни после такого марафона. Лично у меня было очень сильное выгорание после того, как я делал это часто в течение года.
То есть: некоторые люди могут эффективно работать в течение такого промежутка времени, но это обходится дорого .
Обычно это было следствием плохого планирования и отсутствия опыта в заполнении пробелов, оставленных нетехническими руководителями проектов, это был единственный вариант.

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

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

Суть в том, что вы должны работать только столько, сколько сможете, а не дольше . Если вы можете работать только 4 часа, тогда хорошо. Сделайте перерыв и работайте после этого. Попытки бодрствовать в течение 36 часов, в течение которых вы выполняете 8 часов работы, бессмысленны. Вы получаете вдвое больше работы, если вы делаете 4 сеанса по 4 часа каждый и используете оставшиеся 20 часов для регенерации.
Если вы можете работать так долго, значит, вы более гибко реагируете на недооценку. Однако долгосрочное решение улучшает ваш процесс планирования и оценки. Если это невозможно на вашем рабочем месте, поменяйте местами. Если люди ожидают, что вы будете работать так долго, смените место работы. Вам не нужно ничего никому доказывать.

back2dos
источник
Это звучит как большая дальняя ложь. Никто не может работать в течение 36 часов, и на самом деле производит что-то полезное
BЈовић
@VJovic: Ну, если ты так говоришь, то, я думаю, нам всем просто нужно в это поверить;)
back2dos
5

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

Чарльз Э. Грант
источник
1
И только то, что вы можете , не означает, что вы эффективны , особенно после 12-15 часов.
quick_now
10
Плохие программисты также могут программировать в течение 36 часов. Продолжительность времени кодирования не имеет ничего общего с качеством кодера.
Марьян Венема
5

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

Иногда ваша нехватка концентрации является основной причиной долгих часов. У нас когда-то был срок на следующий день. После уже очень долгого дня мы закончили все это, и было 2 часа ночи. Оставалась только одна неприятная ошибка. У моего босса была назначена встреча с заказчиком в 9 утра, так что времени было много. Мне потребовалось несколько часов, чтобы найти и исправить то, что в противном случае я бы исправил через полчаса. Я просто знал наверняка, что смогу найти его в любом случае, и не было никаких причин подводить моего босса, так как ночь все равно прошла.

Торстен Мюллер
источник
5

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

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

JeffO
источник
4
+1 за обращение к медперсоналу. Я думаю, что перегруженные работой больничные врачи делают это регулярно ... работают в стрессовые ночные смены, а затем в дневные смены ... верный способ сгореть через несколько месяцев или даже лет.
knb
6
Теперь возникает утешительная мысль;) Спят лишенные интерны и люди с опасными для жизни условиями здоровья. Попробуйте исправить эти ошибки «позже».
Ли
1
Риски, связанные со стажерами, лишенными сна, хорошо известны, и многие организации отказываются от этой практики. Частично это держится, потому что доктора, которые делают обучение, помещают в те длинные смены.
BillThor
4

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

Члены дружной группы называли себя «хакерами». Со временем они расширили описание «хакера» и на Столлмана. При этом они внушали Столлману этические традиции «хакерской этики». Столлман научился, что быть хакером - это не просто писать программы. Это означало написание лучших программ. Это означало сидеть за терминалом в течение 36 часов подряд, если это то, что нужно для написания наилучших возможных программ. Самое главное, это означало, что у вас всегда был доступ к лучшим машинам и самой полезной информации. Хакеры открыто говорили об изменении мира с помощью программного обеспечения, и Столлман научился инстинктивному хакерскому презрению относиться к любым препятствиям, мешавшим хакеру выполнить это благородное дело. Главным среди этих препятствий было плохое программное обеспечение,

Конечно, это не значит, что это одно правило для всех. Некоторые люди могут это сделать, а другие нет. Самое главное, чтобы вас не прерывали, а работали в те периоды, когда вы чувствуете себя очень продуктивно. Таким образом, вы можете попробовать для себя и сделать выводы :)

sakisk
источник
3

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

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

Калеб Бразе
источник
хорошо, если на качество влияет то, как парни в Facebook делают все время (по крайней мере, говорят, что делают)
lovesh
4
... основываясь на моем недавнем опыте с Facebook, я бы сказал, что это вполне соответствует моему аргументу. Я получил около 3 или 4 ошибок, используя разные части Facebook сегодня.
Калеб Бразе
3
@lovesh "Говорят, что они это делают" и "они делают это" - это две разные вещи.
Скотт С. Уилсон
3

Сомневаюсь, если честно. Фактически, несмотря на то, что мифы и истории о людях, достигших X, Y и Z, не спали в течение 24 часов, они оказываются в экстремальных обстоятельствах и встречаются редко.

Давным-давно, я обычно предоставлял пул для набора текста для юридической фирмы, которая иногда заставляла людей тянуть всех на ночь, чтобы попытаться достать вещи в определенные времена. Любой, кто занимался сумасшедшими часами при составлении документов, обычно заканчивал тем, что отправлял эти документы, чтобы их ночные изменения были отменены. На мой взгляд, невозможно постоянно выполнять на высоком уровне более 12 часов за раз (и даже это чрезмерно), переживая недостаток сна, повышая уровень кофеина. Я думаю, что людям нравится рассказывать эту историю, но если они будут честными, они признают, что их средняя работа в течение длительных сессий, независимо от того, какая работа, будь то кодирование или написание юридических документов, редко, если вообще когда-либо, достаточно хороша чтобы соответствовать их выходу, если они получили достаточный отдых.

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

temptar
источник
2

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

Philluminati
источник
2

Я и многие другие творческие люди демонстрируем черты биполярной личности. При разработке программного обеспечения я склонен следовать алгоритму Фейнмана:

  1. Запишите проблему. (Протокол)

  2. Думай очень усердно. (Между днями и годами)

  3. Запишите решение. (дни)

Гипоманический эпизод с резко сниженным сном (кофеин или нет) - это всего лишь билет до финиша №3.

Джон Перди
источник
2

Пожалуйста, смотрите этот пост в Skeptics.SE: Пик Баллмера настоящий? и, в частности, этот ответ Е.С. Султаника .

Почему я думаю, что эти два вопроса связаны? Мне кажется, что нарушение, вызванное недосыпанием, чем-то похоже на пьянство, хотя у меня нет никаких ссылок, подтверждающих мое утверждение.

Цитата из цитируемой ссылки Е.С. Султаника,

... умеренное потребление алкоголя подавляет аспекты творчества, основанные главным образом на вторичном процессе (подготовка, определенные части освещения и проверки), и запрещает те, которые основаны главным образом на первичном процессе (инкубация, определенные части освещения и реституция).

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

оборота
источник
2

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

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

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

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

Эрик Фанкенбуш
источник
1

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

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

Хотя мы не были «лишены сна», у нас все еще не было правильного мышления для работы над кодом ... просто странно, что случилось в тот день, мы всегда упоминаем об этом.

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

Dal
источник
+1 Я не уверен, что это отвечает на вопрос, но мне все равно понравился ответ :-)
Дэнни Варод
0

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

Но я думаю, что вы можете сделать потрясающую работу, скажем, за 3-4 часа хорошего сна. Это работает даже в течение нескольких дней интенсивной (интеллектуальной) работы с небольшим сном.

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

KNB
источник
Это типичный график студента CS, не так ли?
user16764