• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Контакты

Адрес: 109028, г. Москва, Покровский бульвар, д. 11

Телефон: +7(495) 772-95-90 *28240

Руководство
Научный руководитель направления “Программная инженерия" Аветисян Арутюн Ишханович
Руководитель департамента Лебедев Сергей Аркадьевич
Заместитель руководителя департамента Максименкова Ольга Вениаминовна
Книга
Computer Networks

Rodriges Zalipynis R. A.

St. Petersburg: Naukoemkie Technologii, 2024.

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

Ахмедов Э., Фурманов К. К.

Экономика и математические методы. 2025. Т. 61. № 1. С. 109-117.

Глава в книге
Game Development Education: Approaches for Teaching Software Engineering Students

Maksimenkova O. V., Lebedev S., Pozdnyakov D.

In bk.: Futureproofing Engineering Education for Global Responsibility. Springer, 2025. P. 116-125.

Препринт
Approach to Designing CV Systems for Medical Applications: Data, Architecture and AI
В печати

Ryabtsev D., Vasilyev Boris, Shershakov S.

Computer Science ::Computer Vision and Pattern Recognition. 2501.14689. arXiv, 2025

Как научить конструировать программное обеспечение: от абстрактных концепций к реальным проектам

Как научить конструировать программное обеспечение: от абстрактных концепций к реальным проектам

При разработке программного обеспечения важно не только владеть техническими навыками, но и понимать весь процесс создания продукта от идеи до реализации. Именно этому учит курс «Конструирование программного обеспечения», разработанный преподавателями департамента программной инженерии ФКН НИУ ВШЭ. Курс интересен не только содержанием, но и методологией, сочетающей индуктивный и дедуктивный подходы, что позволяет студентам одновременно и увидеть картину целиком, и углубиться в детали. В текущем учебном году курс реализуется в одноименной учебной дисциплине на бакалаврской образовательной программе ФКН "Программная инженерия".

 

«Показать разработку программного обеспечения с высоты птичьего полета»

Цель, которую мы поставили перед собой, — показать студентам этапы разработки программного обеспечения как единого и цельного процесса, затрагивающего все от проектирования и программирования до тестирования и развертывания. Это оказалось невероятно сложно!

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

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

Сергей Виденин
Доцент департамента программной инженерии ФКН

 

Разработку ПО как цельный процесс нельзя показать без большого количества фундаментальных знаний. Выбор того самого «необходимого и достаточного» набора тем заставил создателей курса задуматься над ведущим методом обучения. Рассматривались разные варианты, в основе которых лежали два противоположных подхода: индуктивные и дедуктивные методы обучения. Применение индуктивных и дедуктивных методов означает выбор определенной логики раскрытия содержания изучаемой темы — от частного к общему или наоборот.

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

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

Принимая это во внимание, мы решили строить методологию курса «Конструирование программного обеспечения» на основе сочетания индуктивного и дедуктивного методов. Это позволяет студентам лучше понять теоретические основы и одновременно развить практические навыки.

Применении дедуктивного или индуктивного метода определяется ведущей задачей конкретных лекций и семинарских занятий. В данном курсе они принципиально разные. Каждая лекция — это автономная единица знаний (один из этапов разработки ПО), которая не зависит от предыдущих тем и не влияет на изучение следующих. Лекции наполнены фундаментальными понятиями и принципами. Таким образом, тут идеально подходит дедуктивный метод обучения. На семинарских занятиях мы показываем процесс разработки программы на едином, сквозном для всего курса примере. Это поэтапный процесс, где студентам нужно формировать понятия, смысл которых становится ясным лишь в ходе рассуждений, поэтому индуктивный метод обучения тут уместнее, так как он позволяет подготовить учащихся к решению более сложных задач. Стоит отдельно отметить, что для семинарских занятий важно использовать реальные кейсы из индустрии.

 

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

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

Сергей Секретарев

Приглашенный преподаватель базовой кафедры Т-Банка ФКН

 

Для наглядности приведем пример того как происходит обучение:

Лекции (дедуктивный подход): преподаватель излагает теорию, начиная с общих концепций и постепенно переходя к конкретным примерам. Пример: объяснение шаблонов проектирования, принципов SOLID с последующим демонстрацией кода на псевдоязыке.

Семинарские занятия (индуктивный подход): студенты работают с конкретным проектом, анализируют его, выявляют архитектурные особенности и предлагают улучшения. Пример: решение задачи по проектированию модуля системы, анализ ошибок и оптимизация.

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

  1. Гибкость: сочетание подходов позволяет адаптировать курс под разные уровни подготовки студентов.
  2. Глубокое понимание: студенты не только запоминают теорию, но и учатся применять ее на практике.
  3. Развитие критического мышления: индуктивный метод стимулирует анализ и самостоятельное формулирование выводов.

 

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

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

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

Никита Верховод

Приглашенный преподаватель департамента программной инженерии ФКН