You want a fast car, but don't care much for having an aerodynamic design, hmmm..
EDIT: In retrospect I now think he means he wants to be able to create the project fast, and this is not about performance.
You want a fast car, but don't care much for having an aerodynamic design, hmmm..
EDIT: In retrospect I now think he means he wants to be able to create the project fast, and this is not about performance.
In dynamic programming languages it is definitely easy to get shit done, at least initially.
However as a project progresses to the point where a lot of refactoring takes place and there's more than a handful of people working on it, a good static typing language will make sure that shit keeps on getting done and things won't break due to a subtle typing error. Things will be caught by the compiler even before you get running the test suite.
In other words, automatic program-correctness check is a crucial feature if project goes larger. And type check is actually one of the simplest, easiest and fastest way to archive that.
But most dynamic languages doesn't provide type-check. Really sad.
Adding type annotation on dynamic language is a kind of best mix of two worlds, and Julia seems pushing this approach even further - JIT static types from type annotation.
irb(main):001:0> 1 + "hello"
TypeError: String can't be coerced into Fixnum
from (irb):1:in `+'
from (irb):1
from /usr/bin/irb:12:in `<main>'http://scholarworks.umass.edu/cgi/viewcontent.cgi?article=10...
I think what he means is that 'safety, type systems, homoiconicity...' may or may not be important, but he's more worried about the end result.
So if other people want to work on those things, good for them. He's going to be working on his own stuff.
And probably few buyers who want fast cars care about aerodynamic design per se -- they care about speed; sure, if better aerodynamics is what's necessary then so be it, but they would also prefer a fast car with poor aerodynamics and a huge engine to the very aerodynamic and fuel efficient, but slow one.
Julia's target audience is technical computing, and a large fraction of software in this space is built to solve a particular problem that only might matter for 6 months or a year. You might be trying to simulate the behavior of an experiment you just designed, for example, or trying to analyze a very specific property of a data set. These codes are often very tightly coupled to the scientific problem, and are only ever used in the context of a particular short-lived project. You do the experiments, write the paper, and move on with your life.
To be clear, I don't think Julia itself encourages this pattern any more or less than another language. But it's a very common pattern for scientists, so they often don't care about long-term maintainability.
Granted, this sometimes comes back to bite them later, if they discover the old code is good for a newer experiment, or they need to go back and re-validate results. But this doesn't always happen, and it's not like they're running a live service with customers -- when they finish a given paper, it's actually not unlikely that no one will ever need to use that software again. It's not easy to argue that they should care about maintainability when there's a decent chance this is one-off code.