If you were to make an HN/Reddit/etc clone (for a niche)...

10 points by Andrenid ↗ HN
... what would you use? What language/framework, what database, what hosting (dedicated servers, cloud?), etc?

Reason I ask: I'm "just another" web guy, dabbled in a bit of everything, but never really became an expert in any single technology or language. I'm the webmaster for a large corporation, managing their enterprise CMS, in-house graphic design, landing pages, email campaigns, content writing, etc. Eg, "a little bit of everything".

I want to get a bit more into the development/site-building side of things, maybe build my own little startup. I've got a niche that could definitely do with a dedicated HN/Reddit style link-sharing/commenting site, and lots of other ideas but since this is more about the learning than the actual end product, i'm interested in what HN thinks is the "best" solution for these types of sites, so I can start from scratch and learn it all properly (i'm willing to do courses etc, I just need a direction).

I've been stuck in this "Where do I start, what should I learn, what should I use?" rut for 6 months now.

18 comments

[ 3.3 ms ] story [ 50.8 ms ] thread
Short answer: Use anything, it doesn't matter. All the major languages have good web frameworks these days.

Long answer: You will find comparisons between Rails, Django, ASP.NET MVC and a hundred other web frameworks all over the net. While some of the web frameworks are more elegant and mature compared to others, all of them are constantly evolving and growing. Your choice should depend on your core language skills. Which language are you comfortable in? Which language do you want to be coding in for a long time and possibly make a career in?

My suggestion would be to pick Python. There are plenty of hosting options for Python and Django. Have a look at http://code.google.com/appengine/

Django with PostgreSQL and Apache would be the most practical.

More fun? try Go and Redis.

My vote goes to Django as well. I started hacking a reddit clone last year and there are many apps to get you started (comments, votes, private messaging etc). You may find that the apps don't exactly fit your needs and that's when you start learning even more, by looking their code.

One of the main problems I had was user permissions for each post and category (subreddit) and what that means for caching and memory management. At any point you will need to know if a user voted on a certain post and whether or not they are allowed to edit or delete it based on what permissions the user has and in which category it was posted. Threaded comments are also a bit of a pain when it comes to managing memory - I've read somewhere that Disqus uses a built-in PostreSQL function to build the tree but I haven't tried it.

For dealing with trees in Django, I recommend 'django-easytree'. I've beeng using it for almost 2 years and it's flawless.
It sounds like you actually want to learn instead of just implement, so just telling you that HN and Reddit are both Opensource probably isn't what you want to hear.

My suggestion is Ruby On Rails (simply because its what I use and like), it has a very large, helpful community and tons of resources.

The steps I would take (in hindsight), are:

1. Grab the Pickaxe book for Ruby 1.9 and start reading. http://pragprog.com/titles/ruby3/programming-ruby-1-9

2. Do the Ruby Koans - http://rubykoans.com/

3. To get your foot in the Rails door, check out the Rails Tutorial - http://ruby.railstutorial.org/

4. Once you have those basics, check out http://railscasts.com, Ryan has covered just about every problem you are likely to face, and his casts are top-notch!

5. Build something

6. Iterate.

Of course there are other languages and frameworks which would all work just as well, but since it sounds like you don't really have a solid programming background, I think Ruby is really a great language for you to start learning as if there is any language which will keep you interested, its Ruby.

RoR is one that obviously comes up a lot in discussions, but i've always been turned off by it due to PHP based stuff being so much easier to set up on a server (and to run multiple projects parallel to each other on a mix of frameworks).

Ruby Koans looks fun though, so I might work through your pointers anyway just to learn something new, thanks.

Until you want to get some bigger projects up, take a look at hosting on Heroku. Their pricing scales badly, but you can run a semi-decent site on the free package, and for any projects that take off, you can scale instantly by simply dragging some sliders.

Enjoy the Koans, they are brilliant fun and great for learning.

I wrote a fairly in-depth version a few months ago, that implemented users, voting, images, and ran in Python over Postgres on an Linode. If you're interested, you could check it out at https://github.com/e1ven/Lonava
We actually did exactly what you're asking here a few weeks ago and applied to YC this round with it.

http://www.exipe.com

We built it in node.js and MongoDB. While node and mongo are young projects we have found them very stable and extremely fast. (we noticed a lot of problems reddit had with scaling and we were interested in the stack)

Our decision to build Exipe in node/mongo has been a bit controversial but we've found no problems thus far with it ... ~2 weeks out with slowly growing traffic. Check out a few of my latest blog posts here about the experience:

http://www.travisglines.com

I've spent today reading through a lot of the suggestions in the comments here, and node.js definitely looks exciting to me (not sure why, maybe because i'm familiar with JavaScript already so it's not so "alien" looking?)...

Will play with it more over the weekend, thanks.

If you want to move things fast - you can spawn off a new social news site in slinkset.com and you get a basic social voting site similar to http://help.slinkset.com

But if your intention is to learn how such a site work, I would recommend you to write one from scratch, and there are many open source reddit clones floating around, that can help you

> I've been stuck in this "Where do I start, what should I learn, what should I use?" rut for 6 months now.

Well, do anything else besides nothing. You could have learned Django, Rails, or anything else in the last 6 months. Just pick some web based technology and build something with it. There is no "best" solution.

> I just need a direction

You don't need a direction, you need decisiveness.

Agreed, although a lot of my indecisiveness comes from the fact that every single site I read talking about languages/frameworks, all swear that one is better than the other, and not to use 'x' over 'y', and then the next site you visit says the exact opposite.

There are SO many languages/frameworks, and all seem to say they're the "better" one to use.

You're right though, I will just pick something/anything for now, so i'm not wasting time, and if I need to switch to something else later, so be it.

Im basically in the same boat as you "jack of all trades master of none" and decided I want to go further into back-end programming. I started working on a HN "clone" using Codeigniter (with freely available online tutorials). I opted to stick with PHP for now because I am already familiar with it to a degree and its ease of implementation. I really just wanted to get down to work and be able to test it using my local dev environment and my simple shared hosting account. I decided to stay away from RoR / Python/Django for now just because it would mean learning new syntax on top of learning how to use MVC. Once Im finished with this I plan on venturing out from PHP.
I've done a fair bit with PHP but never to the point of writing my own projects, just modifying/tweaking existing stuff (my days are mostly filled with WordPress and Drupal sites, and some custom made PHP/MySQL apps). I'm definitely open to learning a PHP framework but just looking into them is scary... there are SO many, and everyone swears that one is better than the other, with no discernible "winner" of the bunch.