Which Programming Language Is Best? - All Are
There are often what seem like religious wars about which programming language is the best to use for web application development. In my travels and work I have encountered just about all paradigms and flavors there are. I have found none that are totally inappropriate nor any that are perfect for every case. What I have found, over and over again is lack of attention to detail and inadequate time spent in planning and architecting a language use, can render anything apparently unsuitable. I have also found that in ColdFusion any size of web application with any volume of traffic can be handled, as a case in point MySpace were something like the 5th. busiest web site on the Internet when they apparently moved to a more .NET orientated base. At that time, I implored Macromedia many times to send assistance to MySpace as the main problem was related to JDBC drivers which made it practically impossible for MySpace to get off ColdFusion 5. However, the point of my post here is not to extol the virtues of ColdFusion but to express some opinions about what I have seen.
Microsoft Windows Shops - It is very difficult to better ASP, ASP.NET, .NET C# etc where a client is a 100% dedicated Windows shop. There is a close coupling between the O/S and those paradigms allowing low-level communications via such things as ADO.NET. The caveat is that once deeply embroiled with Microsoft it is difficult to extricate a client. With ColdFusiuon 8 there is the capability to access .NET assembly classes directly from ColdFusion. There is also the capability to run ColdFusion in .NET on New Atlanta's BlueDragon engine although I have yet to find a client who needed to do that. As a personal comment, I would not like to be locked into running everything on one O/S, in perpetuity.
Java Shops - I have found these sorts of environments to typically have an IBM background, sometimes mid-range servers sometimes main-frame. Here .NET etc is practically non-existent. These sorts of shops have typically used Java, Java Servlets (.JSP), .PHP and often Python, Perl and even still CGI in various constructs. Of course, since CFMX 6.1, ColdFusion has very close access to all things Java and sits very comfortably in Java shops. I realize that languages such as Ruby and Groovy inhabit this world but have not worked with any clients, whilst they are actively using them.
Much More Important than any of the things detailed in the two preceding paragraphs are these points, which I found are critical to creating the optimal web application environments.
Network Plumbing - Excuse the apparently low-tech reference but just as we won't live very long without water it follows that web applications or any applications won't live long without data. As they approach death both situations create a severe slow-down in activity. Hardly any clients I have worked with paid any attention to network issues. They either left it to others to worry about (sometimes unavoidable) or just assumed all was OK out of the box. It is critical to test all levels of network connectivity, to make sure all devices have adequate data throughput, for instance what is the backplane throughput on switches? are firewalls so restrictive that they are throttling you, are clustering devices pinging the life out of your apps whilst looking for a heartbeat, are NICs and switches locked in a speed-duplex guessing game. I have seen all of these things cause issues.
Databases/SQL - It is well worth the money to get a good DBA to review server side issues such as indexing and archiving along with efficient SQL coding practices. In all of my years troubleshooting and optimizing, the database most often causes performance problems when attention is not paid to the items I mention here.
Servers - Are you buying new servers and not going for 64-bit, please don't do that. The potential benefit of 64-bit is immense and if you buy 64-bit please don't go low on RAM. I would advise a minimum of 32GB on CF-Web servers and 64GB on database servers. Also, pay close attention to on board hard drives always employ RAID and if lots' of writing goes on use RAID level 1 or 10, otherwise RAID 5 or 6. Try to make sure that you have separate channels or better still dedicated controllers. Use all the NIC's on the server, avoid having all data flowing in and out of one NIC.
Virtual Servers - Don't believe the hype, there is an overhead to all virtual server deployments for the hypervisor etc. Also, some drivers employed in the hypervisor can be old and cause issues. In a virtual server deployment paying close attention to hardware can be virtually impossible, so delve into all details first, get as much information as possible about what you are getting and make sure the SLA's are adequate to your needs.
Cloud Computing - In essence this is an even more abstracted environment than virtual servers so all the points in the preceding environment apply. I almost see cloud computing as shared hosting on steroids and with due respect to others, I have found a lack of comfort to ever advise a client to use cloud computing for production. I try to be open-minded so might change my view on this in time with compelling reasons to do so.
NAS and SAN - These are two different paradigms which deliver a similar premise; access to more storage space easily. My advise here would be to make sure there is no sharing of hard drives (typically know as spindles) going on. Also make sure there is redundancy somewhere.
Test - Last and most important of all, never deploy anything without adequate unit, integration and load-testing. Paying attention to what I have in this article can enable any language on any platform to perform well. I am not leaving out code in this piece, as any code issues will be caught by adequate load testing.