понедельник, 27 апреля 2009 г.

Молот ненависти

Ученье- свет, а неученье- тьма.

Для быстрого старта в мире ИТ я давал рекомендации. Однако, лет через пять успешного труда и продвижения по карьерной лестнице, многие почувствуют ЭТО. Сначала не обратят внимания, потом ЭТО вызовет раздражение, потом ненависть, уныние, депрессию. Затем в каком-либо программистском форуме появится вопрос: "Что делать, куда двигаться дальше?" Да, все верно, ЭТО он- "стеклянный потолок". Это когда вы чувствуете, что дальнейшие усилия для продвижения по карьерной лестнице, для повышения зарплаты приносят все меньше и меньше денег. В конечном итоге, вы понимаете, что можно все 24 часа работать, и при этом, реально, существенного улучшения материальных условий у вас не произойдет. Теряется смысл дальше ударно работать, быть инициативным, креативным. Блеск в глазах тускнеет, пульс замедляется… Мозг сверлит вопрос: «Это конец»?

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

Конечно, всегда есть крайние случаи: кто-то решает радикально сменить профессию, и уходит в менеджеры. Однако все менеджерами и руководителями стать не смогут– хотя бы потому, что всем мест не хватит. Так что же делать остальным?

Есть другая крайность- дауншифтинг. Живите в свое удовольствие, под этим стеклянным потолком. Почему бы нет, если психологически это вас не тяготит и денег хватает?

Промежуточный вариант: продолжать заниматься любимым делом, но, все же, как-то, хоть чуточку, продавить верхнюю планку по зарплате вверх. Указанного мною минимума тут уже не хватит. Предлагаемый мною вариант: расширить свои знания. Новое знание - это как дополнительная степень свободы, придаст вам гибкость и позволит точнее адаптироваться к рынку труда, лучше соответствовать ожиданиям работодателей. А за это уже можно и денег больше просить. Да, скорее всего, их вам и так предложат. У каждой специализации есть свои особенности, однако можно выделить некоторые универсальные рекомендации.

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

  2. Учите английский язык. Знание языка открывает широкие перспективы поездить, поработать по всему миру. Кроме того, вы без труда сможете читать англоязычные профессиональные форумы, читать документацию из первоисточников. Это реальное,  конкурентное преимущество на рынке труда. Даже если вас не привлекает перспектива работы за границей, то у вас появляется возможность трудоустройства в российские представительства иностранных компаний. Там, как правило, требуется обязательно знать английский язык. Учтите к тому же, что зарплата в представительствах повыше будет, чем в среднем по рынку. Как видите, знание языка- сильнейший удар по «стеклянному потолку».

  3. Научитесь усидчивости. Мой научный руководитель в университете постоянно сетовал, что нынешняя молодежь не умеет читать. Это правда. Очень важно научится читать внимательно, вдумчиво. Выжимая по максимуму информацию из каждой строчки. К своему стыду, я вспомнил свою историю на заре трудовой карьеры. У меня была английская документация по микросхеме. Я, в соответствии с ней, программировал микросхему, мне возвращался статус «ОК», но ничего не работало. Микросхема редкая, в России я, похоже, был первым, кто с ней работал – я на уши поставил форумы, поднял все свои связи. Никто не мог мне помочь. Через ПОЛГОДА я таки разобрал документацию. Вся проблема заключалась в одном слове. Я не мог его перевести. Оно было очень маленькое, короткое и я придавал мало ему внимания, считая, что это какая-то частица или междометие. Я ПОЛГОДА КАЖДЫЙ день бился с этой микросхемой, но как только понял смысл этого слова, я в этот же день смог ее запустить.

  4. Учитесь понимать других людей. Вдумывайтесь в то, что говорят вам. Приведу в качестве примера привычку отвечать буквально на каждое предложение оппоненту в дискуссии на форумах. Весь текст разбивается на цитаты, и по каждой цитате пишется ответ, прямо вот как сверху вниз читается текст, так сразу пишется ответ. При этом текст не воспринимается целостно, вырванные из контекста цитаты становятся бессмысленными и часто даже противоречащими друг другу. Дочитайте мысль оппонента до конца. Обдумайте и напишите целостный ответ, не рванный на цитаты. Сохраните в черновиках. Вернитесь к ответу через часик-другой. В 90% случаев вы поймете, что ответили чушь, и, что вообще лучше не отвечать. И, если после этого всего равно вы увидели, что дали достойный ответ, то тогда и отправляйте его оппоненту. В своем блоге я очень часто сталкиваюсь с этим. Вот и с предыдущей статьей про MS Dynamics так получилось. Ее прочли несколько сотен человек, но нашлись несколько человек, которые не поняли ее мысли, оценив ее по шаблону. Идея статьи в том, что я, как дилетант, взглянул на продукт и сказал, что мне там непонятно и помечтал о том, как бы я его развивал (я так и написал в статье «пофантазируем»). Однако, это было воспринято как неквалифицированная критика ПО и вызвало резкую реакцию. Пока не раздулся излишний флейм, я быстренько еще раз жирным буквами разжевал смысл статьи. Я, в свою очередь, буду стараться попроще, пояснее доносить свои мысли, но все же и комментарии мне желательно оставлять подумавши.

  5. Последнее, что бы я посоветовал для общего развития – изучайте прикладную математику. Алгоритмы. Читайте Кнута. Это из разряда вечных ценностей.

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

понедельник, 13 апреля 2009 г.

Амбиции против голоса разума

Хочу высказать свое возмущение некоторыми публикуемыми вакансиями, а работодателям дать шикарный тест для претендентов на должность ведущего программиста или архитектора в конце статьи. В очередной раз читаю среди вакансий на форуме: "...требуется системный архитектор..., муж., возраст 25-35 лет...". В комментариях и без меня хватило народу, чтобы в пух и прах разнести эти требования. Что же лично мне не нравится в вакансии, кроме того, что указание пола и возраста противоречит конституции РФ?

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

  1. В 22-23 года большинство заканчивает ВУЗ. Хорошо, если студент заранее стажировался в софтверной компании. Однако, как показывает опыт, уделять существенное время работе он не может из-за учебы. Фактически, студента можно использовать только для очень маленьких задач, буквально с ежедневным контролем их выполнения.
  2. Ясно, что на работу ведущим программистом, выпускника, с мизерным опытом работы, вряд какая-либо компания возьмет. Это означает примерно 1-2 года работы на стажерских позициях или работа в должности программиста, но без ответственности за проект. Практически, только после 25 лет программисту-стажеру можно будет поручать самостоятельную работу над участком проекта, не боясь, что он там сильно "накосячит".
  3. Однако чтобы стать действительно ведущим программистов, не по бумажке, а по опыту работу, по знаниям, надо чтобы прошло еще лет пять. Я не вычислял эти цифры- все "на своей шкуре" испытано. Необходим багаж полностью выполненных 2-3 проектов, чтобы пройти через все стадии разработки и закрепить эти знания. Учитывая, что серьезные проекты длятся от полугода до нескольких лет, то 5 лет на работе в должности программиста уже не выглядят большой цифрой. Это минимум. Таким образом, нам 30 лет, а мы все еще программисты.
  4. После этого надо поработать ведущим программистом. Это даст опыт руководства группой программистов, умение распределять и ставить задачи. Этот этап перепрыгнуть нельзя - архитектор, не умеющий общаться, доступно излагать мысли ничего не стоит. Аналогично, 2-3 проекта для накопления и закрепления опыта. Это еще примерно 5 лет, а значит наш возраст уже 35 лет.
  5. Вот тут уже, после 35 лет жизни, можно и о карьере системного архитектора задуматься. Если пыл еще не угас, то почитайте, что надо чтобы получить сертификат архитектора от Microsoft. Тут явно 35 годами жизни не отделаешься. Но уж если получили сертификат, нашли работу архитектора, то примите мои поздравления - вы достигли действительно выдающихся результатов!

А теперь, возвращаясь к первоначальному вопросу, я хотел бы спросить того работодателя: "Где вы вообще видели архитекторов до 35 лет?" И другой вопрос к претендентам на эту должность: "Вам меньше 35 лет? Вы уверены, что действительно являетесь архитекторами на деле?" Чтобы многим сбить самомнение предлагаю шикарный тест, который недавно мне преподнесла жизнь. Я с тестом справился отлично. Недаром уже несколько лет работаю ведущим программистом, а не только по трудовой числюсь таковым. Итак, задача.

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

Задание 1. Разработайте формализованную модель описанной процедуры записи на прием к врачу.

Задание 2. Укажите слабые места в таком способе записи на прием к врачу.

Задание 3. Представьте, что вы пришли на запись в 7 утра, а очередь уже из 50 человек. При этом врач принимает не более 15 человек в день, т.е. в этот день на прием записаться вы не успеете. Можно ли что-то все-таки сделать, чтобы записаться (применение силы и взятка не считается)?

Ответы:

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

PS: Набирал текст в «Google Docs». Как же он меня замучил! Регулярно автоматически сохраняется, и при этом теряется фокус с области ввода текста. Надо брать мышку и снова тыкать в то место, на котором меня застало врасплох это чертово автосохранение! Случается это через раз, и достает сильно.