I created HnEasy.com a few weeks ago. My objective was to give an easy way to find the best Hacker news posts and comments since 2007. I use it to catch up on hacker news every few days. I hope you find it of value.
I second this. I'm a scientist who also happens to program (as more of us are finding we need to do). The two languages I use the most are R and Python. Most of the time, I don't even give Ruby a second thought because it seems to be primarily geared towards web development. In general, I shy away from web development, but I know that Python is more than capable if I wanted to try it out. There really doesn't seem to be any incentive for us to learn Ruby.
Ruby also has the reputation of being much slower than Python, and speed is crucial in the scientific community when it comes to handling data-sets in the range of terabytes.
Edit: Also, when it comes to computer-technology the scientific community outside of CS generally lags far behind what CS is coming up with - for example, blastn, the most commonly used algorithm in biology for nucleotide-comparison, still doesn't have a proper 100% multithreaded solution.
There is also no adaption of NoSQL or any other of the "modern" data-storage solutions.
> Ruby also has the reputation of being much slower than Python, and speed is crucial in the scientific community when it comes to handling data-sets in the range of terabytes.
If we are talking computation speed, the difference between Ruby and Python is a floating point error.
> There is also no adaption of NoSQL or any other of the "modern" data-storage solutions.
NoSQL solutions are "modern", but that doesn't equate to being better. I am more than familiar with almost all major NoSQL players(redis, mongo, couchdb, cassandra etc), and for 99% of the cases, RDBMS is better solution. There is no adoption in scientific community(or most communities) because there isn't a clear benefit. I neither try to use RDBMS as a key-value store, nor do I twist my relational models to fit into a NoSQL offering(mongo makes the translation easier, but lacks things I need).
I have to agree that this is a stellar combination. Another huge win with Python, for me at least, is RPy. It's a great way to clean up a bunch of R scripts into one centralized python file. Makes it much easier to create command line tools than doing it in pure R.
Have you ever worked in the finance industry? Those guys will kill their own family if it will get them a $5K raise.
I worked in the california mortgage industry before going to college. These guys would convince families living paycheck to paycheck to buy/refinance REALLY expensive homes. If they were on a 30 year fixed, we get them on an option-arm. If they are on an option-arm, we get them on a 30-year fixed.
This is all typical finance stuff. But here comes the kicker--they would actually outright LIE about interest rates and had a few shady notaries to back them. They would say you have a 1% interest rate (for 30 years) when it was really a 5 year option-arm and screw people. The worst part is, CA has some sort of law that protects mortgage lenders from unhappy customers after 5 years time (exactly when the 1% interest rate would fly to the market rate). Needless to say, several people left the company when we found out. Some folks reported them to the BBB--I don't know what happened to those scumbags though. I really hope people like that stay out of science.
> I don't know what happened to those scumbags though.
Unlike the S&L crisis, exactly none of them got indicted and all of them got bailed out, except Bernie Madoff whose schemes were totally orthogonal to the financial crisis.
Not that your point of people taking an "at all costs" approach to career advancement is missed, but I'm not sure about your analogy re: the finance industry. He's an engineer, not someone trying to close deals on mortgages or equity loans, none of that is his domain.
I work in finance software (specifically regulatory compliance) and it's arguably one of the most supportive and communicative industries to be on the engineering side of.
Until you start having to deal with compliance regulations, then it becomes a chore.
I was in a group doing arbitrage. I can't say anything first-hand about mortgages.
Real-estate people (not including architects) are scummy. All of them. It's the filthiest business around. Real-estate finance people are bound to be scummy. I agree.
I wasn't saying, "There are no slimeballs in finance". I just think that, from a boots on the ground perspective, there isn't much difference between Wall Street and the hottest startups of VC-istan.
A lot of times, I really don't think there is a need for a whole new language. I use R and python for scientific computing all of the time. There are packages which have been well validated and a community of folks who support the software. Making a new language may be interesting, but if it doesn't really bring anything new to the table, it's just asking for a micro-niche user base (just think of the million and one web frameworks out there).
Julia looks interesting, but I don't see anything that makes me jump up and say, "I want to use that!" Everything I have seen so far can already be done with R, Python, or a combination of the two. If there are a few minor drawbacks to any process in R or Python, I would rather live with it than learn yet another language. Speed is not an issue -- if it is then I am likely coding incorrectly. If I have coded correctly, then it is worth taking the time to create a C library (and since everything else is in perspective, this is just "monkey coding" and never takes as long as we think).
I wish all of the folks who are bright enough to create their own language would voice their wants and needs to the existing coding communities to see if their needs can't be met rather than making something brand new. This kind of community interaction is crucial for a language to mature. Wouldn't you rather have a few very mature languages rather than a million young ones (each of which has its own pros and cons)?
Languages like matlab, R and Python (via numpy), let you do efficient computations as long as you can let them happen in the core, that is written in C and Fortran. This is very often possible, but in some cases you find that it is not, and then it will either be very slow or you need to write a C module for it. None of these languages is designed to make it easy to make a compiler/runtime that is from the ground up efficient. They are instead a rather inefficient interpreter with a really good library. This is where Julia differ. It is designed exactly to be efficient from the ground up.ground up.
I've only tinkered with objective-C and I'm not even comfortable saying I "know" the language, but does anyone else think some of this code is surprisingly concise?
There's some (none so mature as django or Rails)... take a look at Noir (http://webnoir.org/)
However, the Clojure philosophy seems to be trending towards building your own composition of highly composable micro-libraries, rather than being handed one monolithic framework. It works very well, but does have the side effect that there isn't real "one stop shop" for beginners.
And when you're designing a webapp (or any app) in Clojure, you'll notice that you have a much higher degree of freedom regarding how to do things. There's no "one true way" the way there is with Rails. Again, this is extremely powerful, but it makes the next step somewhat less obvious for beginners.
I wrote Noir primarily to help people new to Clojure to get up and running really quickly. It provides a simple set of core abstractions that allow you build whatever you want. As others have said though, I don't think something like Rails or Django should exist in Clojure. Large frameworks like those are very limiting and I would argue don't really end up letting you build real apps any faster than you can using simple composable libraries.
There's immense value in the approach the Clojure ecosystem has taken. For example, how many other places can you seamlessly swap out your webapp's server from something like jetty (thread-based) to tomcat (battle-hardened) to netty (NIO) to ...
Nearly everything web in Clojure is built on Ring. I personally like using Compojure (which bundles together clout for routing and a bunch of good defaults for sites or web services) and Enlive (for templating). This is the stack we describe in depth in the web portion of the book.
Frameworks are largely not used, at least in the monolithic, un-composable way that 'frameworks' generally are in other languages. This is what makes it so easy for alternative conceptualizations of the problem to come about (i.e. Noir, which also uses Ring and Compojure, but with different defaults, some macro sugar, and hiccup for templating), and themselves to be mixed/integrated with other web codebases. For example, you can trivially compose a noir application with a couple of "low level" Ring handlers with another app written using Moustache and stringtemplate.
That is all to say, yes, you'll find all the pieces you need for web development.
If you love Java and want a magnitude of libraries, and don't have any particular attachment to Lisp syntax or dynamic typing (which 'love Java' seems to imply), then it would benefit you to check out the Play [1] and Lift [2] frameworks as well. Lift is Scala-based but is 100% interoperable with Java libraries, and Play apps can be written in either Java or Scala and is also 100% interoperable with Java. Play is quicker to learn, Lift has superb built-in security and very easy Ajax/Comet.
Thanks SkyMarshal, I use Play all of the time. I've never tried Lift though--I might give that a go soon as well. I'm curious about whether or not there is a framework of Clojure however. From the responses, it seems like Noir is the popular solution these days :-)
Ok, cool. It wasn't clear whether you wanted Clojure-only, or might be interested in other acceptable JVM-based ones. As for Lift, the folks on the mailing list (liftweb @ Google Groups) are very helpful when it comes to figuring out whether Lift is appropriate for any given project or not (basically, do you specifically need its features and have a developer team with the ability and bandwidth to ramp up quickly enough for your deadline).
PS - nothing against Clojure, not trying to hijack this whole thread, just add to it. Clojure + Scala makes the JVM a truly awesome platform. The power and features of both Lisp and ML, the brevity of both.
Note that everybody says Noir because Noir is the only thing that could be called a 'framework'. I pretty sure most clojure webapps are not written in Noir itself, people use all kinds of diffrent combinations of librarys to gather alot of the feature a framework would give you.
There's Noir, which is more minimalistic that Rails, but it's easier to customize as a result. I've had some fun playing around with it, but I personally haven't used it in production yet.