Często dostaję pytanie: Co mam zrobić by stać się programistką/programistą? Oczekiwana odpowiedź to: przeczytaj tę książkę, naucz się tej technologii, zrób ten kurs. Osoby pytające chciałyby poznać prostą odpowiedź. Jak zrobisz to, to będziesz programistką/programistą. Niestety to nie takie proste. Oczywiście można skończyć studia informatyczne (ja tak zrobiłam), by czuć się w programowaniu pewniej, jednak studia nie są gwarancją bycia dobrą programistką lub programistą. Programowanie to jedna z tych dziedzin, które wymagają od nas ciągłego doskonalenia umiejętności, uczenia się nowych rzeczy i nowego spojrzenia na różne problemy. Myślę jednak, że są pewne uniwersalne umiejętności, które moim zdaniem przydają się przy pracy z kodem. Chciałabym się nimi z Tobą podzielić.
Dokładność
Jak już wpada się w wir pracy, to zawsze jest coś do zrobienia. Wszystko jest ważne, ma wysoki priorytet. To powoduje, że robimy za dużo rzeczy w tym samym czasie. Utrudnia nam to skupienie i źle wpływa na jakość wykonywanego zadania. Nowe funkcjonalności nie są do końca zrobione lub koncentrujemy się tylko na głównej ścieżce (happy path) nie uwzględniając np. błędów. Warto się tutaj zatrzymać. Kiedy zaczynamy robić jakieś zadanie, to 100% naszego skupienia powinno być właśnie na nim, od początku do końca. To my odpowiadamy za jego dobre wykonanie. Pomocna może się okazać lista TODO, czyli lista rzeczy, które należy sprawdzić, uwzględnić przed zakończeniem zadania. Część z tych rzeczy będzie wspólna dla wielu zadań. Inne będą bardzo specyficzne dla konkretnego problemu. By ułatwić sobie pracę możemy odpowiedzieć na następujące pytania:
- Czy ta funkcjonalność robi dokładnie to co powinna?
- Czy kod jest sprawdzony? (Code review)
- Czy funkcjonalność jest przetestowana? (testy automatyczne, QA)
- Czy spełniamy standardy wyznaczone dla naszego kodu? (lintery)
- Czy uwzględniamy wszystkie możliwe przypadki/problemy?
- Jak dbamy o obsługę błędów (zły format danych, brakujące parametry)?
- Czy obsługujemy autoryzację lub uwierzytelnianie?
- Czy nazwy jakich używamy są znaczące? (nazwy plików, zmiennych, metod, itd.)
To dobre pytania by zacząć ustalać sobie standardy jakie musi spełnić przygotowywana funkcjonalność czy fragment kodu. Najważniejsze jest by zadbać o dobrą jakość. Nie chodzi o to by wszystko było idealne, tak się nie da, ale by spełniało nasze kryteria akceptacyjne dotyczące kodu, architektury czy użyteczności.
Zaangażowanie
Kiedy zaczynasz jakieś zadanie, jesteś za nie w pełni odpowiedzialna. Oczywiście możesz prosić o pomoc, umówić się na sesje wspólnego programowania (pair programming) czy omówienie architektury, jednak koniec końców to Ty odpowiadasz za dostarczenie gotowego rozwiązania. Ty odpowiadasz za szukanie rozwiązania, jakość kodu, dobre zrozumienie zadania czy obsłużenie wszystkich wyjątkowych sytuacji. Twoi koledzy i koleżanki mogą Cię wspierać, ale to Ty powinnaś wziąć odpowiedzialność za przypisane do Ciebie zadanie, od przygotowania propozycji rozwiązania aż do wypuszczenia nowej wersji na produkcję. Wiem, że istnieją różne zespoły. Jedne dają więcej autonomii, inne mniej. Jedne osoby bardziej się specjalizują, a inne mają szeroką wiedzę i umiejętności. Nie zmienia to faktu, że odpowiadasz za zadanie nad którym pracujesz. Najgorszą rzeczą jaką możesz zrobić to przerzucić odpowiedzialność na inne osoby. Mówiąc coś w stylu: To nie jest moja odpowiedzialność, to oni powinni się tym zająć. Wiem, że branie na siebie odpowiedzialności jest trudne i wymaga od nas więcej zaangażowania, ale to też powoduje największy wzrost naszych umiejętności. Trzeba naprawić style na stronie? Inni, którzy się w tym specjalizują są zajęci? Ja chcę dokończyć zadanie? Czemu więc nie spróbować tego zrobić? Może zajmie to trochę więcej czasu, ale zadanie będzie już ukończone.
Samodzielność
Kiedy pojawia się problem, umiejętność poradzenia sobie z nim samodzielnie to duży plus. Czasem jest to proste. Wystarczy znaleźć coś w dokumentacji. Czasem jednak może sprawić kłopot. Wtedy przydają się umiejętności samodzielnego szukania rozwiązań czy informacji: forum internetowe, artykuły czy StackOverflow. Najczęściej rozwiązanie naszego problemu już istnieje i trzeba je tylko znaleźć. Nie chodzi mi o to, że nie możemy szukać pomocy u naszych koleżanek czy kolegów w pracy. Warto jednak samodzielnie poszukać rozwiązania zanim zajmiemy komuś czas.
Komunikacja
To duży temat, zwłaszcza w zespołach pracujących zdalnie. Cel to komunikować się pro-aktywnie. Innymi słowy: Tell, don’t ask. Mów co się dzieje tak by inni nie musieli pytać, by mieli już tą informację. Podsumuj co zrobiłaś danego dnia, opisz jakie były problemy, na co trzeba zwrócić uwagę. Umieść to w jednej dłuższej opisowej wiadomości, zamiast w 10 mniejszych. To znacznie mniej rozprasza innych podczas pracy. W takiej wiadomości, nie musisz się rozdrabniać, ale warto zaznaczyć ogólny wygląd sytuacji. Jednak komunikacja to nie tylko wiadomości, to też sposób w jaki piszemy kod, jaką mamy konwencję nazewniczą, jak używamy git-a, jak opisujemy Pull Request, zadania, problemy czy błędy. Istotne jest to, by opisywać rzeczy tak, że nawet po kilku miesiącach czy latach wiemy o co chodziło. Czytasz opis i nie potrzebujesz pytać o dodatkowe informacje.
Dociekliwość
Coś w kodzie nie działa albo właśnie działa, a Ty nie wiesz dlaczego? To dobre miejsce by się zatrzymać i sprawdzić. Może właśnie znalazłaś błąd, a może nauczysz się czegoś o działaniu aplikacji. Im więcej pytań zadajesz, tym lepiej znasz system z którym pracujesz. Co również przekłada się na poprawę jego jakości. Taka dociekliwość nie jest łatwa i też nie zawsze jest na nią czas, ale możesz się dzięki niej wiele nauczyć.
Logiczne/analityczne myślenie
Nic w programowaniu nie działa magicznie. Na wszystko jest wytłumaczenie, choć nie zawsze widoczne na pierwszy rzut oka. To dlatego logiczne myślenie jest tak ważne. Dzięki niemu jesteś w stanie zrozumieć co Twój program robi i dlaczego. Świadomie pomijam tu dziedziny takie jak uczenie maszynowe, gdzie zrozumienie jak działa program jest bardziej skomplikowane.
Dodatkowe przydatne umiejętności
Na koniec, chciałabym podzielić się jeszcze kilkoma wskazówkami, które mogą pomóc Ci w podszkoleniu programistycznych umiejętności:
- Nauka narzędzia Git - Git to bardzo przydatne narzędzie, pozwalające przechowywać Ci całą historię zmian Twojego projektu. Umiejętność posługiwania się tym narzędziem może znacznie przyśpieszyć Twoją pracę. Jeżeli chcesz dowiedzieć się więcej o narzędziu Git, polecam moją serie artykułów na ten temat.
- Nauka testowania - Wiem, są zespoły w których istnieją całe działy zajmujące się testowaniem oprogramowania. To jednak nie zwalnia Ciebie jako programistki/programisty z pisania własnych testów automatycznych przynajmniej do kodu, który sama piszesz. Testy znacznie przyśpieszają możliwość weryfikacji poprawnego działania systemu już od najmniejszych jego elementów. Takie testy początkowo mogą dokładać dodatkową pracę, ale szybko się zwracają gdy system zaczyna się powiększać.
- Nauka wzorców projektowych - Posiadanie wiedzy o wzorcach projektowych w znacznym stopniu ułatwia porozumiewanie się w zespole. Daje Wam dodatkowy język, dodatkową warstwę abstrakcji dzięki której szybciej możecie ustalić co dokładnie macie na myśli. Nie musicie wszystkiego wyjaśniać, wystarczy powiedzieć Użyjmy tutaj MVC i wszyscy wiedzą co to oznacza. Wszyscy znający ten wzorzec projektowy.
- Używaj linterów - Kiedy zaczynasz programować w nowym języku lub w nowym projekcie, reguły dotyczące formatowania kodu mogą być na początku przytłaczające. Trudno je spamiętać. W takiej sytuacji przydają się lintery. Nie tylko sprawdzą czy nasz kod jest zgodny z przyjętym standardem, ale często potrafią też samodzielnie poprawić formatowanie.
- Używaj skrótów klawiszowych - to znacznie przyśpieszy Twoją pracę. Zamiast przełączać się z myszki na klawiaturę, z klawiatury na myszkę najważniejsze funkcję będą w zasięgu Twoich palców. Wiele narzędzi posiada swoje własne skróty klawiszowe: przeglądarki, edytory tekstu czy terminale.
- Popraw swoje środowisko pracy - By przyśpieszyć swoją pracę warto zautomatyzować powtarzalne czynności pisząc własne skrypty czy skróty/aliasy, tak by skupić się na pracy kreatywnej, a nie na automatycznych zadaniach.
- Zadbaj o swój angielski - Język angielski jest bardzo ważny zwłaszcza w komunikacji. Zazwyczaj dokumentacja, fora czy artykuły związane z IT są napisane właśnie w tym języku. Dodatkowo dobrą praktyką jest utrzymywanie dokumentacji projektu w języku angielskim. To ułatwia wprowadzanie nowych osób do projektu, gdy nie mówią w Twoim języku. Angielski to pewien standard w IT.
Przydatne książki
- Pragmatyczny programista. Od czeladnika do mistrza - Andrew Hund, David Thomas
- Refaktoryzacja. Ulepszanie struktury istniejącego kodu - Martin Fowler
- Czysty kod. Podręcznik dobrego programisty - Robert C. Martin
- Ruby. Wzorce projektowe - Russ Olsen
- TDD. Sztuka tworzenia dobrego kodu - Ken Beck
- Practical Object-Oriented Design in Ruby: An Agile Primer - Sandi Metz [EN]
Potrzebujesz pomocy?
Jeśli chcesz poprawić swoje umiejętności w programowaniu Ruby i Rails, śmiało skontaktuj się ze mną.
Mam wieloletnie doświadczenie w mentoringu w ramach Rails Girls, CoderDojo oraz podczas indywidualnych sesji. Pomogę Ci uczyć się płynnie i skutecznie, skupiając się na najważniejszych zagadnieniach.