Kompiuterių mokslo programinės įrangos inžinerija - koks specialistas jums tinka geriausiai?

Sveiki visi! Mano vardas YK, ir aš šiuo metu vadovauju „CS Dojo“, programavimo švietimo „YouTube“ kanalui, turinčiam daugiau nei 200 000 abonentų. Aš taip pat buvau „Google“ programinės įrangos kūrėjas.

Du dažniausi klausimai, kuriuos man klausia auditorija:

"Koks skirtumas tarp kompiuterių mokslo ir programinės įrangos inžinerijos?"

Ir…

„Jei norėčiau tapti programinės įrangos inžinieriumi, turėčiau pasirinkti kompiuterių mokslą ar programinės įrangos inžineriją?“

Šiame straipsnyje aš atsakysiu į tai ir pateiksiu jums savo pačių analizę apie šias pagrindines studijas.

Greita šių dviejų specialybių apžvalga

  • Kompiuterija yra kompiuterių darbo tyrimas, daugiausia iš teorinės ir matematinės perspektyvos.
  • Jei jums patinka matematika, logika ar norite patekti į specializuotą CS sritį, pvz., Dirbtinį intelektą, mašininį mokymąsi, saugumą ar grafiką, turėtumėte rinktis informatiką.
  • Programinės įrangos inžinerija yra tyrimas, kaip kuriamos programinės įrangos sistemos, įskaitant tokias temas kaip projektų valdymas, kokybės užtikrinimas ir programinės įrangos testavimas.
  • Turėtumėte pasirinkti programinės įrangos inžineriją, jei jus labiau domina praktinis požiūris ir norite sužinoti bendrą programinės įrangos kūrimo ir palaikymo gyvavimo ciklą.
  • Tiek kompiuterių mokslas, tiek programinės įrangos inžinerija moko programavimo ir informatikos pagrindų, todėl galite pasirinkti bet kurį iš jų, kad taptumėte programinės įrangos kūrėju.

Norėdami suprasti skirtumus tarp kompiuterių ir programinės įrangos inžinerijos, pažvelkime į jų atitinkamas programas Kanados Vaterlo universitete.

Tam pasirinkau Vaterlo universitetą, nes jame yra viena geriausių informatikos programų Šiaurės Amerikoje.

Darbo perspektyvos

Pirmiausia palyginkime darbo ir praktikos rūšis, kurias galite gauti per kiekvieną programą.

Laimei, Vaterlo universiteto svetainėje pateikiami keli pavyzdžiai.

Čia yra keletas absolventų titulų ir jų darbo vietų:

Kompiuterija

  • „Steele Group“ tinklo kūrėjas / architektas
  • Programuotojas, Harry Rosen Inc.
  • Mobilusis / debesų kūrėjas, „Clearbridge Associates Limited“
  • Programinės įrangos inžinerija, „General Dynamics Canada“
  • Programinės įrangos kūrimo inžinerija, „Microsoft“
  • Vikrus inžinierius, pagrindinės laboratorijos
  • Verslo analitikas, Kanados padangų korporacija
  • „Google“ kūrėjų advokatas
  • „Dropbox“ produktų vadovas

Programinės įrangos inžinerija

  • Programinės įrangos kūrėjas, „Tagged Inc.“
  • Programinės įrangos kūrėjas, IBM Kanada
  • Programinės įrangos vadybininkas, „Arius Software Corporation“
  • Programinės įrangos inžinierius, „VistaPrint USA“
  • „Harris Corporation“ programinės įrangos inžinierius
  • Programinės įrangos kūrėjas, „Accenture Inc.“
  • Techninis produktų vadovas - programinės įrangos dizainas ir plėtra, „NexJ Systems Inc.“
  • „PureFacts Financial Solutions“ konsultantas
  • Įgyvendinimo konsultantas, „Desire2Learn“

Kaip matote, nėra didelio skirtumo tarp darbo vietų, kurias galite gauti.

Dažniausiai darbą baigę asmenys gauna įgiję kompiuterių mokslų ar programinės įrangos inžinerijos laipsnį yra programinės įrangos kūrėjas arba programinės įrangos inžinierius.

Taip pat yra ir kitų susijusių galimybių, tokių kaip produktų vadybininkas, kokybės užtikrinimo analitikas ir technologijų konsultantas. Jūsų galimybės priklausys nuo konkretaus įgūdžių rinkinio.

Pirmo kurso kursai:

Dabar pažvelkime į kiekvienos programos reikalingus kursus. Pirmiausia palyginkime keletą kursų, kuriuos turėtum išklausyti pirmaisiais metais.

Kompiuterija

  • CS 135 - Funkcinių programų projektavimas
  • CS 136 - algoritmų projektavimas ir duomenų surinkimas
  • Motina 135 - algebra
  • 136 MATA - tiesinė algebra 1
  • MATH 137 - 1 skaičiavimas
  • MATA 138 - 2 skaičiavimas
  • Plius keli pasirenkamieji dalykai

Programinės įrangos inžinerija

  • CS 137 - Programavimo principai
  • CS 138 - duomenų surinkimas ir įgyvendinimas
  • MATH 115 - tiesinė inžinerijos algebra
  • MATH 117 - 1 skaičiavimas inžinerijai
  • MATH 119 - 2 skaičiavimas inžinerijai
  • MATH 135 - matematikos pagyrimo algebra
  • ECE 105 - Elektrotechnikos fizika 1
  • ECE 106 - Elektra ir magnetizmas
  • ECE 124 - skaitmeninės grandinės ir sistemos
  • ECE 140 - tiesinės grandinės
  • SE 101 - Programinės įrangos inžinerijos metodai

Kaip matote, pirmųjų metų kursai taip pat yra gana panašūs. Jie abu apima kelis pagrindinius informatikos kursus ir kelis matematikos kursus tiesine algebra ir skaičiavimais.

Vienintelis esminis skirtumas yra tas, kad programinės įrangos inžinerija turi papildomų fizikos ir elektrotechnikos komponentų, o kompiuterių mokslas turi dar keletą pasirenkamųjų dalykų.

Kursai po pirmųjų metų:

Kaip apie privalomus ir pasirenkamus kursus po pirmųjų metų? Pažvelkime į kelis pavyzdžius čia:

Kompiuterija:

  • MATH 239 Kombinatorikos įvadas
  • STAT 230 Tikimybė
  • STAT 231 Statistika
  • CS 240 duomenų struktūros ir duomenų valdymas
  • CS 241 Nuoseklių programų pagrindai
  • CS 245 logika ir skaičiavimas
  • CS 246 Objektinės programinės įrangos kūrimas <- nereikalingas programinės įrangos inžinerijos pagrindinėms įmonėms
  • CS 251 Kompiuterių organizavimas ir dizainas
  • CS 341 algoritmai
  • CS 350 operacinės sistemos
  • Be to, keletas informatikos pasirenkamųjų dalykų

Programinės įrangos inžinerija:

  • CHE 102 Chemija inžinieriams
  • ECE 222 skaitmeniniai kompiuteriai (įskaitant surinkimo kalbą)
  • ECE 358 kompiuterių tinklai
  • MATH 213 Išplėstinė matematika programinės įrangos inžinieriams
  • MATH 239 Kombinatorikos įvadas
  • STAT 206 Programinės įrangos inžinerijos statistika
  • MSCI 261 Inžinerinė ekonomika: Finansų valdymas inžinieriams
  • CS 241 Nuoseklių programų pagrindai
  • CS 240 duomenų struktūros ir duomenų valdymas
  • CS 247 Programinės įrangos inžinerijos principai <- nereikalingi didžiausioms kompiuterių mokslų įmonėms
  • CS 341 algoritmai
  • CS 349 vartotojo sąsajos <- nereikalingos didžiosioms kompiuterių mokslams
  • CS 343 Lygiagretusis ir lygiagretusis programavimas <- nereikalingas didžiausioms kompiuterių mokslams
  • CS 348 Duomenų bazių valdymo įvadas
  • SE 212 Logika ir skaičiavimas
  • SE 350 operacinės sistemos
  • SE 465 Programinės įrangos testavimas ir kokybės užtikrinimas
  • SE 464 Programinės įrangos projektavimas ir architektūra
  • SE 463 Programinės įrangos reikalavimų specifikacija ir analizė
  • SE 490 projektavimo projektas
  • Be to, keletas informatikos ir elektrotechnikos pasirenkamųjų dalykų

Aš čia jums daviau DAUG informacijos, kurią galite suvirškinti. Bet čia yra mano santrauka:

Kalbant apie matematikos ir statistikos reikalavimus, kompiuterių mokslas ir programinės įrangos inžinerija yra beveik identiški. Jie apima kombinatoriką, tikimybę ir statistiką.

Pagrindiniai kompiuterių mokslo reikalavimai taip pat yra panašūs, jie apima algoritmus, duomenų struktūras ir operacines sistemas.

Pagrindinis skirtumas yra tas, kad:

  • Programinės įrangos inžinerija turi daugiau reikalavimų elektros inžinerijai ir programinės įrangos inžinerijos pagrindams, pvz., Programinės įrangos testavimui, projektavimui ir programinės įrangos reikalavimų specifikacijoms.
  • Kompiuterija leidžia daugiau pasirenkamų dalykų aukštesnio lygio informatikos kursuose. Galite rinktis iš daugybės temų, tokių kaip saugumas, programinės įrangos inžinerijos pagrindai, kompiuterio matymas, mašininis mokymasis ir duomenų bazių valdymas.

Taigi, kurį specialybę turėtumėte pasirinkti?

Manau, kad tai daugiausia priklauso nuo jūsų pageidavimų. Trumpai:

  • Turėtumėte pasirinkti Kompiuteriją, jei jums patinka matematika, logika ar norite patekti į specializuotą CS sritį, pavyzdžiui, dirbtinį intelektą, mašininį mokymąsi, saugumą ar grafiką.
  • Turėtumėte pasirinkti programinės įrangos inžineriją, jei jus labiau domina praktinis požiūris ir norite sužinoti bendrą programinės įrangos kūrimo ir palaikymo gyvavimo ciklą.

Bet palaukite - o kas tada? Kuri specialybė geresnė, jei norite būti programinės įrangos inžinieriumi?

Čia yra mano nuomonė. Šiame konkrečiame universitete (Vaterlo universitete), atsižvelgiant į šį konkretų programos reikalavimų rinkinį, informatika yra geresnė specialybė, jei norite būti programinės įrangos inžinieriumi.

Tik dėl paprastumo tarkime, kad jūs tikitės gauti vieną geriausiai apmokamą darbą (~ 100 000 USD per metus) kaip programinės įrangos inžinierius Šiaurės Amerikoje. Šie darbai paprastai būna didelėse programinės įrangos įmonėse (pagalvokite apie „Microsoft“, „Google“, „Amazon“ ir kt.) Arba vidutinio dydžio, sparčiai augančiose įmonėse (pagalvokite apie „Dropbox“, „Lyft“, „Snapchat“, „Pinterest“ ir kt.).

Paprastai tai, ko jie ieško programinės įrangos inžinieriaus kandidate, yra galimybė rašyti tvirtą kodą ir kurti įdomius projektus, taip pat kompiuterijos mokslo pagrindai, įskaitant duomenų struktūras ir algoritmus.

Manau, kad geriausias būdas ugdyti šį įgūdžių rinkinį yra greitai išmokti informatikos pagrindų ir leisti savo laiką praktikuoti sprendžiant problemas ir rašant kodą.

Remdamasis programinės įrangos inžinerijos programa ir tuo, kaip inžinerijos studentai paprastai būna užimti, manau, kad tai būtų sunkiau padaryti naudojant programinės įrangos inžineriją nei su kompiuterių mokslu.

Kitas šios konkrečios informatikos programos privalumas yra tai, kad ji leidžia daugiau informatikos pasirenkamųjų dalykų. Tai taip pat puiku, nes priklausomai nuo to, ko reikia darbo rinkoje, galėsite pritaikyti savo kursus. Pvz., Jei mobiliųjų programų kūrimas yra paklausus, galite to išmokti. Ir jei lygiagretus skaičiavimas yra paklausus, vietoj to galite sutelkti dėmesį.

Esu įsitikinęs, kad yra keletas privalumų mokantis programinės įrangos inžinerijos pagrindų (projektų valdymas, projektavimas, testavimas ir kt.). Bet aš asmeniškai norėčiau perimti lankstumą dėl iš anksto nustatytų įgūdžių rinkinio. Todėl manau, kad informatika yra geresnė specialybė norint tapti programinės įrangos inžinieriumi pagal šią programą.

Žinoma, tai tik mano nuomonė, ir tai tik vienas konkretus universitetas. Norėčiau išgirsti apie jūsų nuomonę ir jūsų patirtį, jei įgijote kompiuterių mokslo arba programinės įrangos inžinerijos specialybę. Praneškite apie tai žemiau esančiame komentare.

Keli užrašai

1 pastaba: Skirtingi universitetai šiems dviem dalykams kelia skirtingus reikalavimus. Šis straipsnis turėtų būti geras atspirties taškas, tačiau vis tiek turėtumėte pasidomėti programos reikalavimais universitete, kuriame domitės.

2 pastaba: Kai kurie universitetai neturi net programinės įrangos inžinerijos specialybės. Pavyzdžiui, Britų Kolumbijos universitetas Vankuveryje turi kompiuterių mokslų ir kompiuterių inžinerijos laipsnius, tačiau neturi programinės įrangos inžinerijos. Tačiau jie turi programinės įrangos inžinerijos koncentraciją savo kompiuterių mokslo programoje, taip pat kompiuterių inžinerijoje.

Jei universitete, kuriame domitės, nėra programinės įrangos inžinerijos specialybės, norėčiau tapti programinės įrangos kūrėju, norėčiau eiti su kompiuterių mokslu. Kompiuterių inžinerija yra labiau orientuota į aparatinę įrangą nei į kompiuterių mokslą ar programinės įrangos inžineriją, todėl ji yra mažiau tiesiogiai susijusi su įprastu programinės įrangos kūrėjo darbu.

Čia yra pagrindiniai mano naudojami šaltiniai:

  • Kompiuterija Vaterlo mieste
  • Programinės įrangos inžinerija Vaterlo mieste

Ačiū, kad skaitėte, ir linkime sėkmės renkantis universitetą ir pagrindinį dalyką! ?