Study Julia with me

Introduction and welcome

Greetings! I work on stochastic optimization and simulation problems and happen to have extensive background in both “high productivity” and “high performance” programming languages. I had my first peek at Julia a few years ago. The concept was great and the new language certainly had a real, uncrowded niche to fit in: something that promised to be both high productivity and high performance. But right then it was brand new and the ecosystem just didn’t feel organized or stable enough for “production use”.

A few years later, Julia v1.0 milestone has been achieved, there is an IDE or two, university classes are abandoning MATLAB/octave in favor of Julia, and new Julia books are coming out with increasing frequency. Now it appears to me that Julia is much more mature and ready for another, more thorough, examination. For this reason, I invite you to take part in this study group.

Purpose

What do we plan to get out of this study? A couple of things, at least:

  1. Julia does not look like a radically new programming language to me. Rather, it appears to combine many of the best and most modern aspects of language design in order to support productive scientific programming. I would us like to understand the main paradigms in Julia so that we can judge where and when it would be the most effective choice for research work.

  2. As a component of overall productivity, I care about language performance in both interactive and parallel/distributed settings. I would like us to put Julia speed claims to the test.

  3. Julia is still quite new (v1.0 just shipped in 2018) and good study material is a little hard to come by. We could look at some existing open-source tools for operations research and machine learning as examples of working Julia projects, and perhaps prototype a few of our own in the process.

Study agenda (open to feedback)

At a high level, these are the topics I’d like us to cover (not necessarily in the order shown and subject to feedback and suggestions from the group):

  • language design and capabilities: core types, generic functions/multiple dispatch, metaprogramming, parallel/distributed programming, etc.
  • general purpose tooling: IDE, plotting, debugging, profiling, etc.
  • native support and tools for OR, ML, and statistics: dataframes, built-in linear algebra, JuMP, JuML, etc.

Each week I would us like to formulate a practical question or need and investigate a solution (or lack thereof) within the Julia ecosystem, at which point I will document it here. Some example questions off the top of my head are:

  • What’s this I hear about Julia being “fast”? How does it compare with Python or R? How about C++?
  • I have an optimization problem that needs a custom algorithm not covered by off-the-shelf solvers – should I consider a (pure) Julia implementation? Conversely, I have a bog-standard LP model – is there still an advantage to working with it in Julia?
  • How do I develop a Julia package, or, more generally, have workflow that’s good for research that I want to share with colleagues?
  • Julia is marketed as good for parallel computing – what’s the reality of this claim?
  • … and so on, as long as there are useful topics to explore.

Prerequisites

I think it would be helpful to have some experience with one or two of the languages that Julia aims to (will eventually?) replace: R, Matlab, Python, and others of that ilk. Julia also borrows from JIT’ed languages like Java, so familiarity with those can only help.