Mida õpite 4-aastase arvutiteaduse kraadiga

Kirjutasin hiljuti artikli selle kohta, kas teil on vaja arvutiteaduse kraadi, et saada tehnikasse tööle. Arvasin, et minu ärakirja üle minek oleks kasulik. Uuritu arutamine aitab loodetavasti inimesi. Ma tahan, et kõik saaksid teha oma tehnilise karjääri raja valimisel võimalikult teadliku otsuse.

Kohustustest loobumine : see on kirjutatud minu mäletamist mööda klassidest ja mobiiliarendaja vaatenurgast. Paljusid nende klasside teemasid võiks spetsialiseerida ja karjääriks muuta. Seega on nad kõik kellelegi maailmas olulised. Kirjutan oma vaatenurgast ja kellegi vaatenurgast, kes valis mobiiliarendaja karjääritee.

Programmeerimine I, II

See oli liha kõigest sellest, mida õppisin ja mille ma programmeerimisega tööle panin. Need olid tunnid, kus õppisid programmeerima. Enne nende tundide läbimist olin vaevu isegi programmeerinud. Olin proovinud edestada, kuid ei jõudnud silmustest palju kaugemale.

See klass algas tühja faili loomisega ja selle IDE-s kompileerimisega (ma kasutasin Code :: Blocks). Ja me töötasime ise kuni oma tekstipõhise lahingumängu loomiseni. Kirjutatud koodile tagasi vaadates on mul piinlik. Sellest ajast olen ma pika tee teinud. Siin on repo, kui soovite naerda (ma kasutan ainult faili main.cpp 1063 rea koodiga).

Mida ma siis siin õppisin? Ma tahan öelda kõik. Need kursused olid meeletult väärtuslikud ja said mulle vähemalt 70% teadmistest, mis mul olid vajalikud programmeerijana professionaalseks tööks. Ma õppisin, kas avaldused, tsüklid, tõeväärtuse loogika, klassi loomine, struktuuri loomine, liideste loomine, polümorfism, pärimine ja palju muud. Samuti kasutati mõningaid põhiandmete struktuure nagu massiivid ja vektorid.

Diskreetsed struktuurid arvutiteaduses

See klass lisati ärakirjale, et inimesed harjuksid loogika loogikaga. Mis meil oli tunni esimesel kahel nädalal maas. Meie, pahaaimamatute õpilaste, kahjuks läheb see küülikuaugust üsna kaugele. Siin on mõned teemad, mida see käsitles: „loogika, seadistus- ja seadistusoperatsioonid, tõestamismeetodid, rekursiivsed definitsioonid, kombinatorika ja graafiteooria“.

Nüüd on need kõik kasulikud asjad, mida teada saada. Kuid küsimus on selles, et õpilasi julgustati seda tundi varakult õppima. Tavaliselt kõrvuti I ja II programmeerimisega. Ja need on mõned edasijõudnud teemad. Ma näeksin nüüd vaeva matemaatiliste tõendamismeetodite kasutamisega. Ja ma mäletan, et ma nägin toona vaeva. Samuti pidin lihtsalt googeldama, mis on kombinatorika, nii et ma ilmselt ei kasuta neid liiga palju.

Fakt on see, et paljud asjad, mida nad sellel kursusel õpetasid, ei tundunud kursuse läbimise ajal arvutiteaduse karjääri jaoks kohaldatavad. Nüüd tean, et loogikast, seadistus- ja seadistusoperatsioonidest, rekursiivsetest definitsioonidest ja graafiteooriast võib kasu olla. Kuid seda vaid tagantjärele tarkusega, et saan olla paar aastat programmeerija.

See, mida ma oma praeguses karjääris igapäevaselt rakendan, on loogika ja võib-olla seadistada toiminguid. Rekursiivsed definitsioonid ja graafiteooria on olnud tõepoolest abiks vaid intervjuude puhul. Kuid võtke see soola, sest ma olen mobiilne arendaja. Tagaosa arendajale oleks graafiteooria tõenäoliselt väga kasulik.

Andmestruktuurid

See klass oli hea. Väga hea. Andmestruktuure kasutatakse kogu arvuti programmeerimisel ja need on selgroog enamikust inimeste kirjutatavast koodist. Need võimaldavad meil andmeid salvestada viisil, mis on kasulik meie kirjutatud programmidele. Võimalus vaadata andmeid ja teada parim viis nende salvestamiseks aja ja ruumi jõudluse jaoks on väga kasulik oskus.

Ma õppisin tundma massiivide, korstnate, lingitud loendite, topelt lingitud loendite, puude, graafikute, hunnikute ja kõigi nende andmestruktuuride erinevate maitsete kohta (näiteks isetasakaalustuvad puud). See klass aitas mul mitte ainult mõista andmestruktuure, vaid aitas mul ka paremini salvestatud andmeid korrastada.

See klass toimus C-s, mis tegi selle veelgi huvitavamaks. C võib olla väga peen, kuid õigel kasutamisel ka väga võimas. Pidin olema väga ettevaatlik mälu eraldamise ja puhastamise osas, mis oli ka väga hea mäluhalduse õpetamiseks.

Selles klassis oli nii palju kasulikke asju, et neid kõiki on raske kajastada. Ma pole isegi maininud fakti, et see on tehnikas intervjueerimise põhiteadmiste komponent. Kui olete andmekonstruktsioonide osas ebakindel, alustage mõnede põhitõdedega tutvumist, sest need on väga olulised.

Algoritmide analüüs

See tund oli mõnevõrra kasulik. Algoritmid on kasulikud. Nad juhivad maailma parimat tarkvara ja muudavad selle piisavalt võimsaks, et püsida kaasaegses maailmas asjakohane. Kuid sellel klassil oli mõningaid probleeme.

Selle kõige kasulikum osa oli Big O-nootide õppimine. Suur O tähistamine võimaldab teil koodi hinnata ja mõista, kui hästi see toimiks ajas ja ruumis. Üldiselt, kui mõõdate ettevõttes koodi toimivust, jälgite interaktsioonide vahelise aja jälgimiseks taimerit. See võimaldab teil näha, kui hästi teie tarkvara töötab. See nõuab koodi kirjutamist ja tulemuste tagantjärele hindamist.

Suur O tähistamine võimaldab teil koodi toimivust hinnata, vaadates lihtsalt koodi. Ma ei taha sellega liiga palju tegeleda, aga kui te ei tea Big O noodistust, lugege seda blogipostitust.

Tegelikud algoritmid, mille üle käisime, polnud nii kasulikud. Mäletan vaid seljakoti ja reisiva müügimehe probleemi. Pidin neile gruppides ka koodi kirjutama, mis ei olnud tore, sest minu grupis oli üks inimene, kes läks kaugemale sellest, mille jaoks ta oli reguleeritud. See tähendas, et kirjutasin lõpliku rakenduse jaoks iga kord vähem koodi, kui oleksin tahtnud.

Põhiteadmised kuulsate algoritmide olemasolust, nende otstarbest ja rakendamisest võivad olla kasulikud (enamasti intervjueerimiseks). Suur O tähis on siin võti. See on tööl väga kasulik ja uskumatult kasulik ka intervjueerimisel.

Veebiarendus

Selles klassis oli kõige rohkem oskusi, mis olid otseselt rakendatavad tehnikatöö alal. Õppisin tundma HTML-i, CSS-i, JQuery, JavaScripti, PHP-d ja JSON-i. Sain teada, kuidas päring saadetakse veebisaidi eesservast tagaküljele, kuidas seda töödeldakse tagaküljel ja saadetakse seejärel vastusega eesservale. Õppisin, kuidas luua kasutajaliidest ja kuidas suhelda andmekihiga, mis seejärel suhtleb võrguga.

Tunni lõpus olin loonud oma veebisaidi ja võtnud initsiatiivi Angulari õppimiseks. Ma kasutasin Angularit, et muuta oma sait ilusa väljanägemisega, mis lõpuks sai mulle esimese praktika. Sain ka hea ülevaate, kuidas veebileht kapoti all töötab.

Ainuüksi need teadmised olid suurepärased, kuid õppisin ka seda, kuidas võõras keel, raamistik või andmevorming üles leida ja õppida ning nendega lennul töötada. Tegin nendel teemadel palju guugeldamist, et näha konkreetseid näiteid. Õppisin, kuidas kasutada dokumentatsiooni ja veebipõhist uurimist, et paremini mõista kontseptsiooni, mida pidin lühikese aja jooksul otse rakendama. See on osav programmeerija olemise põhioskus.

Sissejuhatus andmebaasidesse

Enamasti õppisin just selles klassis SQL-i. Olen kindel, et käisime üle veel mõned mõisted, nagu tükeldamine ja klastrid, kuid ma ei mäleta neid. Mõnikord kasutan oma praeguses töös SQL-i logitud sündmuste andmepäringute käitamiseks. SQL saab kas olema teie töö lahutamatu osa või kasutate seda vaevalt. Kui vajate, õppige seda ja hakake eksperdiks. Kui te seda ei tee, siis ärge muretsege selle pärast liiga palju.

Tarkvaratehnika I, II

Samuti veel üks klass, mida ma tegelikult ei mäleta. Usun, et käisime selles klassis üle hulga laiaulatuslikke kontseptsioone. Käsitlesime projekti Scrum ja Waterfall juhtimismeetodeid. Käisime testimisel üle ja kõik erinevad testimistüübid on olemas. Käsitlesime mõningaid kasutatavuse ja juurdepääsetavuse kontseptsioone. See oli tegelikult lihtsalt mõte, mis tegelikult ei sobinud nende endi klassidesse.

Tunni lapilise iseloomu tõttu ei sisendanud ma ühtegi mõistet liiga hästi. Hea oli saada ülevaade käsitletavatest mõistetest, kuid soovin, et rohkem aega kulutataks olulistele üksikutele teemadele nagu testimine.

Arvutiarhitektuur ja koostekeel

Mäletan seda klassi eredalt. Selles klassis käsitletakse arvuti tööd. Kuidas arvuti juhiseid arvuti ümber saadetakse ja töödeldakse. Samuti pidime kirjutama MASM-is koodi, mis on koostekeel, mis suhtleb masinkoodiga väga tihedalt.

Enamik programmeerimiskeeli, mille olin selle klassi õppimiseks ära kasutanud, olid kõrgetasemelised keeled. Kõrgetasemelised keeled kipuvad olema inimkeelele lähemal kui masinakood. MASM on masinakoodile väga lähedal ja ma ütleksin, et see on lähemal masinakeelele kui inimkeelele.

Selle klassi kõige olulisem osa on aimu saada, mis juhtub teie koodiga, kui see on kompileeritud. Mõistmine arvuti erinevatest loogilistest üksustest ja sellest, kuidas teie kood neid käsitseb, oli väga huvitav õppida.

Praktilistel eesmärkidel arvan, et see klass ei olnud minu tehnikakarjäärile panustamisel eriti oluline. Ma pole oma senise karjääri jooksul palju sellest klassist saadud teadmisi kasutanud.

Operatsioonisüsteemid

Ma ütlen ausalt, mul on väga raske meenutada, mida ma selles tunnis õppisin. Ainus asi, mida ma mäletan, on sõnumiprogrammi loomine, mis kasutas suhtlemiseks C-s pistikprogrammeerimist. Õppisin ka failide avamist ja kaustadega skriptide abil manipuleerimist.

Ma tahan olla eelarvamuslik selle osas, mida ma oma kraadist mäletan ja fakt on see, et ma ei mäleta sellest klassist eriti midagi. Ma lihtsalt ei kasutanud oma praeguses karjääris palju sellest saadud teadmisi.

Sissejuhatus arvutivõrkudesse

See tund oli väga kasulik. See käis üle, kuidas arvutivõrgud toimisid. See hõlmas võrguprotokollide, näiteks HTTP, HTTPS, TCP, IP, FTP, IMAP, POP3, SSH ja DNS, üle minemist. Sain teada, milleks neid protokolle kasutatakse, kuidas neid rakendatakse, ja sain aru, miks need loodi.

Eespool mainitud võrguprotokolle kasutatakse tänapäevase tarkvara kriitiliste funktsioonide jaoks. See hõlmab e-posti haldamist (POP3 ja IMAP), võrgutaotluste saatmist kliendi ja serveri vahel (HTTP, HTTPS) ja seadmete turvalist käitlemist võrgu kaudu (SSH). See annab tõesti mõista, kuidas Internet töötab ja kuidas seadmed üle kogu maailma saavad omavahel suhelda.

See pole mitte ainult põnev, vaid võib olla kasulik. Olen kasutanud selles klassis õpitud asju silumiseks probleemidele, mis tekkisid mul siis, kui sain võrgust vigu. Ma suutsin täpselt kindlaks teha probleemid, millega ma kokku puutusin, ja aitasin tagatipil oleval arendajal, kellega ma töötasin, leida nende vea.

Sissejuhatus kasutatavuse tehnikasse

Selles tunnis käsitleti intuitiivse rakenduse loomist, aga ka seda, kuidas muuta rakendus või veebisait ligipääsetavaks. Juurdepääsetavus viitab tarkvaratüki kasutatavaks muutmisele kõigile, ka puuetega inimestele. See hõlmab selliseid asju nagu teksti kõneks kasutamine ja tarkvara kujundamine, mis ei sõltu täielikult ainult helielementidest.

Käsitletud teemad olid kasulikud, kui te pole kunagi varem ligipääsetavusest kuulnud. See pani vähemalt tarkvara kujundamisel neid asju kaaluma. See pani mind ka tõeliselt mõtlema kasutajakogemusele ja sellele, kui oluline see on hea tarkvara jaoks. Kui keegi ei kasuta teie rakenduse peamist funktsionaalsust, kuna see on segane, kaotab teie tarkvara lõpuks kõik oma kasutajad.

Kuigi teadmised olid huvitavad, sõltuvad platvormist konkreetsed rakendused selle kohta, kuidas luua kasutatav ja juurdepääsetav tarkvara. Näiteks on Apple'il oma komplekt kasutajaliidese juhiseid, mis kirjeldavad üldisi disainiprintsiipe ja konkreetseid üksikasju selle kohta, kuidas peaksite kujundama tarkvara, mis töötab mis tahes Apple'i platvormil.

Platvormi kohta vajaliku konkreetse teabe tõttu ei ole ma kindel, et see tund oli uskumatult kasulik. See oli tore sissejuhatus, kuid lõpuks pidin õppima Apple'i liidese juhiseid, mis hõlmasid kõiki selles klassis käsitletud teemasid.

Mobiil- ja pilvetarkvara arendamine

Hoian selle lühikese. Olin juba selle klassi õppimisel mobiiliinsener. Ehitasin mõne tunni jooksul nõrga mobiilirakenduse, et lõpetada ASAP-i kraad. Sel hetkel olin juba saavutanud oma eesmärgi saada tarkvarainseneriks töökoht, kuid mul oli vaja lihtsalt lõpetada oma teaduskraad, kuna olin peaaegu valmis. Mu süda ei olnud sel hetkel õppimisega seotud.

Isegi kui seda öeldakse, ei usu ma, et seda klassi hästi juhiti. See oli laisalt kujundatud. Nad julgustasid inimesi kirjutama selle klassi jaoks Windowsi telefoni rakenduse jaoks koodi ja nõudlus nende töökohtade järele on palju väiksem kui teistel. Ja ma arvan, et seda julgustati ainult seetõttu, et keskkonda on lihtsam seadistada ja koodi saab kirjutada JavaScripti abil ning see sarnaneb veebiarendusega.

Samuti oli minu jaoks selge, et klassi juhtiv inimene ei tea kõigist mobiilirakenduste platvormidest. Meilt nõuti väikese tagumise osa kirjutamist, aga ma tõesti ei tahtnud. Lõpuks panin veebipäringu võltsima, lugedes hoopis kettalt ja tagastasin mõne sekundi pärast konserveeritud vastuse. See toimis, sest mul tuli esitada ainult demo ja lähtekood. Ja mul on tunne, et hindaja vaatas ainult demot.

Üldiselt õpetas klass vananenud ja kasutamata tehnikat, seda ei hinnatud nõuetekohaselt ega pakutud tegelikult palju juhiseid. See polnud eriti hea klass.

Capstone'i tarkvaraprojekt

Kui rääkida vananenud tehnikast, siis see projekt nõudis, et me ehitaksime GUI andmebaasile juurdepääsuks needuste abil. Siin on kogu projekt, kui olete huvitatud. Me ei jõudnud valida, mis on meie nurgakiviprojekt, see määrati meile. Ja kõik pidid tegema sama projekti. Seda tehti ka 3-liikmeliste gruppidena, nii et tegelikult kattisite projekti ainult ühe väikese osa. See oli tõesti halvasti juhitud klass.

Suhtlus õpetajaga oli üsna olematu. Mul oli projekti vastu null huvi ja see, mida me õppisime, tundus täiesti kasutu. Teema vastu huvi tekitamiseks peate laskma inimestel omada vaba tahet, kui nad valivad, mida nad õpivad. Kui teil pole oma nurgakiviprojektis valikut, on lihtsalt rumal. See projekt on enamiku karjääriteede jaoks kasutu ja pole mõtet seda inimestele peale suruda.

Klass oleks pidanud panema iga õpilase esitama umbkaudse hinnanguga ettepaneku ajakava kohta, millal nad projekti iga alamosa lõpetavad. Sellega saavutatakse kaks asja: panna inimesi alustama töö hindamise praktikat ja võimaldada inimestel töötada selle vastu, mis neid huvitab. Klass oleks olnud sel viisil 100 korda parem.

Lõpumõtted

Ma ei oleks võinud võtta head osa klassidest ja olla endiselt tarkvarainsener, kes ma täna olen. Kuid ma arvan, et mõnel neist kursustest ilmajäämine võib teie kui arendaja teadmistes jätta tohutu tühimiku. Teemad, mis minu arvates peaksid igal tarkvarainseneril mingeid teadmisi olema, on andmestruktuurid ja algoritmid.

Teised klassid sõltuvad valitud karjäärist. Kui otsustasite minna sisseehitatud arendusse, peaksite õppima arvuti arhitektuuri kohta. Kui otsustate hakata esiotsa inseneriks, peaksite õppima arvutivõrkude kohta.

Peamine võtmekohustus on see, et hea insener õpib pidevalt. Kui teil on puudu teadmistest, mis oleksid teie tööl kasulikud ja rakendatavad, minge nende teadmiste saamiseks klassi. Nii saate hea koodi kirjutamisel paremini hakkama. Alati õpi.

Meeldis see, mida lugesite? Vaadake minu teisi artikleid

Tehnikakarjääri alustamine eimillestki.

Valige enda jaoks parim tehnikakarjäär - Dev Ops, mobiiliinsener, andmeteadlane, projektijuht ja kasutajaliides.

Näpunäiteid teie esimese tehnilise intervjuu jaoks.

Kas peaksite saama arvutiteaduse kraadi?

Kiire vs eesmärk-C