publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
13 skomentuj »

TAGI: język programowania , programowanie , deweloper , rozwój

2011-10-10 18:01:00, dodał Tomasz Smykowski

Czy deweloperzy powinni się uczyć nowych języków programowania?Czy deweloperzy powinni się uczyć nowych języków programowania?

Dawno temu natknąłem się na pewien tekst jednego z bardziej znanych programistów, który radził, jak zachować dobrą kondycję zawodową w programowaniu. Pamiętam, że jego główną radą było to, aby uczyć się co roku jednego nowego języka programowania.

Pomysł wydał mi się na tyle kontrowersyjny, iż go zapamiętałem. Znałem już wtedy programistów, którzy od kilku, a nawet kilkunastu lat programowali tylko w jednym języku i nie wydawało się, żeby ta monogamia językowa im szkodziła.

 

Czy to w ogóle realne?

W dodatku, w jaki sposób uczyć się co roku języka, gdy nawet w jednym mamy masę innych rzeczy do nauki? Są frameworki programistyczne, biblioteki, komponenty i CMS-y. Wszystko to sprawia, że nauka jednego języka z jego otoczeniem może trwać nawet kilka lat, przez co nauka jednego języku co roku wydaje się nierealna.

Ale jednak gdy programujemy ciągle w jednym języku, uzależniamy się od niego i ograniczamy do pewnego zasobu słownictwa. Gdy programujemy w C, trudno nam po pewnym czasie zrozumieć obiektowość. Przynajmniej wydaje się, że z czasem robi się to trudniejsze. A może nawet nie trudniejsze, ale z mniejszą chęcią uczymy się czegoś, skoro stary język sprawdza się znakomicie. Z czasem więc coraz trudniej jest otworzyć się na nowe idee, języki, techniki lub filozofie programowania.

Nauka nowego stylu programowania pozwala spojrzeć na stare problemy z nowego punktu widzenia. Dostrzec bardziej eleganckie rozwiązania. Odkryć w końcu, że nowy język sprawia, że cała klasa problemów przestała istnieć przez samą zmianę koncepcji języka.

Ucząc się nowych języków mamy więc szansę znaleźć taki, w którym łatwiej napiszemy nowe rozwiązania. Jednak czasem mam okazję spotkać się ze zdaniem, że programista powinien specjalizować się w jednym języku, że nie ma sensu uczyć się innych dopóki jeden wystarczy.

 

Jeden nigdy mi nie wystarczał

Dla mnie takie podejście jest zupełnie nietypowe. Od najwcześniejszych lat nauki los sprawił, że nie było mi dane nigdy uczyć się dłużej jednego języka. Nie chodzi zresztą o samo programowanie ale i języki mówione. W podstawówce uczyłem się przez kilka lat języka angielskiego. W ostatnich 2-3 klasach podstawówki jednak dyrekcja zmieniła zdanie i zaczęto uczyć mnie i rówieśników języka niemieckiego. Z kolei w szkole średniej uczyłem się dalej języka angielskiego, ale zamiast niemieckiego wybrałem francuski. Na studiach z kolei uczyłem się angielskiego.

Oczywiście, ktoś może powiedzieć, że na co mi te lata nauki, skoro nie znam wszystkich języków tak dobrze, jak mógłbym jeden, i będzie miał rację.

Nie znam biegle francuskiego i niemieckiego. Dobrze znam jedynie język angielski. Nawet nie mam możliwości korzystać z dwóch wspomniach języków. Ale jednak nie zmieniłbym nic w tej historii. Jeśli bowiem będzie taka potrzeba, łatwiej będzie mi sklecić jakieś proste zdanie, niż gdybym styczności z tymi językami nie miał.

Tak właśnie jest też z programowaniem. Jeśli pracujesz w korporacji na stanowisku "programista C#", nie odczujesz tego tak bardzo. Ale i tam zdarzą się sytuacje, gdy będzie trzeba użyć innego języka, np. T-SQL do napisania prostego zapytania albo jakiegoś języka skryptowego komercyjnego systemu klasy ERP.

Jeśli pracujesz w mniejszym zespole, ale jako freelancer, częściej będziesz musiał sięgnąć do innego języka. Pomijając PHP, C#, C++, mamy jeszcze przecież Ruby, Perl, Pythona czy ActionScript, nie wspominając o Bashu i wielu spacjalistycznych dialektach.

Nieumiejętność pisania kodu w obcym języku jest dużą wadą programisty. Niestety, nie zapowiada się, aby jeden język zdominował świat. Wciąż programuje się w C, C++, popularność ma C#, Java, kolejne języki czekają na swoją kolej. W Sieci popularność zdobywa JavaScript, a Google już pracuje nad jego następcą Dartem.

Coraz częściej też projekty, które powstają są mieszaniną różnych środowisk, które muszą ze sobą współpracować. Na serwerze może być usługa napisana w Javie, klient dekstopowy będzie pisany w C#, webowy w PHP, a mobilny w HTML5 i JavaScript.

Oczywiście może być tak, że w firmie będzie programista znający się na każdym języku z osobna. Jednak nawet jeśli chodzi o przedyskutowanie sposobu współpracy koponentów, które są ze sobą coraz bardziej związane, będzie potrzebne wzajemne zrozumienie między programistami w różnych językach.

Są też sytuacje, gdy całe rozwiązanie trzeba zbudować z kodu w różnych językach. W takim przypadku połączenie sił wielu programsitów będzie znacznie trudniejsze, niż gdyby jeden znający je wszystkie stworzył projekt.


Pytanie tylko czy to możliwe?

Nauka całego spektrum każdego języka jest raczej niemożliwa. Jednak w ciągu dosyć niedługiego czasu można zrozumieć filozofię programowania w nowym języku i jego główne aspekty. Ucząc się w ten sposób, nie zyskasz pewności, że Twój kod będzie lepszy niż kogoś, kto siedzi w tym języku 10 lat. Ale gdy nadejdzie moment, gdy będziesz potrzebował jakiś prosty komponent używany w połączeniu z resztą systemu, będziesz w stanie go zaprogramować bez angazowania kogoś innego z zespołu albo zatrudnienia nowej osoby.

Łatwiej zrozumiesz, z jakimi problemami zmagają się Twoi współpracownicy. Będziesz mógł też łatwiej dobierać język do konkretnego zagadnienia, znając je i wiedząc, w którym szybciej i sprawniej napiszesz potrzebny projekt. Gdy coś wykroczy poza Twoje umiejętności, będziesz przynajmniej wiedział, który język jest wart dalszego zaangażowania, bo przecież na naukę wszystkich nigdy nie będzie czasu.

Ostatecznie i tak najwięcej można nauczyć się, pisząc faktyczne projekty. Takich doświadczeń nie zastąpią godziny na lekturze książek i eksperymenty na sucho. Także nie ma co za bardzo się przejmować, że nie jesteś ekspertem w każdym języku. Wystarczy, żebyś był w jednym i poznawał nowe - po to, aby móc je wykorzystać, gdy zajdzie potrzeba.

Skoro języków jest tak dużo, to jakiego teraz warto się uczyć, aby rozwinąć swoje myślenie koncepcyjne o projektach?


Jakich języków więc się uczyć?

Oto moja lista, ale zachęcam do dodawania innych w komentarzu:

  • C / C++ do aplikacji desktopowych i komunikujących się z urządzeniami,

  • C# do aplikacji użytkowych i biurowych,

  • Java do aplikacji webowych,

  • PHP, ASP.NET do stron internetowych,

  • JavaScript do aplikacji mobilnych.

Jeśli już znasz któreś z tych języków spróbuj poznać też:

  • Ruby On Rails,

  • Python,

  • pisanie wyrażeń regularnych,

  • Visual Basic.NET,

  • Objective.C,

  • Perl,

  • Lisp,

  • Lua,

  • Assembly,

  • Scala.

Możliwe, że nie będziesz pisał żadnych projektów w przyszłości w tych językach. Ale jeśli spróbujesz je poznać, z pewnością skorzystasz na tym przez nowe sposoby, w jaki będziesz mógł patrzeć na stare problemy.

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
13 skomentuj »

Komentarze

  • Wszerad

    #1 Wszerad 2011-10-10 18:56:14 0

    Programiści webowi chyba nie mają zamiaru uczyć się większej ilości języków, wystarczy im, że muszą napisać kilka wersji tego samego pod konkretne przeglądarki...

    IP: 213.17.128.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0a1) Gecko/20111009 Firefox/10.0a1

  • xplicit

    #2 xplicit 2011-10-10 19:35:14 1

    język programowania to tylko sposób wyrazu, oczywiście każdy ma swoją specyfikę (gdzie bardzo wyraźnym przykładem jest Ada, pół królestwa temu kto się w niej porządnie ogarnia ;)), ale generalnie chodzi tu o umiejętność abstrakcyjnego myślenia i rozwiązywania problemów.

    wyspecjalizowanie się w jednym języku jest dla mnie zaletą, poznajemy coraz bardziej zaawansowane jego możliwości, mechanizmy czy zaczynamy korzystać z frameworków aby potem dogłębnie zrozumieć zasadę ich działania. Pisanie raz w C, raz w Javie, a w międzyczasie w PHPie to głupi pomysł. Przykład: mieliśmy niedawno w firmie programistę, którego wiedza między-językowa była całkiem imponująca, co z tego skoro jego kod był poniżej poziomu krytyki, popełniał podstawowe błędy a w rezultacie wszystko co napisał było conajmniej niezrozumiałe, a najczęściej wogóle nie działało .... jako pracodawca unikałbym znajdywania kogoś do wszystkiego, wyspecjalizowani i dobrze zarządzani pracownicy są dużo więcej warci.

    jeszcze słówko o przejściu z C do czegoś obiektowego ... oj kolego, znajomość chociaż podstaw OOP i jego sensowności jest teraz równie ważne co umiejętność zdefiniowania funkcji 10 lat temu ;) już nie wspomnę o wzorcach projektowych. Może i C samo w sobie obiektowe nie jest, ale powinno się mieć chociaż podstawową potrzebę zainteresowania się tak ważnym tematem.

    IP: 77.252.157.[...] Mozilla/5.0 (X11; Linux i686; rv:6.0.2) Gecko/20100101 Firefox/6.0.2

  • Pascal

    #3 Pascal® 2011-10-10 19:39:54 1

    @Wszerad, nie zgodzę się. Poprawki dotyczą tylko CSS-a, czasem JavaScriptu, ale tutaj wiele problemów rozwiązują biblioteki takie jak jQuery.

    Właśnie programiści serwisów internetowych są najbardziej "narażeni" na konieczność nauki innych języków i poznawania nowych technologii. Nie mówię tutaj o prostych stronach, ale np. dużych sklepach internetowych czy rozwiązaniach B2B. Często wykonujemy integracje WWW z innymi systemami (np. magazynowymi, finansowymi), z których każdy przemawia do nas w innym języku ;)

    @xplicit, widocznie był słabym programistą. Dobry poradzi sobie nawet pisząc w zupełnie nowym języku. Uważam, że najważniejsze są umiejętności, a nie znajomość języka.

    IP: 85.198.239.[...] Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.187 Safari/535.1

  • tomaszs

    #4 tomaszs® 2011-10-10 19:43:24 0

    @xplicit

    A właśnie dobrze że wspomniałeś o wzorcach obiektowych!

    IP: 89.69.28.[...] Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

  • xplicit

    #5 xplicit 2011-10-10 19:50:29 0

    @Pascal jakby był dobrym programistą, to by dalej u nas pracował ;) a jego niby-znajomość wielu języków programowania wynikała z faktu, że zmieniał ciągle pracodawców i każdy wykorzystywał go do czego tylko mógł się przydać

    co do połączeń z różnymi systemami, to bądźmy nowocześni i wykorzystujmy webservice'y ;)

    IP: 77.252.157.[...] Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

  • lazarow

    #6 lazarow 2011-10-10 19:52:27 0

    To jest tak jak z prowadzeniem samochodu. Niby wszystkie modele prowadzimy tak samo ale nie znając ich pełnych możliwości, komfort jazdy się bardzo znacznie pogarsza. Oczywiście każdy obowiązkowo musi przejść szkołę jazdy i nauczyć się podstaw. Tak jak napisał @xplicit wąsko wyspecjalizowani programiści są gwarancją dla pracodawców, że ich praca się zwróci.

    IP: 87.206.63.[...] Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1

  • slawek22

    #7 slawek22 2011-10-10 20:25:14 0

    @Pascal:

    Webserwisy? Wy z tego na serio korzystacie? Ja nie rozumiem po co marnować cały dzień, żeby się pier*olić z WSDL, XML-em, serwowaniem tego g*na, definiowaniem parametrów, zwracanych wartości, dodawaniem bibliotek WS do projektu, etc. skoro to i tak nie wnosi żadnej wartości dodanej. Od WS i XML-a się obecnie odchodzi, bo oprócz poważnych wad jedynie z tym problemy i nie ma to żadnej przewagi nad REST i JSON.

    "Złote rączki". Mamy takiego gościa w zespole. Umie wszystko, 5 frameworków, SQL to najlepiej na jakimś ORM-ie. Trzeba było ręcznie wysłać kwerendę do bazy. Pominął filtrowanie danych, trzeba napisać prosty handler sesji. Spieprzył timeouty. Ogólnie czego się nie chwyci - zawsze trzeba poprawiać, bo najprostszą rzecz potrafi spierdo_ć.

    Ostatnio uznał, że wewnątrzfirmowe klasy do SQL-a nie działają. Używamy tego od 2 lat. Stwierdził, że jeśli pośle niezdefiniowaną zmienną do kwerendy to ta powinna się wykonać.

    Umie wszystko - posiadł umiejętność używania kopiuj - wklej i konfigurowania kodu kogoś innego. Takiego zakresu używanych technologii to chyba nie ma cała reszta zespołu razem wzięta.

    Umiesz wszystko - "agencje reklamy" w Koziej Wólce + minimalna pensja czeka :) Coś mu tam nawet próbuję tłumaczyć bo trochę gościa szkoda - każdy pracy z nim unika jak może bo jedynie trzeba go niańczyć, ale gdybym ja sprawdzał tą aplikację to nawet bym takiego kogoś nie przyjął.

    A co do radzenia sobie... jasne, że gość sobie "radzi". Tylko ten kod się nadaje co najwyżej do uruchamiania na localhost przez zaufane osoby.

    IP: 83.4.28.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1

  • fridek

    #8 fridek 2011-10-10 20:43:15 0

    Moim zdaniem powinno się obejrzeć wykłady SICP i przeczytać 7 languages in 7 weeks żeby mieć świadomość że istnieje coś poza naszym małym światkiem, ale nie zrobi to z nikogo świetnego programisty. Może ewentualnie przekonać do tego, żeby zacząć pisać w Clojure czy Io ;)

    IP: 89.174.127.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1

  • adi_82

    #9 adi_82® 2011-10-10 20:55:19 0

    Według mnie najbardziej pożądane jest fachowa (ekspercka) znajomość 1 popularnego języka z najpopularniejszymi bibliotekami jak C# lub java. Aktualnie na rynku teraz najpopularniejsze.

    Tyle ze przy webdeveloperce trzeba znac do tego koniecznie podstawy JS (przynajmniej dobrze sie orientowac), dosc dobrze html, css, sql, wazne biblioteki w przypadku Javy (apacha czy googla itd) i C# (NET) i frameworki.

    Ale imo to nie wystarczy, znajomosc jednego jezyka i zajmowanie sie tylko jednym sprawia ze z wiekiem gnuśniejemy ;).

    Bardzo ciężko później sie jest przestawić. A jeszcze z dosc duzym wiekiem to juz prawie nie mozliwe.

    Wiec nie tyle co poznawanie co roku jednego, bo troche imo bezsensu, ale od czasu do czasu mozna próbować cos sobie tworzyc w innym.

    I tak programisci C# lub Javy, moga cos tam sobie klikac w C++ (w takim wypadku mozna darowac sobie c), Ruby, lub spr czego innego jak Smalltalk. JEst bardzo wazne aby byc elastycznym na srednim poziomie. Bo mozemy wyladowac na bruku (odpukac), a w czasach kryzysu to bardzo realne.

    Imo bardzo wazna jest jeszcze jedna rzecz, nie wspomniano o tym. Mianowicie najwazniejszy jezyk naszej cywilizacji technicznej ;) Naprawde zamiast poznawania kolejnego jezyka warto od czasu do czasu zajrzeć i powtarzac matematyke to najbardziej rozjasnia i otwiera umysl. ;)

    Sporo tego zeby nie zgnusniec, ale niestety taka jest rzeczywistosc. Juz nie raz widzialem (i nasluchalem sie od kolegi ktory jest trenerem biznesowym) dobrych specjalistow w jednej dziedzinie, gdzie poza swoja firma i domem od lat swiata innego nie widza, a z dnia na dzien nagle obudzili sie w calkiem innej rzeczywistosci (najczesciej sa to ludzie z budzetowki). Naprawde nieciekawa sytuacja jak sie jest juz w podeszlym wieku a trzeba jeszcze przynajmniej 10 do emerytury dociagnac...

    IP: 77.253.223.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1

  • sudlik

    #10 sudlik® 2011-10-11 09:25:08 0

    Hehe, regex na równi stawiany z językami.

    IP: 178.37.60.[...] Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

  • michancio

    #11 michancio 2011-10-13 11:56:58 1

    A ja dodaję całkiem sympatyczny ActionScript do listy worth to learn :)

    IP: 195.69.82.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1

  • windziarz

    #12 windziarz 2011-10-15 17:04:45 0

    @tomaszs

    wzorce są projektowe a nie obiektowe ;-)

    IP: 89.72.178.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

  • tomaszs

    #13 tomaszs® 2011-10-15 18:43:44 0

    @windziarz

    Tak to jest jak się pisze o jednym a myśli o innym ;)

    IP: 89.69.28.[...] Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł