Posted on 05/10/2010 7:18:34 PM PDT by SeekAndFind
Java or .Net? Where are the careers today and tomorrow?
Java was the first successful managed programming framework. It was created by Sun Microsystems in an attempt to stop the momentum Microsoft was making into the world of big-dollar corporate computing systems. In the early 1990's, the market for corporate and government "big-iron" computers was extremely fragmented, and Sun was the dominate player with more market share than rivals IBM, HP, and DEC (Digital Equipment Corporation). Microsoft had just begun working with Compaq to use their Windows NT operating system running on beefed up Intel x86 systems to infringe on that market, but much to Sun's chagrin, Microsoft and Compaq were being supremely successful in doing so. At the same time, Sun's market share was starting to shrink even though sales were growing due to the onset of the Internet boom. Compaq was selling so many Windows NT servers that they eventually were able to gobble up DEC and the most prized processor in the world, the DEC Alpha which was at the heart of the most popular mid-sized systems for small governments and universities.
Seeing the writing on the wall, but still in love with their own platform, Sun release Java for Solaris and Windows. The heart of Java is the JVM, which is a very complex piece of software. The main advantage of the JVM is its portable nature. It can be hosted on any system for which the JVM has been ported to. Any system hosting a JVM in turn can run any software written in Java. Sun's business model was to encourage porting of Java to all of the major platforms by allowing a free Standard Edition to be created. Then, once the Standard Edition was stable on a platform, the Enterprise Edition (which is NOT free) could then be implemented on top of the Standard Edition through a rather pricey licensing agreement. Once the demand for Java applications written for the J2EE platform reached a certain point, Sun would be able to withstand competition from Microsoft's Windows in Sun's own back yard.
Bill Gates is a lot of things, but stupid he is not. Almost immediately, Gates tried to derail Sun's plans for Java, and he almost succeeded. This came about through a licensing agreement that allowed Microsoft to create their own JVM to distribute with Windows so users wouldn't have to obtain a copy of Sun's JVM. Microsoft created a new language that expanded on Java and blended into it non-JVM standard features for integration with Windows NT. This language, called Microsoft Visual J++, never really garnered much market share, but the Microsoft JVM did, quickly becoming the most commonly used JVM on the market. Microsoft then stopped implementing new features, specifically the ones that allow the Java 2 Enterprise Edition software to work, thus nearly stopping Sun's business model for Java before it ever got started.
Sun sued Microsoft, and the suit stayed in the courts until earlier this year after several unfavorable rulings against Microsoft. In the mean time, Microsoft was fighting back on a parallel front. They hired Anders Heijlsberg (who had created the Delphi programming language and IDE) away from Borland and tasked him with creating a new managed programming framework that could support a variety of programming languages and which would be submitted to ECMA for standardization.
Heijlsberg hit two home runs: The first was a new programming language called C# which combined all of the great features of Java and C++ and added many new features that were previously dreamed of but never fully realized. The second was the Common Language Runtime. Both technologies were submitted to and ratified by ECMA. Microsoft then did something unheard of: they bet the farm on these two new standard technologies, much in the same way that Sun has bet the farm on Java.
The combination of the CLR, C# and Microsoft's standard set of libraries for the two is known as the Microsoft .Net Framework. As part of their bet-the-farm mentality with .Net, Microsoft forced the millions of Visual Basic programmers around the world to be relegated to the past or move to the new Visual Basic.Net language or to C#. Almost all of them have.
The CLR and C# being standards compliant has been a boon to Microsoft in another area: new open-source based implementations of the CLR and C# have been released, with Novel Mono recently becoming a fully baked and supported product. Every win for .Net is a loss for Java. There are now over 100 programming languages targeting the CLR, even languages such as Python which were previously believed to not be compatible with a strongly-typed infrastructure. But make no mistake, C# is crown jewel of the .Net Framework and it's growing in popularity with both software developers and decision makers alike.
To support the .Net Framework, Microsoft has refreshed their Visual Studio line of development tools to be the best and most productive Integrated Development Environment available, even for people who don't use all of its visual design tools.
Along the road to the present, Java has taken some curious turns to get where it is. Where as Microsoft tried to strong-arm Java away from Sun, IBM has successfully finessed its way into the lead as the main proponent of Java, and arguably makes more money from it than Sun does. IBM includes Java as a core technology on nearly every computer it sells and has done more to improve the JVM than any other company.
IBM recently created the Eclipse open source software foundation which aims to provide Java developers a true counterpart to Microsoft's Visual Studio .Net IDE. IBM has also bought Rational Software, a long time partner who creates tools to help at all stages of Software Development and also employs the three visionaries who made Object Oriented Programming the dominant force it is today.
In an odd twist of fate, Sun's ploy to keep its place at the head of the table has put IBM and Microsoft there instead. Sun recently broke a string of 13 consecutive quarters of losses, and the main reason for its rebound has been its own changes towards open standards and industry supported platforms such as the Intel x86 based processors from AMD.
The future of software development is now expected to be a near 50-50 split between Java and .Net. When making a decision on which technology to bank on, you should really research what types of companies use which technology, and which fits into your career aspirations. Java and .Net overlap in a lot of markets and inevitably each will form definitive niches that will be hard to break until newer model-based programming technologies take over.
I do not believe you can make a mistake either way. C# and Java are so similar as programming languages that in a lot of cases, they are nearly syntactically identical. There are greater differences if you plan to be a System Architect. If that is your long-term career goals, then you will be well served to pick an arena and learn the software design tools targeting that arena. Currently Java has a greater number of mature design tools available, but Microsoft will try to change that in the next few years with a completely new modeling system that will be integrated directly into the Visual Studio .Net IDE.
I would agree. Having developed both, however, I find .NET much more satisfying and productive to write code for. And as noted in an earlier post, at the moment .NET job prospects seem more abundant. And Java really needs to respond to LINQ. It as a big step forward squaring the circle between relational and object data.
And nobody yet has mentioned the third option, LAMP.
We are looking at using Drupal to implement our corporate website, which is based on the LAMP architecture, using PHP. We looked at SharePoint, but with the costs, we just couldn’t justify it over going with a LAMP-based solution, like Drupal.
My phone rings five times more often with recruiters trying to fill .NET jobs than Java jobs, even thought my skills as listed on my resume would suggest near equality.
RE: LAMP
Not trying to be facetious. Can we work with WAMP as well (W=Windows) ?
Other than the loosely integrated, open source, wild west environment that Java types are so fond of.
With a combination of Spring and Hibernate, you could pretty easily implement a LINQ-like functionality in Java.
I used Spring and Hibernate to create a web framework, that essentially gives you CRUD out of the box, once you create your Hibernate configuration files. It relies on Java Reflection to dynamically generate the queries via Hibernate. And using Spring AOP, you get transactional processing and caching, in a snap.
That is the thing about Java, the solutions are out there, but you have to find them. But generally I find if you master Spring and Hibernate, that pretty much gives you a good foundation.
There are many different variations on LAMP, including WAMP. That’s one of the advantages, it works on any platform, including Windows. We use PHP on a lot of our Windows servers.
My last two positions, one I was hired for Java, but switched to .NET. Then I was hired for a .NET position, and then we switched to Java.
Flexibility is key.
Struts is the COBOL of J2EE, still a lot of deployments out there, and it won’t go away anytime soon.
But the nice thing about Spring is that it makes it really easier to separate out concerns, the thing I hated about Struts, is that it tied you to their classes (Action, ActionMapper, etc.), you tie your view and business logic to the same package.
My approach is to complete separate the two. I use a servlet to essentially generate XML of the data, based on a RESTful HTTP call (POX over HTTP). I don’t care what is used to render the data (could be .NET, Adobe Flex, PDA, whatever). But the model and business logic is all in one place, and since we use HTTP, the client doesn’t care what the business logic is written in. I chose this approach because we used Adobe Flex for the client. We want the Flex code to be as thin as possible, and also, they make processing XML data a snap. Also we could return data in JSON format as well by just specifying a parameter. But if later on we wanted to switch, to say, Silverlight, it should be a breeze, because the business logic and data tiers wouldn’t be touched at all.
Exactly, LINQ is just another propietary clone of something that’s been available in Java land for years... I love how .NET folks think MS is actually cutting new ground when they make a copy of something that’s been adopted and used for years before their version of it comes about.
I wish I had a nickel for every idiot client I've had with an IT manager who claimed that open source protected his investment in code because they could always use the source code if a supplier vendor disappeared. This blather from people who don't even know how the code written in their own shops work. Their developers couldn't reverse engineer a compiler or a virtual machine to save their souls from burning in hell; they barely even can use them to compile and run.
The truth is that your investment is protected by well-written code, written by well-managed companies with clean, well documented interfaces and visionary architects. This doesn't apply to very much open source code I've seen.
In the second place, C# is open source, if you want it to be. C# and CLR were ISO products before Java was. And there is a very good open source implementation of C# that I use in Linux development every day: Mono. So please, disabuse yourself of your silly Java myths. IBM, Sun, and Oracle aren't co-religionist open-sourcers. They're big, evil, controlling corporations who're open source because they can't compete. Sun fought, then stalled against making Java open for years. They're open source because they've gotten their asses kicked.
Algol 68 was ahead of its time, and contained many features that are considered state-of-the-art in modern languages. Algol 68 features include expression-based syntax, user-declared types & structures/tagged-unions, a reference model of variables & reference parameters, string & array & matrix slicing and also concurrency (for multi core CPUs).
“Algol 68 Genie” is a GNU GPL Algol 68 interpreter fo Mac/Unix/Linux/Windows. Algol68g can be downloaded from sourceforge: http://sourceforge.net/projects/algol68
I’ve done both as well and I find them both to be similar. If you have been a M$ monkey from the VS Basic days then it’s easier to pick up the various ways you can develop a .NET application. I find deploying .NET apps to be somewhat easier than Java, although it has gotten quite easy in the past year to deploy Java apps.
As for the IDE wars, they are at a stalemate. I own VS 2010 and have 5 Java IDEs and I find that NetBeans to be much faster than any of them. I’m developing in less than 10 seconds with NB 6.8. Eclipse is a mixed bag and here’s why. It all depends on how many plugins you use. If you need just J2EE and Tomcat, it’s blazing fast. It’s when you start adding things like Spring, Hibernate, and Struts does it take a bit more time to startup.
Now onto developing apps. I find them to be equal and in some ways Java is faster when developing web apps. True, Swing is a bit awkward compared to Window Forms, but it’s still pretty powerful (almost too powerful). You really have to know your stuff to write good Swing apps. .NET’s mantra should be similar to GEICO’s: “.NET is so easy, a caveman can do it”.
.NET apps are not always efficient. In fact, we use a commercial Instant Messaging application called Cisco Unified Personal Communicator 8 that is written in .NET. It’s a piece of crap. It’s so bloated, it sucks up more memory than IntelliJ. Huge memory leaks that start at 250MB all the way to 1.7GB in one day.
The statement that “Java is for girls” was pretty lame unless you say that girls are tougher than boys. I have 2 .NET books that had me up and running in a weekend. After 12 years of Java, I have nearly 40 books. Yes, .NET is easy but I find Java to be more powerful.
Just this past week I started to use Flex on the frontend and Java on the backend. My graphic artists wanted to write the backend in .NET, but I said it’ll take me half the time writing it in Java. There are 3 of them and they are still working on it. I finished mine last weekend using Spring Roo and Spring Flex and it’s a fully completed project.
I also have to clarify the IDE costs - VS 2010 still is far more expensive than IntelliJ, JBuilder, and RedHat Developer combined. Unless you can design and deploy .NET apps with the academic version, the full blown PROFESSIONAL
WITH MSDN ESSENTIALS will set you back $799. For the cost of the Ultimate version, I could outfit 12 Java developers with the enterprise version of IntelliJ.
Most Java developers however still prefer Eclipse and it’s free. I like MyEclipse much better and pay the yearly $60 fee for a version that covers everything I’d ever want to do in Java. There are some things in NetBeans I like also and NB reminds me alot of Visual Studio.
For debugging, it’s a dead heat and I’d wager that debugging in Java is every bit as good as Visual Studio. In some cases, it’s better (heck jconsole puts many .NET debugging tools to shame). In the old days Java IDEs were horrible in debugging applications but today it’s a completely different story. I can even backstep and choose different pathways or insert code during the debug. Some IDEs are better than others and some plugins are very good.
All I can say is you choose one platform and stick with it. You could be an expert at both but it’s very hard and consumes a lot of time. The bonus is the number of jobs available are greater. In this economy it’s not a bad idea to know both.
Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.