Jak poszerzać horyzonty?

50

Nieustannie rośnie popularność kultury “polyglot programmer”. Czyli: jestem “programistą”, a nie “programistą .NET“, “programistą Java” albo “programistą Ruby” albo… Ale czy idą za tym czyny?

JavaScript i inne takie, popularne

Wielojęzyczność programistów wymuszona jest warunkami, w jakich przyszło pracować. Prawda? Kiedyś web-developer to klepał formatki w designerze, obsługiwał “onlick” i wrzucał w internety. Dobrze było, prosto było. Prawda? Jedyne, co trzeba było umieć, to jakiś język server-side, sql (4 słowa kluczowe na krzyż), html (nawet językiem ciężko to nazwać) i może trochę styli. Prawda?

Aż tu nagle 10 lat temu nadeszła rewolucja AJAXowa i javascript przestał służyć tylko do ruszania divów po ekranie. Od tamtej pory ogromna rzesza programistów musiała NAPRAWDĘ stać się programistami-poliglotami. Czyli: porządnie nauczyć się więcej niż jednego języka. Teraz był to “mój język” + javascript. Tak? Ano nie do końca. Powinni, ale… tego nie zrobili.

Nadal mało kto porządnie zna JavaScript mimo tego, że ogromna większość programistów w ten czy inny sposób go dotyka. A świat się nie zawalił.

Czy trzeba?

Czy zatem TRZEBA starać się rozwijać swoje umiejętności w innych technologiach, skoro “dobrze jest jak jest”? Po pierwsze: tak. A po drugie: wcale nie jest dobrze! :)

Nawet pobieżne liźnięcie czegoś NOWEGO może narodzić ciekawą perspektywę. Nie musisz być ultra-pro-wyjadaczem, aby wiedzieć, co w trawie piszczy. Poznać inny paradygmat, inną filozofię. Na chwilę przestać walczyć o “swój najlepszy język” i starać się zrozumieć argumenty z drugiej strony.

Właściwie o to powinno nam wszystkim chodzić: o parcie do przodu. O “niestanie” w miejscu. Nie za wszelką cenę i nie wielkim kosztem, ale zdroworozsądkowo.

Ciekawie pisał o tym Kamil Lelonek w swoim tekście “Be a polyglot programmer“. Zerknijcie.

Jak?

Można klepać pet-projects. Sam do tego namawiałem w tekście “O pet projects“. To najskuteczniejszy sposób. Najbardziej wydajny. Ale też: dość wymagający.

“Przecież ja nie mam czasu”. “Mi się jednak nie chce”. OK, kupuję to. Kiedyś bym się kłócił, że tak nie można, ale z wiekiem zaczynam coraz więcej akceptować.

A gdyby można było… inaczej? Powiem nawet: łatwiej? Tak, jest taka droga.

Można pojechać na konferencję, ale inną niż zwykle! Na konferencję taką, gdzie każdy tytuł to dla nas nowość. Konferencję poświęconą innej niż “nasza” technologii. Nie tylko nauczysz się bardzo, ale to bardzo dużo z poszczególnych prezentacji, ale też skorzystać z pozostałych okoliczności. Każda rozmowa na korytarzu będzie nowym doświadczeniem. Dyskusja przy browarze otworzy Ci oczy na dylematy, z jakimi borykają się programiści z innego ogródka. A to może być naprawdę fascynujące doświadczenie.

Równo rok temu wziąłem udział w fajnej inicjatywie: Ruby On Lakes. Zacne kilkudziesięcioosobowe dev-grono na łódkach rozprawia o programowaniu. Zwiedzając Mazury drogą wodną. Wynajmując sale w portach i wystawiając tam techniczne prezentacje. Jaki świetny pomysł, co nie? A jakże!

To tam dotarło do mnie, że codzienna praca programisty Ruby wygląda naprawdę inaczej niż praca .NETowca. Wyzwania są różne nawet, jeżeli pisze się system o podobnej złożoności! Programistyczne koncepcje doskonale znane w jednym środowisku są w drugim nowością. I odwrotnie. Jedna technologia ma świetne narzędzia rozwiązujące problemy będące bolączką w drugiej technologii. I… odwrotnie. Mentalność też jest inna, inaczej postrzegamy swoje obowiązki. Ba, pracujemy na innym sprzęcie i w inny sposób! Programista programiście nierówny, szczególnie jeśli patrzymy na zupełnie różne kultury i podejścia do programowania.

Zrób sobie przysługę i pojedź kiedyś na konferencję, która Ciebie bezpośrednio nie dotyczy. Zobaczysz jakie to dziwne uczucie. Fajne uczucie.

Za kilka dni wyruszam na drugą edycję RoL. Już się doczekać nie mogę. Szczególnie, że oprócz dev-podniecenia, event ten zaoferował mi ostatnio spełnienie mojego długoletniego, choć głupiego marzenia: posłuchać w doborowym towarzystwie pierwszego albumu Kalibra, czyniąc przy tym wiadomą czynność. <wink-wink> W tym roku Zakon również nie zawiedzie, jak suponuję.

Konkurs! Bilet do zgarnięcia!!!!111oneoneoneon

Zapisy na RoL są już zamknięte, ale nic straconego! Poza konferencjami jedno-technologicznymi możesz wybrać się także na konferencję… INTERDYSCYPLINARNĄ. A jeśli dodatkowo będzie to jeden z najbardziej kochanych eventów w Polsce, to tym lepiej. O czym mowa? Ano o DevDay oczywiście!

clip_image001

I tu świetna wiadomość: mam dla Ciebie bilet na DevDay! Jedna osoba z grona Czytelników devstyle będzie mogła za friko wbić się na konfę. Jedyne co musisz zrobić, aby wziąć udział w konkursie, to napisać komentarz do tego posta. A w nim 3 rzeczy:

  1. jeden kawałek kodu o dowolnej długości, w dowolnym języku, wypisujący na ekran tekst “Community <3 DevDay
  2. drugi kawałek kodu w INNYM języku, nieprzekraczający 140 znaków, wypisujący na ekran ten sam tekst
  3. informację o tym jakie to języki

Uwaga: liczą się tylko komentarze pod tym tekstem, tutaj, na devstyle.pl. Komentarze z Fejsa i innych miejsc nie będą brane pod uwagę.

W konkursie biorą udział komentarze zamieszczone do końca tygodnia, czyli do końca niedzieli 28 sierpnia. Zwycięzcę bądź zwyciężczynię wybiorę niedługo potem, po powrocie z łódek. 321GOGOGO!!!!!

EDIT: Widzę po pierwszych komentarzach, że niektóre znaki są przez wordpress usuwane. Jeżeli tak będzie w Twoim przypadku to zrób gista na githubie (https://gist.github.com) i w komentarzu podaj do niego link.

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
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.

50 Comments

  1. Bartosz Sosna on

    Ruby On Lakes – super pomysł. Może za rok też się wybiorę :)

  2. JavaScript w 35 znakach:
    console.log(“Community <3 DevDay");

    Ruby w 26 znakach:
    puts “Community <3 DevDay"

    PHP w 33 znakach:

    <?php
    echo 'Community <3 DevDay';

  3. Martyna W. on

    print(“Community <3 DevDay");
    – Python
    public class devDays
    {
    public static void(String [] args)
    {
    System.out.println("Community <3 DevDay");
    }
    }
    – Java

  4. $=~[];$={___:++$,$$$$:(![]+””)[$],__$:++$,$_$_:(![]+””)[$],_$_:++$,$_$$:({}+””)[$],$$_$:($[$]+””)[$],_$$:++$,$$$_:(!””+””)[$],$__:++$,$_$:++$,$$__:({}+””)[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+””)[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+””)[$.__$])+((!$)+””)[$._$$]+($.__=$.$_[$.$$_])+($.$=(!””+””)[$.__$])+($._=(!””+””)[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!””+””)[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+”\””+$.$_$_+(![]+””)[$._$_]+$.$$$_+”\\”+$.__$+$.$$_+$._$_+$.__+”(\\\”\\”+$.__$+$.___+$._$$+$._$+”\\”+$.__$+$.$_$+$.$_$+”\\”+$.__$+$.$_$+$.$_$+$._+”\\”+$.__$+$.$_$+$.$$_+”\\”+$.__$+$.$_$+$.__$+$.__+”\\”+$.__$+$.$$$+$.__$+”\\”+$.$__+$.___+”<"+$._$$+"\\"+$.$__+$.___+"\\"+$.__$+$.___+$.$__+$.$$$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.___+$.$__+$.$_$_+"\\"+$.__$+$.$$$+$.__$+"\\\"\\"+$.$__+$.___+")"+"\"")())();

    ——-JavaScript (https://jsfiddle.net/c4tzkdbk/1/) ———————

    Console.WriteLine("Community <3 DevDay");

    ——C#—-

  5. Patryk Tenderenda on

    Zawsze chciałem coś zakodzić w brainfucku :D
    +++++[>+++++++++++++>++++++[>+++++++>>++++++++++[>++++++++++<<<<>>>>+++++++++++.–..++++++++.——-.—–.+++++++++++.+++++.<<<.<>.<>>>>——————–.+++++++++++++++++.<<<<>>>>———————.++++++++++++++++++++++++.
    (do uruchomienia: https://copy.sh/brainfuck/?c=KysrKytbPisrKysrKysrKysrKys8LV0-PisrKysrK1s-KysrKys8LV0-Kys-PisrKysrKysrKytbPisrKysrKysrKys8LV0-PDw8PDwrKy4-Pj4-PisrKysrKysrKysrLi0tLi4rKysrKysrKy4tLS0tLS0tLi0tLS0tLisrKysrKysrKysrLisrKysrLjw8PC48PC0tLS0tLS0uLS0tLS0tLS0tLj4-Ljw8KysrKysrKysrKysrKysrKysuPj4-Pj4tLS0tLS0tLS0tLS0tLS0tLS0tLS4rKysrKysrKysrKysrKysrKy48PDw8PC4-Pj4-Pi0tLS0tLS0tLS0tLS0tLS0tLS0tLS4rKysrKysrKysrKysrKysrKysrKysrKysu )

    PowerShell / Bash:
    echo “Community <3 DevDay"

  6. C#:

    class Program
    {
    static void Main(string[] args)
    {
    System.Console.WriteLine(“Community <3 DevDay");
    }
    }
    ————————————
    ————————————
    jQuery:

    $(document).ready(function(){
    alert("Community <3 DevDay");
    });

  7. chałturnik wyrobnik on

    O tej nauce JS czytałem fajny art. wczoraj: https://snipcart.com/blog/learn-vanilla-javascript-before-using-js-frameworks ogólne przesłanie jest takie: naucz się solidnych podstaw czystego JS i kruczków stojących za popularnymi frameworkami. Inaczej wraz z pojawianiem się coraz to nowszych narzędzi Twój poziom frustracji będzie wzrastał, a Ty wciąż będziesz gonił króliczka nawet nie wiedząc jak wygląda (jak działa dany framework/biblioteka).

    Tylko jak to wszystko Macieju ogarnąć? Już dłuższy czas trenuję, aby zostać Juniorem w pewnej technologii, ale to trafi mi się jakaś chałturka w PHP, to jakaś stronka albo grzebię w trochę pochodnym frameworku, ale niezbyt przydatnym do pracy, a to znowu muszę coś sklepać w Angularze i w ten sposób rozmieniam się na drobne.
    Może to jakiś pomysł na art.? Jak skupić się na jednej technologii.

    • Chałturnik,
      Po prostu dużo robić, długo siedzieć, jak najwięcej poznawać… choć z umiarem. 12 godzin na dobę to taki max moim zdaniem, nawet w młodym wieku :).
      I nie zamykać się na jedną technologię – dopóki robisz to dla funu to rób to co aktualnie Cię pociąga, nawet jeśli byś codziennie skakał po róznych rzeczach.

  8. ———————– elixir ———————–
    IO.puts ‘Community <3 DevDay'

    ———————- Ruby ———————-
    puts “Community <3 DevDay"

    ——————— Delphi (stara miłosć) ———————
    {$APPTYPE CONSOLE}
    program p;
    begin
    Writeln ('Community <3 DevDay');
    end.

    —————————- F# ————————————–
    open System
    open System.IO

    Console.Writeline "Community <3 DevDay"

    ————————— Cool ————————————-
    class Main inherits IO {
    main() : Object {
    out_string("Community <3 DevDay\n")
    };
    };

  9. 1. Assembler x64:

    section .data
    msg db “Community <3 DevDay"

    section .text
    global _start
    _start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 19
    syscall
    mov rax, 60
    mov rdi, 0
    syscall

    2. Logo

    print [Community <3 DevDay]

  10. Adrian Ciura on

    <<>>
    printfn “Community <3 DevDay"

    <<>>
    IDENTIFICATION DIVISION.
    PROGRAM-ID. DevdayCobol.
    PROCEDURE DIVISION.
    DISPLAY “Community <3 DevDay".
    STOP RUN.

  11. Wejściówki nie chcę bo już mam ale dodam kodzik

    T-SQL ;) a co tam

    select ‘Community <3 DevDay'

    ArnoldC

    IT'S SHOWTIME
    TALK TO THE HAND "Community <3 DevDay"
    YOU HAVE BEEN TERMINATED

  12. Basic
    PRINT “Community io:fwrite(“Community <3 DevDay").

    ================================
    SQL (tez jezyk :-))
    Select "Community <3 DevDay" as output

  13. local doObioru = {“C”, “o”, “m”, “m”, “u”, “n”, “i”, “t”, “y”, ” “, “<", "3"}
    function OdbierzBilet()
    for k, v in ipairs(doObioru) do
    print(v)
    end
    end
    — lua

    HAI 1.2
    CAN HAS STDIO?
    VISIBLE "COMMUNITY <3"
    KTHXBYE

    BTW Lolcode

  14. C# (WPF)
    MessageBox.Show(“Community <3 DevDay");

    PERL
    #!/usr/bin/perl
    use strict;
    use warnings;
    print "Community <3 DevDay";

  15. Community <3 DevDay
    //HTML

    systemChat “Community <3 DevDay“;
    //język skryptowy SQF dla symulatora VBS3

  16. SELECT “Community <3 DevDay"

    ———————-

    WITH MEMBER [Measures].[Msg] AS (
    'Community <3 DevDay'
    )

    SELECT {
    [Measures].[Msg]
    } ON COLUMNS
    FROM [AdventureWorks]

    ——————–
    1. SQL
    2. MDX

  17. #### LUA
    — devday.lua
    io.write(“Community <3 DevDay")

    #### Befunge
    >#;>:#,_@;”Community <3 DevDay"

  18. D’`%M9!~[|49ExwSS@sra/M’JIHH”X&2|BAy~,_u)Lrqpun4rqpoQPlkd*hJIe^$#[`_^]VzTSRQuUTS54PImM/EiIB*@EDC=6|:32V6v4321*N(L,%*#”!E%$#”!~}v<zsxwvun4rqpRh.lNjchgfedcbaZ~^]\[Z<RvVUT6Lp]

    ————————-

    HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
    KTHXBYE

    ————————
    1. Malbolge
    2. LOLCODE

    • HAHA
      Fail roku. Nie ten kod skopiowany :D

      Poprawka:

      HAI
      CAN HAS STDIO?
      VISIBLE “Community <3 DevDay"
      KTHXBYE

  19. 1. Go – zrobione na goroutine z użyciem kanałów (tu można odpalić https://play.golang.org/p/0mcoiYPBRI)

    func printer(input <-chan string, done chan<- bool) {
    for char := range input {
    fmt.Printf("%s", char)
    }
    done <- true
    close(done)
    }

    func main() {
    input := make(chan string)
    done := make(chan bool)
    go printer(input, done)
    input <- "Community <3 DevDay"
    close(input)
    <-done
    }
    ————————-
    2. Clojure

    (print "Community <3 DevDay")

  20. PHP było już oklepane w komentarzach, więc dodaje PHP razem ze środowiskiem uruchomieniowym. Wystarczy zapisać w docker-compose.yml, odpalić docker-compose up -d i wejść na localhost ;)
    ———–
    version: ‘2’

    services:
    web:
    image: php:apache
    ports:
    – “80:80”
    command: bash -c “echo \”<?php echo 'Community \” > /var/www/html/index.php && apache2-foreground”
    ———–

    Drugi fragment kodu w klasycznym C, trochę bolało ograniczenie 140 znaków, więc czytelność kuleje…
    ———–
    int main(void){
    char f[] = {“123456789abcd1234567”};
    char s[] = {“r]^Y@X^L@A^PDuWEpTO”};
    int i;
    for(i=0; i<19; i++)putchar(f[i]^s[i]);
    }
    ———–
    Link do Gist'a https://gist.github.com/jach1pero/b9b3b474be6a35061c321b80d6fa2fe7

  21. Powróciłem cały i żyw i już wszystko wiem!

    Po pierwsze: dzięki wszystkim za udział w zabawie, zostaje archiwum bardzo ciekawych kodzików :). Nie spodziewałem się wysypu aż takich oryginałów, super!

    Po drugie: na DevDay jedzie… JACHU!

    Po trzecie: fajnych odpowiedzi było tak dużo, że postanowiłem dorzucić trzy nagrody pocieszenia: wypasione kubeczki DevTalk:
    * MARCIN PIETRASZEK
    * CHRYSTIAN
    * TYMOTEUSZ PASZUN

    Do wszystkich nagrodzonych lecą właśnie maile na adresy podane podczas dodawania komentarza. Jeżeli takiego maila nie dostałeś to… napisz do mnie ze strony devstyle.pl/kontakt.