Ask HN: What language should I develop in?

10 points by ashread ↗ HN
I'm currently working on an idea for a community management app and as I'm not technical. I was wondering what the pros and cons are of developing in a certain language. Languages that have been recommended so far include; Ruby, PHP and Python.

Any advice would be greatly appreciated.

If you're interested, here's the app I'm developing: http://getnudge.co/

44 comments

[ 4.1 ms ] story [ 101 ms ] thread
Real answer: it doesn't matter. Pick one and go.

It takes 3 months to get okay with something. 6 months to be decent. 9 months to be like, okay, I kind of get this, and then at the end of the year you'll probably change your mind and try something else.

I tried PHP, it was easy. Too easy. Hated it.

Tried Ruby, then Rails came on the scene and it became cool. Ended up hating it too.

Now I'm on Python. Learned Django. Tolerating it, but switched to Flask.

What I really want to master is JavaScript, closures, then node.js and AngularJS.

Just start. You can switch after. And to be real, making websites is actually really easy with any of the languages. Whatever you're thinking of doing there's probably already ten other projects on Github that has redone what you're thinking of that you will end up using.

It's the deploying, that perfect minute customization that you really, really, really want, scaling, and long term maintenance that's going to be tough.

I started off my Python adventure in Flask, and now pretty much use Django for everything - I found that when I used Flask, I'd essentially just start re-implementing Django.

Also, Django REST framework is utterly amazing for building APIs.

+1 for the Django REST Framework. However, I'm not a huge fan of Django's ORM.
+1 for not being a huge fan of Django's ORM. :)
Then you start replacing the Django ORM with SQLAlchemy and the templating system with Jinja2 and the circle is complete.
Thanks so much for your feedback. At the moment I'm learning CSS and some more advanced HTML, once I feel comfortable with that, I plan on learning one of the above languages.

For this project - as I'd like to develop is asap - I may outsource and learn alongside development with the aim of one day being able to maintain and develop myself. Though I know it'll be a lot of hard work and probably a long time before I'm in a position to do that.

Thanks again for your feedback.

Reading code is harder than writing it. Don't rely on maintaining your devs' app as a way to learn.
You hit it right on the nail.

Once of I kind of get the hang of a language/framework, I end up copy pasting the heck out of everything until job done, then move on cause I'm bored.

Often I move on before I've "mastered" something, because I get bored, generally having an idea how everything is working, and put it on the shelf of nice2know tools.

>It's the deploying, that perfect minute customization that you really, really, really want, scaling, and long term maintenance that's going to be tough.

If it is a client project it will go to that stage, otherwise I'm happy to learn something new just to learn.

So whatever. In every language you pick you will have your "wow" and "meh" moments.

(comment deleted)
All three can get the job done, have tons of resources and extensions available, very active communities, proven reliability and infrastructure available, with a similar learning curve.

If you have a friend that can help you when you're stuck in any of these languages it would be a good reason to choose one over the others.

The language is not important. There is another factor that is way more important:

Do you know people using one of the languages? If yes, you could ask them about problems you have. Will be easier than going to stackoverflow.

For me it's about the community. Every language has a different mindset / way of approaching a problem. Read some groups, have a look at the various packages on github and see which community fits best with what you're personally doing.

Having contacts / friends who could help is also an advantage.

Great to hear you're rolling up your sleeves and going to give developing it yourself a go.

I taught myself to program using PHP, then moved to Rails, and now do mostly Javascript and Node work.

There are a few things to consider. Number one, you're absolutely going to need a front-end, which means you're going to need to learn javascript, and probably use a framework like backbone, angular, or ember. Personally, I think knockout may be the easiest of all of these to 'pick-up', but none of them (I don't think) are going to be easy as a beginner.

At first, I'd suggest your back-end can wait. You can use parse or firebase or one of the other back-end as a service providers to manage your data. Just make sure you're able to get it back later.

Now, if you're adamant about doing the server-side stuff, I'd say go with Ruby-on-Rails, which is a framework for making it easier to build and manage an application written in Ruby. The framework does a lot of stuff for you, and you can host it on heroku fairly easily.

A few good things about Rails (I haven't used other frameworks like Django (Python) or Larvel (PHP)), is that it forces you to have a program structured in such a way that if you bring in another developer at a later date, they should be able to find their way around your code base fairly easily. That's what got me to make the switch, I was doing a contract I knew I wouldn't be working on long-term, and new that a rails app would be easy for somebody else to step in on.

> probably use a framework like backbone, angular, or ember.

Absolutely, do not do this. Just use jQuery at first. Don't use a framework until you experience WHY you need a JS framework.

That's a good point jeopour. A framework can also make things more complicated, but they are good for learning how to structure your programs. What would you recommend for learning structure.
There are a lot of excellent resources online such as blog posts or open source projects on github, but the way I learnt was by reading a couple books people had recommended me. I also took patterns commonly found on the server side of things and implemented in a way relevant to my client side code.

Let me know if you need some recommendations!

Thanks so much for your feedback. I think with this project I'm going to look at outsourcing the development, but roll up my sleeves and learn as much as I can at the same time.

Currently I know a bit of HTML and CSS and I'm looking to 'master' both of those and then pick a language to try learning. Though after reading your reply, I feel I need to learn Javascript too.

Really appreciate your thoughts on Ruby and thanks again for taking the time to reply.

Cool site, rendered well on my iPhone except the top logo which was a bit blurry on a retina screen.

Keep it up

Thanks so much :) I'll take a look at the logo and see if there's anything I can do with it.

Appreciate the feedback. Is it something you'd personally use?

It sounds like your are not so interested learning to programme but rather it is just a means to building this project you have in mind.

That being said you should just choose a popular web framework like Ruby on Rails or something like CakePHP. This means that any problem you run into will have been encountered and solved by someone already and you can pretty much just Google your way to a half decent prototype.

Hello, thanks for your reply. You're correct, my main aim for this question was to understand which language may be best to get the app developed in.

I'd love to learn a language too, and eventually be able to develop/maintain apps myself. But for this project, I won't have time to learn.

Thanks for the feedback.

Use whatever you're most comfortable with.
Don't go with PHP. It's obsolete and obscure programming language. Look at Python (Flask), Scala (Play Framework). Tool selection is important. Do not listen to those who say that it does not matter.
PHP might be a lot of things, but 'obscure' isn't one of them.
By obscure they must have meant, 'yet still ubiquitous'
The technology choice is a consequence of your needs. If it is a one page web app maybe node.js + JS-framework-at-your-choice, or Rails + Angular.js are good options; if it is a "classic" web app there's plenty of options: Rails, Django, Play (a Scala framework), PHP, Haskell, it's up to your tastes (I would seriously consider Yesod for example, an Haskell web framework); if it is a normal app Haskell, Java, Scala, C, Python/Pypy, Ruby, ...

I suggest you to choose some options, play with them for a short time (2 days - 1 week), and finally go for one of them.

Real answer: depends how much you want to become technical.

Mostly real answer: Ruby, PHP and Python are fine choices. Avoid Java, C++, or C#.

Relevant answer: Assuming you want to get something done before "becoming technical" (if ever) Python, by a wide margin - but more than that, you have to pick a framework to work in: Django, Web2py are the two I'd recommend looking at.

Far out answer: Look at Tersus.com - If your app fits tersus (and many do, at least in their prototypical/MVP stage), you won't have to program anything, you'll just have to draw an annotated diagram.

>Avoid Java, C++, or C#.

Can I ask why? I'll fully admit to being a C# "fanboy", as they say, at this point in my career, but that's because it has so many features and syntactical constructs that are amazing and that I simply NEVER encountered elsewhere in my schooling, internships, or career. I simply feel more able to turn my actual ideas of what I want the computer to do into code with C# than anything else I've used, including Python (distant second) and Ruby.

Op said he is not technical. C# is a fine language, but not if this isn't your profession. Python is.
Avoid Java o_0. Are you seriously kidding me? So many tech frameworks, platforms, and tools are building using Java. Spring, Android, Hadoop, Solr... And Java 8 awesome features are coming this March.
Did you read the guy's question? He said he is not technical. Java is a fine language (well, according to some...) but modern Java and frameworks are the realm of a professional or at least want-to-be-semi-pro-and-willing-to-invest-a-lot-in-all-the-java-8-things programmer. OP doesn't seem to be Java's audience.
You cant go wrong either with Rails(Ruby) or Python (Django),they will help you develop your app quickly and both solutions are fun to use. I personally prefer Ruby while Python is easier to deploy on a server. But you'll attract more data scientists with Python when your prototype is mature.

PHP : while easy to learn, i would not recommend it.It's an old badly designed language that has little future outside cmses.I only use it to customize CMSes today,i would not develop any app from scratch with it, furthermore writing PHP is awfull compared to Ruby and Python.

NodeJS: While Javascript everywhere seems like a good idea(you'll have to learn Javascript to script the browser anyway), NodeJS use async programming , and async programming is hard,no matter what people say, furthermore Node is not mature yet, especially its libraries.

Java(JVM):If you have time try it(Spring/Play/...). It will feel hard and verbose but You'll learn a lot of interesting concepts. If you want to code a prototype quickly forget about it. And Java has a lot of very good and mature librairies.

So if you want to develop an app quickly and you care about how your code look like, go with Python or Ruby. If you have more time go with the JVM.

Also check basic informations on these topics :HTTP,Rest,OAUTH you'll need them pretty quickly if you want to interact with Twitter.

While I agree that PHP is a badly designed language, I disagree that writing PHP is awful. You can make PHP beautiful. OO PHP and using MVC makes things way more easy to handle.
Which ever you are the quickest programming in. Lets face it time is money.
C#. It's a modern multi-paradigm multi-type-system language.

Best choice if you can get Visual Studio (paid) along with ReSharper (paid).

Will let you target all mobile platforms via Xamarin (paid) (since you want to develop an app as opposed to a website).

If you want to get a prototype quickly rather than focus on code quality then one of the purely dynamic language options would also be OK.

Do you know of some open source project/application which can be useful in learning C#?
Depends on your objectives and situation.

1) gamedev => MonoGame 2) business (SQL DBs) => NHibernate 3) web => SignalR

I personally never learned by participating in OSS but times change.

If you want to be a developer, you should aim to learn one new programming language a year, at least to the point where you can understand the strengths and weaknesses of the language. High-level languages like Ruby, PHP and Python are all good. At some point dive into functional, and at another point go a bit lower: C, perhaps.

However if all you want to do is build this one product, then you need to evaluate which framework is easiest to get started in. So, choose a feature and build it in a few different frameworks and decide which one clicked for you.

My recommendation is to try Rails, Django and CakePHP. If you're feeling brave, Meteor (in Javascript) is worth a look. Figure out what worked for you, and what didn't and make the decision from there. You might like Ruby but hate Rails: try Sinatra. You might love Javascript but hate the conceptual building blocks of Meteor: try Node.js. And so on.

There is a lot of personal preference going on here, and I presume this is for now a side project so your focus should be on having fun. I think if you can get your head around it, Rails will be the one that gets you the fastest from "I have this idea" to being able to use it.

One of my friends wants to learn how to code, and asks me where to start, and what language (PHP? ). I always tell them; well think of something you want to solve first, smaller problem the better. Then google how to work out that problem. If they can't do that; (i.e. they do not make any attempt! ) , I won't invest anymore of my time because they clearly lack the mentality to do it.

I started with PHP (3 back then) because I had built (copy paste amalgamation) a website, and I didn't want to maintain all these html files, so probably altavista'd something in the lines of "how to include other page into page html" . I know back then I was also messing with Newsdesk, which was CGI/Perl, and remember adding some fields to the whole thing so my buddy's could post their Warez uploads on there.

I actually ended up with one of the biggest Warez sites in the scene at that time. I actually had mostly no idea what I was doing. And there was no Google back then. Altavista ruled the market.

Anyway what I'm going to is: If you do not have this mindset, you will probably not make it as a programmer. And that's ok, because maybe you have different goals. Just make sure you understand what you want to do.

There are a huge amount of musicians who probably never imagined being great or a rockstar, they just liked playing music and figured out how.

Last note: if you're picking between for example "PHP" , "Python" , "Ruby" I would definitely start working with a framework, because it will help you start off the right way; using a design pattern and command line tools.

I can't speak for much of the other languages beginners environments, but ruby's was excellent. codeschool, codeacademy, railscasts, stackoverflow, and an 11 week developer "boot camp" in Boulder were my leg up. Most important thing is to try to find a mentor! In person or online, pay for one if you have to (elance.com). There are some things a mentor can tell you in 10s that might take weeks to figure out without help. Stackoverflow is not kind to noobs.
Start with anything that takes you to an MVP fast. You probably will be iterating months with this until your solution needs a re-thinking or pivot: you don't need to change your lang right now.

It happened to me 3 times the same way: we started with X in a year or 2 we ported to Y.

Personally, I would go Ruby or Python, they're pretty much solid, lots of devs around. Then, if you have the need to scale: i loved Erlang, but I like also Go a lot.

It's a little bit like asking which color you should like. A lot of main stream programming languages are very similar in capabilities but differ in some of the details on how they express this, i.e. the syntax. The programming languages you end up choosing probably has a lot to do with how appealing the language and the ecosystem around it is to you.

You might want to try a few languages such as Python, Ruby, PHP, Javascript, etc. I would suggest to focus on the language first and then the frameworks.