Marketable Mix of Languages
Recently I have had to ponder a very unsavory prospect. The prospect of having to learn a new favorite programming language. Since I am a web developer my favorite language is now and has been ColdFusion. The problem is that, while I deeply hope it will thrive under new ownership, ColdFusion faces a very uncertain future. While I would love to stick with ColdFusion forever, I have had to think about a world without it.
The real problem is that while ColdFusion has its handful of issues, there is nothing that approaches its ease of use and relative power. ColdFusion's performance leaves something to be desired, but that is because its riding on top of Java. JSP suffers from the same issues. Still, Macromedia has been working on tuning it, and I don't think many will complain about MX 7's speed. Still, it seems that ASP.net is the fastest. Of course the relative speed of any web application is only as good as the developer. ColdFusion's ease of use is one of the things that has caused it the most trouble. Much of its bad reputation is due to inept programming, or poorly administered or written SQL, not the application server itself. It is really easy for a novice to jump in and start throwing tags around willy-nilly, building dynamic web applications with CF. However, these almost never scale and rarely ever end up in use. Frameworks such as Fusebox and Mach II have helped CF in these respects, but the issue is that developers who choose to use these frameworks are few and far between, while the landscape is littered with sloppy CF projects.
Most of the companies I have interviewed with in recent history have confided that they are having extreme difficulty finding ColdFusion developers. This is astonishing to me because it seems as though everyone has at least heard of it, and many have dabbled in it, so what is keeping them from using it full-time? The answer is that it is not easy to really get a handle on Object Oriented Programming principles. ColdFusion is not an object oriented language, but it does an extremely good job of simulating it now that we have components and inheritance.
Well, we have covered what's up with ColdFusion, what about the other languages out there? Let's start with ASP.net. The original ASP was only marginally better than Perl for building web applications, and less secure because it had to run on IIS. Microsoft has taken it on the chin for the issues with IIS and ASP, and the result is new versions of IIS and ASP.net. The good thing about ASP.net is that now developers can use full C# classes by invoking simple tags. This is really cool because credit card transactions for example can be removed completely from the web server and can be processed by a C# class running in the background and connecting to the bank via another secure socket. This creates another layer of abstraction between the hackers and the data. ASP.net is fast and it is capable, so what is wrong with it? It's complicated. Microsoft has overhauled Visual Basic, and now if you are an existing VB developer, you may as well learn C#. It takes a lot of code to do a little if you are not using the default tag library that comes with it, or one that has been downloaded from the web. There is a silver lining to this cloud. If you do it right, you will only ever have to write that code once for that particular function, then you can use it over and over in your future code. Another advantage is that since its Microsoft, corporate America loves it despite their security issues. The reason is that they are already heavily invested in the technology. Many of them are running Windows Server 2000 or 2003, and it comes with IIS and therefore, if it has been kept current with updates, is ready to process ASP.net code requiring no further investment. ASP.net code is not script anymore, but instead is compiled code ready to run against Microsoft's .net framework. This framework is similar to Java's runtime / JDK, but since it is all closer to native code, and Microsoft knows its operating system as well as anyone, it seems to run much faster than similarly compiled Java classes against the Java runtime. However, you have to run ASP.net on a Windows server, and you can't easily port it to another platform.
JSP is relatively new, and the JSTL has made it more ASP.net like, or vice versa. In JSP 1.0 / 1.1 developers had to write longhand Java classes in the pages themselves, or in the pages to which the html form was submitted. JSP 2.0 has done away with this in favor of a customizable tag library. Again, it takes a lot of code to do a little, but you only have to write it once. Its advantages are the same as ASP.net. It is compiled so it runs faster, but it will only run as fast as the Java runtime can process it. Therefore it needs a Java container like Tomcat or Macromedia's JRun. These are sometimes difficult to configure, and have memory leak issues. Unfortunatly ColdFusion has to run in these containers also, so it has the same issues as JSP. Many of the memory leak issues can be avoided by careful programming, but they can be annoying. Many companies seems to trust JSP because of its pretty good security track record, and its ability to work well with their existing Java infrastructure. IBM is backing Java so it has a strong following. At the same time IBM has started to back PHP so one has to wonder how strong its commitment to JSP is. Perhaps IBM realized that JSP is just no good for high volume public facing websites, while being acceptable for intranet applications.
Let's talk about Perl. There isn't much to say about it anymore. It used to be very dominant, but there are only a few sites remaining that still use it. It is pretty cumbersome, arcane, and slow. It was originally designed for writing scripts that could perform functions on UNIX servers. It is still used frequently to perform those tasks.
Python is relatively obscure and new. Google has been making good use of it, and it seems to be extremely fast. It can be used for creating desktop applications as well as web applications. Its telltale is web pages ending with .py. Time will tell how this language will weigh in, but other than Google, www.folklore.org, and perhaps Yahoo! I am not sure who is using it.
PHP is a favorite among many web developers because of its simularity to C and its clear and easy syntax. Apparently it was developed specifically with web development in mind so it is processed along with the HTML in the page. There is no need to write extreme amounts of code to do basic tasks, and its performance can be close to ASP.net. It makes a good bridge between ColdFusion and the more difficult langagues like JSP and ASP.net. The bain of its existance has been its poor security record. PHP has allowed hackers to do some pretty horrible things to the web servers that have been attacked. The newer versions have done much to lock down these security issues, and now its reasonably secure. It is possible to establish a persistent database connection which minimizes the impact of overhead against queries. Most commercial sites have begun switching to PHP and MySQL because of their good performance and excellent price point, Free!
So for now, those are the real choices. So what's marketable. Microsoft's ASP.net will probably be a good choice for the next few years, and JSP is going to hang around, but it isn't clear if anything can be done to help its sluggish performance compared to other application servers. ASP.net isn't cheap either. You have to buy a license for Microsoft Server 2000 or 2003, and to use it with a database requires either MySQL free, or Microsoft SQL Server. Microsoft SQL Server probably has better performance for large applications, but it costs.
Hopefully ColdFusion will be around for the forseeable future. Its ease of use and short time to market for apps keep it in the fore. It is secure, easy, modular, and scalable. It is used on many large commercial sites like Bank of America, look for the .cfm. Its price isn't too steep either, $1,200 US for standard isn't too much when you compare the cost of 5 develoepers for 12 months vs 2 developers for 9. Python and Perl are pretty much out because there isn't enough demand or use for them. The return on the investment of learning these just wouldn't be there.
I'll probably continue to master PHP and ColdFusion while trying to osmotically absorb ASP.net. After my experiences with trying to administer Jrun and Tomcat on low volume servers I am going to stay away from JSP until I understand more Java. I can write desktop Java apps, but web apps take a slightly different thought process. It isn't really worth learning right now over ASP.net because so many people are using it. Look for the .asp, old ASP, or .aspx, ASP.net. Still if you are working on front end websites. PHP, ASP.net or ColdFusion are probably all you should consider. JSP is just a little too new, slow and complicated, but it is free if used with Apache and Tomcat so it might be compelling. It certainly seems to have a foothold in large corporate intranet settings. Although I still wonder why they don't migrate to ColdFusion. CF can interface nicely with their legacy applications, and they could get more custom apps done more quickly, but productivity often takes a back seat to cost. Keep you fingers crossed with me about ColdFusion, and good luck!