Джон Резіг: Пишіть код щодня

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


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

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

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

Ілюстрація Стівена Резіга

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

  1. Я зобов'язаний кодити кожен день. Я можу займатися іншими речами - писати документацію або статті в блог, але тільки на додаток до роботи над кодом.
  2. Це має бути функціональний код. Метушня з відступами, переформатування, і, наскільки це можливо, рефакторинг - не рахуються. Я можу займатися всім цим, але це не може бути основною частиною денної норми.
  3. Вважається тільки код, написаний до півночі.
  4. Весь код повинен бути відкритим і публікуватися на Гітхабі.

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

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

Ці зміни в робочих звичках принесли безліч цікавих результатів:

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

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

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

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

Фонова обробка. Цікавий побічний ефект від регулярної щоденної роботи над проектом полягає в тому, що ваш розум починає працювати над ним і у фоновому режимі. Дуже часто, коли я просто йду по вулиці, або приймаю душ, або займаюся чимось ще, що не вимагає розумових зусиль, я думаю над тим, що мені належить зробити, і часто знаходжу рішення поточних проблем. Такого не було, коли я програмував лише раз на тиждень. Протягом тижня голова була зайнята іншими завданнями, або взагалі занепокоєнням з приводу того, що я ніяк не встигаю попрацювати над побічним проектом.

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

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

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

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

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