Привет!
Хочу рассказать, в чем разница между 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. Подробнее про элективы [читать тута] и [здеся].
Причина подобного отношения – изначально неверная реклама этой программы в России, а также невнятное определение того, что такое 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, это то, что склеивает всю программу воедино. Я уже писал краткий обзор нашего проекта [тут]. Следующим постом расскажу о практикуме более подробно.