Sunday, June 14, 2009

Снова об IT-образовании

Эта заметка является комментарием на заметку Артема Сердюка "Обучение программистов в украинских вузах". К сожалению, она не поместилась там как комментарий из-за размера, поэтому выкладываю ее здесь в полном виде. Заранее прошу прощения у автора за это.

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

Программирование и "промышленная" разработка софта - это, как говорится, две большие разницы. Хороший "промышленный" программист (как и любой другой специалист) - это не только технически подкованный программист, но еще и грамотный, ответственный, умеющий работать в команде работник. У вузов же задача другая - они не конвейерных рабочих готовят для ублажения нашего родного аутсорсового бизнеса (т.е. по принципу ПТУ), а стараются, кроме непосредственно программирования, научить человека еще и другим важным предметам. Да, не все из них понадобятся в жизни. Да, образовательно-техническая база устарела. Да, действительно хороших преподавателей мало. И наконец, да, программистов нужно учить по-другому. Все эти проблемы есть. Но только решение их нужно искать не с точки зрения "а вот нам сейчас нужны PHP-девелоперы, давайте нам их, и побольше", как того требует рынок, и не с точки зрения "забрать студента как можно раньше, пока вуз его окончательно не развратил" а все-таки с точки зрения реформирования наших вузов для того, чтобы на выходе они давали хорошо подкованных CS-специалистов, которые будут:

  1. знать техническую базу: устройство компьютера, микропроцессора, и т.д., понимать, что такое ОС, как работают компьютерные сети, что такое интернет
  2. уметь программировать (язык не важен, важно понимание и алгоритмическое мышление)
  3. знать алгоритмическую базу, структуры данных, базы знаний, основы нейросетей, искусственного интеллекта, и т.д.
  4. понимать, что такое качество кода, ООП, шаблоны проектирования, масштабирование, производительность и т.д.
  5. знать хотя бы по одному языку программирования разных уровней, и те или иные технологии по выбору студента и на том уровне, который он хочет знать
  6. разбираться в базах данных (реляционных, объектных), XML и других форматах и способах хранения данных
  7. понимать весь цикл разработки софта (а не просто уметь писать лабы), иметь представление о методологиях разработки, командной работе, QA
  8. быть немного знакомым с best practices of software development: source controls, unit testing, CI, и др., возможно - BDD, DDD, XP-практиками
  9. наверняка, что-то забыл, впишите сами...

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

Это, конечно, не все. Со стороны вузов еще нужно перенимать опыт коллег (МГУ, MIT, etc.), хотя бы лекции их посмотреть, отправлять преподавателей на стажировку. Заинтересовывать студентов действительно интересными научными разработками. Брать заказы и гранты у крупных госорганизаций и не только у них. Обновить подходы к обучению программированию, продумать и улучшить программу. Дать студентам бОльшую гибкость в выборе "специальных" предметов: один может хотеть изучать веб-программирование, второй - мобильные системы, а третий - робототехнику, одному нравится LAMP, второму - .NET, третьему - Ruby on Rails. Постоянно держать связь с IT-индустрией нашей страны.

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

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

7 comments:

  1. "...если только там не сидят действительно любящие свое дело люди" - с этим 2 проблемы.
    1. Такие люди обычно всё-же хотят самореализоваться профессионально, а с этим в наших вузах проблема (нужно участие в реальных разработках, проектах и т.д.).
    2. Наша "любовь" обычно на.. никому не нужна, т.к. большинство в вузах всё-же не наукой занимаются и обучением, а просто зарабатывают на жизнь или "кормятся" с богатеньких родителей студентов-контрактников.

    ReplyDelete
  2. Я думаю, что даже не две проблемы :)

    1. На мой взгляд (поправьте меня, господа преподаватели), профессиональная самореализация в вузе может быть следующая:
    а) научная работа
    б) преподавательская работа
    в) технический рост
    Думаю, у каждого человека есть свои приоритеты и то, чем ему нравится заниматься в первую очередь. И не все любят программировать, как показывает мой опыт обучения, так что до реальных проектов там далеко :) Но даже без них можно найти другие способы самореализации. Другой вопрос, что при этом сильно падает уровень предмета, да и горизонт стремительно сокращается, но это уже собственный выбор.

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

    ReplyDelete
  3. 1. - Всё верно
    2. Такие либо:
    а. Долго в ВУЗ-е не задерживаются;
    либо
    б. Имеют недостаточно высокий уровень изначально;
    либо
    с. Со временем теряют квалификацию;
    либо
    d. Оторваны от объективной реальности.
    По крайней мере в нашем ВУЗ-е оно так, возможно в других есть исключения

    ReplyDelete
  4. Да, Саша, заметка по делу, мне кажется Артём слишком уж грустно описал ситуацию в образовании. Эта система складывалась годами, и я думаю она не "отдаст концы" ещё долго :) Но дело в том, что институт не может дать всего, хотя бы потому что в нашей отрасли "чтобы стоять на месте, нужно бежать, чтобы двигаться вперёд, нужно бежать в 2 раза быстрее", а институт, как структура довольно большая и громоздкая, не может бежать настолько быстро. Но то, что он может дать, то он даёт - базу. И это очень многое. Ведь те кто действительно "учился" (я сужу по своему выпуску, а это было не так давно) нашли себя в IT. Поэтому я считаю, что базу вуз будет давать всегда, всегда найдутся предодаватели старой закалки, которые изложат теорию алгоритмов и т.д., всегда найдутся преподаватели, которым нравится преподавать, общаться с аудиторией. Всё же, по поводу уровня преподавания есть одно замечание, на мой взгляд, очень сильно демотивирует остутствие реальных примеров из практики. В моём вузе (ХНУРЭ) были преподаватели, практикующие в фирмах, и способные объяснить, не только как нужно сделать, а и зачем это нужно. Наибольшим минусом нашей системы, я считаю как раз недостаточное кол-во или отсутствие преподавателей, имеющих реальный опыт работы, которые бы могли не только научить студента, но и, что более важно, заитересовать его, и показать возможности, которые перед ним открываются. Здесь, конечно, помошь крупных компаний и их специалистов была бы очень кстати.

    ReplyDelete
  5. Как пишет и проповедует Макконнелл, необходимо вводить сертификацию и лицензирование разработчиков ПО. Должна появится профессия, инженер ПО. А у нас как - программисты в основном занимаются самообразованием с нуля. Университетские знания практически не прикладываются. Одна польза от универа - учат учится. Да дело в том что надо не просто уметь учится, так еще и знать что учить.

    Так что пока у нас не появится "настоящей" профессии - университеты не будут готовить профессиональные кадры.

    А компаниям можно посоветовать идти путем которым идет construx sowtware, готовить кадры самим.

    ReplyDelete
  6. Да вы все правильно говорите, при приеме на роботу смотрят на опыт роботы и на сертификаты!Но вы все говорите и ...,но не более. Мне 22, по професии учитель физики и информатики, комп увидел в 19 в первый раз.Но, при этом работаю програмистом(но скорее сис-админом),все что знаю выучил сам.
    База вуза "0", что говорить если студенты находят ошыбки преподавателей.
    Жаль что мало людей которые достигли чегото и помогают другим(учят делятца опытом).

    ReplyDelete
  7. Anonymous, я понимаю, что вы вряд ли еще раз зайдете на этот блог, чтобы прочитать мой ответ с вопросами, но все же мало ли...

    Почему вы считаете, что люди, которые здесь что-то писали, в том числе и я, никому не помогают и никого не учат? Люди, которые ведут свои технические блоги, уже как минимум делятся своим опытом с другими. Не говоря уже об участии на различных технических форумах, Q/A-сайтах, в конце-концов, простой помощи другу или сотруднику...

    Теперь второе: к сожалению, я не знаю, из какого вы города и тем более страны, но в Харькове (да думаю, и по СНГ в целом по большей части) на сертификаты не смотрят. Из технических требований смотрят на: а) текущие знания, б) опыт работы, в) потенциал человека. Причем, если у вас нет сильных а) и б), но есть в), то вас всегда возьмут на должность младшего программиста (junior developer) с оговоркой, что junior нужен проекту/фирме.

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

    ReplyDelete