Wpis z mikrobloga

Matthew Might to szanowany profesor z University of Utah, który swego czasu stworzył listę "What every computer science major should know" (http://matt.might.net/articles/what-cs-majors-should-know/). Jest to tak naprawdę lista umiejętności, które może (i powinna) posiąść osoba, która spędzi w branży kilka lat (np. dobre studia + jakiś staż). Jeśli znasz i rozumiesz przynajmniej 80% pojęć, języków, technologii, umieszczonych na tej liście, to najprawdopodobniej jesteś światowej klasy informatykiem, który może bez wstydu pracować przy niemalże dowolnym projekcie informatycznym. Oczywiście po przeszkoleniu adekwatnym do progu wejścia w dany projekt.

Wpis ten kieruję szczególnie do osób, które jeszcze są w gimnazjum lub liceum/technikum, a także do samouków "bez papierka". Warto wiedzieć czego warto się nauczyć i co się przegapiło. Ja sam, ucząc się programowania jeszcze w wieku kilkunastu lat, nie wiedziałem czym tak naprawdę mam się zajmować, aby zostać "prawdziwym" informatykiem. Uczyłem się na oślep, tracąc moim dużo czasu na duperelach (np. dopracowywałem layout strony w GIMPie, zamiast poznawać Haskella). Z perspektywy czasu (zrobiłem licencjat w Polsce, magistra w USA, pracowałem w Microsofcie, Googlu, Palantirze, robiłem startup, prowadziłem szkolenia i wykonywałem zlecenia) widzę, że ta lista to niemalże wszystko co było mi potrzebne, aby odnaleźć się w świecie informatyki. Oczywiście ja też nie pokrywam listy w 100% - np. nigdy nie dotykałem LISPa, chociaż dużo o nim słyszałem (trochę wstyd).

Chciałem też zaznaczyć, że nauczenie się rzeczy z tej listy nie wymaga ani nadludzkiego intelektu, ani bardzo dużego nakładu czasowego. Myślę, że można osiągnąć cel w ciągu 2-3 lat samodzielnej pracy lub 5-6 nauki "po godzinach". To też pokazuje, że bycie informatykiem nie wymaga szczególnie dużego nakładu pracy - skrzypek po dwóch latach nauki to może co najwyżej proste etiudki przygrywać, a informatyk kosi już podwójną krajową średnią.

Tak więc do roboty!

Na koniec bonus - jeśli jesteś już programistą i chciałbyś zmienić pracę na lepszą (np. poza granicami Polski), to bardzo pomocna będzie książka "Cracking the Coding Interview". Zawiera ona rozwiązania do większości problemów, które możesz trafić na rozmowie kwalifikacyjnej. W ciągu ostatnich lat nasila się trend zadawania pytań z tej książki - rekruter celowo zadaje Ci pytanie ze znanej puli, żeby przekonać się, że jesteś w stanie je błyskawicznie rozwiązać i dobrze je rozumiesz. Do tego wystarczy odrobina otwartości i fajną pracę masz w kieszeni.

I jeszcze jedno - cała ta lista prezentuje pewne podejście do programowania, które z moich obserwacji jest bardzo popularne, szczególnie w topowych firmach. Nie jest to jednak jedyne podejście. Są firmy (np. polskie korporacje, banki) gdzie bardziej ceni się szczegółową znajomość pojedynczego języka (np. Javy, PHP), co bezpośrednio przekłada się na zyski dla firmy (jesteś w stanie pisać duże, ale mało skomplikowane projekty w zawrotnym czasie), niż znajomość algorytmiki, która nie jest do niczego potrzebna. Są też programiści, którzy zajmują się problemami bliskim elektronice, dla których istnienie deterministycznych automatów skończonych ze stosem nie jest ciekawym faktem. Niektórzy zarabiają 1000zł dziennie instalując Wordpressy. Na końcu są też ci, którzy wciskają dyrektorom zintegrowane systemy za setki milionów (tym dziękujmy najbardziej, bo bez nich cała ta piramida finansowa by runęła ;P). Wszyscy jednak przyczyniamy się do ułatwienia ludziom życia, więc naprawdę nie wrzucam tej listy, żeby pokazywać wyższość jednej grupy nad innymi.

#programowanie #byloaledobre #edukacja #it
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

"Cracking the Coding Interview"


@AhoCorasick: Znasz inne książki tego typu? Akurat ta ma sporo błędów i czasami treść pytań jest mało szczegółowa albo napisana tak, że nie da się rozwiązać problemu bez spojrzenia na rozwiązania na końcu książki :-/.

Aha, jeszcze coś. Na wykopie nie docenia się tego typu wiedzy ;), lepiej pouczyć się wieczorami htmla i js i czaskać stronki za 15k.
  • Odpowiedz
@GwnBrz: Książek nie znam, ale najbardziej adekwatny wydaje się serwis leetcode.com. Jest tam dużo zadań + sprawdzarka (która słabo sobie radzi z zadaniami z limitem czasowym - testy zazwyczaj puszczają rozwiązania n^2, gdy wymagany jest O(n) itd.), ale tam to już jest masa błędów w rozwiązaniach na forach (klasyk w stylu ktoś użył stlowego sorta i mówi, że czas jest stały widziałem przynajmniej w 100 tematach). Czy w CtCI są
  • Odpowiedz
@AhoCorasick: Swietny post! Nie jestem informatykiem/programista i chyba nie zamierzam byc ale swietna sprawa.
Myslalem czy by ktoregos roku nie zrobic takiego "one year challenge" i nauczyc sie programowania, a pozniej sprawdzic czy by sie udalo zlapac jakas fuche (nie koniecznie tam isc tylko sprawdzic czy sie da).

Swoja droga, bedziesz pisal wiecej?
  • Odpowiedz
  • 0
@loczyn, jeśli masz mniej niż 30 lat to duża szansa, że wezmą, żeby samemu Ciebie nauczyć, jeśli tylko zrobisz jakokolwiek kurs jakiegoś języka. Jest coś takiego jak Coders Lab - trzymiesięczny kurs 40h w tygodniu. Na początku cisnąłem z niego bekę, ale potem okazało się, że zeszli z ceny, a ludzie podobno faktycznie dostają pracę (głównie na zasadzie "skoro wydał kilka tysięcy, żeby się czegoś nauczyć, to mu go chcemy").
  • Odpowiedz
  • 0
@loczyn z książek jest ciężko zacząć. Ja bym startował z dowolnego interaktywnego kursu Pythona. To dobry język - jest prosty, czasami wymusza dobre praktymi, jest popularny, wygodny, można w nim robić strony, aplilacje okienkowe, skrypty, machine learning czy oprogramowanie dla klastrów. Jest lubiany i pozwala na znalezienie dobrej pracy. Na pewno się nie zniechęcisz, bo Python jest po prostu super :)
  • Odpowiedz
@AhoCorasick: O Python to dobra opcja! Siedze w compositingu w VFX, jest taki program jak NukeX (graficzny) ktory korzysta z Pythona w ulatwianiu sobie pracy. Po prostu robisz skrypty, moze to by mi pomoglo rozwinac sie w aktualnej pracy :D
Swoja droga programista Pythona znajdzie prace w Wawie?

Przepraszam jesli pytam o jakies glupoty lub oczywistosci ale nie siedze w tym kompletnie :D
  • Odpowiedz
  • 1
@loczyn tzn. żeby było jasne - nie wiem, czy CodersLab to dobry pomysł. Dałem to jako przykład, bo wiem z pierwszej ręki, że jedna z firm z niezłą reputacją jeśli chodzino RubyOnRails faktycznie brała stamtąd ludzi po którejśtam edycji. Ja na Twoim miejscu przed inwestowaniem pieniędzy i czasu spróbowałbym programowania po godzinach przez kilka miesięcy. Podstawą programowania jest to, że dłubanie i zastanawianie się godzinami musi sprawiać Ci przyjemność, bez tego
  • Odpowiedz
@loczyn: @AhoCorasick: Offtopic tylko w ramach sprostowania. Python ogólnie jest do d--y i nie nadaje się do większości projektów, ale jest BARDZO DOBRY do nauki programowani, bo nie trzeba się skupiać na szczegółach, i jest bardzo dobry do prostych, małych, szybkich projektów do których można wziąć studentów. A tak ogólnie to jest C# i Java bije na łeb w rozwiązaniach webowych, C i C++ w embedded, C# i
  • Odpowiedz
@AhoCorasick: Identycznie jak w mojej branzy - VFX.
Dzieki raz jeszce za obszerne posty, dowiedzialem sie bardzo duzo. Oczywiscie do Labsow na razie szedl nie bede, bo nawet bym nie bardzo mogl, ale rok z Pythonem chyba zaczne jakos od kwietnia-lipca i zobaczymy co wtedy :)
  • Odpowiedz
  • 0
@GwnBrz oporowo mijasz się z prawdą. Znam kilka bardzo dużych projektów napisanych w Pythonie (np. rozproszony deep learning, skalowalny system plików, wirtualizacja programów wykonywanych na kartach graficznych, backend komunikatora który ma 100 milionów użytkowników!!!!), każdy po 50+ deweloperów. Java w rozwozaniach webowych? Chyba utknąłeś w czasach J2EE, ale wtedy to nawet w c++ się pisało strony. Nie jestem jakimś fanatykiem, tak naprawdę tylko raz pracowałem przy projekcie pisanym w Pythonie (głównie
  • Odpowiedz