Статья: Подготовка студентов-программистов к профессиональной деятельности через практические занятия

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Размещено на Аllbest.ru

Подготовка студентов-программистов к профессиональной деятельности через практические занятия

преподавание язык программирование

Preparation of students-programmers to professional activities through workshops

Подготовка студента в качестве эксперта-одиночки

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

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

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

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

Для дисциплин, больше приближенных к практике (например, алгоритмы или структуры данных), подход к практическим занятиям немного изменяется. Абстрактное задание по такой дисциплине сводится к воспроизведению материалов с лекций и потому имеет низкую ценность. Вместо этого подбираются задачи из других дисциплин (математики, физики, биологии, химии, экономики...), для решения которых необходимо применять новоприобретенные знания. Это позволяет выстроить связь теории с реальной жизни и учит студента выделять в задаче её математическую модель. Затем полученная модель декомпозируется на совокупность примитивов, для которых в рамках теории уже есть оптимальные решения. Следующий шаг -- реализовать решение для каждого из примитивов и объединить их в единую программу, которая решает поставленную задачу. Решение реализуется обычно на алгоритмическом языке или на одном из преподаваемых языков, традиционно это один из языков Pascal, Delphi, C/C++, реже - Java.

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

Сторонники подхода подошли к проблеме образования студентов так же, как сами и учат: выделили наиболее важные умения специалиста, наиболее важные знания и составили план по их достижению. Это очень действенный и эффективный подход, который выполняет свою задачу: подготовку высококвалифицированных кадров для научных и коммерческих предприятий. Большая часть именитых и влиятельных университетов подготавливают специалистов именно таким способом, успешные студенты MIT, Stanford, МФТИ, МГТУ без труда находят работу в IT-компаниях с мировым именем.

Новаторский подход: актуальные знания - залог успеха

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

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

Если посмотреть на проблему поиска новых кадров с точки зрения бизнеса, то получается опять же не радостная картина. Программисты нужны очень разные, информационные технологии -- это не одна сфера деятельности, а целый набор. Разработка приложений для персональных компьютеров кардинально отличается от разработки web-сайтов и оба этих направления имеют мало общего с разработкой встраиваемого программного обеспечения. Да, в основе своей это программирование и общие подходы к разработке - одни и те же, но набор актуальных знаний различается настолько, что на рынке труда есть несколько типов профессий и работодатели ищут программистов только с определёнными навыками, программистов нужного _типа_. Существует серьёзное экономическое обоснование такого деления программистов. Это стоимость обучения нового сотрудника. Прежде чем новый сотрудник начнёт приносить пользу, а значит и деньги работодателю, проходит от двух до четырёх месяцев, за это время сотрудник знакомится с бизнес-процессами, с проектом, его целями, задачами и способами их достижения. Все это время сотрудник получает зарплату, тратит время обучающих его коллег, но не приносит пользы. Если программист не обладает набором актуальных знаний, которые требуются для выполнения подобной работы, то время обучения может увеличиться в несколько раз, а качество последующей работы будет ниже, чем у более опытных конкурентов.

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

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

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

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

Подготовка студента как члена коллектива

Оба подхода имеют свои плюсы. «Фундаменталисты» обеспечивают лучшую подготовку талантливым студентам, а «новаторы» в лучше удовлетворяют потребности рынка. Минусы у подходов тоже есть, притом существенные. Я являюсь сторонником фундаментального подхода, но считаю, что нельзя готовить студентов в отрыве от анализа требований рынка. «Новаторский» подход, на мой взгляд, ставит во главу угла неверный приоритет. Нельзя строить обучение на нужных здесь и сейчас технологиях. Пусть даже мы можем предсказать развитие рынка на ближайшие 10 лет. Тогда студенты получат великолепное преимущество, первые пять лет они будут обладать знаниями, которые _нужны_ им и их работодателю.

Эта выгода иллюзорна. Как много компаний есть у вас в городе, готовых принять 20-30 новичков единовременно? А 10? Даже крупные компании не набирают столько специалистов одинаковой подготовки. И давайте не будем строить иллюзий, у крупной компании есть средства, чтобы привезти себе несколько специалистов из другого города, по-опытнее. Такие всегда найдутся. Значит нужно консолидировать требования от нескольких компаний при подготовке одной группы студентов. Либо надо делать группы меньше, либо все равно получаем специалистов, часть знаний которых будет не актуальна. Добавляем сюда малопопулярные вакансии, риски того, что студент захочет поменять сферу деятельности (у студентов нет чёткого плана на следующие 10 лет жизни). И получаем, что красивая теория с подготовкой узких специалистов проваливается.

При всем при этом, обучение студента после приёма на работу -- это стресс и для студента, и для работодателя, в этом «новаторы» правы. Это значит, что нужно проанализировать то, чему работодатель доучивает студента. Главное, с чем знакомится студент, -- профессиональная культура, нечто вроде техники безопасности: вечно забывают проинструктировать, не везде соблюдают, а ошибки заметны не сразу, но всплывают неожиданно и больно.

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

Студенты склонны повторять следующие ошибки:

«У меня все провильно, это клиенты не так пользуются!». Студент должен понимать, что балом правит клиент, он несёт деньги и он прав. Если программа была создана, следуя по другой логике, это стоит обсудить с ментором, чтобы понять причины и исправить поведение программы.

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

«И так сойдёт!». Это тоже заблуждение. Код пишется «в кредит»: сколько бы времени не ушло бы на написание кода, на его поддержку уйдёт в несколько раз больше времени. Лучше сразу потратить время и сделать правильно, чем усложнять поддержку. в будущем.

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

Отсутствие качественной документации к коду.

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

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

Методика обучения студентов-программистов

Источник: https://otherreferats.allbest.ru/download/1135487/