3 błędy początkującego programisty

3 błędy początkującego programisty

Wszyscy popełniamy różnego rodzaju błędy, które często sprawiają, że nauka nowych rzeczy nie jest zbyt efektywna. W programowaniu jest to szczególnie istotne, ponieważ nauka programowania to dosyć długi proces. Im mniej błędów popełnisz ucząc się programować, tym szybciej będziesz mógł osiągnąć wyższy poziom. W tym artykule dzielę się swoimi przemyśleniami, jakich błędów unikać przy uczeniu się programowania.

1. Za dużo teorii, za mało praktyki

Programowanie to praktyka. Nie ważne ile książek przeczytasz, nie ważne ile kursów przerobisz. Nie ważne do ilu grup na fejsie się zapiszesz i na ilu będziesz się udzielał. Jedyne co się liczy, to ile kodu napiszesz samodzielnie. Napiszesz, nie przepiszesz z jakiegoś tutoriala. Różnego rodzaju samouczki, gdzie ktoś pokazuje jak zrobić pewne rzeczy krok po kroku są bardzo pomocne. Fajnie, że jest ich tak dużo i że można się z nich tyle nauczyć. Ale tak naprawdę to tylko samodzielne praktykowanie tego, co się nauczysz z tutoriala daje jakąś wartość.

Ja zawsze podchodząc do nauki nowego języka zaczynam powoli. Wymyślam sobie, co chcę zrobić i robię to w danym języku. Nie muszę nawet znać całej składni języka, wystarczy, że znam jakieś podstawy i umiem napisać kilka prostych linijek kodu.

Gdy uczyłem się Pythona, znałem już PHP, Javascript i byłem już programistą Javy. Python ma trochę inną składnię niż pozostałe języki. Nie ma klamer, zamiast nich używane są w odpowiedni sposób wcięcia. Poza tym musiałem wiedzieć jak tworzyć zmienne i metody (funkcje). Tyle musiałem wiedzieć, żeby zacząć. Kolejna sprawa to to. co chciałem zrobić – prosta aplikacja, która odczyta dane z jednej bazy (Mysql) i zapisze je w innej Mongodb(noSql).

Kolejne rzeczy, których musiałem się dowiedzieć, to jak pobrać dane z bazy. Otrzymałem w ten sposób tablicę, która zawierała inne tablice (poszczególne wiersze), w których z kolei siedziały dane w postacie ciągów znaków (w Javie byłyby to Stringi). Musiałem nauczyć się, jak używać tablic w Pythonie. Kolejna rzecz, to nauka zapisu danych do MongoDb. I to w zasadzie tyle, żeby zrobić to, co chciałem.

Nie uczyłem się od razu wszystkich możliwości Pythona, bo i tak nie byłbym w stanie ich wszystkich wykorzystać. Chciałem coś zrobić i nauczyłem się wszystkich potrzebnych do tego rzeczy. Dopiero z kolejną aplikacją zacząłem się uczyć innych rzeczy, takich jak np. klasy i obiekty. W ten sposób zdobywałem praktyczną wiedzę we wszystkich językach programowania, które znam.

Teoria jest ważna, ale trzeba wiedzieć w jakim kontekście się jej uczymy.

 

2. Uczenie się na tutorialach, które prowadzą Cię za rękę krok po kroku

Jest coraz więcej narzędzi (platform kursowych), które prowadzą developera krok po kroku za rączkę. I można na tych platformach spotkać zadania typu: zmień jedną linijkę tak, żeby program zadziałał. Ok znalezienie tej linijki w kodzie i np. usunięcie jej, żeby kod zadziałał nie jest trudne. „Ale o co w tym chodzi, czy może mi to ktoś wytłumaczyć?” (takie mniej więcej pytanie ostatnio pojawiło się na jednej z facebookowych grup). Niestety, niektóre platformy nie pozwalają na to, co jest najważniejsze w programowaniu, czyli eksperymentowanie.

Programowanie to w dużej mierze zmienianie istniejącego kodu. I żeby robić to skutecznie trzeba wiedzieć dlaczego pewne rzeczy się dzieją. Nie wystarczy, więc wiedzieć jak coś zrobić, ale trzeba też wiedzieć dlaczego coś działa w ten a nie inny sposób.

Z kodem trzeba eksperymentować. Czasem pozamieniać linijki miejscami, by zobaczyć co się stanie. Czasem coś usunąć, czasem przenieść blok kodu w inne miejsce. Wykonywanie tutoriala krok po kroku niczego Cię nie nauczy. Musisz eksperymentować z kodem i dotyczy to zarówno początkujących, jak i bardziej zaawansowanych programistów.

Nauka programowanie, czy różnych jego aspektów to eksperymentowanie z kodem, a nie odtwarzanie czegoś krok po kroczku.

 

3. Uczenie się tylko z anglojęzycznych materiałów

Zanim zacząłem pisać ten artykuł zrobiłem rozeznanie w internecie, co inni piszą na temat błędów początkujących developerów. Zresztą do każdego artykuły robię rozeznanie i staram się, żeby wszystko, co piszę było jak najbardziej wartościowe.

Większość artykułów podaje, że jedyną słuszną drogą jest uczenie się z materiałów anglojęzycznych. Co jest moim zdaniem lekkim nadużyciem. Od lat ciągle żyjemy w przeświadczeniu, że wszystko, co zachodnie jest lepsze. Istnieją dwa powody, dla których uczenie się w obcym języku jest trudniejsze:

Bariera językowa

Bariera kulturowa

 

Ucząc się tylko z materiałów anglojęzycznych (bo tak trzeba) skazujesz się na utratę części wiedzy, właśnie z tych dwóch powyższych powodów. Będąc Polakiem czasem łatwiej zrozumieć pewne przykłady, które pochodzą z naszego kręgu kulturowego, niż np. z kręgu kulturowego Indii.

I oczywiście materiałów anglojęzycznych jest więcej, ale nie wszystkie przecież są jakiejś super jakości. Jest masa słabych artykułów i kiepskich tutoriali. Wiele razy znajdowałem w anglojęzycznym internecie materiały, w których po prostu były błędy merytoryczne. Wiele z nich przedstawia punkt widzenia autora, który wcale nie musi być poprawny. I trudniej jest zweryfikować takie materiały, bo jest ich dużo więcej, bo istnieją te dwa powody, o których wspomniałem (bariera językowa i bariera kulturowa). Do tego dochodzi Twój poziom znajomości języka angielskiego albo technicznego języka angielskiego, którego na początku wcale nie musisz dobrze rozumieć.

Przeczytałem wiele książek w języku angielskim, wiele artykułów i gdybym dzisiaj miał wybierać, to starałbym się szukać jak najlepszych materiałów w ojczystym języku (a jest ich coraz więcej). Bo w ten sposób przyswajanie wiedzy jest łatwiejsze i szybsze. Ma to szczególne zastosowanie do materiałów, które przestawiają jakąś koncepcję, którą trzeba dobrze zrozumieć, a jest mniej istotne w materiałach, które np. opisują jak działa jakieś narzędzie(np. dokumentacja).

Tak wiem, że w tłumaczeniu książek jest wiele błędów, ale te błędy zwykle sprowadzają się do nie do końca poprawnego nazywania pewnych rzeczy. I w większości przypadków da się z tym żyć. Pamiętaj, że nawet czytając książki w języku ojczystym zapamiętujesz ok. 20-40% zawartości.

Oczywiście, znajomość języka angielskiego to podstawa w IT, trzeba tą umiejętności ciągle szlifować. I nie chodzi mi o to, żebyś zrezygnował z uczenia się w języku angielskim, ale o to, żebyś miał świadomość, że pewne rzeczy jest łatwiej przyswajać w języku ojczystym.

 

Podsumowanie

Oczywiście, jest jeszcze wiele różnych błędów, które popełniają początkujący programiści. I trudno by było je wszystkie tutaj wypisać. Jeśli masz jakieś wątpliwości, czy robisz wszystko tak ja trzeba, zawsze możesz zadać pytanie na mojej grupie na Facebooku. Ważne, żebyś nie popełniał wkoło tych samych błędów i starał się ciągle udoskonalać proces nauki.

 

Co powinien wiedzieć każdy początkujący programista?

 

Mateusz Dąbrowski

Cześć jestem Mateusz, zajmuję się programowaniem już ponad 12 lat z czego ponad 8 programuję w Javie. Zapraszam Cię do lektury mojego bloga. Możesz przeczytać więcej o mnie >>TUTAJ<<

11 thoughts to “3 błędy początkującego programisty”

  1. Cześć, nie mam szkoły informatycznej, więc backend w korporacjach odpada. Czy jest sens uczyć się Javy, skoro na Android króluje teraz Kotlin i Flutter? Może wybrać inny prostszy język do nauki jak PHP?

    1. Cześć, dzięki za komentarz. Studia nie mają aż takiego znaczenia. Oczywiście w ogłoszeniach są podawane jako wymagana, ale nikt właściwie o to nie pyta. I nie ważne czy jest to mała firma czy korpo. Jak jesteś w czymś dobry to przyjmą cię wszędzie. Wszystko zależy od wielu czynników. Jak jesteś młody 20-25 lat to możesz wybrać jakąkolwiek technologię czy język, bo w razie czego to zdążysz się przekwalifikować. Ja zaczynałem od PHP i jak przesiadałem się na Javę to miałem ok 30 lat(i wydawało mi się, że to już trochę późno na przesiadkę). Jak masz więcej niż 30 lat i dopiera zaczynasz uczyć się programować, to powinieneś się dobrze zastanowić co będziesz robił, bo raczej ciężko będzie ci się przesiąść na jakąś inną technologię, czy język.

      Co do Androida to nie bardzo się orientuje jakie tam są trendy. Kotlin staje się(lub będzie) popularny, ciągle jest mało programistów Kotlina, więc może to jest dobra droga, nie wiem. Z Kotlinem jest taki problem, że niby jest fajny, wszyscy o nim mówią itd. a jak spojrzysz na statystyki to nadal używa go mniej niż 1% projektów. Być może na Androidzie będzie inaczej. Jak chcesz uczyć się Androida, to zapytaj kogo kto programuje an Androida 😉

      PS. Ja też nie mam skończonych studiów, a pracowałem w korpo na backendzie 😉 Wystarczy chcieć 😉

  2. Z tego co czytałem, korporacje wymagają wyższego wykształcenia informatycznego i lepiej zostać freelancerem oraz wybrać jakiś prosty język programowania jak Ruby, JS, Python. Tu niby tak nie patrzą na wiek i brak wykształcenia, ważne żebyś dobrze tworzył strony i pisał bezpieczny mały backend. Podobno jest wielki hype na programowanie mobilne ale pod Apple. Na rynku Android jest już za duża konkurencja, a Macbooka nie każdy posiada. Ciężko też pisać aplikacje na iOS z Windowsa czy Ubuntu. Wymagany jest M
    acbook z macOS i Xcode. Rozważam naukę Swift, obecnie znam trochę Rust i Crystal, ale to tylko zabawa pod Linuksem.

    1. Nie wiem gdzie czytałeś, ale już w poprzednim komentarzu Ci napisałem, że nie trzeba mieć wyższego.

      Co do swifta i Appla to może być prawda. Czasem warto pójść w inną stronę niż wszyscy. Niezależnie co wybierzesz życzę Ci powodzenia 😉

  3. Polecasz jakieś forum do programowania? Tylko nie 4programmers ponieważ tam moderatorzy sprawdzają nasze IP i useragenta i potem z kumplami w grupach dokuczają użytkownikom na forum. Dogadując ci że wiedzą kim jesteś…

    1. Hehe, nie wiedziałem, że tam jest aż taki klimat, czasem się tam udzielam, ale ostatnio właściwie tylko wrzucam swoje wpisy na mikrobloga, ale i to właściwie już chyba porzucę 😉

      Co do innych to nie znam. Teraz wszyscy siedzą na grupach na FB (jest ich masa – sam jestem na kilkunastu i od niedawna mam też swoją)

  4. „ale ostatnio właściwie tylko wrzucam swoje wpisy na mikrobloga” -> hej, gdzie można znaleźć Twojego mikrobloga? Dzięki!

    1. Chodziło o mikrobloga na 4programmers, ale już tam nie publikuję. Teraz właściwie jestem tylko na Facebooku. Można mnie śledzić na funpage’u strony ewentualnie możesz zapisać się na newsletter.

  5. Napisze ze swojego doświadczenia – ucząc się nowego frameworku / języka zastosuj go do rozwiązania, które Ciebie – jako osobę – interesuje. W takim przypadku masz większą ochotę pokonać problemy stawiane przez język podczas pisania niż bazując na materiale opartym o suchą teorię podaną w książce czy tutorialu.
    Osobiście nauczyłem się sporo angulara pisząc grę, przy okazji użyłem trochę html5 i webGL (Mateusz – dzięki za sugestie użycia LocalStorage 😉 ) , podobnie uczyłem się vue.js (spory program obliczający dane na potrzeby gry rpg) czy stare JavaFX (także nauka frameworka podczas pisania gry).

    I, oczym trochę wspomniał Mateusz, ucząc się trzeba płynnie przechodzić z jednego rozwiązania w drugie, a nie uczyć się wszystkiego na raz. Prosty przykład: nie znasz się na bazach danych lub nie wiesz jak ją postawić lokalnie? Zachowuj swoje zmiany w listach, a jak już to będzie działało dodaj bazę w pamięci H2, stąd przejdziesz do bazy NoSql-owej czy relacyjnej. Uczysz się podstaw Javy, a masz problem bo nie wiesz co to Maven i na kiego grzyba ktoś wrzucił plik pom.xml do projektu. Olej, teraz nie jest na to czas.
    Nie da się po prostu na raz ciągnąć wszystkich srok za ogon. Masz przykład kodu a tu nagle ktoś wystartuje z Dockerm… olej to, dojdziesz i do Dockera. Szkoda na początek nerwów.

    I inna ważna rzecz – poznaj środowisko programistyczne, którego używasz. Aktualnie są na prawdę rozbudowane i często zaskoczą Cię trafnymi sugestiami co do Twojego kodu.

    Dość, bo pewnie napisałbym artykuł w komentarzu 🙂

    1. Dzięki za ten bardzo wartościowy komentarz. Jak chcesz napisać artykuł to chętnie opublikuję 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *