SlideShare a Scribd company logo
Why clojure(script) matters
Claudiu Apetrei - dev at figshare
My motivation
www.infocaini.ro
Personal project since 2006
Currently:
python, vanilla coffescript, google app engine
Next version:
Clojure (back-end), Clojurescript (front-end), Fulcro
Requirements
- Server side rendering (SEO & user experience)
- Same language on front-end & backend
- Single page app
- Fast development (smarter tooling, ex: google app engine)
- Robust & resilient codebase
- Be productive working 2-3 hours a night
- Understand quickly legacy code after 1-2 months of not working on it
KEEP THINGS AS SIMPLE AS POSSIBLE
Work smarter not harder
Reselect
Previous stack
Javascript is fine as it is :)
Clojurescript
Reason-ml (facebook)
ELM
Purescript
● Functional programming
● Immutable data structures
● Side effects
● Statically typed
Damien Katz - couchdb and me
OOP The promise and the reality
Working with maps, list (data oriented)
let a = {
author: {"name": "claudiu"}
};
fun-a1(a);
fun-a2(a);
fun-a3(a);
console.log(a);
Programming languages
C family C, C++, Objective-C, C#, Java, PHP, JavaScript, Go, Perl...
LISP family Common Lisp, Clojure, Scheme, Emacs Lisp
ML family ML, Caml, OCaml, F# (haskell inherits from here too)
1
2
3
Js history
Eich (Brendan Eich) originally joined intending to put Scheme "in the browser",[6]
but his Netscape superiors insisted that the language resemble Java in terms of
its syntax.
One of the best designed languages out there
Clojure is such a well designed language and a pleasure to program in.
Clojure language
Lisp dialect
Dynamically typed
Immutable data structures
Data oriented programming
Stable, light & complete language
Lisp - “code is data and data is code”
Macros = functions that write code, make it possible to move a lot of
“language features” into libraries
Clojure(script) code from 2015 the same in 2017 (^_^)
Macros 1
Macros 2
Clojure
programming language that targets the JVM (2007)
Clojurescript
compiler that targets javascript (2011)
Awesome host platform interop from day 1.
Make use of any existing library
Java or JavaScript (client and nodejs)
Universal(isomorphic)web application
*.clj *.cljs *.cljc
Functional programming
Different experience from javascript
Brian Lonsdorf
Oh Composable World!
Powerful core data types
All core data types are immutable
Maps are the work-horse in most applications (1% code objects)
:keywords = self referencing functions that can have namespace & value.
(def a {:manuscript/title “x”,
:article/title “y”})
Data oriented development
Powerful & well designed data structure
Language core + standard library centered around data manipulation
Comprehensive standard library
9/36 chapters completed
already at 400 pages
*only use about 10 - 30 day to day :)
Tooling & libs
REPL (read, evaluate, print, loop)
Figwheel (hot-reload)
Google closure compiler
Clojure.spec
Transit
Core.async
Core.match
Test.check
Core.logic
contract system
data format and tools for converting
go style channels for async
pattern matching
property based testing - inspired by haskell
prolog like rational programming
Google closure compiler
With clojurescript you get Java GCC + Advanced working out of the box.
Clojure.spec
Automatically check every single function call to make sure the arguments are
correct
- More expressive than type system
- Generative testing
- Generate example data
- Unified approach data validation
Transit not json
Uses json when possible
Can encode over the wire
- Dates
- Sets
- Lists
- UUIDs
- symbols, keywords, characters
- extensible
Clojure ecosystem gems
“Complete story that
removes 60%+ of the
complexity out of my
code.”
Beginner friendly Youtube video series on Fulcro: https://goo.gl/JekurH
Fulcro
Sweet spot between framework and library.
- Reactjs wrapper
- State management flow
- Normalised app state
- Support for optimistic updates
- Networking layer
- Backend story with graphql like capabilities
- Co-located css
- ...
Interesting community
Experienced like wow “crazy good developers”
X was about to give up on programming as irretrievably* complex when he
found Clojure, which renewed his love for code.
* in a way that cannot be retrieved or put right.
Who’s using clojure
Codecamp Iasi 24 March 2018, speaker & masterclass
Tony Kay is a software craftsman with nearly 30 years of
experience.
He has published research on concurrent programming,
spent a number of years teaching software
development, and is passionate about software
craftsmanship.
He has worked professionally in C, C++, Java, Scala, Perl,
Javascript, Objective-C, Clojure, and Clojurescript. He is
the lead architect and developer of the web
development library Fulcro, is a contributor to Om Next.
Clojure Iasi - meetup.com
- Hang out & help each other on SLACK
- Workshops
- Guest speakers (remote skype/slack)
- Build an open source SPA in Fulcro
https://www.meetup.com/iasi-clojure/
Thank you !
Getting started resources
https://www.infoq.com/presentations/Simple-Made-Easy Essence of clojure
https://defn.audio/episodes/2017/11/07/david-nolen.html Clojurescript overview
https://www.packtpub.com/web-development/learning-clojurescript book
https://cursive-ide.com/ editor
https://shaunlebron.github.io/parinfer/ editor plugin for structural editing

More Related Content

Similar to Why clojure(script) matters

Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSLMinko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko3D
 
ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017
vinaikopp
 
There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014
jbandi
 
JavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing EraJavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing Era
Allen Wirfs-Brock
 
Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech People
IT Arena
 
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
Codemotion
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
Mahmoud Tolba
 
Resume - Shashesh Silwal
Resume - Shashesh SilwalResume - Shashesh Silwal
Resume - Shashesh Silwal
Shashesh Silwal
 
MLFlow: Platform for Complete Machine Learning Lifecycle
MLFlow: Platform for Complete Machine Learning Lifecycle MLFlow: Platform for Complete Machine Learning Lifecycle
MLFlow: Platform for Complete Machine Learning Lifecycle
Databricks
 
Build your next single page app in ClojureScript and re-frame
Build your next single page app in ClojureScript and re-frameBuild your next single page app in ClojureScript and re-frame
Build your next single page app in ClojureScript and re-frame
Paul Bostrom
 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Web
masuland
 
Introducing React to GraysOnline
Introducing React to GraysOnlineIntroducing React to GraysOnline
Introducing React to GraysOnline
Joseph Ni
 
IT TRENDS AND PERSPECTIVES 2016
IT TRENDS AND PERSPECTIVES 2016IT TRENDS AND PERSPECTIVES 2016
IT TRENDS AND PERSPECTIVES 2016
Vaidheswaran CS
 
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdfAstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
FarHanWasif1
 
WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014
Minko3D
 
Use React tools for better Angular apps
Use React tools for better Angular appsUse React tools for better Angular apps
Use React tools for better Angular apps
Martin Hochel
 
Clojure in real life 17.10.2014
Clojure in real life 17.10.2014Clojure in real life 17.10.2014
Clojure in real life 17.10.2014
Metosin Oy
 
Red Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus IntroductionRed Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus Introduction
John Archer
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
Manuel Carrasco Moñino
 
TanushreeHaldar
TanushreeHaldarTanushreeHaldar
TanushreeHaldar
Tanushree Haldar
 

Similar to Why clojure(script) matters (20)

Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSLMinko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSL
 
ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017
 
There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014
 
JavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing EraJavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing Era
 
Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech People
 
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Resume - Shashesh Silwal
Resume - Shashesh SilwalResume - Shashesh Silwal
Resume - Shashesh Silwal
 
MLFlow: Platform for Complete Machine Learning Lifecycle
MLFlow: Platform for Complete Machine Learning Lifecycle MLFlow: Platform for Complete Machine Learning Lifecycle
MLFlow: Platform for Complete Machine Learning Lifecycle
 
Build your next single page app in ClojureScript and re-frame
Build your next single page app in ClojureScript and re-frameBuild your next single page app in ClojureScript and re-frame
Build your next single page app in ClojureScript and re-frame
 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Web
 
Introducing React to GraysOnline
Introducing React to GraysOnlineIntroducing React to GraysOnline
Introducing React to GraysOnline
 
IT TRENDS AND PERSPECTIVES 2016
IT TRENDS AND PERSPECTIVES 2016IT TRENDS AND PERSPECTIVES 2016
IT TRENDS AND PERSPECTIVES 2016
 
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdfAstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
 
WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014
 
Use React tools for better Angular apps
Use React tools for better Angular appsUse React tools for better Angular apps
Use React tools for better Angular apps
 
Clojure in real life 17.10.2014
Clojure in real life 17.10.2014Clojure in real life 17.10.2014
Clojure in real life 17.10.2014
 
Red Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus IntroductionRed Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus Introduction
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 
TanushreeHaldar
TanushreeHaldarTanushreeHaldar
TanushreeHaldar
 

Recently uploaded

J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
Bert Jan Schrijver
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
Patrick Weigel
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
Yara Milbes
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
Marcin Chrost
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
XfilesPro
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
YousufSait3
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
Top 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptxTop 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptx
devvsandy
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 

Recently uploaded (20)

J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
Top 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptxTop 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptx
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 

Why clojure(script) matters

  • 1. Why clojure(script) matters Claudiu Apetrei - dev at figshare
  • 2. My motivation www.infocaini.ro Personal project since 2006 Currently: python, vanilla coffescript, google app engine Next version: Clojure (back-end), Clojurescript (front-end), Fulcro
  • 3. Requirements - Server side rendering (SEO & user experience) - Same language on front-end & backend - Single page app - Fast development (smarter tooling, ex: google app engine) - Robust & resilient codebase - Be productive working 2-3 hours a night - Understand quickly legacy code after 1-2 months of not working on it KEEP THINGS AS SIMPLE AS POSSIBLE
  • 6. Javascript is fine as it is :) Clojurescript Reason-ml (facebook) ELM Purescript ● Functional programming ● Immutable data structures ● Side effects ● Statically typed
  • 7. Damien Katz - couchdb and me
  • 8. OOP The promise and the reality
  • 9. Working with maps, list (data oriented)
  • 10. let a = { author: {"name": "claudiu"} }; fun-a1(a); fun-a2(a); fun-a3(a); console.log(a);
  • 11.
  • 12. Programming languages C family C, C++, Objective-C, C#, Java, PHP, JavaScript, Go, Perl... LISP family Common Lisp, Clojure, Scheme, Emacs Lisp ML family ML, Caml, OCaml, F# (haskell inherits from here too)
  • 13. 1
  • 14. 2
  • 15. 3
  • 16. Js history Eich (Brendan Eich) originally joined intending to put Scheme "in the browser",[6] but his Netscape superiors insisted that the language resemble Java in terms of its syntax.
  • 17. One of the best designed languages out there Clojure is such a well designed language and a pleasure to program in.
  • 18. Clojure language Lisp dialect Dynamically typed Immutable data structures Data oriented programming
  • 19. Stable, light & complete language Lisp - “code is data and data is code” Macros = functions that write code, make it possible to move a lot of “language features” into libraries Clojure(script) code from 2015 the same in 2017 (^_^)
  • 22. Clojure programming language that targets the JVM (2007) Clojurescript compiler that targets javascript (2011) Awesome host platform interop from day 1.
  • 23. Make use of any existing library Java or JavaScript (client and nodejs) Universal(isomorphic)web application *.clj *.cljs *.cljc
  • 24. Functional programming Different experience from javascript Brian Lonsdorf Oh Composable World!
  • 25. Powerful core data types All core data types are immutable Maps are the work-horse in most applications (1% code objects) :keywords = self referencing functions that can have namespace & value. (def a {:manuscript/title “x”, :article/title “y”})
  • 26. Data oriented development Powerful & well designed data structure Language core + standard library centered around data manipulation
  • 27. Comprehensive standard library 9/36 chapters completed already at 400 pages *only use about 10 - 30 day to day :)
  • 28. Tooling & libs REPL (read, evaluate, print, loop) Figwheel (hot-reload) Google closure compiler Clojure.spec Transit Core.async Core.match Test.check Core.logic contract system data format and tools for converting go style channels for async pattern matching property based testing - inspired by haskell prolog like rational programming
  • 29. Google closure compiler With clojurescript you get Java GCC + Advanced working out of the box.
  • 30. Clojure.spec Automatically check every single function call to make sure the arguments are correct - More expressive than type system - Generative testing - Generate example data - Unified approach data validation
  • 31. Transit not json Uses json when possible Can encode over the wire - Dates - Sets - Lists - UUIDs - symbols, keywords, characters - extensible
  • 32. Clojure ecosystem gems “Complete story that removes 60%+ of the complexity out of my code.” Beginner friendly Youtube video series on Fulcro: https://goo.gl/JekurH
  • 33. Fulcro Sweet spot between framework and library. - Reactjs wrapper - State management flow - Normalised app state - Support for optimistic updates - Networking layer - Backend story with graphql like capabilities - Co-located css - ...
  • 34. Interesting community Experienced like wow “crazy good developers” X was about to give up on programming as irretrievably* complex when he found Clojure, which renewed his love for code. * in a way that cannot be retrieved or put right.
  • 36. Codecamp Iasi 24 March 2018, speaker & masterclass Tony Kay is a software craftsman with nearly 30 years of experience. He has published research on concurrent programming, spent a number of years teaching software development, and is passionate about software craftsmanship. He has worked professionally in C, C++, Java, Scala, Perl, Javascript, Objective-C, Clojure, and Clojurescript. He is the lead architect and developer of the web development library Fulcro, is a contributor to Om Next.
  • 37. Clojure Iasi - meetup.com - Hang out & help each other on SLACK - Workshops - Guest speakers (remote skype/slack) - Build an open source SPA in Fulcro https://www.meetup.com/iasi-clojure/ Thank you !
  • 38. Getting started resources https://www.infoq.com/presentations/Simple-Made-Easy Essence of clojure https://defn.audio/episodes/2017/11/07/david-nolen.html Clojurescript overview https://www.packtpub.com/web-development/learning-clojurescript book https://cursive-ide.com/ editor https://shaunlebron.github.io/parinfer/ editor plugin for structural editing