Što naučite na četverogodišnjem stupnju informatike

Nedavno sam napisao članak o tome trebate li diplomu informatike da biste dobili posao u tehnici. Mislio sam da bi pregledavanje mog prijepisa bilo korisno. Nadam se da će rasprava o onome što sam studirao pomoći ljudima. Želim da svi mogu donijeti najinformiraniju moguću odluku odabirući svoj put za tehnološku karijeru.

Izjava o odricanju odgovornosti : Ovo je napisano iz mog sjećanja na satove i iz perspektive mobilnog programera. Mnogo tema ovih predavanja moglo bi se specijalizirati i pretvoriti u karijeru. Dakle, svi su važni nekome na svijetu. Pišem iz svoje perspektive i sa stajališta nekoga tko je izabrao put karijere mobilnog programera.

Programiranje I, II

Ovo je bilo meso svega što sam naučio i pokrenuo me u programiranju. To su bili razredi na kojima ste naučili programirati. Prije polaska na tečajeve, uopće nisam ni programirao. Pokušao sam dobiti prednost, ali nisam stigao dalje od petlji.

Ova je klasa započela stvaranjem prazne datoteke i izradom kompajliranja u IDE-u (koristio sam Code :: Blocks). I sami smo radili sve do stvaranja vlastite borbene igre zasnovane na tekstu. Osvrćući se prema kodu koji sam napisao čini me neugodno. Od tada sam prevalio dug put. Evo repo-a ako se želite nasmijati (koristim samo datoteku main.cpp s 1063 retka koda).

Pa, što sam naučio ovdje? Želim reći sve. Ovi su tečajevi bili ludo vrijedni i stekli su mi barem 70% znanja potrebnog za profesionalni rad kao programer. Naučio sam if izjave, petlje, logička logika, stvaranje klasa, stvaranje struktura, stvaranje sučelja, polimorfizam, nasljeđivanje i još mnogo toga. Također se malo koristilo osnovnim strukturama podataka poput nizova i vektora.

Diskretne strukture u računalnim znanostima

Ova je klasa dodana u transkript kako bi se ljudi navikli na logičku logiku. Koji smo imali dolje u prva dva tjedna nastave. Na nesreću nas, nesuđenih učenika, ide prilično daleko kroz zečju rupu. Evo nekoliko tema koje je obuhvatio: „logika, operacije skupova i skupova, metode dokazivanja, rekurzivne definicije, kombinatorika i teorija grafova“.

Sve su to korisne stvari koje treba znati. Ali pitanje je u tome što su studente poticali da rano pohađaju ovaj sat. Obično uz Progamming I i II. A to su neke napredne teme. Sada bih se borio da koristim matematičke metode dokazivanja. I sjećam se da sam se tada stvarno mučio. Također, jednostavno sam morao proguglati što je kombinatorika pa ih očito ne koristim previše.

Činjenica je da se puno stvari koje su predavali na ovom tečaju nije činilo primjenjivim na karijeru informatike u vrijeme dok sam pohađao tečaj. Sada znam da logika, operacije skupova i skupova, rekurzivne definicije i teorija grafova mogu biti korisne. Ali to je samo s obzirom na to da ste programer nekoliko godina.

Ono što svakodnevno primjenjujem u svojoj trenutnoj karijeri je logika i možda postavljene operacije. Rekurzivne definicije i teorija grafova zaista su bile korisne samo za intervjue. Ali shvatite to s rezervom, jer sam mobilni programer. Razvoj stražnjeg računala vjerojatno bi teoriju grafova smatrao vrlo korisnom.

Strukture podataka

Ovaj je razred bio dobar. Vrlo dobro. Strukture podataka koriste se u cijelom računalnom programiranju i čine okosnicu većine koda koji ljudi pišu. Omogućuju nam pohranu podataka na način koji je koristan za programe koje pišemo. Sposobnost gledanja podataka i poznavanja najboljeg načina pohrane za vremenske i prostorne performanse vrlo je korisna vještina.

Naučio sam o nizovima, hrpama, povezanim popisima, dvostruko povezanim popisima, stablima, grafikonima, gomilama i svim različitim okusima ovih struktura podataka (poput samobalansirajućih stabala). Ova klasa ne samo da mi je pomogla da razumijem strukture podataka već mi je pomogla i da bolje organiziram podatke koje sam pohranjivao.

Ovaj je razred izveden na C jeziku što ga je učinilo još zanimljivijim. C može biti vrlo fin, ali i vrlo moćan ako se pravilno koristi. Morao sam biti vrlo oprezan s načinom na koji sam rasporedio i očistio memoriju, što je također bilo vrlo dobro za podučavanje o upravljanju memorijom.

U ovom je razredu bilo toliko korisnih stvari da je teško sve obuhvatiti. Nisam ni spomenuo činjenicu da je ovo ključna komponenta znanja za intervjuiranje u tehnici. Ako ste nesigurni u strukturi podataka, započnite s osmišljavanjem nekih osnova jer su one vrlo važne.

Analiza algoritama

Ovaj je čas bio donekle koristan. Algoritmi su korisni. Voze najbolji softver na svijetu i čine ih dovoljno moćnima da ostanu relevantni u modernom svijetu. Ali ovaj je razred imao nekih problema.

Najkorisniji dio ovoga bilo je učenje Big O notacije. Oznaka Big O omogućuje vam procjenu koda i razumijevanje njegove dobre vremenske i svemirske izvedbe. Općenito, ako mjerite izvedbu koda u tvrtki, upotrijebit ćete tajmer za praćenje vremena između interakcija. To vam omogućuje da vidite koliko dobro funkcionira vaš softver. To zahtijeva da napišete kod i nakon toga procijenite rezultate.

Oznaka Big O omogućuje vam procjenu performansi koda samo gledanjem koda. Ne želim se previše upuštati u ovo, ali ako ne znate za Big O notaciju, pročitajte ovaj post na blogu.

Stvarni algoritmi koje smo prošli nisu bili toliko korisni. Sjećam se samo problema s naprtnjačom i problema trgovačkog putnika. Također sam morao napisati kod za njih u grupama, što nije bilo sjajno jer je u mojoj grupi bila jedna osoba koja je prelazila ono za što je bio opseg. To je značilo da sam na kraju svaki put napisao konačni kod manje nego što bih želio.

Osnovno razumijevanje postojećih poznatih algoritama, njihova svrha i način njihove primjene može biti korisno (uglavnom za intervjuiranje). Ovdje je ključna velika oznaka O. To je vrlo korisno na poslu, a također je i nevjerojatno korisno za razgovore.

Web razvoj

Ovaj je razred imao najviše vještina koje su se izravno odnosile na posao u tehnici. Naučio sam o HTML-u, CSS-u, JQueryju, JavaScript-u, PHP-u i JSON-u. Doznao sam kako se zahtjev šalje s prednjeg kraja web stranice na stražnji kraj, kako se obrađuje na stražnjem kraju, a zatim se natrag šalje s odgovorom. Naučio sam kako stvoriti korisničko sučelje i kako komunicirati s podatkovnim slojem koji zatim stupa u interakciju s mrežom.

Na kraju predavanja izradio sam vlastitu web stranicu i preuzeo inicijativu za učenje Angular-a. Koristila sam Angular kako bi moja web stranica izgledala blještavo što je na kraju donijelo moju prvu praksu. Također sam stekao dobro razumijevanje kako web stranica radi ispod haube.

Samo je ovo znanje bilo sjajno, ali naučio sam i kako naučiti nepoznati jezik, okvir ili format podataka i s njim raditi u hodu. Puno sam guglao ove teme kako bih vidio konkretne primjere. Naučio sam kako koristiti dokumentaciju i internetsku istragu kako bih bolje razumio koncept koji sam trebao izravno primijeniti u kratkom vremenskom okviru. Ovo je ključna vještina biti vješt programer.

Uvod u baze podataka

Većinom sam upravo naučio SQL u ovoj klasi. Siguran sam da smo prošli neke druge koncepte poput izoštravanja i grupiranja, ali ih se ne sjećam. Ponekad koristim SQL na svom trenutnom poslu za pokretanje upita za podatke o događajima koje sam zabilježio. SQL će ili biti sastavni dio vašeg posla ili ćete ga jedva koristiti. Ako vam treba, naučite to i postanite stručnjak. Ako ne, onda ne brinite previše zbog toga.

Programsko inženjerstvo I, II

Također još jedan razred kojeg se zapravo ne mogu sjetiti. Vjerujem da smo u ovoj klasi prešli na hrpu širokih pojmova. Obrađivali smo metode upravljanja projektima Scrum i Waterfall. Prešli smo na testiranje i postoje sve različite vrste testiranja. Obradili smo neke koncepte upotrebljivosti i pristupačnosti. Zapravo je to bio samo ulov za koncepte koji se zapravo nisu uklapali u njihove vlastite razrede.

Zbog krpave prirode predavanja, zapravo nisam previše dobro internalizirao nijedan koncept. Bilo je dobro imati osnovni pregled obuhvaćenih koncepata, ali volio bih da se više vremena troši na važne pojedinačne teme poput testiranja.

Arhitektura računala i montažni jezik

Živo se sjećam ovog razreda. Ova klasa proučava način rada računala. Kako se računalne upute šalju i obrađuju računalne upute. Također smo morali napisati neki kôd u MASM-u, koji je skupni jezik koji vrlo usko komunicira sa strojnim kodom.

Većina programskih jezika koje sam koristila do pohađanja ove nastave bili su jezici visoke razine. Jezici visoke razine obično su bliži ljudskom jeziku nego strojni kod. MASM je vrlo blizu strojnom kodu i rekao bih da je bliži strojnom jeziku nego ljudskom jeziku.

Najvažniji dio ove klase je dobivanje ideje o tome što se događa s vašim kodom nakon što se prevede. Razumijevanje različitih logičkih jedinica u računalu i načina na koji one upravljaju kodom bilo je vrlo zanimljivo za naučiti.

Iz praktičnih razloga, mislim da ovaj čas nije bio presudan u doprinosu mojoj tehnološkoj karijeri. Dosad nisam koristio puno znanja koje sam stekao iz ovog razreda tijekom svoje karijere.

Operativni sustavi

Bit ću iskren, jako se teško prisjećam onoga što sam naučio u ovom razredu. Jedino čega se mogu sjetiti je izgradnja programa za razmjenu poruka koji je koristio programiranje soketa u C za komunikaciju. Također sam naučio o otvaranju datoteka i manipulaciji mapama pomoću skripti.

Želim biti upućen u ono što pamtim sa svoje diplome, a činjenica je da se iz ovog razreda ne sjećam puno. Jednostavno nisam koristio puno znanja stečenog njime u svojoj trenutnoj karijeri.

Uvod u računalne mreže

Ovaj je sat bio vrlo koristan. Pregledalo je kako funkcioniraju računalne mreže. To je uključivalo prelazak preko mrežnih protokola kao što su HTTP, HTTPS, TCP, IP, FTP, IMAP, POP3, SSH i DNS. Morao sam naučiti o tome za što se koristi svaki od ovih protokola, kako se provode i stekao razumijevanje zašto su stvoreni.

Mrežni protokoli koje sam gore spomenuo koriste se za ključne funkcije suvremenog softvera. To uključuje rukovanje e-poštom (POP3 i IMAP), slanje mrežnih zahtjeva između klijenta i poslužitelja (HTTP, HTTPS) i sigurno rukovanje uređajima putem mreže (SSH). To vam stvarno daje razumijevanje kako Internet funkcionira i kako uređaji širom svijeta mogu međusobno komunicirati.

Ovo nije samo fascinantno, već može biti korisno. Koristio sam stvari koje sam naučio iz ove klase za otklanjanje pogrešaka na koje sam naišao kad sam dobivao pogreške s mreže. Uspio sam točno odrediti probleme s kojima sam se susretao i pomoći back end razvojnom programeru s kojim sam surađivao da pronađe grešku na njihovom kraju.

Uvod u inženjerstvo upotrebljivosti

Ovaj je predmet govorio o tome kako napraviti intuitivnu aplikaciju, ali i kako učiniti aplikaciju ili web stranicu dostupnom. Pristupačnost se odnosi na stvaranje softvera korisnim za svakoga, uključujući one s invaliditetom. Ovo pokriva stvari poput upotrebe teksta u govor i dizajniranje softvera koji se ne oslanja u potpunosti samo na audio elemente.

Obrađene teme bile su korisne ako nikada prije niste čuli za pristupačnost. Barem vas je natjerao da uzmete u obzir ove stvari kad dizajnirate softver. Također me natjerao da zaista počnem razmišljati o korisničkom iskustvu i koliko je to važno za dobar softver. Ako nitko ne koristi ključnu funkcionalnost vaše aplikacije jer je zbunjujuća, tada će vaš softver na kraju izgubiti sve svoje korisnike.

Iako je znanje bilo zanimljivo, konkretne implementacije načina na koji biste stvorili korisni i pristupačni softver ovise o platformi. Na primjer, Apple ima vlastiti set smjernica za korisničko sučelje koji opisuju općenita načela dizajna i specifične detalje o tome kako biste trebali dizajnirati softver koji će se pokretati na bilo kojoj Appleovoj platformi.

Zbog specifičnih informacija potrebnih za platformu, nisam siguran da je ova klasa bila nevjerojatno korisna. Bio je to lijep uvod, ali na kraju sam morao naučiti smjernice Appleovog sučelja koje su prelazile sve teme obrađene u ovoj klasi.

Razvoj softvera za mobitel i oblak

Kratko ću držati ovu. Već sam bio mobilni inženjer kad sam pohađao ovaj tečaj. Izradio sam usranu mobilnu aplikaciju za nekoliko sati kako bih što prije diplomirao. U ovom sam trenutku već postigao svoj cilj zaposliti se kao softverski inženjer, ali samo sam trebao završiti studij, jer sam bio gotovo gotov. U ovom trenutku moje srce nije htjelo učiti.

Čak i kad se to kaže, mislim da ovaj čas nije dobro vođen. Bio je lijeno dizajniran. Potaknuli su ljude da napišu kod za Windows telefon za ovu klasu, a potražnja za tim poslovima mnogo je niža od ostalih. I osjećam da je to ohrabreno samo zato što je okruženje lakše postaviti, a kôd se može napisati na JavaScript-u i sliči web razvoju.

Također, bilo mi je jasno da osoba koja vodi nastavu ne zna za sve platforme mobilnih aplikacija. Od nas se tražilo da napišemo mali krajnji dio, ali stvarno nisam želio. Na kraju sam lažirao web zahtjev tako što sam umjesto toga pročitao s diska i vratio pripremljeni odgovor nakon nekoliko sekundi. To je uspjelo jer sam morao poslati samo demo i izvorni kod. I imam osjećaj da je osoba koja je ocjenjivala samo pogledala demonstraciju.

Sveukupno, razred je predavao zastarjelu i neiskorištenu tehnologiju, nije bio pravilno ocijenjen i zaista nije pružio puno smjernica. Ovo nije bila baš dobra klasa.

Softverski projekt Capstone

Govoreći o zastarjeloj tehnologiji, ovaj projekt zahtijevao je da izgradimo GUI za pristup bazi podataka pomoću psovki. Evo cijelog projekta ako ste zainteresirani. Nismo uspjeli odabrati kakav je bio naš glavni kamen, dodijeljen nam je. I svi su morali raditi isti projekt. To je također učinjeno u skupinama od po 3 osobe, tako da ste stvarno pokrili samo jedan mali dio projekta. Ovo je bila jako loše vođena klasa.

Interakcije s učiteljem gotovo i nije bilo. Nije me zanimao projekt i ono što smo učili činilo se apsolutno beskorisnim. Da biste stvorili interes za temu, trebate ljudima omogućiti malo slobodne volje kada je u pitanju odabir onoga što će naučiti. Nemati izbora u vašem glavnom projektu je jednostavno glupo. Ovaj je projekt beskoristan za većinu putova u karijeri i nema smisla prisiljavati ga na ljude.

Predavanje je trebalo natjerati svakog učenika da preda prijedlog s grubim procjenama za vremenski okvir kada će završiti svaki dio projekta. Time se postižu dvije stvari: navođenje ljudi da počnu vježbati procjenu rada i omogućavanje ljudima da rade na onome što ih zanima. Razred bi na ovaj način bio sto puta bolji.

Završne misli

Nisam mogao pohađati dobar dio nastave i još uvijek biti softverski inženjer kakav sam danas. Ali mislim da bi propuštanje nekih od ovih tečajeva moglo ostaviti veliku prazninu u vašem znanju kao razvojnog programera. Teme za koje mislim da bi svaki softverski inženjer trebao imati određeno znanje su Strukture podataka i algoritmi.

Ostali razredi ovise o karijeri koju ste odabrali. Ako ste se odlučili za ugrađeni razvoj, trebali biste naučiti o računalnoj arhitekturi. Ako odlučite postati inženjer fronta, trebali biste naučiti o računalnim mrežama.

Ovdje je ključno što dobar inženjer neprestano uči. Ako vam nedostaje neko znanje za koje znate da bi bilo korisno i primjenjivo u vašem poslu, idite na tečaj da biste stekli to znanje. Tako postajete bolji u pisanju dobrog koda. Uvijek uči.

Svidjelo vam se što ste pročitali? Pogledajte moje ostale članke

Pokretanje tehnološke karijere ni iz čega.

Odaberite najbolju tehnološku karijeru za sebe - Dev Ops, mobilni inženjer, znanstvenik podataka, voditelj projekta i Front End.

Savjeti za vaš prvi tehnički intervju.

Trebate li dobiti diplomu informatike?

Swift protiv Objective-C