Компютърни науки срещу софтуерно инженерство - кой е най-добрият за вас?

Здравейте на всички! Казвам се YK и в момента управлявам CS Dojo, образователен канал по програмиране в YouTube с над 200 000 абонати. По-рано бях и разработчик на софтуер в Google.

Два от най-често срещаните въпроси, които ми задава аудиторията, са:

„Каква е разликата между специалностите„ Компютърни науки “и„ Софтуерно инженерство “?“

И…

„Трябва ли да избера компютърни науки или софтуерно инженерство, ако искам да стана софтуерен инженер?“

В тази статия ще отговоря на това и ще ви дам свой собствен бърз анализ на тези специалности.

Кратък преглед на тези две специалности

  • Компютърните науки са изследване на това как работят компютрите, най-вече от теоретична и математическа гледна точка.
  • Трябва да изберете Компютърни науки, ако харесвате математика, логика или ако искате да влезете в специализирана област в CS като изкуствен интелект, машинно обучение, сигурност или графика.
  • Софтуерното инженерство е изследване на начина на изграждане на софтуерни системи, включително теми като управление на проекти, осигуряване на качеството и тестване на софтуера.
  • Трябва да изберете Софтуерно инженерство, ако се интересувате повече от практическия подход и ако искате да научите цялостния жизнен цикъл на това как се изгражда и поддържа софтуерът.
  • Както компютърните науки, така и софтуерното инженерство преподават основи на програмирането и компютърните науки, така че можете да изберете един от тях, за да станете разработчик на софтуер.

За да разберем разликата между специалностите „Компютърни науки“ и „Софтуерно инженерство“, нека да разгледаме съответната им учебна програма в Университета на Ватерло в Канада.

За това избрах Университета на Ватерло, тъй като той има една от най-добрите програми за компютърни науки в Северна Америка.

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

Нека първо сравним видовете работни места и стажове, които можете да получите чрез всяка програма.

За щастие уебсайтът на Университета на Ватерло предоставя няколко примера.

За всяка специалност, ето някои от заглавията на възпитаниците и къде работят:

Информатика

  • Уеб разработчик / архитект, The Steele Group
  • Програмист, Harry Rosen Inc.
  • Програмист за мобилни устройства / облак, Clearbridge Associates Limited
  • Софтуерно инженерство, General Dynamics Канада
  • Инженеринг за разработка на софтуер, Microsoft
  • Agile Engineer, Pivotal Labs
  • Бизнес анализатор, канадска корпорация за гуми
  • Защитник на разработчиците, Google
  • Продуктов мениджър, Dropbox

Софтуерно инженерство

  • Разработчик на софтуер, Tagged Inc
  • Разработчик на софтуер, IBM Канада
  • Софтуерен мениджър, Arius Software Corporation
  • Софтуерен инженер, VistaPrint САЩ
  • Софтуерен инженер, Harris Corporation
  • Разработчик на софтуер, Accenture Inc.
  • Технически продуктов мениджър - Проектиране и разработка на софтуер, NexJ Systems Inc.
  • Консултант, PureFacts Financial Solutions
  • Консултант по внедряване, Desire2Learn

Както можете да видите, няма огромна разлика между видовете работни места, които можете да получите.

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

Има и други свързани опции, като например продуктов мениджър, QA анализатор и технологичен консултант. Вашите опции ще зависят от конкретния ви набор от умения.

Курсове за първа година:

Сега, нека да разгледаме задължителните курсове на всяка програма. Нека първо сравним някои от курсовете, които ще трябва да вземете през първата си година.

Информатика

  • 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
  • Плюс това, няколко избираеми дисциплини по компютърни науки и електротехника

Дадох ви МНОГО информация, която да смилате тук. Но ето моето резюме:

Що се отнася до изискванията в математиката и статистиката, компютърните науки и софтуерното инженерство са почти идентични. Те обхващат комбинаториката, вероятността и статистиката.

Основните изисквания за компютърни науки също са подобни, вариращи от алгоритми, структури от данни и операционни системи.

Ключовата разлика е, че:

  • Софтуерното инженерство има повече изисквания в електротехниката и основите на софтуерното инженерство, като тестване на софтуер, дизайн и спецификация на софтуерните изисквания.
  • Компютърните науки позволяват повече избираеми курсове по компютърни науки на по-високо ниво. Можете да избирате от широк спектър от теми като сигурност, основи на софтуерното инженерство, компютърно зрение, машинно обучение и управление на бази данни.

И така, коя специалност трябва да изберете?

Мисля, че това зависи най-вече от вашите предпочитания. Накратко:

  • Трябва да изберете Компютърни науки, ако харесвате математика, логика или ако искате да влезете в специализирана област в CS като изкуствен интелект, машинно обучение, сигурност или графика.
  • Трябва да изберете Софтуерно инженерство, ако се интересувате повече от практическия подход и ако искате да научите цялостния жизнен цикъл на това как се изгражда и поддържа софтуерът.

Но изчакайте - кое е тогава? Коя специалност е по-добра, ако искате да сте софтуерен инженер?

Ето моето мнение. В този конкретен университет (University of Waterloo), с този конкретен набор от програмни изисквания, компютърните науки са по-добра специалност, ако искате да сте софтуерен инженер.

Само за простота, нека предположим, че се надявате да получите една от най-добре платените работни места (~ 100 000 щатски долара годишно) като софтуерен инженер в Северна Америка. Обикновено тези работни места са в големи софтуерни компании (например Microsoft, Google, Amazon и др.) Или в средни компании с висок растеж (например Dropbox, Lyft, Snapchat, Pinterest и др.).

Обикновено това, което търсят в кандидата за софтуерен инженер, е способността да пишат солиден код и да изграждат интересни проекти, както и основи на компютърните науки, включително структури от данни и алгоритми.

Мисля, че най-добрият начин за култивиране на този набор от умения е бързото изучаване на основите на компютърните науки и прекарването на собственото си време в практикуване на решаване на проблеми и писане на код.

Въз основа на учебната програма по софтуерно инженерство и въз основа на това колко заети са студенти по инженерство като цяло, мисля, че би било по-трудно да се направи това със софтуерно инженерство, отколкото с компютърни науки.

Друго предимство на тази конкретна програма за компютърни науки е, че тя позволява повече избираеми дисциплини по компютърни науки. Това е чудесно и защото в зависимост от търсенето на пазара на труда ще можете да коригирате курсовете си. Например, ако се търси разработка на мобилни приложения, можете да научите това. И ако се търсят паралелни изчисления, можете да се съсредоточите върху това.

Сигурен съм, че има някои ползи от изучаването на основите на софтуерното инженерство (управление на проекти, проектиране, тестване и т.н.). Но аз лично бих предпочел да използвам гъвкавост по отношение на предварително определен набор от умения. Ето защо мисля, че компютърните науки са по-добра специалност, за да станете софтуерен инженер с тази конкретна учебна програма.

Разбира се, това е само моето мнение и това е само един конкретен университет. Ще се радвам да чуя за вашето мнение и какъв е вашият опит, ако сте завършили компютърни науки или софтуерно инженерство. Моля, уведомете ме в коментар по-долу.

Няколко бележки

Забележка 1: Различните университети имат различни изисквания за тези две специалности. Тази статия трябва да бъде добра отправна точка, но все пак трябва да разгледате програмните изисквания в университета, в който се интересувате.

Забележка 2: Някои университети дори нямат специалност софтуерно инженерство. Например Университетът на Британска Колумбия във Ванкувър има степени по компютърни науки и компютърно инженерство, но не и софтуерно инженерство. Но те имат концентрация на софтуерно инженерство в рамките на своята програма за компютърни науки, както и в компютърното инженерство.

Ако университетът, в който се интересувате, няма специалност „Софтуерно инженерство“, бих отишъл в „Компютърни науки“, ако искате да станете разработчик на софтуер. Компютърното инженерство е по-фокусирано върху хардуера, отколкото компютърните науки или софтуерното инженерство, така че е по-малко пряко свързано с работата на типичен разработчик на софтуер.

И ето основните източници, които използвах:

  • Компютърни науки във Ватерло
  • Софтуерно инженерство във Ватерло

Благодаря за четенето и успех при избора на университет и вашата специалност! ?