суббота, 27 июня 2009 г.

Кто такой хороший программист

Для любого руководителя поиск программиста - задача не из простых, потому что как правило сам руководитель в программировании ничего не понимает. Я не припомню случая, чтобы в руководители предприятия или достаточно крупного подразделения попал представитель этой профессии. Как правило туда попадают экономисты, бухгалтеры, технологи, в общем кто угодно, но не программисты. Почему? Можно услышать, будто большинство из тех, кто привык стучать по клавиатуре, не видят дальше своего монитора, но это неправда. Я скорее склоняюсь к мнению, что хороший программист настолько ценен, что продвигать его по служебной лестнице просто не выгодно. Где взять нового, который был бы не хуже старого?

Как показывает практика, хорошего специалиста найти трудно, а хорошего программиста найти ещё труднее. Дело именно в особенности этой профессии, и это мало кто понимает, включая самих программистов. Я уже не говорю о руководителях, которые чаще всего, как я уже сказал, программистами не являются. От руководителя можно услышать такое: "Не можем найти, так давайте научим". В результате никто не находится и никто не обучается, и я этому не удивляюсь. Это закономерность, проистекающая из особенности этой профессии и вообще большинства профессий из области ИТ.

Хороший программист - знающий программист

Как и в любой другой профессии, программисту нужны знания. Даже грузчику они необходимы. Я как-то был участником переезда, и одной из перевозимых вещей было пианино. Новая квартира находилась на седьмом этаже, но не это было проблемой. Проблемой было то, что пианино не влезало в лифт. После получаса мучений мы впятером протащили пианино на второй этаж, выдохлись и, наконец, вызывали грузчиков. Приехали два мужичка, не сказать, чтобы особо крепкие, достали верёвки, поддели их под инструмент и вдвоём занесли его в квартиру за 15 минут. Знание - сила, в буквальном смысле этого слова :)

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

Хороший программист - обучающийся программист

Знания - это хорошо, много знаний - ещё лучше. Но в программировании не только и не столько важен объём знаний, сколько способность самостоятельно их получать. В отличие от погрузки, бухгалтерии и экономики информационные технологии развиваются большими темпами. По темпу развития ИТ сейчас опережают любые другие области деятельности на порядки, и конца-края этому бурному развитию не видно. Технологии развиваются, устаревают, появляются новые, и чтобы быть "на волне", программист вынужден постоянно находиться в процессе обучения.

Когда я учился в университете, один из преподавателей высказал очень умную мысль: "Мы не ставим задачу научить вас как можно большему. Наша задача - научить вас искать информацию, чтобы вы могли учиться сами". Это касается любой профессии, но в ИТ-профессиях это выражено особенно ярко из-за огромного темпа развития технологий.

Кстати, мне, как и многим другим, приходилось встречаться с индивидуумами (а программистами их и не назовёшь!), которые изучив что-то одно, пусть и большое, не просто не горят желанием учиться чему-то новому, но даже активно противятся, когда их к этому подталкивают. Это мёртвый груз для любого предприятия. Мало того, что этот "программист" быстро оказывается устаревшим, так он ещё и тормозит развитие ИТ-структуры предприятия, а это уже огромная проблема.

Хороший программист - гибкий программист

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

Это "тайное" знание, в общем-то, лежит на поверхности, достаточно лишь взглянуть на предметную область широко, но знают это очень не многие. Может быть нужен опыт. Но эта вещь ещё больше отличает программирование не только от других не-ИТ-профессий, но и от многих ИТ-профессий, как это ни странно. Назовём это "гибкостью мозга" :)

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

Я начинал программировать на ассемблере как любитель. Из нынешней молодёжи не все знают, что это такое, как не все знают, кто такой Ленин (для меня это странно, но это так. Как можно не знать Ильича?). Как любой любитель, я мог позволить себе повыпендриваться и изучать то, что мне нравится. В один прекрасный момент мне пришлось изучать не то, что нравится, а то, что нужно - язык Паскаль. Это не составило большого труда, но я сразу ощутил различие в подходах: более высокий уровень, меньше ошибок, больше возможности сосредоточиться на логике и алгоритмах. Это происходило тогда, когда языки высокого уровня уже многие годы были в обиходе, а когда они только начинали использоваться, была совсем другая картина: велись масштабные дискуссии, писались целые труды, доказывающие или опровергающие необходимость в этом инструменте. Разве это не революция? Понадобилось достаточно много времени, чтобы эти языки вошли в инструментарий каждого программиста. Этот переход не был одномоментным, как думают сейчас многие, это был долгий и сложный переход.

Это лишь один пример. Подобных революций было достаточно много - объектно-ориентированное программирование, сетевые технологии и так далее. И во всех этих случаях происходило примерно одно и то же: кто-то это придумывал, некоторые дальновидные к нему присоединялись, большинство недальновидных и/или ленивых не обращали внимания или яро критиковали, постепенно это выходило в массы и становилось обычным делом. Те, кто раньше был против, использовали новые технологии в повседневной работе, а те, кто в своё время выглядел чудаком, уже начинали продвигаться дальше. Может быть эти последние, наиболее дальновидные, и изобретали то, что шло впереди своего времени, и потому это сначала не пользовалось успехом... Может быть. Но в любом случае вряд-ли кто-то перечислит хоть десяток профессий, где такие перевороты, переосмысления, активное образование новых уровней имеет место. Всё из перечисленного будет в области ИТ, это точно.

У кого-то остались сомнения в том, что программистов нельзя сравнивать ни с грузчиками, ни с бухгалтерами, ни с экономистами?