Move from .Net to Java

You are here:

I have been an ASP/.Net Web Developer for around seven years. I am interested in expanding my toolset considerably by learning Java and Oracle, but I have no-idea where to start. Aside from leaning the actual Java language what other things should I be looking at? For example would learning JBoss or Oracle App Server be more benefical? Is there much point learning about Swing if I am going to remain developing web applications, or should I do both? What IDEs should I be gettting used to, NetBeans or JDeveloper?

I am happy learning from books and websites so if anyone has any suggestions they will greatfully received.

Four years ago, I have transfered my development skills from .Net to Java. Java is very one of the powerful development languages. From my experiences to learn java, you should study more fundamental principles of java and some core knowledges about java. <> is a very typical and ideal book to obtain some basis of java and improve your java skills. Because you have some skills in .Net, which is similar to J2EE, you can grasp java skills more quickly.My favorite development tool is eclipse which is free,powerful and to provide plug-in components for extending capibilities of supporting new features.

As some have already pointed out, try to avoid, at least at the beginning, vendor lock-ins as in Application Server or IDE and try to stick as much as possible to standards and common features. There's a time to give up your independence but not when you are still new and don't have enough knowledge of the options.

You'll see that Java is a different plattform not only technically but "philosofically" as instead of "the ONE way", in Java there usually are multiple options and choices that co-exist. That can be confusing at the beginning though, so don't try to focus too much on "the best way" as there usually are various ways/products and the "best" depends on your circumstances, goals...

After stating with the Java the language, I would go for some experimentation with plain servlets/JSP so you understand the basics and then choose some framework you like and start from there. I would start also with "lighter" servers like Tomcat/Resin and wait to get into the "messy" ones once you have your hands dirty... and just if you need to ;). Swing is not necessary right now if you are going to be web centered, even in web/RIA JavaScript/Flex/Laszlo seem to be more popular than Applets/Java Web Start applications. That might change a bit with the new Java plugin... but that's something to be seen.

Regarding continuous integration, unit testing etc. well, unless you are already versed on the topic, I would not try to touch that topic until you have a couple of Java scars on you.

Regarding the IDE... if you learn Java well, anyone will do. I usually play with Eclipse even though I also have NetBeans for some things and I've tested IntelliJ. In any case, I like to have all my projects so they can be built simply with Ant without any IDE, that way I know I'm not getting married to any of them without noticiing :).

In my job we have lots of very skilled Java developers, some employed, some consultants from different firms. Everyone can choose their own IDE, and we have around 50/50% Eclipse and IntelliJ users. The consultants have a tendency to choose eclipse since it is free and they cannot rely on their next contracting firm to provide an IntelliJ license, so they rather become experts on the one IDE they always can use (even if they do admit that some of the search and refactoring features of intelliJ are somewhat better/more powerfull).

Netbeans and (especially) JDeveloper are truly fringe products, even if JDeveloper teams have an annoying habit of winning the yearly IDE productivity competitions. For netbeans, the main reason is not the IDE itself, but rather the text editor component which was completely useless up to the last version (and who wants an IDE that is quite good except you cannot edit text). The all-new editor brings the Netbeans text editing on par with IntelliJ 2.0 which is a quantum leap (better than it sounds, and clearly better than anything from Redmond).

Actually, Contiuous Integration tools and maven are perhaps the main reason why many large projects tend to choose java instead of .net. They are not so easy to grasp for beginners, but once you get an understanding of what they actually provide you are amazed.

This is my advice: start to learn by doing hello world without any IDE (use wordpad, javac and a few bat files), so you get an understanding of the basic low-level tools (and annoyances). Don't even think of going beyond hello world without tool support. After that, learn the tools that will get you up to speed on programming with open source libraries: google, maven and a continuous build server. You need an IDE for working with such projects, I guess any of the ones mentioned above can be used.

Maven is found at http://maven.apache.org. The provided doc is not well structured, but there is a good tutorial here: http://www.sonatype.com/book/index.html
Note that maven is not a build tool that builds your IDE projects, instead they have plugins to build IDE project setup files from the maven project structure. Each time you make a significant change (like adding a library) you re-generate the IDE project from the maven files. Sounds counter-intuitive at first, but is is actually the right way to do it (trust me).

In order to see the full benefit of maven you need a CI server and a source-control repository. I suggest you try hudson for CI (http://hudson.dev.java.net) since it is ridiculously simple to use, even if the maven integration is not the best (alternative: continuum which is made by those who made maven: http://maven.apache.org/continuum/). For source control I suggest subversion, which is very simple to set up and can run in a windows command window.

Now: Create a simple project with maven (as described in the tutorial). commit the files (including the maven project files but NOT the IDE project files) to the source control system. Set up hudson to build the project (using maven) each time you commit changes to the source code. (You'll probably learn to use google in the process of locating and setting up these tools.)

Now you have a fully automated IDE-independent project. Any developer (or build server) can check out the source code, have all necessary libraries from all kinds of weird places automatically installed, build it, test it, and deploy it using maven. Any developer can generate setup for any IDE for the project, even yourself if you want to change IDE. Once you try to add a developer or set up the project on a different computer you should easily see the benefits.

no need for Swing if all you're going to do is web development. Can be beneficial to know a bit about it though.

JBoss is probably used more than OC4J, and with Oracle buying BEA I have this gut feeling that OC4J won't be around much longer.
Best to not get caught up in appserver specific things anyway, try to build your systems in such a way they can be easily deployed on a variety of servers.

Netbeans and JDeveloper both are fringe products. JDeveloper is used in Oracle centric shops for the good integration with other Oracle products, Netbeans is used by people who got wowed by Sun sales reps (just like people who got talked to by IBM sales reps use WAS).
Try different IDEs and make your own decision. On top of the ones you mention try IntelliJ (my favourite, and the favourite of almost everyone who tries it it seems), Eclipse, and JBuilder.
At the moment I have IntelliJ 6, Netbeans 6, Eclipse 3.3, and JDeveloper 12 installed. I use them all, but mostly IntelliJ (in fact more than all the others combined).

> > no need for Swing if all you're going to do is web
> > development. Can be beneficial to know a bit about
> it
> > though.
>
> Unless you have any interested in developing Rich
> Internet Applications.
>
Only the client side of them. He's talking about servlet/JSP explicitly.