I'm suspicious about people who put too much importance into their language choice, maybe because I'm tempted to be one of them. You can love beautiful programs, or programs that get things done.
The former people tend to gravitate toward things like Haskell, which is very pure, conceptually beautiful, and feels like using the LHC to crack nuts. But hey, you're using LHC, great fun.
The latter will pick whatever ugly PHP framework is closest to the final product they want to ship. Most great startup ideas aren't very sophisticated algorithmically wise: existing mature libs in ugly languages beat writing/adapting everything in a cool one, although the latter is a lot more fun; an active and friendly online community, which is familiar with problems close to yours, beats having macros and first-class closures in your language; etc.
In theory people could love both beautiful things and getting things done, but in practice I find that the more strongly they feel about one side, the less they care about the other.
A corollary is that, in fun-to-use languages, everyone writes fun stuff rather than useful ones: frameworks, meta-programming stuff, continuation-based contraptions, etc. So you end up with a dozen half-baked neural network libs, but no decent (and _de facto_ standard) HTTPS client.
TL;DR: the overwhelming majority of startups are about social and economic hacking, not about software hacking. Over-focusing on the language issue is a clue that one hasn't come to terms with this sad truth.
Your characterization seems a bit too binary. When I have a choice I code in Python, because it seems to provide a really nice balance between beauty and practicality. It's an elegant, well-designed language that also has a rich, diverse, mature ecosystem of standard and third-party libraries and frameworks.
Agreed, Python hits a sweet spot, largely because GvR managed to maintain a strong anti-not-invent-here culture in the community.
Also agreed, I'm quite binary, if not caricatural, in my characterization. But it gets the point across, and I trust readers to put grains of salt wherever appropriate.
This being said, if like most projects, yours is more about reusing existing stuff than about writing software components that have never been released by anyone else before, and better-fitting components exist in PHP than in Python, You'll be better off writing ugly and not-fun PHP code. Some people can swallow this, others can't; the latters are probably better off not going the startup way.
I agree, Python is our language of choice as well. The logic we use is that it's in most/all of the cases the lesser of the two evils.
You can always argue "Oh! you are doing "that" use <said language> it's amazing and has that built in." However we find that Python focuses a lot on the programmer as well (white space etc...) and that was the tipping point.
While that is ultimately true, in the first days (especially pre-investment), the largest expense is programmer's salary, whether that is something you pay, or an opportunity you forego. Thus, getting to a fundable prototype twice as fast, or to a more robust system at the same time IS a factor.
Regardless of how much focus you put on it, it is usually the first "hard" decision everyone has to take in their tech-supported startup, and thus it gets a spotlight.
Agreed, salaries are the main expense; but not writing code goes faster than writing code in a productive language!
Unless you go to a completely unchartered territory (as e.g. Viaweb did), and there's no library to get you halfway done, you should pick the best library and just accept the language it happens to be written in.
Of course, a good language supported by a great community has better chances to have the best libraries. I'd even go further, and argue that "language goodness" should be defined by its ability to let great libraries and community emerge, rather than how fun and concise it is to code in it. This property is not entirely determined by the language's syntax, semantics, or even implementation, but it is what truly matters, what gets things done or not.
I'm writing a high-performance webapp that requires some specific data-structures and algorithms to achieve the speed needed.
I tried prototyping in RoR first, but even simple test requests ended up taking minutes to answer.
Then I conveniently attended a guest lecture by Rob Pike on Go, and had one of those all to frequent "oh cool, gotta try that" moments.
I must say I don't regret it one second though. Go is a surprisingly nice language for writing all kinds of things in. The features of the language combined with the rather extensive set of standard libraries, (IMHO) makes it ideal for high-perfomance webapps.
I tend to do these thing just as much to learn new things though. So I'm not saying it couldn't have been done in another language instead.
You didn't list Erlang, Lua, Scheme, Common Lisp, OCaml, Prolog, or Haskell. (Also, loads of other languages, but I actually know people who use each of those.)
Also, adding options to a poll that's already in progress is going to skew the accuracy by quite a bit, but self-selecting polls aren't that scientifically rigorous anyway.
Those fall into the "other" category. As I write this, "Other" has 5.91% of the votes (52 / 880 votes)
Give the guy a break. You can't list every possible choice and based on these numbers, it doesn't look like very many people use the technologies you listed.
If we (generously) assume only half the users of those languages actually voted, that would change the "other" group to 104/932 = 11.16% which would edge out Java's 6.55% and PHP's 10.84%. It would still fall short of Ruby's 13.95%, Python's 15.13%, and Javascript's 20.71%
I don't mean to be overly critical of the guy who posted the poll, these come up periodically and almost always have those issues.
IMHO, tracking the overlapping between them would be an interesting data point - Python and C, Python and Javascript, Ruby and Javascript, etc. At that point you've got a cartesian product of everything to track (in this format), though. It would probably be best to do the polling completely differently.
Also: "which language + which niche" would be good. This seems to be skewed toward web programming.
I think as startups grow, they tend to end up with something of a frankenstein-ish mix of languages as they write bits that are well suited to each language. For us I ended up checking C++, Java, Javascript, Perl and Ruby, though we have little bits also in Python, Scala and PHP as well.
As a sidenote, we track which programming languages our webservices customers are using and I made a graph of such here:
I find it a little surprising that you use both perl and ruby. Is it an issue of "one guy likes perl, another likes ruby", or are there things you find easier in one than the other, in both directions?
Or is ruby just there for your API and your internal stuff is perl?
I hadn't done web programming for about 8 years when we founded Directed Edge, and the last time I had Perl was still riding high. So the old stuff, and a lot of the maintenance scripts are in Perl. Ruby has, however, begun eating into the Perl usage.
I still find Perl a little better suited for straight text-processing tasks, not to mention that it's a lot faster than Ruby for such. It's tempting to say, "It doesn't matter." but when you're running tasks that process several gigs of text, the difference between waiting 5 minutes for a job to finish vs. 20 can impact overall productivity.
I feel the same way about text processing. I have yet to see anything else that rips through text like perl does. Over the summer, I rewrote a powershell script in perl and got three orders of magnitude improvement (reliably), all in the constant factor. Powershell is probably the worst language for text processing (it encapsulates every line in an object before passing it between processes in the stream), but I still found this impressive.
I do actually have a perl script that generates all the obnoxious boilerplate a rails application that does something slightly differen from what DHH likes requires, so I have no doubt that such a mix of languages may come to pass in other places, too.
I spend a lot of time programming in Ada 83 in my day job. The software has to do with air traffic control. I also voted C, C++, Perl and Python. In my personal projects Python is the dominating language, but I also write a lot of shell scripts in both my personal projects and day job.
I use an in-house language and Lua at work, mostly Lua and C for my personal projects, and, after getting really into Erlang earlier this year, I've been learning the Erlang platform (OTP, etc).
I've dabbled in a lot of languages, but those seem to be the ones I've settled on lately.
PHP people seem to have an inferiority complex, always defending and rationalizing. Here's a secret for you guys, all the choices suck in one way or another.
Using .NET (C#) at work as well as GWT (Java) and minor bits of JavaScript. We're also using FLEX (ActionScript) for some upcoming projects.
At home I have some unfinished projects in JavaScript (a Chrome Extension), Java (an Android app) and C# (a WP7 app). All my website side-projects at .NET (C#) as well, but I've been tinkering with .NET MVC a little bit too. I guess I'm just a fan of the Microsoft Stack or I don't want to switch because I'm unsure of my ability to juggle more server-side languages and .NET keeps me employed.
[1] I usually do (require 'cl) with emacs Lisp, does that count as cheating?
Dream environment (unconstrained by existing projects): C, OCaml (or Scala if there's need to be on JVM), Common Lisp or Clojure (can't make up my mind between Lisp-1 and Lisp-2), Perl (I like Python, but I don't see what problem it solves that Perl doesn't).
Considering adding Erlang to the mix (worked halfways through Joe Armstrong's book). Considering learning Haskell (although I am already familiar with Monads, ADTs, pattern matching - from OCaml and Scala - and semi-familiar with ideas behind type classes from Scala's higher-kindred types and OCaml's modules).
I decided early on when I built Appleseed that I wanted it to be a commodity platform, so I went with a very basic LAMP stack. I'm even shying away from PHP 5.3 because so many hosts still don't support it.
It hasn't always been easy, but part of the way I see distributed open-source social networking catching on is by encouraging communities to set up their own social networks (churches, schools, niche communities, etc.), and the best way to make that happen is to make it as easy and streamlined as possible.
Overall, it hasn't been terrible. Once I built a solid MVC framework and plugged in some good libraries (I cannot say enough good things about simple_html_dom), I was able to forget about the language, and focus on the logic, which is where I'm happiest.
Not to be a jerk but once you get going. You wont end up switching to python+django. It'll stay php because you'll be focusing on other things like maintaining the existing code and adding functionality.
If you, at one point, want to go with python, i suggest doing that now.
Using what you know is smart. Planning to migrate a new language "just because" I would re-think. Rewriting an entire codebase is a TON of work. I'd either just go with PHP or go with Python.
If you really do think you will need to switch languages for some reason in the future, I'd make the switch now. It'll take a little more time up front but the long term benefit will be worth it.
Rewriting a codebase is something your customers can't see. It won't drive in more sales. It'll just take up time when you should be laser focused on adding features, pivoting if need be and driving bottom line growth.
If you do decide to go with Python, contact me if you need help or get stuck and I'll be more than happy to give you a hand. Also, consider using Pylons. It doesn't get the press that Django does, but it's very nice and is my Python framework of choice.
C++ (with Qt), QML, Javascript, HTML, CSS and Clojure. Bit of a random mix, but it is working pretty well for me.
My apps desktop GUI is done in QML (Qt declarative layer) with C++ extensions (custom widgets, performance sensitive aspects, things that QML does not yet support such as drag and drop). QML supports scripting in javascript to handle events. I also use Qt's WebKit widget to display HTML/CSS/JS content (both local and from the web) and Clojure for backend logic and server code. I use quite a number of Clojure libraries for a rich environment, including some distributed/clustering stuff. My C++ app embeds a JVM which can run Clojure locally, but I have it setup so you can connect to it running on a server too (I plan to let organisations run their own servers but also host servers myself for people to make use of, perhaps as part of a subscription). I'm trying to push as much of the GUI logic to QML/JS or HTML where I can and as much of the backend logic to Clojure, but there are bits that pretty much need to be done in C++ (eg due to interop with Qt/QML). I like writing Clojure code, so I try to do as much as I can with it. I dislike Javas GUI stuff though and love QML, so the GUI is stuck in Qt/QML :)
Not quite ready to give details of what the app does just yet, though at my current rate of development I should be soon.
We still build in Coldfusion with core modules in Java. In its tag based days it was annoying but now that you can work in pure CFScript it's a lot cleaner.
CF here as well. Tried writing in CFScript over the years but got tired of having to go to tags for certain things. Will give it another shot when we upgrade to CF9 which has full support. We are moving some processes to another language (prob C# on database) for stability/performance reasons, and will probably consider alternatives for any big new projects.
It's nice to see that there are still some people out there that use (read: admit using) CF.
I personally use it as my primary language as well, and have successfully used it at every company I've worked for. I'll admit the tag based syntax is pretty ugly, but you can kick out some great apps with it.
I'd love to see a follow-up on this poll about which frameworks are used with each language. E.g. jQuery or prototype for JavaScript? Cake or Zend for PHP?
I usually prototype visual things or web-frontend things in actionscript, standalone or back-end in java. But right now I'm working on a web-app in Haxe (targeting PHP)
I have two projects. One's a framework and application in C, with some utilities for it in Ruby (plain, no frameworks). The other one is in Python just because I thought it'd be a good way to learn the language in depth.
At my day job, we're using C, with our tests in Python (using robotframework [1]) and testing frameworks in C++.
It is kind of difficult to add JS into this poll in my opinion. I think everyone will have to check js and something else, unless you are talking about using js for the backend as well as front-end. I can't imagine a startup/app that doesn't use js (at least one that is web based)
I marked off C, C++, python, and other (shell scripts) for rethinkdb though I'm not there right now. The code was in C++ but most of it would compile as C, and we wrote lots of benchmarks in some combination of python and shell scripts.
If I were to do my own startup, it'd probably be in clojure.
We use PHP. I'm hoping to rebuild the backend in Clojure, which I am just learning. I wish we had built the whole site using Clojure, for the reasons Paul Graham mentions when he wrote Blub programmers. But I did not know Clojure when we started.
Our base language is PHP, but since we are working with teaching programming we are working with a lot more Javascript, Actionscript,C/C++, Java, and lately we have been testing/working with haxe.
Interesting to see how everyone seems to be constantly picking on PHP, yet this poll shows that it's the second most used language used for our apps/startups.
This may be an "unpopular" view, but if you need a simple, no nonsense, well supported language, tailored for web use with no big gotchas and you are not facing any particularly exquisite engineering problems.... PHP is often a no brainer.
It's third now and keep in mind that PHP is 3 times as old as the iPhone so you're dealing with momentum issues also. Most sites more than 5 years old are PHP and the switching costs are too high to leave the language.
I had to do a lot of maintenance/enhancement work on an old PL/SQL app a few years ago. There were some interesting tricks in the language, but overall I was happy to escape it and move back to working in something a little more modern.
I've fallen for Scala, and want to use one of the frameworks that support it.
Lift requires use of Maven or sbt, both of which are annoying tools. I don't want you to force me to download stuff from the net every time I start a project! With most frameworks, I should be able to download a package that I can put on a laptop, disconnect, and build projects in a vacuum. Lift doesn't allow me to do this... also XML :(
Once I got up and running with sbt, I really took to it. You only need to be concerned about the net when you add a dependency that you want it to resolve by fetching remotely. If you want alternative web frameworks, I think scalatra looks promising.
I am looking into it and like its Grails-like setup, but its Scala documentation is outdated and I'm not sure how stable Scala support actually is... I will definitely keep an eye on it, and might even dig into the code a little.
The choice of language and framework often seems like a big one, but how often do people regret their decision? If you do, what was your choice and what's wrong with it?
The former people tend to gravitate toward things like Haskell, which is very pure, conceptually beautiful, and feels like using the LHC to crack nuts. But hey, you're using LHC, great fun.
The latter will pick whatever ugly PHP framework is closest to the final product they want to ship. Most great startup ideas aren't very sophisticated algorithmically wise: existing mature libs in ugly languages beat writing/adapting everything in a cool one, although the latter is a lot more fun; an active and friendly online community, which is familiar with problems close to yours, beats having macros and first-class closures in your language; etc.
In theory people could love both beautiful things and getting things done, but in practice I find that the more strongly they feel about one side, the less they care about the other.
A corollary is that, in fun-to-use languages, everyone writes fun stuff rather than useful ones: frameworks, meta-programming stuff, continuation-based contraptions, etc. So you end up with a dozen half-baked neural network libs, but no decent (and _de facto_ standard) HTTPS client.
TL;DR: the overwhelming majority of startups are about social and economic hacking, not about software hacking. Over-focusing on the language issue is a clue that one hasn't come to terms with this sad truth.