Інформатика проти програмної інженерії - який напрямок найкращий для вас?

Всім привіт! Мене звуть YK, і зараз я працюю в CS Dojo, освітньому програмістському каналі YouTube із понад 200 000 підписників. Раніше я також був розробником програмного забезпечення в Google.

Два найпоширеніші запитання, які мені задає моя аудиторія:

"Яка різниця між спеціальностями" Комп'ютерні науки "та" Програмна інженерія "?"

І ...

"Чи повинен я вибрати комп'ютерні науки або програмне забезпечення, якщо хочу стати інженером програмного забезпечення?"

У цій статті я відповім на це і дам вам власний швидкий аналіз цих спеціальностей.

Короткий огляд цих двох спеціальностей

  • Інформатика - це вивчення того, як працюють комп’ютери, переважно з теоретичної та математичної точки зору.
  • Якщо вам подобаються математика, логіка або якщо ви хочете потрапити в спеціалізовану сферу в КС, таку як штучний інтелект, машинне навчання, безпека чи графіка, вам слід вибрати Комп’ютерні науки.
  • Програмне забезпечення - це вивчення побудови програмних систем, включаючи такі теми, як управління проектами, забезпечення якості та тестування програмного забезпечення.
  • Вам слід вибрати Програмне забезпечення, якщо вас більше цікавить практичний підхід і якщо ви хочете дізнатись загальний життєвий цикл побудови та обслуговування програмного забезпечення.
  • І обчислювальна техніка, і інженерія програмного забезпечення викладають основи програмування та інформатики, тому ви можете вибрати один із них, щоб стати розробником програмного забезпечення.

Щоб зрозуміти різницю між спеціальностями «Комп’ютерні науки» та «Програмна інженерія», давайте поглянемо на їхню відповідну навчальну програму в Університеті Ватерлоо в Канаді.

Я вибрав для цього Університет Ватерлоо, оскільки він має одну з найкращих програм інформатики в Північній Америці.

Перспективи роботи

Давайте спочатку порівняємо види вакансій та стажування, які ви можете пройти через кожну програму.

На щастя, веб-сайт Університету Ватерлоо містить кілька прикладів.

Для кожної спеціальності наведено деякі назви випускників, і де вони працюють:

Комп'ютерна наука

  • Веб-розробник / архітектор, The Steele Group
  • Програміст, Harry Rosen Inc.
  • Розробник мобільних / хмарних технологій, Clearbridge Associates Limited
  • Розробка програмного забезпечення, General Dynamics Канада
  • Інженерія розробки програмного забезпечення, Microsoft
  • Швидкий інженер, Pivotal Labs
  • Бізнес-аналітик, Канадська шинна корпорація
  • Адвокат розробника, Google
  • Менеджер продуктів, Dropbox

Розробка програмного забезпечення

  • Розробник програмного забезпечення, Tagged Inc.
  • Розробник програмного забезпечення, IBM, Канада
  • Менеджер програмного забезпечення, Arius Software Corporation
  • Інженер-програміст, VistaPrint США
  • Інженер-програміст, корпорація Harris
  • Розробник програмного забезпечення, Accenture Inc.
  • Технічний менеджер з продуктів - Розробка та розробка програмного забезпечення, NexJ Systems Inc.
  • Консультант, PureFacts Financial Solutions
  • Консультант із впровадження, Desire2Learn

Як бачите, між типами робочих місць, які ви можете отримати, немає величезної різниці.

Найпоширеніша робота, яку випускники отримують після здобуття ступеня інформатики або програмного забезпечення, - це розробник програмного забезпечення або інженер програмного забезпечення.

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

Курси першого курсу:

Тепер давайте розглянемо необхідні курси кожної програми. Давайте спочатку порівняємо деякі курси, які потрібно було б пройти на першому курсі.

Комп'ютерна наука

  • CS 135 - Розробка функціональних програм
  • CS 136 - Розробка алгоритму та абстрагування даних
  • МАТЕМАТИКА 135 - Алгебра
  • МАТЕМАТИКА 136 - Лінійна алгебра 1
  • МАТЕМАТИКА 137 - Числення 1
  • МАТЕМАТИКА 138 - Числення 2
  • Плюс кілька факультативів

Розробка програмного забезпечення

  • CS 137 - Принципи програмування
  • CS 138 - Абстракція та впровадження даних
  • МАТЕМАТИКА 115 - Лінійна алгебра для техніки
  • МАТЕМАТИКА 117 - Обчислення 1 для техніки
  • МАТЕМАТИКА 119 - Обчислення 2 для інженерії
  • МАТЕМАТИКА 135 - Алгебра з відзнакою математики
  • ECE 105 - Фізика електротехніки 1
  • ECE 106 - Електрика та магнетизм
  • ECE 124 - Цифрові схеми та системи
  • ECE 140 - Лінійні схеми
  • SE 101 - Методи програмної інженерії

Як бачите, курси першого курсу теж досить подібні. Вони обидва охоплюють кілька фундаментальних курсів інформатики та кілька курсів математики з лінійної алгебри та числення.

Єдина велика відмінність полягає в тому, що програмна інженерія має додаткові фізичні та електротехнічні компоненти, тоді як комп’ютерні науки мають ще кілька факультативів.

Курси після першого курсу:

А як щодо обов’язкових та факультативних курсів після першого курсу? Давайте розглянемо кілька прикладів тут:

Комп'ютерна наука:

  • МАТЕМАТИКА 239 Вступ до комбінаторики
  • STAT 230 Імовірність
  • СТАТ 231 Статистика
  • CS 240 Структури даних та управління даними
  • CS 241 Основи послідовних програм
  • CS 245 Логіка та обчислення
  • CS 246 Об'єктно-орієнтована розробка програмного забезпечення <- не вимагається для спеціальностей програмного забезпечення
  • CS 251 Організація та дизайн комп’ютерів
  • CS 341 Алгоритми
  • Операційні системи CS 350
  • Плюс кілька факультативів з інформатики

Розробка програмного забезпечення:

  • CHE 102 Хімія для інженерів
  • ECE 222 Digital Computers (включає мову збірки)
  • ECE 358 Комп’ютерні мережі
  • МАТЕМАТИКА 213 Розширена математика для інженерів програмного забезпечення
  • МАТЕМАТИКА 239 Вступ до комбінаторики
  • STAT 206 Статистика для програмної інженерії
  • MSCI 261 Інженерна економіка: управління фінансами для інженерів
  • 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
  • Плюс, кілька факультативів з інформатики та електротехніки

Я дав вам БАГАТО інформації для перетравлення тут. Але ось моє резюме:

Що стосується вимог до математики та статистики, обчислювальна техніка та програмна інженерія майже ідентичні. Вони охоплюють комбінаторику, ймовірність та статистику.

Основні вимоги до інформатики також подібні, включаючи алгоритми, структури даних та операційні системи.

Ключова відмінність полягає в тому, що:

  • Інженерія програмного забезпечення має більше вимог до електротехніки та основ програмного забезпечення, таких як тестування програмного забезпечення, проектування та специфікація вимог до програмного забезпечення.
  • Інформатика дозволяє більше факультативів на курсах інформатики вищого рівня. Ви можете вибрати серед широкого кола тем, таких як безпека, основи програмної інженерії, комп'ютерний зір, машинне навчання та управління базами даних.

Отже, яку спеціальність вам слід вибрати?

Я думаю, що це здебільшого залежить від ваших уподобань. Коротко:

  • Вам слід вибрати Комп’ютерні науки, якщо вам подобаються математика, логіка або якщо ви хочете потрапити до такої спеціалізованої галузі, як штучний інтелект, машинне навчання, безпека чи графіка.
  • Вам слід вибрати Програмне забезпечення, якщо вас більше цікавить практичний підхід і якщо ви хочете дізнатись загальний життєвий цикл побудови та обслуговування програмного забезпечення.

Але почекайте - що це тоді? Який напрямок краще, якщо ви хочете бути інженером-програмістом?

Ось моя думка. У цьому конкретному університеті (Університет Ватерлоо), з цим конкретним набором програм, комп'ютерні науки є кращим напрямом, якщо ви хочете бути інженером програмного забезпечення.

Просто для простоти, припустимо, ви сподіваєтесь отримати одну з найбільш високооплачуваних робіт (~ 100 000 доларів США на рік) як інженера-програміста в Північній Америці. Ці робочі місця, як правило, проводяться у великих програмних компаніях (наприклад, Microsoft, Google, Amazon та ін.) Або у середніх і швидкозростаючих компаніях (наприклад, Dropbox, Lyft, Snapchat, Pinterest тощо).

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

Я думаю, що найкращий спосіб культивувати цей набір навичок - це швидке вивчення основ інформатики та проведення власного часу, практикуючись у вирішенні проблем та написанні коду.

Виходячи з навчальної програми з програмної інженерії та виходячи з того, наскільки загалом зайняті студенти-інженери, я думаю, це було б важче зробити з програмною інженерією, ніж з комп’ютерними науками.

Ще однією перевагою цієї конкретної програми з інформатики є те, що вона дозволяє проводити більше факультативів з інформатики. Це також чудово, оскільки залежно від того, який попит на ринку праці, ви зможете коригувати свої курси. Наприклад, якщо розробка мобільних додатків користується попитом, ви можете це дізнатися. І якщо паралельні обчислення затребувані, ви можете замість цього зосередитись на цьому.

Я впевнений, що є певні переваги у вивченні основ програмної інженерії (управління проектами, проектування, тестування тощо). Але я б вважав за краще використовувати гнучкість у порівнянні з наперед визначеним набором навичок. Ось чому я вважаю, що комп’ютерні науки є найкращим напрямом для того, щоб стати інженером-програмістом з цією конкретною програмою.

Звичайно, це лише моя думка, і це лише один конкретний університет. Я хотів би почути про вашу думку та про те, яким був ваш досвід, якщо ви займалися або комп’ютерними науками, або програмною інженерією. Будь ласка, дайте мені знати в коментарі нижче.

Кілька приміток

Примітка 1. Різні університети мають різні вимоги до цих двох спеціальностей. Ця стаття має стати гарною відправною точкою, але ви все-таки повинні поглянути на вимоги до програми в університеті, який ви зацікавлені відвідувати.

Примітка 2. Деякі університети навіть не мають спеціальності «Інженерія програмного забезпечення». Наприклад, Університет Британської Колумбії у Ванкувері має ступінь інформатики та обчислювальної техніки, але не інженерію програмного забезпечення. Але вони мають концентрацію програмної інженерії як у своїй програмі комп’ютерних наук, так і в галузі комп’ютерної техніки.

Якщо університет, в який ви зацікавлені, не має спеціальності «Інженерія програмного забезпечення», я б пішов у «Комп’ютерні науки», якщо ви хочете стати розробником програмного забезпечення. Комп’ютерна інженерія більше орієнтована на апаратне забезпечення, ніж Комп’ютерні науки чи Програмне забезпечення, тому вона менш безпосередньо пов’язана із роботою типового розробника програмного забезпечення.

І ось основні джерела, якими я користувався:

  • Інформатика в Ватерлоо
  • Розробка програмного забезпечення у Ватерлоо

Дякуємо за читання та успіхів у виборі університету та вашої спеціальності! ?