Tipy a triky
03.04.2018
Martin Lipták
Jak umí programátor samouk dohnat ty, co studovali na univerzitě
Co se učí na univerzitáchJsi programátor samouk a přemýšlíš, jak to vypadá na univerzitě? Už jsi viděl všechny online kurzy , máš za sebou 10 vlastních projektů a začínáš v nové práci jako Web developer. Jak dohnat lidi, kteří 5 let studovali informatiku? Dá se to vůbec?
Před 3 lety jsem skončil FIIT ( Fakulta informatiky a informačních technologií ) na STU v Bratislavě a také jsem přemýšlel, co všechno mi škola dala. Je toho hodně a jsem velmi rád, že jsem si vybral takovou cestu. Na druhou stranu, kdybych tuto možnost neměl, většinu věcí bych se naučil i jinde. Co pro mě byly ty nejdůležitější věci? Asi už tušíš, že je to celé velmi subjektivní a určitě neber tento článek jako univerzální návod.
Studentský životBydlel jsem na intrácích v Mlýnské dolině a jeden semestr jsem strávil na programu Erasmus ve Španělsku. Byly to kamarádství a zážitky, na které lze vzpomínat celý život.
Pro samouky: Pokud jsi studoval na jakékoli vysoké škole, víš o čem mluvím.
Inspirativní lidéPoznal jsem mnoho spolužáků a učitelů, kteří mě v mnoha věcech posunuli dál. S mnoha jsem dosud v kontaktu a můžu se na ně spolehnout, kdybych potřeboval pomoc.
Pro samouky: Skvělé lidi najdeš iv pracovních kolektivech. Obklop se takovými, kteří jsou lepší než ty sám.
Na škole se organizovalo velké množství akcí a učitelé nás motivovali chodit na setkání programátorů mimo školu, kde jsem poznal mnoho dalších lidí.
Pro samouky: Hledej si kamarády na různých událostech pro programátory, kterých je více než dost v každém větším městě (například taková Rubyslava nebo Reactive meetups a mnoho dalších).
SamostatnostOd intráků a studia v zahraničí, až po práci na zadáních, projektech a závěrečných pracích. Alespoň na FIIT to bylo tak, že táhnout to musel sám student a učitel mu jen pomáhal nebo někdy i nepomáhal. Zasekl ses při zadání a termín je zítra? Použij Google, nebo se poraď se spolužáky, ale vyřeš to. Pokud tvé zadání nebude do 00:00 CEST v předávacím systému, nikoho nebudou zajímat tvé výmluvy a předmět si zopakuješ další rok. Pokud se ti nasbírá takových předmětů více, letíš ze školy.
Pro samouky: Tak jako jsi udělal těch 10 vlastních projektů, i v práci budou očekávat, že se věcí chytíš a dotáhneš je samostatně do konce. To ale neznamená, že se nemáš ptát (nejdříve Google) a požádat o pomoc, když ji potřebuješ. [Image]
Práce v týmuNa mnoha školních projektech jsem nepracoval sám. Na týmovém projektu jsme byli až 7 a museli jsme se vypořádat s odlišnými názory a dokonce cíli v projektu.
Pro samouky: Máš za sebou těch 10 projektů, při kterých ses naučil samostatnosti. V práci budeš obklopen lidmi a musíte spolu co nejlépe vycházet. Jmenuje se to soft skills a dá se to natrénovat. [Image]
VědomostiNa co všechno si vzpomenu 3 roky po skončení školy? O čem byly všechny ty předměty?
• Jak funguje počítačový hardware a jak se z jednotek a nul stanou programy – logické obvody a počítačové architektury.
• Jak funguje operační systém - ovladače zařízení, IO, systémová volání, procesy, vlákna (threads), synchronizace, správa unixových systémů a shell skripty.
• Jak funguje Internet a co je HTTPS, DNS, POP3, IP a Ethernet – 7 vrstev počítačových sítí a jak spolu souvisí všechny tyto protokoly.
• V čem se liší paradigmata programování - procedurální programování v C, objektově orientované v Javě, funkcionální v Lispě a logické v Prologu. Viz můj první projekt v C , který jsem nahrál do školního systému pro automatické testování :)
• Co znamená zápis O(n) a jak určit složitost algoritmů? Jak může efektivní algoritmus vypočítat výsledek za 1 milisekundu a neefektivní by to počítal týdny? Vyvážené binární stromy, hashing, grafy a jiné datové struktury.
• Co je to Turingův stroj? Proč jsou regulární výrazy regulární? Co je abstraktní syntaktický strom? Základní teorie informatiky, na které stojí všechny programovací jazyky.
• Je umělá inteligence opravdu inteligentní? Hrubá síla a heuristiky, které řeší složité problémy, neuronové sítě, genetické algoritmy a odvozovací stroje.
• Jaké jsou výzvy paralelního programování? Klasické problémy synchronizace, vlákna, mutexy a semafory.
• Co je databáze? Návrh datových modelů, psaní dotazů (queries), optimalizace indexy a kdy použít NoSQL.
• Úvod do analýzy dat (data science). Lineární regrese, neuronové sítě, support vector machines, clustering a časové řady.
• Jak spravovat softwarové projekty? Vodopád nebo agilní metodologie, důležitost testování a dokumentace, návrh poživatelských rozhraní, kvalita kódu a návrhové vzory.
• Jak dělat výzkum? Návrh hypotéz, jejich vyhodnocování experimenty, měření dat, psaní a zveřejňování výzkumných článků.
• Pár předmětů o ekonomii, právu a psychologii bylo příjemným odpočinkem od technických věcí.
• Webový vývoj v Ruby on Rails. Toto je to, čemu se nyní věnuji v práci.
Pro samouky: Vypadá to jako velmi dlouhý seznam, ale většinu z těchto věcí se umíš naučit v praxi. Jsou však věci, ke kterým se nedostaneš. Pokud se od začátku zaměřuješ na webový vývoj v PHP , asi se nebudeš do hloubky zabývat hardwarem, překladači (compilers) a operačními systémy. A většina lidí se asi nebude zabývat výzkumem. [Image]
Takže jak dohnat ty, kteří studovali FIIT?• Obklop se lidmi, od kterých se můžeš hodně naučit. Najdeš je v práci a na setkáních programátorů.
• Nečekej, že ti vždy řeknou, jak máš věci dělat. Samostatnost je ale také umět požádat o pomoc, když ji potřebuješ.
• I když to tak na první pohled nevypadá, programování je víc o lidech než o počítačích. Pracuj na svých soft skills a komunikaci v týmu.
• Snaž se porozumět věcem do hloubky. Jak fungují regulární výrazy? Proč potřebuje databáze indexy? Jaký je rozdíl mezi http:// a https://? V čem jsou výhody SCRUM-u?
• Uč se věci mimo tvé specializace. Vyvíjíš weby? Zkus udělat nativní mobilní aplikaci. Co takhle si o víkendu naprogramovat ovladač do operačního systému nebo kompilátor?
Máš dotazy k tomuto blogu? Neváhej je napsat do komentářů.