You're absolutely on the right track. As startups struggle to hire, new startups should be looking to off loading more and more of their work to more productive programming languages.
You're absolutely on the right track. As startups struggle to hire, new startups should be looking to off loading more and more of their work to more productive programming languages.
Our entire server codebase, baring a few external libraries, is Scala (working with Lift) which has been an awesome experience but there is a nagging doubt in my mind that if/when we need to start looking to add in developers we will either need to invest in cross-training a java dev or end up paying out probably more than we could/should afford to get a seasoned java dev who trained themselves in Scala already. If over a short period of time your choice gets some major traction then it will work in your favour, but if not then you could be out in the cold or risking employing someone with no real provable history.
Remember in business there is no "cheap" or "expensive". There's only "worth the money" and "not".
Why? Because learning cool tech and Getting Stuff Done are two very different things.
While it is true that most developers suck at writing code, knowing Scala doesn't tell me whether you:
1. Have enough discipline to do the boring, tedious parts of your job 2. Know how to prioritize tasks 3. Can write easily maintainable code 4. Can work well with others.
Technical ability is only one part of an employee.
"Personnel is one area in which OCaml has been an unmitigated success for us. Most importantly, using OCaml helps us find, hire, and retain great programmers."
How long it takes to set up a dev environment and push to cloud service?
With appengine, 1) I sign up in 5 minutes, 2) clone an app in python or Java, 3) use my favorite free ide to edit the code 4) appcfg.py update
Also, if I don't have any of the tools like git I just type: sudo apt-get git-core
Heroku on AWS is just as easy.
Can you provide a link showing how easy it is to get started with F#?
Also step 2 sounds like magic and a recipe for disaster. Clone an app? What, with all its settings? Random library includes you weren't expecting?
Don't confuse well trod paths with new roads, closure and F# are both new roads, you'll need to do a bit of work yourself.
Also visual studio has a free edition these days.
Anyway, my point is don't compare apples to oranges when the author said he can't use apples.
It's my understanding it's not so easy to do that kind of learning and experimentation on Windows.
Go to http://www.asp.net/get-started.
Although I would recommend going down the MVC route as asp.net forms are sucky. http://www.asp.net/mvc
I know there's an anti-MS tendency round here, but fast experimentation is just as easy with MS these days as it is with everyone else.
The only gripe I've got with MS these days is that they seemed obsessed with videos, which are irritating as you can't go at your own pace (i.e. faster) and it's a nightmare when you just want to find that way of doing x that you remember seeing in the video but not at which point.
It's much worse with Java. Instance startup times are a lot higher.
> Clone an app? What, with all its settings? Random library includes you weren't expecting?
In Python, at least, you just edit app.yaml and change app name and version. If there is a settings file, you also edit it. And libraries that are not provided by GAE should be included in the app, so, you are bundling dependencies Java-style.
> Also visual studio has a free edition these days.
Unfortunately running Windows takes away many nice things for developers.
>Unfortunately running Windows takes away many nice things for developers.
This. Having essentially one choice in monolithic IDE which doesn't really provide anything novel you can't get elsewhere, without a nicely integrated POSIX shell and all the useful stuff that comes with it is a net lose IMO.
http://www.mono-project.com/Release_Notes_Mono_2.10#Language...
Now I just need to find the time to try it out...
I will agree though that F# is a beautiful language, and am hoping on getting everyone else at work on board so we can start using it more for our development.
The F# mono implementation is somewhat slower than the .Net implementation though, so there is that caveat.
On the other hand, F# does use less memory.
http://shootout.alioth.debian.org/u32q/benchmark.php?test=al...
http://shootout.alioth.debian.org/u32/benchmark.php?test=all...
For whatever it's worth, if you like Clojure, use Clojure. If you like F# use that. If you like Perl, Java, PHP, use those. But, if you're going to consider other options hopefully the FUD doesn't get in the way ;).
Most FP communities (incl clojure) have devote non-negligible blocks of time to code review and benchmarking to make sure that at the very least poorly written code isnt' submitted (and the right hotspot knobs are on).
http://groups.google.com/group/clojure/browse_frm/thread/d27...
I pointed out how comical it is for someone to declare they dislike (who knows why?) the benchmarks game, and then present the benchmarks game to others as a reliable source of information.
(However, although you provided a different URL you did not point out that you thought the parent had linked to the wrong comparison.)
You didn't just "correct" the link to show F# and Clojure.
You changed the link from quad-core to single core and that reduced the difference shown between F# on Mono and Clojure.
Look, the results aren't usefully different: http://shootout.alioth.debian.org/u32q/benchmark.php?test=al...
You do seem to be using the what you dislike and what you are not presenting as reliable to suggest "F# on mono and Clojure (which is slower than plain Java) look pretty similar".
If you really dislike the benchmarks game, don't look at the benchmarks game and don't show it to other people :-)
iirc Andy Fingerhut started benchmarking Clojure programs more than a year before Clojure was even included in the benchmarks game.
https://github.com/jafingerhut/clojure-benchmarks
Here's another thread "Comparing clojure speed to java speed" which has nothing what-so-ever to do with the benchmarks game -
http://groups.google.com/group/clojure/browse_thread/thread/...
(Incidentally, those "hotspot knobs" made the Clojure programs slightly slower but forced collection of the temporary objects that were showing up as much greater memory use than the Java programs.)
I never attemped to actually use Mono, so please correct me if I'm wrong, but if I understood correctly, Mono has to duplicate all .NET frameworks, libraries and tools, which means Mono
a) is not complete (e.g. Silverlight, VisualStudio)
b) will hardly ever keep the pace of development of Microsofts implementation (simply due to resources).
Mono may be viable if you are happy with a subset of the .NET ecosystem, but I'd really feel more comfortable if I have access to all of Java with Clojure. Chances are you do need that library...
Mono is a complete implementation of the C# specification, additionally, the Mono project has ported many .Net libraries.
Moonlight is the Mono version of Silverlight. Visual Studio is an IDE, and doesn't have anything to do with Mono vs .Net (in the same way IntelliJ IDEA has nothing to do with Java portability). You can write code in Visual Studio and compile it with Mono with no problems. You can also use MonoDevelop on OSX and Linux.
The time between Microsoft releasing new versions of .Net / C# and the Mono implementation is very small, usually weeks but sometimes only days. Unless you need to work on the bleeding edge right now, I don't think that it really makes much of a difference.
Yes, you can write C# in a way that isn't portable, especially if you use libraries that are OS specific. You can do that in Java as well (or any other language). Just look at all the libraries that require epoll or kqueue - those won't run on Windows no matter what language they were written in.
It's unfair to say that Mono requires you use a subset of the .Net ecosystem. If you want to write cross-platform code, you will always be constrained to a subset of the libraries.
C# is a nice language, especially with Linq (which is in Mono). You should spend a weekend with it sometime to form an opinion :D. MonoDevelop works fine on the mac and is free.
But the thing is if you go with windows, you're eventually going to have to support linux too just to get a the wealth of open-source codebases like say Redis. I mean its certainly possible to run Redis on windows via cygwin but you're 32-bit limited, and its a pain to actually install and get everything working.
On Fedora it's "yum install redis", and you're done.
to somebody not already a C#'er is the cost of Visual Studio: You really want that concurrency profiler, which I think is only in the Ultimate SKU (for which MS is giving away licenses in Bizspark, dreamSpark).
And a fair number of Csharpers I've met recently (admittedly a small sample) will tell you FP and the parallel/concurrent libs in C# are good enough: TPL, the .NET 5 Async lib (Basically they'll tell you about all the C# stuff in Petricek's book, without looking into what F# can do for them.