Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm wondering if there are any less-biased resources that give good, specific overviews of programming languages and their intended goals. I would like to learn a new language, but visiting the sites of each language isn't working. Each one talks about how great it is without much mention of it's weaknesses or specific goals.

Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.

Python is a programming language that lets you work more quickly and integrate your systems more effectively.

Having been a PHP developer for years, Vic Cherubini sums up my plight well:

I knew PHP well, had my own framework, and could work quickly to get something up and running.

I programmed like this throughout the MVC revolution. I got better and better jobs (read: better paying, better title) as a PHP developer, but all along the way realizing that the code I wrote on my own time was great, and the code I worked with at work was horrible. Like, worse than horrible. Atrocious. OS Commerce level bad. Having side projects kept me sane, because the code I worked with at work made me miserable.

This is why I'm retiring from PHP for my side projects and new programming ventures. I'm spent with PHP. Exhausted, if you will. I've reached a level where I think I'm at the top with it as a language and if I don't move on to a new language soon, I'll be done completely with programming and I do not want that.

Languages I've looked at include JavaScript (for node.js), Ruby, Python, & Erlang. I've even thought about Scala or C++.

The problem is figuring out which ones are built to handle my needs the best.

So where can I go to skip the hype and get real information about the maturity of a platform, the size of the community, and the strengths & weaknesses of that language. If I know these then picking a language to continue my web development should be easy.

Update

I just don't want to get 4 months down the road with some language and find it sucks because each thread has 4MB of overhead, or the max concurrent connections is 999, there is no package to do "X" feature, or support is being phased out for a new language branch.

share|improve this question

closed as not constructive by Mark Trapp Jul 29 '11 at 18:06

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

12  
It's hard to tell which will handle your needs best if you don't specify these needs. –  vartec Jun 22 '11 at 16:42
3  
That is why I didn't define my needs - My personal needs are beside the point. I want to know where I can look to match my needs to a certain programming language. Because my needs may change and I'll need to go back again. –  Xeoncross Jun 22 '11 at 16:46
    
It's worth pointing out that there is also more to a program than it's execution speed. Development speed and the way you have to build your application (due to the language) play an important role. –  Xeoncross Jun 22 '11 at 17:17
4  
this is less about languages and more about the maturity and feature richness of the frameworks that are available for them. –  Jarrod Roberson Jun 22 '11 at 18:48
1  
I suggest you take a look at this excellent post by Alex Martelli. –  phant0m Jun 23 '11 at 0:06
show 3 more comments

9 Answers

up vote 3 down vote accepted

I wasn't going to post this as an answer, but Xeoncross asked me to, so here we go:

(Sidenote: if someone could fix the markdown issue in the little code example, I'd appreciate it.)

Posted by Alex Martelli on comp.lang.python: What's better about Ruby than Python? on Aug 18 2003, 5:50 pm

Erik Max Francis wrote:

"Brandon J. Van Every" wrote:

What's better about Ruby than Python?  I'm sure there's something. What is it? Wouldn't it make much more sense to ask Ruby people this, rather than Python people?

Might, or might not, depending on one's purposes -- for example, if one's purposes include a "sociological study" of the Python community, then putting questions to that community is likely to prove more revealing of informaiton about it, than putting them elsewhere:-). Personally, I gladly took the opportunity to follow Dave Thomas' one-day Ruby tutorial at last OSCON.  Below a thin veneer of syntax differences, I find Ruby and Python amazingly similar -- if I was computing the minimum spanning tree among just about any set of languages, I'm pretty sure Python and Ruby would be the first two leaves to coalesce into an intermediate node:-).

Sure, I do get weary, in Ruby, of typing the silly "end" at the end of each block (rather than just unindenting) -- but then I do get to avoid typing the equally-silly : which Python requires at the start of each block, so that's almost a wash:-).  Other syntax differences such as @foo versus self.foo, or the higher significance of case in Ruby vs Python, are really just about as irrelevant to me.

Others no doubt base their choice of programming languages on just such issues, and they generate the hottest debates -- but to me that's just an example of one of Parkinson's Laws in action (the amount on debate on an issue is inversely proportional to the issue's actual importance). One syntax difference that I do find important, and in Python's favour -- but other people will no doubt think just the reverse -- is "how do you call a function which takes no parameters".  In Python (like in C), to call a function you always apply the "call operator" -- trailing parentheses just after the object you're calling (inside those trailing parentheses go the args you're passing in the call -- if you're passing no args, then the parentheses are empty).  This leaves the mere mention of any object, with no operator involved, as meaning just a reference to the object -- in any context, without special cases, exceptions, ad-hoc rules, and the like.  In Ruby (like in Pascal), to call a function WITH arguments you pass the args (normally in parentheses, though that is not invariably the case) -- BUT if the function takes no args then simply mentioning the function implicitly calls it.  This may meet the expectations of many people (at least, no doubt, those whose only previous experience of programming was with Pascal, or other languages with similar "implcit calling", such as Visual Basic) -- but to me, it means the mere mention of an object may EITHER mean a reference to the object, OR a call to the object, depending on the object's type -- and in those cases where I can't get a reference to the object by merely mentioning it I will need to use explicit "give me a reference to this, DON'T call it!" operators that aren't needed otherwise. I feel this impacts the "first-classness" of functions (or methods, or other callable objects) and the possibility of interchanging objects smoothly.  Therefore, to me, this specific syntax difference is a serious black mark against Ruby -- but I do understand why others would thing otherwise, even though I could hardly disagree more vehemently with them:-). Below the syntax, we get into some important differences in elementary semantics -- for example, strings in Ruby are mutable objects (like in C++), while in Python they are not mutable (like in Java, or I believe C#).  Again, people who judge primarily by what they're already familiar with may think this is a plus for Ruby (unless they're familiar with Java or C#, of course:-).  Me, I think immutable strings are an excellent idea (and I'm not surprised that Java, independently I think, reinvented that idea which was already in Python), though I wouldn't mind having a "mutable string buffer" type as well (and ideally one with better ease-of-use than Java's own "string buffers"); and I don't give this judgment because of familiarity -- before studying Java, apart from functional programming languages where all data are immutable, all the languages I knew had mutable strings -- yet when I first saw the immutable-string idea in Java (which I learned well before I learned Python), it immediately struck me as excellent, a very good fit for the reference-semantics of a higher level programming language (as opposed to the value-semantics that fit best with languages closer to the machine and farther from applications, such as C) with strings as a first-class, built-in (and pretty crucial) data type.

Ruby does have some advantages in elementary semantics -- for example, the removal of Python's "lists vs tuples" exceedingly subtle distinction.  But mostly the score (as I keep it, with simplicity a big plus and subtle, clever distinctions a notable minus) is against Ruby (e.g., having both closed and half-open intervals, with the notations a..b and a...b [anybody wants to claim that it's obvious which is which?-)], is silly -- IMHO, of course!).  Again, people who consider having a lot of similar but subtly different things at the core of a language a PLUS, rather than a MINUS, will of course count these "the other way around" from how I count them:-).

Don't be misled by these comparisons into thinking the two languages are very different, mind you.  They aren't.  But if I'm asked to compare "capelli d'angelo" to "spaghettini", after pointing out that these two kinds of pasta are just about undistinguishable to anybody and interchangeable in any dish you might want to prepare, I would then inevitably have to move into microscopic examination of how the lengths and diameters imperceptibly differ, how the ends of the strands are tapered in one case and not in the other, and so on -- to try and explain why I, personally, would rather have capelli d'angelo as the pasta in any kind of broth, but would prefer spaghettini as the pastasciutta to go with suitable sauces for such long thin pasta forms (olive oil, minced garlic, minced red peppers, and finely ground anchovies, for example - but if you sliced the garlic and peppers instead of mincing them, then you should choose the sounder body of spaghetti rather than the thinner evanescence of spaghettini, and would be well advised to forego the achoview and add instead some fresh spring basil [or even -- I'm a heretic...! -- light mint...] leaves -- at the very last moment before serving the dish).  Ooops, sorry, it shows that I'm traveling abroad and haven't had pasta for a while, I guess.  But the analogy is still pretty good!-)

So, back to Python and Ruby, we come to the two biggies (in terms of language proper -- leaving the libraries, and other important ancillaries such as tools and environments, how to embed/extend each language, etc, etc, out of it for now -- they wouldn't apply to all IMPLEMENTATIONS of each language anyway, e.g., Jython vs Classic Python being two implementations of the Python language!):

  1. Ruby's iterators and codeblocks vs Python's iterators    and generators;

  2. Ruby's TOTAL, unbridled "dynamicity", including the ability     to "reopen" any existing class, including all built-in ones,    and change its behavior at run-time -- vs Python's vast but    bounded dynamicity, which never changes the behavior of    existing built-in classes and their instances.

Personally, I consider 1 a wash (the differences are so deep that I could easily see people hating either approach and revering the other, but on MY personal scales the pluses and minuses just about even up); and [2] a crucial issue -- one that makes Ruby much more suitable for "tinkering", BUT Python equally more suitable for use in large production applications.  It's funny, in a way, because both languages are so MUCH more dynamic than most others, that in the end the key difference between them from my POV should hinge on that -- that Ruby "goes to eleven" in this regard (the reference here is to "Spinal Tap", of course).  In Ruby, there are no limits to my creativity -- if I decide that all string comparisons must become case-insensitive, I CAN DO THAT!  I.e., I can dynamically alter the built-in string class so that

a = "Hello World" 
b = "hello world" 
if a == b 
    print "equal!\n" 
else 
    print "different!\n" 
end
 

WILL print "equal".  In python, there is NO way I can do that.  For the purposes of metaprogramming, implementing experimental frameworks, and the like, this amazing dynamic ability of Ruby is extremely appealing.  BUT -- if we're talking about large applications, developed by many people and maintained by even more, including all kinds of libraries from diverse sources, and needing to go into production in client sites... well, I don't WANT a language that is QUITE so dynamic, thank you very much.  I loathe the very idea of some library unwittingly breaking other unrelated ones that rely on those strings being different -- that's the kind of deep and deeply hidden "channel", between pieces of code that LOOK separate and SHOULD BE separate, that spells d-e-a-t-h in large-scale programming.  By letting any module affect the behavior of any other "covertly", the ability to mutate the semantics of built-in types is just a BAD idea for production application programming, just as it's cool for tinkering.

If I had to use Ruby for such a large application, I would try to rely on coding-style restrictions, lots of tests (to be rerun whenever ANYTHING changes -- even what should be totally unrelated...), and the like, to prohibit use of this language feature.  But NOT having the feature in the first place is even better, in my opinion -- just as Python itself would be an even better language for application programming if a certain number of built-ins could be "nailed down", so I KNEW that, e.g., len("ciao") is 4 (rather than having to worry subliminally about whether somebody's changed the binding of name len in the __builtins__ module...).  I do hope that eventually Python does "nail down" its built-ins.

But the problem's minor, since rebinding built-ins is quite a deprecated as well as a rare practice in Python.  In Ruby, it strikes me as major -- just like the too powerful macro facilities of other languages (such as, say, Dylan) present similar risks in my own opinion (I do hope that Python never gets such a powerful macro system, no matter the allure of "letting people define their own domain-specific little languages embedded in the language itself" -- it would, IMHO, impair Python's wonderful usefulness for application programming, by presenting an "attractive nuisance" to the would-be tinkerer who lurks in every programmer's heart...).

Alex

share|improve this answer
    
I awarded this as the answer because it is a great, relatively non-biased overview of Ruby and Python as a whole. Explaining how the languages work and don't work. –  Xeoncross Jun 30 '11 at 16:17
add comment

Good Luck

None of the example descriptions given are objective or testable. They're all hype and opinion.

...simplicity and productivity...more quickly...more effectively.

Try It

Take a small sample project of the kind you are likely to be doing, and try it with all of the languages that interest you. Then post your objective review, and we'll all know.

share|improve this answer
2  
Not a bad idea, however it wouldn't work in the real world. Without spending the time fully understanding each language - I could never foresee the full design pattern problem and benefits each system could provide. I'm sure it would take months of working in each language to achieve a high-level understanding of the language itself. I would rather hear from tire experts than spend months deengineering each wheel to figure out why they built it like that. Still, after I have some good candidates I will certainly do this. –  Xeoncross Jun 22 '11 at 16:39
    
+1 for "try it". –  tdammers Jun 22 '11 at 19:43
1  
@Xeoncross: with each language you try, you'll increase your experience, and you'll be able to leverage it in other languages. 4 months to dive into a language are never lost; and if the language is really crap, you need less than two weeks to find out. –  tdammers Jun 22 '11 at 19:44
3  
Yes, you probably should try all these languages to find a good fit. But the problem is that when you use a new language you don't use it the way you are supposed to initially. You end up doing the same damn thing you were doing with the language you already know how to use only with different syntax. Takes a quite a bit of time to figure out the finer points of each language and what the benefits really are. –  radix07 Jun 22 '11 at 20:04
3  
I'd be surprised if there was any significant difference between modern languages for general purposes. There, I said it out loud. And in italics. Let the flames begin! –  Steven A. Lowe Jun 22 '11 at 20:06
show 1 more comment

I think part of the problem is that anyone who knows enough to comment meaningfully about one or more languages is going to have a bias. In almost 4 decades of programming I've worked in more languages than I can count. I can give you opinions (some of them dated) about quite a few of those languages, but none of those opinions will be unbiased.

I take the approach of using the right language for the job. You specifically ask about web development, but that's still a pretty broad category -- sort of like saying you're interested in photography. Micro? Astro? etc. Although I agree that PHP is not an emotionally fulfilling language to work in, for many customers it's the right language based on any number of factors, not least of which is long-term ability to find programmers to fix the site after you leave and/or get hit by a bus.

So maybe you should look at the types of customers who are interested in projects that lend themselves to something different, and then work on making yourself interesting to them.

share|improve this answer
    
Well, since I'm so good in PHP - I will continue to work in it since I can still make a good living. I was mostly thinking about a new language for my own projects. Something to help add some flavor back into my life. I work in just about every are of web development you can think of, NLP, Text parsing, CMS, API's, storage, etc. Also, someone with experience in many languages has much less of a bias than people with only one design process. –  Xeoncross Jun 22 '11 at 16:44
    
Ah. Then I'll give my standard answer to "best language"-type questions: Python. Ignoring "significant whitespace" (which it is possible to do), it is close to a perfect language for me. In addition, there are an amazing number of very high quality libraries out there with Python APIs. E.g. The NLTK, Natural Language Toolkit (nltk.org). –  Peter Rowell Jun 22 '11 at 17:16
    
Ah, but what is it about Python that makes it better? Most languages all share the same toolkits - it's the language design that introduces things like threading, concurrency, VM requirements, compiling/interpreting, persistence, etc. –  Xeoncross Jun 22 '11 at 18:09
    
Python is just plain fun to program in. That's what makes it "better" to me. It's simple enough that you don't need a honking big IDE just to code in it. But also has a lot of interesting features like objects, functional programming capabilities, many existing libraries/frameworks/tools and a thriving and enthusiastic community with lots of open/free documentation to get you going. –  John Gaines Jr. Jun 22 '11 at 18:26
2  
True. The simplest explanation is that Python works sort of like my brain does and that just makes me more productive; I hardly ever find myself asking, "Now how would I do this in Python?" Although the GIL (Global Interpreter Lock) is a bit of a problem, it doesn't tend to affect me that much because I deal more often with multiprocess situations (notably multi-stage NL processing pipelines) than multitask. I also like the variety of interfacing options for accessing new external libraries: ctypes, Boost, etc. –  Peter Rowell Jun 22 '11 at 18:50
add comment

Python

Most universal and general purpose of them all, but also in case of web programming provides wider choice of products. Having standardized WSGI interface guarantees great interoperability between framework and servers. Some of notable Python web products:

  • Django — fully-fledged, mature high-level framework with advanced ORM, templating system, form handling, etc.
  • Twisted — framework for event-driven (asynchronous) network programming, it can be used for chats, socket servers, web services, you name it.
  • Tornado — also event-driven framework, but this one is designed for asynchronous web services.

Ruby

Ruby is also quite universal language. But by far it's most notable product is Ruby on Rails. It's design has been inspiration for many (including Django mentioned above).

JavaScript

Currently the only server-side choice for JS is node.js. It is very similar to Tornado and Twisted (by which it was inspired). However, it still lacks fully-fledged framework similar to Django or RoR built on top of it.

Scala

Being functional language it's great for massively parallel computing, as far as general purpose web programming goes there is Lift — web framework inspired by RoR, used for example by FourSquare.

share|improve this answer
    
It's worth pointing out that things like non-blocking responses, memory usage, concurrency, and other factors are huge in the market for a new language that will power a web application. –  Xeoncross Jun 22 '11 at 18:06
    
+1 for Django. It blew my mind when I learned it...that, or I was in a dazed stupor because I learned it and Python concurrently. Either way, a great technology I'd like to revisit it my ever-elusive "free time." –  zourtney Jun 22 '11 at 18:46
1  
"...it still lacks fully-fledged framework" Check out Express for Node -- expressjs.com –  T. Stone Jun 23 '11 at 0:53
    
@T: yeah, I've looked at Express. One of the strong points of Django and RoR is ORM. Express doesn't seem have it. –  vartec Jun 23 '11 at 8:19
add comment

In my latest web-project I started with PHP because I had used it for web-project before (quick start), but I had many problems with the language e.g bad UTF-8 support and dynamic typing. I also have some Java background and I really enjoy the static typing and good refactoring tools. Java also have good performance compared to PHP. But I also like the expressiveness of functional programming.

Scala and Play Framework

With the above experience, I really enjoy the Scala programming language, it's statically typed, has support for both object oriented and functional programming and it has good performance compared to other languages used for web development. But I didn't like the web frameworks for Java and servlets, and I found Play Framework that has support for both Scala and Java and it has a very fast development cycle - save the file and update your web page. I have been very satisfied with Scala & Play Framework the last month. But the Scala support in Play Framework is not very mature yet, and neither the tooling support.

In short I recommend Scala as programming language and Play Framework as web framework.

share|improve this answer
    
Play looks cool, haven't had a chance to really (really) testdrive it though. Coming from a similar php background, I found Lift to be quite easy to get a grasp of. It also seems to be a little bit more mature than Play, but I'm too new to Scala, to be conclusive. –  Yannis Rizos Jun 22 '11 at 18:48
add comment

Actually, you are looking probably at three types of resources:

  • The one which explains the basics of the language and why do you want to use it,
  • The one which compares several languages.
  • The one which criticizes some aspect of a language.

Both of those resources would be biased.

  • When you explain something about a language, you are trying most of the time to convince the reader to use it. So you would rarely say that the language sucks.
  • When you compare several languages, you always have a personal preference for one of them.
  • When you criticize something, well, it's hardly possible to be neutral.

You may have a chance to find some neutral comparison, but it's very difficult to write one. Personally, I would never be able to write a comparison between a real language and PHP without criticizing PHP all the time. And I'm pretty sure I'm not alone in not being able to be neutral enough.


If you want to have an overview of different languages, than you have to learn them yourself, and read a lot. By learning, I mean knowing the basics of the language, but being able to have your own opinion. It's not because you've read a Ruby manual than you're able to explain what is good and what is bad in this language.

This means that you have either to spend time (months, or even years) practicing. Or, you can read a lot. But try to read contradictory things. If some person writes that he hates PHP and PHP is one of the worst languages ever, especially compared to real languages like Ruby, C# or Java, try also to find a person who tells that PHP is wonderful, and it's mush easier to use than C#, much faster than Java, and much... (I really don't know what) than Ruby.

Remember one thing: if you already know well a language, you will be very critic at the beginning when learning another one, believing that the language you already know is better and much easier to use. It's like Linux users who hate Windows, and Windows users who hate Linux: in fact, neither OS is better; it's just that a Linux user don't know how to use Windows, and vice versa. It's only after you acquire enough experience in both than you will be able to decide correctly which one is better for you.


Last thing, often forgotten: it is also very important to be able to evaluate the "surroundings" of a language:

  • How good is the framework (or the most used frameworks)?
  • Is it easy to find a hosting service? Do you appreciate the IDE?
  • Are there plenty of well-written third-party libraries?
  • Is the community composed of highly professional developers, or mostly by beginners who don't know anything neither about programming in general, nor about the language itself?
  • Is the documentation verbose enough and easy to search and understand?
  • Are the language and the frameworks updated frequently?
  • etc.
share|improve this answer
    
I totally agree. It's these questions I'm looking for an answer for. You mention reading a lot - and that is what I'm trying to do - I need lots of resources to read about the languages I want to look into. While it's not possible to have an un-biased review, some are much more even balanced and that is all I wanted. –  Xeoncross Jun 22 '11 at 19:18
add comment

Well, since one of your criteria seems to be "is fun to work with", I'd think you'd want to find biased info. If the author of something is passionate about their language of choice, there's a pretty good chance they'll give a biased assessment.

Maybe you should approach it from the other direction. Since you sound like you're talking about making a career move out of it rather than a hobby, perhaps you should survey some job ads, find some interesting technologies/languages and look into those.

As for languages having specific goals, many languages don't have them. Most of the languages you listed are pretty general purpose. For instance, the language Ruby is a pretty general purpose language suited for many tasks. Once you add a framework to it, like Rails, that does have a pretty specific goal.

share|improve this answer
add comment

This isn't exactly what you were asking, but if I were looking for something to get me out of a web development professional rut, while still leveraging that experience and contacts, I would get into writing Android and iPhone apps. Being able to sell an app that complements a client's web site could really make you stand out developing for an internet that is increasingly accessed via mobile devices.

share|improve this answer
    
That really isn't a bad idea. I was also thinking about spending more time in illustrator and Photoshop working on my designs. Still, I would like to find out more about the web application options out there. –  Xeoncross Jun 24 '11 at 2:11
add comment

Have you really reached the limit of PHP, or just the limits of PHP as you know it?

Have you looked into Drupal? It's a PHP-based CMS and programming framework which strongly encourages good coding standards and practices. (Having had to work with OSCommerce in previous jobs, I feel your pain there.) Though PHP-based, it's different enough that often the "right" way to do something in pure PHP is not the right way to do it in Drupal, and you're going to have a good learning curve to climb to really master it. However, it may change your perspectives on the capabilities of PHP as a language and web development as a whole.

share|improve this answer
    
The last time I looked at Drupal (4 & 5) it was rather bad. Perhaps their newer versions use proper standards now. Still, as slow as it is I would much rather stick with the awesome frameworks out there. –  Xeoncross Jun 23 '11 at 18:41
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.