2012-03-06

Jak jsem prováděl pokusy na lidech

V naší firmě probíhá pravidelně každého půl roku programátorský test. O smyslu takového počínání by bylo nepochybně možné pochybovat, nicméně letos na jaře vyšla příprava zadání na mě, takže jsem se mimořádně místo remcání soustředil na to, jak připravit zajímavou úlohu, která by mým drahým kolegům přinesla kromě obvyklého bodového hodnocení také nějaký hraniční zážitek.

Takže co jsem si na své nic netušící kolegy vymyslel? Dost jednoduchý úkol: Implementovat Langtonova mravence, respektive program, který vypíše seznam černých buněk po zadaném počtu kroků. Jedinou komplikací byl seznam povolených jazyků: Kotlin, Ceylon, Fantom, Go nebo Dart. Aby to tolik nebolelo, připravil jsem virtuální stroj (VMware image Linux Mint), na kterém bylo rozchozené IDE pro všech pět jazyků (bohužel mi ale nedošlo, že ráno před testem nestihnu těch 5GB nahrát do Olomouce, takže tamní kolegové museli vystačit s online prostředím).

Langtonův mravenec je jednoduchá zero-player game: Na nekonečné ploše, která se skládá z bílých a černých buněk, žije mravenec. V každém kroku mravenec udělá:

  • Pokud stojí na bílé buňce, otočí se doprava, změní barvu buňky a popoleze o buňku vpřed.
  • Pokud stojí na černé buňce, otočí se doleva, změní barvu buňky a popoleze o buňku vpřed.

Další zajímavé informace o tomto problému a názornou animaci prvních 200 kroků najdete na wikipedii.

Proč se učit nový jazyk? Je to jako individuální turistika "na blind", když vezmete batoh a letenku a jinak nic neplánujete. Sice nemáte jistotu kde skončíte, co uvidíte a koho potkáte, ale je to dobrodružství, poznáte cílovou zemi lépe než s cestovkou, rozšíříte si obzory a někdy se dozvíte i něco o sobě. Navíc to není tak nereálná situace: Klidně se může stát, že přijde nový projekt pro platformu kterou neznáte, a vy se budete rozhodovat, jestli jít do nového prostředí (jazyka který neznáte) nebo do nového prostředí (do jiné firmy).

Proč jsem vybral zrovna těchto pět jazyků? Chtěl jsem, abychom všichni byli na stejné lodi, a proto jsem vyloučil jazyky známé, staré a oblíbené v komunitách (u nás ve firmě jsme multiplatformní). Také jsem hledal jazyk, který lze (alespoň teoreticky) použít v reálné aplikaci, nebo který má aspoň do budoucna, dle mého skromného názoru, šanci na rozšíření.

Kotlin je nový staticky typovaný jazyk, který se kompiluje do JVM bytekódu nebo javascriptu. Dávám mu dost šancí na úspěch, zejména proto, že je od JetBrains, tvůrců pokročilých IDE IntelliJ Idea a ReSharper. Pokud dotáhnou IDE Kotlinu na stejnou úroveň, bude to zajímavá alternativa Javy.

Jazyk Ceylon také kompiluje do JVM a stojí za ním silný hráč, Red Hat. Je staticky typovaný a jeho type systém stojí za pozornost.

Fantom zatím považuju spíš za kuriozitu, zajímavý je tím, že cílové platformy jsou JVM i .NET CLR. Je převážně staticky typovaný, ale povoluje některé vlastnosti dynamických jazyků, jako duck typing.

Jazyk Go od Google je "rychlý, staticky typovaný, kompilovaný jazyk, který ale působí jako dynamicky typovaný, interpretovaný jazyk":-) Je to nejzajímavější jazyk z vybrané pětice a je škoda, že si ho vybral jen jeden kolega. Tak například mezi jeho základními typy je komplexní číslo (complex64 a complex128). Nemá třídy, ale má typy, "struct" a rozhraní (které připomínají duck typing). Ke všem vaším typům můžete definovat metody, ale dělá se to "zvenku", podobně jako u prototypů v javascriptu. Má ukazatele, ale nemá ukazatelovou aritmetiku. A má hned několik konceptů a klíčových slov pro zjednodušení konkurence v paralelním programování.

Dart má ambice nahradit javascript, ale možná v něm budeme psát i serverový kód. Pro renegáty z C# a Javy je to velmi příjemný a povědomý jazyk, který spojuje výhody staticky a dynamicky typovaných jazyků.

A jak to dopadlo? Zatím jsem test nestihl vyhodnotit, ale už vím že většina kolegů si vybrala Dart a Kotlin. Někteří to rovnou vzdali, někteří přijmuli výzvu s nadšením a někteří mi vyhrožovali fyzickým násilím (jenom jako) (teda doufám). Když nic jiného, letošní test si budou všichni dlouho pamatovat:-)

Žádné komentáře:

Okomentovat