Umiem C++ - Co dalej?

0

Witam.
Piszę gdyż dalej nie wiem co ze sobą począć ;]] Aktualnie uczęszczam do liceum ogólnokształcącego. Nauczyłem się języka C++ w stopniu średnio-zaawansowanym (przynajmniej tak mi się wydaje ;)) i myślę nad kolejnym. Zastanawiam się nad C#. Ponoć bardzo przydatny język. Jak myślicie dobry wybór? Czy polecacie coś innego (Dlaczego?)?
Pozdr.

0

Umiesz C++ to teraz naucz się programowania i projektowania. BTW - skoro znasz C++ to oczywiście boostem posługujesz się swobodnie?

0

IMHO znajomość języka to dopiero początek, tak jak napisał ... znajomość języka nie gwarantuje umiejętności programowania. Oprócz boost jest jeszcze STL przecież, o Qt nie wspominając ;)

0

@several, STL jest częścią C++, nie można mówić nawet o średniej znajomości C++ nie znając STL. To tak jakby znać C i nie umieć printf/scanf użyć. Boost to praktycznie niezbędne rozszerzenie standardu.

Liby do GUI są fajne, ale nikt nie każe tworzyć aplikacji GUI w C++. Poza Qt jest sporo innych, chociaż faktycznie, Qt jest bodaj najlepszym z dostępnych.

Język to tylko narzędzie, do zastąpienia dziesiątkami innych. Programowanie i algorytmika są w dużej mierze niezależne od języka.

0

To zależy w czym chcesz programować w przyszłości. Albo chociaż w jakiej branży. Jeśli np. kodować chcesz w branży webowej, to poleciłbym Ci może Pythona lub Ruby'ego -- myślę, że ten ostatni również w Polsce zdobędzie odpowiednią popularność za te 5 lat, gdy będziesz kończył studia :). A programistów PHP jest multum (Pythonowcy też się mnożą jak grzyby po deszczu). Możesz też ugryźć to od innej strony i nauczyć się JavaScriptu. Ale tak porządnie. Większość ludzi -- i prawie wszyscy w Twoim wieku -- używają tego języka na pałę. Tak naprawdę jest on bardzo potężny i bardzo ekspresywny. Poznając go dobrze, nauczysz się zupełnie innych "paradygmatów" niż te używane w C++: programowania funkcyjnego, dziedziczenia prototypowego, czy wykorzystania zalet (bo są i takie!) słabej typizacji. Aplikacje JavaScriptowe stają się coraz potężniejsze, potężniejsze i bardziej rozbudowane. W przyszłości myślę, że odsetek script-kiddies umiejących JS bardzo słabo spadnie. I wtedy będziesz mógł wejść Ty :). Dodatkowo, przy okazji nauki takiego JavaScriptu siłą rzeczy nauczyłbyś się uniwersalnych interfejsów, pomocnych w różnych językach programowania: wyrażeń regularnych i obiektowego modelu dokumentu (DOM). Nawet ten drugi przydaje się nie tylko w branży webowej -- choćby do obsługi XML-a.

Popularnym i być może "pewnym" językiem jest Java. Mnóstwo rzeczy biznesowych pisze się właśnie w niej. Dodatkowo, jest to dość prosty język, choć biblioteka standardowa jest bardzo rozbudowana. Można w Javie zarobić niezłą forsę, ale nie wystarczy znać (dość prostych) elementów samego języka. Trzeba znać odpowiednie biblioteki, sposoby kodowania itd.

C# nie wydaje mi się wcale głupim wyborem, choć niektórzy bardzo tego języka nie lubią. .NET jest dość popularny. Sytuacja jest tu podobna do Javy. Oprócz samego języka (który ma więcej syntaktycznego cukru niż Java) musisz wiedzieć sporo więcej.

Tak naprawdę muszę Ci przyznać, że nie wierzę Ci, że znasz już tak dobrze C++. Jeśli znasz, to gratuluję, ale... C++ to bardzo skomplikowany język. Sam język jest bardzo trudny do ogarnięcia.

Wiesz np. coś o dziedziczeniu wirtualnym / wirtualnych klasach podstawowych? Masz w małym palcu przeładowanie operatorów i wiesz czemu operatorów biblioteki iostream nie można przeładowywać używając metod składowych? Umiesz czytać deklaracje typu int walk(Node root, int (*visit)(Node n, int index)) (to nie hardcorowy przykład, tylko taki całkiem realny)? Znasz reguły konwersji typów?

Na razie to nie są jeszcze zaawansowane rzeczy, tylko takie bardzo średniutkie. A co z szablonami? W jakim stopniu masz je opanowane -- szablony funkcji i klas? Podstawy szablonów wciąż nie należą do rzeczy zaawansowanych, choć potem robi się... ciekawiej. Korzystasz swobodnie z STL-a? Albo z klas pomocniczych typu auto_ptr?

Jeśli na zbyt wiele z tych rzeczy odpowiedziałeś "nie", to możesz jednak nie być średnio-zaawansowany. Za takowego ja sam się uważam (mam w C++ za małe doświadczenie), a jestem już po dobrych studiach i pracuję jako koder (choć nie w C++).

Pamiętaj też, że oprócz samego opanowania języka liczy się bardzo, bardzo dużo rzeczy. W zasadzie opanowanie nowego języka od zera (tj. samych konstrukcji) dobremu koderowi przychodzi dość łatwo. Samo pisanie kodu wysokiej jakości jest jednak niezmiernie trudne. To w zasadzie nie wychodzi nikomu ;). Choć ci, co się bardzo starają, mają doświadczenie i wciąż się uczą, są w lepszej sytuacji niż pozostali.

Powiem Ci, jak to jest w moim wypadku. Staram się kupować średnio jedną branżową książkę miesięcznie. No dobra, średnio może wychodzi więcej niż jedna, bo jedna to raczej minimum. Czasem kupuję coś o nowym języku. Częściej kupuję coś o języku, który już jakoś umiem, ale chcę umieć lepiej. Ale wiesz, co ostatnio sobie kupiłem?

Knigę o algorytmach i strukturach danych -- ot tak, żeby pozostać w formie (na studiach było tego sporo, potem -- różnie). A teraz zamówiłem dwie kolejne książki. Jedna jest o testach jednostkowych. Co prawda w Javie, ale o wiele bardziej skupia się na samej idei testów, niż implementacji w konkretnym języku (jest bardzo prawdopodobne, że przez następny rok będę pisał testy tylko dla innych języków niż Java). Jeśli nie wiesz, co to testy jednostkowe, to mówię, że bardzo pomagają one utrzymać wysoką jakość aplikacji (automatycznie testują Twoją aplikację kawałek po kawałku). Nie jestem bynajmniej w tej dziedzinie totalnym n00bem -- miałem to na studiach, miałem w robocie, a ostatnio piszę własną implementację architektury testów XUnit do JavaScriptu (istniejące rozwiązanie, JSUnit, pod wieloma względami mnie nie satysfakcjonuję). Ale chcę być w tym lepszy, więc będę czytał.

Druga książka to legendarna pozycja ogólnie o pisaniu porządnego kodu: "Pragmatyczny programista". Długo walczyłem, by ją zdobyć i cieszę się jak głupi, że mi się udało, choć niestety zamówienie jeszcze nie zostało zrealizowane (mam nadzieję, że właśnie nie zapeszyłem).

Także, jak widzisz, język to nie wszystko.

0

@trzy_kropki masz całkowitą rację, wspomniałem o STL nie bez powodu, spotkałem się z osobami którzy twierdzili że na znajomość STL można machnąć ręką :D Qt, hmmm...mam od kilku dni dopiero i moje zdanie nie może być opiniotwórcze ale na razie jestem oczarowany ;)

0

@bswierczynski
Hmm... Gdzie chcę programować? W "marzeniach" widzę siebie za kilka lat w jakiejś większej korporacji (Google, Microsoft, ...) ;d

Uczyć się programować w C++ zacząłem w II klasie gimnazjum, gdy dostałem od kuzyna książkę "Symfonia C++". Strasznie mnie to wciągnęło i tuż po przeczytaniu/przerobieniu tej książki kupowałem następne. Z tych rzeczy co wymieniłeś to większość kojarzę.

PS. Jak przeczytasz książkę "Pragmatyczny programista" to byłbym Ci szalenie wdzięczny gdybyś powiedział coś o niej bo nie mogę nigdzie recenzji znaleźć. :)

0

ile pisałeś większych projektów w C++ ? Bo to, że umiesz pisać nawet w stopniu średnio zaawansowanym (mam namyśli znajomość odpowiednich bibliotek) to jeśli nic większego nie pisałeś to raczej coś napisz. Bo po pierwsze spotkasz się z nowymi problemami, których do tej pory nie napotkałeś oraz programowanie będzie przychodzić ci znacznie szybciej.

0

głównie chodzi mi o to aby ktoś skierował mnie na dobrą drogę żebym nie uczył się czegoś co kompletnie mi się nie przyda...

Większe projekty? hmm... Robiłem różnego typu ćwiczenia z książek, pomagałem na forach ale żeby napisać jakiś duży projekt to nie... nie mam żadnego pomysłu na coś takiego...

0

ehh kolejny ktoremu sie wydaje ze c++ opanowal ;]

0

"nie mam żadnego pomysłu na coś takiego... "

Hmm, firmy, które wymieniłeś właściwie wyłącznie robią duże projekty. Więc lepiej miej pomysł.
Z rozmów kwalifikacyjnych, jakie przeporowadziłem, wynika, że dużo programistów radzi sobie jako-tako z niewielkimi zadaniami typu "napisz funkcję, która...", natomiast gdy stają przed większym zadaniem "na jakie klasy podzieliłbyś taki system...", to jest żal.

0

jeśli w przyszłości chcesz być prawdziwym, informatycznym ogierem to polecam <url> www.oi.edu.pl </url> . Ale ostrzegam: to wciąga:)

0
yurai napisał(a)

informatycznym ogierem

o prostytutka, ROTFL! :d

<font size="1">musiałem.</span>

Ja bym raczej https://pl.spoj.pl/ polecił, przynajmniej jest możliwość sprawdzenia poprawności, używania sensownych języków etc. Trudne zadania mają poziom nie gorszy niż te z OI.

0

nie chce byc zlosliwy, ale samo mi sie cisnie (wybacz, to taki joke): jak juz bedziesz mial zone to tez bedziesz sie pytal na forum: "mam zone juz - co z nia teraz zrobic?" :-D

0

Jeżeli chodzi o aspekty nie stricte algorytmiczne, to polecam stworzenie jakiejś większej aplikacji webowej np sklepu internetowego, używając darmowych javowych rozwiązań: Apache Maven + Apache Wicket + Google Guice + Google App Engine + ewentualnie np EhCache.

Apache Wicket jest o tyle fajnym komponentowym frameworkiem webowym (tzn do tworzenia aplikacji internetowych), że zarządza sam stanem użytkownika, tzn strony wraz ze zmiennymi są serializowane w sesji, dzięki czemu odpada ręczna zabawa z danymi POST i GET, ma także wbudowaną obsługę AJAXa, bardzo elastyczną. Dosyć łatwo tworzy się też własne komponenty.

Google App Engine jest platformą "cloud computing", która obecnie szybko zyskuje nowych zwolenników.

Taka kombinacja uczy mocno nieszablonowego myślenia ;]

Jeżeli chodzi o algorytmy to polecam naukę na studiach, gdyż z tego co piszesz nie wynika by Twoje liceum skupiało się jakoś mocno na informatyce (nie wspomniałeś o żadnych olimpiadach informatycznych). W kolejności od najlepszego według http://www.topcoder.com/stat?c=school_avg_rating są to:

  • UW,
  • UWr,
  • UJ,
  • ewentualnie PUT,
  • oraz nieklasyfikowana w TopCoderze PW,
    Albo popatrzeć na inne rankingi. Znacie jakieś inne miarodajne?
0

Jeśli lubisz odkrywać nowe rzeczy to polecam Haskell'a (strona:www.haskell.org). Na początek trochę dziki, ale bardzo fajny w miarę poznawania.

0

Ja mam kolosa w poniedziałek z Haskella. Mam nadzieję, że go ogarnę jakoś ;]

0

do monad jest dosyć prosty.

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