OK, buckle up, folks – we’re gonna offend fan-boys on either side with this post! I wanted to spend a few minutes giving people a quick overview of two of the main language stacks used mainly for SaaS and web-based development. There are a large number of other technology stacks that can be used – one of the most common is the LAMP stack – but we will confine ourselves to the two most common compiled-language choices today for this post.
This post is to serve as a general guide to two of the dominant technology stacks in use. There are benefits to using either one; however, these have less to do with the technologies themselves and more to do with ancillary factors, such as cost or availability of people with experience. These factors are discussed below.
Oracle technology stack
This used to be the Sun technology stack. Sun Microsystems, known for its high-end hardware systems and the Unix operating system, is also the originator of the Java language, used by many enterprises today. Oracle acquired Sun in 2010 and incorporated Java into its own offerings thereafter.
This technology stack consists of software written in the Java language. The database used is often Oracle (of course) for larger, enterprise applications; however, Java has libraries for all common databases – commercial and proprietary – and startups will often find that using MySQL or PostgreSQL for initial development and scaling to be more resource-efficient. I will discuss different databases and the circumstances under a different post; however, for the moment, note these as possibilities.
Java is very popular in North America, particularly in larger enterprise companies and in industries such as banking, finance, and government. It is currently the most popular programming stack in the world by a small margin; however, that popularity has been waning somewhat. This edge is fairly small and is wildly varying in different countries or even cities.
In addition, given the popularity of running Oracle tech stack on Linux, you may wish to ensure that you have a supply of Linux system administrators. You do not need many; one senior administrator (plus backups) will be able to handle a large number of machines easily. The main challenge is finding these people – they are popular, expensive, and tend to stay with companies that value them.
Operating system support
The Oracle technology stack is reasonably operating system agnostic. The most commonly used databases run somewhat better on Linux than Windows but this gap is marginal; closing it may not be worth more the hassle of finding operations personnel experienced in Linux rather than Microsoft operating systems. Oracle, on the other hand, runs demonstrably better on Unix and Linux than on Windows – it is a database designed for larger, more powerful machines and very efficiently runs on big iron (servers with significant amounts of memory and processing power, costing tens to hundreds of thousands of dollars, and designed to service thousands of people simultaneously).
There are wide variety of development tools, compilers, and even Java flavors that can be used by an organization. Sun, IBM, Apple, and Microsoft have (or had) separate versions of the compiling tool for Java; however, the official tools available from Oracle are the most common and best suited for general deployment.
For development tools, one of the most common IDE (integrated development environments) is Eclipse. This is an extraordinarily powerful tool that can be a challenge to set up properly but offers incredible automation, a broad array of plugins, and support for almost every single language, operating system, database, and automation tool on the market. It is open source and free, and most Java developers with more than two years experience have had some exposure to it. There are also commercial tools available; however, none of them have near the market penetration of Eclipse.
Microsoft technology stack (.NET)
Microsoft entered the server languages programming market in the late 1990s/early 2000 with .NET 1.0. This was a technology framework that captured the ability to use multiple languages all writing down to a type of code called common language run-time (CLR). This use of CLR let Microsoft create and use languages that existing developers were familiar with and could become quickly productive in. The most popular current language in the .NET stack is C# – this language combined the best characteristics of Java and C++, and has evolved into a powerful object-oriented language with broad library support.
C# and the .NET framework are slightly less popular worldwide than the Oracle technology stack; unlike the latter, however, they are increasing in popularity. Microsoft has been diligent about releasing .NET and language updates every two years, which seems to be helping this support. C# now incorporates into the base language several features that require additional libraries in other languages, vastly simplifying the development and deployment process.
In general, .NET is also popular across a broad range of companies, from enterprise to startups. It has more popular in certain industries – for example, the energy sector, particularly oil and natural gas, uses the Microsoft technology stack almost exclusively. It is also very popular to teach both in public and for-profit educational institutions, so there are more developers being trained all of the time.
The main database used in the Microsoft technology stack is SQL Server; however, the .NET libraries support almost all databases, regardless of whether they run on Windows or not. One of the benefits to using SQL Server is there are many trained personnel available to hire; finding an experience administrator is still ideal but you can find people to run your databases without too much problem.
Operating system support
Not surprisingly, Windows support for the .NET platform is excellent – it incorporates the libraries into the operating system, and allows access to fundamental components of the computer as required. .NET has very little support on other platforms – Mono is an attempt to get it running on Linux but the project is both incomplete and lagging in terms of version support.
The main tool for .NET use is Visual Studio, available as part of Microsoft developer network (MSDN) subscriptions. There has been some success developing .NET on Eclipse but the Visual Studio/.NET tools are needed for compilation, so there are few cost-savings to be realized from doing it this way. The Visual Studio environments are quite user friendly – more so than Eclipse – and integrate very well to a number of Microsoft and third party tools for the complete product development ecosystem.
The main problem with all of this is cost – the highest level of Visual Studio MSDN subscription is $18k to start, and $6k annually thereafter. You can get down to $5k purchase, with $1-2k annual renewal but these costs are not trivial, even compared to salaries. Fortunately, Microsoft has a special program to help startups as they ramp up to productivity and profitability – the program is called BizSpark and is a great idea for startups looking to move forward with the Microsoft technology stack. You have to apply to join the program, and there are both time and license number limitations but it is very useful for getting the startup into a place where it can afford the real costs of MSDN.
Which to choose?
This is a question without a clear answer – both stacks have their strengths and weaknesses. Regardless of the dogma that you may have read, neither one has complete technological superiority over the other. .NET is extremely easy to use, deploy, and administer in all-Windows environments; Java is operating system agnostic and can scale better in different environments. I believe that your decision will and should be driven by other factors; mainly, the following
- Are there existing limitations on what operating system can be used? If you are not allowed to use Linux at all, .NET will probably be a better choice
- Are there significant budget concerns? If so, the Java stack can get you much further with no or low budget than can .NET
- What is the availability of skilled and experienced developers? Does it favor one technology over the other?
- Are there existing (or ‘legacy’) code or applications that must be kept running? Do they require updates or fixes?
There is no clear answer but as with any other decision, you must look at multiple factors; this decision is one that will be very hard to change later. Once you have production code, changing technologies will involve system rewrites, not migration.
What experiences have you had with either technology stack? Which would you recommend and why?
Football – image courtesy of Ed Schipul / flickr.com
Oracle – image courtesy of Chang Ju Wu / flickr.com
Microsoft – image courtesy of Robert Scoble / flickr.com