Программист-фанатик
Шрифт:
Как и в ситуации с разработкой программного обеспечения, стоимость изменений не должна быть слишком высокой. Разумеется, превратиться из тестировщика в адвоката вряд ли будет легко. Но в трансформации из управленца в программиста и обратно нет ничего сложного. Несложно найти и новую фирму. Или переехать в другой город.
Карьерные изменения — это не строительство небоскреба, они не потребуют выкинуть на помойку весь наработанный ранее опыт. В настоящий момент я целыми днями пишу программы на Ruby, но мой опыт руководителя, занимавшегося переводом операций в офшоры, остается актуальным и помогает в моих трудах. Работодатели и клиенты это понимают и используют данное преимущество.
Важно понимать, что подобные изменения не только возможны,
Совет 52
Лучше, чем вчера
Исправить ошибку легко (в общем случае). Что-то идет не так? Тебе об этом кто-то сообщил? Если ты можешь воспроизвести ошибку, то для исправления достаточно устранить вызывающие ее факторы и удостовериться, что проблем больше не возникнет. Если бы все трудности исчезали так просто!
Однако подобная ясность сопровождает далеко не каждую проблему или трудную ситуацию. Большей частью серьезные проблемы выглядят как огромный запутанный клубок потенциальных неисправностей. Это утверждение применимо к разработке программного обеспечения, управлению карьерным ростом и даже образу жизни и здоровью.
Сложная система с кучей ошибок нуждается в переделке. Твоя карьера тормозится с каждой минутой. Твой сидячий образ жизни, намертво связанный с компьютером, неуклонно превращает твое тело в кашу. Все эти проблемы намного серьезнее и сложнее, чтобы их можно было просто устранить как обычную ошибку. Все они запутанны, сложно измеримы и состоят из множества мелких решений, часть из которых работать не будет!
Трудность решения сложных задач легко лишает нас мотивации и заставляет обратить внимание на те проблемы, которые проще анализировать и быстрее решать. А сложное дело мы откладываем на потом. Это откладывание вызывает у нас чувство вины, которое нас расстраивает, что, в свою очередь, приводит к еще большим проволочкам.
В теме 49 я признался, что всю свою жизнь боролся с лишним весом. По себе знаю, что когда твоя форма далека от идеальной, призыв «просто приди в форму» сложно даже принять, а не то что ему последовать. И чтобы еще больше все усложнить, попытки предпринять какие-то усилия, направленные на улучшение своей формы, не дадут результатов ни сразу, ни даже через неделю. Ты можешь целый день работать над тем, чтобы прийти в форму, а через неделю не обнаружить ни одного следствия потраченных усилий.
Подобные демотиваторы лишают тебя воли к борьбе еще до ее начала.
С недавнего времени я вплотную занялся своей проблемой. Почти каждый день посещаю спортивный зал, стал следить за своим питанием, словом, делаю все, что только можно. Но даже при такой серьезной программе увидеть результаты достаточно сложно. Однажды вечером, когда меня опять захлестнуло ощущение отсутствия мотивации, мой друг Эрик Кастнер опубликовал в социальной сети Twitter следующее сообщение:
Помоги привести в форму мою $%!л.. спрашивай меня каждый день: «Сегодня было лучше, чем вчера?» (питание/упражнения) — сегодня: ДА!
Прочитав это сообщение, я понял, что нашел ключ к проблеме лишнего веса. Впрочем, я уже знал эту методику, ведь в жизни мне пришлось успешно решить немало серьезных проблем. Секрет в попытках сделать так, чтобы задача, над которой ты работаешь, сегодня стала лучше, чем вчера. Вот и все. Это легко. И как утверждает Эрик, энтузиазм легко сохранить, имея
Недавно мне довелось поработать с одним из наиболее сложных и безобразных Ruby-приложений, когда-либо попадавшихся мне на глаза. Моя компания унаследовала этот консалтинговый проект от другого разработчика. Нужно было внедрить несколько ключевых подсистем и избавиться от огромного количества ошибок и проблем с производительностью. При попытке внести эти изменения мы обнаружили, что код представляет собой жуткую кашу. Нанявшая нас фирма была ограничена во времени и финансах, поэтому такой роскоши, как возможность написать все заново «с нуля», мы были лишены, хотя этот код проще всего было выкинуть в мусорную корзину.
Мы медленно двигались вперед, внося одно небольшое изменение за другим, причем каждое из них занимало намного больше времени, чем ожидалось. Казалось, что это чудовищное нагромождение кода никогда не закончится. Работа над приложением была утомительной и безрадостной. Но со временем исправления начали вноситься быстрее, а некогда неприемлемая производительность повысилась. И все это благодаря простому стремлению каждый день делать код лучше, чем он был вчера.
Порой это было разбиение огромного метода на более мелкие методы, но со значимыми именами. Иногда это сводилось к удалению иерархий наследования, не принадлежавших к используемой объектной модели. Временами мы всего лишь исправляли неработающий модульный тест. Но так как все эти изменения вносились постепенно, они происходили достаточно безболезненно. Вполне реально переделать один метод за время, обычно уходящее на приготовление чашки кофе или обсуждение последних новостей с коллегами. Небольшое улучшение мотивирует. Ты видишь эффект в том фрагменте, над которым ты работаешь, сразу же после внесения изменений.
Впрочем, даже постепенные изменения не позволяют увидеть эффект в целом проекте. Попытки добиться большего уважения среди коллег или улучшить состояние собственного здоровья, несмотря на отдельные каждодневные улучшения, не приводят к непосредственно осязаемым результатам. Именно поэтому, как мы уже видели ранее, такие большие цели лишают нас мотивации. А значит, в случае больших, сложно достижимых целей, к которым ты стремишься, важно думать не о том, как ты каждый день немного продвигаешься вперед, а о том, как ты каждый день улучшаешь качество работы. К примеру, я не могу гарантировать, что сегодня буду весить меньше, чем вчера, но в состоянии контролировать количество усилий, направленное на достижение поставленной цели. И сделав сегодня больше, чем вчера, я с полным правом могу гордиться своим достижением. Такое последовательное измеримое улучшение качества работы выводит меня из цикла вины и постоянных откладываний, который, в конечном счете, мешает большинству из нас в достижении Больших Важных Целей.
Ты должен радоваться даже небольшим «лучше». Написать сегодня на один тест больше, чем вчера, достаточно, чтобы оказаться ближе к цели «лучше разобраться в модульном тестировании». Если ты начинаешь «с нуля», один дополнительный тест в день будет вполне устойчивым прогрессом. И к моменту, когда ты уже не сможешь показывать лучшие, чем вчера, результаты, окажется, что ты уже «разобрался в модульном тестировании» на достаточном уровне и увеличивать количество тестов дальше просто не нужно. При этом если начиная «с нуля», ты в рамках собственных планов усовершенствования хочешь в первый же день написать пятьдесят тестов, то в этот день ты, скорее всего, тяжело поработаешь, а вот второго дня уже не случится. Поэтому улучшения должны быть небольшими и постепенными, но ежедневными. Кроме всего прочего, небольшие улучшения снижают цену неудачи. Пропущенный день всего лишь сдвигает точку отсчета на завтра.