Datavitenskap VS programvareteknikk - Hvilken hovedtype er best for deg?

Hei alle sammen! Jeg heter YK, og jeg driver for tiden CS Dojo, en YouTube-kanal for programmeringsutdanning med over 200 000 abonnenter. Jeg var også tidligere programvareutvikler hos Google.

To av de vanligste spørsmålene publikum stiller meg er:

"Hva er forskjellen mellom hovedfag innen datavitenskap og programvareingeniør?"

Og…

"Bør jeg velge datavitenskap eller programvareteknikk hvis jeg vil bli programvareingeniør?"

I denne artikkelen vil jeg svare på dette og gi deg min egen raske analyse av disse hovedfagene.

En rask oversikt over disse to hovedfagene

  • Datavitenskap er studiet av hvordan datamaskiner fungerer, hovedsakelig fra det teoretiske og matematiske perspektivet.
  • Du bør velge datavitenskap hvis du liker matematikk, logikk, eller hvis du vil komme inn på et spesialisert felt innen CS som kunstig intelligens, maskinlæring, sikkerhet eller grafikk.
  • Software Engineering er studiet av hvordan programvaresystemer er bygget, inkludert emner som prosjektledelse, kvalitetssikring og programvaretesting.
  • Du bør velge Software Engineering hvis du er mer interessert i den praktiske tilnærmingen, og hvis du vil lære den generelle livssyklusen for hvordan programvare bygges og vedlikeholdes.
  • Både informatikk og programvareteknikk lærer grunnleggende om programmering og informatikk, slik at du kan velge en å bli programvareutvikler.

For å forstå forskjellen mellom hovedfag innen datavitenskap og programvareteknikk, la oss ta en titt på deres respektive læreplaner ved University of Waterloo i Canada.

Jeg valgte University of Waterloo for dette fordi det har et av de beste datavitenskapsprogrammene i Nord-Amerika.

Jobbmuligheter

La oss først sammenligne hvilke jobber og praksisplasser du kan få gjennom hvert program.

Heldigvis gir University of Waterloos nettside flere eksempler.

For hver major er her noen av titlene alumni har, og hvor de jobber:

Informatikk

  • Nettutvikler / arkitekt, The Steele Group
  • Programmerer, Harry Rosen Inc.
  • Mobil- / skyutvikler, Clearbridge Associates Limited
  • Programvareteknikk, General Dynamics Canada
  • Programvareutviklingsteknikk, Microsoft
  • Agile Engineer, Pivotal Labs
  • Forretningsanalytiker, Canadian Tire Corporation
  • Developer Advocate, Google
  • Produktsjef, Dropbox

Programvareteknikk

  • Programvareutvikler, Tagged Inc.
  • Programvareutvikler, IBM Canada
  • Programvaresjef, Arius Software Corporation
  • Programvareingeniør, VistaPrint USA
  • Programvareingeniør, Harris Corporation
  • Programvareutvikler, Accenture Inc.
  • Teknisk produktsjef - programvaredesign og utvikling, NexJ Systems Inc.
  • Konsulent, PureFacts Financial Solutions
  • Implementation Consultant, Desire2Learn

Som du kan se, er det ikke stor forskjell mellom hvilke typer jobber du kan få.

De vanligste jobbutdannede får etter å ha oppnådd sin datavitenskap eller programvareingeniørgrad er programvareutvikler eller programvareingeniør.

Det er også andre relaterte alternativer, for eksempel Product Manager, QA Analyst og Technology Consultant. Alternativene dine vil avhenge av ditt spesifikke ferdighetssett.

Førsteårskurs:

La oss nå ta en titt på hvert kurss obligatoriske kurs. La oss først sammenligne noen av kursene du trenger å ta det første året.

Informatikk

  • CS 135 - Designe funksjonelle programmer
  • CS 136 - Algoritmedesign og dataabstraksjon
  • MATH 135 - Algebra
  • MATH 136 - Lineær algebra 1
  • MATH 137 - Kalkulus 1
  • MATH 138 - Kalkulus 2
  • Pluss noen valgfag

Programvareteknikk

  • CS 137 - Programmeringsprinsipper
  • CS 138 - Dataabstraksjon og implementering
  • MATH 115 - Lineær algebra for ingeniørfag
  • MATH 117 - Kalkulus 1 for ingeniørfag
  • MATH 119 - Kalkulus 2 for ingeniørfag
  • MATH 135 - Algebra for Honours Mathematics
  • ECE 105 - Fysikk innen elektroteknikk 1
  • ECE 106 - Elektrisitet og magnetisme
  • ECE 124 - Digitale kretser og systemer
  • ECE 140 - Lineære kretser
  • SE 101 - Metoder for programvareteknikk

Som du kan se, er de første årskursene ganske like også. De dekker begge noen få grunnleggende informatikkurs, og noen få matematikkurs i lineær algebra og kalkulus.

Den eneste store forskjellen er at Software Engineering har tilleggskomponenter i fysikk og elektroteknikk, mens informatikk har noen flere valgfag.

Kurs etter første år:

Hva med obligatoriske og valgfrie kurs etter det første året? La oss se på flere eksempler her:

Informatikk:

  • MATH 239 Introduksjon til kombinatorikk
  • STAT 230 Sannsynlighet
  • STAT 231 Statistikk
  • CS 240 datastrukturer og datahåndtering
  • CS 241 Grunnlag for sekvensielle programmer
  • CS 245 Logikk og beregning
  • CS 246 Objektorientert programvareutvikling <- ikke nødvendig i programvareingeniørfag
  • CS 251 Dataarganisasjon og design
  • CS 341 Algoritmer
  • Operativsystemer CS 350
  • I tillegg er det flere valgfag innen informatikk

Programvareteknikk:

  • CHE 102 Kjemi for ingeniører
  • ECE 222 digitale datamaskiner (inkluderer monteringsspråk)
  • ECE 358 datanettverk
  • MATH 213 Avansert matematikk for programvareingeniører
  • MATH 239 Introduksjon til kombinatorikk
  • STAT 206 Statistikk for programvareteknikk
  • MSCI 261 Ingeniørøkonomi: Økonomistyring for ingeniører
  • CS 241 Grunnlag for sekvensielle programmer
  • CS 240 datastrukturer og datahåndtering
  • CS 247 Software Engineering Principles <- ikke påkrevd for datavitenskap
  • CS 341 Algoritmer
  • CS 349 brukergrensesnitt <- ikke påkrevd for datavitenskap
  • CS 343 Samtidig og parallell programmering <- ikke nødvendig for datavitenskap
  • CS 348 Introduksjon til databaseadministrasjon
  • SE 212 Logikk og beregning
  • SE 350 operativsystemer
  • SE 465 Programvaretesting og kvalitetssikring
  • SE 464 Programvaredesign og arkitektur
  • SE 463 Spesifikasjon og analyse av programvarekrav
  • SE 490 designprosjekt
  • I tillegg noen få valgfag innen informatikk og elektroteknikk

Jeg har gitt deg MYE informasjon å fordøye her. Men her er sammendraget mitt:

Når det gjelder kravene innen matematikk og statistikk, er datalogi og programvareteknikk nesten identiske. De dekker kombinatorikk, sannsynlighet og statistikk.

Kjernekravene til datavitenskap er også like, alt fra algoritmer, datastrukturer og operativsystemer.

Hovedforskjellen er at:

  • Programvareteknikk har flere krav innen grunnleggende elektroteknikk og programvareteknikk, for eksempel spesifikasjon av programvaretesting, design og programvarekrav.
  • Informatikk tillater flere valgfag på datalogikurs på høyere nivå. Du kan velge mellom et bredt spekter av emner som sikkerhet, programvareutvikling, datamaskinsyn, maskinlæring og databaseadministrasjon.

Så hvilken major bør du velge?

Jeg tror det mest avhenger av dine preferanser. Kort oppsummert:

  • Du bør velge datavitenskap hvis du liker matematikk, logikk, eller hvis du vil komme inn i et spesialisert felt innen CS som kunstig intelligens, maskinlæring, sikkerhet eller grafikk.
  • Du bør velge Software Engineering hvis du er mer interessert i den praktiske tilnærmingen, og hvis du vil lære den generelle livssyklusen for hvordan programvare bygges og vedlikeholdes.

Men vent - hva er det da? Hvilken hovedfag er bedre hvis du vil bli programvareingeniør?

Her er min mening. Ved dette bestemte universitetet (University of Waterloo), med dette spesielle settet med programkrav, er informatikk en bedre hovedfag hvis du vil være programvareingeniør.

Bare for enkelhets skyld, la oss anta at du håper å få en av de best betalte jobbene (~ $ 100.000 USD / år) som programvareingeniør i Nord-Amerika. Disse jobbene er vanligvis hos store programvareselskaper (tenk Microsoft, Google, Amazon, etc.) eller hos mellomstore selskaper med høy vekst (tenk Dropbox, Lyft, Snapchat, Pinterest, etc.).

Vanligvis er det de ser etter i en programvareingeniørkandidat, muligheten til å skrive solid kode og bygge interessante prosjekter, samt grunnleggende informatikk, inkludert datastrukturer og algoritmer.

Jeg tror den beste måten å dyrke dette ferdighetssettet på er å raskt lære grunnleggende informatikk, og bruke din egen tid på å løse problemer og skrive kode.

Basert på læreplanen for programvareteknikk og basert på hvor opptatt ingeniørstudenter har en tendens til å være generelt, tror jeg det ville være vanskeligere å gjøre dette med programvareteknikk enn med datavitenskap.

En annen fordel med dette spesielle datavitenskapsprogrammet er at det tillater flere datalogiske valgfag. Dette er også bra, avhengig av hva som er etterspurt i arbeidsmarkedet, vil du kunne justere kursene dine. Hvis for eksempel utvikling av mobilapper er etterspurt, kan du lære det. Og hvis parallell databehandling er etterspurt, kan du fokusere på det i stedet.

Jeg er sikker på at det er noen fordeler med å lære grunnleggende programvareteknikk (prosjektledelse, design, testing osv.). Men jeg vil personlig heller ta fleksibilitet over et forhåndsdefinert sett med ferdigheter. Derfor tror jeg datavitenskap er et bedre hovedfag for å bli programvareingeniør med akkurat denne læreplanen.

Selvfølgelig er det bare min mening, og dette er bare ett bestemt universitet. Jeg vil gjerne høre om din mening og hvordan opplevelsen din var hvis du tok hovedfag i enten datavitenskap eller programvareteknikk. Gi meg beskjed i en kommentar nedenfor.

Noen notater

Merknad 1: Ulike universiteter har forskjellige krav til disse to hovedfagene. Denne artikkelen skal være et godt utgangspunkt, men du bør likevel ta en titt på programkravene ved universitetet du er interessert i å delta på.

Merknad 2: Noen universiteter har ikke en gang en programvareingeniørfag. For eksempel har University of British Columbia i Vancouver datavitenskap og datateknikk, men ikke programvareteknikk. Men de har en programvareteknikk konsentrasjon innenfor datavitenskapsprogrammet, så vel som innen datateknikk.

Hvis universitetet du er interessert i å gå på, ikke har en programvareingeniørfag, vil jeg gå med datavitenskap hvis du vil bli programvareutvikler. Computer Engineering er mer fokusert på maskinvare enn Computer Science eller Software Engineering, så det er mindre direkte relatert til en typisk programvareutviklerjobb.

Og her er hovedkildene jeg brukte:

  • Informatikk på Waterloo
  • Programvareteknikk på Waterloo

Takk for at du leser, og lykke til med å velge universitet og hovedfag! ?