views:

1329

answers:

23

I work for a start up that is currently researching what programming language they will adopt. The following criteria have been identified by management.

The language will be used to develop web based applications. Having a system that allows for easy generation of business reports would be a bonus (iReport, Crystal Reports)

  • Longevity - the parent company has been bitten by a Microsoft EOL a language that it had previously adopted throughout an organization. It doesn't want to deal with a language dying in the short to medium term.

  • Linux based - again because of lack of faith with Microsoft the parent company has a strict requirement that the language will be Linux based rather than Windows based

  • Large Community - a large/thriving community that would allow developers access to support as well as the organization being able to source additional programmers with experience in the language with ease.

  • Local Experience - directly related to the previous point, We aren't in the silicon valley, we're in Australia so sourcing local developers is a little more difficult for obscure programming languages

  • RAD (Rapid Application Development) - The programming language would encourage RAD as well as MVC and Agile Development methodologies and have the tools/libraries to support the methods.

We have narrowed down the field of languages to include PHP, Ruby, Python.

Do you think these languages meet all the requirements?

What are the some of the pros and cons of the above languages that might influence a decision?

What language would you choose?

A: 

You've seriously limited your option by refusing to accept Microsoft. .Net is a rather excellent platform which supports all the requirements except of course the second one.

.Net can't be compared to anything else that Microsoft has ever built before, and it can't be compared to PHP, Ruby, Python. It's got a class of it's own. Maybe you should talk to your company about that.

If not, then PHP is fine for you. They've got a great user-base and are well-supported technology.

Good luck

Cyril Gupta
Not that helpful, really - you're stating that they should choose a platform (not language) which they've already said is not a possibility, then you tell them they should choose one of the three possibilities they are limited to.
paxdiablo
This kind of attitude is what keeps Microsoft in a monopoly. There *are* other choices in programming languages out there, and they're perfectly capable of running many different kinds of apps.
jtimberman
Pax, Muerr... There's NOTHING wrong with MY attitude. I've been working on MS platforms since 10 years and I love it. I am the guy who sees people shouting themselves hoarse about Linux, PHP, and thinks that's the kind of attitude that keeps Linux surviving.
Cyril Gupta
I know there *are* other choices in programming. I just don't think I want to use them. If you have a problem with that... Go ahead, bite me.
Cyril Gupta
Cyril, I didn't suggest there was anything wrong with your attitude, just that your answer wasn't helpful to the question (which stated the languages the questioner was interested in). I'm no Linux fanboy, I use MS products for a great many projects, but I do know how to read requirements :-).
paxdiablo
@Cyril: I don't think anyone has a problem with you not wanting to use non-MS technologies. The issue comes in when, from that standpoint, you say that everyone else should be open to MS's wares. How is me not wanting to use MS any different from you not wanting to use non-MS?
Dave Sherohman
@Dave: I didn't say that people shouldn't use Linux/PHP. I just said that by limiting yourself to that platform, you've closed an important option.I think my statement was perfectly in sync with the requirements because it talks about the negativity of giving up a wonderful platform like .Net.
Cyril Gupta
Lots of people don't trust Microsoft to continue to do things to their advantage, and (lacking knowledge here) I can think of numerous reasons why that may be sensible in this case. In any case, business reasons should trump technical reasons.
David Thornley
Ironic, since you limit *yourself* to .Net.
Kevin
"and it can't be compared to PHP, Ruby, Python. It's got a class of it's own" Yea. It's Microsoft's own Java. ;)
abababa22
@Kevin: I've developed in PHP for two years. I've worked on Delphi. I developed 2 applets in Java. So I haven't limited myself to .Net. But I prefer it to anything else now.
Cyril Gupta
@Pax no you don't know how to read requirements if this thread is any indication. The questioner did not say "Microsoft is not a possibility." The question said the company did not want to deal with a dying language in the short to medium term. That's it. Try to be objective once in awhile.
BobbyShaftoe
A: 

So you are going to not look at a Microsoft platform because FoxPro or perhaps VB6 has been EOLed? I'm not sure that that's the best choice. That seems to be an emotional reason to not accept a very tenable solution.

The other reason this isn't really the case with .NET is because there is an alternate path, such as with Mono. But the liklihood that you would be stuck with an unsupportable platform in the foreseeable future, by going .NET is not very high.

BobbyShaftoe
Not that helpful, really - you're stating that they should choose a platform (not language) which they've already said is not a possibility.
paxdiablo
Lots of people have no faith in Mono, and are smelling (correctly or not) a Microsoft trap. Moreover, the questioner may want to be able to second-source software. Most businesses dislike relying on one source for anything vital.
David Thornley
Nonsense. I correctly stated that this is an emotional decision and not one based on objective evaluation. I apologize if that offends anyone.
BobbyShaftoe
+3  A: 

Why isn't Java a choice? It has many corporations backing it, is open source, has many web frameworks as well as reporting frameworks you can use. For a probably incomplete list of java frameworks see http://java-source.net/open-source/web-frameworks For reporting in java see http://www.eclipse.org/birt/phoenix/

Jared
Questioner may not have the power to influence that decision, so answer is not *that* helpful.
paxdiablo
it actually *is* a helpful answerthe questioner may not have been aware that Java filled his requirements (and even the bonus with JasperReports)
Ariel Arjona
The question asked for the pros and cons of three very specific languages. His requirements included that limitation. I didn't feel strongly enough to vote the answer down, but I thought I'd mention it.
paxdiablo
This question might interest other people than the original poster, so I think it's fine to mention other options.
abababa22
+20  A: 

Hi, Based on your criteria -
Longevity
Linux based
Large Community
Local Experience
RAD (Rapid Application Development)

I would recommend that you add Java to your list. The reasons are as follows -
1. Longevity - Java has been around for over 10 years now. It came up with the advent of web programming, indeed it was once considered the default programming language for the web (AFAIK it was because of a mistaken belief that JavaScript is Java on a browser and Java applets). More importantly is has been open sourced by SUN (link) so you are not tied to a any particular company (besides several alternate Java runtimes are available (Link))
2. Linux Based - Java is available on the Linux Platform ever since the beginning. Several of the runtimes are available in the Linux repositories and the popular Java based IDE's (Eclipse, NetBeans) have Linux implementations.
3. Large Community - The Java community is large and vibrant. It is a mature one as well and have several frameworks and organizations like (The Apache Foundation,Sun Java Community, The Server Side Community)
4. Local Experience I am an Indian and I have never been to Australia so I guess I can't speak about this aspect, but as far as I have seen Java programmers are available everywhere. Getting good ones are tough but then that can be said about any language :-)
5. RAD - RAD tools are really great in Java in that they have powerful and flexible IDEs in Eclipse and NetBeans (there are others but I have tried only these) that run in Linux and support some of the languages you mention as well like PHP and Ruby.
Another major point for looking at Java is Jasper Reports - this is a powerful and open reporting and business intelligence tool written in Java.

As far as Ruby, PHP and Python are concerned -
I think Python will fit your criteria the best, except for the local experience and RAD tools part which I don't know much about for Python. That being said I am learning it - I think its a nice elegant language and I like its philosophy and approach.

Update: On reading the comments I realized - I hadn't talked about dynamic languages on Java - Doh!! :-) Java has been going through a renaissance of sorts with extensions being made on it to support some of the dynamic languages including JRuby,Jython and Groovy.

Nikhil
I agree, Java is a must.
Chuck Conway
As I mention below, Java is worth serious consideration, but I think that a more agile language like Groovy or even JRuby that sits on top of the JVM is the way to go. Web Dev in "old-school" Java is terrible, and it's no coincidence that a lot of the top-tier devs jumped ship to Ruby on Rails.
Toby Hede
tobyhede makes a good point - one of the cool things about Java is that you are getting a renaissance of sorts and Java is supporting more expressive languages. Along with JRuby and Groovy, there is also Jython and Clojure...
Nikhil
Clojure has me intrigued at the moment ... LISP + JVM. Resourcing is hard, to say the least.
Toby Hede
Java invented web programming? Client-side applets, maybe, but Perl CGI ruled the roost for server-side code for a -long- time before Java took off.
Sean McSomething
+16  A: 

Going through your question again - since you seem to have narrowed your choices to PHP, Ruby, Python I thought I add another answer for just these three.

PHP - It's been around for awhile about 10 years though I think it became stable and popular around PHP3. IT is one of the Ps in LAMP and is by far the most popular of the lot as far as web development is concerned. It is nice and easy language to learn and get productive in but it is easy write sloppy code in it. There are a lot of developers who know it (again don't know about Australia overall there are :-). I am not sure about RAD tools but its simple to code in and there are plugins for Eclipse for it link. I have used it for web-development but it is like ASP it tends to encourage not so great programming IMO. But it has a lot of frameworks like Drupal and Joomla.

Ruby - It's the youngest of the bunch :-). AFAIK it did not really take off till a couple of versions in and then zoomed up when RAILS framework was introduced. It is a nice elegant language, but I am skeptical about its performance (not scalability mind you but speed) and it does not seem to have a very good coupling with major web servers like Apache. It's community is young and enthusiastic and growing rapidly. This language has a major following in the Mac community and it's de-facto IDE is a Mac only tool called Textmate. It also has a Eclipse Plugin link and NetBeans supports it (both are cross-platform IDE) :-). It's a nice powerful language though - very expressive, with type safety and RAILS is a game changing web development framework.

Python - This one is the oldest of the bunch. It is used a lot in academia. It's had a pretty consistent growth and vision. Like I said in the other answer - I am learning this one and I like it a lot. RAD tools are not as common but IDLE is a Linux one and then there is the Eclipse plugin link It's a very productive language with great web frameworks like Django and it's one of the P's in LAMP (the third one is Perl) :-) I like its performance better than Ruby its comparable to PHP but with more expressive power and functional programming elements and type safety thrown in...

All in all I like Python then Ruby and finally PHP but it's a pretty close contest. Of course since this is a subjective question so YMMV :-)

Nikhil
Good answer, +1.
paxdiablo
Ruby is also supported in the Netbeans IDE, which is cross-platform
frankodwyer
Is Ruby really younger than PHP? Ruby was created in February 1993. When did PHP come out?
Jörg W Mittag
Oh cool so Ruby is supported in NetBeans as well - I wanted to add Perl to the mix but I wanted to keep this answer focussed on your 3 languages. I am going to update my answer to make Ruby come in second - it's simply a better language than PHP in terms of encouraging good coding practices..
Nikhil
Jörg - According to Wikipedia - Ruby was conceived in 93 and and the first public release was Dec 95. PHP was conceived in 94 and releaseed in June 95 - I would call this too close to call ;-)
Nikhil
+1  A: 

As far as your criteria are concerned, all of Ruby, PHP, and Python fair excellent on those; except perhaps for local experience. You might need to assess that one factor before you go ahead. Also, what is stopping you from using Java. That's THE excellent choice given your criteria, has great backing, easily the largest community and has lots of open-source tools.

Akshay
+3  A: 

PHP
PHP is a nice language, provided you know about the evils it hides in some of it corners. I say evil because it is very easy to write insecure or bad code in general if you are new to PHP. That said, if you spend some time learning the language it is very powerful and allows for speedy development. It's C/C++ like syntax will also help if your team has had previous experience in languages with similar syntax. Even JavaScript counts, which I'm sure your team has tons of experience with, so picking up PHP should be quite easy.

PHP provides quite a few frameworks to choose from, I haven't used much of any so a quick google search OR this site might help http://www.phpframeworks.com/

PHP as gazzilions of resources online, php.net the official site is quite good and has comprehensive documentation and function reference. While referring to the documentation there do checkout the comments on the pages as well. They provide quite good insight at times.

PHP has been around for quite some time, so getting developers should be pretty easy. But I should caution you here, there are lot of PHP developers but few (or at least not that much) that are good. By good, I mean who not only know how to code in PHP, but know how to write good and secure code in PHP.

Python
Coming to python, it is one of the easiest language to pick and has all you want from a modern scripting language. Don't let the mandatory whitespace requirement scare you, it comes naturally when you start coding.

At our place we are using Python with DJango framework. DJango is a very comprehensive MVC style framework. It is power-packed with lot's of features to help you implement common web-related stuff very quickly.

Python also has lots of libraries pre-built (downloadable) for most of the things you can think of. So that helps a lot to quickly churn out solutions.

Python community is very friendly and you will find adequate online resources. DJango too has good enough documentation and resources. But not as much as PHP I guess.(?)

I'm not sure about your location, but finding people with experience of python might be difficult, it will even be more difficult to find one with experience in Django. (At least this is the problem that we faced.) This site might help DJangoPeople.net.

Ruby
No Idea :) Just toyed with it, that's it.

I hope this helped.

xk0der
DJango -> Django
J.F. Sebastian
+1  A: 

Just chiming in with the Java crowd here. Since your requirements do also validate the use of Java. There also exists a report generation suite for Java called BIRT which is an Eclipse based plugin.

Longevity - Java has been around for a long time and is still actively used

Linux based - J2SE and J2EE are platform independent and doesn't need to be tied down to either Linux or Windows. I'd be rather careful around this requirement as it's more up to your customers to decide what platform they want.

Large Community & Local Experience - I don't know about Australia, but Java does have a large user base and most universities teach Java

RAD (Rapid Application Development) - Eclipse (with all its refactoring support), jUnit, Hibernate and Spring framework are all free-to-use and popular open-source tools that help out with RAD in Java.

Leaving the arguments on Java I'm a bit puzzled over that these are all technical requirements when a business and its management should be more worried about customer requirements and business goals. If your management can identify what customers want then it would be easier to choose what development environment you need.

Spoike
I think that technical arguments are somewhat front-and-centre to the management of this outfit as they've been burned by technical issues before.
ConcernedOfTunbridgeWells
+5  A: 

Longevity

PHP has been around forever for web development and it doesn't look like it's going away.

I doubt Ruby and Python are going away but they are newer to the mainstream in web development and only time will tell if they stick around and continue to gain a foothold.

Linux based

All three run on Linux well.

Large Community

PHP is going to have the largest community. Ruby and Python have a good community but PHP being around the longest is going to have the largest community and most resources. It will also have the largest library of code, sample apps and open source apps.

Local Experience

I have no idea about Australia but I think it's a safe bet to say PHP is going to have the most developers available out of the three in any general area.

RAD (Rapid Application Development)

PHP is going to have the largest libraries... however I think that Ruby is the best for RAD and Ruby on Rails MVC framework is what made Ruby popular. I personally would go for Ruby then Python then PHP if this point is important.

I'd be interested to know what Microsoft product bit you and made your company not even consider Microsoft.

metanaito
A: 

I would suggest Python or Ruby.

Although it is relatively easy to find PHP resources in Australia (I am an Australian-based developer) I really think that PHP is toward the end of it's lifecycle - the alternatives are just too efficient and elegant and the momentum has definitely swung away from PHP toward more robust dynamic languages. The Java and Ruby ecosystems are particularly vibrant. There is also a really liveley Ruby on Rails community here in Australia. Python/Django is getting some traction but I have a client in the local market with an outsourced Python/Django app that has had terrible trouble finding local resources.

I think that in some ways, if you go with an open-source technology the longevity becomes a little moot.

There is a big effort underway to bring JRuby into the JVM as a first-class citizen. This opens up all sorts of interesting possibilities for deployment down the track.

I would certainly consider Java - I have looked at Groovy and Grails and it offers some of the rapid development advantages of the modern Ruby and Python frameworks, but allows you to leverage the JVM and the Java platform. Only issue really is resourcing.

Toby Hede
+2  A: 

I'd recommend Python. I haven't used either that or Ruby for anything substantial, but I've used PHP long enough to know that it's not necessarily the best choice. That shallow learning curve quickly turns into an asymptote when you try to make a large site.

Also I'd suggest having a look at Perl (5), unless you already ruled it out.

Ant P.
Agreed on Perl, although, sadly, it doesn't really fit the final requirement - there are no widely-used Perl IDEs. (Which doesn't mean it can't do rapid development. CPAN and a good framework (Catalyst, CGI::Application,...) will make quick work of most applications.)
Dave Sherohman
+1  A: 

Java, kick a rock and you'll get 10 developers.

Ubersoldat
+4  A: 

For a start-up, you have an interesting set of criteria. I'd think having a high-productivity development environment would be a more important criterium.

Size of the available pool of programming talent should not be important, as a start-up cannot afford the mongolian horde approach anyway.

The development environment should be seen as modern and interesting though, so you can attract young talent from the universities.

Do your current developers have a preference?

Stephan Eggermont
+2  A: 

"That seems to be an emotional reason to not accept a very tenable solution."

I think that is a very sensible criteria - not to accept a very temporary solution.

Of all the choices, I would recommend python or ruby. For ease of development, you should go for ruby. If you want to play it safe with longevity, python would be best. Both have a very large user base and an active community, and neither are going away.

+1  A: 

In terms of 'skating to where the puck will be', I suggest you go with Java as suggested by Nikhil but also keep an eye on Groovy.

Groovy has all of the old school benefits of java mentioned in other answers (it is 100% backwards compatible with java), plus the benefits of dynamic languages like python and ruby. Also, the grails/gorm frameworks take a lot of the pain out of web and database development and are shaping up to be a great competitor to ruby on rails. You can even mix and match groovy and java in the same codebase.

Of the choices you mention, python or ruby are both good choices for web development (my own preference is ruby on rails), but I'd suggest you rule out PHP for all but small scale (in terms of code and team size) development.

In terms of IDE, I know that Netbeans supports java, ruby and groovy and the associated frameworks pretty well.

frankodwyer
A: 

Java, if it is an option, or Python, I'd say. Not sure about Ruby as I haven't tried it.

I am using Python + Django and the application development is very fast, comparatively speaking.

Regarding PHP, I would doubt it very much, but that's depending on the kind of applications you envision building.

I have programmed in PHP for some 3-4 years and have been also doing sysadmining for 3 years for a startup that used PHP to build my country's facebook wannabe. Despite them being very succesful, the support was a nightmare (and cost them a hefty monthly sum). Also, they found out that in order to reach acceptable speed once the user base grew, they had to write a lot of functionality as custom PHP extensions in C anyway.

Regarding availability, PHP should have most programmers, but I suspect it could be partly due to that compared to Python/Java, the average level of PHP programmers is quite low - as you can learn PHP very quickly, you can also start pounding code very quickly and put on your resume "PHP programmer" without having much idea of programming in general.

To recap, the issues I have seen with PHP are:

  1. low scalability
  2. no built-in app-level persistance (basically, with PHP you are not creating a web app that can remember stuff on its own, you are writing dynamic snippets for otherwise static HTML pages. It can be annoying and I suspect (unless PHP does a lot of its own internal caching) very very wasteful of processing resources. If you want persistant app-wide data structures, you have to use something akin to memcache or a kind of external framework.

I would not use PHP for my own projects in general.

Gnudiff
+1  A: 

Not a direct asnwer, but "you are doing it wrong" :D

Seriously, you first choice should be what your developers want to use, not what the "management" wants them to use for arbitrary reasons.

You shoud at least consider the points made by Paul Graham in this essay. This is not advocating for lisp, but you need to take into account much more than longevity and support (proably that's the worst you can do).

krusty.ar
The reasons are far from "arbitrary". It's all about money in the end.
Kevin
And if you read the essay, you will find that that's exactly what it talks about. Check this out: http://ycombinator.com/Paul Graham is in fact part of the startup market.
krusty.ar
+1  A: 

Either Python or Ruby will be fine to you.

Both have been long enough to have relatively big size communities that are helpful. Python has better library support, while Ruby is catching up these days.

To do web development, Python has Django and Ruby has Rails. As I do Rails apps nowadays, my biased opinion will go with Ruby. Haven't tried Django and haven't touched Python for a while. But I heard good stories about them very often.

Hype or not, I am pretty sure that you will find more Rails developers than Django devs almost everywhere.

Cygwin98
A: 

I tried to think of alternatives.. and the only one I could come up with is Perl.

Its pretty wierd as a language, but that said, there are many, many Perl programmers. According to this CIO survey Perl is the 2nd most popular scripting language (only beaten by javascript, but it is much more popular in the USA), though its certainly not as popular as it once was.

Some major sites are written in perl - slashdot.org for one, which happily serves so many users they named a new term (the slashdot effect) for a denial-of-service due to too many visitors to sites, so the performance isn't a problem (unlike Ruby, that apparently, can be really poor)

With CPAN there is a massive library of code routines for practically every aspect you'll need - including a Rails-type framework Catalyst.

Its also used for a lot of system administration tasks, so learning this would also give you skills that would be used on the maintenance and system automation side of things too.

Its predominately Linux based, and has been around since the dawn of time (21 years!), so its worth adding to your list for consideration. Tim O'Reilly says that it is still the 2nd most popular script-programming book that he sells (1st is PHP).

Here's a quick article on the pros and cons.

gbjbaanb
A: 

I'm also going to suggest you look to perl, it seems to fit your reqs as good or better then your suggestions. Given the lack of details on your project, and lack of priority of each request, if I had to choose from your list, I would end up going with python as it will be the most flexible of the bunch (ie not only focused on MVC = web). Though ideally I would start to interview for programmers and try to build a good team and then let everyone decide what tools will work best for them.

notbenh
A: 

A couple of potentially important missing criteria are scalability and ease of deployment.

Selecting the right people is more important than selecting the right language. Any one of those languages will work providing you have good developers using the right tools. PHP has the largest pool of developers, so finding talent will likely be easier.

Also, each language candidate has frameworks and libraries of differing philosophy and quality. These choices are much more important than language.

rick
A: 

PHP isn't getting much love, and I specifically wanted to counter Emil's claim that PHP doesn't scale. That's false. Digg uses PHP. As for PHP not having application state in memory, that is true, but unlike Java you don't have to restart the server after changing application variables.

For all those advocating Java, have you used a scripting language like PHP for web development? Type safety doesn't help much when all inputs are strings. Also, the time saved by not having to constantly compile and deploy is enough reason to switch.

rick
+2  A: 

You've done your homework. I'll comment only on longevity. Python and Ruby are clearly superior to PHP. Ruby is based on Smalltalk, so the design has already lasted for nearly 30 years. (A reason Ruby is used instead of Smalltalk is that Ruby integrates well with existing technologies, whereas Smalltalk requires its own everything; you can't even use your favorite window manager.)

PHP bears the stigmata of a language thrown together in a hurry, including a series of fairly quick language revisions. PHP is also a worry for longevity of your programs; as web programmers mature and master their craft, they often come to chafe at the limitations of PHP. Some former students at a popular social-networking site have let me know that because of the success of their company, PHP has come back to bite them. (PHP was probably still a good choice at first because it enabled them to get a product into a crowded marketplace quickly, which was more important than the longevity of the software.)

Between Python and Ruby I've give a slight edge to Ruby, as it is based on a very proven design and seems likely to be more stable going forward. But that's prognosticating, and your guess is as good as mine.

Norman Ramsey