Jakiego języka programowania się uczyć? – kontra

46

Ostatnimi czasy zarówno na devPytaniach jak i 9fingers pojawiało się podobne pytanie, wcześniej też je wielokrotnie słyszałem. Powiem więcej – sam je kiedyś zadawałem.

Na dotnetomaniaku z kolei pojawił się link do bloga, którego autor (Matthew) również dzieli się refleksjami na ten temat: link.

Zachęcam do lektury – jeśli nie czytaliście to przeczytajcie i spotkajmy się za kilka minut :).


Jestem zakałą? Krótka polemika

Skoro przytoczony post jest już przeczytany, to macie w nim przedstawiony pewien punkt widzenia. Kilka cytatów:

  • Każda osoba, która zadaje to pytanie jest zakałą informatyki“. No cóż, gorsze określenia pod moim adresem padały, ale takie uogólnianie jest raczej niestosowne
  • Nigdy nie osiągnięcie przyzwoitego poziomu“. Hmm… Ostatni raz z takim czarnowidztwem spotkałem się u Ferdka Kiepskiego. Może niech Autor spróbuje swoich sił w Ezo TV?
  • Nieważne jest co robisz, tylko jak. Nieważne w czym piszesz swoje programy, ważne, żebyś robił to dobrze.” Częściowo zgoda – wszystko co się robi najlepiej robić dobrze… ale pytanie jest o to W CZYM te programy pisać, tak? moim zdaniem JEST to ważne
  • To, że w tej chwili coś jest modne i często wykorzystywane (jak Java i C#) nie oznacza, że będzie takie za 5 lat.” Myślę, że jest dokładnie odwrotnie – popularność Javy i C# jest tak ogromna, że z pewnością za 5 lat nadal poszukiwać się będzie programistów ze znajomością tych języków. Idąc tokiem rozumowania Autora należałoby założyć, że tysiące systemów napisane w okresie popularności .NET i Java (czyli w ciągu ostatniej dekady) nagle przestaną istnieć lub zostaną napisane od zera na coś, co będzie modne za te 5 lat.
  • Może warto zainwestować trochę czasu w naukę mniej popularnych języków? Taki COBOL nadal jest wykorzystywany w bankowości (…)“. No pięknie genialna alternatywa. Nie ucz się Javy! Nie ucz się C#! One są co prawda aktualnie na topie, ale ucz się COBOLa który był na topie milion lat temu!
  • słabsi studenci wybierają .net dlatego że są za słabi na robienie w czymś innym. Wybierają Windę bo nie potrafią ogarnąć Linuksa” Ten kawałek to właściwie tak rozrywkowo… nawet nie mam do tego komentarza, powaliła mnie oczywistość tego stwierdzenia:)

Oczywiście to tylko wyrywki (powyciągane spomiędzy banałów, z którymi nie można się nie zgodzić), ale chciałem się gdzieś do nich ustosunkować. A wolę tutaj niż w komentarzach, których jest już ponad 100.

I to tyle odnośnie wpisu będącego bezpośrednim impulsem mojej reakcji, przejdźmy dalej.

Mój punkt widzenia jest nieco inny.

Początki nauki

Skąd młody ambitny człowiek podchodzący do swojej przyszłości na tyle poważnie, że myśli o tym wcześniej niż większość rówieśników, ma wiedzieć od czego zacząć? Sam pamiętam swoje zagubienie, gdy przed studiami nie bardzo wiedziałem co oznacza programowanie w Turbo Pascalu, czym się różni C od C++, albo co to jest Java. O pojęciach czysto programistycznych, jak “programowanie obiektowe” czy “wzorce projektowe”, nigdy nawet nie słyszałem. Zapytam więc jeszcze raz: skąd człowiek CHCĄCY poznać programowanie ma zasięgnąć porady która skieruje go ku odpowiedniej a nie głupiej decyzji?

Teoretycznie może pomóc mu w tym informatyka w szkole (średniej), jednak tam zwykle:

  • uczą ludzie niemający ZIELONEGO POJĘCIA o co chodzi w programowaniu, o praktycznym doświadczeniu nie wspominając
  • program nauczania narzuca określony język (pewnie najczęściej Turbo Pascala) nie wspominając że istnieje jakakolwiek alternatywa
  • mało kogo tak naprawdę obchodzi cała ta “informatyka” – zarówno nauczyciela jak i uczniów; i nie jest to odpowiedni “klimat” do nauki programowania

Może też zapytać na forum poświęconemu jakiejś technologii, ale tam z kolei:

  • bywają ludzie specjalizujący się w danej platformie, więc siłą rzeczy to ona będzie “tą polecaną”
  • nie można liczyć na konstruktywną dyskusję – podrzucenie alternatywy kończy się pyskówką (śledzę sporo polskich stron o programowaniu i nie wiem dlaczego, ale tak po prostu jest)

Może zapytać na “ogólnym” forum programistycznym, jak właśnie devpytania czy 9fingers… i to moim zdaniem najlepsza droga (oprócz prywatnej rozmowy z kimś, kto się tym już zajmuje). Wśród ludzi z różnych środowisk bardziej prawdopodobne będzie uzyskanie wartościowej odpowiedzi/wywołanie ciekawej dyskusji. Oczywiście przy okazji można dowiedzieć się, że jest się zakałą, ale warto zaryzykować.

Ja takie pytania rozumiem tak:

“Chcę zacząć przygodę z programowaniem. Nie wiem czy chcę to zrobić dla kasy, nie wiem czy będzie to moim zawodem, nie wiem czy po pół roku mi się nie znudzi… Wiem że chcę sensownie wejść w temat i zobaczyć o co chodzi.”

I jeśli na taką prośbę ktoś odpowie “ucz się COBOLa” czy Ady czy Fortrana to… Potencjalnie wysłał Zeusowi ducha winnego człowieka na wieeele godzin durnej pracy, która w praktyce najprawdopodobniej nie przyda mu się do NICZEGO. A przynajmniej mógłby te długie godziny spędzić o wiele bardziej produktywnie.


Przerwa na fejsbuka:

Poświęć jednego klika i wciśnij lajka jeżeli artykuł jest Ci pomocny ;)


Specjalizacja

Moim zdaniem nauka dodatkowych języków programowania jest w dzisiejszych czasach nie tyle “opcją”, co koniecznością. C#, SQL, HTML, CSS, JavaScript… każdy ma swoją rolę i odpowiednik każdego z nich programista musi znać. Trzeba jednak od czegoś ZACZĄĆ. I trzeba się w czymś specjalizować.

Język, który będzie naszym “numerem jeden” powinien mieć praktyczne zastosowanie – takie, abyśmy z niego na co dzień korzystali. Wszystko dodatkowe jest… no, dodatkowe. Nie należy oczywiście traktować pierwszego wyboru jak przysięgi małżeńskiej, bo zmienić później preferencje i się przekwalifikować na inną technologię powinno być w miarę łatwo. Kluczowym kryterium w wyborze powinno być postanowienie: nie podjąć GŁUPIEJ decyzji marnującej nasz cenny czas.

W przyszłości, docelowo, trzeba będzie oczywiście wiedzieć dlaczego programowanie obiektowe jest lepsze od proceduralnego. Albo do czego nadaje się programowanie funkcyjne, i jakie ma zalety. Albo czym charakteryzuje się programowanie aspektowe i jak mądrze z niego korzystać. Albo… i można tak wymieniać i wymieniać. Ale nie oszukujmy się – po co komu ta wiedza na początku drogi? Jeśli ktoś pyta o wskazówkę “jakiego języka się uczyć”, to te wszystkie pojęcia nic mu nie powiedzą. Nie ma sensu się więc wymądrzać.

Nie jest tajemnicą, że na dzień dzisiejszy prym wiedzie programowanie obiektowe – i z rodziny tych właśnie języków trzeba coś wybrać.

Algorytmy…?

W kilku przypadkach spotkałem się z opinią, którą można skrócić do: “dla prawdziwego programisty język programowania nie ma znaczenia… to ALGORYTMY są najważniejsze; naucz się algorytmów i będzie cacy“. Czy aby na pewno?

Po pierwsze – nie do końca wiem, co ma współczesne programowanie do algorytmów. Wykorzystywane algorytmy zostały już wymyślone, zaimplementowane, opakowane w ładne biblioteki i udostępnione. Oczywiście na studiach napisanie algorytmu może być zadaniem samo z siebie, ale i tak ma się to nijak do PRACY programisty. Nawet jeśli jakiś nowy algorytm będzie potrzebny, to poważna firma poszuka matematyka aby to obmyślił – a programiście zostanie wpisanie instrukcji w klawiaturę.

Po drugie – jakie tak naprawdę znaczenie ma znajomość algorytmów? Czy takie podejście nie jest nauką “na zapas”? W dzisiejszych czasach problemy wydajnościowe nie są spowodowane złą implementacją jakiegoś algorytmu przez programistę pracującego nad projektem. Są spowodowane nieumiejętnym zarządzaniem połączeniami z bazą danych, nieefektywnym wykorzystaniem cache, użyciem nieodpowiednich bibliotek, błędnym posługiwaniem się technologią… czyli właśnie tym wszystkim, co programista POWINIEN umieć robić. Od wymyślania algorytmów są… algorytmicy :).

Z życia wzięte:

Pisałem kiedyś aplikację, która z plików tekstowych o rozmiarach liczonych w gigabajtach musiała wygrzebać odpowiednie informacje, skonstruować zapytania SQL i wrzucić dane do bazy. Najpierw zrobiłem to “po bożemu”, czyli tak, aby było “ładnie” z mojego punktu widzenia – programisty/architekta. Spodziewałem się, że na tym się nie skończy, ale w końcu “Premature optimization is the root of all evil” :). Okazało się, że całość działa zbyt długo (chociaż i tak robiła wszystko w 1/3 czasu potrzebnego na te operacje w już istniejącym systemie). Manipulacja SQLem, przejście z pojedynczych zapytań na procedury składowane a potem na bulk insert przyniosły kolejne ucięcie czasu o połowę. Ale pomyślałem, że nie zaszkodzi pobawić się i spróbować jeszcze zejść z tego czasu. I właśnie wtedy – DOPIERO wtedy – pojawił się temat jakichkolwiek algorytmów. Trochę lektury w internecie, trochę eksperymentów z GOTOWYMI implementacjami, zamiana w jednym miejscu listy na BST i czas uległ kolejnemu skróceniu o kilkadziesiąt %.

Cała algorytmiczna zabawa zajęła mi JEDEN wieczór, JEDEN raz podczas kilku lat parania się programowaniem. Czy żałuję, że algorytmy nie były dla mnie priorytetem na początkach nauki? Zdecydowanie – NIE. Jeśli chcę posortować listę to wywołuję metodę List.Sort() – a co ona zrobi pod spodem to mnie naprawdę guzik obchodzi. Sprawienie, aby metoda działała dobrze zarówno dla 10 jak i dla miliona elementów, to zadanie programisty piszącego jej implementację i umieszczającego odpowiednie informacje w dokumentacji… lub moje, gdy profiler pokaże, że należy zwrócić szczególną uwagę na ten kawałek kodu.

SuperDEV napisze wszystko w każdym języku

Można napisać wszystko we wszystkim. Dajcie mi jeden dzień a napiszę kalkulator w każdym języku programowania. Dajcie miesiąc, a napiszę w każdym proste forum internetowe.

Tylko co z tego? Czy to będzie znaczyło, że jestem dobrym programistą? A skądże znowu! Dajcie mojej babci rok, i też wam to napisze.

Podchodząc w ten sposób do programowania ograniczę się do szukania wśród wszystkich używanych języków ZBIORU CECH WSPÓLNYCH. Czyli okaleczę każdy jeden język po kolei, ucinając z niego to, co odróżnia go od reszty.

Sztuką w programowaniu nie jest pisanie WSZYSTKIEGO WE WSZYSTKIM. Sztuką jest umiejętność stuprocentowego wykorzystania potencjału drzemiącego w technologii wykorzystywanej w projekcie. Ja piszę projekty w .NET i staram się, z różnym skutkiem, wycisnąć te 100% z platformy .NET. Ktoś inny robi to w innej technologii. Ale jeśli ktoś będzie próbował wmówić mi, że w równie zaawansowanym stopniu zna i .NET, i Javę, i PHP, i Pythona, i RoR, i cokolwiek jeszcze… to nie pomyślę o nim “ale z niego super programista”. W 95% przypadków pomyślę: “co on pier…?”.

Oszczędźcie mi takich bzdur (ale o tym już kiedyś pisałem w poście “Technologiczny kogel-mogel. .NET vs Java vs PHP vs RoR…“).

Więc… jaka jest ostateczna rada?

Byłby głupio wylać tyle wypocin na ekran i nie zakończyć faktyczną odpowiedzią na to pytanie.

Oto odpowiedź, jaką JA chciałbym dostać zaczynając dzisiaj przygodę z programowaniem i zastanawiając się co wybrać:

Rozpoczynając naukę programowania najlepiej jest wybrać język, który nie tylko ma bardzo szerokie praktyczne zastosowanie, ale też społeczności skupione wokół portali internetowych mu poświęconych. Najpopularniejszymi na dzień dzisiejszy wydają się być C# i Java. Ucząc się ich na początku można mieć przekonanie graniczące z pewnością, że nauka nie pójdzie w las. Po kilku latach nauki i praktyki bez problemu powinno się znaleźć pracę na stanowisku programisty.

Jeśli interesują cię szybkie efekty i chciałbyś na przykład dorobić sobie kilka groszy tworząc sam proste stronki internetowe, wizytówki gabinetów stomatologicznych, informacyjne witryny o jakichś wydarzeniach itp – zainteresuj się PHP.

Zauważysz pewnie, że w liceum i na studiach naukę rozpoczyna się od Turbo Pascala bądź C. Daruj sobie – te języki pobieżnie poznasz właśnie na zajęciach. Argument bardziej merytoryczny: są to języki proceduralne, a nie ma sensu zaczynać od języka innego niż obiektowy.

Możesz spotkać się z poradami, które będą cię skłaniały do nauki języków starszych, takich jak COBOL czy Fortran. Argument: nadal używa się systemów w nich napisanych, a brakuje programistów specjalizujących się właśnie w nich. Z ich znajomością także nie powinieneś mieć problemu ze znalezieniem pracy (chociaż… cholera wie), jednak należy zdawać sobie sprawę z tego, że prawdopodobnie nie będzie to praca… ciekawa. W tych językach napisano miliony programów, które nadal ktoś musi utrzymywać. A utrzymanie systemu istniejącego od X lat nie jest zajęciem, które bym polecił komukolwiek. Najprzyjemniejsze, najciekawsze i najbardziej ambitne jest tworzenie projektu od zera. Nawet w C# czy Javie może być ciężko z taką okazją i nie można się na to nastawiać, lecz  przy takich językach jak COBOL czy Fortran graniczy to z niemożliwością.

Powyżej pominąłem chociażby C++ – moim zdaniem nie jest to dobry język na początek. Nie wspomniałem też o Ruby czy Pythonie – fakt, że są to języki dynamiczne, dyskwalifikuje je moim zdaniem jako kandydatów na “pierwsze koty za płoty”.

Wzmianki na temat bardziej oryginalnych języków jak Lisp, F# czy OCaml ignoruj całkowicie z czystym sumieniem – są to języki funkcyjne, którymi nie powinieneś interesować się na tym etapie edukacji.

Tak więc na koniec jeszcze raz: jeśli chcesz rozpocząć naukę programowania, to zdecyduj się na C# lub Javę. W ten sposób nie zmarnujesz czasu na naukę czegoś nieprzydatnego, a pamiętaj że na ewentualną zmianę technologii nigdy nie jest za późno“.

 

I oto moje kilka groszy dorzucone do tematu. Thoughts?

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

46 Comments

  1. Twoje podejscie przydaje sie w programowaniu aplikacji biznesowych – najczesciej.

    Dlatego istnieja inne jezyki, poniewaz sa one wydajniejsze w innych zastosowaniach. Kiedy powstawal COBOL M$ nawet nie istnial. Cytujac wiki:[quote]"90% światowych transakcji finansowych jest przetwarzanych przez programy napisane w COBOL"[/quote].

    Dobry inzynier (nie developer czy koder) potrafi szybko nauczyc sie kazdego jezyka.A dobry napisze swoj kompilator…..ale tu juz sa potrzebne podstawy matematyki i logiki ;)

  2. @klm_:
    Wychodzę czasami poza C#. Wiem gdzie zastosowanie ma COBOL, wiem gdzie zastosowanie ma Ada. Ale to nie znaczy ze chcialbym lub zyczylbym komus innemu pisanie w nich.
    Pamiętaj o kontekście: POCZĄTKUJĄCY prosi o radę. Poradzisz mu naukę COBOLa, bo "90% światowych transakcji finansowych jest przetwarzanych przez programy napisane w COBOL" ?

  3. Znam goscia, ktory programowac nauczyl sie w wojsku i to wlasnie COBOLA i teraz bardzo dobrze sie ustawil. Pracuje w banku :)
    Z drugiej strony znam kilka osob po studiach klepiacych formatki w ASP.NET do systemu ERP…..

    Ja radze kazdemu mlodemu adeptowi sztuk tajemnych zeby poznal ich paradygmaty. Do wiekszosci z nich to nie trafia – trudno. Zdazaja sie jednak osoby, ktore sa pasjonatami, dla ktorych poznanie nowego jezyka to nie problem, poniewaz znaja paradygmaty zastosowane w jednym czy drugim jezyku. Znajac paradygmaty wiesz na co zwracac uwage, nie bladzisz. Pozniej latwiej jest sie dostosowac do innych realiow (np. gdy programowanie w COBOLU jest platne 4x srednia krajowa). Dla takiej osoby nie jest problemem sortowanie na piechote struktur danych, ba….. optymalizowac.

  4. Ja sie odniose tylko do kwestii algorytmow, ktorych znaczenie wg mnie pomniejszasz. Otóż znaczenie ma i to ogromne jeśli chodzi o pisanie kodu. O ile jesli masz przypadek kopiowania tablicy bajtów to ok – tu wiedzy miec nie trzeba praktycznie żadnej. Ale jak sam powiedzialeś miales tylko raz potrzebe schodzenia z czasem danej operacji. Swego czasu np musiałem ciagle optymalizować kod, robic rozne sztuczki – dlaczego? ano dlatego ze z aplikacji mieli korzystać ludzie w innej firmie dla której czas odpowiedzi apliacji był wazny, sam poruszałeś temat – kup lepszy sprzet, bo zaoszczedzisz na czasie, a w tamtyp przypadku nie bylo pieniedzy na zakup 50 kompow, ktore by mialy po zylion rdzeni. A nawet jesli by byly to trzeba by zmienic w tej firmie cala siec co by się wiązalo z kolejnymi wydatkami.

    I tutaj tez taka mala dygresja – .Neta z pewnością nie znam tak dobrze jak Ty. Ale jako, że wydaje mi się że mam jakieś tam podstawy, to nie było dla mnie problemem, by projekt o którym pisałem, był napisany w Delphi – sie w niego wdrozyć i dalej rozwijać. I to przede wszystkim chyba własnie dzięki temu, że na uczelni napisałem n programów w różnych językach właśnie implementując przeróżne różniste algorytmy powoduje, że mogę programować i czerpać przyjemność z tego co robię, a w .necie praca jest dla mnie najprzyjemniejsza, ale nie oznacza ze sie zamykam tylko na niego. Bo dla mnie programowanie to rozwiązywanie okreslonych problemów, co mi sprawia przyjemność.

  5. @yaceq:
    Oczywiście masz rację – jeśli trzeba zająć się optymalizacją to często wymaga to zejścia do algorytmów i nie wychodzę z założenia że "kup lepszy sprzęt" jest jakimkolwiek rozwiązaniem. Ale czy znajomość iluśtam różnych algorytmów jest najważniejsza? Moim zdaniem nie – w razie potrzeby znajdzie się odpowiedni i go użyje. Na początku nauki są ważniejsze rzeczy do nauki niż algorytmy – właśnie pojęcia związane bezpośrednio z programowaniem obiektowym, których znajomość jest KONIECZNA dla programisty, i to CODZIENNIE.

    Jeśli trzeba skorzystać z innej technologii – to się z niej korzysta. Na tym polega nasza praca, zamykanie się tylko na C# nie jest możliwe. Sam programowałem i w Javie, i w C++, i musiałem zaglądać do VBA a niedługo może mnie czekać zagłębienie w PHP. I bardzo dobrze – ale to nie oznacza, że będę mógł się mianować ekspertem w tych wszystkich technologiach.

    Cały post napisany jest w kontekście: od czego ZACZĄĆ? Musiałem kiedyś na takie pytanie odpowiadać i wtedy nie poradziłem pytającemu zaczęcia od pisania algorytmów w delphi, ani nie wyjechałem mu z wykładem o paradygmatach. Bazując na własnym (może skrzywionym) doświadczeniu oraz podpierając się praktycznymi argumentami udzieliłem odpowiedzi, która była pomocna – i tyle.

  6. szmergiell on

    Z dawien dawna uczyłem się C++, ale w pewnym momencie zarzuciłem temat — czasu i chęci zabrakło. Ostatnio wróciłem do C++ i ruszyłem kawałek dalej… ale ciężko było przebrnąć przez pewien etap nauki (jak nie widać efektów od razu, to po co próbować coś robić). Ze względu na chęć szybkiego znalezienia się "w branży" zainteresowałem się PHP. Pierwszy kontakt z tym językiem, pierwsza fascynacja. Ale znowuż — brak jawnych efektów w postaci działających ekosystemów spowodował dalsze poszukiwania. Tym razem zatrzymałem się przy C#.
    Wiem, że takie skakanie po różnych tematach pozwoli mi tylko na pobieżne zapoznanie się z nimi, bez głębszego zrozumienia tematu, jednakże chciałbym jak najszybciej wkroczyć do branży, by obcować na żywo z programowaniem, a nie tylko "przez szybkę" nauki. Moim problemem jest trudność w skupieniu się na nauce od A do Z programowania. Potrzebowałbym jakiegoś "celu", który ktoś mógłby kontrolować i rzucić na niego okiem od czasu do czasu, czy to aby jest to, czego on oczekuje.

    Ostatnio na devpytaniach kilkukrotnie przewijał się temat: jaką aplikację zrobić. Dla mnie bez sensu jest robienie fafnastego kalkulatora. Sam dla siebie zrobiłem drobny programik w C++ obliczający wschody i zachody słońca. Mała rzecz, a cieszy. Teraz dochodzi jego pielęgnacja i rozbudowa o dalsze funkcje, ale… spełnia podstawowe założenie i znowu ochoty brak.

    Chyba potrzebuję mentora, który mógłby rzucić temat, a następnie sprawdzić jego realizację. Czy znajdzie się jakiś chętny?

    PS W przypadku małych, funkcjonalnych programów jestem w stanie zrobić sporo z wykorzystaniem podstawowych założeń danego języka. a jeżeli czegoś się nie da — to szukam głębiej w celu znalezienia rozwiązania. Innymi słowy: nauka przez fun tworzenia. Ale czy to aby dobra droga?

  7. @szmergiell:
    "nauka przez fun tworzenia" to chyba jedyna sensowna droga:)

    Co do projektu do napisania w celach edukacyjnych, to kiedyś na CG pojawiło się info "chce coś dla kogoś napisać ale nie wiem co i nie mam dla kogo". Zadeklarowalem sie wówczas ze chetnie podrzuce temat i moge pelnic role "klienta weryfikujacego spelnianie wymagan przez program". Temat umarł (chyba zainteresowan sie rozmyslil) a ja programu nadal nie mam. Jakbys byl chetny to daj znac ze strony kontaktowej.

  8. Pomijajac wszystkie kwestie ktore poruszyles w art i przechodzac do Twojej odpowiedzi na pytanie.

    Sorki ale tak naprawde nie odpowiedziales na pytanie – to co zrobiles to dales osobie wybor pomiedzy dwoma jezykami zreszta nie dziwie sie. W 90% taka osoba zadajaca pytanie teraz (nie kiedys) ma glownie problem z wyborem pomiedzy tymi jezykami. Nie liczac faktu ze jako pierwszy jezyk programowania wybierac C# czy Java to do najlepszych decyzji nie nalezy. Gdybym mial na nowo podjac nauke w zyciu nie rozpoczynal bym od C#/Java. Skoncentrowal bym sie na jezyku ktory nie koniecznie ma wsparcie platform (zreszta juz od jakiegos czasu sie mowi, ze to co zostanie z C# i Javy to wlasnie plaftormy) – na nauczenie sie plarformy przyjdzie czas, nie musisz poswiecac temu 5 lat studiow!

    Odpowiedz jakiego jezyka powinnienes sie uczyc zalezy od momentu w ktorym to pytanie zadajesz.

    Jezeli jest to pytanie po studiach to nie ma sie czasu na nadrabianie zaleglosci, w tym wypadku nawet C# i Java beda naprawde odpowiednie.

    Jezeli pytanie zadawane jest przed rozpoczeciem studiow – na przyklad na MIT jezykiem podstawowym byl Scheme a aktualnie chyba jest Python, u mnie na uczelni byla Java u mojego znajomego TurboPascal i C++ (aktualnie pracuje jako Java Dev), ja bym wybieral pomiedzy Pythonem a jezykiem funkcyjnym. Zawsze wychodze z zalozenia ze najwazniejsze to sa mocne fundamenty, znajac je bedziedzie wiedziec na jakich zasadach dziala Java czy C# przez co latawiej pojmiecie te dwa jezyki.

    Jezeli zadalibyscie to pytanie przed liceum to bym powiedzial ze warto zwrocic uwage na proste jezyki ktore naucza nas podstawowej konstrukcji, chodzi o to by zapoznac sie co to jest pentla jak ona dziala, jak dziala rekurencja – takie male podstawy a ktore pozniej zaaowocuja, tutaj ja mialem TurboPascal i C++ (tak Procent w Liceum mialem dr. z PW ktory nas uczyl programowac zarowno w TP jak i w C++ i nie byl to czlowiek co GOWNO wie :))

    Mowiac szczerze, to co robi MS na uczelniach, robil Sun teraz pewnie Oracle powoduje to co wlasnie Procent pokazales w postcie w szczegolnosci w odpowiedzi. Ogolnie uwazam, ze MS i Sun maci ludziom w glowach na uczelniach – wybierz nas, jestesmy fajniejsi – gowno prawda.

    Rozumiem Twoje podejscie do tematu ale sie z nim nie zgadzam. Nalozyles na nie swoje doswiadczenie i swoje przekonania co w tym konkretnym przypadku jest bledem. Algorytmy – pewnie Ci sie nie przydaly w pracy w bezposredni sposob, ale sie przydalo myslanie ktore kiedys zastosowales by nie oprogramowac. Wiedza o C++ i kompilatorach nie przydala Ci sie piszac petle for, ale przydala Ci sie kiedy chciales zrozumiec zasady dzialajace w jezyku C#/Java.

    Podsumowujac rozumiem czemu sie oburzyles na art goscia i kilka jego tekstow ladnie wypisales, zgadzam sie z super dev jezeli pod Java i .NET rozumiesz frameworki a nie jezyki bo jezeli mowisz o konstrukcji jezyka to sie nie zgadzam. z agrotymami sie nie zgadzam – to znaczy nie chodzi o to by pisac bubble sort, chodzi o to by potrafic odpowiednio myslec i kombinowac, jak nie w pracy to na interview do wymazonej firmy sie to przyda. Specjalizacja – znow, moj jezykyk numer jeden ulegal zmianie z czasem. I nie uwazam, ze marnowalem czas na uczenie sie innych jezykow – o nie, wrecz przeciwnie jestem zadowolony z tego ze sie ich uczylem bo dzieki temu jezyk w ktorym aktualnie pisze przyszedl mi duuzo latwiej.

    Gutek

  9. @Gutek:
    Oczywiście że na odpowiedź nałozyłem wlasne doswiadczenie i przekonania… a czyje miałbym nałozyć?:)
    Algorytmy – jest tak jak mowisz, przydaje mi sie "algorytmiczne myslenie". Ale nauczylem sie tego podczas nauki programowania, a nie przez poświęcanie miliona godzin na poznawanie roznych implementacji.
    Kompilator – napisanie wlasnego to byla wielka frajda, jak zreszta caly proces poznawania ich dzialania. Ale powiesz czlowiekowi ktory chce zaczac cokolwiek robic: "naucz sie jak dziala kompilator?"

    Cały czas wychodzimy poza kontekst posta.
    Nie namawiam nikogo zeby zamykał oczy na inne języki. Nie namawiam do olewania wszystko poza pisaniem kodu. Nie namawiam do ignorowania pojęć takich jak algorytmy czy kompilatory.

    Staram się po prostu odpowiedzieć na pytanie: "jak zacząć uczyć się programowania?" I masz Gutek rację – moim zdaniem dzisiaj jest to wybór pomiędzy tymi dwoma językami (oczywiscie po nalozeniu mojego doswiadczenia i przekonan;) ).

  10. "ucz się COBOLa" czy Ady czy Fortrana to. a niestety czasami sie przydaje, nie wszedzie ale nie nalzey zapominac o tych jezykach

    … języków programowania … HTML, CSS ok … Nie ma sensu się więc wymądrzać. :)

    ALGORYTMY –> dzis chyba coraz bardziej w znaczeniu projekt aplikacji, zasad/logika jej dzialania (wiem, ze bez sensu ale za pozno wspomina sie o tych problemach).
    Jezyk nie ma (znaczenia), srodowisko biblioteki tak – na to potrzeba znacznie wiecej czasu

    Więc… jaka jest ostateczna rada?

    To rada dla osoby w liceum, tak zakladam ? Moze ona byc, po prostu dziala teraz podobnie ale ludzie(nauczyciele) pozostali na etapie gdy Turbo Pascal i C odgrywalo podobna role jka C# i Java.

    Jesli na studia (no chyba, ze inż) to na pewno nie, tam czlowiek ma poznac spektrum mozliwosci, z ktorych swiadomie sam wybierze to co go interesuje. Jedni zostana potem tworcami aplikacji wybierajac C# a inni beda pisac doktorat z wyzszosci F# nad C# :).
    Natomiast inni zauwaza, ze wiekszosc algorytmow jest napisanych w Fortranie i tym podobnych (uwierz, ale jak pisze sie program, w ktorym naprawde trzeba cos policzyc, a swiat nie sklada sie z aplikacji biznesowych tylko, to czlowiek bardzo zaluje, ze nie ma takich bibliotek jakie sa w fortranie co prawda powoli przepisywane pod c++ ale powoli.)
    Temat nie jest tak prosty. Nie wiem czy istnieje w ogole odpowiedz, podobnie jak Ty spogladam na wiele takich tematow i ciezko powiedziec co tu wybrac. Chyba system ksztalcenia musi sie zdecydowac kogo ksztalcic. W poczatkowych stadiach (do gimnazjum/liceum) nalezalo by ksztalcic praktycznie a dopiero na studiach pokazac wszelkie mozliwosci. No ale jest problem, niektorzy moga nie zgodzic sie, ze to ma byc .NET bo niby czemu wspierac MS ?! Pamietaj z to jedyny przedmiot poza religia, w ktorym istnieje taki problem.

    > Jeśli interesują cię szybkie efekty i chciałbyś na przykład dorobić sobie kilka groszy tworząc sam proste stronki internetowe, wizytówki > > gabinetów stomatologicznych, informacyjne witryny o jakichś wydarzeniach itp – zainteresuj się PHP.

    i to jest wprowadzanie czlowieka na zla droge, niech nauczy sie pisac porzadnie w PHP, to samo mozna by powiedziec o C# (ASP .NET) – hosting teraz jest i pewnie bedzie coraz wiecej.

    Poruszony temat tu gdzies Delphi, troche przygaslo srodowisko … wiec jakby ktos zaczynal studia i na poczatku uczono go by tej popularnej przez jakis czas platformy, moglby skonczyc zle.

  11. @Procent: najs, lubię takie dyskusje, nawet jeśli czasem, jak napisałeś, zakrawają na pyskówkę – można podyskutować na ciekawy i kontrowersyjny temat.

    Co do Twojego zdania – zgodzę się z Tobą z pewnymi dodatkami, modyfikacjami. Na sam początek uważam, że najlepsza jest właśnie Java/.NET, bo ich model obiektowy jest czysty, łatwo w nich zrobić okienka (a to ważne dla początkujących – bo widać efekty) i oddają mniej więcej o co chodzi w programowaniu biznesowym :) W momencie, gdy adept stwierdzi "programowanie – to droga dla mnie" tak łatwo już nie jest. W Javie/C# bardzo łatwo znaleźć pracę (dorywczą/tymczasową/stałą), nie mając nawet zbyt dużych umiejętności, ale owe języki nadają się w zasadzie do tworzenia narzędzi biznesowych. Jeśli kogoś zainteresuje tworzenie gier, programowanie mikrokontrolerów, urządzeń wbudowanych etc. będzie musiał zmienić język. Nie ma niestety języka programowania, który nadaje się do wszystkiego jednocześnie.
    Abstrahując od obranej ścieżki uważam, że zawsze warto cofnąć się do C i assemblera – to bardzo pouczające i rozwijające, w szczególności o ile chodzi o tę przeklętą optymalizację. Na to jednak, znajdzie się czas na studiach :)

  12. Szkoda, że nie nie miałeś tyle odwagi, żeby wrzucić linka do tego posta w komentarzach do mojego wpisu, tylko muszę się o odpowiedzi dowiadywać z statystyk i Twojego Twitter, ale co się odwlecze to nie uciecze. :)

    Smutne jest, że nie zrozumiałeś (a może za słabo zaznaczyłem o co mi chodzi?) mojego wpisu. Nie odpowiadałem na pytanie "Jakiego języka się nauczyć?" ale na pytanie "Jakiego języka się nauczyć aby zarabiać taaaaaakąąąąąą kasę?". Mam nadzieję, że widzisz tą subtelną różnicę. I tak, takie osoby uważam za zakały informatyki. Z resztą, chyba nie tylko ja (może po prostu mam bardziej wredny sposób wypowiadania swojego zdania?), najwyżej punktowana odpowiedź na devpytaniach do tego pytania również należy do mnie (post powstał jako rozwinięcie odpowiedzi na devpytaniach).

    Odnośnie co będzie za 5 lat. Owszem, za 5 lat Java i C# nadal będą istniały, ale 10 lat temu, jakby ktoś zapytał co będzie za 5 lat, nikt by pewnie nie wskazał C#. Może akurat za 5 lat, będzie boom na coś innego niż C# i Java i w tym lepiej robić kasę?

    COBOL – to była ironia odnośnie pewnego zapotrzebowania na umiejętności.

    Algorytmy – widzisz, jakbyś się ładnie uczył algorytmów to byś znał takie coś jak BST. Nie trzeba znać na pamięć ich implementacji, bo tego nikt nie pamięta, ale czasami zdarza się, że trzeba go dostosować do wymagań. Albo żeby chociaż wiedzieć jak działa i jaki algorytm lepiej się nadaje do naszego problemu.

    Jakiego języka warto się nauczyć? Pamiętaj że nie wszyscy chcą skończyć jako klepacze kodu. Druga rzecz, że wielu sławnych programistów uważa, że lepiej się nauczyć czegoś trudniejszego (chodzi mi konkretnie o C), a nie pchać się w Javę/C#, bo traci się doświadczenie i pewien stopień trudności. Ale chyba jakbym sam to napisał to byś nie posłuchał, więc lepiej dam linka:

  13. @Matthew:
    Odwagi? A czego się miałem bać?:)

    Tytuł Twojego posta to "Jakiego języka programowania się nauczyć?" a nie "Jakiego języka się nauczyć aby zarabiać taaaaaakąąąąąą kasę?", więc… tak, za słabo zaznaczyłeś o co chodzi. Swoją drogą w zarabianiu (tudzież chęci zarabiania) taaaaakieeeej kasy nie widzę nic złego. Programowanie to nie żadna misja dziejowa matki teresy i chyba lepiej zarobić na tym więcej niż mniej…? Durne ideały "będę programował nawet za pół darmo" są prędzej czy później weryfikowane.

    Jakbym "się ładnie uczył algorytmów" jak to wyniośle określiłeś, to może nie umiałbym innych, bardziej przydatnych rzeczy. A co do BST… tak jak napisałem – wiem co to jest.

    Co do ostatniego akapitu – link się nie wkleił. A kto to mówi nie ma zbytnio znaczenia, bo na moim blogu zamieszczam moją odpowiedź która się nie zmieniła. Moim zdaniem nadal najlepiej zacząć od C# lub Javy. Znam argumenty za podejściem alternatywnym, przemyślałem je, ale mnie nie przekonują.

  14. Link: http://www.devblogi.pl/2009/09/niebezpieczne-java-szkoy.html

    Co do zaznacznia: liczyłem na to, że ktoś przeczyta treść i podejście do tego mniej emocjonalnie. Fakt, że nie tak całkiem się mylę jest liczba komentarzy (pozytywnych, negatywnych pochodzących głównie od ludzi, którzy nie mieli jeszcze przygody z prawdziwą pracą programisty, oraz od fanboyów C#/Javy za słowa, że ich języki nie są najwspanialsze i tylko ich powinno się uczyć) oraz plusach na devpytaniach.

  15. % to znany nam prowokator, któremu przyznam racje w każdej cząsteczce tego posta ! ;)

  16. @Matthew
    "Druga rzecz, że wielu sławnych programistów uważa, że lepiej się nauczyć czegoś trudniejszego (chodzi mi konkretnie o C), a nie pchać się w Javę/C#, bo traci się doświadczenie i pewien stopień trudności."

    zabawne, a co jest trudnego w C ? :D chyba tylko to, że wszystko trzeba zaimplementować samodzielnie i nie ma nic gotowego… a nauka zajmuje tydzień czasu. no daj człowieku spokój, to biznesowo jest wymarły język(tak wiem, może sterowniki się w tym pisze jeszcze)…

  17. Popieram post w 100%. Nauka języka to żaden problem, programista musi znać BIBLIOTEKI! A tego nie da się nauczyć w jeden wieczór, a każdy język ma inne.

  18. E nie, nie musi. biblioteki to dokumentacja, a pobieżnie dowiedzieć się która jest do czego to jest jeden wieczór. Nauka języka to żaden problem jak się uczysz na pałę. Myślę że sam autor, jeśli pisze już w C# pare lat, to dalej niektóre rzeczy są go w stanie jeszcze zaskoczyć.

  19. @Andrew, @bigfun:
    Odchodzimy trochę od tematu, ale niech tam…
    Zdecydowanie zgadzam się z bigfun.
    Andrew, nauka języka to NIE JEST jeden dzień. Chyba że robimy tak jak napisałem w przykładzie z kalkulatorem – sprowadzamy je wszystkie do wspólnego mianownika. Każdy język ma jakąś instrukcję warunkową, każdy język ma jakąś pętlę… JEA, czy to znaczy ze znam je wszystkie? To tak jakbyśmy sprowadzili język polski do "cześć" i "kurwa" – a że każdy język ma inne odpowiedniki których uczy się na samym początku to czy znaczy że reszty nauczę się w jeden wieczór? Baaardzo krzywdzące.

  20. leszczuu on

    Ech. Po prostu inżynieria nie kończy się i nie zaczyna na języku programowania. W czasach 8bitowych komputerków ludzie uczyli się BASICa. Sądzę, że wielu z tych ludzi pracuje dzisiaj w branży IT. Cieszą się że era BASICa dawno się skończyła i być może piszą programy w czymś innym. W moim przekonaniu na początek wystarczy dowolny język, może być nawet najbardziej archaiczny. Wtedy nie ma sensu przywiązanie do jednego języka – poznasz jeszcze milion innych, potem wybierzesz jakiś który poznasz na wylot.
    Zgadzam się, że taaakiej kasy nie zarabia się znajomością jakiegoś szczególnego języka.

  21. hehe miałem identyczne początki nauki programowania na studiach: przesyłanie parametrów przez zmienną, przez wartość – co za różnica ;)
    skoro język programowania jest mało ważny to może Brainfuck :D

  22. 10latkodowania on

    1
    Ludzi którzy uważają, że kwestia wyboru języka programowania nie jest ważna uważam za niebezpiecznych dla otoczenia i myślę, że należałoby ich izolować. Z kodem takich "geniuszy" programistycznych czasem mam do czynienia i właśnie na takiej podstawie wyrobiłem sobie takie a nie inne zdanie. Jeśli spotkasz się z kodem "geniusza", który potrafi programować we wszystkich językach świata polecam ksiązkę "Refactoring: Improving the Design of Existing Code" Martina Fowlera. Zaoszczędzisz sobie sporo stresu.
    2
    Ale jest jeszcze inna kwestia związna z językiem programowania, którą raczej mało kto porusza a jest ważna. Chodzi o to gdzie chcesz pracować. Rożne technologie są bardziej popularne w różnych miejscach. Oto moje zdanie (oczywiście z grubsza): US – .NET, Niemcy – Java, UK – .NET, Polska – raczej Java.
    Dziękuję i pozdrawiam

  23. @10latkodowania:
    Fakt, kwestii lokalizacji nie wziąłem pod uwagę. W Polsce interesowałem się wyłącznie rynkiem pracy w .NET (a poza Polską w ogóle się nie interesowałem:) ) ale z tego co słyszę od ludzi to masz rację, w dalszym ciągu dużo łatwiej o pracę w Javie. Może nie w Warszawie, gdzie raczej każdy niezależnie od języka pracę znajdzie, ale w mniejszych miastach z .NET może być już różnie.

  24. @procent i @10latkodowania

    nie tylko miejsce sie liczy, liczy sie tez na co chce sie pisac aplikacje. w Mobile (centralach komorkowych) raczej przoduje Java, zas w biznes ups na komputer to .NET (mowa o komputerach z Windows).

    Zas jezeli chodzi o zaawansowane systemy biznesowe z worflowami i ktore by uwzglednialy wiekszosc std jak BPEL itp to znow Java – nei zaleznie jak by sie wychwalalo SharePoint, SQL BI, BizTalk dalej im do std. niz sie wydaje :)

    Wiec platforma (tak bedize ladniej, bo jezyk to jezyk) na ktorej piszemy zalezy od tego gdzie jestesmy (co jest bardziej popularne w danym kraju tak jak @10latkodowania zauwazyles) plus na co chcemy pisac i koncetrowac swoje wypociny.

    Gutek

  25. A co tam. I ja się wypowiem. Jeśli miałbym wybierać język programowania to wybrałbym na początek to co aktualnie jest najpopularniejsze i jest dla niego najlepszy support w postaci for(ów?), blogów, dokumentacji, ludzi, którzy chętnie pomogą się czegoś nauczyć/zrozumieć. Pewnie w tym przypadku będzie to Java/.NET. Ciągle zaznaczam, że pytanie dotyczy kogoś poczatkującego, niemającego pojęcia o programowaniu. b
    I zabieramy się za klepanie. Równolegle z nauką języka dochodzą kwestie szczególne dla środowiska dla którego piszemy i które są mniej lub bardziej (raczej mniej) niezależne od języka jak np. aplikacje webowe – protokół HTTP, przeglądarka, Fiddler :), mobilne – zarządzanie pamięcią, prockiem, etc., aplikacje desktopowe – coś tam (nie wiem, mało pisałem :D). I wszystko w tym temacie. Wiem jak napisać dobrze apliakację w ASP.NET, wiem na co zwrócić uwagę. Przesiadam się na Javę – wiem czego szukać? szukam odpowiedników? nie znajduję – pytam kogoś.
    Algorytmy w rozumieniu BST, q-sorty, etc.? po co? Jak już ktoś napisał: wszystko zostało opracowane i gotowe do użycia. Ważniejszą rzeczą jest umieć diagnozować problemy i umieć wyszukiwać na nie rozwiązania (profiling, sniffing, etc. and google, tudzież bing :D). A to wszystko przychodzi po prostu z czasem niezależnie od technologii.
    Algorytmy w rozumieniu logiczne myślenie? Jak najbardziej – tylko niech któryś mądral powie jak się tego nauczyć? (mi się wydaje że jest to zmienna readonly ustawiana w kontruktorze :D).
    Reasmujując moje nędzne wypociny: język – najpopurlaniejszy, z dostępem do materiałów edukacyjnych, czytanie artykułów ogólnopoglądowych w stylu: jak pisać dobrze web/mobilne/deskto/…., wydajnie, na co zwracać uwagę, etc. (dobra praktyka: wpisz w google: "<twoje zagadnienie> evil".

  26. EDIT:
    miało być "mniej lub bardziej (raczej [b]bardziej[/b]) niezależne od języka :)

  27. Większość osób chyba nie zrozumiała, że w artykule procenta chodzi o języki których nauka pomoże zrozumieć programowanie a także taka osoba będzie mogła coś napisać praktycznego.
    Znam sporo osób które piszą w C++ i najwięcej co zrobili to super-hiper struktury danych skompilowane w gcc, czyli sztuka dla sztuki :P
    Co więcej, mam wrażenie, że w komentarzach wypowiadają się ludzie którzy programowaniem zajęli się w gimnazjum albo wcześniej i wydaje im się, że jak uczyć się programować to tylko w czymś mega obskurnym dla początkujących czyli byle jaki edytor tekstu + gcc. A jeśli ktoś chciałby zaczynać od Javy lub C#, to jest lamerem i nigdy nie powinien siebie nazywać programistą.
    Na koniec nie wiem czemu się przyjęło, że programista to jakaś specjalna kategoria pracowników, którzy są wstanie pracować tylko chipsy i paluszki byle by popisać parę linijek kodu. Jakoś w innych dziedzinach się nie słyszy,że pracują tam ludzie bez pasji np. wśród elektroników itp.

    Pozdrawiam xvirk.

  28. @xvirk
    Pomysl o programowaniu jak o pasji. O komputerach jak o pasji. Spojrz na sportowcow – oni zaczynaja "nauke zawodu" przewaznie w szkole podstawowej. To dla nich pasja. Dlatego potem taki sportowiec wystepuje na igrzyskach, zdobywa zloty medal i nie dostaje kasy (Norwegowie na ostatniej olimpiadzie zimowej tak mieli). Robi to, bo to lubi.

    Pytanie, czy taki programista robi to bo to lubi, czy dlatego ze mu duzo placa ?…. Tak wiec, chcesz uczyc sie takiego jezyka zeby duzo zarabiac, czy dlatego ze sam wewnetrznie tego pragniesz. Wszystko zalezy od twojego swiatopogladu ;)

  29. @klm_:
    Część sportowców uprawia sport TAKŻE DLATEGO że to ich pasja, a część robi to tylko dla kasy.
    Część programistów programuje TAKŻE DLATEGO że to ich pasja, a część robi to tylko dla kasy.

    Każda z tych 4 sytuacji jest całkowicie normalna.
    Najlepiej robić coś z pasją i mieć z tego dużą kasę.
    Gorzej robić coś bez pasji i mieć z tego kasę.
    Jeszcze gorzej robić coś z pasją i nie mieć kasy.
    A najgorzej robić bez pasji i nie mieć kasy.

    Ale jaki stąd wniosek? Moim zdaniem – żaden:). Jeden robi tak, drugi owak. Programista programujący jedynie dla pieniędzy (a nie czarujmy się, programiści ZARABIAJĄ dużo w porównaniu do innych zawodów) nie jest w moim przekonaniu gorszy od pasjonata spędzającego 20h na dobę przed kompem, o ile wykonuje swoją pracę solidnie (kiedyś myślałem inaczej, ale oczy mie się otwarły po studiach).

  30. 10latkodowania on

    Myślę, że poza tym jakiego języka się uczyć, należy również ostrzec adeptów programowania przed innymi zagrożeniami związanymi z tym zawodem, takimi jak:
    Problemy z kregosłupem – siedzenie non stop
    Problemy ze wzrokiem – gapienie się w monitor wiele godzin dziennie
    Jeżeli lubisz sobie pogiercować to masz problem, bo w pracy siedziałeś wiele godzin i gapiłeś się w monitor wracasz do domu, siadasz przed xboxem i robisz to samo. Zero odpoczynku.
    W pracy masz do czynienia najczęściej z progamistami. Spory procent z nich to ludzie trudni w obejściu, niekomunikatywni, często aspołeczne odludki. Nie jest najprzyjemniejsze.
    Poza tym niestety płeć piękna nie ma o nas najlepszego zdania. Jeśli jesteś na dyskotece i wyrywasz lachona to przed tym raczej załóż soczewki zamiast wysłużonych okularów i nie przyznawaj się, że jesteś progrmistą, a przynajmniej nie od razu. Jeśli już to zrobiłeś :) to nie zgrywaj mądrali i może uda się zaciągnąć coś na warsztat :)
    Taki nasz los

  31. @10latkodowania
    Prawda, duża część programistów to ludzie którzy słabo albo nawet bardzo słabo ogarniają się społecznie. Ale mogą się wyrobić po jakimś czasie. Co do związków męsko-damskich wśród programistów, to co wcześniej napisałem część sobie jakoś poradzi.
    Inni też mają podobne problemy…

  32. Ja tylko wspomnę że Fortran i C przeżywają renesans na platformie CUDA.

  33. "Dajcie mi jeden dzień a napiszę kalkulator w każdym języku programowania" – Dajesz, w Maelbodge albo Brainfucku :]

  34. Ob.Serwator. on

    "Zeby pisac, trzeba pisac". Czy jakos tak brzmialo zdanie z Symfonii C++. Dobrym programista jeszcze nie jestem i pisze to z punktu widzenia amatora.

    Moim zdaniem na poczatek moglby byc nawet Basic. Jest prosty, ma niewiele slow kluczowych, na poczatek nawet pozwala nie deklarowac zmiennych tylko tworzyc je wedle zapotzrebowania i sam juz dostosuje automatycznie typ. Uczcay sie (bo jeszcze nie programista) nie musi wiedziec nic o typach zmiennych a jedynie poznac najprostsze konstrukcje programistyczne. Ktos moze sie zasmiac, ze to juz nie te czasy, kiedy taki QBasic byl dopdawany do DOSA, czy tez pelnil role systemu operacyjnego w minikomputerach. A czymze on sie rozni od innych "powaznych" jezykow? Wlasciwie tym, ze jest najmniej skomplikowany. I co za tym idzie – takze i programy w nim robione sa neiskomplikowane (sila rzeczy jezyk nie daje zbyt duzo mozliwosci w porownnaiu z pascalem czy C). Ale od zcegos tzreba zaczac. Jezeli ktos chcialby hobbystycznie zaczac sie uczyc programowania, to bylby niezly wstep. Owszem, basic zaczyna powoli miec te same mozliwosci co inne obiektowe ejzyki, ale to tak na sile jest tworzone i to pod .NET (przynajmniej VB, nie wiem jak jest w RealBasicu czy innych tam odmianach. Sam czysty basic, to prostota. W kazdym badz razie – mniej bledow sie popelnia na poczatek.

    Gdy juz zauwazy ze niewiele moze z tego jezyka wycisnac, zechce sam sie rozejzrec za innymi mozliwosciami. GC w C# czy Javie to moze i fajna zrecz ale tez denerwujaca czasami, kiedy sammeu by sie chcialo wsyztsko pilnowac, a poza tym, dobzre by bylo wiedziec, PO CO wogole jest takie narzedzie. I tu mysle ze dobrym wyborem juz bylby C++ – przyszly programista SAM bedzie sie musial nauczyc dbania o pamiec. I wtedy byc moze zapragnie programowac w jezyku, ktory sam za niego to zrobi. A byc moze nie – bedzie chcial miec pelna kontrole nad czasem zycia wlasnych wskaznikow i wiedziec dokladnie ze w momencie takim a takim, wskaznik zwalnia pamiec, a nie ze kiedys tam GC zwolni. Nie, C# czy Java to za duzo na poczatek. Oczywsicie nie musi nawet wiedziec ze jest jakis GC, no ale… gdyby tak sie dowiedzial i zapragnal sam obslugiwac zwalnianie pamieci? Musialby sie "cofnac" do pzreszlosci.

    Przy okazji – podczas programoania gosc moze sie nawet niechcacy nauczyc algorytmiki – niezaleznie od jezyka (fakt, czesc rzeczy jest latwiejsza do wykonania w jednym jezyku, a czesc w innym, ale to juz szczegol) – i widzialby wtedy JAK sie powinno podejsc do programowania. Nie da sie oddzielic algorytmiki od programowania, no chyba ze za takie uznamy "klepanie" kodu dla samego klepania, a nie w jakims z gory okreslonym celu. W kazdym badz razie – niezaleznie od jezyka – jesli ktos ma pomysl na jakis program od zera – zawsze musi go najpierw pzremyslec pod katem logicznym, a potem dopiero pod katem jezyka programowania. Czasem cos i tak trzeba zmienic, by dostosowac do jezyka..,

    To tak dla kogos, kto by sie chcoial nauczyc hobbystycznie. Dla kogos, kto juz by chcial zarabiac – odpowiedz jest w ofertach pracy – "poszukuje sie ze znajomoscia jezyka…".

    Co do C#… Raczej na koncu. Dlaczego? Bo C++ mozna uzywac i "po staremu" i na platformie .NET. Jak kto woli – mialby i kod zarzadzany jak i natywny. Rownie dobrze gdyby poznal pascala – moglby sie potem uczyc np Delphi for .NET. Tak samo z basikiem… Od czegokolwiek by zaczal, i gdyby chcial – praktycznie bez zmiany jezyka moglby konczyc na .NET. Mysle, ze w takiej drodze poznalby wiecej algorytmiki, sposobow zastosowan jakischs tam specyficznych dla danego jezyka zreczy i potem moglby czesc z tego przeniesc na .NET. Byc moze i przesiadlby sie na C#.

    W/w dotyczy hobbystow. Ci ktorzy nie znaja programowania a juz by chcieli zarabiac… No coz, szybki kurs jakiegos jezyka, certfikat i lecimy na rozmowe kwalifikacyjna, pokazujac dumie papierek. Nikt po kilkudziesieciu godzinach kursu nie zostanie programista. Zeby pisac, tzreba pisac. Czesto latami.

  35. 1) Potencjalni odbiorcy zadają złe pytanie, które prawidłowo powinno brzmieć "Jak zacząć przygodę z programowaniem?". I nie ma to nic wspólnego z konkretnym językiem. Prawidłowo wyszkolony programista, który raz załapał, co to jest na przykład OOP i opanował jeden język tej klasy kolejnych powinien nauczyć się w 30 minut po 1,5 godziny wymiatać a po 2 miesiącach znać większość najczęściej używanych libów. Dobry programista powinien zrobić to samo ale w stosunku do nieznanej mu klasy – powiedzmy Prologa i języka deklaratywnego. Bardzo dobry programista zrobi to samo co dobry ale w czasie o połowę krótszym.

    2) Skoro potencjalny adept nie ma pojęcia czy chce zostać programistą i czy się nadaje a co gorsza zaczyna od wyboru języka to niech lepiej w ogóle się za to nie zabiera. Jak pokazuje praktyka aby zostać dobrze wyszkolonym programistą trzeba poświęcić na to około 10 lat życia i to najlepiej zacząć jak najwcześniej. Szkoła średnia to statystycznie ostatni dzwonek. W przeciwnym razie zostaje się tylko zwykłym dłubaczem kodu. Tu przy okazji wychodzi znajomość algorytmiki i struktur danych, która nie jest wymagana po to, że by samemu implementować powiedzmy HashTable tylko po to, że by wiedzieć jakie są ograniczenia, plusy i minusy oraz otworzyć głowę na myślenie algorytmiczne tak by potem jak przyjdzie w projekcie zaimplementować opis protokołu to, że by nie było zonka. Kiedyś przejąłem projekt po takich właśnie programistach z bożej łaski, co myśleli, że jak naumieli się C#, libów z .NET i paru wzorców projektowych to już są programistami. Przez 1,5 roku nie potrafili skończyć projektu (mimo że posiadali u siebie jednego olimpijczyka), a my zrobiliśmy go w 1 miesiąc. Tylko my uczyliśmy się programować najpierw na kartce. Nie muszę tłumaczyć jaki los spotkał tą firmę.

    3) Jeśli już ktoś się upiera i chce zaryzykować polecam nawiązanie kontaktu z dwoma trzema dobrymi programistami po "starej szkole", którzy poświęcą nam trochę czasu, wyłożą podstawowe pojęcia a potem sprawdzą i ocenią czy mamy szansę zostać programistami czy tylko dłubaczami kodu za 1000pln miesięcznie. Jeśli odpowiedź będzie pozytywna na pewno nas pokierują w odpowiednią stronę. Jeśli miał bym w ciemno polecać to mam jedną radę – na początku uczyć się jak największej ilości języków ponieważ trenuje to mózg do prawdziwych zadań programisty. Na początek PASCAL lub C potem SmalTalk lub C++ tudzież Java a na końcu język deklaratywny czyli Prolog. Od biedy może być JavaFX.

  36. @HAHA

    To, że udowodniono żeby być w jakiejś dziedzinie wybitnym trzeba poświęcić 10 lat nie oznacza, że nie mamy szans nauczyć się i być dobrym w danej dziedzinie jeśli czegoś nie zaczęliśmy [b]praktycznie[/b] ćwiczyć minimum 10 lat temu.
    Mało jest osób które zaczęły kształcić się w danym kierunku już w gimnazjum, przykłady: pójdziesz do lekarza i na pewno facet nie zgłębia swojego fachu od gimnazjum, pójdziesz do księgowego który też nie zaczął księgować jak miał 10 lat itd. Dużo programistów uważa siebie za jakiś lepszych bo umieją zmusić kompa do zrobienia tego co chcą ale prawda jest taka, że poza całą tą otoczką kryją się [b]często ale nie zawsze[/b] ludzie antyspołecznie nastawieni, nie ogarniający się socjalnie dla których pasja jest na swój sposób pułapką. Oczywiście należy wspomnieć o folklorze programistycznym albo szerzej informatycznym, ludzie z innych dziedzin typu biologia, elektronika nie szczycą się tym czym się zajmują.

    Po za tym pytanie jakiego języka się uczyć rozumiem, że jest zadane przez osobę która jest na tyle inteligentna by się nauczyć programowania i lubić to.

    Procent, coś powiadomienia o nowych komentarzach nie działają :/

  37. @xvirk:
    Znalazłem info że niewysyłanie powiadomień do bug w BlogEngine -> muszę zrobić upgrade i powinno być ok. Postaram się w ten weekend.

  38. @Paweł:
    Faktycznie bardzo fajna inicjatywa. A że "nikt nie stworzy czegoś takiego dla C# i asp.net" – tego bym nie zakładał.

Newsletter: devstyle weekly!
Dołącz do 1000 programistów!
  Zero spamu. Tylko ciekawe treści.
Dzięki za zaufanie!
Do przeczytania w najbliższy piątek!
Niech DEV będzie z Tobą!