Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную информацию об использовании файлов cookies можно найти здесь, наши правила обработки персональных данных – здесь. Продолжая пользоваться сайтом, вы подтверждаете, что были проинформированы об использовании файлов cookies сайтом НИУ ВШЭ и согласны с нашими правилами обработки персональных данных. Вы можете отключить файлы cookies в настройках Вашего браузера.
Адрес: 109028, г. Москва, Покровский бульвар, д. 11
Телефон: +7(495) 772-95-90 *28240
Департамент программной инженерии был создан в 2014 году на базе отделения программной инженерии. В департаменте ведутся исследования по различным современным научным направлениям, в число которых входят: анализ и моделирование бизнес процессов, математическое моделирование, машинное обучение и искусственный интеллект, нечеткая логика, процессно-ориентированные информационные системы.
Ахмедов Э., Фурманов К. К.
Экономика и математические методы. 2025. Т. 61. № 1. С. 109-117.
Maksimenkova O. V., Lebedev S., Pozdnyakov D.
In bk.: Futureproofing Engineering Education for Global Responsibility. Springer, 2025. P. 116-125.
Ryabtsev D., Vasilyev Boris, Shershakov S.
Computer Science ::Computer Vision and Pattern Recognition. 2501.14689. arXiv, 2025
При разработке программного обеспечения важно не только владеть техническими навыками, но и понимать весь процесс создания продукта от идеи до реализации. Именно этому учит курс «Конструирование программного обеспечения», разработанный преподавателями департамента программной инженерии ФКН НИУ ВШЭ. Курс интересен не только содержанием, но и методологией, сочетающей индуктивный и дедуктивный подходы, что позволяет студентам одновременно и увидеть картину целиком, и углубиться в детали. В текущем учебном году курс реализуется в одноименной учебной дисциплине на бакалаврской образовательной программе ФКН "Программная инженерия".
«Показать разработку программного обеспечения с высоты птичьего полета»
Цель, которую мы поставили перед собой, — показать студентам этапы разработки программного обеспечения как единого и цельного процесса, затрагивающего все от проектирования и программирования до тестирования и развертывания. Это оказалось невероятно сложно!
Основное противоречие, с которым мы столкнулись при создании курса, заключалось в большом объеме знаний, который необходимо передать за короткий срок. С одной стороны, нельзя было исключать этапы конструирования программного обеспечения, иначе картина была бы неполной. С другой, мы не могли позволить себе погружаться в изучение каждого из этапов больше, чем того требует решаемая задача. Иными словами, нужно показать разработку программного обеспечения с высоты птичьего полета, чтобы студенты увидели картину целиком, и уже на старших курсах погружались в те или иные области с пониманием всего процесса.
Сейчас, когда мы прошли со студентами половину курса, можно говорить, что наша задумка оказалась работоспособной. У нас получается обучать студентов промышленной разработке «на минималках», показывая им весь процесс поэтапно. Также мы показываем им точки дальнейшего профессионального роста, что не менее важно, так как это позволяет мотивировать студентов на дальнейшее обучение.
Сергей Виденин
Доцент департамента программной инженерии ФКН
Разработку ПО как цельный процесс нельзя показать без большого количества фундаментальных знаний. Выбор того самого «необходимого и достаточного» набора тем заставил создателей курса задуматься над ведущим методом обучения. Рассматривались разные варианты, в основе которых лежали два противоположных подхода: индуктивные и дедуктивные методы обучения. Применение индуктивных и дедуктивных методов означает выбор определенной логики раскрытия содержания изучаемой темы — от частного к общему или наоборот.
Индуктивное изучение темы особенно полезно тогда, когда изучаются преимущественно факты. Слабость индуктивного метода состоит в том, что он требуют большего времени на изучение нового материала, и в меньшей мере способствует развитию абстрактного мышления, так как опираются на конкретные факты. Напротив, дедуктивный метод способствует быстрому обучению и активнее развивает абстрактное мышление. Он особенно полезен при изучении теоретического материала и решении задач, требующих выявления следствий из общих положений.
Курс с большим количеством фундаментальных знаний не может базироваться на индуктивных методах обучения, так как учащимся не хватит времени прийти от частных случаев к общим правилам. С другой стороны, разработка программного обеспечения не подчиняется строгим правилам и, как следствие, каждая задача — это частный случай, поэтому обучение через дедуктивные методы здесь неуместно.
Принимая это во внимание, мы решили строить методологию курса «Конструирование программного обеспечения» на основе сочетания индуктивного и дедуктивного методов. Это позволяет студентам лучше понять теоретические основы и одновременно развить практические навыки.
Применении дедуктивного или индуктивного метода определяется ведущей задачей конкретных лекций и семинарских занятий. В данном курсе они принципиально разные. Каждая лекция — это автономная единица знаний (один из этапов разработки ПО), которая не зависит от предыдущих тем и не влияет на изучение следующих. Лекции наполнены фундаментальными понятиями и принципами. Таким образом, тут идеально подходит дедуктивный метод обучения. На семинарских занятиях мы показываем процесс разработки программы на едином, сквозном для всего курса примере. Это поэтапный процесс, где студентам нужно формировать понятия, смысл которых становится ясным лишь в ходе рассуждений, поэтому индуктивный метод обучения тут уместнее, так как он позволяет подготовить учащихся к решению более сложных задач. Стоит отдельно отметить, что для семинарских занятий важно использовать реальные кейсы из индустрии.
Когда мы посмотрели на пример из первого семинара и на темы следующих лекций, у нас появилась мысль сделать практический курс, ориентированный не на рассмотрение каждого аспекта проектирования «в вакууме», а на непрерывную разработку одного проекта, имеющего понятные начало и завершение. Так студенты смогут пронаблюдать весь процесс того, как от идеи через множество итераций, проб, ошибок и несколько прототипов мы приходим к полнофункциональному веб-приложению.
На самом деле, это звучало просто лишь на словах, а на деле оказалось серьезным вызовом, так как показать различные подходы к разработке и паттерны проектирования, не уходя глубоко в теорию разработки, оказалось довольно сложно. Но я верю, что мы справимся.
Приглашенный преподаватель базовой кафедры Т-Банка ФКН
Для наглядности приведем пример того как происходит обучение:
Лекции (дедуктивный подход): преподаватель излагает теорию, начиная с общих концепций и постепенно переходя к конкретным примерам. Пример: объяснение шаблонов проектирования, принципов SOLID с последующим демонстрацией кода на псевдоязыке.
Семинарские занятия (индуктивный подход): студенты работают с конкретным проектом, анализируют его, выявляют архитектурные особенности и предлагают улучшения. Пример: решение задачи по проектированию модуля системы, анализ ошибок и оптимизация.
Мы увидели, что такая методология позволяет студентам не только освоить теоретические основы конструирования ПО, но и развить навыки критического мышления, анализа и проектирования, что крайне важно для их будущей профессиональной деятельности. Мы увидели следующие преимущества нашей методологии:
Этот курс действительно уникален тем, что охватывает все ключевые требования к junior-специалистам от фундаментальных знаний, которых часто не хватает выпускникам онлайн-курсов, до практических навыков, востребованных в реальной индустрии. Проходя обучение, студенты последовательно осваивают весь спектр базовых концепций и навыков, необходимых для успешного старта в ИТ.
Особое внимание уделяется семинарским занятиям, которые создавались практикующими разработчиками. Это позволило интегрировать в курс самые современные и востребованные подходы. Более того, мы не просто даем теоретические знания — мы показываем, как они применяются в реальных проектах. Это значит, что после прохождения курса и небольшой дополнительной подготовки к собеседованиям наши студенты смогут уверенно претендовать на позиции junior-специалистов.
Важно отметить, что курс не только готовит к первой работе, но и намечает четкий вектор дальнейшего развития, позволяя каждому студенту видеть перспективы роста и понимать, какие именно навыки нужно развивать.
Приглашенный преподаватель департамента программной инженерии ФКН