Datorzinātnes VS programmatūras inženierija - kurš majors jums ir vislabākais?

Sveiki visiem! Mani sauc YK, un es šobrīd vadu CS Dojo, programmēšanas izglītības YouTube kanālu, kurā ir vairāk nekā 200 000 abonentu. Es biju arī Google programmatūras izstrādātājs.

Divi no visbiežāk uzdotajiem jautājumiem, ko mana auditorija man uzdod, ir:

"Kāda ir atšķirība starp datorzinātņu un programmatūras inženierijas galvenajiem uzņēmumiem?"

Un…

"Vai man vajadzētu izvēlēties datorzinātnes vai programmatūras inženieriju, ja vēlos kļūt par programmatūras inženieri?"

Šajā rakstā es uz to atbildēšu un sniegšu jums savu ātro analīzi par šiem lielajiem uzņēmumiem.

Ātrs pārskats par šiem diviem galvenajiem uzņēmumiem

  • Datorzinātne ir pētījums par datoru darbību, galvenokārt no teorētiskā un matemātiskā viedokļa.
  • Jums vajadzētu izvēlēties Datorzinātnes, ja jums patīk matemātika, loģika vai vēlaties iekļūt specializētā CS jomā, piemēram, mākslīgā intelekta, mašīnmācīšanās, drošības vai grafikas jomā.
  • Programmatūras inženierija ir pētījums par to, kā tiek veidotas programmatūras sistēmas, ieskaitot tādas tēmas kā projektu vadība, kvalitātes nodrošināšana un programmatūras testēšana.
  • Jums vajadzētu izvēlēties programmatūras inženieriju, ja jūs vairāk interesē praktiskā pieeja un ja vēlaties uzzināt vispārējo programmatūras veidošanas un uzturēšanas dzīves ciklu.
  • Gan datorzinātnēs, gan programmatūras inženierijā tiek mācīti programmēšanas un datorzinātnes pamati, tāpēc jūs varat izvēlēties vienu no tiem, lai kļūtu par programmatūras izstrādātāju.

Lai saprastu atšķirību starp datorzinātnēm un programmatūras inženierzinātnēm, apskatīsim viņu attiecīgo mācību programmu Vaterlo universitātē Kanādā.

Es tam izvēlējos Vaterlo universitāti, jo tajā ir viena no labākajām datorzinātņu programmām Ziemeļamerikā.

Darba iespējas

Vispirms salīdzināsim to darbu un prakses veidus, kurus varat iegūt, izmantojot katru programmu.

Par laimi, Vaterlo universitātes vietnē ir sniegti vairāki piemēri.

Katram galvenajam ir daži no absolventu nosaukumiem un viņu darba vietas:

Datorzinātne

  • Tīmekļa izstrādātājs / arhitekts, Steele grupa
  • Programmētājs, Harry Rosen Inc.
  • Mobile / Cloud Developer, Clearbridge Associates Limited
  • Programmatūras inženierija, General Dynamics Canada
  • Programmatūras izstrādes inženierija, Microsoft
  • Veikls inženieris, galvenā laboratorija
  • Biznesa analītiķis, Kanādas Riepu korporācija
  • Izstrādātāja advokāts, Google
  • Produktu vadītājs, Dropbox

Programmatūras inženierijas

  • Programmatūras izstrādātājs, Tagged Inc.
  • Programmatūras izstrādātājs, IBM Canada
  • Programmatūras vadītājs, Arius Software Corporation
  • Programmatūras inženieris, VistaPrint ASV
  • Programmatūras inženieris, Harris Corporation
  • Programmatūras izstrādātājs, Accenture Inc.
  • Tehniskais produktu vadītājs - programmatūras projektēšana un izstrāde, NexJ Systems Inc
  • Konsultants, PureFacts Financial Solutions
  • Īstenošanas konsultants, Desire2Learn

Kā redzat, nav lielas atšķirības starp iegūto darbu veidiem.

Pēc datorzinātnes vai programmatūras inženierijas grāda iegūšanas visbiežāk darba beidzēji ir programmatūras izstrādātājs vai programmatūras inženieris.

Ir arī citas saistītās iespējas, piemēram, produktu vadītājs, kvalitātes analītiķis un tehnoloģiju konsultants. Jūsu iespējas būs atkarīgas no konkrētā prasmju kopuma.

Pirmā kursa kursi:

Tagad apskatīsim katras programmas nepieciešamos kursus. Vispirms salīdzināsim dažus kursus, kas jums jāiziet pirmajā gadā.

Datorzinātne

  • CS 135 - Funkcionālo programmu projektēšana
  • CS 136 - algoritmu projektēšana un datu apkopošana
  • MATH 135 - algebra
  • MATH 136 - lineārā algebra 1
  • MATĒ 137 - 1. aprēķins
  • MATH 138 - 2. aprēķins
  • Plus daži izvēles

Programmatūras inženierijas

  • CS 137 - Programmēšanas principi
  • CS 138 - datu ieguve un ieviešana
  • MATH 115 - lineārā algebra inženierzinātnēm
  • MATH 117 - 1. aprēķins inženierzinātnēm
  • MATH 119 - 2. aprēķins inženierzinātnēm
  • MATH 135 - matemātikas izcilnieku algebra
  • ECE 105 - elektrotehnikas fizika 1
  • ECE 106 - Elektrība un magnētisms
  • ECE 124 - Digitālās shēmas un sistēmas
  • ECE 140 - lineārās ķēdes
  • SE 101 - Programmatūras inženierijas metodes

Kā redzat, arī pirmā gada kursi ir diezgan līdzīgi. Viņi abi aptver dažus fundamentālus datorzinību kursus un dažus matemātikas kursus lineārajā algebrā un aprēķinā.

Vienīgā būtiskā atšķirība ir tā, ka programmatūras inženierijai ir papildu fizikas un elektrotehnikas komponenti, savukārt datorzinātnei ir vēl dažas izvēles iespējas.

Kursi pēc pirmā gada:

Kā būtu ar obligātajiem un izvēles kursiem pēc pirmā gada? Apskatīsim vairākus piemērus šeit:

Datorzinātne:

  • MATH 239 Ievads kombinatorikā
  • STAT 230 Varbūtība
  • STAT 231 Statistika
  • CS 240 datu struktūras un datu pārvaldība
  • CS 241 Secīgu programmu pamati
  • CS 245 Loģika un skaitļošana
  • CS 246 Objektorientēta programmatūras izstrāde <- nav nepieciešama programmatūras inženierijas galvenajiem uzņēmumiem
  • CS 251 Datoru organizācija un dizains
  • CS 341 algoritmi
  • CS 350 operētājsistēmas
  • Turklāt vairākas informātikas izvēles iespējas

Programmatūras inženierijas:

  • CHE 102 Ķīmija inženieriem
  • ECE 222 digitālie datori (ietver montāžas valodu)
  • ECE 358 datortīkli
  • MATH 213 Advanced Mathematics programmatūras inženieriem
  • MATH 239 Ievads kombinatorikā
  • STAT 206 Programmatūras inženierijas statistika
  • MSCI 261 Inženierekonomika: Inženieru finanšu vadība
  • CS 241 Secīgu programmu pamati
  • CS 240 datu struktūras un datu pārvaldība
  • CS 247 Programmatūras inženierijas principi <- nav nepieciešami datorzinātņu maģistrantiem
  • CS 341 algoritmi
  • CS 349 lietotāja saskarnes <- nav nepieciešama datorzinātņu maģistrantiem
  • CS 343 Vienlaicīga un paralēla programmēšana <- nav nepieciešama datorzinātņu maģistrantiem
  • CS 348 Ievads datu bāzu pārvaldībā
  • SE 212 Loģika un skaitļošana
  • SE 350 operētājsistēmas
  • SE 465 Programmatūras testēšana un kvalitātes nodrošināšana
  • SE 464 Programmatūras projektēšana un arhitektūra
  • SE 463 Programmatūras prasību specifikācija un analīze
  • SE 490 projektēšanas projekts
  • Turklāt dažas informātikas un elektrotehnikas izvēles iespējas

Es jums šeit esmu devis DAUDZ informācijas, ko sagremot. Bet šeit ir mans kopsavilkums:

Runājot par matemātikas un statistikas prasībām, datorzinātnes un programmatūras inženierija ir gandrīz identiskas. Tie aptver kombinatoriku, varbūtību un statistiku.

Arī datorzinātņu pamatprasības ir līdzīgas, sākot no algoritmiem, datu struktūrām un operētājsistēmām.

Galvenā atšķirība ir tā:

  • Programmatūras inženierijai ir vairāk prasību elektrotehnikā un programmatūras inženierijas pamatos, piemēram, programmatūras testēšanā, projektēšanā un programmatūras prasību specifikācijā.
  • Datorzinātne ļauj vairāk izvēles iespēju augstākā līmeņa datorzinātņu kursos. Jūs varat izvēlēties no plaša tematu klāsta, piemēram, drošība, programmatūras inženierijas pamati, datorvīzija, mašīnmācīšanās un datu bāzes pārvaldība.

Tātad, kuru maģistru vajadzētu izvēlēties?

Es domāju, ka tas galvenokārt ir atkarīgs no jūsu vēlmēm. Īsumā:

  • Jums vajadzētu izvēlēties Datorzinātnes, ja jums patīk matemātika, loģika vai vēlaties iekļūt specializētā CS jomā, piemēram, mākslīgā intelekta, mašīnmācīšanās, drošības vai grafikas jomā.
  • Jums vajadzētu izvēlēties programmatūras inženieriju, ja jūs vairāk interesē praktiskā pieeja un ja vēlaties uzzināt kopējo programmatūras veidošanas un uzturēšanas dzīves ciklu.

Bet pagaidiet - kas tad tas ir? Kurš no galvenajiem ir labāks, ja vēlaties būt programmatūras inženieris?

Šeit ir mans viedoklis. Šajā konkrētajā universitātē (Vaterlo universitāte), ņemot vērā šo konkrēto programmu prasību kopumu, datorzinātne ir labāka specialitāte, ja vēlaties būt programmatūras inženieris.

Vienkāršības labad pieņemsim, ka jūs cerat iegūt vienu vislabāk apmaksātu darbu (~ 100 000 USD gadā / gadā) kā programmatūras inženieris Ziemeļamerikā. Šīs darba vietas parasti ir lielos programmatūras uzņēmumos (domāju, ka Microsoft, Google, Amazon utt.) Vai vidēja lieluma, strauji augošos uzņēmumos (domāju, ka Dropbox, Lyft, Snapchat, Pinterest utt.).

Parasti tas, ko viņi meklē programmatūras inženiera kandidātā, ir spēja rakstīt cieto kodu un veidot interesantus projektus, kā arī datorzinātņu pamati, tostarp datu struktūras un algoritmi.

Es domāju, ka labākais veids, kā attīstīt šo prasmju kopumu, ir ātri apgūt datorzinātņu pamatus un pats pavadīt laiku, praktizējot problēmu risināšanu un koda rakstīšanu.

Pamatojoties uz programmatūras inženierijas mācību programmu un uz to, cik inženierzinātņu studenti parasti ir aizņemti, es domāju, ka to būtu grūtāk izdarīt ar programmatūras inženieriju nekā ar datorzinātnēm.

Vēl viens šīs konkrētās datorzinātņu programmas ieguvums ir tas, ka tā ļauj vairāk informātikas izvēles iespēju. Tas ir lieliski, jo atkarībā no tā, kas ir pieprasīts darba tirgū, jūs varēsiet pielāgot savus kursus. Piemēram, ja ir pieprasīta mobilo lietotņu izstrāde, to varat uzzināt. Un, ja paralēla skaitļošana ir pieprasīta, tā vietā varat koncentrēties uz to.

Esmu pārliecināts, ka programmatūras inženierijas pamatu apguvei ir dažas priekšrocības (projektu vadība, dizains, testēšana utt.). Bet es personīgi labprātāk izvēlētos elastību attiecībā uz iepriekš noteiktu prasmju kopumu. Tāpēc es domāju, ka datorzinātne ir labāka specialitāte, lai kļūtu par programmatūras inženieri ar šo konkrēto mācību programmu.

Protams, tas ir tikai mans viedoklis, un šī ir tikai viena konkrēta universitāte. Es labprāt uzzinātu par jūsu viedokli un to, kāda bija jūsu pieredze, ja esat apguvis datorzinātnes vai programmatūras inženieriju. Lūdzu, paziņojiet man to komentārā zemāk.

Dažas piezīmes

1. piezīme: Dažādām universitātēm ir atšķirīgas prasības šiem diviem maģistrantiem. Šim rakstam vajadzētu būt labam sākumpunktam, taču jums tomēr vajadzētu apskatīt programmas prasības tajā universitātē, kurā vēlaties apmeklēt.

2. piezīme: Dažās universitātēs nav pat programmatūras inženierijas specialitātes. Piemēram, Britu Kolumbijas universitātē Vankūverā ir datorzinātņu un datortehnikas grādi, bet ne programmatūras inženierija. Bet viņiem ir programmatūras inženierijas koncentrācija viņu datorzinātņu programmā, kā arī datortehnikā.

Ja universitātē, kurā jūs interesējaties, nav programmatūras inženierijas specialitātes, es gribētu iet kopā ar datorzinātnēm, ja vēlaties kļūt par programmatūras izstrādātāju. Datortehnika ir vairāk vērsta uz aparatūru nekā datorzinātne vai programmatūras inženierija, tāpēc tā ir mazāk tieši saistīta ar tipisku programmatūras izstrādātāja darbu.

Šeit ir galvenie izmantotie avoti:

  • Datorzinātnes Vaterlo
  • Programmatūras inženierija Vaterlo

Paldies par lasīšanu un veiksmi, izvēloties universitāti un savu specialitāti! ?