Данный топик написан мной по результатам общения с представителями 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 в России — Олег Бартунов — «по совместительству» астроном и сотрудник ГАИШ МГУ. Вот статья с описанием opensource проектов к которым можно присоединиться.
Думаю, что это не единственные примеры. И в идеале университеты и IT
компании должны способствовать данному движению. На западе именно в
университетской среде зарождалось движение opensource, а компании с
успехом используют достижения открытого кода.
Заключение
Итак, на вопрос "где взять программиста” я бы ответил: "поискать в
проектах с открытым кодом”. Этим, кстати, активно пользуется тот же
Google, который нашел нескольких участников нашего проекта сайте ohloh.net.
На вопрос же "как вырастить программиста” я бы сказал, что компаниям
нужно активнее участвовать в тематических проектах с открытым кодом,
может быть, организуя совместные проекты с университетами и другими
компаниями и вовлекая туда студентов.
Хорошая статья. Раньше, лет 20 назад, ИТ не так быстро развивались и
можно было неспеша подготовить специалиста под конкретную должность.
Сейчас эта сфера неимоверно разраслась, много всяких узкоспециальных
ответвлений. Учить программистов уже надо сразу на практике. OpenSource
действительно лучший выход.
Согласен, OpenSource наверное самый эффективный способ научиться
программировать. На западе очень распространено участие студенто в
подобных проектах. На их основе они делают дипломы, пишут курсовые. У
нас в ВУЗах будь добр пиши курсовые у тех преподавателей которые есть на
кафедре.
К сожалению зачастую «инновационные» проекты для курсовых и дипломных
проектов — уже изначально рождаются мертвыми. А ведь можно использовать
потенциал.
наверное даже нужно! То есть студенчество, самое время попробовать
себя в разных темах, поисследовать, ведь не нужно сильно заботиться о
зарплате, хлебе насущном и крыше над головой.
Я думаю, что в проекте примут патч оформленный по определенным
правилам. И пусть это будет небольшое количество строк кода, зато
студент научится разбираться в чужом коде, сложных проектах, и так
далее. Я не в коем случае не предлагаю писать говнокод!
Это ж сколько патчей надо отправить, чтобы суммарно набрать N
десятков тысяч строк кода, после которых, по поверьям, происходит
перерождение в Истинного Программиста.
Согласен, метрика в строчках кода не очень удачная. Конкретный пример
был для конкретного проекта, который и был задуман как проект с низким
порогом входа, я в нем обучал себе людей с нужными мне знаниями. Но
приведенный студент работал в проекте три года, и за это время у него
накопился приличный опыт по данной теме. А без этих самых строчек кода,
мне кажется его бы не получилось.
Да и про качество студенческого кода, не вполне согласен. Opensource
проекты должны пополняться энтузиастами, иначе они просто могут умереть.
И в программе GSOC участвуют очень даже требовательные к качеству кода проекты. И все они хотят привлечь студентов в проект, значит польза от этого есть. Более того, существует аналогичная программа для старших школьников.
Ага, я нашему новенькому программисту так и посоветовал: хочешь опыта
— бери Open Source проект и ковыряй, или делай своё. Сейчас тот занялся
разработкой интернет-магазина на основе одного фреймворка. Советовать
допиливать какой-нибудь ZF2 новичку я бы не решился — жаль будет,
хороший фреймворк, и в этом, кстати, проблема — уровень входа в
доработку таких вещей, как популярные фреймворки или те же рельсы
непомерно высок.