Компьютерные науки VS Разработка программного обеспечения - какая специальность подходит вам лучше всего?

Привет всем! Меня зовут 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: в некоторых университетах даже нет специальности «Программная инженерия». Например, Университет Британской Колумбии в Ванкувере имеет степени в области компьютерных наук и компьютерной инженерии, но не имеет степени в области разработки программного обеспечения. Но у них действительно есть концентрация в программной инженерии в рамках их программы компьютерных наук, а также в компьютерной инженерии.

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

И вот основные источники, которые я использовал:

  • Компьютерные науки в Ватерлоо
  • Программная инженерия в Ватерлоо

Спасибо за чтение и удачи в выборе университета и специальности! ?