Računalništvo VS Programsko inženirstvo - Katera smer je najboljša za vas?

Hej vsi! Moje ime je YK in trenutno vodim CS Dojo, YouTubov kanal za izobraževanje o programiranju z več kot 200.000 naročniki. V preteklosti sem bil tudi razvijalec programske opreme pri Googlu.

Dve najpogostejši vprašanji, ki mi ju zastavlja občinstvo, sta:

"Kakšna je razlika med smermi računalništva in programskega inženirstva?"

In ...

"Ali naj izberem računalništvo ali programsko inženirstvo, če želim postati programski inženir?"

V tem članku bom odgovoril na to vprašanje in vam dal svojo hitro analizo teh predmetov.

Kratek pregled teh dveh predmetov

  • Računalništvo je preučevanje delovanja računalnikov, večinoma s teoretičnega in matematičnega vidika.
  • Izberite Računalništvo, če imate radi matematiko, logiko ali če želite priti na specializirano področje v CS, kot so umetna inteligenca, strojno učenje, varnost ali grafika.
  • Programsko inženirstvo preučuje, kako se gradijo programski sistemi, vključno s temami, kot so vodenje projektov, zagotavljanje kakovosti in testiranje programske opreme.
  • Izberite programsko inženirstvo, če vas bolj zanima praktični pristop in če se želite naučiti celotnega življenjskega cikla gradnje in vzdrževanja programske opreme.
  • Tako računalništvo kot programsko inženirstvo poučujeta osnove programiranja in računalništva, zato lahko za razvijalca programske opreme izberete katero koli.

Da bi razumeli razliko med smermi računalništva in programskega inženiringa, si oglejmo njihov učni načrt na univerzi Waterloo v Kanadi.

Za to sem izbral University of Waterloo, ker ima enega najboljših programov računalništva v Severni Ameriki.

Možnosti za zaposlitev

Najprej primerjajmo vrste delovnih mest in pripravništva, ki jih lahko dobite v posameznem programu.

Na srečo na spletnem mestu University of Waterloo najdete nekaj primerov.

Tukaj je nekaj naslovov, ki jih imajo alumni in kje delujejo:

Računalništvo

  • Spletni razvijalec / arhitekt, skupina Steele
  • Programer, Harry Rosen Inc.
  • Razvijalec za mobilne / oblake, Clearbridge Associates Limited
  • Programsko inženirstvo, General Dynamics Kanada
  • Inženiring za razvoj programske opreme, Microsoft
  • Agilni inženir, Pivotal Labs
  • Poslovni analitik, kanadska korporacija za pnevmatike
  • Zagovornik razvijalcev, Google
  • Vodja izdelkov, Dropbox

Programsko inženirstvo

  • Razvijalec programske opreme, Tagged Inc.
  • Razvijalec programske opreme, IBM, Kanada
  • Upravitelj programske opreme, Arius Software Corporation
  • Programski inženir, VistaPrint ZDA
  • Programski inženir, Harris Corporation
  • Razvijalec programske opreme, Accenture Inc.
  • Tehnični vodja izdelkov - Oblikovanje in razvoj programske opreme, NexJ Systems Inc.
  • Svetovalec, PureFacts Financial Solutions
  • Svetovalec za izvedbo, Desire2Learn

Kot lahko vidite, ni velike razlike med vrstami delovnih mest, ki jih lahko dobite.

Diplomanti, ki so najpogostejša po diplomi iz računalništva ali programskega inženirstva, so razvijalci programske opreme ali programski inženir.

Obstajajo tudi druge sorodne možnosti, kot so Product Manager, QA Analyst in Technology Consultant. Vaše možnosti bodo odvisne od vašega določenega nabora spretnosti.

Prvoletni tečaji:

Zdaj pa si oglejmo zahtevane tečaje vsakega programa. Najprej primerjajmo nekaj tečajev, ki bi jih morali opraviti v prvem letniku.

Računalništvo

  • CS 135 - Oblikovanje funkcionalnih programov
  • CS 136 - Oblikovanje algoritmov in abstrakcija podatkov
  • MATEMATIKA 135 - Algebra
  • MATEMATIKA 136 - Linearna algebra 1
  • MATEMATIKA 137 - Račun 1
  • MATEMATIKA 138 - račun 2
  • Plus nekaj izbirnih predmetov

Programsko inženirstvo

  • CS 137 - Načela programiranja
  • CS 138 - Črpanje in izvedba podatkov
  • MATEMATIKA 115 - Linearna algebra za inženirstvo
  • MATEMATIKA 117 - Račun 1 za inženirstvo
  • MATEMATIKA 119 - Račun 2 za inženirstvo
  • MATEMATIKA 135 - Algebra za matematiko
  • ECE 105 - Fizika elektrotehnike 1
  • ECE 106 - Elektrika in magnetizem
  • ECE 124 - Digitalna vezja in sistemi
  • ECE 140 - Linearna vezja
  • SE 101 - Metode programskega inženirstva

Kot lahko vidite, so tudi tečaji v prvem letniku dokaj podobni. Oba pokrivata nekaj temeljnih tečajev računalništva in nekaj tečajev matematike iz linearne algebre in računa.

Edina večja razlika je v tem, da ima programsko inženirstvo dodatne fizikalne in elektrotehnične komponente, računalništvo pa nekaj dodatnih izbirnih predmetov.

Tečaji po prvem letniku:

Kaj pa obvezni in izbirni predmeti po prvem letniku? Oglejmo si nekaj primerov tukaj:

Računalništvo:

  • MATEMATIKA 239 Uvod v kombinatoriko
  • STAT 230 Verjetnost
  • STATISTIKA 231 Statistika
  • CS 240 Podatkovne strukture in upravljanje podatkov
  • CS 241 Temelji zaporednih programov
  • CS 245 Logika in računanje
  • CS 246 Objektno usmerjen razvoj programske opreme <- ni potreben pri programih za programsko inženirstvo
  • CS 251 Računalniška organizacija in oblikovanje
  • CS 341 Algoritmi
  • CS 350 operacijski sistemi
  • Poleg tega več izbirnih predmetov za računalništvo

Programsko inženirstvo:

  • CHE 102 Kemija za inženirje
  • ECE 222 Digital Computers (vključuje montažni jezik)
  • ECE 358 Računalniška omrežja
  • MATH 213 Napredna matematika za programske inženirje
  • MATEMATIKA 239 Uvod v kombinatoriko
  • STAT 206 Statistika za programsko inženirstvo
  • MSCI 261 Inženirska ekonomija: finančno upravljanje za inženirje
  • CS 241 Temelji zaporednih programov
  • CS 240 Podatkovne strukture in upravljanje podatkov
  • CS 247 Načela programskega inženirstva <- ni potrebno za smeri računalništva
  • CS 341 Algoritmi
  • CS 349 Uporabniški vmesniki <- ni potreben za smeri računalništva
  • CS 343 Sočasno in vzporedno programiranje <- ni potrebno za računalniške smeri
  • CS 348 Uvod v upravljanje baz podatkov
  • SE 212 Logika in računanje
  • Operacijski sistemi SE 350
  • SE 465 Preizkušanje programske opreme in zagotavljanje kakovosti
  • SE 464 Oblikovanje in arhitektura programske opreme
  • SE 463 Specifikacija in analiza zahtev za programsko opremo
  • Projektni projekt SE 490
  • Plus nekaj izbirnih predmetov za računalništvo in elektrotehniko

Tu sem vam dal VELIKO informacij za prebavo. Tu pa je moj povzetek:

Ko gre za zahteve iz matematike in statistike, sta računalništvo in programska tehnika skoraj enaki. Obsegajo kombinacijo, verjetnost in statistiko.

Podobne so tudi osnovne zahteve računalništva, ki segajo med algoritme, podatkovne strukture in operacijske sisteme.

Ključna razlika je v tem:

  • Programsko inženirstvo ima več zahtev v elektrotehniki in osnovah programskega inženirstva, kot so preskušanje programske opreme, oblikovanje in specifikacije zahtev za programsko opremo.
  • Računalništvo omogoča več izbirnih predmetov na tečajih računalništva na višji ravni. Izbirate lahko med številnimi temami, kot so varnost, osnove programskega inženiringa, računalniški vid, strojno učenje in upravljanje baz podatkov.

Torej, katero smer bi morali izbrati?

Mislim, da je to odvisno predvsem od vaših želja. V kratkem:

  • Izberite Računalništvo, če imate radi matematiko, logiko ali če želite priti na specializirano področje CS, kot so umetna inteligenca, strojno učenje, varnost ali grafika.
  • Izberite programsko inženirstvo, če vas bolj zanima praktični pristop in če se želite naučiti celotnega življenjskega cikla gradnje in vzdrževanja programske opreme.

A počakaj - kaj je potem? Katera smer je boljša, če želite biti programski inženir?

Tu je moje mnenje. Na tej univerzi (University of Waterloo) je s temi posebnimi programskimi zahtevami računalništvo bolj pomembno, če želite biti programski inženir.

Samo zaradi poenostavitve predpostavimo, da upate, da boste kot severnoameriški programski inženir dobili eno najbolje plačano delovno mesto (~ 100.000 USD na leto). Ta delovna mesta so običajno v velikih podjetjih s programsko opremo (mislite na Microsoft, Google, Amazon itd.) Ali v srednje velikih, hitro rastočih podjetjih (mislite, Dropbox, Lyft, Snapchat, Pinterest itd.).

Običajno pri kandidatu za programskega inženirja iščejo sposobnost pisanja trdne kode in izdelavo zanimivih projektov, pa tudi osnove računalništva, vključno s podatkovnimi strukturami in algoritmi.

Menim, da je najboljši način za gojenje tega nabora spretnosti hitro učenje osnov računalništva in poraba lastnega časa za vadbo reševanja problemov in pisanje kode.

Glede na učni načrt za programsko inženirstvo in glede na to, kako na splošno so študentje inženirjev na splošno, mislim, da bi bilo to težje narediti s programskim inženirstvom kot z računalništvom.

Druga prednost tega programa računalništva je, da omogoča več izbirnih predmetov računalništva. Tudi to je super, saj boste lahko svoje tečaje prilagodili glede na povpraševanje na trgu dela. Če na primer povprašujete po razvoju mobilne aplikacije, se tega lahko naučite. In če se zahteva vzporedno računalništvo, se lahko raje osredotočite na to.

Prepričan sem, da ima nekaj koristi pri učenju osnov programskega inženiringa (upravljanje projektov, načrtovanje, testiranje itd.). Toda osebno bi raje uporabil prilagodljivost glede na vnaprej določen nabor spretnosti. Zato menim, da je računalništvo boljše, če postanete programski inženir s tem učnim načrtom.

Seveda je to samo moje mnenje in to je samo ena posebna univerza. Rad bi slišal za vaše mnenje in kakšne so bile vaše izkušnje, če bi se izobraževali na področju računalništva ali programskega inženirstva. Sporočite mi v komentarju spodaj.

Nekaj ​​opomb

Opomba 1: Različne univerze imajo različne zahteve za ti dve smeri. Ta članek bi moral biti dobro izhodišče, vseeno pa si oglejte programske zahteve na univerzi, ki jo želite obiskati.

Opomba 2: Nekatere univerze nimajo niti predmeta programskega inženirstva. Univerza v Britanski Kolumbiji v Vancouvru ima na primer diplome iz računalništva in računalništva, ne pa tudi programskega inženirstva. Imajo pa koncentracijo programskega inženiringa tako v svojem programu računalništva kot tudi v računalniškem inženirstvu.

Če univerza, ki jo želite obiskati, nima predmeta programskega inženirstva, bi šel na področje računalništva, če želite postati razvijalec programske opreme. Računalniško inženirstvo je bolj kot računalništvo ali programsko inženirstvo osredotočeno na strojno opremo, zato je manj neposredno povezano z delom tipičnega razvijalca programske opreme.

Tu so glavni viri, ki sem jih uporabil:

  • Računalništvo na Waterloo
  • Programsko inženirstvo pri Waterloo

Hvala za branje in veliko sreče pri izbiri univerze in vašega predmeta! ?