Данный топик написан мной по результатам общения с представителями IT компаний, которые, заинтересовавшись циклом статей про студенческие проекты, приехали на Мат-мех в поисках людей, которых можно было бы нанять к себе в компанию. В результате найм несколько не удался, поскольку по словам нанимателей “брать на работу программистов из студенческих проектов можно только по географическому признаку”. Похоже проблема подбора квалифицированных кадров существует и стоит довольно остро. Я попытался раскрыть свои мысли по поводу того, где брать программистов или как их выращивать.
Проблема
В статье Cтрауструпа, перевод которой был на хабре, старина Бьерн описывает проблему IT образования, ориентируясь на западное образование. Она заключается в разрыве между академическим образованием (то, что называется computer science) и обучением специалистов для нужд IT индустрии
Кратко по пунктам:
- Во время обучения студенты редко пишут задания в которых более 100-1000 строк кода, хотя современные программы содержат десятки, сотни тысяч и миллионы строчек кода
- Студенты пишут индивидуальные задания, хотя современная индустрия требует работы в команде
- Профессора, которые обучают студентов, сами не пишут код и даже гордятся этим
- Алгоритмы и структуры данных, которые даются в курсе, оторваны от реальных задач, и студенты попросту не знают как их применить
- Ну и наконец computer science настолько широка, что невозможно представить себе специалиста, который одинаково хорошо пишет и веб-приложения для социальных сетей, и встроенные системы для авионики. Есть очень большой спектр тем, в которых необходимо разрабатывать программы, и в программисту нужно погружение в специфическую тематику
Собственно, соглашусь со всеми утверждениями. Могу привести пример, который произошел с моим студентом в эту сессию. Один студент выполнил работу, его код использовался и был востребован, но преподаватель заявил, что это совсем не тянет на курсовую и как пример хорошей курсовой работы привел некий обзор технологий, где кода писать вообще не нужно было ©.
Страуструп в своей статье предлагает решение, заключающееся в сертификации специалистов. Возможно это поможет делу, но конкретно в нашей стране это может вылиться в очередной ЕГЭ :). Сам Страуструп сравнивает программистов с врачами. Действительно, почему врача, который не набрался опыта в интернатуре, никто не допустит до операции, а программисту, который пишет программу, отвечающую за какую-то часть этой же операции, можно писать код, только лишь прослушав лекции, выполнив пару лабораторок и написав дипломную работу, пусть и теоретическую.
Решение
На мой взгляд, при обучении программированию должен использоваться тот же принцип, что и при разработке: "пишем код!" То есть программистом не рождаются, им становят, и для этого нужно написать не одну тысячу строк кода.
Но возникает вопрос, где же студенты могут набраться практики? Причем практика нужна именно в реальной индустрии. Для врачей это интернатура, а для программистов это…
Студенческие проекты
В действительности ситуация не так уж плоха, как я ее только что описал.
Многие студенты идут стажироваться в IT компании, например, у нас на кафедре системного программирования трудно найти студента, который не работает (стажируется) на четвертом курсе. IT индустрия явно растет и, столкнувшись с проблемой нехватки кадров, стала предъявлять собственные требования к учебному процессу. Причем тут нужно отметить, что многие директора и менеджеры компаний сами стали преподавать в вузах (пусть даже из своих сугубо меркантильных интересов) и направлять туда для преподавания инженеров своих компаний. Профессионалы из IT отрасли не только стали набирать студентов на стажировку в свои компании, но и задумались о более глобальной задаче, — собственно подготовке IT специалиста. Ведь кому как не им знать, что же они хотят от студентов.
Одна из подобных попыток — это студенческие проекты, ссылка на сиспроговские проекты вот. А вот ссылки на проекты из “ВолгГТУ”. Тенденция, как говорится, налицо.
Это замечательно, что появляются подобные практики и заинтересованные в них люди. Но у данного подхода есть и недостатки. Например, как один из больших недостатков хотелось бы отметить, что большинство подобных проектов рассчитаны на один академический год. Таким образом, даже состоявшиеся (реализованные) проекты не успевают протестироваться на реальных пользователях, а следовательно цикл жизни проекта не полный. Другой большой недостаток в том, что подобный метод подразумевает географическую привязку к ВУЗу и руководителям проекта.
Opensource проекты
Немного другим подходом является привлечение студентов в проекты с открытым кодом. Этим, например, славится Google со своим Google summer of code. Да и другие крупные западные IT компании тоже не отстают. На Мат-мех недавно приезжал Марк Митчелл — директор Mentor Graphics, отвечающий за работу с проектами с открытым кодом, в прошлом активный контрибьютор в GCC.
Безусловным преимуществом подобного подхода является то, что студенты участвуют в сложном реально используемом проекте со своим процессом разработки, имеющимся кодом, стилем кодирования, документацией, багами и тараканами. К тому же, поскольку код проекта открыт, будущий работодатель всегда сможет оценить вклад в него конкретного студента.
Подобных проектов достаточно много, можно выбирать на любой вкус и практически в любой тематике.
В качестве доказательства приведу статистику из нашего проекта. Возьмем лишь одну метрику, которая является очень примитивной и не полностью отражает качество разработчика, а именно количество строчек кода, измененное им. Вот аккаунт на ohloh.net одного студента 4 курса AntonKozlov. Видно, что у него достаточно опыта разработке на языке C, ведь он изменил больше 30 000 строчек кода. И хотя это и наш самый активный студент, но у остальных тоже вполне набирается по 10 000, причем это не отдельные лабораторки, а сложный составной проект, в котором участвует довольно много разработчиков.
Таким образом, по моему мнению, хороший студент в ходе обучения должен поучаствовать в каком либо проекте с открытым кодом (а лучше нескольких), где он и может набраться опыта разработки промышленных систем с соотвествующей тематикой.
Причем даже на русскоязычной территории довольно много проектов с открытым кодом различной направленности. Вот, например, недавний обзор открытых месседжеров. Стоит упомянуть открытый клиент direct connect EiskaltDC++, который разрабатывается в том числе и в студгородке Петергофа, рядом с тем самым Мат-мех-ом. По словам статьи один из главных разработчиков PostgreeSQL в России — Олег Бартунов — «по совместительству» астроном и сотрудник ГАИШ МГУ.
Думаю, что это не единственные примеры. И в идеале университеты и IT компании должны способствовать данному движению. На западе именно в университетской среде зарождалось движение opensource, а компании с успехом используют достижения открытого кода.
Заключение
Итак, на вопрос “где взять программиста” я бы ответил: “поискать в проектах с открытым кодом”. Этим, кстати, активно пользуется тот же Google, он который нашкл пару аккаунтов с сайта ohloh.net участников нашего проекта. Эти ребята заинтересовали крупную компанию своим опытом в открытых проектах. На вопрос же “как вырастить программиста” я бы сказал, что компаниям нужно активнее участвовать в тематических проектах с открытым кодом, может быть организуя совместные проекты с университетами и другими компаниями и вовлекая туда студентов.
Ну а разработчики, которые набрались опыта, наверное уж будут знать отличия абстрактного класса от интерфейса:)
Автор: abondarev