Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top


  • many different user experiences: website, mobile, etc.
  • user management, registration, roles
  • large amount of music metadata
  • genome search that finds closest music
  • public and private RESTful API for all functions
  • massive server-side service scale
share|improve this question

closed as off-topic by user16764, MichaelT, GlenH7, gnat, Kilian Foth Oct 24 '13 at 10:28

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions asking us to recommend a tool, library or favorite off-site resource are off-topic for Programmers as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it." – user16764, Community, gnat, Kilian Foth
If this question can be reworded to fit the rules in the help center, please edit the question.

Might want to give a brief description of what Pandora is. I've never heard of it, and the website just gives me a "sorry not allowed to show you this website since you're outside the U.S." message - which I assume is the cause of your interest in rebuilding! – Carson63000 Dec 29 '10 at 4:40
@carson, its a music streaming service. – GrandmasterB Dec 29 '10 at 4:53
Are you looking to start your own? Are you limiting yourself to exactly what Pandora currently does (which is already pretty awesome), or something to build more upon? – Mark Freedman Dec 29 '10 at 5:25
@carson it's a music streaming service that has a very large database with attributes for likely every song you've ever heard. Given a song you like, it will grab some important attributes (instruments, vocal attributes, genre, etc) and will recommend to you which other songs it thinks you will enjoy, and it will stream those in a "radio station" format. It's pretty remarkable how well it can find music you'll appreciate. – Mike M. Dec 29 '10 at 17:51
@carson: Pandora ~= LastFM, but not quite Spotify as you can't choose the actual tracks. – JBRWilkinson Feb 14 '11 at 16:21

Amazon codebase is written in C++. Google is using C++, Python, Java. Stack Overflow Network is using .Net. Wikipedia is using PHP. Facebook used to work with PHP, now they've rolled out their own language.

Great software isn't about technology, it's about people. You need to choose the tool that fits your work team best (because Pandora isn't a solo project, you'll need at lest two people to help you).

share|improve this answer
I upvoted because I agree with the sentiment, but it's hard to agree with the notion that the technology you choose doesn't make a difference; it does. Unfortunately, sometimes technologies are chosen that have an Achilles heel, and by the time you realize that, sometimes it's too late to do anything about it. That's why questions like this are asked; hopefully there are people out there who have tried this sort of thing and can tell you the good, bad & ugly about their particular technology choices. – Robert Harvey Dec 29 '10 at 16:12
I downvoted because this doesn't answer the question. I know far too well that this is about people, I wanted to know what you would choose. – dblock Dec 29 '10 at 23:11
Facebook use PHP and leverage the HipHop compiler to turn it into C++ for speed. They use PHP for the rapid development aspects as going straight to C++ is expensive. – JBRWilkinson Feb 14 '11 at 16:19
@JBRWilkinson, True. I just wanted to point the fact that there are no single best tool. Every major website is using a different tech, like LinkedIn is using Java, Reddit is using Python and Twitter used to be coded on Ruby. – vz0 Feb 14 '11 at 17:00

The first thing that you have listed is the most important: "many different user experiences: website, mobile, etc." This suggests that you're going to want to support multiple technology stacks (iPhone, Android, Web, etc.). Since that's the case, you'll want to write things that can easily interoperate with each other through well understood standards. Consider architectural technologies like REST, and try to separate well your back end storage from your processing machine, from your front end web servers, and the mobile devices.

Survey the platforms to find out which technologies are best on them, then choose the ones where you have more flexibility (like web servers) later. Finally, consider the scale of your project. Some languages will save you time in writing and debugging, but will kill you on performance, especially for large-scale projects. You can find many stories about how large-scale Python and Ruby on Rails deployment had crushing performance.

share|improve this answer
The idea of loosely coupled parts with language-independent interfaces is great. And it works, I've seen it work. – 9000 Dec 31 '10 at 23:59

I'm a Java guy. I would choose Java.

What do you code in? Which language makes you most productive?

Java is great because:

  • There are lots of developers with great Java skills
  • Java tooling is mostly free and fantastic quality
  • Its cross platform. Linux is cheap for servers (and you will need lots of servers). Java runs very well on Linux but you can develop on Windows, Linux, OSX etc
  • You can integrate it with pretty much anything, REST, databases, NOSQL etc
  • The JVM is one of the modern wonders of the world. Hotspot is amazing at tuning code and copes with alternate languages, Groovy, Scala, Clojure etc
  • Spring has great libraries to help you manage Security and Social network aspects
  • Did I mention the tooling ;)
share|improve this answer
You could say most of those things about any of the language options. Java is an old language with severe limitations that isn't being well supported anymore. – Neal Tibrewala Dec 31 '10 at 22:28

Guido van Rossum is writing about the history of Python. It struck me that behind Python and other programming languages van Rossum has worked on was the intention to have a language customized for the problem at hand. Of course, he was working for a research institution with ample experience on designing and compiling programming languages.

After reading most of the blog, I went back to the task at hand, which is adding some new features to a program I started writing over ten years ago. Having been away from the code for a long while, I had to study it to know how to best approach the new task, and Behold! Most of what the core of the code does is to work around the strictness of Delphi Pascal to create an environment in which extensibility, attribute inheritance, and unlimited undo is easy to do! I created my own Python-like programming language without knowing I was doing it. On hindsight (everything is clearer in hindsight), it would have been best to embed Python in the core, or go ahead and implement a custom language.

But that was then. Today, mainstream languages have an enormous amount of support from all kind of high-quality libraries and tools, something very difficult to have with your own language.

The story told, my suggestion is to use Python for this pragmatic reasons:

  1. The language is nice an comfortable to program in. The learning curve is mild and it doesn't get in your way like corporate/bureaucratic/committee languages do (sorry Java and C++).
  2. If you can't find what you need in the standard or the third-party libraries, you probably don't want it.
  3. Python makes it easy to fall back to another programming language when you decide that's what you need.
  4. Python is an extraordinary base to create a Domain-specific Language (i.e. your own language) without renouncing to modern tools and libraries (take a look at what Pyparsing has showed to be possible in Python).
share|improve this answer

For massive scalability and good concurrency I would look at Erlang. Its a functional language that was built for the Telecom biz where fault tolerance is a major goal.

By using a functional language like Erlang you also can forget about 95% of the concurrency issues that can happen in java.

share|improve this answer

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