377 karma · joined November 6, 2010
(1) Clojure core itself and readjust to functional programming (2) Understand how ClojureScript is translated into JS in order to do interop which will absolutely be necessary for any real project (3) Understand Clojure on the JVM in order to understand/write macros
I didn't actually consider EDN. I haven't see enough of a win over JSON to consider it, but that could just be misinformed.
We don't use an MVC or components type framework, but ideas about how to setup those abstractions are percolating.
Also out of the box, you get a repl to live test and evaluate template functions and data structure. It would only take a few lines of emacs lisp to take a string from the repl and pipe it through XHTML validation.
You can certainly take that approach in JS. domo-js isn't quite that, it would look more like:
["html" ["head" ["title" {class: "class1"} "Welcome to Domo"]]]
As we say in the post, you can totally pull all this off in JS, but I think if you're going to be manipulating nested data structures, it's better to have immutable data structures built in and the suite of functions that can manipulate them. Clojure makes building template structures really easy: persistent data structures, map/seq argument destructuring, keywords, sets, etc.
To me and the team, most of our functions are making Clojure data structures and thinking of templating as converting data to dom elements or HTML strings seems the most compatible with that way of thinking. But both are definitely valid.
We'll probably add dom selectors and/or manipulation and wheter it's the same library as dommy (github.com/prismatic/dommy) or a different one will depend on if the selectors borrow the same abstractions and syntax as templating.
Other than macros and the VM interop (ugh I think (.-length str) is an eye-sore for property acesss), the core of the language is close enough that I Don't think of it 90% of the time.
You can actually use all the libraries you mentioned (jQuery, underscore) from ClojureScript. What CLJS really brings to the table are a set of abstractions and data structures that make it easier to write strong reusable functional code. In fact, alot of underscore comes built into CLJS and I think much of what jQuery buys you can be handled as a good CLJS library (but more on that soon!)
The current app is just the first step in a longer roadmap of building smart products. Currently, we're great at discovering new articles, but in the future will include discovering relevant apps, music, movies, and local events. Don’t be too surprised if we’re on your TV soon.
So to answer your question yes, you need a formal ML background but you need a lot else. Luckily, you can pick up all these skills from online courses, real world building, and a lot of self study and improvement
In terms of industry research on the whole and publishing. It is true that you can't publish everything, but look at Google. Arguably some of the influential systems papers of the last decade or so have come out of Google. Google doesn't publish all the details of their search algorithms, but it turns out that because they address real-world problems they've done enough great stuff that some of it can safely be shared without endangering their moat.
Another aspect to consider is that while industry publishes less, we do tend to churn out useful open-sourced (Prismatic will definitely be doing that soon) that is of at least comprable utility to people out there as most papers.
There are many reasons why this is difficult, but the primary obstacle is the tenure system.
The core NLP behind Prismatic is topic modeling; we don't use anything off the shelf, but something crafted pretty specifically to our needs.
We do model user similarity based upon interest overlap and social graph analysis. So we know how likely you are to care about what someone in your extended network shares.