Вдогонку моему посту об уровнях программиста и их оценке сегодня в голову пришла еще одна идея. В каком-то смысле она была навеяна комментариями к этому посту, в которых ребята справедливо указали, что я рассмотрел лишь уровни программистов, хотя попытался причесать под эту гребенку еще тимлидов и архитекторов. На деле же я просто попытался рассмотреть техническую сторону развития программиста, упустив из виду другие навыки, необходимые на более высоких ступенях. Рассмотрим текущую ситуацию. У нас есть следующие роли/должности на проекте: разработчик, QA, лидер команды (dev/team lead), лидер QA (QA lead), менеджер проекта, архитектор и т.д. При этом мы рассматриваем уровни, как правило, исключительно для разработчиков и QA: junior, middle, senior. А ведь на деле те же тимлиды или менеджеры проекта ничем особо не отличаются. Да, стать тимлидом или архитектором junior-разработчик вряд ли сможет и здесь у нас есть определенные ограничения в стартовом уровне, но ведь все равно тот же senior-разработчик, которого ставят тимлидом по сути является junior-тимлидом. У него, несмотря на достаточный технический уровень, еще нет опыта в некоторых сферах: слабо развиты навыки управления командой, распределения обязанностей, тесного общения с клиентом, решения других менеджерских задач. Ему вряд ли можно доверить большой проект и большую команду сразу. Скорее всего, это сначала будет небольшой коллектив, на котором он будет расти. С опытом такой тимлид будет продвигаться по этой должности и в конце-концов сможет стать зубром своего дела, senior-тимлидом, грубо говоря. У него будет достаточно знаний и умений, чтобы вести проекты разного уровня и длительности. Он будет владеть большим количеством методологий, глубже понимать процесс разработки, лучше уметь находить общий язык с командой и клиентом. То же самое касается тех же менеджеров проекта, QA лидов, архитекторов и т.д. Более того, насколько я слышал, на западе в крупных компаниях такие подходы практикуются, по крайней мере, для некоторых из этих должностей. В гугле есть даже какие-то продвинутые senior-разработчики, но их сакрального смысла я не уловил, похоже, просто расширили шкалу. Да и в Харькове, думаю, есть компании, которые имеют такое деление на уровни. Но этих компаний реально мало – взгляните на любой сайт вакансий. А ведь идея-то здравая. Насколько было бы проще как менеджерам, так и самим сотрудникам, если бы они могли знать приблизительный уровень специалистов этого профиля и подбирать для команды тех, которые подходят ей больше всего. Не говоря уже об HR и рекрутерах, думаю, их жизнь бы тоже облегчилась значительно :)
об информационных технологиях, программировании, путешествиях и фотографии
Friday, July 4, 2008
Senior PM - это звучит гордо
Thursday, July 3, 2008
Байдарочный поход на День конституции: отчет
Ходило нас 14 человек, байдарки брали под градусником, 5 штук + 1 была у Славика (наш QA lead). Палатки, спальники, рюкзаки и прочий инвентарь наскребли сами. Маршрут выбрали для 3-х дней не самый сложный: вариант А был от Гинеевки до Балаклеи и там на поезде домой, а вариант Б – от все той же Гинеевки до Андреевки, что где-то на
Первая часть Марлезонского балета
В Гинеевку мы приехали где-то в 8 утра, собрали байдарки (по пути вспомнив незлым тихим словом создателей Салюта и таких узких кож), перекусили и к 12 часам вышли на воду. Проплыли мимо Змиева и Змиевского городского пляжа и вышли в узкую часть реки. Здесь стало веселее и красивее. У некоторых ребят начались проблемы с лодками, одна байда была вообще не готова к походу – у нее явно была где-то дыра, которая портила жизнь Диме и Валере. Плюс ко всему рули привязывали абы как и теперь управлять некоторыми лодками, в том числе и нашей, было неудобно. Решили остановиться возле впадающего в реку ручья и привести лодки в порядок. Салют мы так и не заклеили, но рули починили и двинулись дальше. На горизонте уже была видна обсерватория. Прошли под мостом возле Задонецкого и начали приближаться к Коропово. На карте этого не видно, но река петляет там очень сильно, поэтому нам потребовалось довольно много времени, чтобы дойти до Гайдар, а потом мы вышли в широкое русло и снова начался тягун. Где-то начиная еще с моста у нас определились те, кто идет быстрее и кто отстает от группы. На тягуне мы рассыпались окончательно, приходилось часто складывать весла и ждать отстающих ребят. До Коропово добрались без приключений, вышли к Пьяной Хате, оставили лодки, и группа добровольцев пошла за водой. Мы с Леной, естественно, были в их числе (а толку на берегу околачиваться). Дошли до Карнавала (такая себе смесь из гостиницы, ресторана и развлекательного центра), посмотрели на кучу мажорных машин, пошутили, посмеялись, покололи себе босые ноги о щебень и камни на дороге и дотопали до магазина. По пути мы спрашивали про родник, который должен был быть где-то на горе, но никто толком ничего нам не сказал. В магазине сказали, что родник пересох и что там нечего ловить. В конце-концов решили набрать воды где-нибудь во дворе. Буквально сразу же нам повезло – попали к хорошей хозяйке, которая пустила нас во двор. Пока Андрей (наш менеджер) налаживал контакты с местной собачонкой и оравой котов при помощи купленных им в магазине жареных окуньков, мы набирали баклаги :). Поблагодарив гостеприимную хозяйку, мы отправились назад. Дошли до стоянки, уложили воду и отчалили от берега, впереди у нас была еще треть запланированного маршрута. Пока проходили Коропово и близлежащие базы отдыха, успели вдоволь покататься на волнах, которые оставляют за собой моторки и водные мотоциклы. Благо, река в этом месте широкая и места хватало всем. Зашли за поворот и увидели гору Казачку. Дальше еще один поворот и начался длинный прямой участок. Справа – гора, слева – лес. Красота. Шли мы достаточно быстро и скоро достигли места, где река снова сужается и начинает петлять, а гора заканчивается. По плану мы должны были делать ночевку где-то здесь, а времени уже было начало седьмого, поэтому мы решили искать место. Пока искали подходящий пляжик, благополучно доплыли до Черкасского Бишкина и тут уже стало не до выбора места. Все пляжи и более-менее пристойные берега были забиты, а становится в черте деревни хотелось мало, поэтому мы поплыли дальше. По пути нам составили компанию спелеолого-велосипедисты, которые плыли почти тем же маршрутом и из которых мы знали где-то половину. Они планировали остановиться за ЛЭП, поэтому мы тоже решили плыть вперед. Было уже около восьми, когда мы добрались до ЛЭП и поняли, что вокруг лишь одни камыши. Ребята, которые шли впервые, начали нервничать, что мы не найдем место, но мы упорно гребли вперед, пока не добрались до некоего подобия берега. Лена сходила на разведку и сказала, что место нам подходит. Подход был сначала не очень, но потом мы выломали камыш, и все стало просто замечательно. Едва мы выгрузились, поставили палатки и развели костер, как стемнело. Ужинали мы тихо и всухомятку, даже на шашлыки не осталось сил и желания. У некоторых ребят промокли спальники, одежка и обувь, хотя всех предупреждали о том, что нужно заматывать вещи очень серьезно. Поделились с ними кто чем может и рано пошли спать. Все устали – за день вместо плановых

Вторая часть Марлезонского балета
Проснулись с утра все не слишком рано, часов в 8-9. Приготовили завтрак, покушали, досушили вещи, покупались, приготовили колбаски на вечер, сложились и отчалили где-то около часа дня. Пока кушали, дружно думали думу: плыть ли нам до Балаклеи или до Андреевки. Взвесили все варианты, проголосовали, получилось 8 на 6 в пользу Балаклеи. Однако 6 человек (это две полные байдарки плюс еще один человек из третьей) – это все-таки весомо, а демократия, как известно, для принятия решений годиться не всегда. Ребята устали и вымотались за первый день. Поэтому мы решили, что проплывем за Андреевку, там переночуем, а на третий день вернемся назад против течения, чтобы оттуда уезжать в Харьков. Без приключений добрались до Геевки, за ней нашли старицу, напротив который течет родник. Нам о нем снова-таки рассказали в клубе. Пока ребята набирали воду, остальные тихо дрейфовали вниз по течению, а у меня появилась возможность расчехлить удочку :) Буквально сразу же поймал какую-то верховодку, но отпустил ее, так как девать ее было некуда. Скоро наши нас догнали и мы пошли дальше. До Червоного Донца был тягун, поэтому плыли не очень быстро, но где-то к половине пятого были уже там. Прошли мост (место финиша на следующий день) и направились к Андреевке. Здесь снова начался ропот по поводу того, что мы удаляемся от финиша :), но было лишь около пяти, поэтому мы решили все же выйти за пределы деревни. Как показала практика, решение верное, но немного наивное, и что нам очень повезло. Не доходя до Андреевки, мы свернули в плавни и срезали часть маршрута, а заодно и получили удовольствие от прохожения этого участка. Дальше снова начинались местные, у которых коронная шутка в этот день была «За поворотом водопад». И это еще цветочки. Все понимаю, но почему некоторые люди считают себя такими остроумными – неясно. За два дня было лишь несколько человек, которые действительно доброжелательно пообщались с нами, большинство же других выкриков были не очень приятными. В конце-концов мы все же нашли на правом берегу отличное место для ночлега, но решили, что можно еще чуть дальше сплавать на разведку. Мы с Леной проплыли еще километра два по течению до места, где снова начинается узкий Донец и вернулись назад несолоно хлебавши. Слева по всему маршруту было столпотворение. Машины, палатки, навесы, люди, музыка. Хуже, чем в Крыму. Правый берег был весь в камыше, а несколько хороших мест были уже заняты. Выходные. В результате мы решили остаться на ночевку здесь. В первый раз за два мы все нормально покупались и приготовили ужин. В ход пошло почти все мясо и лапша. Пока остальные готовили кушать, я снова решил порыбачить, но особого успеха не добился, поэтому пошел ужинать со всеми. В этот день легли спать уже позже, общение было приятным и непринужденным, все шутили, а перепетии двух дней были забыты. В этот день мы прошли километров 18-20.

День третий – праздник тот же
Утро у меня началось со звонка будильника Димы. Он хотел встать рано и пофотать рассвет. Мой будильник, заведененный на полпятого утра, еще не звонил, поэтому я решил еще немного поспать. Скоро и мой будильник дал о себе знать. Я вышел, взял фотик и удочку и пошел искать место. Попробовал несколько вариантов и нашел подходящее. Начался рассвет. Над рекой стояла легкая дымка, а вода была теплая, как парное молоко. Ласковое утреннее солнце, вода и удочка – что еще может быть лучше для отдыха? Верховодка клевала исправно, и не проходило и 5 минут, чтобы я не поймал рыбку. Я попробовал разные глубины, но ничего кроме верховодки не выловил, поэтому решил, что синица в руке лучше, чем журавль в небе. Где-то на середине реки прыгали хищники, окуньки под берегом гоняли верховодку, а я попеременно то фотографировал, то удил рыбу. Вокруг была тишина и спокойствие, все спали. Так шли минуты за минутами. Вскоре лагерь начал оживать, люди встали и начали готовить чай, Лена пришла составить мне компанию, и все стало совсем хорошо :) Приготовили завтрак, поели, покупались напоследок, собрали вещи и отправились в обратную дорогу. В принципе, если бы мы во второй день смогли осилить еще километров пять, то мы бы спокойно вышли к Балаклее в третий день по течению. Но все же не в этот раз. Зато на обратном пути мы были награждены сильным ветром в лицо и волнами, так что пришлось поработать мышцами часа полтора. Возле Червоного Донца рядом с мостом мы вытащили лодки на берег и начали их сушить и разбирать. С этим мы справились довольно быстро, покушали напоследок и начали решать, как выбираться. Только мы успели вызвать такси до Шебелинки, как приехал наш грузовик за байдами и водитель предложил нам проехать в кабине и кузове. В кабине могло спокойно поместиться 6 человек, а кузов был чистым, поэтому мы решили сэкономить время и добраться до Харькова вместе с байдарками. На обратном пути ребята в кузове резались в карты, а мы в кабине общались. Как часто бывает после похода, всех клонило в сон, особенно меня :) До Харькова добрались без приключений где-то за полтора часа. Нас выгрузили возле ст. м. Метростроителей, откуда мы уже отправились по домам. Так и закончился наш замечательный поход по одной из самых красивых рек Украины. Были, конечно, просчеты, которые мы учтем в следующий раз, но в целом наш первый поход удался. Думаю, все получили от него удовольствие и уж точно, что за эти несколько дней мы все стали немножко ближе друг другу. Спасибо Славику за организацию похода и всем, кто был там и кто сделал этот поход незабываемым.

Фотоотчет о походе, как обычно, можно найти на Пикасе. А здесь выкладываю еще несколько фотографий оттуда:




Wednesday, July 2, 2008
Microsoft все-таки не любит Google
Thursday, June 26, 2008
Continuous Tech Development
Наверно, одно из основных отличий IT-профессий от всех остальных в том, что нам приходится постоянно совершенствовать свой уровень как специалистов. Чтобы успевать за прогрессом, расширять кругозор, выходить на новый уровень мастерства, увеличивать свою производительность и стоимость в глазах работодателя. Однако профессия – это ведь не самое главное в жизни, есть семья, хобби, отдых, которым тоже нужно посвящать много времени. Как же найти хороший способ получения знаний о новых технологиях, подходах и новостях в нашей отрасли, который был бы наименее временезатратен, но в то же время интересен и эффективен? Можно читать книги, но это занимает довольно много времени и не совсем отвечает исходной задаче. Книги – это не поверхностный и широконаправленный материал, а более глубокое описание конкретной технологии/подхода, их нужно читать, когда хочется овладеть темой на серьезном уровне. Можно участвовать в различных технических форумах или ресурсах наподобие Хабра, однако это удовольствие на любителя – отнимает много времени и требует участия в сообществе, что не всем подходит (у меня «форумный» период прошел в институте, сейчас как-то не тянет). Однако есть и другие способы, удовлетворяющие первоначальным критериям. Я для себя нашел два:
1) Чтение технических блогов.
С появлением блогосферы стало появляться много людей, которые хотят делиться своими знаниями и делают это прекрасно. Настраиваешь удобный RSS-reader и – вперед. Я использую Google Reader, потому что его можно читать и из дому, и на работе, при этом не напрягаясь с синхронизацией. Подписался на интересные для меня блоги, постоянно их читаю и обновляю этот список. Неинтересные или скатившиеся до уровня переписывания новостей с других блогов фиды я удаляю, как бесполезные, а новые интересные добавляю. Основное преимущество блогов - это их широкий охват и небольшой размер постов. С одной стороны, можно быть в курсе того, что происходит в окружающем мире, с другой - иногда можно попасть на интересное решение, которое тебе будет действительно полезно, то есть воспользоваться реальным опытом другого человека. Приводить здесь список блогов, на которые я подписан, не буду, их довольно много, если кому-то интересно, могу выложить отдельным постом.
2) Прослушивание подкастов
Так как время на чтение статей/блогов тоже не резиновое, есть еще один хороший вариант повышать свою квалификацию – слушать подкасты. Сейчас в инете довольно много различных подкастов, часть из которых я сейчас перечислю:
http://www.hanselminutes.com/ - подкасты от Scott Hanselman. Нравятся мне больше всех остальных. Интересные темы, известные гости, очень грамотный ведущий, отличный юмор. Темы касаются не только .NET, есть обзоры других технологий и даже отвлеченные от программирования подкасты. Узнал из его подкастов много интересного. Заходите на закладку Archives – там полный перечень из более чем сотня подкастов. Хватит надолго :) Обычная длина – 30 минут.
http://www.dotnetrocks.com/ - подкасты от Carl Franklin (собеседник Скотта в половине его подкастов) и Richard Campbell. Пока что слышал всего несколько штук. Впечатления двоякое. С одной стороны, много тем, интересные гости, с другой – мешают звуки из зала и ведущим не очень хватает технического бекграунда. Подкастов там уже за три с половиной сотни, так что есть из чего выбрать. Основная тема - .NET, но есть и различные отклонения в пределах шага влево-вправо.
http://www.se-radio.net/ - Software Engineering Radio. Также очень хорошие подкасты. Темы абсолютно разные, не привязаны к одной технологии, гости интересные, но, на мой взгляд, много левых тем, которые мне не интересны. Небольшой недостаток – подкасты в среднем идут около часа, и это не делает их динамичнее. Иногда бывает откровенно скучно. Подкастов около сотни.
http://radio-t.com/ - Радио-Т. Подкасты на русском языке на самую различную тематику. В отличие от предыдущих здесь нет явной центральной темы, люди просто общаются о том, что им интересно. Я эти подкасты не слушаю пока, потому что мне не очень нравится формат, но друг отзывается о них очень хорошо. Подкастов уже набежало около сотни.
http://blog.stackoverflow.com/ - подкасты от Joel Spolsky. Думаю, в представлении не нуждается. Я их пока не слушал, так как, опять же, формат там такой же, что и в Радио-Т, и мне хватает «нормальных» подкастов. Начали выпускаться только недавно, наверно на волне популярности этого способа распространения информации.
http://www.polymorphicpodcast.com/ - .NET подкасты, которые я только что случайно нашел в инете :) Не слушал, но возможно понравится.
http://aspnetpodcast.com/ - подкасты по ASP.NET, пока что не было шансов ознакомиться, но посмотрю обязательно.
http://www.asp.net/learn/podcasts/
Ну, и совсем напоследок, в тему данного поста ссылка на один из подкастов Скотта для затравки (хотя мой любимый подкаст у него немножко другой ;)):
Saturday, May 17, 2008
Наш ответ Scott'у Hanselman'у
Чуть больше 3 лет назад Scott Hanselman - бывший архитектор Corillian, а теперь Senior Program Manager в Microsoft, автор интереснейших подкастов по программированию на платформе .NET и не только, соавтор нескольких книг и вообще очень уважаемый человек - опубликовал свой набор вещей, которые должен знать хороший .NET разработчик. Конечно, много времени утекло с тех пор, но вопросы остались. Немного порыскав в гугле я смог найти не так уж и много хороших ответов. В основном либо люди отвечают неполно, либо пытаются начать отвечать хорошо, но, как правило, через какое-то время бросают это занятие. Я бы хотел начать небольшой эксперимент и хочу предложить поучаствовать в нем всем желающим. Предлагаю попробовать всем дружно ответить на эти вопросы. Никто никого ни к чему не обязывает: есть время и желание - отвечаем или комментируем и улучшаем чужие ответы, нет этих двух составляющих - просто читаем, что пишут другие. Плюсы участия лежат на поверхности. Во-первых, не все вопросы легкие, для того, чтобы ответить, нужно разобраться с чем-то новым. Отсюда польза для человека, который взялся отвечать. Во-вторых, своим ответом вы сможете помочь другим людям, которые столкнуться с этой проблемой в будущем, что тоже не может не радовать. В-третьих, это действительно эксперимент. Эксперимент по созданию небольшого комьюнити, которое бы смогло успешно обмениваться знаниями и опытом. Думаю, это также будет полезно всем. В дальнейшем этот небольшой FAQ можно будет расширить за счет других вопросов. Возможно, из этого получится что-то интересное и полезное.
Итак, вопросов там около 100. Достаточно много для одного человека (думаю, частично в этом кроется проблема того, что остальные бросали на полпути), но в то же время вопросы разные и достаточно интересные, чтобы каждый нашел себе что-то более близкое. Меня сейчас интересует лишь, кто хотел бы участвовать в этом действии и в какой мере. Язык ответов, думаю, русский, по крайней мере для начала, т.к. хочется, чтобы все ответы были на одном и том же языке + чтобы их смогли прочитать люди, не знающие английский. Впрочем, над этим можно еще подумать. Еще один момент, требующий решения - место. В идеале это мог был бы быть вики, но я не знаю ни одного бесплатного. Если есть идеи - пишите, решим. Как вариант, можно попробовать поднять свой хостинг с вики, в принципе, выходы есть.
А пока выкладываю ссылки, которые нашел к текущему времени: http://www.ekampf.com/blog/2005/02/23/NETInterviewQuestionsFromScottHanselmanAnswersPart1.aspx http://sketch-in-dot-net.spaces.live.com/Blog/cns!A4F5926067C892F0!149.entry http://sketch-in-dot-net.spaces.live.com/blog/cns!A4F5926067C892F0!167.entry http://blogs.ittoolbox.com/visualbasic/operating/archives/some-interesting-net-questions-4216 http://blogs.ittoolbox.com/visualbasic/operating/archives/more-net-questionstyping-ii-4271 http://blogs.ittoolbox.com/visualbasic/operating/archives/more-net-questions-iii-4433 http://www.avneesh.com/Blogs/PermaLink,guid,22.aspx http://www.dotnetdoc.com/PermaLink,guid,d7c8a3e4-b151-4838-a1e9-114128ef1646.aspx http://www.dotnetdoc.com/PermaLink,guid,76b6a74e-011a-49c6-bbd1-745e6ca9dc68.aspx http://graysmatter.codivation.com/MyGrandmotherAndTheDifferenceBetweenProcessesAndThreads.aspx http://sendhil.spaces.live.com/blog/cns!30862CF919BD131A!575.entry http://sendhil.spaces.live.com/blog/cns!30862CF919BD131A!579.entry http://sendhil.spaces.live.com/blog/cns!30862CF919BD131A!583.entry http://sendhil.spaces.live.com/blog/cns!30862CF919BD131A!585.entry
Последний парень подошел к делу наиболее ответственно и ответил на 4 из 6 секций. Или поместил ссылки на ответы. Но в идеале я хотел бы, чтобы ответы были более развернутыми, хотя, опять же, использовать чужие наработки никто не запрещает. Лишь бы copyleft соблюдать :)
Sunday, May 11, 2008
Оценка уровня программиста
В недавнем разговоре с моим другом мы подняли интересный вопрос, с которым наверняка сталкивался каждый senior и lead при приеме нового человека на работу, в команду или даже просто в своей команде: как оценить реальный уровень программиста. Мой друг высказал интересную, но все же шуточную идею: junior хочет все переписать заново, middle и выше уже начинают понимать, что переписыванием заново проблема не решается, а за само переписывание клиент/руководство деньги просто так платить не будет. Однако в каждой шутке, как известно, лишь доля шутки: я сам работал с ребятами, которые хотели переписать весь проект или какую-то его часть за несколько недель или дней, аргументируя это тем, что их вариант будет работать лучше. Я на собственном опыте не раз убеждался, что навыков у подобных junior/middle людей просто не хватит на реализацию задумки, а предложение переписать возникает лишь за отсутствием других навыков, кроме написания кода с нуля. Люди посильнее никогда не стремятся переписать все. Они более трезво оценивают сложность задачи, свой уровень и уровень команды в целом, и, что самое важное, обладают навыками рефакторинга, которыми еще не обладают junior'ы и многие midlle'ы. То есть они могут, при необходимости, просто изменить нужную часть приложения, причем, как правило, в процессе имплементации новой функциональности, чтобы а) не напрягать никого оплатой/продажей отдельных тасков на рефакторинг, б) протестировать измененный функционал в комплексе вместе с тестированием нового. Второе, конечно, не всегда возможно, так как изменения могут быть глубоко в ядре, но тогда на помощь приходят unit-тесты, о которых эти люди, опять же, знают и умеют применять.
Итак, к чему это длинное вступление? К тому, что оценка уровня программиста очень сложная штука и очень сложно загнать кого-то в существующие рамки junior, middle, senior, lead, architect, etc. У меня есть свое видение данного вопроса, которое я сейчас изложу, но наверняка у читающих этот пост людей будет свое, дополняющее или опровергающее мое, и мне будет интересно его услышать.
Я не хотел бы сейчас останавливаться на моменте принятия незнакомого человека на работу или проект и попытке определить его уровень. Во-первых, для начала нужно выработать какие-то критерии оценки уровня в своей голове, чтобы потом умело их применять, а, во-вторых, пост тогда превратиться в сборник советов для собеседования, а их и так вагон и маленькая тележка. Также я специально не буду затрагивать личные качества программиста, такие как ответственность, исполнительность, коммуникабельность, быстрая обучаемость и др. Эти качества также можно и нужно развивать, но это тема отдельного разговора. Поэтому коснусь лишь непосредственно понимания уровня специалиста, которое потом можно использовать в различных ситуациях.
В данный момент в различных фирмах существуют разные подходы к оценке. Где смотрят лишь на технические знания, заставляя сотрудников сдавать тесты, где опираются на мнение руководителя, где проводят комплексную оценку, опрашивая сотрудников, руководителя и подчиненных по различным пунктам. Но практически везде забывают одну важную вещь, которая вроде бы лежит на поверхности, но ведет себя как потерянные очки, которые потом оказываются на носу: в программировании, как и во многих других сферах деятельности, нельзя давать единственную оценку уровню человека, можно давать лишь среднюю, выведенную определенным образом из менее общих оценок. Это как в английском языке: человек с reading и listening на уровне upper-intermediate может иметь pre-intermedite в общении и vocabular’е. Такого человека и обучать нужно соответствующим образом: с большим упором на менее развитые области. То есть, алгоритм оценки должен выглядеть приблизительно следующим образом: разбиваем необходимый набор знаний/умений на группы (критерии), оцениваем независимо каждый критерий и затем собираем все воедино в соответствии с необходимой формулой, используя те или иные коэффициенты усиления для критериев различной степени важности.
Второй ошибкой является сам набор критериев оценки. Почти всегда в таких случаях рассматривают лишь знание человеком различных технологий, паттернов, подходов, методологий, на оценку чего направлены различные тесты. В то время как оценивать нужно не знание, а понимание этих вещей. Хороший программист может не знать технологии JSP или JSF, т.к. он никогда в глаза не видел Java, но при этом, хорошо понимая принципы web-программирования и имея опыт ASP.NET или PHP, он с легкостью сможет разобраться со сложной проблемой и изучит новую технологию или язык очень быстро. Это как в школе: щелкать однотипные задачки может научиться практически любой, а вот понимать предмет на уровне, достаточном для решения нестандартных олимпиадных задач, могут единицы. То есть если человек знает, что есть определенный набор событий в жизненном цикле ASP.NET-страницы, это хорошо, но это junior уровень. Middle уже должен не просто использовать эти события, но и понимать, что происходит до них, и что их вызывает и с какой целью (что такое http-запрос и http-ответ, как они выглядят, что такое конвейер и что такое класс страницы вообще). Задача senior'а же уметь видеть полный поток выполнения запроса, знать особенности, понимать на более глубоком и абстрактном уровне все процессы, происходящие здесь, чтобы суметь в случае надобности разобраться со сложной проблемой. Именно на уровне понимания, на мой взгляд, и проходит одна из важнейших границ оценки специалиста.
Еще одним важным умением, которое приходит лишь с повышением уровня и может рассматриваться как некоторый критерий этого уровня, является умение перемещаться между уровнями абстракции. Junior-программисты часто не видят дальше своей маленькой задачи и куска кода, который они сейчас пишут. Из-за этого их код и отличается некоторой непродуманностью и их часто приходится поправлять, просить перенести тот или иной код в другой класс или даже на другой уровень приложения. С опытом, программист учится выходить на более высокие уровни абстракции: сначала на уровень понимания класса, потом на уровень взаимодействия между классами и объектами, как правило, при этом на ходу изучая паттерны проектирования. Затем приходит видение слоев и частей приложения, взаимодействия между ними и, наконец, умение видеть архитектуру и дизайн приложения в целом, с высоты птичьего полета. Если оценивать очень грубо, я бы сказал, что на этом этапе программист выходит уже на уровень middle+ или даже senior. Самое важное здесь: умение быстро перемещаться с уровня высокоуровневой архитектуры до уровня какого-нибудь куска кода и обратно, комплексная видимость кода приложения. Конечно, в крупных и даже средних приложениях очень сложно знать весь код, но это и не нужно – достаточно просто понимать, что делает тот или иной модуль или слой, а лезть ниже стоит лишь тогда, когда это действительно нужно. С этим сильный программист справляется без особого труда. Кроме того, умение видеть приложение в целом, пусть даже без особой степени детализации – это одно из самых важных умений lead'а и architect'а, без него далеко не уедешь.
С предыдущим умением также тесно связан т.н. системный анализ: умение анализировать задачу/требования, разбивать их на подзадачи, оценивать последние и создавать архитектуру приложения (то есть еще и выполнять некоторый синтез). Здесь также нужно уметь видеть взаимосвязи между задачами, требующими выполнения, и существующим либо будущим кодом. На этом уровне мыслят в основном программисты с уровнем senior и выше, которым часто приходится заниматься подобными вещами.
Еще один важный навык – умение писать качественный и продуманный код. Этот навык включает в себя целый комплекс других умений: знание и применение объектно-ориентированного дизайна и архитектуры, паттернов проектирования (естественно, в меру), рефакторинга, best patterns and practices в той или иной технологии, умение читать код глазами и смотреть наперед, предупреждая возможные ошибки и предусматривая дальнейшее расширение приложения. Все это приходит с опытом и желанием учится и в разной степени развито у программистов всех уровней, начиная от junior'а и заканчивая lead'ами и architect'ами.
Также нельзя оставлять в стороне и понимание процесса разработки. Процесс разработки серьезного ПО – это в 99% случаев командная работа, которой нужно управлять. Неуправляемые проекты очень часто превращаются в проекты разной степени безнадежности (привет всем «камикадзе»). Выбор правильной методологии, планирование работ в соответствие с ней – задача программистов не всех уровней, это работа людей уровня senior+, но понимание этой методологии, своей роли и задач в разработке очень полезно. Если мы сейчас пишем код, значит, мы пишем код, если фиксим баги, значит, фиксим баги, а не кто в лес, кто по дрова. В слаженно работающей по определенному плану команде, как правило, здоровая рабочая атмосфера и авралы случаются очень редко. По уровню данного понимания также можно оценить уровень специалиста.
И напоследок скажу еще об очень важном навыке: это навык постоянного саморазвития и расширения собственного кругозора. Развит этот навык у всех в различный степени. У кого-то есть желание изучать новые технологии и языки, читать книги, статьи, новости, технические блоги, слушать подкасты, смотреть вебкасты, ездить на конференции, постоянно быть в курсе событий и пробовать что-то новое, у кого-то – нет. Или да, но в меньшей степени. Однако тем, кто пренебрегает этим навыком, стоит сказать лишь одно: в индустрии, где действует закон Мура, нужно стараться двигаться с той же скоростью, иначе рискуешь остаться на обочине. Не в ущерб семье, личной жизни и хобби, ни в коем случае. Это вещи более важные и никакая работа не должна заменять человеку его настоящего развития, становления как личности или даже просто отдыха. Мы все же должны соблюдать разумный баланс в известном противоречии: жить, чтобы работать, или работать, чтобы жить. Но если уж мы все как минимум 8 часов проводим на работе, то пусть хотя бы малая толика этого времени уйдет на ваше развитие, как специалиста – это будет выгодно и вам, и вашему работодателю. Если не текущему, значит, следующему, который будет понимать подобные простые вещи.
Thursday, May 8, 2008
Крымские горы
Горный массив (яйла), расположенный в центральной части Крымских гор, между Алуштой и Симферополем, пятый по высоте в Крыму. Основные вершины – Ангар-Бурун (1453 м) и Эклизи-Бурун (1525 м, по другим источникам 1527 м). Переводится на русский как «Церковный мыс», так как на ней находятся практически уничтоженные развалины греческой церкви, называвшейся Панагия (Παναγıα – «Пресвятая»), куда греки раз в году восходили многолюдным ходом для молитв. Чатыр-Даг известен тем, что в его районе находится огромная куча пещер, в том числе всем известная Мраморная пещера. Это любимое место спелеологов, туристов и просто любителей Крымской экзотики.

Демерджи
Горный массив (яйла), расположенный возле Алушты. Название Демерджи (Demirci) в переводе с крымскотатарского означает «кузнец». В Средние века греки называли гору Фуна — «дымящаяся». Вершины — Северная Демерджи (1356 м.) и Южная Демерджи (1239 м.). На ее склоне находится известная Долина Привидений, а возле вершины располагается так называемая Голова Екатерины.

Ай-Петри
Гора, являющаяся одним из общепринятых и всеми любимых символов Крыма (переводится с греческого как Святой Петр). Является частью Ай-Петринской яйлы. Высота 1234 м, далеко не самая большая, но от этого не менее значимая. Зуб¬цы Ай-Петри состоят из четырех крупных (высотой 12-15 м) и ряда мелких отвесных пиков, образовавшихся при выветрива¬нии неоднородных рифовых известняков. На Ай-Петри можно подняться 3-мя способами: по дороге (машина, велосипед), по горным тропинкам (пешком) и по воздуху (на фуникулере).


Эти фотографии я сделал в походе, в который мы ходили на майские. К сожалению, к началу маршрута мы не попали, так как меня задержала работа, поэтому любоваться Чатыр-Дагом нам пришлось лишь снизу, куда остальные ребята уже спустились к моменту нашего приезда. Моей половинке это не так страшно – она уже была и на Чатыр-Даге, и на Демерджи, а вот мне было здорово обидно. Пришлось утешаться оставшейся частью похода и поездкой на Ай-Петри на фуникулере (не было времени подняться пешком, хотя очень хотелось). Это мой первый поход, поэтому еще успею везде побывать. Главное, что я понял, что горы – это одно из лучших мест на нашей планете и туда я буду возвращаться еще не раз.
Для затравки еще несколько фотографий. Все остальные – в моей галерее (1 и 2).
