понедельник, 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». Как же он меня замучил! Регулярно автоматически сохраняется, и при этом теряется фокус с области ввода текста. Надо брать мышку и снова тыкать в то место, на котором меня застало врасплох это чертово автосохранение! Случается это через раз, и достает сильно.