Тег «продуктивность»

Исходники: текст или что-то другое?

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

  • заботливо раскиданная по коду отладочная печать на терминал и
  • пресловутый «долгий пристальный взгляд».

Были еще встроенные в ОС средства протоколирования, но они именно в эти две недели не работали. Удивительное совпадение. Хотя нет, скорее, все дело в кривизне рук. Неважно.

Так вот, отладочная печать прекрасно себя зарекомендовала. Изучение длинных простыней протоколов из строк вроде «(kernDispatchThread) pre-switch ct=174380000 diff=55489 nn=4», «test 4»и даже просто «hahaha!!!» позволяют получить истинное удовольствие от расследования а-ля Хаус. Ну-ка, кто у нас тут вытеснил этот поток? Но вот аномальная последовательность строк найдена, и теперь никуда не денешься — придется разглядывать код, который эту аномалию продемонстрировал.

Казалось бы, самое время сказать: «Трепещите, о презренные байты! Склонитесь перед интеллектом Человека!». Но нет, байты трепетать отказываются, функции плодятся прямо на глазах, макросы-сволочи делают вид, что они функции, или даже того хуже — оперируют именами локальных переменных (ужас-ужас!). Вся эта компания разбегается по двум десяткам файлов, откуда, ехидно посмеиваясь, гадит в глобальные переменные, норовя смешать физическую и виртуальную адресацию.

Вот как-то так я и провел две недели.

И не переставало мне думаться, что текст в качестве носителья исходного кода всем хорош: и редактировать его легко, и всякие diff’ы со слияниями делать, и от платформы не зависит (ну, почти), да и сколько уже проверенных временем алгоритмов на строках есть. Вот только читать чужие исходники неудобно. Хорошая IDE позволяет от вызова функции перейти к ее определению, но серебряной пулей тут и не пахнет. Пока читаешь код вызванной функции, забываешь, что делала вызывающая. И хорошо еще когда в когнитивном процессе участвует две функции. А что если 10? Или 50?

В таком случае поможет только абстрагирование: надо поделить 50 функций на 5 групп, рассмотреть взаимодействие этих групп, а потом — внутри каждой в отдельности. Да, модульное программирование явно неглупые люди придумали. Вот только выделение абстракций — отдельная большая работа. Если мы читаем свой код, то эта работа уже сделана еще при его написании. А вот выделение абстракций на уже существующем коде… Вот тут-то его текстовая природа и подкладывает нам козу: чтобы выделить абстракции, нужно сначала код прочитать и понять.

Короче, умные люди решили, что неплохо бы дать возможность людям видеть сразу весь интересующий их код. А чтобы удобнее было выделять абстракции, дать возможность еще и как-то помечать фрагменты. Ну и редактировать, само собой. Примерно так и работает Code Bubbles. Обязательно посмотрите демонстрационное видео.

В таком подходе есть ряд очевидных недостатков. Например, нужен гигантский монитор. И отсутствие аллергии на работу мышкой. И ширина строк кода должна быть вменяемой (обратили внимание, какие они короткие в демке?). Но в целом идея здравая: кто сказал, что код — это обязательно плоский текст? (Я не говорил.) При анализе чужого кода такая штука уж точно будет полезной.

P.S. Я давно уже дочитал «Организацию ЭВМ» и с пяток книжек сверху. Просто под линуксом не работает мой антикварный сканер. Постараюсь что-нибудь придумать.

УжасноПлохоНормальноХорошоОтлично (Еще не оценили)
Loading ... Loading ...

Наши инструменты

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

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

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

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

Не нравится пример с машиной? Те же соображения верны для игры на пианино, занятий виндсерфингом, боевых искусств…

Недавно я стал ощущать примерно то же самое при программировании, после того как полностью перешел на Emacs в качестве замены всех IDE. Да, непросто запомнить комбинацию из трех-четырех, а то и более клавиш. Часто для нужных действий нет сочетаний клавиш, а иногда нет даже и встроенной возможности выполнять эти действия. Тогда я трачу кучу времени, ищу в Сети дополнения, правлю их напильником, вешаю некоторые действия на клавиши, потом несколько дней к ним привыкаю — и все. Больше я об этих действиях не думаю. Они выполняются сами, без моего участия.

Например, чтобы увеличить ширину текущего окна на 20 символов, я нажимаю Ctrl-u 2 0 Ctrl-x Shift-]. В общей сложности 8 клавиш. Я их набираю одним движением, не задумываясь, что это такое там делают мои пальцы. Когда я писал этот абзац, мне даже пришлось потратить некоторое время, чтобы осознать, что же именно я при этом нажимаю. В общем, полнейший автоматизм.

А вот с мышью автоматизм не вырабатывается. Нельзя вслепую ткнуть куда-то курсором — в этом процессе всегда участвует сознание. Сначала нужно увидеть некий визуальный маркер (кнопку, пункт меню), затем подвести туда курсор, используя обратную связь через глаза для точного позиционирования, затем щелкнуть кнопкой. Одним кликом часто дело не ограничивается, поэтому повторяем все снова. Так как в этом процессе участвует сознание, из кратковременной памяти вытесняются важные сведения. Эффективность падает.

Конечно, я все это говорю не про мышь и не про клавиатуру. И не про Emacs. И я не хочу ни за что агитировать и ни к чему призывать. Я просто хочу сделать вывод — следствие из утверждения из начала поста:

Для повышения эффективности следует пользоваться инструментами, допускающими бессознательное их использование.

УжасноПлохоНормальноХорошоОтлично (2 голосов, средний: 5,00 из 5)
Loading ... Loading ...

Visual Studio разрушает мозг

Хе-хе, это не я, это все Петцольд сказал. Уж кому, как не ему, это знать!

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

В результате я решил, что хороший текстовый редактор повышает мою производительность гораздо сильнее, чем хорошая IDE. А автоматизация сборки и тестирования вполне удовлетворяется Autotools или cmake (статьи про которые я все никак не допишу), а что не смогут они, смогут сценарии bash или Power Shell.

P.S. Ссылку на Петцольда стащил у Сергея Зефирова.

УжасноПлохоНормальноХорошоОтлично (Еще не оценили)
Loading ... Loading ...

Как преодолеть творческий кризис

Если кто-то из вас, коллеги, станет утверждать, что никогда не встречался с подобным кризисом, я ни за что не поверю. Такое бывает у всех, даже у суперзвезд творческих профессий. Бывает, что просто приходишь на работу и понимаешь, что ничего сегодня не получится. Внутренний голос прямо так и говорит: «Сегодня — не твой день. Смирись и попробуй завтра». На следующий день приходишь — и правда, работа спорится.

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

  1. личные психологические: поругался с собакой, увидел результаты выборов, вспомнил про кредит за квартиру;
  2. физические: хочется есть, не выспался, текут сопли, оторваны конечности;
  3. связанные с условиями работы: начальник идиот, зарплата маленькая, коллеги весь день отвлекают, сверхурочная работа;
  4. связанные с самой работой: работа слишком простая или слишком сложная, закончен один проект и надо начинать другой, начальство навязывает пути решения, ваще неинтересная работа, нет идей;
  5. ни с чем не связанные: просто тупо не хочется ничего делать.

Составляя этот список, я немного сжульничал. Поэтому, пользуясь подходом доктора Х., сразу должен заявить, что если ваш кризис подходит под пункт 5, то вы врете. Не бывает беспричинных кризисов. Состояние «просто не хочется работать» говорит о том, что вы просто боитесь копаться в себе достаточно глубоко, чтобы выяснить истинную причину.

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

Терапия, таким образом, заключается в следующем:

  1. уменьшить количество и силу демотивирующих воздействий;
  2. увеличить количество и силу мотивирующих воздействий.

Никакой rocket science, как нетрудно видеть. Теперь перейдем к конкретным рецептам.

Если у вас личные психологические причины, то искренне сочувствую. «Тяжелые думы» норовят постоянно занимать мыслительные ресурсы, да и настроение снижают. Мощный демотиватор. Однако если насильно погрузить себя на некоторое время в работу и пресекать попытки отвлекаться, то обычно через некоторое время весь негатив уходит: ему просто не хватает места в голове.

Физические причины нужно просто устранить. Тут и говорить не о чем.

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

  1. начальник идиот;
  2. начальник вас понимает, но не в силах помочь (денег нет, директор не разрешает);
  3. вы занимаетесь не той работой, которой хотели бы заниматься.

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

Наконец, творческий кризис может быть вызван отсутствием идей. Здесь медицина бессильна, каждый ищет свой путь.

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

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

  • При малейших признаках состояния «влом работать» немедленно сменить занятие на другое, но имеющее отношение к работе — мозг должен продолжать находиться в рабочем режиме. Я обычно в таком случае начинаю читать какую-нибудь книжку по программированию. Через некоторое время надо попробовать вернуться к исходной деятельности.
  • Интерес к работе можно подогреть искусственно. Например, сообщить начальнику, что вечером сдашь работу, на которую планировалась неделя. Или начать обсуждать рабочие вопросы с коллегами. Иными словами, своими силами создать окружение, которое потом начинает само тебя подталкивать.
  • Если череда бессмысленных занятий таки сумела затянуть, нужно, как только это осознаешь, сразу же покинуть рабочее место. Походить по коридору, посмотреть в окно. В процессе этого выбрать следующее рабочее действие, после чего тигром броситься на свое место и начать выполнять задуманное. Мозг, пребывая в шоке от таких стремительных событий, соглашается работать.
  • Убрать с рабочего места все, на что не относится к текущей работе. Просто диву даешься, насколько незначительные на первый взгляд вещи могут пожирать внимание и время. Например, у меня на столе лежала книга задней обложкой вверх; там была напечатана ее аннотация. Однажды я осознал, что помню эту аннотацию наизусть. Стал за собой следить и выяснил, что непроизвольно, в задумчивости, читаю ее несколько раз в день, причем после каждого прочтения взгляд соскальзывает в сторону, на другие книжки, потом на разбросанные статьи, потом на рукописные записи, а потом уже начинают всплывать какие-то воспоминания, обрывки старых идей… Если при этом я еще и не слишком хочу работать, то затягивает надолго.
  • Заниматься посторонними делами нужно на мотивационном максимуме. Например, вам пришла в голову замечательная идея, и сразу зачесались руки ее воплотить. Вот это то самое время, когда можно пообедать, выпить чаю, сходить в туалет и т.д. Во-первых, в это время можно более тщательно обдумать идею. Во-вторых, вы вернетесь к работе с подъемом и желанием свернуть горы. Малозаметное, но важное следствие: не стоит стремиться доделать работу к концу дня. Лучше оставить небольшую и несложную часть на завтра, чтобы с утра недоделанная работа послужила «трамплином» для вхождения в поток.
  • Стараться не составлять распорядок дня, как бы это парадоксально ни звучало. Назначенные на определенное время события (обед в 13:00, чай в 17:00, уход с работы в 19:00) создают перед собой кризисные зоны размером до полутора часов. Скажем, вы заканчиваете некоторый этап работы за 5 минут до обеда. Будете ли вы начинать следующий этап? Скорее всего, нет. А если закончите за 10 минут? За полчаса? Думаю, идея понятна.

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

УжасноПлохоНормальноХорошоОтлично (6 голосов, средний: 4,17 из 5)
Loading ... Loading ...

Ворктрек, [подзад]пинарик

Любителям посидеть в рабочее время на башоргах и ЖЖ посвящается. Изначальная идея «пинарика» была проста — наглядно продемонстрировать себе, что жизнь, мол, проходит мимо, пора бы уже что-нибудь существенное сделать. Закрашиваешь, закрашиваешь ячейки, и прям видишь, как на глазах сокращается отведенное тебе время.

Ворктрек — производная пинарика. В нем можно еще и пометить каждый день как продуктивный (зелененький) или непродуктивный (красненький). И еще комментарий приписать. Такая штука пинает уже серьезно, с двух ног. Подсознательный эффект поразителен: начинаешь сам с собой устраивать соревнования. Сколько я смогу подряд «зеленых» дней сделать? Слабо неделю без «красных»? Эстеты могут даже организовать свое рабочее время так, чтобы на картинке красными и зелеными клетками написалось какой-нибудь слово. Например, «труд». Или «мир».

Worktrek

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

УжасноПлохоНормальноХорошоОтлично (2 голосов, средний: 5,00 из 5)
Loading ... Loading ...

Смерть башоргам!

Хотя всякие программерские хитрости и тонкости — безусловно штука полезная, но в вакууме, как известно, работают только сферические программисты (те самые, что пишут программы длиной в один байт). Реальные же люди вынуждены терпеть существование вокруг них всего остального мира в виде назойливых людей, телефонных звонков, развлекательных сайтов и хорошей погоды как раз тогда, когда на работе завал. Я даже не возьмусь сказать, что больше определяет производительность программиста: профессиональный уровень или способность абстрагироваться от внешних раздражителей.

Долгое время я страдал от такой вредной привычки. Когда в работе наступал ступор, например, окончание небольшого этапа или просто необходимость крепко подумать, я машинально открывал почту, потом RSS-ленту, потом новости, потом еще какой-то сайт, потом находил какую-то интересную статью… А когда возвращался к работе, оказывалась, что можно, в общем-то, уже не начинать, потому что скоро обед / конец рабочего дня / whatever. Короче говоря, продуктивность моя сильно от этого дела страдала.

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

  1. подзадпинательную — мотивация на выполнение нужных действий и невыполнение ненужных;
  2. организационную — уже при наличии мотивации повысить эффективность выполняемых действий.

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

  • Необходимо вести список дел, которые необходимо выполнить. Позволить себе обходиться без такого списка могут только те, кто долгое время им пользовался и поняли, что способны быть эффективными и без него. Я составляю список дел на каждый день, плюс отдельные списки отдаленных дел и дел вообще без временной привязки. Каждый вечер и каждое утро я просматриваю все эти списки и формирую план действий на предстоящий день. В списке делаю  пометки, показывающие особый статус дела (срочность, контекст и т.п.).
  • Список дел должен быть в бумажном блокноте, а блокнот — всегда с собой. К этому я пришел спустя годы пользования всевозможными программами. Главное преимущество блокнота — постоянная видимость. Как только я прихожу на работу, домой или куда-либо еще, сразу выкладываю его на стол, и все задачи у меня перед глазами весь день. Даже КПК не обладает таким свойством. Кроме того, бумага обеспечивает исключительную гибкость визуального представления.
  • Сюда же, в блокнот, я записываю все идеи, которые пришли в голову за день. Потом мысли, достойные сохранения, в обработанном виде переносятся в другой блокнот или, например, в блог.
  • Каждая задача из списка запланированных на сегодня не должна занимать более часа (если быть точнее, то должна быть возможность выполнить задачу за один заход, без перерывов). Если задача большая, то я разделяю ее на несколько более мелких. Нет ничего хуже, чем постепенно выполняемое в течение нескольких дней дело, постоянно мозоляющее глаза своей незавершенностью.
  • Не стоит расстраиваться, если какие-то дела, запланированные на день, остались невыполненными. Это нормально. Их можно просто перенести на следующий день. Если же одна и та же задача кочует по блокноту в течение недели или даже дольше, нужно задуматься, действительно ли эту задачу следует выполнять.
  • Все действия, требующие менее 5 минут, должны выполняться немедленно.
  • Каждое выполняемое действие должно иметь цель. Это не значит, конечно, что нужно над каждым чихом размышлять — «А соответствует ли этот чих моим Принципам? А приближает ли он меня к моей Цели?». До абсурда доходить не нужно, но стараться все же себя контролировать. Например, открывая браузер, надо четко представлять, что именно мы хотим найти или узнать. И если сумеем ответить на этот вопрос, определить еще, действительно ли нам нужно то, что мы хотим узнать. Неочевидное следствие из этого правила: дела из блокнота имеют преимущество над делами, там не перечисленными.
  • Перед совершением любого действия спросить себя, оправдывает ли действие затрачиваемое на него время? Можно ли это време потратить с большей пользой?
  • Не планировать на день больше, чем реально можно успеть сделать.

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

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

УжасноПлохоНормальноХорошоОтлично (11 голосов, средний: 4,91 из 5)
Loading ... Loading ...