full stack javascript developer
0,0
рейтинг
13 апреля 2014 в 23:31

Разработка → Джон Резиг: Пишите код каждый день перевод

Прошлой осенью работа над моими побочными проектами зашла в тупик: я практически не продвигался вперёд и у меня никак не получалось делать больше, не принося в жертву свою основную работу в Khan Academy.

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

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

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

image
Иллюстрация Стивена Резига

Я установил для себя несколько правил:

  1. Я обязан кодить каждый день. Я могу заниматься другими вещами — писать документацию или статьи в блог, но только в дополнение к работе над кодом.
  2. Это должен быть функциональный код. Возня с отступами, переформатирование, и, насколько это возможно, рефакторинг — не считаются. Я могу заниматься всем этим, но это не может быть основной частью дневной нормы.
  3. Считается только код, написанный до полуночи.
  4. Весь код должен быть открытым и публиковаться на Гитхабе.

Некоторые из этих правил кажутся надуманными. Технически, нет никакой нужды писать код исключительно до полуночи, но я хотел заставить себя не засиживаться допоздна, чтобы код не был грязным. Также не обязательно публиковать всё написанное на Гитхабе. Мне это правило было нужно, чтобы внимательней относиться к коду — как можно раньше задумываться о повторном использовании или модульности.

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

image

Эти изменения в рабочих привычках принесли множество интересных результатов:

Минимальный рабочий код. Мне пришлось выделять для работы над кодом не меньше получаса в день. Очень трудно написать что-то осмысленное за меньшее время, особенно учитывая, что приходится вспоминать, на чём остановился вчера. Иногда мне удавалось поработать чуть больше (но обычно не больше часа), а по выходным бывало, что и весь день.

Программирование как привычка. Важно отметить, что меня, по большому счёту, не сильно интересовало, как выглядит диаграмма с Гитхаба на картинке выше. Думаю, что это самый важный итог моего эксперимента: главное, чтобы вы хотели что-то изменить для себя, а не произвести своей работой внешнее впечатление на кого-то другого. То же самое верно и для любой диеты или физических упражнений: вам никогда не добиться успеха, если вы делаете их не для себя самого.

Победа над тревогой. До начала своего эксперимента я часто чувствовал сильное беспокойство от того, что не успел сделать «достаточно» работы, или продвинуться «достаточно» далеко (хотя измерить эту «достаточность» я не мог, так как у побочных проектов не было конкретных дедлайнов). Я понял, что ощущуение прогресса в работе настолько же важно как и сам прогресс. У меня открылись глаза! Как только я начал стабильно продвигаться вперёд каждый день, вся моя тревога постепенно растаяла. Я был удовлетворён объёмом сделанной работы и больше не испытывал одержимости сделать как можно больше в один присест.

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

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

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

Управление временем. Один из самых важных для меня аспектов эксперимента — я научился лучше распределять время между работой, побочными проектами и остальной жизнью. Зная, что мне придётся сделать хоть немного ежедневно, я просто обязан был научиться лучше планировать свой день. Если у меня были другие планы на вечер, мне приходилось переносить работу над проектом на более раннее время, до начала основной работы. Если я не успел поработать, но задерживался где-то, мне приходилось вернуться домой пораньше, чтобы успеть закончить, вместо того, чтобы просто пропустить день. Признаюсь, у меня стало оставаться меньше времени на хобби (гравюры укиё-э и другое), но тут уж ничего не поделаешь, приходится выбирать.

Внешнее восприятие. Ещё один плюс появляется, когда твои близкие привыкают к твоим новым правилам. Моя девушка понимает, что я должен хоть немного поработать над проектами каждый день, и другие дела иногда приходится планировать с учётом этого. Очень приятно, когда ты можешь сказать «Да, мы можем пойти прогуляться (сходить в кино и т.п.) но после этого мне надо закончить работу» — и знать, что к этому отнесутся с пониманием.

Сколько кода я написал? Мне с трудом верится в то, насколько много я успел написать за последние несколько месяцев. Я сделал пару сайтов, переписал несколько фреймворков и написал кучу новых модулей для Node. Я сделал настолько много, что иногда даже не помню всё, что я написал — то, что было всего несколько недель назад, кажется далёким прошлым. Я чрезвычайно удовлетворён объёмом проделанной работы.

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

Перевод: John Resig
Илья Сименко @ilya42
карма
526,7
рейтинг 0,0
full stack javascript developer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (56)

  • +12
    Хорошо, что хорошо идет — главное ведь, когда сам получаешь удовольствие от того, что делаешь. Все остальное — синтаксический сахар жизни. Кое-что себе почерпнул.
  • –9
    Каждый день, исключая 1 января
    • +20
      Не надо искать причин чтобы чего-то не делать: у 1 января есть вечер.
      • +5
        Предложите это Robin Seggelmann'у, он оценит :)
    • 0
      Сбой при переключении контекста?
      • +3
        Нестыковка при преобразовании дат.
    • +1
      «There is no holidays in this religion.»
    • 0
      Я уже года 4 первого января стабильно хожу тренироваться, это, скажем так, чуть более сложно (хотя бы из-за косых взглядов работников тренажерного зала), чем посидеть дома за кодом.
  • +57
    А я раньше начал эту движуху.

    Так что сейчас на моём календаре насчитывается 235 дней ежедневной работы над открытым и свободным исходным кодом.
    • +1
      Полагаю, после 365 дня может появиться пост?
    • +5
      Т.е. вы пишите код, где бы вы ни были?

      Хотя, если есть ноутбук, его всего можно брать с собой и даже в путешествии можно найти 1-2 часа вечером для работы.

      Вы могли бы поделиться трудностями и демотивациями, которые встречались вам в этом начинании и как вы с ними справлялись?
      • +1
        К предыдущей блогозаписи почти нечего прибавить, вот только во время перехода гитхабного календаря на местное время пришлось немного понервничать, потому что, например, не было ясно, как станет учитываться день перехода — стало быть, для подстраховки коммитил утром и вечером.

        После перехода на местное время, кроме того, стало невозможно хладнокровно лечь спать с настроением «в Кремниевой долине ещё утро, завтра до московского полудня успею ещё чего-нибудь доделать», потому что теперь важно, что раньше кончаются мои местные сутки. А когда хочется, чтобы очередной квадратик позеленел как можно скорее, то тогда возникает мотив засиживаться до полуночи (чтобы закоммитить что-нибудь сразу после полуночи), а ведь такое поведение вообще-то никак нельзя назвать здоровым образом жизни и правильным ритмом сна да бодрствования.

        Кроме того, квадратик очередных суток, хотя учитывается по местному времени, возникает всё равно по времени Кремниевой долины, так что с утра «серого квадратика» как бы «нет ещё» (если коммит поступает утром, то квадратик возникает сразу зеленоватым, никогда не побывав серым). Это как бы знак с утра не сильно напрягаться.
        • +7
          Помоему, это уже противоречит правилу «Победа над тревогой». Комитить стоит не по времени а по необходимости — в конце какого-то законченного до точки этапа. И пусть себе там болтаются серые квадратики…
  • +8
    Такая красивая картинка (ни дня без коммита на Гитхаб) получилась благодаря его специфике: 1) это JS; 2) «куча модулей для Node», выходит, маленький контекст (или его вообще нет), можно не думать о совместимости изменений со всеми частями большого проекта и т. д. Только в таких условиях полчаса может хватить хоть на что-то.
    • +9
      Ну пускай для вас это будет час. Кто хочет ишет возможности, кто не хочет — оправдания.
  • +8
    Я тоже пришел к такому режиму работы над своим проектом. При этом у меня исчезло такое явление как прокрастинация при работе над длинным проектом, и повысилась продуктивность. Я выделяю всего час в день и совсем не работаю по выходным (время, которое провожу дома, принадлежит только моей семье) и за последние 3 месяца сделал больше, чем за предыдущий год, пытаясь заставить работать себя по ночам.
    Надеюсь, что скоро опубликую статью про первую версию своего проекта.
    • +3
      А вы работаете час в день дополнительно на работе / сразу как домой приходите / когда все спать лягут / как-то иначе? Тоже хочется распределить свое время, чтобы семью не ущемлять
      • +3
        Поддерживаю вопрос — когда этот час и где выделяете? Никак не могу найти оптимальное время.
        • +3
          Это коварный вопрос. Сегодня он ответит «на работе» (или даже «иногда на работе»), а завтра ему скажут: а напиши-ка заявление на увольнение по собственному желанию, или послезавтра вылетишь по-плохому. «Мы тебя не на GitHub нанимали». «И на рекомендациях с этого места работы отразится».
          • 0
            Ок, согласен ) Компроминтирующий вопрос, но человек собирался написать топик, то есть, скорее всего, всё легитимно )
            • +1
              Ну да, чуть ниже публика также считает, что об этом можно рассуждать свободно.

              (Правда, быть может, это фрилансеры; на лбу ж у них не написано.)
        • +1
          Использовать рабочее время было бы некорректно, да и опасно, потому что в случае успеха любого вашего проекта у вас могут начаться юридические сложности, поэтому на работе я этим не занимаюсь принципиально.
          Дело в том, что я живу около одной из крайних станций метро (СПб, метро пр. Просвещения) и езжу на работу не в час пик, поэтому у меня есть возможность сесть с ноутом и полчаса работать, пока не доеду до станции, на которой мне выходить. Т.е. получается, что я пишу код даже 2 раза в день (полчаса по дороге на работу, полчаса по дороге домой). Несмотря на то, что это не такой уж и простой проект, я не успеваю выпасть из контекста, т.к. не проходит слишком много времени между сессиями написания кода, а перед тем, как зайти в метро, я иду от работы 15 минут пешком (от дома — 10 минут). Это время я трачу на то, чтоб составить себе план работ на ближайшие полчаса.

          Именно поэтому я в свое время полностью решил отказаться от машины для поездок на работу (она у меня для поездок в выходные + в будни по семейным делам), а также не пользуюсь транспортом, если можно дойти пешком за 15-20 минут.
  • +13
    Интересный побочный эффект от регулярной ежедневной работы над проектом заключается в том, что ваш разум начинает работать над ним и в фоновом режиме.

    «Да, мы можем пойти прогуляться (сходить в кино и т.п.) но после этого мне надо закончить работу»


    Каждому своё, конечно, но от такого распорядка можно как минимум невроз заработать, а как максимум депрессию или вообще свихнуться.
    • +2
      от такого распорядка можно легко заработать одиночество
      нужно очень хорошее и стабильное взаимное понимание, чтобы не было «опять ты там за компом, а я — золушка»
  • +15
    Перестановки мебели всегда хорошо. Посмотрим, что он запоет через год.
  • +1
    Пробовал то же самое с английским, 3D и рисованием.
    Реально работает, потому-что 30 минут в день это больше, чем «наверное, я посижу максимально много на выходных», которые постоянно оказываются заняты другими делами.

    Через неделю опять начну по этой системе повышать свои навыки и работать над своими проектами.
  • +3
    После прочтения у меня сложилось впечатление, что у меня с основными проектами все так же плохо, как у него было со сторонними до модернизации. Что-то я делаю не так…
  • +4
    Буквально недавно пришел к тому, что начинаю свой рабочий день с пары часов работы над собственными проектами.
    Во первых, это помогает разогнаться и просто начать работать. Исчезает одна из проблем прокрастинации, когда не хочется садиться за чужой проект. Теперь, просыпаясь каждое утро я знаю, что в редакторе кода меня ждет тот маленький модуль, который я с удовольствием пилю.
    Во вторых, я вижу процесс и мне от этого спокойнее, пропадает волнение. Образуются какие-то маленькие победы, что очень мотивует. Особенно здорово, когда за одно утро получается сделать одну рабочую фичу.
    Так же при таком подходе появляется реальная необходимость в to-do списках и планировании.
    • 0
      начинаю свой рабочий день с пары часов работы над собственными проектами.

      Хорошая мысль, надо попробовать!!! А то с утра ломает начинать над обязаловкой работать, а в конце дня, когда выложился, сил на что-то свое не остается
  • +4
    А еще — ведь при таком подходе на сон остается больше времени, т.к. мысли «вот хотел, но не смог» голову уже не сверлят. Ты выполнил долг перед собой — час работы, всего час… ты закоммитил сделанное, его можно пощупать, это не чушь. Круто!
  • 0
    Полностью поддерживаю такой подход, тоже стал постепенно к нему приходить. Считаю, что важно в любом случае не строить планов «вот за выходные я все доделаю». Если успеваешь много написать по вечерам — к концу недели устаешь и не успеваешь сделать все запланированное на выходных. Появляется ощущение неудовлетворенности, даже если за неделю успел многое.
  • +4
    Мой домашний проект на C++ постоянно проходит через 2 стадии:
    1) Быстрая, грязная и костыльная разработка новых фич «главное, чтоб работало и не часто падало».
    2) Понимание возникшей фичи и рефакторинг нового функционала.
    Времени эти пункты занимают, в лучшем случае, 50/50. И я не хочу браться за новый функционал, когда предыдущий не готов.
    Автор же утверждает, что на рефакторинг нужно искать другое время. Когда? По полчаса в день — это не для каждого проекта подходит.
    <размышление>Надо все переписывать на js</размышление>
    • +1
      Аналогично. Я рефакторингом занимаюсь наравне с написанием нового кода — рефакторинг тоже неплохо избавляет от укоров совести. Иногда сил или мотивации не хватает на полноценную разработку, вот тогда можно вычистить и причесать результаты прошлых приступов вдохновения. :) Иногда в процессе рефакторинга приходит аппетит и чего-нибудь конструктивно нового запилить.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Да, все задачи сюда попадают. Подобного рода дела можно просто объединять и выделять им час, например. Рано или поздно вся куча дел сойдет на нет.
    • +1
      При принятой Резигом форме самоконтроля учитываются только те задачи, по итогам выполнения которых получается коммит или другое действие, поступающее на GitHub. А не то они не отразятся в календаре на Гитхабе.

      Правда, «написать статью на свой сайт» можно через GitHub, если сайт на GitHub Pages.

      Правда, «заполнить багрепорт на игру» или «провести сессию в игре и оформить feedback» можно, если при этом открывается проблема (issue) на Гитхабе — то есть если игра с открытым на Гитхабе исходным кодом и галочка «Issues» не снята в настройках у репозитория её.
      • НЛО прилетело и опубликовало эту надпись здесь
      • –6
        Толсто
  • 0
    Вдохновился блогом одного знакомого it-шника который поставил себе цель минимум 60 дней непрерывной работы над открытым кодом и с начала года тоже начал непрерывно коммитить.
    Открытием для меня оказалось что профиль в github не настраивается под конкретный часовой пояс и в итоге сутки считаются не по московскому времени.
    Пока удалось сделать непрерывно 54 дня с коммитами, а потом однажды просто физически не успел закоммитить вовремя и график сбился :/
  • +1
    Я тоже пришел к подобной методике.
    Раньше откладывал на потом, на выходные, поскольку, думал «Ну а что я могу сделать за пол часа свободного времени??? Лучше блоги почитаю». В итоге в выходные ничего не успевал. Ходил с плохим настроением, поскольку сам осознавал, что задачи, которые я ставил для себя не выполнены.
    Сейчас стараюсь писать каждый день, по чуть-чуть, пол часа перед работой или пол часа вечером перед сном.
    Такой подход позволяет разгрузить голову от общих проблем, пишешь только небольшие кусочки кода, есть время подумать над следующим шагом. В итоге за рабочую неделю (5 дней по пол часа) успевал сделать больше, чем за 8 часов на выходных.
    Мозг в фоновом режиме обдумывает проблему с которой я столкнулся за пол часа и на следующий «сеанс программирования» я уже знаю, «в какую сторону копать».
  • 0
    Спасибо за перевод.

    Столкнулся с абсолютно похожей проблемой. Видимо, рано или поздно, многие разработчики сталкиваются с этим. Что ж, надеюсь положить еще один success в копилку :)
  • +4
    Диаграмма на гитхабе строится по дате коммита или пуша?
    • +4
      Вроде бы учитываются именно коммиты. Так что можно заниматься этим недельку на природе, потом приехать и синхронизировать репозитории.
      • +1
        * хитро прищурился *

        У меня возникла мысль, как покрасить все клетки в зелёный цвет…
        • +1
          а как же «совесть», ибо обманывать будете только себя =)
        • +1
          Вроде бы есть даже сервисы позволяющие рисовать этими зелеными квадратиками. Но это обман какой то. В первую очередь самого себя)
          • 0
            Да, похоже, я неоригинален… taggit.ains.co
  • +1
    Когда дело требует не только написания кода то вся эта стройная система правил просто рушится. Иногда приходится днями заниматься железом когда не до кода вообще.
    • +2
      Вся эта система описывается правилом «лучше поменьше, но чаще и стабильнее». Это действительно работает в условиях дефицита времени и мотивации. Гитхаб и код, это уже нюансы.
  • +3
    «После трех дней без программирования жизнь становится бессмысленной...»
    (The Tao Of Programming — 2.1)
  • +1
    Почему-то во-многом напомнило вот это видео: www.youtube.com/watch?v=JhMsFQ7TnTU
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Мне в свою очередь напомнило вот это видео: Джош Кауфман — первые 20 часов или как научиться чему угодно. А также вроде бы корелирует с сегодняшней статью про принцип 80/20.
    Имхо есть что то общее во всех этих системах. Допустим хоть в видео про первые 20 часов и говорится про обучение чему-то новому, но в конце концов приходят к выводу что достаточно в день заниматься по 45минут для достижения весомого прогресса.
    Подобные выводы встречал и в других системах названий которых уже не помню, некоторые из них были на хабре.
    Сам испытываю большие сложности с распределением времени притом пока не являясь програмистом — сисадмин. В предыдущем предложение ключевое слово «пока», так как пытаюсь сместить сферу деятельности в сторону програмирования. Но конечноже основная на данный момент профессия держит плотно. В конце концов такое положение дел сказывается на нервах, возникает чувство неудовлетворенности.
  • +2
    Пробовал, войти в такой же ритм работы — хватило на месяц =(. Потому как, либо пол часа — час, растягивается, до полуночи, либо друзья, девушка, начинают все сильнее и сильнее давить, после месяца работы после работы =) (сорри за тавтологию). Наверное нужно, четко ограничиваться часом, но опять переключения контекста…
  • +3
    Как-то я своему брату (не программисту) показал мой график коммитов на гитхабе, и он сказал: «Чувак, вот по такому можно сразу сказать, есть ли у человека личная жизнь или нет». :)

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