Co mnie zdziwiło w programowaniu?

Paweł Dedio Programowanie 2018-08-11

Witajcie ponownie! Jak co tydzień, mam dla Was kolejny odcinek naszej serii związanej z programowaniem. Dzisiaj chciałbym opowiedzieć o tym, co mnie zdziwiło gdy zacząłem pracować jako programista. Przed rozpoczęciem pracy miałem pewne wyobrażenia o tym zawodzie, jednak część z nich okazała się zupełnie nietrafiona.

Programowanie to nie klepanie kodu

Zanim zacząłem pracę programisty myślałem, że programowanie polega na pisaniu kodu, którego wcześniej się nauczyłeś. Przykładowo jeśli chcesz zrobić zielony przycisk, to po prostu piszesz kod, który wstawia taki właśnie element. Oczywiście wygląda to zupełnie inaczej. Programowanie to rozwiązywanie problemów i tłumaczenie wymagań klienta na język zrozumiały dla komputera. Język programowania to jedynie narzędzie służące do przelania swoich myśli na kod maszynowy (czyli ciąg instrukcji zrozumiałych dla procesora). W zasadzie do napisania dowolnej funkcjonalności możesz użyć każdego z języków programowania. Dla przykładu zamiast PHP mógłbyś użyć języka C++ do napisania serwisu internetowego. W programowaniu mamy ogromną władzę, tworzymy co chcemy, a komputer grzecznie to wykonuje.

Większość osób zaczyna pracować dopiero po studiach

Gdy przyszedłem do swojej pierwszej pracy – prosto po technikum – dużo osób mówiło mi, że wcześnie zacząłem. Zdziwiło mnie to, bo kilku moich znajomych pracowało dorywczo już w szkole średniej. Po przepracowaniu kilku lat w różnych firmach wiem, że faktycznie wcześnie zacząłem. Większość osób naukę programowania zaczyna dopiero podczas studiów. Przeważająca liczba programistów, z którymi rozmawiałem pierwszą pracę zaczynało będąc na ostatnim roku swoich studiów. Jeśli martwisz się, że nie umiesz programować, a w tym roku zaczynasz studia to nie przejmuj się – większość profesjonalnych programistów była w takiej samej sytuacji.

Jeśli jednak chcesz ominąć etap wieloletnich studiów i przyspieszyć swoją karierę w IT, warto wziąć pod uwagę kurs programowania w Coders Lab. W kilka miesięcy (lub nawet tygodni) jesteś w stanie przyswoić wiedzę potrzebną do zostania junior developerem i podjąć pracę w zawodzie programisty. A prawda jest taka, że to właśnie w pracy zyskasz najwięcej wartościowego doświadczenia.

Wszystko psuje się z jakiejś przyczyny

W wielu branżach nie da się wyjaśnić dlaczego coś nie działa. Często przyczynami mogą być zjawiska fizyczne takie, jak opór lub tarcie. Każdy z nas na pewno spotkał się z terminem „zmęczenie materiału”, jako wytłumaczenie przyczyny jakiejś awarii. W programowaniu czegoś takiego nie ma – każdy błąd, nawet najdziwniejszy, ma swoją przyczynę. W programowaniu nie mamy zjawisk fizycznych, nie możemy powiedzieć, że nie wykonała nam się pętla, bo jest zbyt wilgotno. Za każdym błędem stoi człowiek, bo to my wszystko tworzymy. Czasami błąd może być niezależny od Ciebie, bo występuje na przykład w systemie operacyjnym, jednak to nadal jakiś człowiek jest za niego odpowiedzialny.

android programista deweloper

Jako przykład mogę podać błąd który pochłonął tydzień mojego życia. Z logów pewnej aplikacji wywnioskowaliśmy, że akcja po kliknięciu przycisku wykonuje się kilka razy, a nie raz. Prościzna – pomyślałem i na początku sprawdziłem, czy zabezpieczamy użytkownika przed przypadkowym kliknięciem w ten przycisk kilkukrotnie. Okazało się, że nie ma możliwości, aby użytkownik to zrobił, bo po pierwszym kliknięciu pokazujemy ekran ładowania, który wszystko zasłania. Drugim moim krokiem było sprawdzenie, czy kod odpowiedzialny za tę akcję nie jest powielony kilka razy. Tutaj też okazało się, że wszystko jest w porządku. W tym momencie wydawałoby się, że problem nie ma rozwiązania i może jednak wilgotność powietrza ma coś z tym wspólnego. Tylko czysty przypadek sprawił, że udało się znaleźć przyczynę problemu. Jednej z naszych testerek udało się wywołać ten błąd. Po przeanalizowaniu logów okazało się, że jedna z zewnętrznych bibliotek powodowała zacięcie się całego systemu i użytkownik mógł kliknąć w przycisk kilka razy. W momencie, gdy system wznawiał swoją pracę, to wykonywał kod odpowiedzialny za akcję przycisku kilkukrotnie jednocześnie. Nikt z całego zespołu nie wpadł by na to, że przyczyna problemu może być tak dziwna.

Czytasz więcej kodu, niż go piszesz

Czytanie kodu napisanego przez innych programistów jest nieodzowną częścią tego zawodu. Pracując w zespole obowiązkową praktyką jest tworzenie tak zwanych Pull Requestów. Oznacza to, że jeśli skończysz implementować jakąś funkcjonalność, to zbierasz cały swój kod do kupy i pokazujesz współpracownikom. Oni oceniają czy napisany przez Ciebie kod jest dobry i ewentualnie sugerują jakieś poprawki. Oczywiście są do tego narzędzia, które sprowadzają całą procedurę do kilku kliknięć myszką. Tak, jak inni będą czytać i oceniać Twój kod, tak Ty musisz czytać i oceniać kod innych. Dzięki temu każdy ma kontrolę nad tym, co się dzieje w różnych częściach aplikacji, nad którą pracujecie. Poza czytaniem kodu współpracowników będziesz również czytał sporo kodu zupełnie obcych ludzi. Nie da się programować bez czerpania wiedzy z internetu – bardzo często będziesz wykorzystywał kod, który ktoś wcześniej napisał. Takie podejście potrafi oszczędzić naprawdę sporo czasu.

Większość programistów jest młodych

Programowanie to branża, która jest stosunkowo młoda. Oczywiście pierwsze programy powstawały już w pierwszej połowie 20 wieku. Jednak prawdziwy boom nastąpił dopiero po spopularyzowaniu Internetu oraz smartfonów. Ja w swojej karierze nie spotkałem w żadnej firmie nikogo, kto miałby więcej niż 40 lat. Przekłada się to na fajną atmosferę w pracy, bo łatwo jest znaleźć wspólne tematy.

Nie ma rywalizacji

Nigdy nie spotkałem się z rywalizacją o to, kto będzie lepszym programistą w firmie. Każdy sobie pomaga i nie wyśmiewa czyjejś niewiedzy. Dzięki temu zespoły programistyczne są bardzo silne i każdy wie, że w razie problemów może liczyć na czyjąś pomoc. Brak rywalizacji jest odczuwalny nie tylko na poziomie jednej firmy lecz nawet w szerszych kręgach. Programiści zrzeszają się w różne grupy tak aby powymieniać się doświadczeniami.

Manager jest dla Ciebie

Zanim zacząłem pracować w dużych firmach myślałem, że manager to ktoś, kto tylko na Ciebie naciska, abyś pracował szybciej. W rzeczywistości manager ma Ci pomagać. To do niego możesz zwrócić się z każdym problemem. Często będziesz potrzebował jakiejś decyzji od klienta – to właśnie manager będzie walczył z klientem o szybkie podjęcie takiej decyzji.

Warto znać kilka technologii

Zaczynając naukę programowania wiedziałem, że chce zostać programistą aplikacji na Androida. W mojej pierwszej pracy również byłem odpowiedzialny za tworzenie aplikacji androidowych. Cały czas myślałem, że ludzie specjalizują się tylko w jednej technologii i w niej się rozwijają. Wydawało mi się trudne lub wręcz niemożliwe żeby być dobrym w kilku technologiach. Jednak po pewnym czasie sam zacząłem się uczyć drugiej technologii używanej do tworzenia aplikacji internetowych. Z perspektywy czasu wiem, że to był bardzo dobry wybór. Dzięki znajomości dwóch różnych technologii, masz większe szanse na zdobycie jakiś dodatkowych zleceń. Również mniejsze jest prawdopodobieństwo, że się wypalisz jako programista, ponieważ jeśli znudzi Ci się już pisanie w jednym środowisku, to możesz łatwo przerzucić się na coś innego.

Luźna atmosfera

Zanim zacząłem pracę to nie wiedziałem za bardzo jak to wygląda. Myślałem, że wszyscy siedzą przy komputerach i tylko piszą kod. Zdziwiłem się, gdy okazało się, że atmosfera jest mega luźna. Jak już pisałem w poprzednich odcinkach, nie da się bez przerwy pisać kodu, bo nasz mózg szybko się męczy. Dzięki temu, że programiści robią sobie częste przerwy, będziesz miał dobry kontakt ze współpracownikami. Nie ma nic lepszego, niż praca w gronie osób, które dobrze się znają!

Programy konsolowe stają się żywe

To zdziwienie wystąpiło u mnie jeszcze zanim zacząłem pracę. Podczas nauki programowania przeważnie zaczynasz od pisania jakiś prostych programów, które wypisują wynik w wierszu poleceń. Bardzo często myślałem: po co mi te wszystkie pętle i ify jak to nie daje żadnego realnego działania. Zastanawiałem się jak z takich pętli można utworzyć taką aplikację, jak na przykład YouTube. Gdy stworzyłem swój pierwszy program na Androida i zobaczyłem, że te wszystkie elementy są tam używane byłem bardzo szczęśliwy. To było wspaniałe uczucie – zrozumiałem wtedy, że te wszystkie godziny nauki nie poszły na marne. Wam też życzę, żebyście poczuli to samo!

Mam nadzieję, że udało mi się rozwiać część Waszych wątpliwości i dzięki temu artykułowi wiecie więcej o tym zawodzie. Tradycyjnie widzimy się już za tydzień. W kolejnym odcinku napiszę, co należy robić, aby nie stracić motywacji.

Zapraszam również na największe w Polsce Forum dla programistów Android. Jeśli macie pytania odnośnie kariery jako programista – zapraszam do działu Kariera programowanie.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć jeśli interesuje Cię praca programisty


  • Pan Sceptyczny

    `W programowaniu nie mamy zjawisk fizycznych, nie możemy powiedzieć, że nie wykonała nam się pętla, bo jest zbyt wilgotno.`

    BULLSHIT!
    https://www.lanl.gov/science/NSS/issue1_2012/story4full.shtml

  • Otek

    Jak sprawdzić czy się nadaje do programowania?
    Zaczynam robić darmowe kursy idzie srednio. Z matematyki nie byłem wybitny. Po czym poznać ze sie ktos nadaje do tej branży?
    Prosze o podpowiedz

    • Paweł Dedio

      Początki zawsze są ciężkie, zobacz przede wszystkim czy to Cię kręci i interesuje. Ciężko zmuszać się do czegoś co nam się nie podoba

  • Korkodrilko

    Nie spotkałeś w żadnej firmie programisty po 40. Chyba tak młodo nie umierają?

    • Paweł Dedio

      Przeważnie stają się liderami zespołu lub jakimiś managerami.

    • dzezik

      To nic. Ale tekst ze 40to latkowie nie maja wspolnych tematow mnie rozbawil. Czyli ze 20latkowie z wlasnej woli zyja w gettcie? Jak mialem 20 pare lat to polowa moich kolegow to byli 40to latkowie. Teraz prawie polowa moich kolegow to wlasnie 20to latkowie. W IT nigdy nie widzialem barier wieku. Poznalem tez ludzi ktorzy wymiatali w cobolu gdy ja bawilem sie w przedszkolu i nadal w XXI wieku pracuja w branzy. Wogole to jakosc kodu drastycznie spada. Caly wzrost wydajnosci sprzetu marnowany jest przez beznadziejny kod pisany zapewne wlasnie przez takich domoroslych programistow jak autor. Cala para idzie w gwizdek, coraz bardziej fikusne interfejsy a pod spodem skrajnie nieoptymalny kod. Prawda jest taka ze 90% kodu programow nie ma nic wspolnego z logika programu i nie spelni funkcji biznesowej. Pozostale 10% wykonuje prace ale w sposob daleki od optymalnego. Mlodzi tego nigdy nie zrozumieja bo pracuja na akord. Im wiecej kodu tym wiecej kasy. Juz od kilkunastu lat nie zajmuje sie programowaniem na codzien ale jak mam stycznosc z czyims kodem to czasem szkoda mowic. Juz gdy bylem na studich pamietam byly dwa typy programistow. Jedni analizowali dlugo zagadnienie aby potem dobrc narzedzie i metode inni odrazu siadali do komputera i rozpoczynali pisanie wvswoim ulubionym jezyku. Ci drudzy zawsze produkowali gorsze rozwiazanie i czesto sie poddawali. Niestety to drugie podejscie jest bardziej promowane. Jakies 15 lat temu aplikowalem na programiste w firmie. W ramach rekrutacji trzeba bylo rozwiazac konkretny problem. Dostalem dane wejsciowe w postaci tabel i mialem je odpowiednio przetworzyc. Myslalem nad tym pare godzin a potem napisalem kilka linijek kodu w SQLu oraz jedna linijke ktora wywoluje ta funkcje z lini komdend jako interfejs. Jedna funkcja w SQLu kilka linijek backend i linijka frontend. Na rozmowie o prace dowiedzialem sie ze to moje bylo najprostrze i najefektywniejsze rozwiazanie i ze wogole byli zaskoczeni moja pomyslowoscia ale oni szukaja programisty w Eclipse a ja Eclipse nie znalem. Pytam dlaczego Eclipse skoro potrzebuja napisac kilka interfejsow miedzy systemami i zaden interfejs uzytkownika nie jest potrzebny. Odpowiedzieli ze kupili wlasnie licencje wiec chca uzywac tego srodowiska. Ten drend sie utrzymuje. Technologia determinuje rozwiazanie problemu. A to zle podejscie, technologie trzeba dobrac do problemu. Sa problemy ktore w jednym jezyku da sie opisac w kilku linijkch a w innych nawet i tysiac linni nic nieda. Pamietam gdy na studiach siedzialem caly lykend piszac w turbopaskalu rozwiazanie problemu ktory jak sie potem dowiedzialem w prologu mial 4 linijki. Dzis to samo widze w kodzie mlodych programistow. Pod spodem zawsze jest baza danych ale oni zamiast napisac jedno optymalne zapytanie do bazy robia pelno petli, porownan i filtrow i tysiace zapytan do bazy. Masakra. Nie twierdze ze to regula ale juz prawie plaga. Cos co 15 czy 20 lat temu bylo nie do pomyslenia aby pisac tak skrajnie nieefektywny kod dzisisj jest akceptowalne bo sprzet jest setki razy wydajniejszy. Takie refleksje programisty z lat 90tych.

  • Martina Neumayer

    Po lekturze takich kffiotków coraz częściej dochodzę do wniosku, że wymiana załogi u was staje się już wręcz koniecznością.

  • Tomasz Budzyński

    Im więcej czytam takich tekstów i im więcej ludzi przewija się przez moją firmę, coraz bardziej utwierdzam się w przekonaniu, że Smart Toster jest lepszy w programowaniu i pisaniu takich bzdur. Na prawdę nie widziałeś zastosowanie w pętach i if’ach??? 5 lat studiów przygotowuje do pracy programisty? Wcześniej się nie da? Cieszy mnie to, że nie trafimy na siebie w pracy, bo musiał bym patrzeć na twoje straszne spotkanie z rzeczywistoscia

    • Poiuy2010_2011

      Z tymi pętlami ifami może trochę niezgrabnie powiedziane, ale mimo to uważam, że trafne. Jak byłem jeszcze na tym poziomie to też się zastanawiałem „Jak niby z tego ma powstać cała aplikacja? Przecież w tym momemencie potrafię co najwyżej powypisywać jakieś wyrazy i porobić jakieś równania.”. Faktycznie może się wtedy wydawać, że profesjonalne programowanie polega na czymś zupełnie innym czego się jeszcze nie rozumie, ale nie jest tak zupełnie i to co się uczy w takoch podstawach jest mimo wszystko ważne.

      A jeśli chodzi o studia to możliwe, że autorowi chodzi o studia tylko I stopnia, więc 3–4 lata.

      • Mateusz

        U mnie na inżynierce każdy musiał napisać mały portal w dowolnej technologii więc nie wiem do jakich szkół chodziliście. Plus dodatkowo sporo programów client-server w C. Na studiach drugiego stopnia żadnej praktyki więcej się nie nauczysz więc moim zdaniem nie warto się męczyć, zrobić inżynierkę i potem samemu przeglądać przykłady z githuba różnych projektów i tak się uczyć

        • Bartek

          Napisać cokolwiek != umieć programować.

        • Poiuy2010_2011

          W pierwszym punkcie mówiłem raczej o poziomie liceum, na studiach faktycznie to już trochę inna sprawa.

    • Paweł Dedio

      Źle zinterpretowałeś to co napisałem, nie napisałem „ify i pętle wydawały mi się niepotrzebne” tylko „po co mi te wszystkie pętle i ify jak to nie daje żadnego realnego działania”. Chyba każdy z nas spotkał się z takim etapem, że pisał świetne programy konsolowe ale jeszcze nie potrafił napisać nic konkretnego, na przykład z interfejsem graficznym. Nie wiedziałem wtedy jak się mają te pętle i ify do realnych programów których używamy na codzień.
      Odnośnie studiów to nigdzie nie napisałem, że to studia przygotowują do programowania. Ba, w poprzednim odcinku pisałem, że studia nie są wymagane do pracy. Chodziło mi o to, że większość ludzi dopiero na studiach odkrywa, że programowanie jest fajne i wtedy zaczynają uczyć się na własną rękę. Ja sam zacząłem pracę jeszcze przed studiami

      • dzezik

        Przeczytalem tez twoje nowsze wypociny i widac sie zreflektowales ze tu nawypisywales bzdur. To wlasnie te petle i ify i programy konsolowe sa sercem programowania bo to one stanowia albo sa podstawa backendu a frontend ktory tu identyfikujesz z prawdziwym oprogramowaniem to tylko opakowanie.

        • Paweł Dedio

          Ja tutaj nigdzie nie negowałem wartości ifów i pętli, bo przecież bez tego nie może powstać żadna aplikacja. Chodziło mi tylko o to, że w początkowych fazach nauki, ciężko jest sobie wyobrazić jak z takich prostych konstrukcji może powstać jakaś wielka aplikacja.