The ClojureScript experience from a beginners perspective
Tags: clojurescript, clojure
Published: 2018-02-27 14:41:27

---
title: The ClojureScript experience from a beginners perspective
published: true
description: A quick look into the ClojureScript ecosystem from a beginners perspective.
tags: clojurescript, clojure
---

*A quick look into the ClojureScript ecosystem and a starting guide for developers interested in ClojureScript.*

## Learning
There are many online resources to learn Clojure and ClojureScript. I think the best one is [clojureacademy](https://clojurecademy.com/). This is very much like [codeacademy](https://www.codecademy.com/). A highly interactive learning environment. The downside is that it only contains courses on Clojure and not particular ClojureScript.  


*A thing I noticed reading through the official documentation and third party packages documentation is that the language is more flamboyant than I’m used to. Are there anyone else that has noticed that?*


### Tutorials
- **[ClojureAcademy](https://clojurecademy.com/)**
Great courses. Interactive and nicely written.
- **[Modern ClojureScript](https://github.com/magomimmo/modern-cljs)**
Extensive tutorial on ClojureScript.
- **[ClojureScript Unraveled](http://funcool.github.io/clojurescript-unraveled/)**
- **[PurelyFunctional.tv](https://purelyfunctional.tv/)**

### Documentation
- **[ClojureScript cheatsheet](http://cljs.info/cheatsheet/)**
- **[CLJS Api](http://cljs.github.io/api/)**
- **[ClojureDocs](http://clojuredocs.org/)**

## Workflow
The workflow is not as fluent if you are coming straight from the web world of webpack and NPM. ClojureScript runs on the JVM and the startup is rather slow. When it’s up and running there are however no problems. It still feels sluggish and kinda weird to work on the JVM while building an SPA for the web for me. Figwheel (ClojureScript’s live reloader) is really a must and it works flawlessly as well.

Where ClojureScript really shines is the REPL capabilities. This is a powerful feature and invites you to try, test and learn.

![Clojure tools](https://thepracticaldev.s3.amazonaws.com/i/mio2lrw2as2kuv5pqsw5.png)

## Third-party packages
It seems like in the ClojureScript's community there are a lot of highly skilled developers. There are not a whole lot of packages but most of them are of quite good quality. As a beginner, I found the documentation on some of them rather lacking.

You can also use third-party javascript libraries, either through [CLJSJS](http://cljsjs.github.io/) or including it in your build process.

## Tooling

![Clojure tooling](https://thepracticaldev.s3.amazonaws.com/i/sqng1lq896o5mz5vq58c.png)

- **[Atom](https://atom.io/)**
    - Can be quite good with plugins (Parinfer, atom-parinfer, lisp-paredit)
    - Not a good out of the box experience
- **[Cursive](https://cursive-ide.com/)**
    - Cost $199 for a commercial license
    - Great code completion, REPL, and debugger
    - IntelliJ plugin
- **[VSCode](https://code.visualstudio.com/)**
    - Can be acceptable with plugins (Vs-code-parinfer, vscode-clojure-debug)
    - The plugins is still immature
- **[Light Table](http://lighttable.com/)**
    - First class support for ClojureScript (Light Table is built into it)
    - Many plugins
    - Sluggish performance and not completely bug-free
    - Development seems to have stagnated
- **[Emacs](https://www.gnu.org/software/emacs/)**
    - The most popular choice
    - Many plugins
    - Steep learning curve
    - Keyboard based workflow
- **[Nightlight](https://sekao.net/nightlight/)**
    - Runs inside your project
    - Basic editor functionality
    - REPL, code completion, and instaREPL
- **[Nightcode](https://sekao.net/nightcode/)**
    - Simple IDE for Clojure(Script)
    - Easy to get started
    - Web-based version is also available
- **[Vim](https://www.vim.org/)**
    - Quite a popular choice
    - Keyboard based workflow

ClojureScript's tooling is weak compared to other languages. The best ones after my short period of testing are undoubtedly Emacs, Cursive, and Atom. There are other good ones like nightlight and nightcode but they are quite simple in terms of functionality.


## Conclusion

I believe ClojureScript still have some work to do so it will be more inviting to learn for web developers that usually work with React, Vue or Angular. The tooling support is a must since most programmers have a favorite editor and it takes time to get comfortable with an editor. The documentation is quite good but still not there yet. 

*[The pics is taken from the State of Clojure 2016 survey](http://blog.cognitect.com/blog/2017/1/31/state-of-clojure-2016-results)*