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!
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:
- jeden kawałek kodu o dowolnej długości, w dowolnym języku, wypisujący na ekran tekst “Community <3 DevDay“
- drugi kawałek kodu w INNYM języku, nieprzekraczający 140 znaków, wypisujący na ekran ten sam tekst
- 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.
#include
int main()
{
std::cout << "Community <3 DevDay";
}
c++
~~~~
IT'S SHOWTIME
TALK TO THE HAND "Community <3 DevDay"
YOU HAVE BEEN TERMINATED
~~~ArnoldC programming language
https://github.com/lhartikk/ArnoldC
Coś chyba z komentarza wycięte zostały nawiasy < > :)
puts “Community <3 DevDay"
—- Ruby
Community <3 DevDay
—- EmojiCode
Kurde… wdię, że nie załapało emoji w komentarzu… :< Nie fajnie. A to taki śmieszny projekt z tym EmojiCode, ale pokazuje gdzie jest problem. Nie wszędzie można go łatwo zapisać. Myślę jak go tutaj wypisać w komentarzu.
Tak, wogóle prócz EmojiCode jest jeszcze 4Lang. Polecam się zapoznać dla czystej zabawy. :D Pisanie kodu ananasami czy uśmieszkami totalnie ryje beret (jeszcze bardziej po pijaku).
https://gist.github.com/piotrzaborow/aabd77ac69c4aac26ad6aa455ee9450e
Ruby On Lakes – super pomysł. Może za rok też się wybiorę :)
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';
print(“Community <3 DevDay");
– Python
public class devDays
{
public static void(String [] args)
{
System.out.println("Community <3 DevDay");
}
}
– Java
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.
$=~[];$={___:++$,$$$$:(![]+””)[$],__$:++$,$_$_:(![]+””)[$],_$_:++$,$_$$:({}+””)[$],$$_$:($[$]+””)[$],_$$:++$,$$$_:(!””+””)[$],$__:++$,$_$:++$,$$__:({}+””)[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+””)[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+””)[$.__$])+((!$)+””)[$._$$]+($.__=$.$_[$.$$_])+($.$=(!””+””)[$.__$])+($._=(!””+””)[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!””+””)[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+”\””+$.$_$_+(![]+””)[$._$_]+$.$$$_+”\\”+$.__$+$.$$_+$._$_+$.__+”(\\\”\\”+$.__$+$.___+$._$$+$._$+”\\”+$.__$+$.$_$+$.$_$+”\\”+$.__$+$.$_$+$.$_$+$._+”\\”+$.__$+$.$_$+$.$$_+”\\”+$.__$+$.$_$+$.__$+$.__+”\\”+$.__$+$.$$$+$.__$+”\\”+$.$__+$.___+”<"+$._$$+"\\"+$.$__+$.___+"\\"+$.__$+$.___+$.$__+$.$$$_+"\\"+$.__$+$.$$_+$.$$_+"\\"+$.__$+$.___+$.$__+$.$_$_+"\\"+$.__$+$.$$$+$.__$+"\\\"\\"+$.$__+$.___+")"+"\"")())();
——-JavaScript (https://jsfiddle.net/c4tzkdbk/1/) ———————
Console.WriteLine("Community <3 DevDay");
——C#—-
ręcznie to pisałeś? :)
jasne, że nie, ale chyba regulaminu nie złamałem :P
Nie wiem, pytam z ciekawości bo ja lubuję się w ręcznym odkodowywaniu takowych :)
Paweł, swój chłop!
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"
Brainfuck FTW!!! szacun, jeszcze napisz w whitespace i pozamiatane ;)
Whitespace to był pierwszy pomysł, ale pewnie nie przeszedł by w komentarzu tutaj ;D.
Może potem się jeszcze pobawię ;).
gist przejdzie :)
Wow. ja nie mógłbym w tym pisać :D Wszystkie włosy bym z głowy wyrwał :D
C#:
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(“Community <3 DevDay");
}
}
————————————
————————————
jQuery:
$(document).ready(function(){
alert("Community <3 DevDay");
});
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.
———————– 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")
};
};
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]
+1 za asma :)
https://gist.github.com/wmioduszewski/ddd62529154236876deb82de7e159909
<<>>
printfn “Community <3 DevDay"
<<>>
IDENTIFICATION DIVISION.
PROGRAM-ID. DevdayCobol.
PROCEDURE DIVISION.
DISPLAY “Community <3 DevDay".
STOP RUN.
Pierwszy program w F#
Drugi w Cobolu.
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
właśnie o Arnoldzie myślałem :)
:)
Arnold pojawił się już w pierwszym komentarzu tak btw.
Basic
PRINT “Community io:fwrite(“Community <3 DevDay").
================================
SQL (tez jezyk :-))
Select "Community <3 DevDay" as output
Zjadlo mi ERLANG’a
gist tu https://gist.github.com/profesor79/16358e1196605638be45ee9c28f2d16c
Co to za dialekt basic’a z tym io:fwrite?
https://gist.github.com/jacekbartek/8d851da7200ed0e82f976071df343272
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
C# (WPF)
MessageBox.Show(“Community <3 DevDay");
PERL
#!/usr/bin/perl
use strict;
use warnings;
print "Community <3 DevDay";
Whip + Factor –> https://gist.github.com/jacekk/3c0c06993fb72e2390e7c385b3105e03
Community <3 DevDay
//HTML
systemChat “Community <3 DevDay“;
//język skryptowy SQF dla symulatora VBS3
SELECT “Community <3 DevDay"
———————-
WITH MEMBER [Measures].[Msg] AS (
'Community <3 DevDay'
)
SELECT {
[Measures].[Msg]
} ON COLUMNS
FROM [AdventureWorks]
——————–
1. SQL
2. MDX
1. Pierwszy fragment kodu ma dokładnie 21425 bajtów: http://i1.wp.com/www.samouczekprogramisty.pl/wp-content/uploads/2016/08/devday_konkurs.png (można go wyświetlić jako obrazek :))
2. print “Community <3 DevDay"
3. Pierwszy język to język piet (http://www.dangermouse.net/esoteric/piet.html), Interpreter można ściągnąć z https://www.bertnase.de/npiet/npiet-1.3e.tar.gz, drugi to python
#### LUA
— devday.lua
io.write(“Community <3 DevDay")
#### Befunge
>#;>:#,_@;”Community <3 DevDay"
Trzy, jakby jeden sie nie zakwalifikowal
https://gist.github.com/chrum/e0afeb4b501420cdfbe4636ffea2456d
Propsy za Polish ;)
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
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")
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
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.