views:

435

answers:

7

To build a Web Application, what kind of open source web application frameworks / technologies are currently present that would be:

  • Faster to learn.
  • Ease of use.
  • Have widgets for rapid development(From a GUI perspective).
  • Database integration.

I would want this web app to communicate to a Java client. I am not bound to Java on the server side and free to try out any good rapid application framework.
To summarize, I haven't done much work for the server side hence am not conversant with the tools and technologies for the same.
What would you suggest?
Any and every input would be welcome!...

+1  A: 

There are tons, which ones are "good" depend on what you need.

There's Ruby on Rails, which is pretty handy.

For python there's django.

For PHP (I spend a lot of time dealing with PHP), you can look at:

  • symfony
  • cakePHP
  • Solar
  • Zend Framework

Which are all good in certain situations, and annoying in others.

timdev
+4  A: 

There is no single "right" answer to this question. As a Java programmer of some 10+ years when asked this question my usual answer is... PHP. There are several reasons for this:

  • Low resource usage (Apache, nginx);
  • Cheaper hosting;
  • Really low barrier to entry;
  • It's really Web-oriented rather than being general purpose that can be used for Web (like Java);
  • The fact that PHP scripts aren't persistent (like Java servlets are) between requests makes them much more forgiving and less likely to cause memory leaks and other problems;
  • No deployment step (like Python, Perl, etc). I'd say this is about the best thing about dynamic scripted languages. Just save the file and click reload on your browser;
  • PHP might be inconsistent in syntax and several other things but it's also mature and used by some really large sites on the Web (eg Facebook, Yahoo, Flickr, Wikipedia);
  • PHP is by far the most popular Web development language.
  • Widgets can be done by any manner of Javascript frameworks like YUI, ExtJS, SmartClient, jQuery UI, etc;
  • PHP fits well with MySQL.

That being said, a lot of these apply to other languages too (eg Python/Django).

I don't think you necessarily need a framework for PHP but if you do I'd look at one or more of:

  • Kohana: it's like a more modern version of the more popular CodeIgniter;
  • Zend Framework: it's modular so you can use as much or as little of it as you like;
  • Smarty: it's a powerful templating system.
cletus
PHP may be a rapid way to develop a web application. But it's almost never a *good* way.
Daniel Pryden
why is php almost never a good way?
Scott Evernden
@cletus: What among these PHP frameworks has a toolkit for Rich UI development?
Kevin Boyd
PHP, like anything that's popular, has its detractors. You can write some horrible and/or insecure code in PHP if you don't know what you're doing but then again you can write horrible, insecure code in any language.
cletus
@Kevin: if you want rich UI development, it's all about what Javascript framework you use. I'd recommend YUI personally. PHP doesn't have the same AJAXified components like Java does in, say, JSF (which I actually think is a good thing).
cletus
@Scott: I don't want to turn this thread into a PHP flamewar. StackOverflow has already had that one, here: http://stackoverflow.com/questions/309300/defend-php-convince-me-it-isnt-horrible
Daniel Pryden
Some good answers here and PHP is fine. Mine, in order of prefernce, would be PHP/CodeIgniter, Python/Django and Ruby/Rails. For user interface and widgets, YUI and Jquery.
pbreitenbach
+4  A: 

You've already tagged your question with "java", "php", "python", and "ruby-on-rails", so researching and learning more about those tools would probably help to answer your question.

However, I believe that rapidly building an application is almost never actually the correct goal. Normally, what you want to do is build an application that can be rapidly maintained -- that is, maintained with the lowest possible overall development cost over time.

Daniel Pryden
I disagree. Maintainability is important if it's being done on a commercial basis or the project is sufficiently large to warrant the investment, no argument there. But it is not a universal constant. If you're doing a little hobby project by yourself., speed of development is far more important.
cletus
@cletus: And that's why I said " *almost* never" and " *normally* ". Obviously, if you're only developing a hobby project for your own use, you should do whatever you're comfortable with. But in my experience, "hobby" projects have a tendency of turning into "real" projects more often than you'd expect!
Daniel Pryden
@Daniel: another reason I think speed of development is important is that you throw away code more often than you'd think and you should still throw it away more often than you do. As such, it's easy to get caught up in issues of being perfect and highly maintainable on something you should probably ditch wholesale a few months down the track anyway. Speed still matters for a throwaway prototype. Maintainability is far less important.
cletus
+8  A: 

Django has a few notable 'rapid' items including automatically generated administrative interface, bundled ORM (lowers dev time by not having to write SQL and some other code), and a large community with several re-usable apps.

Where Django (or Ruby on Rails or any other MVC framework for that matter) isn't going to be rapid is the learning curve when you first come to developing on them. Django (and RoR) have quite a bit of seperation-of-concerns and if you're not used to that sort of environment, it takes a while to learn the framework. If you're using an ORM that's something to get used to as well, and then of course for any framework you go with there's the API to learn as well.

PHP on the other hand is a little more intuitive in terms of where you put the code and how pages make up your web app. It'll basically let you slap code wherever you want so in the beginning it will probably be faster. In the end it will be quicker but your final product will be sloppier and probably require re-factoring later on.

This comes down to a question of what's the use of the framework. If it's for a hobby site, just go with what's easy (php), otherwise you might want to consider a well-supported MVC framework.

As others have pointed out, jquery is probably the pick for pre-made GUI widgets.

Edit -- And apparently now Django (as of 1.1) has a very awesome set of unit testing tools it comes bundled with. Things like an extended TestCase specifically for Django, a test client (you can do test page request w/o an actual client or server), a tool to give you a % of test coverage you have of the project, and a bunch of other neat stuff.

T. Stone
What's the learning curve for JQuery?
Kevin Boyd
I found Jquery very natural and in several places easier than vanilla Javascript. "jQuery in Action" (BOOK) got me writing jquery in about a week-ish.
T. Stone
Yeah, jquery is pretty easy to pick up, especially if you have some familiarity with programming. Check out jquery-ui for some quick and easy widgets as well..
Matt
+1  A: 

Speaking only in terms of speed of development, Ruby on Rails is the fastest one out there.

Itay Moav
I'm not saying RoR isn't fast, but Django is competitive.
Imagist
It still has a learning curve, however. Especially considering most people don't know Ruby prior to developing in Rails.
Karl
+1  A: 

I would vote for Grails.

Wilfred Springer
+2  A: 

I would say part of the learning curve will go into understanding concepts. I have been learning about web-apps for some months now, and with my improved understanding of concepts right now, most frameworks show very much similarities. Here are my results so far:

  • PHP: Great to learn about concepts for doing forms, http-post-requests, http-get-requests. easy interaction with database layer, and it is possible to obtain a working basic application in couple of hours. Almost no hassle with build-systems and web-server configuration.
  • Ruby-on-Rails: Great to learn about REST and more complicated CRUD applications. Great to learn about the complexity behind MVC and especially simple and powerful interaction with the database layer by using ActiveRecord. Introduction of meta-programming (code-that-writes-code, code-scaffolding) is great. Nice opportunities for free cloud-deployment, e.g. heroku.com and there is a very active community
  • Java: Powerful interaction with web-server possible (Tomcat, JBoss, ...) MVC is rather complicated here, and in general many configuration-steps necessary (build systems, ORM layer, ...) Grails is a great simplifaction and introduces meta-programming for Java. Jboss Seam introduces REST for Java (but have not looked into this yet)
poseid