Zawsze mnie interesowało jak to jest z językami obcymi. Podobno jak się ich odpowiednio dużo pozna to kolejne przychodzą łatwiej. Dużo to nie znaczy 10, wystarczy 3-4, by już 5 wszedł łatwiej niż poprzednie. A jak są do siebie języki podobne to już w ogóle… Ale to jest podobno. Nie wiem jak jest. Znam jeden język obcy płynnie oraz drugi w powijakach. Zawsze chciałem się tego dowiedzieć i może kiedyś uda.

Za to mogę powiedzieć z czystym sumieniem jak to wygląda z poziomu programowania. Pamiętam jak się uczyłem swojego pierwszego języka – Pascal. Jak próbowałem opanować słowa kluczowe oraz co one reprezentują i jaki problem rozwiązują. Co to jest record, co to jest scope, block itp. Tutaj poświęciłem na to dużo czasu. Szło mi to mozolnie.

Potem był C++, tutaj też trzeba było poznać nie tylko składnie  ale także zrozumieć pewne pojęcia wskaźnik, referencja, template itp. Za każdym razem budowałem nie tylko swoją wiedzę na temat składni języka, ale także wiedzę informatyczną, która jest potrzebna do zrozumienia podstawowych paradygmantów programowania.

Kolejnym językiem był Visual Basic, tutaj składnia była dość prosta, łatwo było jej się nauczyć. Doszły pewne nowe koncepcje, nowe technologie. Doszło coś czego nie znałem wcześniej a mianowicie ADO i SQL. Nowe technologie, nowe języki. Przy czym wraz z Visual Basic zacząłem pisać strony w ASP, czyli wskoczył HTML, JScript/VBScript. Kolejne języki, kolejne problemy które były przez nie rozwiązywane. Jak i sposoby ich rozwiązywania. Nowe składnie, biblioteki, miejsca zastosowania.

Potem była Java, kompletna abstrakcja dla mnie. Ciężko mi było się przestawić z Visual Basic. Zarówno składniowo jak i koncepcyjnie miałem na początku z nią problemy. Ale szybko zacząłem nadrabiać braki, zauważyłem dodatkowo że jestem wstanie pewne rzeczy zrozumieć – referencje, zmienne statyczne. Czyli nie muszę się tego uczyć od nowa. Wiem co to i wiem jak to działa.

W Java poznałem także bytecode. Czyli coś o czym wcześniej nie słyszałem. Nowa koncepcja, nowa technologia. Po Java chyba była pora na Assemblera i C – jakoś w tym samym czasie. Tutaj z assemblerem było na początku ciężko. Ale problem polegał nie na składni która była banalna, a na trybie myślenia i spostrzegania problemu. Jak można rozwiązać skomplikowany problem za pomocą dość ograniczonej liczby komend i operacji na stosie. To była ciekawa lekcja. C zaś tylko liznąłem. Ale dużo rzeczy które tam były, były mi znane z innych miejsc już.

Wtedy chyba wszedł C# i Visual Basic .NET. Tak jak do C# nie mogłem się przekonać bo Java, tak VB.NET było (aż głupio to zabrzmi) OK. Znów pewne nowe pojęcia, konstrukcje i ten bytecode – zwany il. Ale z czasem do tego C# się przyzwyczaiłem i go polubiłem, nawet bardzo.

Po C# tych języków było jeszcze trochę, w tym i języki funkcyjne, które do tej pory żałuje, że poznałem tak późno. Były też jęzki lokalne – napisane i wymyślone przez moich wykładowców. Ogólnie tego było DUŻO.

I teraz tak patrzę z perspektywy czasu, i im więcej języków poznawałem, im więcej przykładałem uwagi do tego jak one działają, tym łatwiej i szybciej jest mi nauczyć się nowego języka. Gdyż jedyną rzeczą jaką przeważnie muszę opanować to składnia – czasami czytelna, czasami mniej. Jednak zasada zawsze jest taka sama.

Co nie oznacza, że nowy język nie może zaskoczyć. Oczywiście, że może. Czasami jakiś język ma cel – ułatwienie tworzenia określonego typu aplikacji. Teraz koncept tych aplikacji może być zrozumiały lub nie. Jak nie jest, to uczymy się go. Jak jest to dużo łatwiej i szybciej ten język opanujemy niż osoba zaczynająca się uczyć od niego.

To co daje nam wiele języków programowania to, to, że jesteśmy wstanie dopasować narzędzie do problemu a nie uderzać młotkiem w każdy napotkany problem niezależnie czy jest on porcelaną czy gwoździem. Jest to rzecz często pomijana i często ludzie wolą koncentrować się nad jednym językiem olewając inne. Nie jest to złe, ale jest to ograniczające – przynajmniej ograniczające pod względem wiedzy na temat tego jak dany problem można by było optymalniej oprogramować w czymś innym.

A więc podsumowując, nie wiem jak to jest z językami obcymi, ale wiem jak to jest z programowaniem. I tak, warto uczyć się nowych języków i poszerzać swoje horyzonty. Ja to teraz robię z Elixir, niebawem z Go. Więc jeżeli macie możliwość, to uczcie się nowych języków. Nawet jeżeli potem macie ich nigdy nie wykorzystać. Zawsze się czegoś nowego i ciekawego nauczycie.

PS.: jakie języki już znacie i jaki jest wasz ulubiony język?

 

16 KOMENTARZE

  1. Hej,

    Po pierwsze podbijam Pythona ;).

    A po drugie potwierdzam, że warto znać wiele języków programowania, występujących w nich konceptów i przykładów zastosowania, bo to bardzo poszerza horyzonty i pomaga w aplikowaniu w codziennej pracy zasady Use the Right Tool for the Job :). Osoby skupione tylko na jednym języku wiele tracą, a najgorzej gdy jest to osoba decyzyjna w firmie i transferuje takie podejście w dół, co kończy się mozolnym pisaniem oprogramowania w języku stworzonym do zupełnie innych celów (wiem, stabilność w biznesie jest ważna i nie mam na myśli hurra-optymizmu i używania różnych języków co projekt – tak sobie narzekam na przypadki, gdy wąskie horyzonty kierownictwa działają na niekorzyść firmy, np. Podstaw Pythona łatwo się nauczyć i warto go używać do budowania prototypów, ale nie, bo szefo go nie zna i nie spróbuje poznać, więc prototypuj panie w dotnecie i nie szerz mi tu herezji!

    Dobra, już mi lepiej, wywaliłem z siebie żale z przeszłości :D.

    Pozdro!

    • +1 :) ooo jak najbardziej, nie ma nic gorszego niż szef który na nic się nie godzi. No jest, pracowałem z jednym takim co powiedział, że HTML i ASP.NET to jakiaś porażka i napisał własne języki i generatory bazujące na XML i C# do zastąpienia całego stacku, który na końcu wypluwał HTLM i JS :)

      kod – czyste arcydzieło. no ale… :)

      • Hahaha :D. Sądząc po stacku zakładam, że ta firma to był jakiś software house, a nie startup zarabiający na produkowaniu własnych języków/frameworków ;)… Czyli wyszła sztuka dla sztuki w wykonaniu nadgorliwego szefa… Trochę marnowanie czasu jak dla mnie, bo zawsze wychodzę z założenia, że lepiej uskładać coś z gotowych klocków, niż stawiać fabrykę cegieł w celu wymurowania kilku domów…

        No ale jak ktoś ma czas, to niech się męczy – ja jestem z tych leniwych ;].

  2. Zaraz Go? A co fajnego zaprogramowałeś w Elixir? Wiesz taka nauka, żeby się wiecznie uczyć to chyba nie powinien być cel sam w sobie.

    • tak, nic nie stoi na przeszkodzie uczyć się czegoś nowego i doszkalać w czymś co już jest opanowane. Teraz w Elixir pozostała mi praktyka plus biblioteki. Ale najważniejsze niż mam i to chciałem by Elixir mi dał już mi to dał. A mianowicie rozumiem dużo lepiej architekturę rozwiązań w oparciu o Actor Model. Wiem na czym to wszystkim polega i gdzie to można wykorzystać.

      Więc odpowiadając, nigdy nie uczę się po to by się uczyć. Choć nie wszystko czego się nauczę wykorzystuje w życiu codziennym, ale wszystko pomaga mi podejmować bardziej świadome decyzje. Najgorsze jest nie uczenie się nie dokształcanie.

      Co do fajnego zaprogramowałem w Elixir? dla każdego “coś fajnego” jest coś innego, więc pozostawię to tak jak jest :) według mnie napisałem wiele zajefajnego kodu w Elixir i jeszcze wiele napiszę. Jeżeli chodzi o kod publiczny – to zero, nada i pewnie na razie tak pozostanie. Ale jak też wspomniałem, nie zaprzestaje Elixir bo idę się uczyć czegoś nowego. Tak jak nie zaprzestaje pisać w T-SQL mimo, że mógłbym bo mam do tego LINQ.

    • Why not? Po co marnować czas na produkowanie nikomu (jeszcze!) niepotrzebnego oprogramowania (w sensie gotowego produktu) w nowo poznanej technologii, skoro już wiesz o co w niej chodzi, gdzie owa technologia znajdzie zastosowanie, kiedy warto ją rozważać (a kiedy nie), wygooglowałeś konkurencyjne rozwiązania, itd. itp. ? Wiesz już dobrze jakie klocki udostępnia Ci ta technologia i przetestowałeś je w boju, bo w procesie nauki naprodukowałeś kilka mikroprogramów, które miały Ci tylko służyć do przetestowania poszczególnych ficzerów (praktyka zawsze lepsza od samej teorii!).

      Więc podsumowując: masz już teorię, trochę praktyki, w szufladzie kurzą się mikroprogramy do których zawsze możesz wrócić (odpalić testy i już wiesz co tam się działo i czemu tak, a nie inaczej), więc na ch drążyć ;)? Jak się pojawi szansa na udział w jakimś ciekawym projekcie opartym o tę technologię (nieważne czy nowy czy obecny pracodawca/klient), to w dwa dni jesteś w stanie sobie odświeżyć wiedzę i przygotować pokazowy projekt, którym się pochwalisz przy rekrutacji.

      Zaoszczędzony w ten sposób czas przeznacz na naukę nowych technologii, bo jest tego od groma, więc im więcej ich poznasz (nie wymasterujesz!), tym twój arsenał większy, horyzonty szersze, zwoje bardziej poskręcane, a szanse na poprawę warunków bytowo-projektowych rosną w tempie geometrycznym.

  3. Mam duże wątpliwości jak biegle jesteś w stanie posługiwać się tymi wszystkimi językami. Aktualnie mam > 3 lat doświadczenia, głównie w .NET. Na studiach również różnych innych rzeczy dotykałem, przykładowo Javy (cały semestr), ale programistą Javy w życiu bym się nie nazwał. Mimo, że kojarzę o co chodzi w tym języku i trochę kodu napisałem. Nie wiem, może to kwestia “pewności siebie”, ale z drugiej strony trzeba brać odpowiedzialność za to co się mówi, więc nie czuję się na siłach, aby aplikować na stanowisko Java developera.
    Praktycznie od początku pracuję jako web developer (powiedzmy full stack), więc przykładowo CSSy obce mi nie są, jednak w większości skupiam się na stronie backendowej. Kontynuując, jak trzeba coś ostylować to zrobię to, ale jakiś zaawansowanych animacji i innych nowości z CSS używać biegle nie umiem, a przeglądając różne tips & tricks, co goście potrafią w CSSach wytworzyć to jestem pełen podziwu – temu też frontendowcem bym się również do końca nie nazwał.

    Patrząc od strony “biznesu” to nie wyobrażam sobie sytuacji, gdzie w pracy w moim teamie przy każdym nowym projekcie siadamy i rozważamy w jakim języku będziemy go realizować. Ten zrobimy w ASP.NET, ten w Java, a ten o w C++ napiszemy – ja fizycznie nie byłbym w stanie opanować tych wszystkich języków na tyle, aby w każdym pisać dobry kod, nadążyć za nowościami, frameworkami, każdym językiem posługiwać się równie biegle.

    Ciężko jest mi przekazać mój “punkt widzenia” w paru zdaniach, coś mi tutaj po prostu nie gra.

    • Dwie kwestie bardzo ważne:

      • Nigdzie nie stwierdziłem, że potrafię komercyjnie w każdym języku programować
      • Nigdzie nie napisałem, że celem jest pisanie komercyjne

      Nauka języków uczy Cię paradygmatów. A to, daje Ci wiedzę na temat tego jak rozwiązać dany problem. I nie musisz być kunfu-masta by ten problem za pomocą języka X rozwiązać. Nauczysz się go po drodze jeszcze lepiej.

      Z drugiej strony, komercyjnie pisałem w Java, JSP, Java Beans, C++, C#, JavaScript, T-SQL, XSLT + XML (tak cały projekt w oparciu o te dwa formaty plików), VBA, VB, VB.NET, ASP, ASP.NET, HTML, JavaScript i F# (i chyba jeszcze ich było trochęm ciężko wszystko z pamiętać). Za to mi płacili. I swojego czasu w każdym z tych języków byłem płynny. W części dalej jestem. Ale to zajęło 20 lat mojego życia. I nie, nie żałuje, że poznałem i zapomniałem i nie pozostałem w danym języku. Wiem co każdy z nich daje i do czego może mi się przydać i kiedy może mi się przydać. A to jest dla mnie dużo ważniejsze niż móc w tej sekundzie wskoczyć w projekt komercyjny w Java. Ale nawet i jeżeli.

      Wszędzie znajdziesz ludzi, którzy potrafią zrobić z językiem coś co Ci się nie śniło – czy to będzie wykorzystanie specyfikacji języka, platformy, czy też jego API. I dobrze, bo jakbyś ty miał być tym jedynym masta of the mastas to byłoby smutno. Co chwilę coś powstanie co potrafi zadziwić. Czy to będzie JavaScript, czy C++, czy CSS, czy jakikolwiek inny język. Nie ważne ile lat w nim siedzisz i jak dobrze się nim posługujesz. I tak znajdzie się ktoś kto Cię zaskoczy, wpadnie na coś na co to nie wpadłeś.

      Ale to nie może być powód dla którego ty się nie uważasz za programistę danego języka.

      Oczywiście, nie można korzystać do każdego projektu z nowych technologii (to znaczy, można i jak masz taką możliwość, zazdrość, za 10 lat byłbyś jednym z najbardziej poszukiwanych specjalistów) ze względu na support team. Ktoś to musi w końcu utrzymać. Jednak prawa jest taka, że tak, u nas wykorzystujemy wiele języków, bibliotek do rozwiazywania określonych problemów.

      Tak na marginesie: możesz brać odpowiedzialność po tym jak się podjąłeś zrobienia czegoś w danej technologii i języku. Ale nie przed nawet zaaplikowaniem jako programista w dany języku. Najwyżej się okaże, że go nie znasz na tyle dobrze na ile Ci się wydaje. Ja myślałem, że byłem słaby w Java, zaaplikowałem do pracy, okazało się, że byłem jednym z lepszych kandydatów.

      W razie wątpliwość pytaj, pisz śmiało, albo nawet z chęcią się na chata umówię lub na kawę wyskoczę. Może nie przekonam, ale to nie o to chodzi, będziesz mógł zadawać pytania i dostaniesz szczerą odpowiedź. To może Ci pomoże? Nie wiem. Ja jestem otwarty do rozmowy.

      • Spoko, myślę, że tutaj główną rolę odgrywa różnica moich 3 lat doświadczenia, a Twoich 20. Kto wie, może za paręnaście lat też tak na to spojrzę. Może napisałbyś w takim razie posta, zbierając to wszystko razem, na temat – w co warto inwestować swój czas. Koniecznie z perspektywy różnych szczebli kariery, od początkujących osób zaczynając. Co warto robić i w jakiej kolejności, aby ostatecznie przyniosło to najlepsze rezultaty. Jakbyś mógł zaplanować swoją 20 letnią karierę jeszcze raz to jakbyś to zrobił. Chętnie bym coś takiego przeczytał.

      • Dzięki, bardzo fajny pomysł z opisem. choć nie czuje się na siłach by coś takiego pisać. Gdyż mam kłopot z tym co działa. raczej mogę powiedzieć co ja bym zrobił lub co ja bym wybrał, ale nie można by tego traktować jako wyznacznik w żadnym stopniu.

        Pomyślę i postaram się coś zaplanować.

  4. Cholera – 20 lat doświadczenia to dużo. Komercyjnie mam 10 :) W tym czasie poznałem kilka jezyków i generalnie ostatnio przestałem się nazywać programista XXXX. Jeśli trzeba to stworze program w dowolnym języku, w skończonym czasie. Przy czym oczywiście długość tego czasu zależy od mojej znajomości technologii i tego czy mi podchodzi. Obecnie flirtuję z NodeJs i Pythonem w pracy, wcześniej był Ruby i C#. Wszystko komercyjnie (płaca mi za to). A w domu Elixir i F#. Generalnie wywodzę się jak i Ty z Pascala, ale potem poszedłem w Delphi.

    • Nie nie… w8 to warto wytłumaczyć, 20 lat programowania, zawodowego to w tym roku wybija 17, choć jakbyśmy patrzyli na umowy to w tym roku wybija 16 lat. 2001 – pierwsza praca z umową w TiMSI, zacząłem przed rozpoczęciem studiów. Czy to dobrze, czy źle – nie wiem.

      A no Delphi, miałem mała przygodę, ale jak już znałem VB i tworzenie windows apech w VB to Delphi taki dziwny się wydawał :) więc go olałem :)

      I tak, chyba najważniejsza jest technologia a nie język. Ale język przeważnie rozwiązuje jakiś paradygmat, który wiąże się z technologią/wzorcem.

Comments are closed.