Another Personal Programming Language Roadmap
Life is short, so we have to prioritize the things that we learn. This is my current list of interests in practical and theoretical areas related to programming.
This morning one of our developers pointed me to
a post from Avdi Grimm describing the programming languages he was most interested in learning. I
agree that it's important to recognize that our time is limited, and
we need to prioritize tools that we want to learn, and also to realize
that some things have to be pushed aside to make room for our
priorities. Inspired by his post, and at the same time realizing that
my own priority list is almost entirely different, I decided to jot
down my own roadmap. My own language interests tend to blur the line
between theory and practice, so I'll present a list of languages as
well as theory that inspires some of my interest in tools at the
moment.
The languages and tools I'm learning:
- Agda
and Coq: We’ve recently done
workshops on Agda at Stack Builders, and this has helped to open my
eyes to the benefits of dependent types. Coq is a powerhouse of
great language ideas, and I’m interested in diving into interactive
theorem proving as well.
- Elm: I started using Elm a couple of years
ago after seeing
Evan Czaplicki's great talk at the Emerging Languages Camp during Strange Loop,
and I've used Elm in some recent university talks in Ecuador to
demonstrate the benefits of static types and pure functional
programming for creating user interfaces. I'm excited to see the Elm
community picking up well-deserved steam.
- Idris: Recently I saw
a talk by Edwin Brady, the creator of Idris, at Lambda Days in Krakow. His
demonstration of how Idris can use
uniqueness types to
express a network communication protocol blew me away, and I’m
interested in learning more about this and other innovations in
dependent types coming from Idris-land.
- Liquid Haskell:
This extension to Haskell brings us closer to dependent types, which
I think is extremely fascinating to help us reduce the cost of
software development in the future. As Haskell is already an
extremely pragmatic language that we’re using for production
projects in Stack Builders, I think that helping Haskell to gain
more expressive types is a promising development.
What I'm studying:
I’ll be attending the
Oregon Programming Language Summer School
in June 2015. Topics covered will include type theory, category
theory, and languages such as Coq and Agda which are deeply related to
these theoretical areas. As I prepare for OPLSS this June, I'm
studying the YouTube videos from the OPLSS 2012 on similar
topics. Specifically, I'm going through the talks on Type Theory,
Category Theory and Proof Theory, which are taught by some of the most
prominent figures in each area (Robert Harper, Steve Awodey, and Frank
Pfenning, respectively). I have a long reading list related to the
areas of theory that interest me, but I'll leave that for another
post.
What I'm not pursuing at the moment:
- Clojure: I played with Clojure for a while,
and I think its support for immutability is helpful. But with the
lack of static typing, I didn't feel like it gave me the boost I was
looking for in development productivity. I'm much happier since I
found Haskell, and that has opened up new worlds of tools and
theory, part of which I've enumerated above.
- Go: I don't see it as being innovative enough
to really change the way that I think about programming. I also
don't see it helping us to significantly reduce the cost of
producing high-quality software.
- Erlang: I think that the concurrency
models offered by Erlang are extremely interesting, but I'd rather
get there through expressive types. That said, there is
very promising research going on to bridge the gaps between Erlang's concurrency and Idris' dependent types
that I'm interested in checking out in the near future.
- Scala: I've heard enough about the
complexity arising from a combination of moderately expressive types
and object-orientation, so it's not on my list for the moment,
though it certainly does have some compelling characteristics.
As a programmer, I think many times each week that I'm lucky to be in
a field where the horizon of things to learn is so broad. It requires
strong prioritization to maintain focus on our particular areas of
interest. There is a wide range of languages, from Haskell, which is
an extremely pragmatic tool that we use every day to rapidly build
working systems, to Idris, which is introducing compelling concepts at
a dizzying rate for the next generation of programmer tools. I'm
excited by this path that I've found for my current study of tools and
theory, and I hope that some of these ideas have also piqued your
interest!
Credits
A big thanks to Stack Builders Juan Pedro Villa, Luis Laverde, and
Lori Leitgeb for providing useful suggestions on a first draft of this
post.
Published on: May. 15, 2015