Школа программирования вместо службы персонала

21 мая 2010 года

Данная статья представляет собой текстовый вариант выступления на Международном Форуме по инженерии программного обеспечения SEF-2010, прошедшем в Минске 19-20 мая 2010 года. Доклад готовился коллективом из 3-х единомышленников, поэтому в ходе выступления звучит местоимение "мы".

Предисловие

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

Сколько нам нужно программистов?

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

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

Причина дефицита программистов заключается в том, что ИТ-отрасль - это единственная отрасль, которая работает не только на другие отрасли, но и сама на себя, т.е. все самые последние достижения моментально применяются для создания новых еще более совершенных информационных технологий и компьютеров. Эта отрасль постоянно создает новые рынки сбыта: еще вчера никто понятия не имел о социальных сетях, а сегодня социальная сеть Facebook генерирует в интернете больший трафик, чем поисковик Google. Развитие отрасли ИТ идет экспоненциальными темпами. Главный ресурс этой отрасли - программисты. Их очень мало.

Радикально увеличить количество выпускаемых из вузов программистов мы не можем в силу объективных причин. Это и объективная демографическая ситуация, и производственные мощности вузов, и ограниченное количество преподавателей. Как ни крути, количественно мы не можем конкурировать на рынке ИТ с Индией и Китаем.

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

Какие нам нужны программисты?

Именно высококвалифицированные программисты!

Высококвалифицированные программисты обладают намного более высокой производительностью труда, чем программисты низкой и средней квалификации. Порой она отличается в разы, иногда на порядок.

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

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

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

Высококвалифицированные программисты нужны всегда и их всегда не хватает, даже во времена кризисов. Мы знаем людей, к которым в разгар кризиса обращались с предложением о работе в такой форме "нам нужны дорогие программисты, ты подумаешь?". Недавно глава EPAM Systems говорил в интервью журналисту TUT.BY о том, что скоро закончится эпоха ценовой конкуренции и начнется конкуренция знаний и умений. Тогда высококвалифицированные программисты будут еще более востребованы, а ситуация для аутсорсинговых ИТ-компаний станет еще сложнее.

Итак, нам нужны именно высококвалифицированные программисты. Именно они, за счет своих уникальных качеств, способны решать задачи, стоящие перед ИТ-компаниями. Однако мы должны отдавать себе отчет в том, что высококвалифицированные программисты всегда малочисленны (как и высококлассные специалисты других профессий). Из 15-летнего опыта преподавания базовых специальных дисциплин на кафедре ПОИТ в БГУИР мы знаем, что на потоке из 150 человек лишь приблизительно 5 человек потенциально способны стать системными архитекторами и генеральными конструкторами, вокруг которых можно строить коллективы и точки роста. Именно за эти "крупицы золота" и ведут охоту службы персонала ИТ-компаний. Посмотрим, как осуществляется поиск программистов и что он дает.

Поиск программистов

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

Существует более надежный способ заполучить программиста - обратиться к сотрудникам своей компании и предложить материальное вознаграждение за хороших программистов. Известно, что хороший программист ценит другого хорошего программиста, поэтому это хорошая тактика. Однако мы зададим вам такой вопрос: часто ли сотрудники приводят тех, кто сильнее их самих? Приведем два примера из собственной жизни. Высказывание одного руководителя: "возьмешь себе в помощь троечника - он завалит тебе работу, возьмешь отличника - он откроет свое направление, лучше взять хорошиста - он исправно будет делать тебе работу". Высказывание другого руководителя: "только, пожалуйста, не бойся брать тех, кто сильнее тебя". Разные точки зрения, но обе свидетельствуют о том, что человек не всегда готов привести в компанию конкурента.

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

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

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

Вместо поиска программистов - подготовка и отбор в учебных заведениях

Подготовка и отбор программистов в учебных заведениях - самая верная стратегия для решения кадрового вопроса, расчитанная на долгосрочную перспективу. Она требует от ИТ-компаний некоторых инвестиций, но очень хорошо окупается. ИТ-компаниям выгодно делегировать своих сотрудников для проведения занятий со студентами. Если это лекционные занятия, то они занимают не много рабочего времени сотрудника, ведь он читает лекции по тем предметам, в которых он является экспертом. Авторы доклада имеют положительный опыт проведения таких занятий. Чтение лекций по одному-двум предметам занимает приблизительно 3-4 часа в неделю. К этому времени добавляются еще экзамены, на которые уходит приблизительно 3-4 полных рабочих дня в одном семестре. Это вполне посильная дополнительная нагрузка даже при высокой загрузке на основной работе. Что за это получает ИТ-компания? Доступ к "месторождению" программистов. Наше "месторождение" называется кафедра Программного обеспечения информационных технологий Белорусского государственного университета информатики и радиоэлектроники. Разрабатываем его уже более 15-ти лет. Собираем "крупицы золота" и приносим в те компании, в которых работаем сами. Чем больше преподаем, тем больше убеждаемся в том, что подготовка и отбор программистов должны осуществляться с самого раннего возраста, как подготовка чемпионов в спорте. Они должны быть возведены в систему и со временем превратиться в отечественную школу программирования.

Школа программирования

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

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

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

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

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

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

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

Программирование - вторая грамотность

Школа программирования составит основу конкурентного преимущества белорусской отрасли ИТ на мировом рынке. Чтобы создать школу программирования, нам следует поставить амбициозную задачу обеспечения стопроцентной программистской грамотности населения Республики Беларусь в ближайшие 10-15 лет, и сделать это частью национальной идеи.

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

При стопроцентной программистской грамотности инновации не заставят себя ждать, причем в самых разных отраслях: от медицины и электроники до машиностроения, нефтепереработки и сельского хозяйства.

Впервые вопрос о том, что программирование является второй грамотностью, поставил академик Андрей Петрович Ершов в 1981 году на проходившей в Швейцарии 3-й всемирной конференции по применению ЭВМ в обучении. Его идея опередила время на 30 лет - лишь сейчас созрели условия для воплощения ее в жизнь. Мы верим, что, обладая всего лишь 10-миллионным населением, Республика Беларусь способна завоевать мировой рынок ИТ не числом, а умением.

С чего начать?

Как и в любом деле, нужно с чего-то начать. Мы видим следующие конкретные шаги:

- Создать инструментальные средства для обучения основам программирования и предоставить их в свободный доступ через интернет.

- Создать учебник по основам программирования для средних школ и предоставить его в свободный доступ через интернет.

- Создать цикл телепередач "Азбука программирования". Он должен быть построен таким образом, чтобы любой человек со средним образованием смог понять суть программирования и был способен обсуждать программы с профессиональными программистами.

- Задействовать налоговый инструмент для привлечения людей и ИТ-компаний к преподаванию программирования. Этот шаг необходим для того, чтобы ИТ-компаниям было выгодно привлекать в свои коллективы профессиональных преподавателей, и чтобы профессиональным программистам, работающим в ИТ-компаниях, было выгодно преподавать в учебных заведениях.

Заключение

Мы верим, что отечественная школа программирования - достойная и достижимая цель.

Школа программирования решит кадровую проблему ИТ-компаний и обеспечит им конкурентное преимущество на глобальном рынке ИТ-продуктов и услуг.

Школа программирования обеспечит все отрасли экономики специалистами с новым очень востребованным качеством и обеспечит устойчивость этих отраслей в следующую научно-техническую революцию.

Д.А. Сурков, К.А. Сурков, Ю.М. Четырько.

"Программирование - вторая грамотность"

15 марта 2010 года

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

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

Следует пойти дальше: начинать обучение программированию в школе одновременно с математикой; организовать телевизионные передачи, посвященные программированию; популяризировать программирование среди детей, молодежи и взрослых, чтобы снять в обществе психологический барьер перед кажущейся сложностью программирования. Следует понять, что программирование - такая же базовая дисциплина, как математика; по словам академика А.П. Ершова "программирование - вторая грамотность" [1]. Программистскую грамотность нельзя сводить к компьютерной грамотности. Компьютерная грамотность стимулирует потребление зарубежных программных продуктов. Программистская грамотность стимулирует производство собственных программных продуктов.

В силу уникально высокой концентрации программистов, Беларусь способна занять лидирующие позиции в мире по производству программного обеспечения. Для этого необходимо сделать стопроцентную программистскую грамотность национальной идеей.

Д.А. Сурков, К.А. Сурков, Ю.М. Четырько.

Ссылки:
1. А.П. Ершов. Программирование - вторая грамотность, 1981. http://ershov.iis.nsk.su/russian/second_literacy/article.html