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.

Please note that I'm moving my original question from StackOverflow to here, because I think it's more on-topic here

So, I'm working on an idea and I'll go into a brief overview of that but my question is, What are some good web frameworks for this situation? I have some experience in the following languages:

  • C#
  • Python

I have considerably more experience in C# than Python, however I am expecting to learn new things.

My idea is this, a completely web-based community-oriented Education Management System that focuses on making students and teachers day-to-day lives easier. For students it will provide a centralized place for them to do homework, study for tests, and reinforce concepts learned previously in class. For teachers it will give them a centralized place to handle assignments, attendance, homework, tests, and all other major parts of classroom management. All of that, but in a community-oriented fashion. Everything a teacher does is shared and open to constructive criticism, allowing other teachers to use their assignments/tests and for students or other teachers to comment, rate and criticize their assignments. This encourages an environment of openness that will allow teacher's to focus on teaching and student's to focus on learning. And that community wouldn't be limited to one school or school-district, this system would be completely school-independent.

Also note that I have no problem with hearing constructive criticism on this idea, however I would prefer if this post was more focused on my question.

I have somewhat explored about the following options:

  1. Django
  2. ASP.NET
  3. Ruby on Rails
  4. Silverlight

(1) I have Django installed and I played with it for a little bit, I really like how easy setting up databases are and how it handles the database completely for you. I don't really know how to use it very well and I don't quite understand the Model-View-Controller paradigm(?) for it yet but I haven't thought about it much. I also like the fact that it uses Python.

(2) I don't really like Visual Studio for developing in ASP.NET, I hate the way the web-designer works and it just feels clunky and old. I like the server-side development part though. I don't like how expensive ASP.NET and overall Visual Studio is, even if I do get it for free for now using DreamSpark

(3) I haven't been able to explore much with this, I could not get Rails (or maybe Ruby) properly installed. I first installed it within RadRails and that didn't work so I uninstalled RadRails and then installed the latest version of Ruby off the official Windows Installer and then installed Ruby on Rails through gem and even after all that it still didn't work, so I installed Netbeans and attempted to use it there but it still did not work

(4) I like Silverlight in some extents, I've played with this one the most, it's very similar to WPF (which I've used the most) in a lot of ways but I don't like how database connectivity works, at least in comparison to Django. I also dislike how expensive everything with Microsoft is, even if I get it for free for now with DreamSpark.

I would like to hear some suggestions from experienced web-developers as to what I should use and why, or at least what some good options are for my scenario

share|improve this question

closed as off-topic by JeffO, MichaelT, MainMa, gnat, Bart van Ingen Schenau Sep 8 at 9:23

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." – JeffO, MichaelT, MainMa, gnat, Bart van Ingen Schenau
If this question can be reworded to fit the rules in the help center, please edit the question.

1  
Maybe you've already thought about this but... the tool you use is not going to be nearly as important as your design. I like the idea a lot and it seems like something that would be widely used if the design is right. Have you talked to many users about it and what kind of feedback are you getting. I'd be interested in seeing how you are progressing, do you have a blog or something? –  Beth Whitezel Dec 24 '10 at 6:07
    
I agree, implementation > development tools and idea, however I'm completely new to web development and I'm having difficulty getting it started in a structured way, I started it in Silverlight but sort of rushed into it and I want to start from scratch but this time with structure. I think I will put up development status on my website indebi.org (it's vacant at the moment), but I really don't have anything to show for other than this idea so far –  Display Name Dec 24 '10 at 6:14
1  
In that case I'd recommend doing some proof-of-concept prototypes. Even if those are just sketches on paper it is going to give you something to talk about with your potential users. Until you get a good handle on what you want to build I wouldn't lock yourself into a paticular set of tools. The prototypes will give you a chance to get your feet wet in a couple different frameworks too. –  Beth Whitezel Dec 24 '10 at 6:45
    
I've done some proof-of-concept drawings before, however I don't think I was approaching it correctly. I did however create the blog and all, it's still being setup partially but it's at indebi.org –  Display Name Dec 24 '10 at 7:54
1  
Why are you striking out on your own? Your time will be better spent on contributing to currently ongoing efforts with similar goals. –  davidk01 Dec 24 '10 at 8:13

2 Answers 2

up vote 1 down vote accepted

Coding too soon?

When you're just starting out with an idea, it is best to not spend much time coding. @Bitoff is absolutely right in his comments guiding you towards just putting together a prototype that shows how the different user stories work. How do students pick up new work? How does a teacher get rewarded for their contributions? How do I manage password resets? How do I manage online payments? And so on.

This kind of design can be done using pencil and paper sketches that show how a user (either a teacher, student or admin) works their way through the system. You don't need a line of code. You don't need a framework. You just need to convince your significant other that you're not wasting your time.

How much control do you want?

Now comes the decision point. You need to decide how much control over the web application you want:

  1. Complete control. You and your team wrote it all (apart from the open source libraries - Spring, Hibernate etc).
  2. Configuration control. You and your team obtained a framework (Django, Joomla, Silverlight, Flex, etc) and configured it to meet your needs, mostly, with some clunkiness but, hey?
  3. No control. You've outsourced the whole technical development side to a software house and they did all the technical stuff leaving you to concentrate on the business side.

Given that this is a programmers forum, I'll assume you go for option 1. I know I would, but that's because I have a lot of experience with web application development and I can put something together very rapidly. However, there are compelling business arguments to go for options 2 or 3 depending on how you see your business plan developing and your own desire for technical ability.

Create the business and persistence layers first

At the point where you are happy that you have a design that works, then you should be able to knock up a simple prototype quickly because you've already thought through the difficulties. This implies that you are coding in a language with which you are familiar.

At their core, most languages allow for very rapid development, and it's only when the web tier is introduced that a great dump of complexity occurs. So keep it simple: create an integration test (a unit test that interacts with many entities) that demonstrates a simple user story and build out from there. Your code will follow your integration test and you will see how the different entities start to interact.

Design it all to be stateless.

This means that you don't hold anything over to use next time a function is called. Each time you call a function it only knows about what you have passed into it and nothing else.

Over time you will build up a suite of integration tests and will have a complete business domain and perhaps as far as a persistence domain as well. You will have a database model that works efficiently for you.

You will also have sharpened your skills in your chosen language enough so that you are prepared for the onslaught that is the web tier.

Build the web tier

When you start building up the web tier, you will thank your lucky stars that you designed for stateless operation, because it should all just click together nicely.

Your web tier will probably work under a Model-View-Controller pattern so that your Controller receives the web request, processes it by handing over to your business domain in some manner, and then receives back a Model containing data that is then presented as XHTML, JSON, XML or something by the View in the response.

At this point you are in the realms of user experience design, and so you need to make sure that you have some input from a professional graphic designer. They will help you to rapidly overcome front end design issues that could put people off from trying your site.

Summary

  1. Work with a language you like and have experience in
  2. Choose free and open source frameworks and development tools to avoid a) large costs later should you scale up and b) re-inventing the wheel
  3. Build your business and persistence tiers first
  4. Sketch out your web front end and get a professional to do it right

Best of luck with your project.

share|improve this answer
    
+1 for excellent and generic approach. –  Emmad Kareem Mar 15 '12 at 11:49

First off, I'm biased, python is the greatest imperative language ever designed and if you don't agree, you haven't used it enough.

I got into web development through Django and I've found Django is perfect for writing the kinds of sites it was designed for - publishing sites. If you want to write Yet More Blogging Software™, or you're starting out and writing something fairly simple you cannot beat it.

However, ultimately it is inflexible. I've found the templates, orm, forms and authentication system all to be inflexible. The other problem is that because it is so monolithic, it is difficult to just substitute in more suited components.

So I'd suggest against Django, but that doesn't mean you should give up on MVC.

I did look a little at the other python frameworks and found there weren't any that won me over. So in order to do web development, I've actually been rolling my own framework, it's easy to find good components in pypi, but I wouldn't suggest this either, it's a lot of work. In the future when it's more polished, I'm going to open-source it.

But for now, I'm not sure I can think of anything I can really recommend.

share|improve this answer
    
Could you explain better what did you find inflexible? Some use cases that were not best met by Django. One is certainly real-time systems, such as one can design in NodeJS or Twisted. But, other than that, I find Django rather flexible –  Andrea Mar 15 '12 at 10:53
    
@Andrea, I haven't used Django for over a year now, so it may have changed in the intervening time, but I found that it was well suited to sites where the content is created exclusively by a small number of trusted users (it was created in a publishing house, so you would expect it to excel here). This is true especially for the users/admin system. I found it difficult to get the ORM to do what I wanted, especially when you contrast it with sqlalchemy and I found the template system substandard compared with jinja2. –  dan_waterworth Mar 15 '12 at 17:30
    
This is curious; I had the opposite experience. The form framework is pretty flexible, so one can let users generate pieces of content rather easily. Instead the admin is a really good tool, but pretty difficult to customize. –  Andrea Mar 15 '12 at 17:55

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