
Привет всем! Меня зовут YK, и в настоящее время я веду CS Dojo, образовательный канал на YouTube с более чем 200 000 подписчиков. Я также раньше был разработчиком программного обеспечения в Google.
Моя аудитория задает мне два самых распространенных вопроса:
«В чем разница между специальностями в области компьютерных наук и программной инженерии?»А также…
«Что мне следует выбрать - информатику или разработку программного обеспечения, если я хочу стать инженером-программистом?»В этой статье я отвечу на этот вопрос и дам вам свой быстрый анализ этих специальностей.
Краткий обзор этих двух специальностей
- Информатика - это изучение того, как работают компьютеры, в основном с теоретической и математической точки зрения.
- Вам следует выбрать компьютерные науки, если вам нравится математика, логика или если вы хотите заняться специализированной областью CS, такой как искусственный интеллект, машинное обучение, безопасность или графика.
- Программная инженерия - это исследование того, как создаются программные системы, включая такие темы, как управление проектами, обеспечение качества и тестирование программного обеспечения.
- Вам следует выбрать программную инженерию, если вас больше интересует практический подход и если вы хотите изучить общий жизненный цикл создания и поддержки программного обеспечения.
- И компьютерные науки, и программная инженерия преподают основы программирования и информатики, поэтому вы можете выбрать любой из них, чтобы стать разработчиком программного обеспечения.
Чтобы понять разницу между специальностями «Компьютерные науки» и «Программная инженерия», давайте взглянем на их учебную программу в Университете Ватерлоо в Канаде.
Я выбрал для этого Университет Ватерлоо, потому что он предлагает одну из лучших программ по информатике в Северной Америке.
Перспективы работы
Давайте сначала сравним виды работы и стажировки, которые вы можете получить по каждой программе.
К счастью, на сайте Университета Ватерлоо есть несколько примеров.
Вот некоторые звания, которые имеют выпускники по каждой специальности и где они работают:
Информационные технологии
- Веб-разработчик / архитектор, The Steele Group
- Программист, Harry Rosen Inc.
- Разработчик мобильных / облачных приложений, Clearbridge Associates Limited
- Программная инженерия, General Dynamics Canada
- Разработка программного обеспечения, Microsoft
- Agile-инженер, Pivotal Labs
- Бизнес-аналитик, Canadian Tire Corporation
- Адвокат разработчиков, Google
- Менеджер по продукту, Dropbox
Программная инженерия
- Разработчик программного обеспечения, Tagged Inc
- Разработчик программного обеспечения, IBM Canada
- Менеджер по программному обеспечению, Arius Software Corporation
- Инженер-программист, VistaPrint USA
- Инженер-программист, Harris Corporation
- Разработчик программного обеспечения, Accenture Inc.
- Технический менеджер по продуктам - Дизайн и разработка программного обеспечения, NexJ Systems Inc.
- Консультант, PureFacts Financial Solutions
- Консультант по внедрению, Desire2Learn
Как видите, нет большой разницы между типами работы, которую вы можете получить.
Наиболее распространенная работа, которую выпускники получают после получения степени в области компьютерных наук или программной инженерии, - это разработчик программного обеспечения или инженер-программист.
Есть и другие связанные варианты, такие как менеджер по продукту, аналитик по обеспечению качества и консультант по технологиям. Ваши варианты будут зависеть от вашего конкретного набора навыков.
Первокурсники:
Теперь давайте посмотрим на обязательные курсы каждой программы. Давайте сначала сравним некоторые курсы, которые вам нужно будет пройти в первый год.
Информационные технологии
- CS 135 - Разработка функциональных программ
- CS 136 - Разработка алгоритмов и абстракция данных
- MATH 135 - Алгебра
- MATH 136 - Линейная алгебра 1
- МАТЕМАТИКА 137 - Исчисление 1
- МАТЕМАТИКА 138 - Исчисление 2
- Плюс несколько факультативов
Программная инженерия
- CS 137 - Принципы программирования
- CS 138 - Абстракция и реализация данных
- MATH 115 - Линейная алгебра для инженерии
- МАТЕМАТИКА 117 - Исчисление 1 для инженерии
- МАТЕМАТИКА 119 - Исчисление 2 для инженерии
- MATH 135 - Алгебра с отличием по математике
- ECE 105 - Физика электротехники 1
- ECE 106 - Электричество и магнетизм
- ECE 124 - Цифровые схемы и системы
- ECE 140 - Линейные цепи
- SE 101 - Методы программной инженерии
Как видите, курсы первого года обучения также довольно похожи. Оба они охватывают несколько курсов фундаментальной информатики и несколько курсов математики по линейной алгебре и исчислению.
Единственное существенное отличие состоит в том, что в программной инженерии есть дополнительные компоненты физики и электротехники, а в компьютерных науках - еще несколько факультативов.
Курсы после первого курса:
Как насчет обязательных и факультативных курсов после первого года обучения? Давайте посмотрим здесь на несколько примеров:
Информационные технологии:
- MATH 239 Введение в комбинаторику
- STAT 230 Вероятность
- STAT 231 Статистика
- CS 240 Структуры данных и управление данными
- CS 241 Основы последовательных программ
- CS 245 Логика и вычисления
- CS 246 Объектно-ориентированная разработка программного обеспечения <- не требуется для специальностей программной инженерии
- CS 251 Организация и дизайн компьютера
- CS 341 Алгоритмы
- Операционные системы CS 350
- Плюс несколько факультативов по информатике
Программная инженерия:
- CHE 102 Химия для инженеров
- Цифровые компьютеры ECE 222 (включая язык ассемблера)
- ECE 358 Компьютерные сети
- MATH 213 Высшая математика для инженеров-программистов
- MATH 239 Введение в комбинаторику
- STAT 206 Статистика для разработки программного обеспечения
- MSCI 261 Engineering Economics: Финансовый менеджмент для инженеров
- CS 241 Основы последовательных программ
- CS 240 Структуры данных и управление данными
- CS 247 Принципы разработки программного обеспечения <- не требуется для специальностей в области компьютерных наук
- CS 341 Алгоритмы
- Пользовательские интерфейсы CS 349 <- не требуется для специальностей в области компьютерных наук
- CS 343 Параллельное и параллельное программирование <- не требуется для специальностей в области компьютерных наук
- CS 348 Введение в управление базами данных
- SE 212 Логика и вычисления
- SE 350 Операционные системы
- SE 465 Тестирование программного обеспечения и обеспечение качества
- SE 464 Разработка и архитектура программного обеспечения
- Спецификация и анализ требований к программному обеспечению SE 463
- SE 490 Дизайн-проект
- Плюс несколько факультативов по информатике и электротехнике.
Я дал вам МНОГО информации, которую нужно переварить здесь. Но вот мое резюме:
Что касается требований к математике и статистике, компьютерные науки и программная инженерия практически идентичны. Они охватывают комбинаторику, вероятность и статистику.
Основные требования в области информатики также схожи, начиная с алгоритмов, структур данных и операционных систем.
Ключевое отличие состоит в том, что:
- Программная инженерия предъявляет больше требований в области электротехники и основ программной инженерии, таких как тестирование программного обеспечения, проектирование и спецификация требований к программному обеспечению.
- Компьютерные науки допускают больше факультативов на курсах информатики более высокого уровня. Вы можете выбирать из широкого спектра тем, таких как безопасность, основы разработки программного обеспечения, компьютерное зрение, машинное обучение и управление базами данных.
Итак, какую специальность выбрать?
Я думаю, это во многом зависит от ваших предпочтений. Короче говоря:
- Вам следует выбрать компьютерные науки, если вам нравится математика, логика или если вы хотите заняться специализированной областью CS, такой как искусственный интеллект, машинное обучение, безопасность или графика.
- Вам следует выбрать программную инженерию, если вас больше интересует практический подход и если вы хотите узнать общий жизненный цикл создания и поддержки программного обеспечения.
Но подождите - что же тогда? Какая специальность лучше, если вы хотите быть инженером-программистом?
Вот мое мнение. В этом конкретном университете (University of Waterloo), с этим конкретным набором программных требований, компьютерные науки - лучшая специальность, если вы хотите стать инженером-программистом.
Для простоты предположим, что вы надеетесь получить одну из самых высокооплачиваемых должностей (~ 100 000 долларов США в год) в качестве инженера-программиста в Северной Америке. Эти вакансии обычно выполняются в крупных компаниях-разработчиках программного обеспечения (например, Microsoft, Google, Amazon и т. Д.) Или в средних быстрорастущих компаниях (например, Dropbox, Lyft, Snapchat, Pinterest и т. Д.).
Обычно от кандидата в инженеры-программисты ищут способность писать надежный код и строить интересные проекты, а также основы информатики, включая структуры данных и алгоритмы.
Я думаю, что лучший способ развить этот набор навыков - это быстро изучить основы информатики и потратить свое время на практику решения проблем и написания кода.
Основываясь на учебном плане по программной инженерии и исходя из того, насколько часто студенты-инженеры заняты в целом, я думаю, что с программной инженерией это будет труднее, чем с компьютерными науками.
Еще одно преимущество этой конкретной программы по информатике состоит в том, что она позволяет использовать больше факультативов по информатике. Это также здорово, потому что в зависимости от спроса на рынке труда вы сможете корректировать свои курсы. Например, если разработка мобильных приложений востребована, вы можете это узнать. И если параллельные вычисления востребованы, вы можете сосредоточиться на них.
Я уверен, что изучение основ программной инженерии (управление проектами, проектирование, тестирование и т. Д.) Дает определенные преимущества. Но лично я предпочел бы гибкость заранее определенному набору навыков. Вот почему я думаю, что компьютерная наука - лучшая специальность, чтобы стать инженером-программистом с этой конкретной учебной программой.
Конечно, это только мое мнение, и это всего лишь один конкретный университет. Я хотел бы услышать ваше мнение и ваш опыт, если вы специализировались в области компьютерных наук или разработки программного обеспечения. Пожалуйста, дайте мне знать в комментарии ниже.
Несколько заметок
Примечание 1: разные университеты предъявляют разные требования к этим двум специальностям. Эта статья должна стать хорошей отправной точкой, но вам все равно следует ознакомиться с требованиями программы в университете, в котором вы заинтересованы.
Примечание 2: в некоторых университетах даже нет специальности «Программная инженерия». Например, Университет Британской Колумбии в Ванкувере имеет степени в области компьютерных наук и компьютерной инженерии, но не имеет степени в области разработки программного обеспечения. Но у них действительно есть концентрация в программной инженерии в рамках их программы компьютерных наук, а также в компьютерной инженерии.
Если в университете, в который вы хотите поступить, нет специальности «Программная инженерия», я бы выбрал информатику, если вы хотите стать разработчиком программного обеспечения. Компьютерная инженерия больше ориентирована на аппаратное обеспечение, чем компьютерные науки или разработка программного обеспечения, поэтому она менее напрямую связана с типичной работой разработчика программного обеспечения.
И вот основные источники, которые я использовал:
- Компьютерные науки в Ватерлоо
- Программная инженерия в Ватерлоо
Спасибо за чтение и удачи в выборе университета и специальности! ?