Po satysfakcjonującym mnie starcie bloga i ilości do tej pory opublikowanych wpisów na temat prowadzenia własnej działalności gospodarczej, blogowanie spodobało mi się na tyle, że postanowiłem rozszerzyć poruszane tutaj zagadnienia o część programistyczną.
Tematykę programistyczną rozpocznę pierwszym wpisem z cyklu Vademecum Juniora. Jak pewnie się domyślasz jest on kierowany głównie do młodych adeptów programowania i będzie zbiorem krótkich porad, wskazówek i przykładów z życia opisujących moje doświadczenia z pracy jako programista. Jeśli nie jesteś już juniorem, to nie uciekaj od razu. Zapoznaj się z poniższym tekstem i podziel się swoimi przemyśleniami w komentarzu. Chętnie dowiem się, co Ty o tym myślisz.
Cykl artykułów "Vademecum Juniora"
Ten wpis jest częścią cyklu, w ramach którego opisuję moje doświadczenia i spostrzeżenia na temat programistycznego rzemiosła. Cykl jest dedykowany osobom rozpoczynającym swoją przygodę z zawodowym programowaniem lub planują taki krok w przyszłości.
Artykuły składające się na Vademecum Juniora zawierają różne porady, wskazówki i przykłady z pracy jako programista. Nie są one ani uporządkowane chronologicznie, ani mocno ze sobą powiązane. Możesz je więc czytać niezależnie od siebie i w dowolnej kolejności. Polecam jednak zapoznać się z treścią wszystkich wpisów, gdyż wierzę, że z każdego możesz dowiedzieć się czegoś wartościowego.
Studium przypadku
Opowiem Ci krótką historię. Kilka lat temu, po dłuższym okresie milczenia, odezwał się do mnie Adam, kolega z gimnazjum. W tamtym czasie ja byłem na starcie mojej kariery programistycznej i miałem coś około roku doświadczenia w pracy na część etatu, a on kończył studia medyczne. Zapytał, czy nie mógłbym napisać mu małego programu, który obliczałby odległość Levenshteina pomiędzy dwoma ciągami DNA. Był on mu potrzebny do jakiejś pracy naukowej. To, że to było akurat DNA nie miało tutaj dużego znaczenia. Po prostu potrzebny był program obliczający odległość Levenshteina pomiędzy dwoma ciągami znaków pobranymi z pliku. Dodatkowo ważne było, żeby był to program wyposażony w GUI, bo był przeznaczony dla osób nietechnicznych, więc tłumaczenie jak odpalić to z linii poleceń nie wchodziło w grę. Z entuzjazmem podjąłem „wyzwanie”, gdyż było ono fajną odskocznią od bieżących projektów.
Od razu zabrałem się za kodowanie. Bez namysłu wybrałem Javę. GUI poszło całkiem sprawnie. Napisałem je w Swingu, bo akurat byłem z nim w miarę obeznany po kilku uczelnianych projektach . W końcu zabrałem się za implementacje właściwego algorytmu. Pisałem, pisałem, dopieszczałem, napisałem nawet kilka testów (co nie było jeszcze wtedy takie oczywiste). W sumie na sam algorytm zeszło pewnie kilka godzin. Z finalnego efektu byłem zadowolony, Adam (oraz osoby współtworzące jego pracę naukową) jeszcze bardziej, co było dla mnie fajną gratyfikacją.
Czas mijał, ja uczyłem się nowych rzeczy i zdobywałem kolejne doświadczenia na etacie. Coraz bardziej zapoznawałem się z projektem Apache Commons, który spotykałem praktycznie w każdym projekcie, z którym miałem styczność. Kilka tygodni, a może nawet miesięcy po tym jak wysłałem Adamowi ostateczną wersję projektu, trafiłem na metodę:
org.apache.commons.lang3.StringUtils#getLevenshteinDistance(CharSequence, CharSequence)
Nazwa metody jest chyba wystarczająco wymowna. Zainteresowanych szczegółami zapraszam do dokumentacji.
W żadnym znanym mi języku świata nie ma słów, które potrafiłyby wyrazić jak się wtedy poczułem 🙂 Myślę, że najlepiej wyrazi to kapitan Picard:
Wniosek
Morał z tej historii jest taki – zanim zaczniesz odkrywać koło na nowo (lub wyważać otwarte drzwi, jeśli wolisz to powiedzenie) upewnij się, czy rozwiązanie Twojego problemu nie zostało już ładnie opakowane w bibliotekę/moduł/pakiet i udostępnione publicznie. Istnieje spore prawdopodobieństwo, że już tak się stało. Co więcej, jeśli Twoim zadaniem jest utrzymywanie lub rozwijanie istniejącego projektu, to sprawdź, czy przypadkiem dana biblioteka nie została już tam dołączona przez Twoich poprzedników lub czy podobne rozwiązanie nie zostało już przez któregoś z nich napisane. Tutaj również masz spore szanse, że właśnie tak się stało.
Bądź na bieżąco!
Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:
lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować
Dołącz do grup na Facebooku
Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.
W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.
Wesprzyj mnie
Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.
Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.
Picture Credits
6 marca 2022 at 08:36
To jest bardzo ważne, ponieważ ucząc się jakiegoś nowego, ogólnie mówiąc narzędzia, często nie znamy takich praktycznych „podnarzędzi”, które są bardzo przydatne.
5 listopada 2021 at 10:47
To jest tak jak nauczymy się nowego czasu uczac się angielskiego 😀 potem cały czas chcemy go używać, ale po jakimś czasie, nabierając doświadczenia, dochodzimy do takiego momentu, że jesteśmy bardziej racjonalni w naszych działaniach 🙂
23 października 2016 at 12:24
Faktycznie jak piszemy produkty komercyjne, to nie ma sensu pisać wszystkie „z palca”. Moim grzechem było pisanie wszystkich struktur danych, zamiast używać standardowych bibliotek w Javie. Pewnie nie póbowałbym napisać dystance Levenshteina samemu. Ale użycie bibliotek nie zawsze się opłaca:
1) bilbioteka nie jest już wspierana, a np. korzysta z zewnętrznego API (OAuth Facebooka)
2) ściagamy pół internetu zależności, żeby zrobić jedną prostą rzecz
3) tracimy warstość poznawczą – np. będziemy musieli wprowadzać modyfikacje
4) framework to jakaś kobyła i zanim ją nauczymy się skonfigurować minie kilka dni (myślę o Springu albo Railsach)
24 października 2016 at 05:15
Jasne, to wszystko trzeba często wyważyć. Nie ma przecież sensu wyciągać armaty na komara. Czasem potrzebna jest też jakaś własna optymalizacja i trzeba napisać coś od zera. Ale do wszelkich małych, często powtarzanych operacji (jak na przykład te z Apache Commons) w 90% przypadków warto będzie skorzystać z gotowców.