Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Как стать программистом и избежать детских ошибок Личность разработчика


Приветствую всех, надеюсь ещё не потеряли!

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

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

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

И, да: одна из важных задач Школы программистов: привитие культуры труда.

Основной разрыв

Тот, кто пишет в резюме «10 лет опыта», может быть человеком с десятилетним опытом, а может быть и с однолетним, повторённым десять раз (поклон Максу Крайнову за формулировку).

Вы относитесь к первым, если постоянно увеличиваете сложность решаемых задач и чувствуете, что постоянно учитесь. Именно для таких людей я создал Школу, как короткий путь к их целями.

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

Человеческие связи

Есть и другой фактор, позволяющий стать ценным партнёром или сотрудником, а заодно и способствующий карьерному росту.

Коммуникативность.

Проблема этого качества в том, что его понимают, как общительность. Это большая проблема, потому что многие талантливые работники считают, что не способны развить её ввиду природы интроверта, а другие, склонные к совершенствованию, берутся не за то.

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

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

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

Инструментарием этого умения, как правило являются:

  • вопросы для получения информации;
  • наводящие вопросы;
  • угадывание мыслей собеседника и проверка догадок путём предложения вариантов;
  • наблюдение за привычками собеседника при решении аналогичных задач.

То есть ключ к успеху — внимание к личности.

А как же техника?

Первым делом, первым делом самолёты
Ну а девушки, а девушки — потом.
Кинопесня

Пилот важнее самолёта.
Американская армейская мудрость

Как ни странно, в работе программиста гораздо важнее внимание к проблеме и пользователю, чем к самой программе.

Мы уже давно и радостно используем в своей работе чудовищно расточительные с точки зрения аппаратных ресурсов технологии. Один PHP чего стоит. Но нас это, как ни странно, устраивает. Съедая наше железо, технологии эти предоставляют в замен нечто такое, что бизнес находит всё более ценным.

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

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

Начальник и специалист в одном флаконе

Итак, задачи, которые раньше находились на уровне «над Вами», теперь спускаются вниз. Особенно, если Вы — фрилансер.

Организуя свою работу, нужно выработать следующие навыки.

  • Умение принимать оптимальные решения. Обычно идеал недостижим и нужно чем-то пожертвовать. Выбирать жертву лучше сознательно, а не разводить в конце руками: «Так получилось».
  • Умение выдерживать приоритеты. Занимайтесь в первую очередь не тем, что Вам ближе лежит, а тем, что полезно для команды и клиента. О себе нужно думать при выборе клиента или места работы, а не после.
  • Излечиться от фанатизма. Не нужно целый день улучшать и приглаживать уже рабочий алгоритм. Не нужно оптимизировать код, который работает меньше секунды и вызывается всего-то раз пять за день. Не нужно ценой производительности удерживать БД в нормальной форме. Нужно применять все имеющиеся знания очень чутко и главное — с умом.
  • Способность видеть систему и задачу целиком. Это большая тема, подробно она рассматривается в уроке «Системное мышление» Школы. Скорее это даже непринуждённое скольжение разума по системе «вверх» к общему и «вниз» к частному.
  • Умение отказываться от своего мнения. В работе неизбежны противоречия с коллегами и начальством. Очень полезно спорить на этапе принятия решений, но ещё важнее следовать любому принятому решению, даже если оно в итоге не Ваше. В этом нет ничего странного: никто не владеет всей информацией и ошибающимся всегда можете оказаться именно Вы. Надо понимать, что тот, кто несёт большую ответственность (начальник или клиент) всегда располагает большей информацией, особенно после того, как Вы изложили ему свои соображения. Скорее всего он просто пожертвовал (см. первые два пункта) тем, что Вам казалось незаменимым.
  • Актуализация. Найдя ошибку в работе коллеги — обсудите её с ним явно. Либо он научится новому, либо Вы узнаете, что это не ошибка и в свою очередь научитесь новому.

Организация труда

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

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

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

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

Хотя на полную проработку всех нюансов времени всё равно никогда не хватает. Да оно и не надо.

О культуре всё, теперь к задачам.

Прошлая задача

Напоминаю текст:

Задача на понимание принципов программирования.

Что лишнее в этом коде на JavaScript и почему?

if (a.checked == true)
  x = b.value * 1 + c.value * 1;
else
  x = 0;

Тут следовало догадаться, что очевидное со школьных уроков математики «×1» было обманкой, а не правильным ответом. Из-за особенностей JavaScript умножение на единицу тут важно. Хотя если Вы на нём не работаете, то простительно этого не знать. Пример. Это способ приведения строки к числу.

Другое дело — обращение с логической переменной. Сравнение переменной с константой true — это довольно популярная... хм, странность у начинающих.

Изучая язык на простейших примерах, юный программист привыкает к такому синтаксису:

if (<операнд> <знак сравнения> <другой операнд>)
  <команда>

Это естественно, но неверно. Дело в том, что машина видит ту же конструкцию иначе:

if (<логический операнд>)
  <команда>

В свою очередь любое сравнение само по себе является таким же оператором, как, например, сложение и умножение. Его результат можно сохранить в переменной. Следующий код вполне корректен (PHP):

$value = $value < 5;
if ($value)
  do_something();

Тут одна и та же переменная используется сначала для хранения числа, потом для хранения логического результата (истина/ложь).

Понимание этого принципа даёт нам преимущества.

Во-первых, мы не пишем тавтологии «a.checked == true».

Во-вторых, мы можем использовать булеву алгебру:

if (
  $something instanceof Duck or
  ($something->looks_like('duck') and
   $something->walks_like('duck') and
   $something->talks_like('duck')) )
{
  echo('It is a Duck');
}

Только аккуратнее с оформлением, а то будет нечитаемо.

Другие варианты записи приведённого кода Вы можете найти в комментариях к прошлой записи.

Новая задача

Выполните сначала в уме, потом на машине:

$x = (0.1 + 0.7) * 10;
echo 'Как есть: ', $x, ', а, приводя к целому: ', (int)$x;

Кто может объяснить нестыковку — прошу в комментарии к выпуску.

Ещё можете упростить математическое выражение и увидеть, как эффект исчезнет.

Записи в блоге

XML в 10-ти тезисах

C новым годом! по ссылке моё Вам пожелание.


Этот выпуск Вы можете прокомментировать в Живом Журнале.

Задать вопрос

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


В избранное