12 września 2012 - święto programistów! Czego im życzyć?
8 GB RAMu, 16GHz procesora z dobrym chłodzeniem [np. core i7 2600k], pingu do serwera UT3 nie większego niż 32ms, 64 maile mniej co rano...
12.09.2012 | aktual.: 13.09.2012 08:08
Dla programistów liczba 256 - to liczba magiczna, zawierająca wszystkie możliwe wartości jednego bajta, w jego najpopularniejszej 8-bitowej postaci. Nic więc dziwnego, że właśnie 256 dzień w roku obrali oni na swoje święto. Zazwyczaj dzień ten przypada na 13 września, ale w tym roku (gdyż jest to rok przestępny) programiści świętują o dzień wcześniej - 12 września.
"Z okazji Dnia Programisty pragnę życzyć wszystkim kolegom i koleżankom „po fachu”, co następuje:
2 razy więcej czasu na projekty,
4 monitorów, chociaż praca na trzech jest już całkiem znośna,
8 GB RAMu,
16GHz procesora z dobrym chłodzeniem [np. core i7 2600k],
pingu do serwera UT3 nie większego niż 32ms,
64 maile mniej co rano,
128 razy więcej czasu na rozwijanie własnych zainteresowań,
256 GB dysku SSD,
oraz, żeby cały najbliższy rok był lepszy od wszystkich poprzednich" - te życzenia programista Tomasz Kowalczyk zamieścił rok temu na swojej stronie internetowej - blog.kowalczyk.cc.
Postanowiliśmy więc sprawdzić nie tylko czego programiści życzą sobie w tym roku, ale także na czym polega ich praca, zapytać o nietypowy język, którym się posługują, dowiedzieć się czy faktycznie to zawód wyłącznie dla prawdziwych pasjonatów i dyskretnie zajrzeć do portfela programisty. O specyfice swojego zawodu opowiada programista komputerowy, Tomasz Kowalczyk. * - Programista, informatyk, administrator sieci - te terminy traktowane są w mowie potocznej niemal jak synonimy. Faktycznie informatyk i programista to ta sama osoba, czy traktowanie tych określeń wymiennie wynika, z braku wiedzy na ten temat? Kim właściwie jest programista? *
- Żeby wyjaśnić kim jest programista, trzeba najpierw zrozumieć w jaki sposób działa cała branża i jakie "typy" zawodów są w niej obecne. Oczywiście można przyjąć, że każda osoba związana z komputerami jest informatykiem, ale żeby być ścisłym, należy wyróżnić administratorów, programistów, "sieciowców" i informatyków. * Administratorzy to osoby, których celem jest wdrożenie lub utrzymanie działających już systemów korzystając z gotowych, dostępnych narzędzi (programów, komputerów). Mają oni wiedzę dotyczącą tego, jak połączyć gotowe elementy w działający system, * Z kolei programiści z definicji zajmują się tworzeniem nowych lub integracją istniejących już systemów. Dotyczy to zarówno systemów docelowych, czyli takich, z których korzystają użytkownicy, jak też pośredniczących, czyli tych, które łączą te systemy ze sobą, a są niewidoczne dla użytkownika. Dzięki wiedzy jaki kod powoduje określoną reakcję komputera, programiści potrafią zmieniać jego zachowanie zgodnie z oczekiwanym celem.
- "Sieciowcy" to osoby, których kompetencje są związane z tworzeniem i utrzymaniem sieci komputerowych. Wykorzystując wiedzę dotyczącą protokołów komunikacji (języków, którymi "rozmawia ze sobą" połączony sprzęt) oraz dostępnego sprzętu, potrafią oni tak je podłączyć i ustawić tak, aby np. wszystkie osoby z danego piętra posiadały dostęp do internetu i mogły "widzieć" pozostałych użytkowników i współdzielić z nimi pliki i katalogi. * Informatycy z kolei, przynajmniej dla ludzi z "branży" to osoby, których zadaniem jest instalacja i konfiguracja komputerów dla użytkowników końcowych (system operacyjny, pakiet biurowy, komunikator, dostęp do internetu, itp.).
Bardzo często programiści nazywani są informatykami, co trochę boli nasze ego. Jednak faktycznie większość z nas jest po studiach informatycznych, więc formalnie rzecz biorąc taki tytuł nie jest nieuzasadniony. Faktycznie wygląda to jednak w ten sposób, że bardzo często nasze kompetencje przenikają się. Np. programista musi umieć stworzyć sobie środowisko pracy (kompetencje informatyka). Ja jako programista zajmuję się tworzeniem aplikacji internetowych, ale muszę jednocześnie umieć zarządzać serwerem, na którym one działają czyli wchodzę w kompetencje administratora. Z kolei administrator często pisze małe skrypty / programiki dla ułatwienia własnej pracy (kompetencje programisty), a informatyk zarządza siecią komputerów (kompetencje sieciowca). Więc według tej definicji ja w aktualnej pracy jestem zarówno informatykiem, programistą, jak i administratorem.
- Jak się zostaje programistą? Czy konieczne jest ukończenie studiów, czy wystarczy pasja i samokształcenie?
- Aby zostać programistą, wystarczy nauczyć się programować. Tylko (i aż) tyle. Nie potrzeba do tego studiów. Wiele osób sprawnie pisze kod już od szkoły podstawowej czy gimnazjum. Wystarczy Internet lub po prostu osoba, która pokieruje młodym pasjonatem komputerów i pokaże mu, w jaki sposób można nimi sterować. Ja bardzo długo nie miałem dostępu do Internetu w domu. Wśród znajomych nie miałem także zbyt wielu osób o podobnych zainteresowaniach. Ale sukcesywnie czytając wszystko, co udało się zdobyć, ściągając w miarę możliwości różnego rodzaju poradniki i dokumentacje, poznałem samodzielnie kilka języków programowania i kiedy w liceum trafiłem na nauczyciela informatyki, który nauczył nas programować w języku Pascal wiedziałem już, że to będzie moja przyszłość.
Jednak studia informatyczne to dobry pomysł jeśli wiąże się przyszłość z takim zawodem, ponieważ można spróbować wielu rzeczy, których normalnie nie nauczylibyśmy się przez czyste lenistwo, które cechuje programistów (śmiech). Warto też tam pójść po to, żeby poznać podobnych sobie ludzi - takie znajomości naprawdę przydają się w późniejszych latach życia, ponieważ jesteśmy świadomi ich kompetencji i możemy poprosić o pomoc, wyjaśnienie konkretnego problemu. Ostrzegam jednak, że zdecydowanie nie warto iść na takie studia, jeśli ktoś uważa, że zostanie "nauczony zawodu". Na takich studiach uczysz się sam. Sam piszesz kolejne własne skrypty i programy i sam rozwijasz się poprzez czytanie blogów, poradników, dokumentacji i tym podobnych materiałów. Informatyka teoretyczna, jaka jest nauczana na studiach, to podstawy, jakie każdy z nas powinien posiadać, chociaż naprawdę nikła część przydaje się w faktycznej pracy. Najgorszy błąd jaki można popełnić to zdobycie dyplomu magistra i... brak jakichkolwiek
umiejętności praktycznych.
Nie warto też zaliczać wszystkich przedmiotów na piątki, trzeba ocenić które przedmioty niosą ze sobą wartość i je właśnie przyswoić. Miałem na studiach przedmiot "Programowanie Równoległe i Rozproszone", który formalnie nie przydaje mi się do niczego w pracy, jednak uważam go za jeden z najlepszych, jakie przytrafiły mi się w karierze studenta. Dlaczego? Dlatego, że dzięki zrozumieniu m. in. prawa Amdahla i tego, w jaki sposób komunikują się ze sobą wszystkie części działającego w ten sposób systemu (wiele elementów wykonujących tą samą pracę, w tym samym czasie - jak to zaprogramować tak, żeby żaden z nich nie zepsuł pracy innego albo nie zużył całej dostępnej mocy komputera?), tworzenie oprogramowania, z którego ma korzystać wielu użytkowników jednocześnie nie stanowi dla mnie problemu. Studia nie uczą w żaden sposób tego, co będziesz w przyszłości robił jako programista - studia pokazują tylko możliwości, które - jak ze szwedzkiego stołu - wybierasz sam i których uczysz się sam pisząc, pisząc i pisząc
kolejne linie kodu.
- Jak wygląda dzień pracy programisty? I czy po pracy programista unika komputera, czy przeciwnie nie może się z nim rozstać?
- Dzień pracy wygląda bardzo prosto: wstaję z łóżka, piszę kod, kładę się do łóżka. Inne czynności to bardzo marginalne elementy życia (śmiech). Tak na poważnie - w początkowych fazach kariery programisty, w trakcie dnia pracy pisze się dosyć dużo kodu. Wynika to pośrednio z tego, że jeszcze odkrywamy tą paletę możliwości, z której będziemy korzystali przez resztę życia i po prostu wszystkiego musimy spróbować. Każdy nowy fragment kodu, naszego lub kogoś innego, to źródło inspiracji i pomysłów - "jak można zrobić to lepiej, szybciej, wygodniej". Po kilku latach każdy programista wie, że aby osiągnąć swój cel wystarczy skorzystać z pewnych rozwiązań z przeszłości lub użyć gotowego fragmentu kodu przygotowanego do rozwiązania danego problemu przez kogoś innego.
To, co programiści robią po pracy to zupełnie inna sprawa - dzielimy się tutaj właściwie na dwa obozy.
Do pierwszego należą ludzie, którzy zainteresowali się zawodem z powodów czysto finansowych. Zazwyczaj nie są zainteresowani tym co robią, nie rozwijają swoich umiejętności, w wolnym czasie po prostu wyłączają komputer albo spędzają go przeglądając śmieszne obrazki w Internecie. Jeśli ktoś nie jest pasjonatem, to jest to całkowicie zrozumiałe, jednak tacy ludzie pomimo tego, że niewiele osiągnęli, uważają, że jak już coś umieją, to mogą spocząć na laurach.
W drugim obozie są osoby, które zainteresowały się programowaniem z pasji. Cały czas rozwijają się przez pisanie własnego lub studiowanie kodu innych. Takie osoby oczywiście nie wyłączają się społecznie, także mają czas dla znajomych, żeby wyjść "na miasto", itp. Po prostu programiści - pasjonaci mają świadomość tego, że kod to produkt, który także posiada swoją "jakość" i tak, jak można wyprodukować całą partię krzywych śrubek, tak można też napisać zwyczajnie zły kod. Konsekwencją użycia takich śrubek może być np. zawalenie się mostu, w programowaniu te konsekwencje są o oczywiście mniejsze, ale nie można ich ignorować. Np. w przypadku, kiedy dane rozwiązanie ma zostać użyte przez bank lub inną instytucję, która "nie może się pomylić".
Jest takie powiedzenie: "pasja to coś, co mógłbyś robić nawet jeśli nikt by ci za to nie płacił" oraz drugie: "programista, który nie programuje w swoim wolnym czasie, nigdy nie będzie dobrym programistą". Te dwa zdania podsumowują niejako społeczność - ten, kto chce być dobry, w końcu ciężką pracą osiągnie rezultat, który zazwyczaj zostanie także wynagrodzony odpowiednim stanowiskiem i płacą. Z kolei ten, kto uważa, że wszystko umie, nie chce się rozwijać i dodatkowo ma roszczeniową postawę w stylu "znam podstawy tego i tego, poproszę tyle tysięcy", nigdy nie wyjdzie poza poziom najniższego "klepacza kodu" w firmie, którego zawsze można zastąpić kimś tańszym. * - Gdzie pracują programiści - w jakich branżach, jakich przedsiębiorstwach znajdują zatrudnieni? *
- Programiści są zatrudniani wszędzie tam, gdzie potrzebni są ludzie potrafiący wcielić różnego rodzaju pomysły w życie. Tworzenie nowych stron internetowych (graficy, programiści frontendu, programiści backendu, koderzy szablonów), aplikacji na telefony (platformy Android, iOS, Bada, BlackBerry) i już w nieco mniejszym stopniu tradycyjnych ("instalowanych") programów komputerowych (narzędziowe, specjalistyczne) to największe filary działalności ludzi związanych z zawodem. Mam też znajomych, którzy pracują np. przy tworzeniu oprogramowania dla firm medycznych, programów do analizy statystycznej i zarządzania pracownikami. To są o wiele mniejsze rynki jeśli chodzi o ilość stanowisk, o jakie można się ubiegać, co wcale nie znaczy, że są gorsze. W tym zawodzie naprawdę można robić wszystko, wystarczy, że tworzone oprogramowanie przynosi w jakikolwiek sposób zysk firmie.
- Programiści to raczej "etatowcy", czy wolni strzelcy?
- Jak w wielu zawodach, także programiści dzielą się na wolnych strzelców i pracowników stałych. I nie można tu wskazać bezpośredniego połączenia między typem projektu i formą zatrudnienia. O formie współpracy decyduje raczej wielkość firmy. Wielkie korporacje cenią sobie zastępy pracowników, których można przydzielić do wszystkiego, a mniejsze firmy wolą dorywcze zlecenia na to, czego aktualnie im potrzeba.
- Mimo, że na użytek tego wywiadu używa Pan głównie słów powszechnie zrozumiałych, pojawiają się terminy zupełnie obce dla osób niezwiązanych z branżą. Wystarczy też zajrzeć na forum, gdzie ze sobą rozmawiacie, by odnieść wrażenie, że to jakiś zupełnie obcy język. Czy mogę poprosić o przykład takiego prostego, powszechnie używanego przez programistę zdania, którego przeciętna osoba z pewnością nie zrozumie?
- (Śmiech) Takim przykładem może być np. zdanie "zrób deploy z mastera na deva", którym często wymieniamy się z współpracownikami w mojej aktualnej firmie. A teraz spróbuję to wyjaśnić. Deploy oznacza wdrożenie ostatnio opracowanych zmian do projektu tak, aby użytkownicy mogli już z nich korzystać. W naszym przypadku polega to na wgraniu kodu w określone miejsce na komputerze, dzięki czemu strona internetowa reaguje w zmieniony sposób. Poza tym programiści pracują z tzw. systemami kontroli wersji (ang. VCS - Version Control System) - na rynku jest kilka popularnych rozwiązań tego typu (git, Hg, SVN), my wykorzystujemy ten pierwszy (git). Ideą korzystania z niego są tzw. "branche", tj. "gałęzie", czyli miejsca w których znajdują się określone partie kodu. Jeśli wpadamy na pomysł, żeby dodać np. możliwość komentowania artykułów na stronie internetowej, to tworzymy nową gałąź, w której wprowadzamy zmiany (każda zmiana to tzw. commit) aż do momentu, kiedy cel zostaje osiągnięty. W tym momencie łączymy ją (ang.
"merge") z główną gałęzią projektu (jego nazwą zazwyczaj jest wspomniany w zdaniu "master"), dzięki czemu wiemy, że mamy na tej gałęzi ("na masterze") działający kod z nową funkcją. Ostatni trudny termin to "dev", który jest skrótem od angielskiego "development" - czyli środowisko testowe, w którym sami sprawdzamy, czy na pewno wszystko jest tak, jak być powinno. Podsumowując: "zrobienie deployu z mastera na deva" oznacza wgranie kodu z miejsca, w którym znajduje się już ten sprawdzony przez programistów, do miejsca, w którym możemy go testować jeszcze przed oddaniem do użytku internautom.
- Faktycznie, to zupełnie obcy język. W takim razie zapytam o coś, co będzie dla wszystkich zrozumiałe... Czy jest praca dla programistów? Czy warto kształcić się w tym kierunku, czy rynek jest już wysycony?
- Praca i owszem jest, ale dla tych ludzi, których wyżej określiłem jako "pasjonatów". Tych jest relatywnie niewielu i firmy zawsze będą chciały mieć takich ludzi w swoich szeregach, ponieważ można im zlecić dowolne zadanie i być pewnym, że albo zostanie zrobione od razu, albo zatrudniona osoba będzie potrzebowała czasu na zdobycie wiedzy, ale osiągnie cel i dodatkowo wprowadzi dużo wartości dodanych w postaci wiedzy i doświadczenia na przyszłość. Ludzie, którzy nie chcą się rozwijać, poznawać nowych sposobów na rozwiązanie różnego rodzaju problemów, o ile nie posiadają pewnych innych wartościowych cech - np. przywództwo, zarządzanie, rozmowy z klientami, nigdy nie wybiją się ponad stanowisko zwykłego "klepacza kodu". Taka jest specyfika tej branży, że co kilka lat następuje wymiana technologii, technik tworzenia oprogramowania i tym podobnych rzeczy, więc można to zignorować i w pewnym momencie stać się niepotrzebnym, albo zrozumieć zmiany i dostosować się. Ludzi "którzy znają się na komputerze" zawsze
będzie dużo, bo wiele osób się tym interesuje, także trzeba się trochę postarać. To zdecydowanie nie jest posada państwowego urzędnika, który całe życie wykonuje podobne czynności i jeśli nie popełni wykroczenia lub nie będzie to zależało od aktualnej opcji politycznej, praktycznie nie ma możliwości zwolnienia.
- Cudownie jest jeśli praca jest jednocześnie pasją i chcielibyśmy ją wykonywać nawet gdyby nam za nią nie płacono, jednak nie oszukujmy się - wynagrodzenie jest ważne. Na jaką pensję można liczyć w tym zawodzie?
- Jedyna poprawna odpowiedź brzmi: to zależy. I to od wielu czynników. Min. miejsca zamieszkania (duże miasto, małe miasto), wykorzystywanych technologii (korporacyjne, open source, niskopoziomowe), lat profesjonalnego doświadczenia (1, 3, 5, więcej), klienta lub pracodawcy (korporacja, startup, własna firma)
, rodzaju projektów (utrzymanie czy tworzenie systemu, małe projekty, duże projekty, tworzenie i sprzedaż własnego produktu), itd. Programiści naprawdę mogą zarabiać bardzo różne kwoty będąc bardzo zbliżonymi w podanych wyżej parametrach - wystarczy zmiana np. technologii, żeby móc rozmawiać o zupełnie innych pieniądzach. Może to być zarówno kwota 2 tys., jak i 20 tys. i więcej. Sam ze względu na prywatne preferencje nie pracuję wcale w tych najlepiej płatnych technologiach, ale pracowałem i nadal pracuję przy dosyć dużych projektach, więc jakoś związuję koniec z końcem, a czasem nawet uda się pójść do kina (śmiech).
- Jak programiści obchodzą swoje święto?
- Bardzo różnie. Od zwyczajnego siedzenia przy komputerze i pisania kolejnych partii kodu, przez granie w ulubione gry, do spotkań w zamkniętym gronie specjalistów swojej dziedziny.
- A czego można życzyć programiście z okazji jego święta?
- Szybkiego komputera, lepszych narzędzi, bezbłędnego kodu, ciekawych i dużych projektów... lista jest długa (śmiech). Na pewno przyda się też zdrowie, bo po kilku latach garbienia się nad monitorem i stukania w te same klawisze, kręgosłup i palce u rąk dają o sobie znać. Jak każdemu pracownikowi można też życzyć: dobrego szefa, długich wakacji, podwyżki itp. Poza tym standardowo: szybkich samochodów, pięknych kobiet i dużo pieniędzy (śmiech).
- W takim razie spełnienia wszystkich tych życzeń! Dziękuję za rozmowę.
AD/AS