Приглашаю в мой новый сервис Diglot, где уже десятки интересных статей по веб-разработке и карьере в IT в формате bilingua на английском и русском языках.
Тексты были взяты из открытых источников и соединены в формате "билингва" (bilingual book). Материал на левой стороне страницы является переводом, а на правой - оригиналом. Для каждой страницы указан источник, автор и переводчик. Если вы заметили неточность перевода, или неправильно сопоставленные абзацы, или текст оформлен неаккуратно - сообщите мне.
Составитель Павел Волынцев
Прошлой осенью работа над моими побочными проектами зашла в тупик: я практически не продвигался вперёд и у меня никак не получалось делать больше, не принося в жертву свою основную работу в Khan Academy.
Last fall, work on my coding side projects came to a head: I wasn’t making adequate progress and I couldn’t find a way to get more done without sacrificing my ability to do effective work at Khan Academy.
В моей организации работы обнаружилось несколько серьёзных проблем. В основном я работал по выходным и иногда по вечерам. Как оказалось, это не самая лучшая для меня стратегия. Необходимость сделать за выходные как можно больше и лучше сильно давила на меня, а если мне не удавалось доделать задуманное, это ощущалось как провал. Проблему усугубляло и то, что не было никакой гарантии, что очередные выходные будут свободны, и даже если так — не факт, что я захочу кодить с утра до вечера все эти два дня — надо ведь иногда как-то развлечься или просто расслабиться.
There were a few major problems with how I was working on my side projects. I was primarily working on them during the weekends and sometimes in the evenings during the week. This is a strategy that does not work well for me, as it turns out. I was burdened with an incredible amount of stress to try and complete as much high quality work as possible during the weekend (and if I was unable to it felt like a failure). This was a problem as there’s no guarantee that every weekend will be free – nor that I’ll want to program all day for two days (removing any chance of relaxation or doing anything fun).
Кроме того, недельный перерыв — это слишком много, очень легко забыть, над чем ты работал и на чём остановился, даже если делать заметки. А уж если в выходные поработать не удавалось — то перерыв растягивался на две недели. Такие многонедельные переключения контекста могут быть смертельными — многие мои проекты погибли, не родившись, от такого недостатка внимания.
There’s also the issue that a week between working on some code is a long time, it’s very easy to forget what you were working on or what you left off on (even if you keep notes). Not to mention if you miss a weekend you end up with a two week gap as a result. That massive multi-week context switch can be deadly (I’ve had many side projects die due to attention starvation like that).
Услышав о невероятном эксперименте Дженнифер Девальт, которая решила изучить программирование, создав 180 сайтов за 180 дней, я отважился испробовать сходную тактику: работать над побочными проектами каждый день.
Inspired by the incredible work that Jennifer Dewalt completed last year, in which she taught herself programming by building 180 web sites in 180 days, I felt compelled to try a similar tactic: working on my side projects every single day.
Я установил для себя несколько правил:
I decided to set a couple rules for myself:
Я обязан кодить каждый день. Я могу заниматься другими вещами — писать документацию или статьи в блог, но только в дополнение к работе над кодом.
I must write code every day. I can write docs, or blog posts, or other things but it must be in addition to the code that I write.
Это должен быть функциональный код. Возня с отступами, переформатирование, и, насколько это возможно, рефакторинг — не считаются. Я могу заниматься всем этим, но это не может быть основной частью дневной нормы.
It must be useful code. No tweaking indentation, no code re-formatting, and if at all possible no refactoring. (All these things are permitted, but not as the exclusive work of the day.)
Считается только код, написанный до полуночи.
All code must be written before midnight.
Весь код должен быть открытым и публиковаться на Гитхабе.
The code must be Open Source and up on Github.
Некоторые из этих правил кажутся надуманными. Технически, нет никакой нужды писать код исключительно до полуночи, но я хотел заставить себя не засиживаться допоздна, чтобы код не был грязным. Также не обязательно публиковать всё написанное на Гитхабе. Мне это правило было нужно, чтобы внимательней относиться к коду — как можно раньше задумываться о повторном использовании или модульности.
Some of these rules were arbitrary. The code doesn’t technically need to be written before midnight of the day of but I wanted to avoid staying up too late writing sloppy code. Neither does the code have to be Open Source or up on Github. This just forced me to be more mindful of the code that I was writing (thinking about reusability and deciding to create modules earlier in the process).
Эта тактика оказалась очень эффективной, и сейчас приближается уже двадцатая неделя непрерывной работы. Я захотел написать об этом, так как это полностью изменило мой стиль работы и сильно повлияло на мою жизнь и душевное состояние.
Thus far I’ve been very successful, I’m nearing 20 weeks of consecutive work. I wanted to write about it as it’s completely changed how I code and has had a substantial impact upon my life and psyche.
Эти изменения в рабочих привычках принесли множество интересных результатов:
With this in mind a number of interesting things happened as a result of this change in habit:
Минимальный рабочий код. Мне пришлось выделять для работы над кодом не меньше получаса в день. Очень трудно написать что-то осмысленное за меньшее время, особенно учитывая, что приходится вспоминать, на чём остановился вчера. Иногда мне удавалось поработать чуть больше (но обычно не больше часа), а по выходным бывало, что и весь день.
Minimum viable code. I was forced to write code for no less than 30 minutes a day. (It’s really hard to write meaningful code in less time, especially after remembering where you left off the day before.) Some week days I work a little bit more (usually no more than an hour) and on weekends I’m sometimes able to work a full day.
Программирование как привычка. Важно отметить, что меня, по большому счёту, не сильно интересовало, как выглядит диаграмма с Гитхаба на картинке выше. Думаю, что это самый важный итог моего эксперимента: главное, чтобы вы хотели что-то изменить для себя, а не произвести своей работой внешнее впечатление на кого-то другого. То же самое верно и для любой диеты или физических упражнений: вам никогда не добиться успеха, если вы делаете их не для себя самого.
Code as habit. It’s important to note that that I don’t particularly care about the outward perception of the above Github chart. I think that’s the most important take away from this experiment: this is about a change that you’re making in your life for yourself not a change that you’re making to satisfy someone else’s perception of your work. The same goes for any form of dieting or exercise: if you don’t care about improving yourself then you’ll never actually succeed.
Победа над тревогой. До начала своего эксперимента я часто чувствовал сильное беспокойство от того, что не успел сделать «достаточно» работы, или продвинуться «достаточно» далеко (хотя измерить эту «достаточность» я не мог, так как у побочных проектов не было конкретных дедлайнов). Я понял, что ощущуение прогресса в работе настолько же важно как и сам прогресс. У меня открылись глаза! Как только я начал стабильно продвигаться вперёд каждый день, вся моя тревога постепенно растаяла. Я был удовлетворён объёмом сделанной работы и больше не испытывал одержимости сделать как можно больше в один присест.
Battling anxiety. Prior to starting this experiment I would frequently feel a high level of anxiety over not having completed “enough” work or made “enough” progress (both of which are relatively unquantifiable as my side projects had no specific deadlines). I realized that the feeling of making progress is just as important as making actual progress. This was an eye-opener. Once I started to make consistent progress every day the anxiety started to melt away. I felt at peace with the amount of work that I was getting done and I no longer had the over-bearing desire to frantically get any work done.
Выходные. Работа по выходным раньше была ключевым способом добиться заметного прогресса в побочных проектах, так как это было единственное время, когда я успевал как следует продвинуться. Теперь выходные уже не так важны — и это очень хорошо. Планы и ожидания, копившиеся целую неделю, чаще всего приводили только к разочарованиям. Мне редко удавалось сделать всё, что я задумал, и это заставляло меня в следующие выходные отказаться от развлечений — сходить в кафе или в музей, погулять в парке или провести время с девушкой. Как бы ни были важны для вас побочные проекты, они не должны занимать всю жизнь.
Weekends. Getting work done on weekends use to be absolutely critical towards making forward momentum (as they were, typically, the only time in which I got significant side project coding done). That’s not so much the case now – and that’s a good thing. Building up a weeks-worth of expectations about what I should accomplish during the weekend only ended up leaving me disappointed. I was rarely able to complete all the work that I wanted and it forced me to reject other weekend activities that I enjoyed (eating dim sum, visiting museums, going to the park, spending time with my partner, etc.) in favor of getting more work done. I strongly feel that while side projects are really important they should not be to the exclusion of life in general.
Фоновая обработка. Интересный побочный эффект от регулярной ежедневной работы над проектом заключается в том, что ваш разум начинает работать над ним и в фоновом режиме. Очень часто, когда я просто иду по улице, или принимаю душ, или занимаюсь чем-то ещё, что не требует умственных усилий, я думаю над тем, что мне предстоит сделать, и часто нахожу решение текущих проблем. Такого не было, когда я программировал лишь раз в неделю. В течение недели голова была занята другими задачами, или вообще беспокойством по поводу того, что я никак не успеваю поработать над побочным проектом.
Background processing. An interesting side effect of writing side project code every day is that your current task is frequently running in the back of your mind. Thus when I go for a walk, or take a shower, or any of the other non-brain-using activities I participate in, I’m thinking about what I’m going to be coding later and finding a good way to solve that problem. This did not happen when I was working on the code once a week, or every other week. Instead that time was consumed thinking about some other task or, usually, replaced with anxiety over not getting any side project work done.
Переключение контекста. Каждый раз, возобновляя работу над побочным проектом, приходится тратить время на переключение контекста. К сожалению, после недельного перерыва это переключение идёт с большим трудом. Ежедневная работа в этом смысле гораздо эффективнее, так как перерывы гораздо меньше, и восстановить контекст можно гораздо быстрее.
Context switch. There’s always going to be a context switch cost when resuming work on a side project. Unfortunately it’s extremely hard to resume thinking about a project after an entire week of working on another task. Daily work has been quite helpful in this regard as the time period between work is much shorter, making it easier to remember what I was working on.
Управление временем. Один из самых важных для меня аспектов эксперимента — я научился лучше распределять время между работой, побочными проектами и остальной жизнью. Зная, что мне придётся сделать хоть немного ежедневно, я просто обязан был научиться лучше планировать свой день. Если у меня были другие планы на вечер, мне приходилось переносить работу над проектом на более раннее время, до начала основной работы. Если я не успел поработать, но задерживался где-то, мне приходилось вернуться домой пораньше, чтобы успеть закончить, вместо того, чтобы просто пропустить день. Признаюсь, у меня стало оставаться меньше времени на хобби (гравюры укиё-э и другое), но тут уж ничего не поделаешь, приходится выбирать.
Work balance. One of the most important aspects of this change was in simply learning how to better balance work/life/side project. Knowing that I was going to have to work on the project every single day I had to get better at balancing my time. If I was scheduled to go out in the evening, and not get back until late, then I would need to work on my side project early in the day, before starting my main Khan Academy work. Additionally if I hadn’t finished my work yet, and I was out late, then I’d hurry back home to finish it up (instead of missing a day). I should note that I’ve been finding that I have less time to spend on hobbies (such as woodblock printing) but that’s a reasonable tradeoff that I’ll need to live with.
Внешнее восприятие. Ещё один плюс появляется, когда твои близкие привыкают к твоим новым правилам. Моя девушка понимает, что я должен хоть немного поработать над проектами каждый день, и другие дела иногда приходится планировать с учётом этого. Очень приятно, когда ты можешь сказать «Да, мы можем пойти прогуляться (сходить в кино и т.п.) но после этого мне надо закончить работу» — и знать, что к этому отнесутся с пониманием.
Outward perception. This has all had the added benefit of communicating this new habit externally. My partner understands that I have to finish this work every day, and thus activities sometimes have to be scheduled around it. It’s of considerable comfort to be able to say “Yes, we can go out/watch a movie/etc. but I have to get my coding in later” and have that be understood and taken into consideration.
Сколько кода я написал? Мне с трудом верится в то, насколько много я успел написать за последние несколько месяцев. Я сделал пару сайтов, переписал несколько фреймворков и написал кучу новых модулей для Node. Я сделал настолько много, что иногда даже не помню всё, что я написал — то, что было всего несколько недель назад, кажется далёким прошлым. Я чрезвычайно удовлетворён объёмом проделанной работы.
How much code was written? I have a hard time believing how much code I’ve written over the past few months. I created a couple new web sites, re-wrote some frameworks, and created a ton of new node modules. I’ve written so much I sometimes forget the things I’ve made – work from even a few weeks prior seem like a distant memory. I’m extremely pleased with the amount of work that I’ve gotten done.
Я считаю, что мой эксперимент прошёл с огромным успехом и хочу придерживаться новых привычек настолько долго, насколько смогу. Я настоятельно рекомендую эту тактику всем, кто хочет как следует продвинуться в своих побочных проектах. Если попробуете, дайте мне знать, сработало это для вас или нет — мне очень интересно услышать как можно больше реальных историй.
I consider this change in habit to be a massive success and hope to continue it for as long as I can. In the meantime I’ll do all that I can to recommend this tactic to others who wish to get substantial side project work done. Let me know if this technique does, or doesn’t, work for you – I’m very interested in hearing additional anecdotes!
Приглашаю в мой новый сервис Diglot, где уже десятки интересных статей по веб-разработке и карьере в IT в формате bilingua на английском и русском языках.
Тексты были взяты из открытых источников и соединены в формате "билингва" (bilingual book). Материал на левой стороне страницы является переводом, а на правой - оригиналом. Для каждой страницы указан источник, автор и переводчик. Если вы заметили неточность перевода, или неправильно сопоставленные абзацы, или текст оформлен неаккуратно - сообщите мне.
Составитель Павел Волынцев