Please note that I\'m moving my original question from StackOverflow to here, be
ID: 648815 • Letter: P
Question
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:
Django
ASP.NET
Ruby on Rails
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
Explanation / Answer
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:
Complete control. You and your team wrote it all (apart from the open source libraries - Spring, Hibernate etc).
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?
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
Work with a language you like and have experience in
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
Build your business and persistence tiers first
Sketch out your web front end and get a professional to do it right
Best of luck with your project.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.