In the second background, the common underlying story changes a little bit. You are someone who knows how to program and probably does this for a living. You are familiar with one or more languages and can easily switch between them. You’ve heard about this new flashy thing called “data science” and you want to jump on the bandwagon. You begin to learn how to do stuff in numpy
, how to manipulate DataFrames
in pandas
and how to plot things in matplotlib
. Or maybe you’ve learned all that in R by using the tidyverse and tibbles
, data.frames
, %>%
(pipes) and geom_*
…
Then, from someone or somewhere you become aware of this new language called “Julia”. Why bother? You are already proficient in Python or R and you can do everything that you need. Well, let us contemplate some plausible scenarios.
Have you ever in Python or R:
Done something and were unable to achieve the performance that you needed? Well, in Julia, Python or R minutes can be translated to seconds3. We reserved Section 2.4 for displaying successful Julia use cases in both academia and industry.
Tried to do something different from numpy
/dplyr
conventions and discovered that your code is slow and you’ll probably have to learn dark magic4 to make it faster? In Julia you can do your custom different stuff without loss of performance.
Had to debug code and somehow you see yourself reading Fortran or C/C++ source code and having no idea what you are trying to accomplish? In Julia you only read Julia code, no need to learn another language to make your original language fast. This is called the “two-language problem” (see Section 2.3.2). It also covers the use case for when “you had an interesting idea and wanted to contribute to an open source package and gave up because almost everything is not in Python or R but in C/C++ or Fortran”5.
Wanted to use a data structure defined in another package and found that doesn’t work and that you’ll probably need to build an interface6. Julia allows users to easily share and reuse code from different packages. Most of Julia user-defined types and functions work right out of the box7 and some users marvelled upon discovering how their packages are being used by other libraries in ways that they could not have imagined. We have some examples in Section 2.3.3.
Needed to have a better project management, with dependencies and version control tightly controlled, manageable, and replicable? Julia has an amazing project management solution and a great package manager. Unlike traditional package managers, which install and manage a single global set of packages, Julia’s package manager is designed around “environments”: independent sets of packages that can be local to an individual project or shared between projects. Each project maintains its own independent set of package versions.
If we got your attention by exposing somewhat familiar or plausible situations, you might be interested to learn more about this newcomer called Julia.
Let’s proceed then!