Resources for creating front-end programming languages and frameworks in 2017

Thanks to the tireless work of the open source community, programming has never been better than it is today. However, we can always improve our languages, tools and frameworks. These resources are where I draw inspiration for my work in this domain.

Foundational reading

  • Learnable Programming is required reading for anyone creating a programming language, especially if your goal is to create an intuitive language (which it should be). In this article, Bret Victor introduced me the art of designing powerful metaphors and is where I first heard of my idol Seymour Papert. I have since responded to Learnable Programming with my own article Making JavaScript Learnable and programming framework WoofJS.
  • The Future of Programming is a really fun video that Bret Victor gave at Dropbox in 2013. He dresses up like he’s in 1973 and talks about how the “future of programming” is bright. His talk makes it clear that programming is nowhere near as good as it could be and gives ideas for ways we could improve upon it. My favorite part when he explains that each new jump in abstraction (from binary to assembly, from assembly to Fortran, etc) was met with resistance. Resilience is key for a hopeful programming language creator.
  • Inventing on Principle. There’s much inspiration in this talk that you’ll want to get started changing the world right away. While you’re at it, you might as well check out Bret Victor’s entire collection of articles and talks.
  • Simple Made Easy. Rich Hickey makes an important distinction between between simple and easy, and explains its consequences for reducing incidental complexity. If you like this talk, you’ll love The Unofficial Guide to Rich Hickey’s Brain.
  • Birth & Death of JavaScript. This is pure fun, especially if you’re a JavaScript hacker. It also puts forward a clear vision of web supremacy and the death of native apps.

My highly-biased quick ‘n’ dirty history of JavaScript (prezi here):

  • JQuery brought much needed browser compatibility and utility methods, most notably AJAX, to JavaScript in 2006. This project was so successful we needed to invent a term for JavaScript without JQuery, namely “vanilla JavaScript.” Much of John Resig’s amazing work has since been absorbed into vanilla JavaScript.
  • Circa 2010, Jeremy Asheknas created three landmark projects that would forever change the face of JavaScript in a way that is reminiscent of Einstein revolutionizing physics in the early 20th century with special relativity and general relativity all in a handful of months. UnderscoreJS (which has since morphed into Lowdash) built upon JQuery’s utility library with a functional programming bent. BackboneJS became the first standardized way that JS programmers managed AJAX communication with their backend for their models. CoffeeScript, a language that transpiles to JavaScript, became so successful that many of its most popular features found homes in ECMAscript 5 and 6.
  • With the explosion of Model-View-* frameworks circa 2012, people started complaining about “JavaScript fatigue” and the community began to rally around ToDoMVC.com as the place to compare and contrast frameworks.
  • ReactJS came out in 2014 and took the JavaScript world by storm by “rethinking best practices.” It brought the idea of functional, statelessness, “server on the client”, unidirectional data flow into mainstream consciousness.
  • Functional programming frameworks like Elm and CycleJS are becoming more commonly accepted as serious contenders. Elm in particular, with its promise of zero-runtime-errors, is a force to be reckoned with. I’m a longtime fan of CycleJS creator Andres’s thinking on these topics and I’m very impressed simplistic approach he’s taken with CycleJS. (Though for both of these tools, I like the idea of them more than I like them in practice.)
  • In early 2017, VueJS is fast gaining popularity and is my current framework of choice. I’ve used it in a handful of projects and I have virtually no complaints. I see it as a simplification of ReactJS with some good ideas from AngularJS.

What I hope for the future of coding

  • I think functional programming principles, including types and immutability, have a special place in the future of programming. I also believe that the future is web-based and serverless through solutions like Firebase and Amazon Lambda.
  • Eve. I have a lot of respect for this team and I follow their blog religiously. I have not been blown away by their recent work, but that might be because I do not fully understand it yet. These guys are smart cookies.
  • Bubble. This is currently the best (and really only) way for non-programmers to create complex websites. I am highly impressed by their pragmatic attitude and that they’ve bootstrapped the business to profitability in just a few years. I do think, however, that they could learn a bit about “learnability” from these resources.
  • I love MIT’s Scratch project, and although it’s only a beginner’s programming language, I truly believe that it points towards the true future of programming: no syntax errors. In this vein, John Maloney and Jens Monig, from Scratch and a similar project Snap!, respectively, are working on an ambitious such project GP (but it’s not a web tool). I’ve heard rumors that the guys behind MIT’s App Inventor are also working on a commercialized version of it.
  • I have recently started working on a block-based programming language that I’m building with Google’s Blockly called Cycle (no relation to CycleJS, but I’ll probably end up changing my name out of respect for Andres). Cycle compiles directly to VueJS code, so you can think of it as at view-layer framework that a 10-year-old could pick up in an hour (as opposed to the weeks it takes most adults to pick up any other comparatively powerful framework). Eventually, I’d like to take a page out of Elm’s book and eliminate runtime errors (as well as the syntax errors already eliminated via blocks) with strict Haskell-like typing, but within the highly intuitive metaphor of types as shapes. The most Cycle can do now is a very simple To Do List, but I hope to be able to scale up to a full version of ToDoMVC within the next few weeks. From there, I’ll build Firebase integrations and other needed functionality to make incremental improvements towards practical usability.

I hope my list was useful to you! If there are other resources that have inspired you in this vein, please share them with me :)