20161003 220236

Proszę, nie ucz się programować...

Artykuł jest tłumaczeniem posta z TechCrunch.

Please don’t learn to code

Oto pomysł, który ostatnio coraz bardziej zyskuje na popularności w środowisku IT: Każdy powinien nauczyć się programować. Jednak jest z tym pewien problem: programowanie nie jest nową umiejętnością czytania i pisania. Jeśli regularnie przyglądasz się kulturowym krętactwom z Doliny Krzemowej, bez wątpienia słyszałeś o ruchu „Naucz się programować” (ang. „Learn to Code”). Politycy, organizacje społeczne jak Code.org, a nawet były burmistrz Nowego Jorku Michael Bloomberg zachęcali do programowania. Według nich jest to niezbędna umiejętność dla przyszłej siły roboczej. Być może jest w tym trochę prawdy, szczególnie odkąd zapotrzebowanie Stanów Zjednoczonych na inżynierów nie wykazuje oznak spowolnienia. Jednak sytuacja jest bardziej skomplikowana. Żyjemy w bardzo konkurencyjnym świecie, z ludźmi zwracającymi się do wszelkich metod, aby tylko związać koniec z końcem. Sprzedawanie programowania jako biletu do ekonomicznego zbawienia dla mas, jest nieuczciwe. Weźmy pod uwagę bootcampy, czyli intensywne kilkutygodniowe kursy programowania. Odkąd społeczeństwo dowiedziało się o sukcesie inżynierów oprogramowania z Doliny Krzemowej, każdy chce posiadać własny startup albo zostać inżynierem. Serial HBO Dolina Krzemowa pokazuje obraz ludzi przed trzydziestką, spędzających noce na programowaniu i paleniu zioła, wszystko to w trakcie zarabiania milionów dolarów. Amerykańska publika jest zafascynowana postaciami takimi jak Elon Musk, czy Mark Zuckerber, o których niektórzy myślą, że zarobili miliony w noc. Gorączka programowania dotarła nawet do Białego Domu, prezydent Obama opublikował ustawę wprowadzającą informatykę do planu nauczania każdej publicznej szkoły w Stanach Zjednoczonych. Nieoczekiwanie nie tylko bootcampy i politycy zachęcają ludzi do nauki programowania. Jednostki są aktywnie zachęcane do tego ze wszystkich stron, od Hollywood, aż po gwiazdy świata technologii. Pomimo tego rosnącego szumu, ja patrzę na bootcampy bardzo sceptycznie. Podczas gdy nasza kultura próbuje pokazać Dolinę Krzemową w seksowny sposób, a lśniące broszury szkoleń obiecują dobrze płatną pracę, prawda jest taka, że wiele z tych instytucji nie jest akredytowane, nie podają statystyk dotyczących pracy po szkoleniu i słabo sprawdzają się w kwestii zapewnienia sukcesu uczestnikom po bootcampie. Podczas gdy wiele szkoleń programowania jest dobrych, a prowadzący troszczą się o swoich kursantów, jeszcze większa liczba chce tylko zarobić na desperacji przeciętnego Amerykanina. Nie zrozumcie mnie źle. Wierzę, że inżynieria i programowanie są ważnymi umiejętnościami. Ale tylko w odpowiedniej sytuacji i tylko dla osoby gotowej podjąć odpowiedni wysiłek, aby osiągnąć sukces. To samo można powiedzieć o wielu innych umiejętnościach. Nie będę bardziej zachęcał wszystkich do nauki programowania, niż do nauki robienia odwiertów.

45 zł za 20 interaktywnych kursów programowania.

Taniej nie będzie. Sprawdź nas.

Skupianie się na pisaniu kodu, zwiększa znaczenie znalezienia „poprawnego” rozwiązania problemu, ponad znaczenie zrozumieniu tego problemu.

Zanim zaczniemy pracę nad rozwiązaniem problemu programistycznego, musimy się zastanowić nad tym, czym jest problem oraz czy na pewno dane zagadnienie jest problemem. Jeśli skupimy się na tym jak rozwiązać problem przez napisanie odpowiedniego kodu, bez względu na to czy napotkane zagadnienie jest faktycznie problemem programistycznym, nic nie zyskamy. Mam bliskiego przyjaciela, który jest byłym mistrzem Akademickich Mistrzostw Świata w Programowaniu Zespołowym. Według niego najważniejsze podczas mistrzostw było zrozumienie problemu, który starał się rozwiązać. Musisz zapytać siebie, „Czy na pewno masz problem” oraz „Czy możesz zastosować zasadę Feynman’a i wyjaśnić w taki sposób, aby inni mogli Cię zrozumieć”. Ten przyjaciel powiedział mi, że nawet w elitarnych szkołach, uczniowie czytają opis problemu tylko raz, a następnie od razu piszą kod. W tym roku, gdy mój przyjaciel został mistrzem, nauczył się czegoś: nawet uczestnicy z elitarnych szkół zaczęli rozwiązywać problemy, z kodem jako ich jedyną bronią. W tym czasie mój przyjaciel przystąpił do pisania, dopiero po całkowitym zrozumieniu problemu. Wykorzystał prawie cały dostępny czas na myślenie o problemie. Nie napisał żadnego kodu, aż do ostatnich minut przed końcem czasu. Został mistrzem. Wiedział, że pisanie wielu linii kodu nie rozwiąże problemu, ale chłodne, opanowane rozwiązywanie problemu może to zrobić.

Nadmierne skupianie się na pisaniu kodu, jest ignorowaniem ciężkiego losu obecnych programistów.

W tej branży technologia zmienia się w szybkim tempie. Jeszcze kilka lat temu używałem Objective-C, teraz programuję prawie całkowicie w języku Swift. Aktualnie są programiści iOS starający się o pracę, którzy nigdy nie napisali linii kodu Objective-C. Swift jest łatwiejszy w nauce, bezpieczniejszy, używa nowoczesnych paradygmatów programowania i jest elegancki w taki sposób, w jaki Objective-C nigdy nie był. Fakt, że nowi programiści nigdy nie zmierzą się z brakami Objective-C jest wspaniały, ale ignoruje rzeczywistość tego zawodu. Od programistów oczekuje się, że z małymi wskazówkami i bez nadmiernego zachęcania, będą się szybko uczyć nowych technologii. Można to argumentować tym, że jest to po prostu jedna z wad tej branży. Jednak jeśli obecnie programiści są sfrustrowani lub zostają w tyle – są dowody potwierdzające taką sytuację – dlaczego zachęcamy kolejnych ludzi, do wejścia w tak niepewne królestwo? Co stanie się z osobą, która spędziła dni i noce na nauce Objective-C tylko po to, aby doznała szoku, podczas ogłoszenia wydania języka Swift na konferencji WWDC 2014. Czy taka osoba będzie dalej pisać w języku, który już niedługo stanie się rzadko używany, czy zacznie naukę nowego języka od początku? Jeśli jesteś młody, masz dwadzieścia kilka lat, może to być dla Ciebie trudne. Jednak, gdy troszczysz się o rodzinę, musisz opłacić rachunki i wyżywić kilku ludzi, takie zadanie staje się wręcz herkulesowe. Ludzie w takiej sytuacji najczęściej mierzą się z problemem, bez solidnego zrozumienia programowania lub inżynierii.

Granica pomiędzy uczeniem się programowania, a uzyskaniem zapłaty z pracy jako programista, nie jest łatwa do przekroczenia.

Na prawdę. Ja poświęciłem ponad rok samodzielnej nauki, zanim udało mi się dostać fuchę jako freelancer. Jednak nawet wtedy wynagrodzenie było kiepskie. Niezliczoną ilość razy odmówiono mi nawet rozmowy o pracę, dlatego, że nie miałem skończonych studiów informatycznych. Były czasy, kiedy nie było mnie stać na wynajęcie mieszkania i musiałem polegać na życzliwości przyjaciół, którzy mnie utrzymywali. Było wiele nocy, kiedy chciałem się poddać. Jednak znalazłem siłę, aby iść naprzód. Była – i jest – we mnie wytrwałość, która pozwala mi zostać w tej dziedzinie. Prawda jest taka, że nie łatwo dostać się do branży, nawet jeśli chodzi tylko o staż. Potrzebujesz znajomości, ludzi którzy za Ciebie poręczą, konta na GitHubie prowadzonego przez dłuższy czas i jeszcze więcej. Pomimo postępów w zakresie równych szans, jeśli należysz do jakieś mniejszości, będziesz musiał być dwa razy lepszy niż wszyscy pozostali. Musisz po prostu pokazać swoje kompetencje. Przeszkody są wszędzie. Są absolwenci najbardziej elitarnych studiów w US, którzy uważają, że zadanie pytania takiego jak „Jak byś odwrócił drzewo binarne?” jest najlepszym sposobem, aby ocenić czyjeś umiejętności techniczne. Są projekt menadżerowie z obsesją na temat białych tablic oraz menadżerowie HR, którzy w liście wymagań oferty pracy piszą „wymagane 5 lat doświadczenia w języku programowania Swift” (Swift został wydany w 2014 roku). Osoby te stoją pomiędzy tobą, a przyzwoitą pracą. Z tego co mi wiadomo, nie ma innego sposobu, aby ominąć tych ludzi, niż zagranie w ich gierki, nawet jeśli są niesprawiedliwe.

Końcowe przemyślenia

Jeśli zostanie inżynierem, jest tym co chcesz osiągnąć, nie pozwól mi – ani nikomu innemu – stanąć ci na drodze. Nie pozwól też tradycyjnym ramom, takim jak system edukacji, aby cię spowolniły. Nie ma poprawnych i niepoprawnych dróg osiągnięcia twojego celu. Nie zapominaj jednak o rzeczywistości, będąc oczarowany przez naszą kulturę promującą Dolinę Krzemową. Ta branża nie jest kartą z nielimitowanym debetem. Musisz poświecić czas, aby zrozumieć tę dziedzinę. Musisz czuć się dobrze z faktem, że twoja praca będzie polegała na rozwiązywaniu problemów, a nie wyłącznie na korzystaniu z gotowych frameworków. Musisz też przywyknąć do tego, że w każdym momencie może pojawić się potrzeba nauki nowego frameworku albo języka programowania. Musisz się też pogodzić z tym, że będziesz musiał walczyć o pracę. Branża oprogramowania jest lukratywna, jednak transformacja z „kodera” na „inżyniera” jest wymagająca. Jeśli będziesz się tego trzymał, możesz zmienić nie tylko swoje życie, ale również twój cały sposób myślenia.