Niedosyt wiedzy

0

Witam,

Mam 18 lat i programuję w C/C++ od czasów gimnazjum. Napisałem już mnóstwo programów w tychże językach, otarłem się też o róznorodne klasyczne algorytmy, ale im więcej się ucze, tym czuję ze umiem coraz mniej :D

Mówię to jak najbardziej serio, niedawno kupiłem sobie np. książkę o Javie bo chcę iść w tym kierunku, która porusza m.in. takie tematy jak UML, XML, bazy danych itp. Zrozumiałem, że poza moją umiejętnoscią programowania w C/C++, znajomością linuxa, umiem tak naprawdę niewiele i kazdy z tych tematów to temat na osobną książkę którą wiem, ze bd musiał bardzo dokładnie przestudiować, ale ostatnio straciłem nawet zapał do utrwalania tych wiadomosci.

Kiedyś czytałem na luzie samą książkę o C++ i pisałem róznorakie programy aby utrwalić tą wiedzę, ale teraz mi sie odechciewa tego rodzaju praktyk - czuję presję aby przeczytać jak najwięcej w jak najkrótszym czasie i zdobyć potrzebną wiedzę aby na studiach rozpocząć już jakąś sensowną pracę, w której nie będę zarabiał średniej krajowej.

Jak można poradzić sobie z tego typu presją pt. "chce umieć wszystko od zaraz"?

0

naucz się jakiejś konkretnej technologii. Np.: przejrzyj oferty pracy w Javie i zobacz czego najczęściej wymagają i się tego naucz porządnie. Wszystkiego nie jesteś w stanie się nauczyć

3

Jak można poradzić sobie z tego typu presją pt. "chce umieć wszystko od zaraz"?

Zdefiniuj sobie konkretny cel.

Masz 18 lat, czyli jesteś na dość wczesnym etapie rozwoju ;] Jeżeli nie masz smykały do biznesu to prawdopodobnie pójdziesz na studia, bo to będzie rozsądnym wyborem - w takim razie rozsądne byłoby też przygotowanie się do studiów już teraz, by potem mieć luz i bez problemu odbywać staże i załapać się do roboty w czasie studiów.

Znajomość dziesiątek technologii z książek czy kursów nie robi z ciebie guru, ani nie sprawi że pracodawcy będą się o ciebie bić. Ważne są wyniki i doświadczenie. Dlatego jeśli już coś tam z Javy wiesz to pora na sukcesywne wdrażanie wiedzy w życie i sprawdzanie się. Polecam albo założyć jakiś w miarę sensowny projekt z kolegami albo dołączyć do istniejącego. @fasadin organizował projekty na tym forum z których chyba tylko jeden wypalił (?) no ale tak czy siak możesz próbować założyć jakiś projekt lub wbić się gdzieś. To pozwoli na to by twoja praca była krytycznie oceniona przez innych, bardziej doświadczonych programistów, a także spowoduje, że będziesz wiedział na czym polega i z czym się wiąże praca zespołowa oraz utrzymanie jakości w projekcie wieloosobowym.

Znajomość wielu platform, technologii, języków programowania, etc się przydaje, ale dogłębne studiowanie już niezbyt. Lepiej być specjalistą w jednej dziedzinie niż znać płytko wiele rzeczy (dobrze ujmuje to powiedzenie: jak coś jest do wszystkiego, to jest do niczego). Z drugiej strony jeśli ograniczasz się do paru rzeczy to ograniczasz sobie horyzonty oraz narażasz się na to, że będziesz wymyślał koło od nowa (bo nie wiesz że coś już jest rozwiązane) lub wybierzesz rozwiązania nieoptymalne (bo nie będziesz znał alternatyw), bądź też pominiesz pewne sprawy jak testowanie, ciągła integracja, systemy kontroli wersji, etc (bo samodzielnie i intuicyjnie ciężko dojść do tego że jest to potrzebne i się opłaca). Dlatego warto czytać o różnych, pozornie niezwiązanych ze sobą rzeczach, ale tak bardziej na luzie, dla relaksu. A skupić się trzeba na czymś konkretnym (jak już napisałem).

Reasumując:
Najlepiej byś skupił się na przygotowywaniu do studiów, by nie stwarzały później wielu problemów. Studia zaczynają się najczęściej od ciężkiej matmy oraz algorytmów i to z tym warto się oswoić jak najwcześniej.
Oprócz tego załóż jakiś projekt wieloosobowy lub dołącz do jakiegoś projektu w jakimś tam stopniu zbieżnego z docelową ścieżką kariery - czyli jak chcesz być programistą Javy to wybierz projekt w Javie. Działanie w pojedynkę jest zwykle nieoptymalne (no chyba, że robisz coś wyłącznie dla własnej przyjemności).

0
Wibowit napisał(a):

Najlepiej byś skupił się na przygotowywaniu do studiów, by nie stwarzały później wielu problemów. Studia zaczynają się najczęściej od ciężkiej matmy oraz algorytmów i to z tym warto się oswoić jak najwcześniej.

Z róznorodnymi algorytmami się na szczęście już oswoiłem, teraz kończę studiować temat grafów. Czy ta strona byłaby dobrym źródłem informacji odnośnie matmy: http://wazniak.mimuw.edu.pl/index.php?title=Strona_g%C5%82%C3%B3wna ? Bo z tego co widzę wszystko jest tam dość pobieżnie wytłumaczone i opisane...

I czy jest sens zabierać się za tą matmę już teraz nawet jeśli planuję iść na politechnikę, które znane są z tego, że poziom teorii jest lżejszy w porównaniu z uniwerkami?

Wibowit napisał(a):

Oprócz tego załóż jakiś projekt wieloosobowy lub dołącz do jakiegoś projektu w jakimś tam stopniu zbieżnego z docelową ścieżką kariery - czyli jak chcesz być programistą Javy to wybierz projekt w Javie. Działanie w pojedynkę jest zwykle nieoptymalne (no chyba, że robisz coś wyłącznie dla własnej przyjemności).

Ale takie projekty mają na celu tylko nauczenie się pracy w grupie, nie będę mógł go wpisać sobie do CV? Bo jeśli tak, to z taką pracą zespołową będę planował się oswoić podczas jakichś stażów, na razie wolę iść własnym tokiem nauki, dzięki czemu nie jestem od nikogo zależny :) No chyba, że coś tutaj przeoczam.

1

Z róznorodnymi algorytmami się na szczęście już oswoiłem, teraz kończę studiować temat grafów. Czy ta strona byłaby dobrym źródłem informacji odnośnie matmy: http://wazniak.mimuw.edu.pl/index.php?title=Strona_g%C5%82%C3%B3wna ? Bo z tego co widzę wszystko jest tam dość pobieżnie wytłumaczone i opisane...

Ważniak jest w miarę OK jako źródło wiedzy. Zobacz jakie przedmioty są poruszane w szkole do której chcesz iść i się z nimi oswój.

Ale takie projekty mają na celu tylko nauczenie się pracy w grupie, nie będę mógł go wpisać sobie do CV? Bo jeśli tak, to z taką pracą zespołową będę planował się oswoić podczas jakichś stażów

Hmm, projekty to nie tylko praca zespołowa. Projekt wymaga też znajomości konkretnych technologii i pracując nad projektem musisz je ogarnąć.

na razie wolę iść własnym tokiem nauki, dzięki czemu nie jestem od nikogo zależny :)

No i jak na razie masz problemy z motywacją i ukierunkowaniem swoich działań :] Generalnie moim zdaniem nauka wszystkich technologii jak leci nie ma większego sensu, bo od samego czytania książek nie zostaniesz doświadczonym programistą. Wiedza wyczytana szybko wyparowuje - żeby ją utrwalić musiałbyś ją wdrożyć w życie, a to już zabiera więcej czasu, gdyż przy wdrażaniu jakichś technologii zawsze napotyka się na szereg problemów o których nie miało się pojęcia na początku. Poza tym pewne technologie/ dziedziny są rzadko zlecane typowemu programiście. Dla przykładu ani razu jeszcze nie miałem do czynienia z UMLem w jakiejkolwiek firmie. Jeśli chodzi o modelowanie struktury bazy danych to też niczego skomplikowanego nie dostałem do zrobienia, chociaż coś tam było. Ale np nigdy jeszcze nie babarałem się Hibernatem i w ogóle nie mam w nim płynności. Moja wiedza z HTML/ CSS/ JS jest mocno przestarzała, ale to nie ma dużego znaczenia dla mnie bo i tak jestem backendowcem.
Niezależność jest na pewno zaletą, ale jeśli zorientujesz się, że jej nie wykorzystujesz, bo np nie zrobiłeś jakiegoś własnego super projektu bo brakło ci energii, motywacji, czasu, etc to pasuje zmienić nastawienie i założyć kilkuosobowy projekt lub dołączyć do takiego, by nawzajem się uczyć i motywować do pracy.

Zrób jak uważasz, ale jak już mówiłem najczęściej działanie w pojedynkę nie jest optymalne.

PS:
Wracając jeszcze do znajomości technologii w kontekście szukania pracy:
Niby pracodawcy wypisują masę technologii w każdej ofercie, ale najczęściej nie trzeba spełniać wszystkich punktów z oferty. W rzeczywistej pracy dużo ważniejsze niż znajomość wszystkiego co się da jest odnajdywanie się w projekcie, szybkie wyszukiwanie i przyswajanie wiedzy, umiejętność pracy zespołowej, etc Jak pójdziesz gdzieś do roboty to owszem, znajomość np modułów Springa może być niezłą zaletą, ale i tak zdecydowaną większość czasu spędzisz na ogarnianiu wewnętrznych firmowych frameworków. Ponadto często jest tak, że np przydzielają cię do zadań do których niby to nie masz predyspozycji, np ja jestem programistą Javy, ale przydzielono mi masę tasków dotyczących Pythonowego wewnętrznego oprogramowania i po prostu miałem się uczyć Pythona na bieżąco i robić taski.

Pracując nad wieloosobowymi projektami doceniasz takie rzeczy jak testy jednostkowe, systemy kontroli wersji, jakość, czytelność, modularyzacja kodu, itd Te rzeczy trzeba trochę praktykować by produkować dobre systemy, natomiast jeśli np nie umiesz jakiejś technologii do danego zadania to zawsze możesz się jej np w dwa miesiące nauczyć i działać. Są rzeczy bardziej i mniej uniwersalne.

PPS:
Jeszcze napiszę o matmie vs informatyce jeśli chodzi o naukę:
Żeby utrwalić wiedzę trzeba robić konkretne zadania wymagające tej wiedzy. W przypadku matmy sprawa jest łatwa - po nauce jakiegoś tam zbioru twierdzeń i terminologii możesz z marszu przejść do robienia zadań z dowolnego zbioru zadań których jest pełno. Każde zadanie jest generalnie względnie krótkie, przynajmniej w porównaniu do robienia projektu programistycznego. Dodatkowo, rozwiązując zadanie matematyczne nie napotykasz na bugi, ograniczenia platformy, języka, etc problemy z wydajnością, kompatybilnością, nie musisz wertować stert dokumentacji, nie musisz zastanawiać się co autor miał na myśli pisząc daną funkcję biblioteczną etc Dlatego utrwalenie wiedzy matematycznej jest dużo szybsze niż wiedzy informatycznej (jeżeli podejdziesz do tego w odpowiedni sposób i mając problem zapytasz o wskazówki zamiast walić głową w ścianę).

0
Wibowit napisał(a):

Dlatego utrwalenie wiedzy matematycznej jest dużo szybsze niż wiedzy informatycznej (jeżeli podejdziesz do tego w odpowiedni sposób i mając problem zapytasz o wskazówki zamiast walić głową w ścianę).

Jest szybsze, ale żeby to zapamiętać trzeba to ciągle robić. Miałem kiedyś wprawę np. w funkcjach trygonometrycznych, ale po 3 miesięcznej przerwie zapomniałem dużo rzeczy. Pytanie czy jest sens ćwiczyć tą matmę np. na wakacjach aby mieć z górki na pierwszym roku studiów? Nie jest to problemem dla mnie, ale ten czas wolny chętnie bym przeznaczył np. na Javę czy zaznajomienie się w końcu z bazami danych, o których jeszcze nie mam pojęcia.

A jeśli chodzi o matmę to rozumiem, że rzeczy z podręcznika które są teraz nadprogramowe na rozszerzeniu z matematyki, takie jak np. Granice ciągów, Obliczanie granic, Szeregi geometryczne, Granice funkcji, Asymptoty, Pochodne funkcji, Ekstrema powinienem bezwzględnie opanować przed tymi studiami? Trochę tego jest, i zajmie mi to na pewno jakąś część czasu...

0

A jeśli chodzi o matmę to rozumiem, że rzeczy z podręcznika które są teraz nadprogramowe na rozszerzeniu z matematyki, takie jak np. Granice ciągów, Obliczanie granic, Szeregi geometryczne, Granice funkcji, Asymptoty, Pochodne funkcji, Ekstrema powinienem bezwzględnie opanować przed tymi studiami? Trochę tego jest, i zajmie mi to na pewno jakąś część czasu...

Nie musisz, ale na studiach ten materiał który podałeś zostanie omówiony na 1 wykładzie i 1 ćwiczeniach, czyli w ciągu 1 tygodnia ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1