As I always say, there is not one tool that does everything but instead different tools for different requirements. A good programmer chooses his tools solely according to the requirements. You have to remember that requirements can be functional and nonfunctional, and often nonfunctional requirements are more important than functional ones for the success of an application.