To, co zdobywamy z czasem podczas programowania, to wiedza.
Każdy z nas kiedyś był początkującym i każdego dnia stawał się coraz lepszy, ucząc się na swoich lub czyiś błędach.
Podobno ekspertem nazywa się osobę, która popełniła wszelkie możliwe błędy w swojej dziedzinie. Oczywiście, nikt nie jest idealny i każdy popełnia błędy.
Dobre praktyki, są zbiorem zasad i przemyśleń, które powinny w przyszłości pozwolić na zmniejszenie popełnianych błędów.
I’m not a great programmer.
I’m just a good programmer with great habits.
Kent Beck
Oto moja lista, na którą zawsze staram się zwracać uwagę:
Testowanie
To, że coś działa i zwraca wynik, który wydaje nam się poprawny, nie zawsze oznacza, że jest poprawnie wykonane. Zawsze powinniśmy wszystko testować, nawet gdy to jest jakaś drobna zmiana. Czy usuwając pewien element, mamy pewność, że nie jest używany w innym miejscu? Czy wpisanie nieprawidłowych wartości, nie popsuje działania funkcjonalności?
Testowanie pozwala nam również na wykrycie i wyeliminowanie nieprawidłowego działania, które mogło powstać podczas developmentu. Powinniśmy zawsze zakładać, że użytkownik spróbuje zepsuć naszą funkcjonalność na wszelkie możliwe sposoby. Pod tym względem, użytkownicy końcowi są nieprzewidywalni.
Sprawdzanie zmian
Korzystając z git-a, bądź innego systemu kontroli wersji, mamy możliwość podejrzenia zmian, które wprowadziliśmy. Merge request, jest prośbą o wrzucenie naszych zmian na produkcję. Czy na pewno nie zostawiliśmy żadnych „śmieci” w kodzie, używanych w celach testowych? Nie zakomentowaliśmy jakiejś ważnej funkcjonalności? Końcówki linii się zgadzają? Przed takimi wpadkami może uchronić nas git diff, wykonany bezpośrednio przed commitem, czyli sprawdzenie wprowadzonych zmian w plikach przed zapisaniem.
Rozumienie działania używanych funkcji
Dokumentacja języka, z którego korzystamy, jest naszym przyjacielem i z pewnością nie gryzie. Czy na pewno wiesz, w jaki sposób zachowa się funkcja, we wszelkich możliwych przypadkach? Czy zauważyłeś, że można przekazać argumenty po przecinku, zamiast wywoływać ileś razy tą samą funkcję? Czy wiesz co zwraca funkcja? Czy na pewno funkcja zadziała w wersji oprogramowania zainstalowanego na serwerze?
Dobra komunikacja
Komunikacja w zespole to podstawa. Dlaczego jest ona taka ważna?
– być może ktoś już pracował nad podobnym problemem i zna rozwiązanie?
– pozwala nam uniknąć głupich błędów i nieporozumień
– ktoś to już może przygotował, ale nikomu nie powiedział. Po co tworzyć koło od nowa?
Proszenie o pomoc, gdy się nad czymś zawiesimy
Dużo osób, nauczyło się w szkole bądź na studiach, że lepiej ukrywać fakt niewiedzy przed prowadzącymi, niż się zgłosić i oznajmić że się czegoś nie rozumie bądź nie umie. W pracy tak to nie działa. Każdemu zależy na rozwoju i wykonywaniu powierzonych zadań najszybciej jak to możliwe. Jeżeli nie jesteś w stanie znaleźć rozwiązania w ciągu 15 minut, nie bój się poprosić kogoś bardziej doświadczonego o pomoc. Może to zmęczenie i popełniony głupi błąd, który jest przez Ciebie niezauważalny? Może przekombinowałeś i da się to zrobić prościej? Każdy czasem potrzebuje pomocy, a najlepsi nie boją się do tego przyznać i od razu proszą o pomoc.
Czytanie kodu
Zastanawiałeś się kiedyś skąd taka nazwa blogu? Na początku mojej przygody z programowaniem, usłyszałem bardzo mądre zdanie: „To tylko kod, żadna magia”, które z czasem stało się prawdziwe, choć na samym początku, trudno mi było w to uwierzyć ;). Czytanie kodu, możemy porównać do czytania książki. Otwieramy i czytamy od góry do dołu, przechodząc od strony do strony. Takie same zasady tyczą się kodu. Nie skupiamy się tylko na miejscach, w których coś tworzymy, ale sprawdzamy również różnego rodzaju zależności. Musimy być pewni, że to co tworzymy/zmieniamy nie wpłynie negatywnie na działanie pozostałych rzeczy.
Gumowa kaczuszka
Jest to nieformalny sposób debugowania kodu. Polega na mówieniu gumowej kaczuszce (innemu przedmiotowi) będącemu pod ręką, linia po linii, co się dzieje w kodzie. Podczas takiego sprawdzania, powinny wyjść wszystkie błędy sprawdzanej funkcjonalności. Dzięki takiemu podejściu, upewniamy się również, że to co stworzyliśmy, jest zgodne z zadaniem.
Wykonywanie zadań zgodnie z poleceniem
Osoba, która daje nam jakieś zadanie, na 99% jest pewna, jaki efekt chce otrzymać. Każdy z nas ma czasami ochotę na zrobienie więcej niż w zadaniu, jeżeli jest taka możliwość. Nie zawsze jest to dobrym podejściem. Oczywiście możemy się z czymś nie zgadzać, mieć inne zdanie, ale tego typu kwestie, powinny być wyjaśniane zaraz po zapoznaniu z zadaniem, przed przystąpieniem do wykonywania ale nigdy na własną rękę. Jeżeli tak jest w zadaniu, chociaż wydaje Ci się że to nie ma sensu, to tak ma być. Nikt Cię nigdy nie okrzyczy, za zadanie zrobione zgodnie z treścią.
Gramy w tej samej drużynie
Każdy z nas może mieć czasami gorszy dzień, komuś może coś nie działać z jakiejś prostej przyczyny, ktoś czegoś może nie wiedzieć. Należy jednak pamiętać, że nie wolno kłamać. Mamy zadanie do wykonania na środę, w poniedziałek przypuszczamy, że się nie wyrobimy. Poinformujmy o tym najważniejsze osoby. Lepiej się przyznać, że sobie z czymś nie radzimy i uzyskać np. dodatkową osobę do pomocy, niż ukrywać fakty i zawalić jakiś termin przed ważnym klientem. Każdy w firmie jest naszym przyjacielem i powinien służyć nam zawsze pomocą. Jeżeli w obecnej pracy, masz wrażenie że jest inaczej, zastanów się mocno, czy na pewno chcesz tam pracować. Ja akurat mam pewność, że gdy będę potrzebować pomocy, na pewno się taka znajdzie. Działa to oczywiście w dwie strony. Tak wygląda właśnie świetna drużyna, gdzie każdy na każdego może liczyć.
Zastanowienie się nad rzeczami powiązanymi
Przed rozpoczęciem wykonywania zadania, warto zastanowić się, z czym ono jest powiązane i jakie może mieć skutki.
W tym celu stawiam sobie pytania, na które staram się odpowiedzieć.
– co ta zmiana może spowodować?
– gdzie jest to wykorzystywane?
– co mogę jeszcze sprawdzić?
– czy zadziała to na wszystkich urządzeniach mobilnych, przeglądarkach?
– czy w innej szerokości również będzie ładnie wyglądało?
Ostrożność i optymalizacja
Zagadnienia te dotyczą szczególnie baz danych.
Czy pamiętałem o ustawieniu limitu podczas przygotowywaniu zapytania?
Czy na pewno zmieniam odpowiedni rekord w bazie?
Czy przygotowane zapytanie jest szybkie?
(to że działa dla danych z kliku dni, nie oznacza że sprawdzi się również dla miesięcy)
Czy będę w razie czego mieć możliwość przerwania wykonywania zapytania, czy być może robię to z przeglądarki i takiej możliwości nie mam?
(sam przerwanie wykonywania np. w phpmyadmin, nie oznacza, że tak naprawdę to zapytanie nie działa na serwerze)
Jest to pierwszy z postów, który z czasem będzie aktualizowany o kolejne podpunkty.
Może Ty masz/znasz jeszcze jakieś dobre praktyki, które stosujesz, a nie zostały tutaj zawarte.
Podzielisz się z nami?