Обучение IT-специалистов в университете

13 февраля 2012 г.

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

Цель

Для меня, как для преподавателя, очень важно понять набор навыков, которыми должен будет обладать студент. Тогда я смогу понять, добился я своей цели или нет.

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

  • Понимание алгоритмизации и работы автоматов
  • Понимание ООП (желательно понимание других парадигм)
  • Знание как минимум двух языков: строго типизированного и динамического (желательно добавить функциональный)
  • Понимание шаблонов проектирования
  • Понимание принципов проектирования
  • Понимание разных процессов разработки
  • Умение управлять рисками
  • Умение организовывать свое время
  • Умение быть частью команды/процесса
  • Умение доводить начатую задачу до конца
  • Умение формулировать свои мысли письменно и устно
  • Умение самостоятельно искать информацию и саморазвиваться
  • Навыки разработки, как минимум: веб-приложений и десктоп (желательно мобильные устройства, веб-сервисы и т.д.)

Другими словами студент должен быть готов влиться в реальную команду разработчиков, которые производят Enterprise-решения.

Как этого добиться?

Мне дают 4-й курс на два семестра. Обучение я разбиваю на два логических шага.

Первый семестр - каждый сам за себя

Каждый студент придумывает себе проект и занимается его самостоятельной разработкой. Проект должен быть ни большой, ни маленький. Подойдет аналог сайта по сокращению ссылок или несложный антивирус. Проект разрабатывается на .NET Framework, поэтому в начале семестра есть вводные лекции по .NET/C#.

Разработка проекта у среднего студента занимает около семестра. Моя задача, как преподавателя, в период разработки помочь студенту закончить проект (это очень важно) и показать основы рефакторинга, применение шаблонов для UI. На первом шаге для понимания процесса работы с реальными задачами не нужны VCS, CI, Big Upfront Desing с помощью UML и т.п. накрутки, не нужны знания про процесс разработки Waterfall/RUP/Agile.

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

На этом же шаге я объясняю ООП с примерами из проектов студентов. Показываю на ошибки и показываю к чему эти ошибки могут привести. Таким образом, закрепляя теорию ООП на практических примерах.

Некоторые студенты уже на этом этапе начинают интересоваться модульными тестами, ORM, берут хорошие книжки. К тестам подвести совсем не сложно. Когда в очередной раз я прошу поменять что-либо в проекте, студент меняет и сидит в дебаге, вопрос "А как повысить надежности системы при внесении изменений?" возникает сам собой. И тут я могу показать что такое тесты и что значить рефакторинг.

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

Второй семестр - командная разработка

Сначала проходит сбор идей, которые можно реализовать. Каждый пишет 5-6 идей, после этого "продает" свои идеи другим студентам. Обычно остается по одной идее на человека. Дальше голосуем на одну, которую будет реализовывать во время семестра. Один из студентов становится менеджером проекта. Допуск до экзамена для PM'а - реализованная командой идея и наличие списка рисков, их анализ. Для команды - вклад в общий проект (легко посмотреть по коммитам), покрытие тестами от 50%, правильная архитектура.

На этом этапе для самих студентов становятся актуальными практики управления проектами, настройка CI, VCS, Bug Tracker и т.п. Опять же вопросы возникаю сами собой: "А как мы будем одновременно писать код?". На что у меня есть готовый ответ в виде Google Code и Hg.

Содержание и порядок подачи тем очень похож на программу в SkillTrek.

Кроме того, много внимания я уделяю отношению к проекту. Обязательно рассказываю про позицию Жертвы и позицию Автора, как уже делал на AgileDays. После такой лекции уже никто не пытается применить фразы типа "А я весь семестр с Hg не мог разобраться, так что извините :)".

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

Второй семестр обычно вызывает бурю эмоций. Студентам достаточно тяжело и необычно работать в команде. Этот процесс приближает их к реальной разработке, т.к. нужно взаимодействовать друг с другом, а раньше они отвечали только за себя. Был случай, когда девочка PM со слезами кричала, что ее никто не слушает и никто не хочет делать проект. В результате проект сделали, но история осталась :)

Заканчивается этот семестр экзаменом. Экзамен проходит в устной форме, иногда с вопросами по написанному коду.

Результат

Для меня результатом являются готовые проекты студентов и их положительные отзывы. Я вижу, как в течение 2х семестров они улучшают свои навыки разработки ПО. Заочники приходят ко мне и делятся новостями, о том как они на своей работе внедряют то, что изучили.

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

22 комментария:

  1. Если студент не идет ни на какие контакты с другими студентами, он может получить "отлично" по предмету?

    ОтветитьУдалить
  2. Таких я еще не видел. Когда столкнусь, смогу ответить :)

    ОтветитьУдалить
  3. Этот курс дал реальные знания, т.к. мы делали не лабы  с пошаговыми инструкциями, а сами с нуля разрабатывали проект, что позволило реально получить опыт) Да и работа в команде была тем еще испытанием на крепость духа)) В общем было классно!

    ОтветитьУдалить
  4. Света, это не про тебя там история в конце?;)

    ОтветитьУдалить
  5. Нет, я серьезно спросил. Потому что я с такими был знаком.

    ОтветитьУдалить
  6. Я тоже серьезно, таких еще не было случаев. Если столкнусь, то буду искать выход.

    ОтветитьУдалить
  7. Очень интересный подход!
    Только я не совсем понял, для чего PM'у составлять список рисков к проекту, который уже реализован. По сути управление рисками - это инструмент, помогающий в процессе (!) работы над проектом.Если уж выходить на защиту с рисками, то тогда "рассказывать историю" управления ими - показывать динамику. А так, не сложится ли у студентов впечатление, что список рисков - это некое "инородное тело", составленное "для галочки"?

    ОтветитьУдалить
  8. И еще вопрос: какой объем часов отводится на этот курс?
    Потому как, вижу, он достаточно объемный - материала много, причем требуется много практики.

    Я тоже вел подобный курс в вузе, но всего семестр: 1 лекция + 1 практика в неделю.
    Материал выдавал тот же, но, к сожалению, получилось не так глубоко.

    ОтветитьУдалить
  9. Предполагается, что он его напишет в ходе реализации.

    ОтветитьУдалить
  10. Спасибо за уточнение, я не точно описал. Список составляется до начала реализации проекта. Перед экзаменом я смотрю уже на анализ рисков по итогам проекта.

    ОтветитьУдалить
  11. В моем случае - 3 пары в неделю. Но я очень активно отвечаю на письма и пользуюсь соц. сетями, постоянно слежу на исходным кодом на Google Code. В принципе объем работы в университете достаточный для того, чтобы показать что и как надо делать. Проект предполагает самостоятельность, поэтому 1-2 пары в день было бы избыточно.

    ОтветитьУдалить
  12. Более углубленно материал мы изучали самостоятельно и задавали вопросы Александру либо по почте, либо прямо на парах, и он объяснял дополнительно, что непонятно. К тому же  на зачете и экзамене нужно было отвечать достаточно развернуто с примерами кода, что еще более мотивировало к более глубокому изучению)))) 

    ОтветитьУдалить
  13. Здравствуйте! Хорошая программа и хороший предмет!:) Мы на кафедре эвм(тоже ЮУрГУ) в том семестре тоже прошли такое испытание(мы 3-й курс:) ). Лично мне очень понравилось. Мы объединялись в командах и нам позволялось брать задания от реальных заказчиков, что дало в итоге диффиренцированность в технологиях. Кто то писал на java, кто то на c#, кто то на с++ и были даже на objective-c:). В результате много положительных эмоций и незабываемый опыт от общения с заказчиком и разработке:)
    В качестве обязательных инструментов у нас были кафедральный сервер с subversion и track:)


    P.S. Что посоветуете как специалист в области .Net для начала изучения C#? Какую литературу?:)

    ОтветитьУдалить

  14. эвм(тоже ЮУрГУ) в том семестре тоже прошли такое испытание(мы 3-й курс:)
    Да, я у вас был. Психолог и всё такое :)

    > Что посоветуете как специалист в области .Net для начала изучения C#? Какую литературу? 
    Я бы посоветовал начать с этой http://www.amazon.com/CLR-via-C-Jeffrey-Richter/dp/0735627045/ref=sr_1_1?ie=UTF8&qid=1329362944&sr=8-1 и параллельно полистать http://www.amazon.com/C-Depth-Second-Jon-Skeet/dp/1935182471/ref=sr_1_1?ie=UTF8&qid=1329362933&sr=8-1

    ОтветитьУдалить
  15. В чем заключается: "Понимание принципов проектирования"?

    ОтветитьУдалить
  16. 0) Писать код, который соответствует принципам проектирования
    1) Умение увидеть проблему в коде2) Отрефакторить проблемный код, основываясь на принципах проектирования

    ОтветитьУдалить
  17. Сергей Борисенко18 мая 2012 г. в 04:20

    Черт, я завидую 

    ОтветитьУдалить
  18. Почему Google Code а не github или bitbucket? Они вроде более социальны.

    ОтветитьУдалить
  19. Google Code был для примера. Студенты используют и BitBucket, и GitHub. Тут уже зависит от предпочтений.

    ОтветитьУдалить
  20. Вы охуенный преподаватель! Искренне завидую вашим студентам:)

    ОтветитьУдалить

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...