If I were to start my career from scratch in 2014 I'd pick F#, and keep an eye out for Rust.
I feel like the near-reliance on Windows is the biggest issue for F#. Haskell fits the Unix environment a lot better.
Last I checked the F# supports was still a little crufty (over a year ago) -- but if they really get the F# support to be top tier, I will have to return and have another look.
For others: PHP allows you to increment strings, and if you try to do that, it follows Perl's habits (http://perldoc.perl.org/perlop.html#Auto-increment-and-Auto-...):
"If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^[a-zA-Z][0-9]\z/ , the increment is done as a string, preserving each character within its range, with carry..."
So "0wz"++ becomes "0xa", "0xa"++ becomes "the hexadecimal representation of 10, plus one".
I learned something new today.
Reasoning: 0wz++ = 0xa (converted from hex to dec) = 10++ = 11
Not sure why 0wz++ = 0xa, but if you increment strings I'd expect oddities (or some sort of ascii increment).
If your goal was to be cool, then obviously PHP would be a terrible choice.
Seriously, I switched all of our development from Java/Tapestry/etc. to Groovy/Grails a few years ago, and really couldn't be happier with the decision. Grails isn't flawless, but it mostly "just works" and makes my life SO much easier than before.
No, it isn't the "flavor of the day" like node.js or what-have-you, but it works, it stays out of the way, and gets the job done. And it lets me leverage the decade plus of experience doing Java that I previously experienced. What more could you ask for?
>Though my tip though for the long term replacement of javac is Scala. I'm very impressed with it! I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy. -James Strachan
OTOH, I have generally been a fan of languages with static type systems, and I believe Scala tends to be a bit more performant than Groovy. I'll probably revisit Scala at some point, but right now Groovy is working really well for me.
Happy you've found a language that works out for you! You're certainly a prolific promoter of Groovy here at Hacker News...
7 days ago: https://news.ycombinator.com/item?id=7360491 "Most of our code is in Groovy"
20 days ago: https://news.ycombinator.com/item?id=7278426 "Assuming there is a next startup and it's anything like the current startup, then I'd probably go with Groovy again. Groovy has worked very well for us."
2 months ago: https://news.ycombinator.com/item?id=7042329 "We've been using Grails and Groovy extensively (almost exclusively) at Fogbeam Labs for about 3 years now, and I am very happy with how that decision has worked out"
2 months ago: https://news.ycombinator.com/item?id=7013785 "Anyway, if you already know Java and have some familiarity with that world, I can't recommend Groovy and Grails highly enough."
2 months ago: https://news.ycombinator.com/item?id=7011934 "if you asked me to write a non-trivial program starting today, and I had to optimize for productivity, I'd pick Groovy."
Agreed re: many ways to do one thing, Scala's no Python ;-) Readability is a matter of experience. From the outside looking in some Scala code may look fairly dense, but the same can be said of Haskell. Groovy wins in this department, no argument there, any Java dev can grok Groovy.
That said, Rails, or any language developers are more familiar with, can be faster. At that point, I'd argue even static HTML pages might be one of the fastest MVPs to put together...
- If you do know programming languages, use the one you're best at (quicker to launch)
I'll refer to my previous argument for all of this: https://news.ycombinator.com/item?id=6169120
What device levels are you trying to get in front of?
Android seems like a "no brainer" until you start looking at the details... For example, if you cut out all "cheap shit 2.2 android devices" and focus on new(ish) Android 4.0> things get REALLY murky... In the US iOS still holds a lead over Android in those markets; in Europe Android is ahead, but then you have localization to deal with.
Additionally, Android might have an edge in some markets, but the fact that iOS users actually PAY for apps also makes a big difference.
The point is that Android is a sensible choice but it's not an automagic choice, nor is it as cut and dry as it appears.
Is your app primarily for middle-aged women (mom's) living in the U.S.? Is it for teenagers and young adults in the UK? The more specific you can get with your customer profile, the better your decisions will be. The makeup of some user populations can be very different than the broader market. It would be unfortunate to invest in building an Android app, only to find that your soccer-mom customer base runs 80% iPhone (just an example).
Objective-C is not a language option, but maybe because it's not a backend language? If iOS/Objective-C people voted for C++, they only have 3% now. So ~25% people want a fantasy iOS app but only 3% know native iOS = Objective-C?
16% of people think Javascript is a backend language? Hope those are votes for Node.js?
Papa just found himself a brand new hammer. Now to go find some more nails.
On the code side, I already know JS pretty well, though mostly from a UI-manipulation side. It was more like extending knowledge I already had, than having to learn something completely new. The slowest part was trying to determine which modules met my needs, then sorting through the myriad of somewhat confusingly- (or just plain badly-) written documentation.
The best part was being able to use the same language end-to-end. When I deal with PHP, there is always some context-switching between it and the other parts. This project flowed much more naturally and left me quite enthusiastic about whatever the next one is (I get a lot of latitude in devising solutions).
Some of the code is probably badly-written and I'll spend some time cleaning that up (first project in Node) for an update and there are still a couple of parts to write (shell scripts, mainly). There's also one key part that no-one seems to be able to solve (MD5 in Mono won't match the MD5 from JS), but we'll figure that out as we can ignore it, for now.
Really, given all the interruptions I faced during the process, going from zero to finished in two weeks of eight-hour days (including having to learn some things) feels pretty good.
The same project in PHP would have taken about the same amount of time, without having to learn new things. Admittedly, I'm a slow coder because I want to make it right the first time so I don't have to f* with it later, not just have a running solution. I'm not as thrilled with PHP as I used to be and half the time, I feel like I should reinvent the wheel, rather than just using a lib.
That's my informal review of the experience. Take it for what it's worth.
Growing very fast? Python, with C for high-performance components. Python's got great libraries for everything, and hiring Python and C programmers wouldn't be hard because those languages have a lot of users.
Growing typically fast? Clojure. Drop to Java if needed for extremely high performance demands, or if I need to hire fast.
Growing at a leisurely pace? I'd be tempted to try Haskell (and possibly switch to Clojure). It's badass, it'd be fun to learn, and some of the smartest people I know are big fans of it. However, with the "leisurely pace" (R&D) I'd be tempted to hire people only as smart as I am and let them use whatever they wanted.