Верхний пост

Мои альтернативные площадки
ПлощадкаАдрес
Твиттерhttp://twitter.com/ms_oberon
Альтернативный блог 1http://miccro.livejournal.com/
Альтернативный блог 2http://msoberon.wordpress.com/

вторник, 30 сентября 2008 г.

Учебные заведения советского периода

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

Наверху находились университеты.
Университеты занимались подготовкой теоретиков. Эти люди разрабатывали теоретическую базу, делали новые открытия. Применительно к программированию они занимались разработкой новых компиляторов, открытием новых теорем в дискретной математике, созданием идеальных моделей ЭВМ и т.д. и т.п.
Люди, закончившие университет, как правило оставались в самом университете дальше заниматься научной деятельностью или шли на соответствующие предприятия. По сути это — научные работники. Эти люди отличались хорошей культурологической базой, хорошими гуманитарными знаниями.

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

Далее — техникумы. Техникумы занимались подготовкой к специальностям по проще — бухгалтеры, те же программисты, но попроще качеством, например, программист 1С , простой администратор сети (типа сунул, вынул и пошёл Другими словами техникум готовил "пролетариев умственного труда". Здесь учили конкретным знаниям и тому, как их применять на практике. Из техникумов сразу выходили готовые специалисты, то есть не "менеджер по финансам", а бухгалтер, не инженер-программист, а программист 1С или программист С#. Такой человек сразу (!) приходил в организацию и начинал работать. Всему необходимому инструментарию его научили и как собаку натренировали для выполнения ежедневных задач.

ПТУ. Готовили людей рабочих специальностей.

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

Как пример, стали готовить программистов по принципу: изучи конкретные навыки и умения и иди работай на "завод". Сегодня подавляющее число студентов работают и забивают на лекции. После такого обучения человек знает как "копать", некоторые (кто ходил на лекции) знают, как устроен процесс "копания", и большенство плохо культурно развиты, ибо они во время лекций по философии, культурологии, истории работали на "заводах" и "фабриках" вместо изучения гуманитарных дисциплин!

Отсюда вывод. Сегодня, чтобы работать среднестатистическим программистом, не надо учиться в академиях и университетах. Достаточно закончить одно-двух годовые курсы по программированию

И в догонку. Задумайтесь, на что направлены сертификации и экзамены Майкрософт и Сан Микросистемз. Их цель подготовить "роботов", которые будут точно знать, в каком меню студии находится Create User Control, как открыть соединение с базой данных, сколько событий вызывает DataGrid и со стопроцентной уверенностью добавить, что MS Visual Studio не бегает за гандонами и не вызывает нечистую силу.

Собеседования. Найм программистов.

Очень много высказано мнений, как нанимать, кого нанимать на должность программиста.
Кто-то даёт тестовые задания, кто-то, к счастью не даёт их. Кто-то заставляет решать головоломки, кто-то нет.
Народ уже даже начал составлять книжки таких головоломок типа "Горы Фудзиямы". Выучи-де и будет тебе счастье. Некоторые задают вопросы из теории графов, спрашивают разного рода алгоритмы поиска.

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

Люди часто исходят из предпосылки, что программист — творческая работа, но задумайтесь, всегда ли это так. Я вам отвечу — нет, не всегда. Из-за непонимания этого сплошь и рядом происходят казусы, которые в результате заканчиваются плачевно для работодателя.

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

Теперь давайте посмотрим на примере одного из наших проектов, к чему приводит достаточно сложное тестовое задание и/или решение кандидатами головоломок. С одной стороны наняты творческие люди с хорошими математическими способностями, программисты до мозга и костей, люди, которые лучше просидят за ЭВМ всю ночь, чем будут трахать свою жену хотя бы раз в неделю. Такой программист полностью переписал механизм сессий, реализованный Майкрософтом, для коммерческого веб-проекта из трёх страничек с примитивными операциями типа getAllUsers() и getAccountByID(departmentID). Этому человеку стандартная обработка сессий, видите ли, показалась недостаточно универсальной. Как результат, этот проект делался около года, он очень тяжёлый в поддержке, куча багов, относящихся к реализации сессий, а не к бизнес-логике. Хотя сам по себе проект простой, но на него работодателю очень тяжело нанять людей, так как в нём задействовано очень много редко используемых технологий. Собеседования проводит сам же этот программист и отсеивает большую часть народа. Помню, некоторых даже выгоняли с этого проекта. В результате геморрой только у работодателя — с наймом персонала, поддержкой плюс недовольство заказчика.

Пример из другого проекта. Были наняты подобные люди (мегамозги), которых не устроил майкрософтовский WCF и они написали свой и ещё много чего наворотили. Результат:
— они уже сами толком не помнят, как это работает;
— Работает всё это жутко медленно;
— глюкает жутко, ибо всё сложно, куча ошибок;
— в некоторых случаях работает не в соответствии с бизнес-логикой;
— проект тяжёл в поддержке;
— тяжело найти людей

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

А теперь посмотрим, что после всего этого происходит на рынке труда.

Частенько уже наняв (!) C# программиста, работодатель предлагает ему поддерживать уже существующий проект на какой-нибудь старой (!) технологии. Как следствие мегамозг на таком проекте чувствует себе неудовлетворённым и в итоге увольняется, ибо ему скучно. Мегамозгу плохо, но на самом деле хуже всего работодателю — снова нужно искать нового человека, которого опять надо обучать. Итак рационализаторское предложение такой конторе: давайте не будем выпендриваться, наймём обычных людей, знающих, как держать молоток и умеющих просто им работать. И не надо нанимать лётчика-космонавта и слесаря в одном лице. Будьте проще!


Новый проект. Работодатель нанял мегамозгов. В долгосрочной перспективе имеет кучу геморроя с поддержкой проекта и наймом персонала. В итоге работодатель материться, теряет деньги, снова вынужден набирать мегамозгов за дорого, ибо в этом коде, похожем на густое дерьмо, являющемся дьявольским сплетением самых новых, сложных и никому ненужных технологий, простому среднему программисту разобраться очень тяжело. Нанятые же мегамозги-маньяки увольняются через полгода, потому что не хотят заниматься поддержкой, не хотят править JavaScript и старые юнит-тесты.


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


Это комментарии других людей к моему сообщению. Орфография этих комментариев сохранена с небольшими изменениями.

UPD0 Начали вы очень здорово. Впечатлило. Потому что, стремление работодателя взять человека получше — действительно часто выражается в "найти поумнее, поспособнее и т.д.". Но я совершенно согласен, что человек который может следовать указаниям руководителя, проявляя __РАЗУМНУЮ ИНИЦИАТИВУ__ и то по большей части в research нежели development, который не гиперамбициозен, и нормально переносит рутину — принесет много больше конечной пользы, нежели философ-мегамозг. Обычно необходимый уровень хорошего исполнителя много ниже — запрашиваемого на собеседовании.
Но мой коментарий нацелен на указание следующих моментов:

1. "Мегамозг — это энтузиаст, который возьмет все и перепишет с использованием новейших технологий". Этот тезис вы использовали многократно. Но согласитесь — вы здесь пали жертвой шаблона. Это не мегамозг — это фанатик. Мегамозг — это человек, понимающий последствия всех принимаемых решений, и адекватно оценивающий требования заказчика. Это человек который способен обобщать и тем самым минимизировать работу. Человек накопивший достаточно опыта для того чтобы не наступать на известные "грабли". В общем, определение "мегамозга" — в вашей статье — очень слабое место. Потому что вы хотели разрушить одно заблуждение оперируя другим.

(Но нельзя не ответить, что люди строящие проектные команды иногда сами не достаточно профессиональны)

2. Over-qualification. Это то, что многие наниматели не берут в расчет. И это как раз та причина, которая толкает заскучавшего человека разнообразить свой рабочий день, переписывая "велосипед" на новый лад.
http://rsdn.ru/forum/message/3120519.1.aspx

UPD1 Полностью согласен! Добавлю свой коментарий.

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

1) 80% тасков "новонанятым" программерам — support или bug fix старого (!!!) кода, реализованного с использованием старых технологий. Чаще всего код писался теми, кто уже уволился (или перешел на другой проект) + код этот довольно посредственного качества, хотя бывают исплючения.
2) В 95% случаях никаких мега-математических способностпей, знаний алгоритмов соритровок и умения рещать задачи о Фудзяме ВООБЩЕ не требуется для выполнения этих тасков. А требуется вот что: разбираться в технологии, которая использовалась для реализации фичи (например ASP.Net 3.5, WinForms или PHP и т.д.и т.п.) и разбираться в ТЗ и бизнес-логике приложения. Для этого не нужен мегамозг. Нужен адекватный человек, который способен за конечное время разобраться в чужом коде, что-то дописать, что-то поправить и в итоге пофиксить ошибку, не сделав при этом новых багов.
3) "Обычный" программер, получив таск начнет его выполнять, особо не задумываясь ни над чем. Мегамоск же придумает массу "оптимизаций" кода, процесса разработки, предложит сделать полный рефакторинг, переписать код с использованием 145 паттернов, разбить архитектуру на 25 уровней и т.п. Мегамосгу скучно просто фиксить баг. Он выше этого. Если ему вовремя не дать по рукам, а позволить сделать хотя бы 10% от того, что он предложит, проект может уже и не выплыть.

Вернемся к собеседованиям. Почему-то самые адекватные люди оказывались в тех конторах, где собеседования были без "домашних заданий", без написаний на бумажке алгоритма сортировки массива, без тестов на время и без прочей ерунды. И наоборот — самая ужасная контора была та, где с порога тебя садят за 2 сложных теста (C# и OOP), потом требуют быстро решить 2 математических задачки — написать на бумажке код программы, решающей их, а потом идет своеобразный "допрос с пристрастием"... Да, они найдут себе мегамозгов таким макаром, отпугнут "средних" программеров. Вопрос — стоит ли оно того? Я, кстати, прошёл все тесты, но выбрал другую контору тогда — очень рад этому сейчас.

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