Чем Software Engineering отличается от Computer Science???

Привет!

Хочу рассказать, в чем разница между SE и CS и чем программа, которую я прохожу, отличается от всего остального. Без всякого сомнения – этот вопрос обсуждаем, но ниже представлено чисто мое личное мнение

Да, вы знаете, какая-то слабая программа для Computer Science

До того как приехал на программу, во всех комментариях читал именно такое утверждение. Человек переходит по [вот этой] ссылке и читает:

  • 17-651 Models of Software Systems
  • 17-652 Methods: Deciding What to Design
  • 17-653 Managing Software Development
  • 17-602 Introduction to Personal Software Process
  • 17-654 Analysis of Software Artifacts
  • 17-655 Architectures for Software Systems
  • 17-677 MSIT Project I
  • 17-678 MSIT Project II

И начинаются разговоры: хм, простите, но где здесь хотя бы один классический курс по алгоритмам и структурам данных? Ну или хотя бы один годный курс по ООП, или по C++, или по основам распределенных систем или может быть базы данных, где всё это ? Ну, что я могу сказать, всего этого нет. Точнее, этого нет среди указанных выше основных курсов, зато каждый семестр можно брать 1-2 электива, я вот, например, брал Distributed systems и Data structures for application programmers. Подробнее про элективы [читать тута] и [здеся].

SEvsCSПричина подобного отношения – изначально неверная реклама этой программы в России, а также невнятное определение того, что такое software engineering (оно у всех очень разное).

Вот слева короткая вырезка с официального сайта. Можно видеть, что пересечение есть, но фокус принципиально другой. Есть некоторые вещи, которым не учат на Computer Science программах. Я не знаю, как иначе объяснить разницу между SE и CS, кроме как сравнить создание IT системы с чем-нибудь из реальной жизни. Например, с постройкой моста. Вот список вещей, которым не учат на CS:

  • как выбрать форму моста
  • как решить, где именно этот мост должен стоять
  • как скоординировать это с финансовыми или правовыми вопросами
  • как именно должен выглядеть мост с точки зрения заказчика
  • как скоординировать 100500 рабочих, которые будут строить этот мост
  • как ответить руководству (спонсорам, инвесторам, etc), на каком этапе строительства сейчас мост и когда он будет завершен
  • как ДО того, как мост построен, оценить его качества: грузоподъемность, производительность
  • как задокументировать построенный мост так, чтобы в будущем его можно было починить
  • какие действия должны быть выполнены, кем и когда, чтобы мост не упал через 2 года

… ну, в общем, идея понятна, продолжать можно долго. С одной стороны, это менеджемент (17-653 Managing Software Development) . От него никуда не денешься, потому что с людьми надо общаться, и это почти самое сложное, а еще является причиной провала большинства проектов. После чего – умение собирать требования (17-652 Methods: Deciding What to Design). Как только требования собраны, мост нужно нарисовать на бумаге (17-655 Architectures for Software Systems), по возможности   используя формальные методы расчета моста (17-651 Models of Software Systems). На протяжении всего процесса желательно проверять качество собранных требований, процесса постройки, итогового результата и тд (17-654 Analysis of Software Artifacts)

Я считаю, что все вышеописанные курсы должны предваряться мощным бакалавриатом по Computer Science, а затем 3-5 годами работы в индустрии. Лишь после этого имеет смысл говорить о менеджменте или архитектуре.

И вот мы плавно переходим к вишенке на торте. Практикум, он же MSIT Project, это то, что склеивает всю программу воедино. Я уже писал краткий обзор нашего проекта [тут]. Следующим постом расскажу о практикуме более подробно.