In the meantime, in the alternative universe I wish I were living in, the same thing happens to the company behind the widely used Clojure programming language...
The commercial entity behind Clojure, Clojure/core is not modeled in the same way as TypeSafe. Instead, its main focus (at the moment at least) is providing training[1]. The truly commercial entity in the Rich Hickey universe is Datomic and as a result also works under a different model than Typesafe.[2]
I think Rich knows that you can't sell a technology or language, you have to sell a product. That's why he did Datomic.
That said, I write Scala at my current job and am super excited that Typesafe got this funding. Please, Typesafe, follow Rich's lead. Make a real product backed by a technology, not a bunch of libraries! I want you to be around for years to come.
p.s. we're hiring. You don't even have to be super smart, just be passionate. owreese AT gmail DOT com
Typesafe has a product; the Typesafe Stack. It's not just "a bunch of libraries". Add to this the Typesafe Console that you get as part of it (http://console-demo.typesafe.com/) and I think you have a pretty nice and complete product.
Correct me if I'm wrong, but I believe that they tried that with "Cloud Akka". I do not know the details as to why, but I believe that tech is now open source.
That's definitely one reason. I'm willing to bet the other reason is that he believes that the world needs Datomic. Because it really, really does. His talks make it clear that he deeply understands that.
The world needs another piece of closed source, proprietary infrastructure written in an obscure language?
My number one rule for infrastructure software: never, ever build your business on closed source software. Doesn't matter if it's free, or costs tens of thousands of dollars per month to operate, or is written by a superhuman like developer. You will be hurt Every. Single. Time. if you do.
> another piece of closed source, proprietary infrastructure
No, the world needs a modernized view of the relational database model.
> an obscure language
The APIs are Java-first, Clojure-second. The implementation is a mix of the two. Java isn't that obscure...
> never, ever build your business on closed source software.
I agree with that. Ask any one of my new coworkers how they feel about this company's dependency on Oracle and they'll tell you that they learned that lesson.
I'm not proposing that you take a dependency on Datomic for your startup. I'm saying that there are a lot of enterprises who have no choice, but to take dependencies on things they don't understand because they aren't software companies. Microsoft's entire enterprise business depends on people who want to outsource infrastructure to somebody else, and those customers pay enough money to secure the future and direction of that infrastructure. Rich Hickey & co can capitalize on that group of people. He gets to help them and they'll pay him for it. Along the way, database systems will adopt the improvements and new ideas that Datomic is leading the way with.
This will probably improve Clojure adoption in the long run. It's much easier to go from learning 1 to 2 functional programming languages than it is to go from 0 to 1.
I'd imagine that's the idea behind Datomic, though less direct: create product, get funded/income, make both Datomic and Clojure better in the process.
'Knowing Perl' is a rather hard thing to do when the list of completely ad-hoc implicit variables and hidden context-sensitive surprises is seemingly endless.
Your grasp of English seems to include subject-verb number agreement, and I suspect you can handle pronouns. You'd do just fine with Perl.
Yes, lots of tutorials explain it badly, and yes, lots of people say "Why should a programming language take cues from natural language?", but implicit variables and context are concepts that primary school children have mastered. They're not that difficult.
Yeah, that was not my point. These aren't but idiosyncrasies of Perl's design, and to model itself on constructs which evolved without direction and which take years to master, just to save a keystroke or two once in a blue moon, is a rather questionable road to take.
Seriously, in what other language don't you ever finish discovering what's on the default namespace, what side-effects any given statement, or hell, expression has, or which syntactic forms are supported, and on and on?
Well, PHP, but we know what the connotations of that are.
And by the way, I'm doing rather 'fine' in Perl, if not for the ever-present worrying about type mismatches (particularly arrays), the frustration of how dirty many operations are (unless you are using a recent version, regex substitution must mutate a variable), the laboriousness of the stock error handling mechanisms (make your own stack trace!) and so on.
You mean Clojure is unsuitable for writing quick scripts that get things done with the minimum of fuss?
The Perl one-liners that actually resemble line-noise get far more done than any of the examples given above. Perl one-liners that do the same as the above examples are actually quite legible.
It's not Perl all over again. Have you even _read_ those one-liners?
Those are neither line-noise, nor fickle one-line imperative solutions.
On the contrary, they are elegant and easy to read --you just have to understand the basics of functional programming, map, reduce, filter and the like (which, in themselves are trivial concepts).
are so easy and clutter-free that what I cannot even begin to comprehend how someone would accuse them of the bad readability that characterises the "Perl one-liner".
to so-called line noise code seems reasonable enough. As with Perl, if you immediately know what all the punctuation means and what the underlying structure of the language is, it’s concise, but if you don’t, it’s quite a mess of random-looking symbols.
For comparison, here’s a Haskell version, which in this case has a more intuitive syntax, IMHO:
filter (>60) [49, 58, 76, 82, 88, 90]
And here’s a version in Scala, with a more explicit function value:
True enough, but I figured filter was widely known and partition-by was perhaps a little esoteric. The syntactic argument would be exactly the same if you used an equivalent of partition-by in the other languages.
Really? There's only two bits of punctuation there, and they don't take much to explain: #(...) is an anonymous function; % is the argument to that function. (I'm not counting > because ... it's just the greater-than sign.)
The Haskell version doesn't actually do the same thing. The Haskell returns [76, 82, 88, 90]; the Clojure returns ((49 58) (76 82 88 90))---it groups the input according to the result of the function, it doesn't just filter it.
It’s not an ideal example of partition-by anyway, because this particular input has all the values where the predicate returns true together. As you have shown, the result in this case is just to divide the list into the values that match the predicate and those that don’t. This is actually what the “partition” function does in some languages, including Haskell and Scala. However, in general, partition-by in Clojure does more than that and is more like a kind of split algorithm, which this example didn’t demonstrate.
In any case, my point here was about syntax, so I used a standard and easily recognisable function in the other languages instead of getting bogged down in trying to reproduce the exact same behaviour. Apologies if this wasn’t clear.
I initially disliked the square brakets as well, but I got over it quickly because of the utter happiness I get from writing Clojure code in general.
FYI, the square brackets are not an arbitrary deviation from lisp syntax. Square brackets are Clojure's vector syntax, the use of square brackets in function and macro definitions reflects the fact that they are actually vectors.
Not sure what you meant with your objection to slashes though.