Jakie języki powinien znać szanujący się programista? Różne!

Ostatnio zacząłem uczyć się Perla na potrzeby mojej pracy magisterskiej. Część projektowa opiera się na przetwarzaniu tekstu, dlatego dla własnej wygody odpuściłem sobie C# (ok, wymóg promotora i słusznie!). Choć poradziłbym sobie z tym problemem, nikt nie zaprzeczy, że języki pokroju Perla czy Pythona zostały do tego typu zadań stworzone. Gdy promotor zapytał mnie o preferowane języki (w ogóle), bez chwili namysłu wymieniłem C#, C++. Na co odpowiedział, że każdy szanujący się programista powinien znać dobrze przynajmniej jeden język skryptowy. Ponieważ był to nie pierwszy raz kiedy coś podobnego słyszałem – zwłaszcza od ludzi związanych ze środowiskiem linuksowym – postanowiłem bliżej przyjrzeć się zagadnieniu.

Czy można być ignorantem?

Jeżeli w wolnej chwili zajmuje się jakimś projektem dla własnej przyjemności sprawy mają się następująco: „wybieram” C# i rozstrzygam, która technologia nada się najlepiej do nadchodzącego zadania. WPF? Windows Forms? Silverlight? A może coś na telefon w Windows Phone… Nie oznacza to jednak, że jestem „skryptowym ignorantem”. Zwracam tutaj szczególną uwagę na znaczenie słowa ignorant, które wbrew pozorom nie pochodzi od czasownika ignorować (sam do całkiem niedawna tkwiłem w błędnym przekonaniu). Taka mała dygresja.

W swoim programowym warsztacie posiadam podstawową wiedzę na temat Ruby czy Pythona. W obu językach stoję po różnych stronach barykady: programming „in” a language vs programming „into” a language. Ba! Moja wspaniała uczelnia zaserwowała mi kurs programowania w Prologu, a i zdarzyło się zahaczyć o Haskella. Wątpię, abym kiedykolwiek wrócił do tych języków (dwóch ostatnich). Jednak czuję się wewnętrznie lepszy(?) mając świadomość, że znam się na rzeczach (przynajmniej poglądowo) mniej popularnych obecnie, a przede wszystkim wykraczających poza paradygmat imperatywny.

Jednak czy to czyni mnie lepszym programistą? Czy znajomość Prologu ma jakikolwiek wpływ na to jak programuję w C#, a może jak programuje w ogóle? Chyba każdy zgodzi się, że do zadanej pracy powinno dobierać się odpowiednie narzędzia. Jeżeli chcę wbić gwóźdź w ścianę, posłużę się twardą książką tylko w przypadku kiedy nie mam pod ręką młotka, a muszę to zrobić jak najszybciej. Czy użycie C#, C++ czy Javy do przetwarzania tekstu nie byłoby wbijaniem gwoździa książką? Czy można być dobrym programistą nie znając dobrze języka skryptowego? Tu powstaje pytanie:

Co znaczy „być dobrym programistą”?

Zaznaczam, że w tych rozważaniach z premedytacją pomijam kwestie takie jak umiejętność wykorzystywania wzorców projektowych czy zdolności interpersonalne. O tym można napisać całą książkę. Zatem. Czy dobry programista to osoba, która posiada wachlarz narzędzi do rozwiązania niemal każdego problemu, czy wystarczy że potrafi bardzo dobrze rozwiązywać problemy z pewnej dziedziny? Inaczej. Czy aby nazwać się dobrym programistą trzeba znać kilka języków do całkowicie odmiennych zadań, czy wystarczy znać jeden, dwa oraz biblioteki i technologie z nimi związane.

Ciężko jest mi ustosunkować się. Myślę, że większość z Was się ze mną zgodzi w jednej kwestii. Bycie na bieżąco z dużą częścią np. technologii .NET jest zajęciem na tyle pochłaniającym co dobre obeznanie w samym Perlu, Prologu i C# bez technologii, które na tych językach bazują. Czyli… odpowiedź leży gdzieś pośrodku? Ja staram się rozwijać w kręgu jednej technologii tak abym mógł powiedzieć, że się na tym dobrze znam, od czasu do czasu flirtując z czymś co poszerza moje granice wiedzy i świadomości jako programisty. Myślę, że pozwoli mi to spojrzeć rozsądniej na zadania, w których jeszcze nie czuję się najlepiej i nie dopuści do tego, że porwę się z motyką na słońce dobierając nieodpowiednie narzędzie pracy.

Za moich czasów…

Na koniec chciałbym poruszyć pewną kwestię, wywołującą za każdym razem burzliwą dyskusje. Pierwsze pytanie osób, które chciałyby się zająć programowaniem to: jaki wybrać język. Często pada odpowiedź: C++ gdyż są tam wskaźniki. Gdy ktoś podpowie aby zacząć od C# czy Javy zostaje zmieszany z błotem. Ja sam zaczynałem od C++ i uważam, że była to trafna decyzja, ale nie oznacza to, że jedyna słuszna. Najczęstszy argument to: trzeba poznać co się dzieje za kulisami GC, jak w ogóle można zaczynać od tak wysokopoziomowego języka!

Nasuwa mi się pewna myśl. W swoich projektach często wykorzystujemy graficzny interfejs użytkownika. Do tej pory bardzo popularną technologią jest Windows Forms. Dla przypomnienia jest to nakładka na stary poczciwy WinAPI. Ja właśnie od tego zaczynałem. Teraz pytanie. Ile osób doradzi WinAPI do pierwszych programów z GUI? Przecież dzięki tej znajomości wiemy co tak naprawdę dzieje się pod przykrywką kontrolek. Kto wie, że TextBox to jest kontrolka klasy Edit? Kto pisał własną pętle komunikatów? Przecież na jej podstawie działają WSZYSTKIE programy z graficznym interfejsem. A kto podmieniał procedurę obsługi okna i komunikaty (dzisiaj odbierane w postaci zdarzeń) obsługiwał w bloku switch-case. A uchwyty (handles) w Task Manager? Każdy kto programował w WinAPI wie o czym mówię.

Myślę, że cofanie się do czasów kamienia łupanego nie ma większego sensu. Co nie powinno zwalniać z posiadania przynajmniej poglądowej wiedzy w tym temacie. Sam polecam C++ jako punkt startowy. Jeżeli ktoś chciałby zacząć od C# – gorąco polecam. Zwłaszcza jak dołożymy do tego XAML ;), ale to już moje osobiste preferencje. Ciekaw jestem Waszego zdania w tym temacie. Co powinien znać szanujący się programista?

Share

5 myśli nt. „Jakie języki powinien znać szanujący się programista? Różne!

  1. Bardzo fajny wpis 🙂 Też jestem zdania, że lepiej być specjalistą w jednej dziedzinie niż próbować wszystkiego po trochu. Bo niestety zauważa się oferty pracy wymagania typu:
    asp.net, php czy dla administratorów linux + windows server… Może i są wymiatacze którzy czują się dobrze w każdej technologii ale dla mnie taki pracodawca już odpada…

  2. 15 lat temu na studiach kazali ćwiczyć w Turbo Pascalu i pitolili, że każdy programista powinien pykać w Assemblerze.

    To są jeszcze teksty śmierdzące czasami kiedy na wszystkie grupy dziesiejszych specjalistów z miliona dziedzin IT mówiono zawsze tak samo: Informatyk.

  3. Według mnie każdy programista powinien znać się na tej technologii, która mu odpowiada, dzisiaj jest bardzo dużo gałęzi, nawet w samym .Necie i w niektórych tych gałęziach, owszem, znajomość języka skryptowego jest pomocna, wręcz wymagana. Czy ktoś widziałby niejedną grę bez Pythona czy LUA? Aplikację webową bez JavaScriptu, czy Flasha? Jak sam napisałeś, języki skryptowe czasami załatwiają robotę o wiele szybciej i to od programisty zależy co on lubi, byle by tylko zrobił to dobrze.

    A niektórymi słowami profesorów bym się nie przejmował, bo jak usłyszałem, że powinniśmy tylko w Assemblerze pisać to wielu na wykładzie miało banany na twarzy:).

  4. Znajomość Prologu ma _bardzo_ duży wpływ na pisanie w innych językach, jeśli oczywiście znasz Prolog. A dlatego, że całkowicie zmienia sposób patrzenia na logiczną strukturę kodu jako całość i często pozwala dostrzec zupełnie nieoczekiwane powiązania między różnymi fragmentami. I tu nie tylko chodzi o Prolog tylko o programowanie w logice szeroko pojęte, np. więzy (constraints), wieloparadygmatowość itp.Pozdrawiam.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Spam protection by WP Captcha-Free