14 de mayo de 2008

Choose the right language

(This post is a continuation for this one)

Many students find themselves in a trouble when they have to decide which programming language to choose when they are developing the final project of their university studies. As a lecturer and director of some of them, i always try to recommend them one the the most comfortable languages for web development: PHP.

About a month ago, one of my students decide not no follow my advise. She wanted to develop her whole project (an enterprise calendar integration solution involving mobile phones, a web and SOA) in Java. She wanted to use Java, Struts and Hibernate.

At first, i was upset because of her decision: not many students are strong enough to "face" the director of their projects. But since I've been studying the evolution of her project, I realize that she was right in that decision. Many of you know that I'm not a Java fanatic. In instead of Java, I do prefer some other languages (at this time I'm involved in a BIG project using Python). But I have to accept that Java IS the language for corporate. Why?

First of all, because Java is fast to develop. Using an IDE like Eclipse, you only have to type a dot (.) following an object and you'll get a complete reference of the methods of it (this can be done because Java is statically typed).

Secondly, because of the cost of the development. The most expensive part of any project is people's time. As Java is "easy" (put lots of ditto marks here) to learn and fast to develop, you need less investment in development time. Even when Java needs more expensive machines to run fast than other languages (Sun Microsystems' business model is server hardware, not the Java language), the cost of that hardware is lower than the cost of the additional development time for other languages.

In the third place we found the structure of the language. Java is good for rookie developers because they can learn a lot of software architecture while they are writing their own code. Perhaps you can think that this is obvious, but having each public class in a separate field or the way that Java implements the messages using methods defined in functions can not be easily taught by drawing in a chalkboard.

And fourth and final, because of the lots of know-how that can be found by querying google. Lots of tutorials, how-tos, screencasts and other training documentation can be found at no cost. In addition to that, almost every developer that has had a trouble with Java will be pleased to publish the solution on the internet and pleased to become useful to any other developer in the world. Java has a great community of users that have developed lots of useful plug-ins for Eclipse, frameworks or libraries that can ease your work. Almost everything can be done with a dozen of clicks!!

So, the right language is the right for you and for your project. If you need to decrease development time, use Java (No! Do not do that! Use python! XD). If you need performance use assembler (Just kidding, use C/C++). Think about scalability and what will happen if your system grows up. Python and Java are scalable and maintainable. Many other languages are not. If your system is not going to grow (at a reasonable level of doubt), use whatever you are trained to.

But do not use Java, PHP, Ruby or Python without trying them, or just because somebody tells you to use them. Test them all, compare them all and finally choose one. Do not depress if things do not work at the first attempt (it can take a week until you've got all the environment properly configured!). Keep trying until you've got enough information to make up your mind and take a decision.

This was what my student did a month ago. And she is getting very good results. You can follow her progress in her blog