Często zadawane pytania

Poniżej przygotowałem dla Was listę często pojawiających się pytań w otrzymywanej przeze mnie korespondencji - całkiem możliwe, że znajdziesz tam pytanie, które chciałeś/aś mi zadać! Udzieliłem możliwie wyczerpujących odpowiedzi, tak aby niniejsza sekcja FAQ rzeczywiście rozwiała często pojawiające się wątpliwości.

Mam problem z kodem źródłowym, programem, stroną www, projektem na studiach, z komputerem, systemem operacyjnym etc.

Moi drodzy, w przypadku takich problemów należy udać się na nasze forum dyskusyjne, które dedykowane jest trenowaniu się w rozwiązywaniu przeróżnych informatycznych case'ów. Forum zapewnia dostęp w czasie rzeczywistym do wielu zaprawionych w bojach pasjonatów branży IT, a korzystanie z niego jest całkowicie darmowe. Pamiętaj jedynie, aby możliwie dokładnie opisać swój problem (w razie potrzeby podając w odpowiednim bloku kod źródłowy). Osoba, która zechce pomóc dysponuje przecież jedynie naszym opisem sytuacji. Oprócz uzyskiwania pomocy, możesz także samodzielnie jej udzielać - praca z własnymi i cudzymi pytaniami na forum to świetna zaprawa. Ponadto forum oferuje możliwość prezentowania swoich projektów szerszej publiczności, bez potrzeby posiadania dużych zasięgów w internecie.

Mam pytanie o dalszą ścieżkę rozwoju, zmianę szkoły, przebranżowienie, zatrudnienie w IT, wybór języka programowania, kolejność oglądania filmów, polecane książki

Przede wszystkim fajnie, że inwestujesz w siebie ucząc się programowania - to zajęcie niesamowicie rozwija na wielu różnych płaszczyznach. Na pewno zauważyłeś/aś jak wiele daje uporu w realizacji swoich planów oraz jak uczy logicznego myślenia, analizy i cierpliwości. To czynność, która popycha nas do bycia codziennie lepszymi niż byliśmy wczoraj i to daje się autentycznie odczuć, obserwując siebie z perspektywy czasu. Pamiętajmy jednak o efekcie "początkowego entuzjazmu" - programowanie to nie tylko tęcze i motyle - to także codzienne zmaganie z problemami (i to na własną rękę), a to wymaga specyficznego mindsetu. To przecież w zawodzie programisty nader często mamy do czynienia ze zjawiskiem wypalenia zawodowego.

Programowanie to sport dla samouków i dlatego zamiast ustalać jakiś jeden poziom od którego można się tym zająć zawodowo, liczy się bardziej fakt, czy masz nastawienie na samodzielny ciągły rozwój i czy lubisz to co robisz (czy klimat pracy jest u Ciebie często pozytywny). Oczywiście w pracy zawodowej o Twoim sukcesie zdecydują także inne czynniki: inteligencja emocjonalna, współpraca w zespole, umiejętności miękkie, zdolności interpersonalne (przebywania z ludźmi).

Jeżeli chodzi o studia i szkołę: edukacja formalna jest ważna, ale najważniejszy jest Twój sposób myślenia, a raczej działania: regularnie określane cele i na bieżąco realizowany plan ich osiągania (pomimo naturalnie występujących okresów prokrastynacji i lenistwa). Najważniejsze na czym się skupiasz: pracujesz nad rozwijaniem pasji i zdolności miękkich czy walczysz o uzyskiwanie najlepszych ocen / zaszczytów / wyników egzaminów. To pierwsze rodzi pokorę i daje fajne rezultaty po ukończeniu szkoły, to drugie często prowadzi na manowce braku dalszego rozwoju, samouwielbienia i przeszkadza na rynku pracy. Więcej o roli studiów w karierze programisty opowiedziałem w tym wywiadzie.

Co do wyboru zawodowej drogi to nikt nie może Ci tego "dać" - samodzielnie będziesz wiedzieć, że "to lubię robić". Nie ma żadnej tajemniczej recepty na sukces - sukces to progresywna (czyli regularna, nieustająca) realizacja wartościowej idei czy pasji. To tak jak powiedział Steve Jobs - nie da się połączyć najważniejszych kropek (punktów zwrotnych) w naszym życiorysie patrząc w przód, można tylko patrząc wstecz. Czyli nigdy nie będzie tak, że będziesz mieć idealny plan na swoje dorosłe życie i że wszystko będziesz wiedzieć. Wręcz przeciwnie! Trzeba pracować i szlifować swoje umiejętności / pasje / relacje z ludźmi, a wówczas życie zatroszczy się o naszą przyszłość.

Co do ścieżki rozwoju w programowaniu, to w mojej zawodowej opinii optymalnym rozwiązaniem jest najpierw poznać język C++ (na początku strukturalnego, czyli z użyciem funkcji, algorytmów i struktur danych, a potem obiektowego, czyli z klasami, obiektami, metodami). Po poznaniu C++ otwiera się wiele drzwi - zasadniczo mamy trzy drogi: pisanie programów (Java, C#, SFML, QT, OpenGL, Unity, silniki autorskie), tworzenie witryn www (drzewo rozwoju przedstawiłem tutaj) albo aplikacji mobilnych na Androida/iOS. Polecam samodzielną lekturę dokumentacji w sieci (większość w języku angielskim), książki do kupienia zestawione tutaj oraz przede wszystkim - uwaga: realizuj własne projekty! Stwórz bloga, na którym będziesz składować swoje kody źródłowe albo najlepiej profil GitHub - to przyda się już teraz, aby obserwować swoje postępy na przestrzeni czasu oraz później podczas rozmowy o staż / pracę.

Jeśli chodzi o kursy webowe na kanale Pasja informatyki to polecam oglądać filmy chronologicznie, czyli wg daty ich pojawiania się - najczęściej jest to kolejność HTML > CSS > JS > PHP > MySQL. Kursy są specjalnie tak pomyślane, aby było możliwe uczyć się wszystkich pięciu podstawowych technologii webowych jednocześnie. Ponadto kurs Programowanie webowe uważam za najlepszy wstęp do egzaminu zawodowego E.14 w technikum informatycznym, a jednocześnie kompendium podstaw webdeveloperki i umiejętności miękkich dla osoby początkującej.

Podsumowując: Nie mam w zwyczaju dawać ludziom arbitralnych rad zaocznie, bo mam za duży szacunek do człowieka, żeby doradzać nie mając całego dostępnego mi przeglądu sytuacji. Przede wszystkim, na początku trzeba poznać naukę ścisłą jaką jest programowanie. Dopiero po wejściu nieco głębiej w tę dziedzinę należy sobie odpowiedzieć na pytanie: Czy ja to lubię? (co najmniej na średniozaawansowanym poziomie) i czy sprawia mi to radość? Oraz: Czy na pewno na co dzień wygląda to tak jak myślałem na początku że wygląda? Wiele osób próbuje programowania w poszukiwaniu szybkiego (i to najlepiej łatwego) zarobku. Natomiast kiedy później okazuje się, że codzienność tej pracy jest zupełnie inna niż przypuszczali, rezygnują, wykruszają się. I to jest w porządku - próbujemy przecież w życiu przeróżnych aktywności, zostając przy tych, które rzeczywiście dają nam zawodowe spełnienie. Cokolwiek postanowisz - czas spędzony na kursie programowania nauczy cierpliwości, uporu i analityki - na pewno nie będzie to czas stracony! Natomiast decyzji co do własnej zawodowej ścieżki nikt nie podejmie za Ciebie.

Czy wykonasz / zmodernizujesz dla mnie witynę? Czy znajdziesz i poprawisz błędy na mojej stronie? Czy ocenisz mój kod źródłowy?

Cóż, przyznam szczerze - w praktyce jest to obecnie raczej mało prawdopodobne. Nie narzekałem na brak pracy zanim rozpocząłem publikowanie w YouTube, a teraz otrzymuję w korespondencji dużo propozycji współpracy. I dlatego czasu na kolejne inicjatywy po godzinach najczęściej już niestety nie posiadam. Moi współpracownicy i zleceniodawcy wiedzą, że jestem bardzo solidną osobą i zapewniam jakość informatycznej usługi, jednak takie podejście sprawia, iż mogę (i chcę) realizować jedynie określoną liczbę zleceń. Obecnie jestem już zaangażowany w wybrane projekty, administruję także kilkoma witrynami na stałe opiekując się nimi i dlatego mentalnie nie mam już mocy przerobowej do kolejnych zmagań. Jeżeli kiedyś wypalę się jako youtuber i zrezygnuję na dobre z tworzenia video-tutoriali, to wówczas odzyskany czas zapewne ponownie przeznaczę na realizowanie większej ilości zleceń.

Czy zrobisz kurs z (tutaj wstaw nazwę języka programowania, frameworka, programu komputerowego)? Kiedy nowy odcinek (tutaj wstaw nazwę serii)? Dlaczego odcinki ukazują się tak rzadko?

To chyba najczęściej pojawiające się słowa tak w korespondencji mailowej, jak i w komentarzach YouTube. Czasami pytania takie zadawane są nawet po kilku sekundach od publikacji nowego filmu :) Z jednej strony cieszy mnie to bardzo, bo oznacza, iż ludzie chcą i lubią oglądać moje produkcje. Z drugiej jednak strony stwarza to wiele presji, a czasem przybiera nawet formę roszczeniową. Bywa nawet, iż ludzie deprecjonują, łapkują w dół i krytykują jakąś produkcję (czy nawet mnie osobiście), tylko dlatego że informacje zawarte w danym filmie nie są tymi, które najbardziej chcieliby w danym momencie zobaczyć. Oczywiście jest to postawa mocno niedojrzała, a ja podchodzę do tego z olbrzymim dystansem, lecz tak czy inaczej powoli, iskra po iskrze, wypala to mój twórczy zapał. Więcej o tym zjawisku opowiedziałem w tym filmie.

I nie zrozum mnie źle - bardzo fajnie jest dostać informacje od widzów na temat co chcieliby zobaczyć na kanale. Jednak niestety forma przekazu, jak i częstotliwość tego typu wiadomości sprawia, że cały ten feedback rozmywa się, a czasem nawet wzajemnie wyklucza. To dlatego twórca internetowy, kiedy planuje serie na przykład na najbliższy rok, to nie posługuje się takimi pojedynczymi sygnałami. Narzędziem z którego korzysta jest przede wszystkim analityka sieciowa (Google i YouTube Analytics - oglądalność serii, statystyki zaangażowania, przedziały wiekowe) oraz przeprowadzone ankiety. Od początku staramy się wraz z Damianem możliwie mądrze poprowadzić kanał Pasja informatyki, tak aby dobrze przysłużył się jak największej grupie ludzi zainteresowanych tego typu contentem.

Zdaję sobie doskonale sprawę, iż wielu ludzi chciałoby zobaczyć na kanale bardziej zaawansowane serie, nauczyć się czegoś przydatnego nieco dalej na ścieżce rozwoju programisty. Ja jednak uważam, iż początkowy etap pracy z kodem (czyli rozpoczęcie nauki programowania w ogóle) jest najbardziej newralgicznym momentem na drodze rozwoju w branży IT, często stanowiącym o być albo nie być w tym zawodzie. Jest też etapem, który łatwo dla kogoś zepsuć, kładąc zbyt wielki ciężar na jego barki, albo odwrotnie – nie przykładając się należycie do rozpalenia ognia pasji programowania z pierwszych drobnych iskier (a to głównie przez zły dobór realizowanych przykładów). Często też oferuje się ludziom materiały kuszące "aktualnością", "nowością na rynku", ale w praktyce nie posiadające żadnej głębi taksonomicznej. Takie materiały nie przekażą umiejętności analitycznego myślenia, syntezy, samodzielnej pracy, ani nawet zrozumienia tego co się dzieje w kodzie (nie mówiąc już o umiejętnościach miękkich). I dlatego szczególnie wiele atencji na kanale Pasja informatyki poświęcam osobom początkującym, niwelując trudności znane mi z doświadczenia pracy z dziesiątkami ludzi na przestrzeni lat.

Nie oznacza to jednak, iż po przepracowaniu z pietyzmem fundamentów, nie mam zamiaru realizować serii trudniejszych. Dlatego tym bardziej doceniam wsparcie ludzi, którzy zamiast pisać komentarze typu "A może zrobisz serię ..." czy też "Kiedy kolejny odcinek ..." wolą wesprzeć naszą ciężką pracę łapkowaniem, pozytywnym komentarzem dla statystyk albo nawet patronowaniem nas w serwisie Patronite. Czasem ludzie nawet wprost wyśmiewają częstotliwość pojawiania się nowych odcinków, ale są to często osoby nie mające pojęcia jak wiele pracy wymaga stworzenie dobrego video tutoriala, albo po prostu dające upust swojemu ego. Dlatego tak ważne jest dla twórcy odpowiednie selekcjonowanie swojej publiczności, tak aby wypalić się jak najpóźniej, a najlepiej wcale. Podobnie ważne jest, aby nie narażać widzów (zwłaszcza tych najmłodszych) na oglądanie przykrych, agresywnych czy niecenzuralnych wypowiedzi. Więcej o moim podejściu do moderowania treści w internecie opowiedziałem tutaj.

Moje aktualne plany "wydawnicze" znajdziesz rozpisane w Patronite (będę je z Damianem Stelmachem aktualizował zawsze na początku nowego roku szkolnego, we wrześniu). Często też informacje nad czym aktualnie pracuję postuję na Twitterze oraz w harmonogramie publikacji.

Uważam, że kod z odcinka [tutaj wstaw tytuł] nie jest optymalny - można go poddać refaktoryzacji bądź napisać inaczej. Co sądzisz o negatywnych opiniach na temat swojej pracy?

Celem kodu z odcinka jest przekazanie ustalonego, konkretnego zakresu wiedzy (patrz tytuł odcinka), a nie stworzenie tzw. czystego produkcyjnie kodu. Jeżeli wiesz cokolwiek na temat dydaktyki, to nie trzeba nic dalej wyjaśniać, ale pozwól że zobrazuję o co chodzi na dwóch przykładach (tak jest najłatwiej to zrozumieć).

Przykład 1: Odcinek pierwszy kursu C++ zawiera kod źródłowy ze wszystkimi zmiennymi globalnymi. W odcinku pierwszym kursu C++ uczeń ma zrozumieć m.in. pojęcie zmiennej, kompilacji, oswoić się z IDE, dokonać pierwszych operacji na danych, nauczyć się operacji wejścia/wyjścia, podstawowych typów zmiennych. Celem odcinka nie jest mówienie o zasięgu zmiennej! Mówienie o zasięgach ma sens dopiero po wprowadzeniu i zrozumieniu pojęcia własnej funkcji (co nastąpi dużo później). Uczeń na tym etapie nauki jeszcze nawet dobrze nie poukładał sobie w głowie czym jest zmienna (a jest to pojęcie abstrakcyjne i wymaga ułożenia się w głowie). Wysoce szkodliwym więc (z dydaktycznego punktu widzenia) byłoby tłumaczyć mu na tym etapie kursu czym jest zasięg zmiennej, czyli tłumaczyć mu różnicę między zmienną lokalną a globalną.

Za dużo wiedzy naraz staje się niestrawne i sprawia, że uczeń odnosi wrażenie, że: "tego jest za dużo, nie rozumiem" - zniechęcasz go tym samym do nauki, zamiast zapalać pasją i powoli wprowadzać w arkana. Nie kładź na kimś takich ciężarów, których sam nie potrafiłeś unieść na jego etapie nauki! A inna rzecz, że zasięgu i tak uczeń nie zrozumie na tym etapie swojego doświadczenia - co najwyżej zapamięta definicję pamięciowo (i to tylko jeśli jest uparty i się nie zniechęcił), ale i tak nie zrozumie implikacji płynących z tej wiedzy - więc po co zaprzątać tym teraz jego głowę? Dydaktyczne uproszczenie ma sens - jest realizowane świadomie i w trosce o harmonijny rozwój kursanta. Podobnie zarzut, że stosowanie zmiennych globalnych wyrobi złe nawyki nie ma racji bytu, bo nie nastąpił tu w ogóle wybór kursanta - używał wszystkich zmiennych globalnych nie będąc świadomym zasięgu, ale kiedy w dalszych odcinkach udzielono mu już wyjaśnienia, to zaczyna używać zasięgu świadomie - tak w funkcjach, jak w przekazywaniu przez wartość, referencję i potem w klasach.

Przykład 2 - Odcinek drugi kursu HTML nie posiada żadnych tagów HTML5. Za wcześnie na tagi HTML5. Uczeń w tym odcinku stara się zrozumieć dychotomię tabele vs divy, a ty chcesz mu jeszcze w tym samym kodzie kłaść na barki zrozumienie semantyki? To za duży ciężar, za dużo naraz - stracisz kursanta, bo zniechęcisz go przytłaczającą ilością materiału. Uczeń musi zbudować co najmniej kilka struktur opartych tylko na divach, żeby dobrze stosować float:left i display:inline-block. Tagi HTML5 pojawiły się później - w odcinku piątym, co według mnie jest tempem idealnym i bardzo pozytywnie wpływa na jakość uzyskanych przez uczącego się rezultatów.

Natomiast oczywiście nic nie stoi na przeszkodzie, aby zrobić refaktoryzację czy code review dla osób, które już dawno znają dychotomię div vs. table i chcą pójść dalej - a nawet dla czystej przyjemności nauki/rozwoju przepisać kod do HTML5. Chcemy to też zrobić z innego powodu: z powodu dbałości o przestrzeganie standardów w sieci! I ta chęć jest czysta i szlachetna. Uczniowie już na tym etapie kursu mogą chcieć już przecież co nieco opublikować w internecie. Tym bardziej, że odcinki nie wychodzą przecież co tydzień. I stąd właśnie idea Code reviews - dla osób, które mają ochotę zastanowić się nad optymalnym kodem dla przykładu z odcinka - optymalnym semantycznie i składniowo, ale za to nieoptymalnym dydaktycznie.

W moich materiałach reprezentuję taksonomiczne podejście do nauczania, oparte na rozwinięciu myślenia technicznego u kursantów, w tym także najtrudniejszej sztuki oceny rozwiązań. I dlatego z premedytacją używam wielu starszych technik w pierwszych epizodach serii po to, aby po wprowadzeniu w kolejnych odcinkach nowej techniki uczeń mógł samodzielnie porównać jak spisywało się poprzednie podejście w porównaniu do nowego - nic nie zastąpi samodzielnego doświadczenia i nauki przez ewolucję rozwiązań. Proces uczenia to ciągła optymalizacja, w której na początku największy nacisk kładziemy na dydaktykę i prostotę, a dopiero w późniejszym etapie nauki ciężar przesuwamy na poprawność składniową i czysty kod. Jeśli ten środek ciężkości za wcześnie przesuniemy ku semantycznej poprawności to stworzymy kurs niestrawny dla adeptów, zbyt hermetycznie napisany.

Zdaję też sobie sprawę, że w sieci mało osób rozumie dydaktykę, ale mimo to uważa się za najlepszych nauczycieli i ekspertów od edukacji. Wiem również, że zawód nauczyciela często bywa wyśmiewany. Z powodu negatywnego obrazu nauczyciela w polskim społeczeństwie, bardzo rzadko angażuję się w dyskusje internetowe - są zbyt jałowe. Moje podejście jest proste: realizuję własne twórcze inicjatywy i to metodami, które uważam za najskuteczniejsze. Zaś o jakości tej pracy decydują jej owoce, a nie czyjekolwiek opinie. Bardzo cenię rzeczową krytykę i chęć pomocy wielu pozytywnych ludzi, których spotkałem na przestrzeni lat. Natomiast nie przyklaskuję natarczywości osób, które siedząc wygodnie w fotelu sędziego stawiają wobec twórców wygórowane wymagania. Czasami także czerpią przyjemność z bezpardonowego deprecjonowania ludzi, etykietkują, a rezultaty pracy innych czytają / oglądają tylko po to, aby móc cokolwiek wytknąć. Sami nie wychodzą jednak na scenę. Takim osobom zawsze życzę, aby wymagania - podobnie jak to czynią ludzie mądrzy - stawiali przede wszystkim sobie. I aby nie bali się stanąć po drugiej stronie - pozytywnie tworzyć wartość, pomimo narażenia na negatywny wpływ "wojowników znad klawiatury".

Oczywiste jest także, iż kursy mogą zawierać błędy merytoryczne, a nawet także na płaszczyźnie dydaktycznej. Nigdy nie twierdzę i nie będę twierdzić, że jestem nieomylny. Jako jednostka jestem w pełni świadomy własnych ograniczeń - jestem tylko człowiekiem i nie wstydzę się tego. Autor kursu nigdy nie posiada świeżego spojrzenia na swoje dzieło i tak jak programista musi się cały czas rozwijać, tak samo nauczyciel musi szukać nowych podejść, punktów widzenia, perspektyw. Kursy na YouTube dostarczone są na zasadzie delivered as is. Jesteśmy tylko jednostkami i każdy z nas myli się stosunkowo często i gęsto, mimo że tego nie chce i jego intencje są czyste. Pamiętaj: to Ty sam / sama odpowiadasz za jakość swojego kodu, nikt nie weźmie tej odpowiedzialności za Ciebie! Korzystaj więc z wielu źródeł, poznawaj, debatuj, przeglądaj możliwości, czytaj, twórz, rozwijaj się.

Czy udzielasz korepetycji online (np. przez Skype'a, Teamviewera)? Jak można się z Tobą skontaktować, spotkać?

Nie prowadzę sesji szkoleniowych przez internet ani żadnych prywatnych lekcji - zwyczajnie nie mam na to czasu. Podobnie nie odpisuję na moim prywatnym profilu na Facebooku (serio - proszę, nie wysyłaj mi wiadomości w Messengerze - tam na pewno nie odpiszę). Miej szacunek do mojego czasu, tak jak ja mam do Twojego! Wyobraź sobie jak wygląda skrzynka pocztowa czy komunikator osoby mającej ponad sto tysięcy widzów - nie sposób odpisać nawet na część listów... Aktualnie pracuję jako nauczyciel, jako programista i jeszcze jako youtuber - dlatego każdą wolną chwilę poświęcam obecnie na mentalny odpoczynek z książką, na trening fizyczny oraz na rodzinę. Wierzę, iż to rozumiecie, bo nie wątpię że jesteście w tym współczesnym świecie równie zajęci jak ja, a zapewne nawet bardziej.

Jak wyglądały Twoje początki w programowaniu?

Od dziecka ciągnęło mnie do komputera, a pierwszą książkę na temat programowania przeczytałem jeszcze zanim miałem w domu klasycznego peceta. To była książka na temat języka programowania Pascal. Zainteresowało mnie to strasznie - na tyle, że (pomimo braku peceta) napisałem swój pierwszy kod źródłowy na kilku kartkach A4. To była mini-gra komputerowa - coś w rodzaju quizu zadającego pytania i zliczającego punkty. Kiedy już otrzymałem swój osobisty komputer, to wygrzebałem te kartki ze wspomnianej książki i przepisałem kod do kompilatora Turbo Pascal. Program uruchomił się od razu, bez żadnego błędu - od tego momentu wciągnęło mnie na dobre :) Co prawda ówczesna literatura na ten temat była napisana strasznie hermetycznym językiem, ale cierpliwie przebijałem się przez kolejne tomy i moje umiejętności powoli rosły. Kiedy internet stał się ogólnodostępny to zniknęły wszelkie ograniczenia. Dziś sam pomagam wielu adeptom programowania także przez pamięć o własnych nieśmiałych początkach i trudnościach. Więcej na ten temat opowiedziałem w tym filmie.

Zobacz także

Daj się zaskoczyć! Poniżej wylosowałem dla Ciebie pięć wpisów z całego archiwum bloga:

Facebook
Pasja informatyki