
Здравейте на всички! Казвам се 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: Някои университети дори нямат специалност софтуерно инженерство. Например Университетът на Британска Колумбия във Ванкувър има степени по компютърни науки и компютърно инженерство, но не и софтуерно инженерство. Но те имат концентрация на софтуерно инженерство в рамките на своята програма за компютърни науки, както и в компютърното инженерство.
Ако университетът, в който се интересувате, няма специалност „Софтуерно инженерство“, бих отишъл в „Компютърни науки“, ако искате да станете разработчик на софтуер. Компютърното инженерство е по-фокусирано върху хардуера, отколкото компютърните науки или софтуерното инженерство, така че е по-малко пряко свързано с работата на типичен разработчик на софтуер.
И ето основните източници, които използвах:
- Компютърни науки във Ватерло
- Софтуерно инженерство във Ватерло
Благодаря за четенето и успех при избора на университет и вашата специалност! ?