JavaRush /Blog Java /Random-PL /Zacznijmy od początku lub „Witaj, świecie Java!”
articles
Poziom 15

Zacznijmy od początku lub „Witaj, świecie Java!”

Opublikowano w grupie Random-PL
Chcę rozpocząć ten artykuł od niezwykłej, na pierwszy rzut oka, dygresji. Później stanie się jasne, dlaczego dokładnie.
Zacznijmy od początku, czyli Witaj, świecie Java!  - 1
Wyobraźmy sobie zatem Kogoś. Ten Ktoś chce opanować narciarstwo alpejskie. I w tym celu podejmuje następujące kroki:
  • Instruktorzy, podręczniki, podręczniki itp. - to wszystko pochodzi od złego. Można uczyć się jazdy na nartach samodzielnie. Ponadto w szkole całkiem nieźle nauczył się jeździć na nartach biegowych. W związku z tym wszelkie porady bardziej doświadczonych osób są ignorowane.

  • Wybrano najfajniejszy sprzęt. Nie poniżej poziomu eksperckiego. Twarde buty, które bolą stopy. Twarde narty, których zgięcie wymaga fantastycznej siły, znacznie przekraczającej poziom sprawności fizycznej Kogoś. Cóż, itp.

  • Tor testowy to... cóż, powiedzmy, tor, na którym rozgrywany jest etap slalomu giganta Pucharu Świata. To jest w sam raz do nauki.
  • Kontynuuj w tym samym duchu.
Oto pytanie. Jak nazwiesz tego Kogoś? Osobiście, jako osoba zajmująca się narciarstwem alpejskim od około 20 lat, nazwę go (i to jeszcze bardzo delikatnie!) – beznadziejny. Przy takim podejściu nie da się niczego nauczyć. Ale pewny sposób na zranienie. A NAJBARDZIEJ pewne jest porzucenie na zawsze pomysłu jazdy na nartach. Myślę, że zgodzicie się ze mną w tej ocenie. W każdym razie jestem prawie pewien, że ten Ktoś nie będzie się spodziewał, że zostanie skierowane do niego coś nieprzyjemnego. A teraz wyobraźmy sobie innego Kogoś. Niech będzie, powiedzmy, studentem informatyki. Ma pewną wiedzę o C++, C#, Pascalu. Chce nauczyć się Javy. Jego akcje:
  • Literaturę odpowiadającą jego poziomowi wiedzy (szczerze mówiąc, poziomowi zerowemu) schodzi na dalszy plan. Opiera się na lekkiej znajomości wspomnianej teorii C++, C# i OOP.
  • Wybrane zostanie najpotężniejsze środowisko programistyczne. Powiedzmy, że Eclipse lub NetBeans. Ten, który zrobi wszystko sam, wystarczy nacisnąć jeden przycisk.
  • Jako aplikację próbną wybieramy… cóż, powiedzmy czat. Aplikacja klient-serwer, część kliencka w postaci apletu, część serwerowa - usługa internetowa lub, w najgorszym przypadku, serwlety. W sam raz do nauki.
Pytanie. Jak nazwiesz tego Kogoś? Czy wiesz, na czym polega paradoks? Faktem jest, że w tym przypadku bezstronnych ocen będzie znacznie mniej. Pomimo tego, że sytuacje są identyczne pod każdym względem. Chyba że skutki dla zdrowia i życia w drugim przypadku będą mniej śmiertelne. Może to jest problem? Sytuacje są naprawdę bardzo podobne. Specjalnie opisałem je w tym samym stylu. I dziwna rzecz: jeśli absurdalność pierwszego jest oczywista, to po drugim scenariuszu podąża alarmująca liczba początkujących programistów. Opanowanie języka Java zaczyna się od pisania MIDletów, klientów baz danych, chatów, tworzenia stron internetowych w oparciu o serwlety... Można tak długo wymieniać. Niemniej jednak sprawa jest oczywista. Jednocześnie z pogardą odkłada się literaturę dla początkujących. Przeczytaj to? Dla mnie? Tak, piszę w C++ już od trzech lat! (Opcje są w Pascalu, a nawet w Visual Basic.) I wiem OOP! Cóż, ogólnie rzecz biorąc. Co dalej? A potem to:
  • Jak przekonwertować tablicę o długości 8 bajtów na długą?
  • Dlaczego to się dzieje NoClassDefFoundError?
  • Dlaczego uruchamiam aplikację w Eclipse ( NetBeans/IDEA/JBuilder), i wszystko jest w porządku, ale bez tego wpisuję java HelloWorld.classi wyskakuje błąd?
  • Dlaczego się zawiesza ClassNotFoundException?
  • Dlaczego nie ma biblioteki? Wrzuciłem już to do plikuclasses.zip, ale to wszystko nic nie daje!
  • Dlaczego tworzę tablicę obiektów, ale gdy próbuję użyć elementu tablicy, otrzymuję NullPointerException?
  • I dlaczego ...?
  • I dlaczego ...?
  • I dlaczego ...?
Dlaczego dlaczego dlaczego? Ale ponieważ Java to nie C++ ani Pascal. I nie Perla. Znajomość tych języków nie tylko najczęściej nie pomaga, ale i utrudnia. Choćby dlatego, że te języki mają zupełnie odmienne ideologie. Ale podobieństwo zewnętrzne jest mylące. Oczywiście na wszystkie te „dlaczego” i „jak” znajdują się odpowiedzi w książkach. W literaturze najbardziej podstawowego poziomu. Ale czytanie jest leniwe (opcje: wstyd, brak czasu itp.). Znam sporo stereotypów, które dobrzy specjaliści od C++ przenieśli na Javę. Jeden z ostatnich przykładów: nigdy nie powinieneś zgłaszać wyjątku w konstruktorze. Dlaczego? Tak, ponieważ w C++ stan takiego obiektu nie jest zdefiniowany. W związku z tym następuje wyciek pamięci. W Javie w zasadzie nie ma takiego problemu, ze względu na obecność modułu zbierającego śmieci. Są jednak ludzie, którzy starają się unikać takich sytuacji. Zgodnie z zakorzenionym stereotypem. A najgorsze jest to, że w wyniku tych wysiłków kod staje się znacznie bardziej skomplikowany. Składnia jest łatwa do nauczenia. I zupełnie za mało. Ideologia języka jest o wiele ważniejsza. A żeby jak najskuteczniej ją opanować, należy zacząć od samego początku. Dlaczego dokładnie i jak? I to jest kolejne pytanie. Więc. Gdzie i jak zacząć. To zależy od tego, co chcesz osiągnąć. Jeśli chcesz zostać wprawną małpą kodującą, możesz zacząć od prawie wszystkiego. Jeśli chcesz zostać profesjonalistą, sprawy są nieco bardziej skomplikowane. Moje doświadczenie daje mi powód, aby powiedzieć, co następuje. Różnica między profesjonalnym programistą a „programistą” polega na tym, że rozumie on, co się dzieje. Robi trochę więcej niż tylko naciskanie przycisków. Potężne środowisko jest bardzo dobrą pomocą. Dla tych, którzy mogą się bez tego obejść. Ale często jest to jedyne narzędzie tych, którzy od niego zaczynali. A w przypadku jego braku wartość małpy kodującej wynosi zero. Ponieważ nie ma przycisków do wciśnięcia. Ogólnie rzecz biorąc, naciśnięcie przycisku może przybrać naprawdę potworne formy. Jeden z moich kolegów widział produkt napisany w Javie. Instrukcje instalacji zaczynały się od słów: „Zainstaluj JBuilder z dysku…” Teraz TO jest już fatalne. Jeśli programiści nie byli w stanie sprawić, by produkt działał bez środowiska programistycznego, to drżę, gdy pomyślę, jak został on napisany. Przynajmniej pisali to amatorzy. Co mam na myśli mówiąc „rozumie, co się dzieje?” Oznacza to, że dana osoba musi zrozumieć, co następuje:
  • Co to jest maszyna wirtualna i dlaczego jest potrzebna?
  • Czym jest klasa z punktu widzenia maszyny wirtualnej.
  • Co to jest pakiet?
  • Co to jest biblioteka?
  • Jak maszyna wirtualna wyszukuje i ładuje klasy; co to jest moduł ładujący klasy i jak działa; ile ich jest domyślnie; co to jest ścieżka klas.
Itp. i tak dalej. I tak dalej. Proszę zwrócić uwagę, że nie uwzględniłem wiedzy specyficznej dla samego dewelopera. Czym jest wątek, czym jest klasa z punktu widzenia OOP i czym różni się od obiektu, jak działają menedżery układu - to wszystko powinien wiedzieć KAŻDY programista. Wszystko, co wymieniłem, to raczej szczegóły techniczne. Jednak bardzo często okazuje się, że ich znajomość jest niezbędna do zrozumienia, co działa nie tak. Przykład z życia. Istnieje biblioteka do pracy z XML o nazwie xalan. Zawiera kilka pakietów javax.xml... - parsery, transformatory itp. Ta biblioteka jest bardzo popularna. Problem w tym, że te same pakiety są obecne w J2SDK od wersji 1.4. Pytanie. Która klasa zostanie załadowana podczas uzyskiwania dostępu do klasy javax.xml.transform.stream.StreamSource z biblioteki, jeśli xalan jest również obecny w ścieżce klasy - biblioteka lub z J2SDK? Aby odpowiedzieć na to pytanie, musisz wiedzieć, jak działa moduł ładujący klasy. Kiedyś widziałem czterodniową dyskusję na jednym z forów, która ostatecznie sprowadziła się do tej kwestii. Kod nie działał poprawnie, ponieważ moduł ładujący nie przyjął klasy, jakiej oczekiwano od niego. Do czego zmierzam? Rzecz w tym, że im potężniejsze środowisko programistyczne, tym więcej robi ono dla programisty – tym mniej musi on myśleć. A to już jest, och, jakie złe. Tak blisko małpy. Prowadzi to do pierwszego wniosku, niezależnie od tego, jak paradoksalny może się to wydawać:

Wniosek 1. Wskazane jest rozpoczęcie nauki języka Java BEZ wydajnego środowiska.

Nie zalecam pisania w edytorach na poziomie notatnika. Ale nie robię tego z jednego powodu - z reguły nie mają podświetlania składni. Jest to niezwykle wygodna rzecz, która nie ma negatywnego wpływu. Możesz użyć czegoś takiego jak Notepad++ , rozumie on składnię Java i, nawiasem mówiąc, jest darmowy. Na przykład mam zarejestrowany w systemie typ pliku .java specjalnie dla niego. A więc edytor tekstu z podświetlaniem składni i linią poleceń. Dwa lub trzy dni udręki - i zrozumienie, czym jest ścieżka klas, jak uruchamiany jest interpreter i kilka innych drobiazgów - zrozumienie tego pozostanie na zawsze. Dalej. Moje doświadczenie pozwala mi twierdzić, że wiedzy nie da się zdobyć do wykorzystania w przyszłości. W tym sensie, że literaturę warto czytać tylko wtedy, gdy pojawiają się pytania, na które odpowie. Jeśli przeczytasz książkę bez zadawania pytań, informacje znikną w ciągu tygodnia. Wiem to doskonale, także z własnego doświadczenia. Kiedyś zacząłem czytać książkę o serwletach pięć razy. Dopóki nie zacząłem mieć z nimi do czynienia w swojej pracy, informacje te nie zostały przyswojone. I nie jest to odosobniony przypadek. Dawno, dawno temu, jakieś 8-10 lat temu, przeczytałem, niestety, autora nie pamiętam: Jak nauczyć człowieka nowego języka programowania? Bardzo prosta. Trzeba dać mu język, kilka zadań i minimum dokumentacji. Następnie po kilku miesiącach, gdy zacznie pisać przynajmniej w tym języku, przedstaw obszerną dokumentację. Za dwa tygodnie zostanie przeczytana niczym kryminał, po czym człowiek będzie gotowy do pracy. Zgadzam się z tym stwierdzeniem w 100%. Z jednej strony za dwa miesiące znikną wszystkie drobne problemy. Odpowiedzi na nie uzyskamy samodzielnie, co znacznie podniesie ich wartość. Z drugiej strony już pojawią się jasne pytania, na które odpowiedzi dostarczy dokumentacja. Prowadzi to do drugiego wniosku, który wydaje się nie mniej paradoksalny niż pierwszy:

Wniosek 2. Warto rozpocząć naukę języka Java BEZ podręczników. Dokumentacja API Java + samouczek Java - to w zupełności wystarczy.

Dokumentacja Java API jest koniecznością. Gorąco polecam trzymanie go lokalnie, na dysku. Będziesz musiał się z nią skontaktować więcej niż raz, nie dwa, a nawet dziesięć. Osobiście nie ma dnia żebym tam nie jeździł. Zalecam również przechowywanie samouczka Java lokalnie. Są to informacje na poziomie podstawowym, które całkowicie zastępują podręcznik. Jednak jest go tam spora ilość. Muszę przyznać, że w obszarach, którymi nie zajmuję się w pracy, wciąż znajduję dla siebie coś nowego. Dużo czytania jest złe. Dopóki nie ma prośby, nie ma odpowiedzi. Trochę czytania też jest złe. Gdzie jest złoty środek? Trzymam się tej zasady: czytam, aż zaczyna mi się wydawać, że otrzymałem odpowiedź na pytanie. W 90% przypadków tak nie jest. Ale w tym momencie najlepiej jest przerwać i kontynuować samodzielnie. Początkowy impuls został otrzymany, a samodzielne rozwiązanie problemu da znacznie więcej. Oczywiście po pewnym czasie warto sięgnąć po literaturę. Ale znowu, jeśli chodzi o literaturę dla początkujących. Nawet jeśli wydaje się, że to wszystko bzdury, warto przeczytać początkowe rozdziały. Mogę niemal zagwarantować, że nauczysz się przynajmniej czegoś nowego. A to coś może później okazać się niezwykle istotne. OK. Chyba już wiemy o czym pisać. Jak pisać - też. Ale co mam napisać? Przypomnij sobie, gdzie zaczął się ten artykuł. Czy powinienem zacząć od napisania systemu komunikacji błyskawicznej? Wybór należy oczywiście do Ciebie. Wydaje mi się, że nie warto. Im bardziej złożone zadanie, tym więcej pytań się pojawi. W przypadku braku doświadczenia taka liczba pytań da poczucie niemożności ich rozwiązania, a następnie poczucie własnej niższości, głupoty itp. Ostatecznie może to doprowadzić do podjęcia decyzji „do diabła z tym…” i zaprzestania nauki języka. Te. z dokładnie odwrotnym skutkiem niż ten, który był potrzebny. Jest to charakterystyczne nie tyle dla Javy, co dla samego procesu uczenia się. Ale z jakiegoś powodu zapominają o tym, jeśli chodzi o nauczanie programowania. Tymczasem małe zadanie zrealizowane do końca może dać znacznie większą satysfakcję i znacznie większą wiedzę niż rewelacyjny system porzucony na samym początku podróży. Stąd trzeci wniosek: Wniosek 3. Naukę języka Java warto rozpocząć od zadań adekwatnych do aktualnego poziomu znajomości języka Java. Nie należy rozpoczynać nauki jazdy samochodem Formuły 1. Nie należy rozpoczynać nauki narciarstwa alpejskiego na torze Pucharu Świata. I w ten sam sposób nie powinieneś zaczynać opanowywania Javy od napisania czegoś wielkiego. Rozumiem, że ambicja jest wymagająca. Jednak w tym przypadku są one bezpodstawne. A im bardziej nieuzasadnione ambicje masz, tym mniejsze masz szanse na zostanie profesjonalistą. Niezwykłym zjawiskiem pod względem uczenia się są, co dziwne, różne fora. Jeśli użyjesz ich mądrze. Mądrze - oznacza to, że musisz zrobić odwrotnie, a nie jak zwykle. Mianowicie nie zadawać pytań, ale odpowiadać na nie. Wszystko, na co masz siłę sięgnąć. Jeśli myślisz, że ja sam wiem wszystko, bardzo się mylisz. Tak, wiem dużo. Ale są obszary, z którymi nigdy się nie spotkałem. Albo mam, ale bardzo niewiele. Klasycznym przykładem z mojej praktyki jest praca z certyfikatami: podpisywanie kodu, bezpieczne połączenia itp. W 1998 roku, pisząc pracę magisterską, tak zrobiłem, ale od tego czasu wszystko się zmieniło. Przez lata narastało we mnie mnóstwo pytań. Zacząłem nawet czytać literaturę. Ale, jak powiedziałem powyżej, nie można zdobyć wiedzy do wykorzystania w przyszłości. To jest jak łom – wchodzi jednym uchem, wychodzi drugim. Nie ma żadnych rezultatów poza dziurą w głowie. I tak było aż do niedawna, kiedy na forum zadano pytanie dotyczące połączenia SSL z Tomcat. Wystąpiły pewne problemy. I dopiero to pytanie skłoniło mnie do kopania głęboko. A jeśli jest prośba, jest też odpowiedź. Nie tylko odkryłem, na czym polega problem danej osoby, ale znalazłem także wiele innych przydatnych informacji. W końcu zrozumiałem, jak działają certyfikaty. Odpowiedni artykuł znajduje się w planach. I to dzieje się cały czas. Sporo pracowałem na przykład z GUI. Dopiero w wyniku czyjegoś pytania na forum zrozumiałem część możliwości TextLayout. Przed zadaniem tego pytania nie miałem o nich pojęcia. Podobnie niedawno dowiedziałem się, że okazuje się, że JButton również interpretuje HTML jako swój własny nagłówek. Wcześniej myślałem, że tylko JLabel może to zrobić. I to znowu dzięki forum. Okazuje się więc: im więcej odpowiadamy na pytania, tym więcej się uczymy. Dlatego nie zgadzam się z obiegową opinią, że jeśli ktoś siedzi na forum, to nic nie robi. Nie jest to jasne i zależy przede wszystkim od tego, dlaczego dana osoba jest na forum. A czym się głównie zajmuje – pyta czy odpowiada. Właściwie możesz nawet zapytać. Ale też mądrze. Nie proś o rozwiązanie (a zwłaszcza z dopiskiem „Proszę tych, którzy wiedzą, o odpowiedź, a nie zadawaj pytania!”, z którym spotkałem się niedawno!), ale wręcz przeciwnie, poproś o ustawienie kierunek ruchu. Jest całkowicie zrozumiałe, że początkującemu trudno jest zrozumieć, gdzie kopać, ponieważ po prostu brakuje mu doświadczenia. Nie jest to wina tej osoby i nie stanowi to nawet problemu. Jest okej. Każdy przez to przeszedł. Włącznie ze mną. Dla mnie osobiście dużo ważniejsze jest to, żeby ktoś chciał się czegoś nauczyć. I nie tylko uzyskać odpowiedź, tylko po to, by zapomnieć o tym pięć minut po zaliczeniu zajęć z programowania. Zawsze powiem ci kierunek ruchu. Jeśli sam go znam. A jeśli nie wiem, to przynajmniej mogę się domyślić. I na pewno też będę szukać odpowiedzi. Ale prawdopodobnie nigdy nie udzielam bezpośrednich odpowiedzi – przynajmniej nie pamiętam. Swoją drogą to właśnie z tego powodu opuściłem jedno z forów. Kiedy zacząłem zadawać naprowadzające pytania, wyjaśnili mi zgodnie, że zwyczajem jest po prostu odpowiadać. A z moimi pytaniami mogę pójść dalej. Biorąc pod uwagę, że poziom forum pozostawia wiele do życzenia, zwłaszcza dzięki takiemu podejściu! – Postanowiłem nie marnować więcej czasu. Wybierz więc forum, które Ci się podoba i gotowe. Nawiasem mówiąc, ta strona pojawiła się właśnie dzięki jednemu z forów. Po pewnym czasie rozmów zgromadziłem listę najczęściej poruszanych tematów i zdałem sobie sprawę, że na taką stronę byłoby zapotrzebowanie. I tak się stało. Prawie wszystkie artykuły powstają w wyniku dyskusji na forum. Lub śledzenie korespondencji, którą również prowadzę regularnie. Jaki jest wynik? Praca, praca i jeszcze raz praca. Im więcej pozwolisz sobie zrobić dla siebie na początkowym etapie, tym mniej wiedzy zdobędziesz. A im dłuższa droga do profesjonalizmu. Ale tylko Ty możesz wybrać, kim chcesz być – bezmyślnie wciskającą guziki małpą czy profesjonalistą. I tylko ty sam wybierasz ścieżkę, którą możesz osiągnąć to czy tamto. Pierwszy sposób jest jasny. Próbowałem pokazać to drugie. Wasz ruch, panowie! Link do oryginalnego źródła: Zacznijmy od początku lub „Witaj, świecie Java!”
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION