Računalne znanosti protiv softverskog inženjerstva - Koji je glavni predmet najbolji za vas?

Hej svima! Moje ime je YK i trenutno vodim CS Dojo, YouTube programerski edukativni kanal s više od 200 000 pretplatnika. Također sam ranije bio programer softvera u Googleu.

Dva najčešća pitanja koja mi postavlja moja publika su:

"Koja je razlika između smjerova računalnih znanosti i softverskog inženjerstva?"

I…

"Trebam li odabrati računarstvo ili softversko inženjerstvo ako želim postati softverski inženjer?"

U ovom ću članku odgovoriti na ovo i dati ću vam vlastitu brzu analizu ovih smjerova.

Kratki pregled ove dvije smjerove

  • Računalne znanosti su proučavanje rada računala, uglavnom iz teorijske i matematičke perspektive.
  • Trebali biste odabrati Računarstvo ako volite matematiku, logiku ili ako želite ući u specijalizirano područje u CS-u, poput umjetne inteligencije, strojnog učenja, sigurnosti ili grafike.
  • Softversko inženjerstvo proučava kako se grade softverski sustavi, uključujući teme poput upravljanja projektima, osiguranja kvalitete i testiranja softvera.
  • Trebali biste odabrati Softversko inženjerstvo ako vas više zanima praktični pristup i ako želite naučiti cjelokupni životni ciklus izrade i održavanja softvera.
  • I informatika i softversko inženjerstvo podučavaju osnove programiranja i računarstva, tako da možete odabrati bilo koje od njih da biste postali programer.

Da bismo razumjeli razliku između smjerova informatike i softverskog inženjerstva, pogledajmo njihov nastavni plan i program na Sveučilištu Waterloo u Kanadi.

Za to sam izabrao Sveučilište Waterloo jer ima jedan od najboljih programa informatike u Sjevernoj Americi.

Izgledi za posao

Prvo usporedimo vrste poslova i prakse koje možete dobiti kroz svaki program.

Srećom, web stranica Sveučilišta Waterloo nudi nekoliko primjera.

Evo nekoliko naslova koje imaju alumni i gdje rade:

Računalne znanosti

  • Web programer / arhitekt, The Steele Group
  • Programer, Harry Rosen Inc.
  • Programer za mobilne uređaje / oblak, Clearbridge Associates Limited
  • Softverski inženjering, General Dynamics Kanada
  • Inženjering za razvoj softvera, Microsoft
  • Agile Engineer, Pivotal Labs
  • Poslovni analitičar, kanadska tvrtka za gume
  • Zastupnik programera, Google
  • Voditelj proizvoda, Dropbox

Softversko inženjerstvo

  • Programer softvera, Tagged Inc
  • Programer softvera, IBM Kanada
  • Upravitelj softvera, Arius Software Corporation
  • Softverski inženjer, VistaPrint SAD
  • Softverski inženjer, Harris Corporation
  • Programer softvera, Accenture Inc.
  • Tehnički voditelj proizvoda - Dizajn i razvoj softvera, NexJ Systems Inc
  • Savjetnik, PureFacts Financial Solutions
  • Savjetnik za implementaciju, Desire2Learn

Kao što vidite, nema velike razlike između vrsta poslova koje možete dobiti.

Najčešći posao koji diplomci dobiju nakon stjecanja diplome informatike ili softverskog inženjerstva je programer softvera ili softverski inženjer.

Postoje i druge srodne opcije, kao što su Product Manager, QA Analyst i Technology Consultant. Vaše mogućnosti ovisit će o vašem specifičnom skupu vještina.

Tečajevi za prvu godinu:

Sada, pogledajmo tražene tečajeve svakog programa. Prvo usporedimo neke tečajeve koje biste trebali pohađati u prvoj godini.

Računalne znanosti

  • CS 135 - Dizajn funkcionalnih programa
  • CS 136 - Dizajn algoritma i apstrakcija podataka
  • MATEMATIKA 135 - Algebra
  • MATEMATIKA 136 - Linearna algebra 1
  • MATEMATIKA 137 - račun 1
  • MATEMATIKA 138 - račun 2
  • Plus nekoliko izbornih predmeta

Softversko inženjerstvo

  • CS 137 - Načela programiranja
  • CS 138 - Apstrakcija i primjena podataka
  • MATEMATIKA 115 - Linearna algebra za inženjerstvo
  • MATEMATIKA 117 - Račun 1 za inženjerstvo
  • MATEMATIKA 119 - Račun 2 za inženjerstvo
  • MATEMATIKA 135 - Algebra za počasnu matematiku
  • ECE 105 - Fizika elektrotehnike 1
  • ECE 106 - Električnost i magnetizam
  • ECE 124 - Digitalni krugovi i sustavi
  • ECE 140 - Linearni krugovi
  • SE 101 - Metode softverskog inženjerstva

Kao što vidite, i tečajevi prve godine prilično su slični. Oboje pokrivaju nekoliko temeljnih tečajeva računarstva i nekoliko tečajeva matematike iz linearne algebre i računa.

Jedina glavna razlika je u tome što softversko inženjerstvo ima dodatne fizičke i elektrotehničke komponente, dok računalne znanosti imaju još nekoliko izbornih predmeta.

Tečajevi nakon prve godine:

Što kažete na obavezne i izborne predmete nakon prve godine? Pogledajmo ovdje nekoliko primjera:

Računarstvo:

  • MATEMATIKA 239 Uvod u kombinatoriku
  • STATISTIKA 230 Vjerojatnost
  • STATISTIKA 231 Statistika
  • CS 240 Strukture podataka i upravljanje podacima
  • CS 241 Temelji sekvencijalnih programa
  • CS 245 Logika i računanje
  • CS 246 Objektno orijentirani razvoj softvera <- nije potreban za fakultete softverskog inženjerstva
  • CS 251 Organizacija i dizajn računala
  • CS 341 Algoritmi
  • CS 350 operativni sustavi
  • Uz to, nekoliko izbornih predmeta iz informatike

Softversko inženjerstvo:

  • CHE 102 Kemija za inženjere
  • ECE 222 digitalna računala (uključuje montažni jezik)
  • ECE 358 Računalne mreže
  • MATEMATIKA 213 Napredna matematika za softverske inženjere
  • MATEMATIKA 239 Uvod u kombinatoriku
  • STAT 206 Statistika za softversko inženjerstvo
  • MSCI 261 Inženjerska ekonomija: Financijski menadžment za inženjere
  • CS 241 Temelji sekvencijalnih programa
  • CS 240 Strukture podataka i upravljanje podacima
  • CS 247 Principi softverskog inženjerstva <- nisu potrebni za smjerove informatike
  • CS 341 Algoritmi
  • CS 349 Korisničko sučelje <- nije potrebno za smjerove informatike
  • CS 343 Istodobno i paralelno programiranje <- nije potrebno za smjerove informatike
  • CS 348 Uvod u upravljanje bazama podataka
  • SE 212 Logika i računanje
  • Operativni sustavi SE 350
  • SE 465 Ispitivanje softvera i osiguranje kvalitete
  • SE 464 Dizajn i arhitekture softvera
  • SE 463 Specifikacija i analiza softverskih zahtjeva
  • Projekt dizajna SE 490
  • Uz to, nekoliko izbornih predmeta iz informatike i elektrotehnike

Dao sam vam PUNO informacija koje ste ovdje probavili. Ali ovdje je moj sažetak:

Što se tiče zahtjeva u matematici i statistici, računarstvo i softversko inženjerstvo gotovo su identični. Obuhvaćaju kombinatoriku, vjerojatnost i statistiku.

Slični su i osnovni zahtjevi računalne znanosti, koji se protežu od algoritama, struktura podataka i operativnih sustava.

Ključna razlika je u tome što:

  • Softversko inženjerstvo ima više zahtjeva u osnovama elektrotehnike i softverskog inženjerstva, kao što su ispitivanje softvera, dizajn i specifikacija softverskih zahtjeva.
  • Računarstvo omogućuje više izbornih predmeta na višim tečajevima informatike. Možete birati između širokog spektra tema poput sigurnosti, osnova softverskog inženjerstva, računalnog vida, strojnog učenja i upravljanja bazama podataka.

Dakle, koju smjeru biste trebali odabrati?

Mislim da to uglavnom ovisi o vašim željama. Ukratko:

  • Trebali biste odabrati Računarstvo ako volite matematiku, logiku ili ako želite ući u specijalizirano područje u CS-u, poput umjetne inteligencije, strojnog učenja, sigurnosti ili grafike.
  • Trebali biste odabrati Softversko inženjerstvo ako vas više zanima praktični pristup i ako želite naučiti cjelokupni životni ciklus kako se softver gradi i održava.

Ali pričekajte - što je to onda? Koji je smjer bolji ako želite biti softverski inženjer?

Evo mog mišljenja. Na ovom određenom sveučilištu (University of Waterloo), s ovim određenim skupom programskih zahtjeva, računalne znanosti je bolji smjer ako želite biti softverski inženjer.

Samo radi jednostavnosti, pretpostavimo da se nadate da ćete dobiti jedan najbolje plaćeni posao (~ 100.000 USD godišnje) kao softverski inženjer u Sjevernoj Americi. Ti su poslovi obično u velikim softverskim tvrtkama (mislite na Microsoft, Google, Amazon itd.) Ili u srednjim tvrtkama s velikim rastom (mislite na Dropbox, Lyft, Snapchat, Pinterest itd.).

Tipično je ono što traže od kandidata za softverskog inženjera sposobnost pisanja čvrstog koda i izrade zanimljivih projekata, kao i osnova informatike, uključujući strukture podataka i algoritme.

Mislim da je najbolji način za kultiviranje ovog skupa vještina brzo učenje osnova informatike i trošenje vlastitog vremena vježbajući rješavanje problema i pisanje koda.

Na temelju kurikuluma za softversko inženjerstvo i na temelju toga koliko su studenti inženjerstva uopće zauzeti, mislim da bi bilo teže to učiniti sa softverskim inženjerstvom nego s računalnim znanostima.

Još jedna prednost ovog određenog programa Računalnih znanosti je što omogućuje više izbornih predmeta iz informatike. To je izvrsno i jer ćete, ovisno o potražnji na tržištu rada, moći prilagoditi svoje tečajeve. Na primjer, ako se traži razvoj mobilne aplikacije, to možete naučiti. A ako se traži paralelno računanje, možete se usredotočiti na to.

Siguran sam da postoje neke koristi od učenja osnova softverskog inženjerstva (upravljanje projektima, dizajn, testiranje itd.). Ali osobno bih radije uzeo fleksibilnost u odnosu na unaprijed definirani skup vještina. Zbog toga smatram da je Računalstvo bolje da postanete softverski inženjer s ovim nastavnim programom.

Naravno, to je samo moje mišljenje, a ovo je samo jedno određeno sveučilište. Volio bih čuti za vaše mišljenje i kakvo je bilo vaše iskustvo ako ste se bavili ili računalstvom ili softverskim inženjerstvom. Obavijestite me u komentaru ispod.

Nekoliko napomena

Napomena 1: Različita sveučilišta imaju različite zahtjeve za ova dva smjera. Ovaj bi članak trebao biti dobra polazna točka, ali svejedno biste trebali pogledati programske zahtjeve na sveučilištu koje želite pohađati.

Napomena 2: Neka sveučilišta nemaju ni smjer softverskog inženjerstva. Primjerice, Sveučilište Britanske Kolumbije u Vancouveru ima diplome informatike i računalnog inženjerstva, ali ne i softverskog inženjerstva. Ali oni imaju koncentraciju softverskog inženjerstva unutar svog programa Računarstva, kao i u Računalnom inženjerstvu.

Ako sveučilište na koje želite ići nema fakultet softverskog inženjerstva, išao bih na Computer Science ako želite postati programer softvera. Računalno inženjerstvo više je usredotočeno na hardver nego na računalnu znanost ili softversko inženjerstvo, pa je manje izravno povezano s poslom tipičnog programera.

I evo glavnih izvora koje sam koristio:

  • Računalne znanosti u Waterloou
  • Softversko inženjerstvo u Waterloou

Hvala na čitanju i sretno u odabiru sveučilišta i vašeg smjera! ?