Programowanie nie polega na waleniu w klawiaturę i pisaniu tak szybko, jak to tylko możliwe. Nie chodzi o religijne zapamiętywanie skrótów klawiaturowych i ostateczne wyeliminowanie myszy z użycia. Nie chodzi o nauczenie się każdego pojedynczego języka programowania, jeśli to w ogóle jest możliwe na pierwszym miejscu. Dobry programista nie jest definiowany przez markę, cenę, wydajność i system operacyjny swojego komputera, ani przez preferencje edytorów kodu i IDE – VS Code, Atom, IntelliJ IDEA, Vim, Notepad++, czy inne. Wbrew powszechnemu przekonaniu dzięki wielu hollywoodzkim filmom, programowanie zdecydowanie nie jest równoznaczne z hakowaniem.
Co więcej, wykracza poza zapamiętanie składni i wbudowanych funkcji języka programowania. Logika, warunki, twierdzenia i algorytmy – szczególnie te sortujące – nie dają pełnego obrazu tego, czym naprawdę jest programowanie. Matematyka, rekurencja, informatyka i wzorce projektowe również nie oddają sprawiedliwości. Chociaż stanowią one ogromną część tego, czym jest programowanie, są tylko jednym z elementów układanki.
Projektowanie i planowanie
Przed napisaniem pojedynczej linijki kodu, projekt i architektura projektu są dokładnie zaplanowane, aby zapewnić lub przynajmniej zwiększyć prawdopodobieństwo płynnego cyklu rozwoju. To właśnie tutaj w grę wchodzi projektowanie oprogramowania. Łańcuchy narzędziowe, rurociągi, warstwy abstrakcji dla publicznych i wewnętrznych interfejsów API, modularyzacja, relacje między obiektami i strukturyzacja baz danych są planowane na tym etapie rozwoju.
Jesteśmy żywymi, oddychającymi debuggerami
Sztuka programowania wymaga od nas nieszablonowego myślenia i rozwiązywania problemów za pomocą najbardziej pragmatycznych, skutecznych i wykonalnych rozwiązań. To prawdopodobnie dlatego jesteśmy najprawdopodobniej „informatykiem” lub „obsługą klienta” w gospodarstwie domowym. Praktycznie naszym zadaniem jest naprawianie tego, co jest zepsute. To tak, jakby „programowanie” było uwielbianym sposobem mówienia o „rozwiązywaniu problemów”.
Innymi słowy, jesteśmy żywymi, oddychającymi debuggerami na i poza naszymi komputerami, i z tego powodu ważne jest, abyśmy wiedzieli, jak czytać i pisać dokumentację. Właściwa dokumentacja – która może przybrać formę stron szczegółowej dokumentacji, lub tak prostej jak dodawanie wartościowych komentarzy do kodu – służy jako jedno z najważniejszych kół ratunkowych programisty. Bez niej gubimy się w ciemnościach, nie mogąc spełnić swoich obowiązków jako debuggerzy. Niewielki lub żaden postęp nie może zostać poczyniony, ponieważ większość naszego czasu spędzilibyśmy na eksperymentowaniu i badaniu, jak działa framework lub stara baza kodu. Ogólnie rzecz biorąc, skutkowałoby to okropnym doświadczeniem dewelopera.
Rozważ wszystkie możliwe scenariusze
Debugowanie jest już wystarczająco trudne. Co gorsza, wykonanie kodu zazwyczaj nie jest liniowe. Duże projekty zawierają wiele „rozgałęzień” możliwych ścieżek wykonania z powodu logiki programu z instrukcją if
. Musimy brać pod uwagę każdy możliwy scenariusz i błąd, szczególnie jeśli dotyczy to danych wejściowych użytkownika. Obciążenie poznawcze wymagane do śledzenia każdej możliwej ścieżki wykonania sprawia, że programowanie jest tym trudniejsze.
Doświadczenie użytkownika
Wychodząc poza świat rozwoju, wypełniamy buty przeciętnego użytkownika. Oprócz zapewniania funkcjonalności, dodawania nowych funkcji, naprawiania błędów i dokumentowania naszej bazy kodu, skupiamy się również na tym, jak przeciętny użytkownik wchodzi w interakcję z naszą aplikacją lub oprogramowaniem. Bierzemy pod uwagę wiele czynników, które prowadzą do wspaniałego doświadczenia użytkownika, takich jak (ale nie ograniczają się do) dostępność, użyteczność, przyjazność dla użytkownika i odkrywczość, projekt UI, motywy kolorystyczne, funkcjonalne animacje i wydajność.
Wydajność i optymalizacja
Mówiąc o tym, wydajność jest ogromnym aspektem programowania sama w sobie. My, szczególnie ci z wykształceniem informatycznym, staramy się używać i pisać najbardziej wydajne czasowo i przestrzennie algorytmy. Mamy obsesję na punkcie niezgłębionej skali czasowej mikrosekund, aby wycisnąć jak najwięcej z naszej dostępnej pamięci, CPU i GPU.
W kontekście tworzenia stron internetowych, optymalizacja sieci jest ważnym pojęciem do uchwycenia. Skaczemy przez przeszkody, aby zminimalizować i skompresować nasz HTML, CSS i JavaScript tylko po to, aby zminimalizować ładunek odpowiedzi z serwera. Obrazy i inne różne zasoby są również kompresowane i leniwie ładowane, aby zminimalizować ilość danych, które użytkownik musi pobrać, zanim strona stanie się znacząca i użyteczna.
Jednakże zdarzają się sytuacje, w których mamy zbyt dużą obsesję na punkcie wydajności. Przedwczesna optymalizacja staje się problemem, gdy niepotrzebnie zajmujemy się optymalizacją pewnych części bazy kodu, zamiast skupić się na tym, co należy zrobić, aby osiągnąć rzeczywisty postęp i produktywność. W tym przypadku, musimy mieć mądrość, aby ocenić, które części bazy kodu naprawdę potrzebują optymalizacji.
Bezpieczeństwo
Poza UI i logiką naszego oprogramowania, jako programiści, jesteśmy odpowiedzialni za bezpieczeństwo naszych użytkowników. W dzisiejszych czasach, kiedy dane są bardzo pożądane i silnie spieniężane, ważniejsze niż kiedykolwiek jest upewnienie się, że dane osobowe naszych użytkowników są bezpieczne. Podejmujemy dodatkowe kroki w celu ochrony prywatnych danych, ponieważ nasi użytkownicy ufają naszemu oprogramowaniu. Jeśli nie podtrzymujemy tej odpowiedzialności, to z pewnością nie jesteśmy prawdziwymi programistami, nawet na odległość.
Nigdy nie możemy być zbyt bezpieczni, gdy podchodzimy do kwestii bezpieczeństwa. Jako ogólną zasadę kciuka, „nigdy nie ufaj danym wprowadzanym przez użytkownika”. Można to nawet uznać za „najlepszą praktykę”, aby zadać sobie wiele trudu, aby oczyścić dane i dane wejściowe użytkownika. Nie tylko narażamy nasze oprogramowanie i infrastruturę na wielkie ryzyko, jeśli nie jesteśmy z nimi ostrożni, ale także ryzykujemy narażenie wrażliwych danych użytkownika – tych samych danych, które obiecujemy chronić jako programiści.
Bezpieczeństwo nie jest jednak wyłączne dla danych użytkownika i danych wejściowych. Wirusy, robaki, konie trojańskie, adware, key loggery, ransomware i inne formy złośliwego oprogramowania komputerowego nadal rozprzestrzeniają się i nękają miliony komputerów i urządzeń na całym świecie. Nawet po dekadach technologicznych ulepszeń sprzętu i oprogramowania, nie ma czegoś takiego jak system odporny na ataki. Bezpieczeństwo jest po prostu rzemiosłem, które jest stale doskonalone, ale nigdy nie będzie doskonałe, ponieważ zawsze znajdzie się kilku dociekliwych, którzy badają i szukają każdego możliwego sposobu na „zhakowanie” systemu.
Z tego powodu, niezależnie od przypadku użycia i bazy użytkowników, projektujemy nasze oprogramowanie z myślą o bezpieczeństwie jako jednym z głównych priorytetów, jeśli nie najważniejszym. Robimy to, aby chronić naszych użytkowników przed wyżej wymienionymi zagrożeniami, które mogą powodować niedogodności takie jak utrata danych, uszkodzenie plików i awarie systemu, aby wymienić tylko kilka z nich.
Praca zespołowa sprawia, że marzenia się spełniają
Nawet jeśli niekoniecznie odnosi się to do programowania, praca zespołowa odgrywa niezwykle integralną rolę w rozwoju oprogramowania. Przy całej złożoności i ruchomych częściach każdego dużego projektu, jest niemożliwe, aby tylko jedna osoba mogła rozwijać wysokiej jakości oprogramowanie w szybkim tempie regularnej iteracji lub pod ścisłymi terminami i ograniczeniami czasowymi klienta lub jakiejkolwiek jednostki nadzorującej.
To dlatego mamy różne zespoły ludzi, którzy specjalizują się w jednym z wielu aspektów programowania. Jedna osoba nigdy nie będzie miała wszystkich umiejętności i wiedzy wymaganej do skutecznego i spójnego klejenia każdego aspektu razem. Jeden zespół może być odpowiedzialny za projektowanie UI i dostępność, podczas gdy inny może pracować nad funkcjonalnością samego oprogramowania. Jeśli wszystkie kompetencje różnych zespołów specjalistycznych są połączone, oprogramowanie wynikowe będzie miało najlepszą funkcjonalność, doświadczenie użytkownika, wydajność i bezpieczeństwo, jakie może mieć w ramach ograniczeń finansowych i praktycznych.
Dla zarządzania czasem i dotrzymywania terminów, organizacja przepływu pracy i automatyzacja są niezwykle ważne. Poświęcamy czas na prawidłowe skonfigurowanie naszych narzędzi do budowania i rurociągów, ponieważ pozwoli nam to zaoszczędzić dużo czasu w przyszłości. Ogólnie rzecz biorąc, zwrot z inwestycji rośnie wraz z upływem czasu.
Dobra współpraca z innymi
Aby rozwinąć ideę pracy zespołowej i współpracy, nawiązujemy zdrowe relacje z naszymi kolegami, ponieważ w ostatecznym rozrachunku sukces projektu w dużej mierze zależy od sukcesu zespołu, który za nim stoi. Dokładamy starań, aby stworzyć wspierające środowisko pracy, w którym doświadczeni seniorzy uważnie prowadzą nowicjuszy.
Ponieważ tworzymy oprogramowanie jako zespół, musimy być świadomi tego, że inni czytają nasz kod. Aby cykl rozwoju oprogramowania był zrównoważony w dłuższej perspektywie, czytelność i łatwość utrzymania są uważane za równie ważne jak logika i funkcjonalność projektu. Konsekwentnie piszemy dobry, czytelny kod, dostarczając jednocześnie pouczające komunikaty commit i dokumentację, ponieważ to z pewnością pomoże nam i innym lepiej zrozumieć nasz kod.
Mówiąc o innych czytających nasz kod, przegląd kodu jest świetną okazją, aby dowiedzieć się więcej o najlepszych praktykach w programowaniu. Jest to również kolejny sposób na zapoznanie się z bazą kodu oraz jego podstawową konstrukcją i architekturą. Chociaż konstruktywna krytyka jest nieprzyjemna i trudna w odbiorze, ważne jest, aby potraktować ją jako dobrą radę, abyśmy mogli poprawić się jako programiści.
Programowanie jest trudne
Programowanie obejmuje wiele aspektów poza funkcjonalnością, takich jak doświadczenie użytkownika, wydajność, bezpieczeństwo i praca zespołowa. Nie wystarczy skupić się wyłącznie na jednym aspekcie, pomijając pozostałe. W przypadku projektów o znacznych rozmiarach i znaczeniu, nie jest to tak proste jak wpisanie kilku linii kodu. Aby odnieść sukces, wymaga wiele starannego planowania, projektowania, rozważania i współpracy w zespole. W rzeczywistości, więcej czasu spędza się na myśleniu niż na pisaniu, zwłaszcza podczas długich sesji debugowania.
W końcu, programowanie to tak naprawdę ciągła, nieustanna nauka. Zdolności adaptacyjne i ciągłe uczenie się są kluczem do przetrwania w tej branży. Nie możemy oczekiwać, że pozostaniemy istotni, jeśli nie będziemy robić tego, co do nas należy, aby się uczyć. W tak zmiennej branży wykładniczej poprawy technologicznej, musimy nadążyć za jej szybkim tempem, aby nie skończyć w kurzu.
Chcę zakończyć ten artykuł uznając ciężką pracę wszystkich programistów na całym świecie. Aby napisać ten artykuł, musiałem zastanowić się nad codziennym przebiegiem pracy zespołu programistów. Musiałem przyjrzeć się wielu aspektom programowania i tworzenia oprogramowania, które zazwyczaj pozostają niezauważone. Od tego czasu, bardziej doceniam całe oprogramowanie zainstalowane w moim komputerze. W związku z tym, zachęcam wszystkich do podziękowania dziś programiście, niezależnie od doświadczenia. Gdzie byśmy byli bez nich?
Nigdy nie bierz ich ciężkiej pracy za pewnik.
.