David Nolen

swannodette
Biography

David Nolen is a software engineer for Cognitect. He enjoys making music, writing JavaScript, writing ClojureScript, and exploring new approaches to user interface programming.

Introduction to ClojureScript

More than 55 years ago John McCarthy had an insanely great idea called Lisp. Lisp marked the beginning of functional programming, interpreters, high-level metaprogramming, garbage collection, and much more. Yet after such auspicious beginnings the idea of Lisp has since faded and many of its innovations have been adopted by much more popular programming languages. Until recently Lisp even appeared doomed to fade into obscurity but several things have conspired to make Lisp somewhat cool again - one of these is Clojure, a fun modern Lisp targeting the Java Virtual Machine.

However the Web doesn’t speak JVM bytecodes. It speaks JavaScript - thus the cornucopia of languages that now compile to JavaScript. The most well known include GWT, CoffeeScript, and more recently Dart and TypeScript. However none of these represent a real break from the status quo.

John McCarthy’s insanely great idea still has a lot to offer the Web and we’ll see how with ClojureScript, an implementation of Clojure that targets JavaScript.

IMMUTABILITY, INTERACTIVITY & JAVASCRIPT

Surprisingly the high performance mutation available in modern JavaScript engines is a great foundation for building high performance immutable collections. Even more surprisingly efficient immutable collections permit new ways of approaching user interface programming. While the details will be in Om, an immutable user interface toolkit written in ClojureScript over Facebook’s React, the talk will be primarily focused on high level concepts easily ported to JavaScript. We’ll dive in and see how trees of JavaScript arrays can permit building these efficient immutable collections. Then we’ll see how embracing immutable values dramatically simplifies some classic hard problems in client side programming including but not limited to undo, error playback, and online/offline synchronization.