Представяме ви технологичната общност Lambda Dojo Sofia. Йордан Бисерков от общността ни разкри какво е функционално програмиране и има ли то почва у нас.
Разкажете ни за общността? Кой организира сбирките?
Й.Б.: Lambda Dojo обединява хора с интерес към функционалните езици и техники за програмиране. От първата среща през март 2016 досега групата има 122 участници, 18% от които са жени.
Основен виновник за провеждането на Sofia Lambda Dojo е Боян Бонев. Той предоставя места за срещите, подбира интригуващи задачи, осигурява храна + напитки, и като цяло е душата на всяко събиране.
Боян има голям опит в програмирането и управлението на софтуерни екипи. Въпреки това (или може би поради това) той е изключително „приземен“ – умее да обяснява ясно и просто, да отсява важното от маловажното, да вижда добрата страна на нещата. Той е и съорганизатор на групата Golang Bulgaria.
Откъде идва и какво означава Lambda Dojo?
Й.Б.: Dōjō (道場) е място задълбочено изучаване.
Гръцката буква Lambda (λ) е универсален символ на функционалния стил. Произлиза от Ламбда смятането (Lambda calculus) – формална система за изразяване на изчисления – където λ се използва за обозначаване на функции. Тя e в основата на логата на езици като Clojure, Haskell, Racket (PLT Scheme) и други.
Как протича една обичайна сбирка?
Й.Б.: През първата част се запознаваме с евентуални нови участници и си говорим за функционално програмиране, интересни новини, проекти, предстоящи/минали събития и др. Често има участници от чужбина и тогава разговорите са на английски. За хапване има пица (някои си носят салата), за пиене – безалкохолно и бира.
През втората част решаваме интересна задача, използвайки функционален стил. Първо обсъждаме условието, а после се разделяме на 3 до 6 двойки. Единият човек пише на лаптоп, а другият е навигатор (pair programming). На 25 минути правим 5 минути почивка (pomodoro technique) и при желание ролите се разменят.
Накрая всеки екип представя своя подход и решение. Кодът от предишни срещи е достъпен в нашия GitHub.
Кои езици за програмиране използвате?
Й.Б.: Това зависи изцяло от участниците. Всяка двойка избира език, който смята за подходящ или иска да научи. Досега сме имали решения на Clojure, ClojureScript, Common Lisp, Golang, Haskell, OCalm, PHP, Python, Ruby. Както може би става ясно от списъка, за да пишеш функционален код не е задължително да програмираш на функционален език.
Какво означава кодът да е функционален? А какво означава езикът да е функционален?
Й.Б.: При императивните стилове (обектно-ориентиран, процедурен) идентичностите (identities) и тяхното състояние (state) са неразривно свързани. Това води до създаване на много повече идентичности, отколкото е необходимо, което прави кодът много по-сложен и труден за разбиране, тестване и развиване. С навлизането на многоядрените процесори (днес даже евтините телефони имат по 8 ядра) този проблем става все по-голям.
При функционалния стил програмата се разделя най-общо на две части – неизменимо ядро (immutable core) и императивна обвивка (imperative shell). Ядрото е съставено от чисти (pure) функции – те нямат странични ефекти и резултатът им зависи само от параметрите им. Това ги прави много по-лесни за осмисляне, комбиниране и [генеративно] тестване; спомага за намирането и отстраняването на грешки (debugging). Освен това паралелизирането им е тривиално. В обвивката са тези части от програмата, при които страничните ефекти са неизбежни – работа с файлове, мрежи и т.н. Съотношението ядро:обвивка е различно според типа на програмата, но често достига 9:1.
Функционални са тези езици, които чрез своите основни принципи насърчават този стил, правят го удобен и лесен за употреба.
Какво е новото във вашата общност? В технологичен план и около самите вас?
Й.Б.: „Новото“ е, че масовите езици правят стъпки в правилната посока. Поддръжка за ламбда-изрази бе добавена в C# 3.0 (2007), C++11 (2011) и Java 8 (2014). Индустрията, макар и бавно, започва да осъзнава проблема и предимствата, които функционалният стил носи. Това далеч не е достатъчно и функционални езици продължават да има множество предимства, особено в някои сфери.
Новината в Clojure света е, че версия 1.10 излиза скоро и прави съобщенията за грешки много по-точни и ясни.
В личен план, на 14ти септември участвах във конференцията ClojuTRE в Хелзинки, Финландия. Видео на лекцията ми може да видите в YouTube.
Боян пък отскоро е CTO на Gaida.AI – интересен стартъп в областта на недвижимите имоти и изкуствения интелект.
През летния семестър с Боян ще водим изборен курс за Clojure във Факултета по математика и информатика на Софийския университет.
Как желаещите могат да се включат във вашата група?
Й.Б.: На сбирката са добре дошли всички – от начинаещи до експерти. Регистрацията (чрез Meetup.com) и участието са напълно безплатни. Пак там се обявяват и конкретните дати на събиранията.
Тагове: сбирка, програмиране, функционално програмиране, обектно-ориентирано програмиране, React, immutability, pure functions, Clojure, ClojureScript, Common Lisp, Haskell, Java, Racket