views:

1302

answers:

17

Could anyone share with me their experience with switching from Java to .NET from a career point of view?

I've been a Java developer for 12 years and am just getting tired of how fragmented the Java world has become. For my liking, there's just too many frameworks, tools, application servers, etc.. And it seems each new tool just adds complexity and time to even the simplest of projects. I'm not trying to start any wars - I'm just giving you the reason I ask the main question.

I've read a few books on .NET and have done one WebForms job. I love the integrated environment and would like to hear how others transitioned from Java to .NET. What I mean by that is did you do it somehow as a contractor or did you join a company as a beginner .NET developer with much Java experience?

Personally, I'm ready to take the leap if I can figure out how to not lose too much income in the process (Senior Java developer to beginner .NET developer).

I would really appreciate hearing your stories.

+13  A: 

From my point of view a 12 year experienced programmer is a 12 year experienced programmer, no matter the language, and it matters even less if you come from Java which is quite similar in many ways to .NET

My natural advice would be to say "if you're tired of Java, then change, you need to be happy"... but

Under the current economical situation... I'd vote for not changing, at least don't rush into changing. I know, it sucks... but employers would offer you less than you're worth, or will go for people that's currently unemployed... because they have nothing else to choose... there are very few which would value you on what you deserve.

My conclusion: learn .NET, look for a job but don't accept anything that isn't you're actual salary... you already have a job so you can choose the employers, not the other way around... just look, compare, be patient, and if you find something suitable... take it.

Jorge Córdoba
+1 - Dead on. You don't want to take too much risk right now. Learning .NET on the side will give you a better bargaining position when you find the right opportunity.
ChaosPandion
+1  A: 

With 12 years experience in Java, I don't think you should find it too hard to get a job as a C# programmer. You shouldn't need to take too much of a cut in salary or seniority either.

From what I can tell of looking at job adverts (in the UK), the more specific the requirements are, the worse the job is. For example, I was a VB.NET developer but I have just secured a new job where I'll be mostly working with C#. I found it a good sign that my new employers were looking for a good .NET programmer rather than a C# programmer with x years of experience.

Luke Girvin
And that's almost a miracle for VB'ers to land a C# job.... Great insight by hiring team to know good dev's will pickup with any language. :-)
klabranche
+12  A: 

I just began working on ASP.Net MVC after taking on a new job. I must say, the integration is very nice. Coming off a fairly large Spring/Hibernate project ASP.Net MVC has been a joy. The few complaints I do have with the system (magic strings galore, poor validation support) are all being addressed in MVC2. I'm extremely pleased with the direction of the platform.

As for the income, I'm not really sure how to fix that. Perhaps you could use ASP.Net for your next project at your current workplace? It shouldn't be too difficult if you have a reasonable bunch of developers. I did not have much trouble getting situated in .Net. It will probably take about a year to get all the nuances down, but I can confidently say I would have no problem starting a new project from the ground up after only 2 months of experience.

There are also many common libraries between the platforms. NHibernate is strikingly similar to its Java brother. There is also NAnt. But, on the point of NAnt and the integration, MSBuild is fantastic. It's Ant built in to the platform! It is great.

All-in-all .Net appears to be a much more progressive platform and community in general. I really don't see how you could go wrong with it as a career move. Java is certainly not on the rise and simply judging by the number of C# posts on StackOverflow there isn't a shortage of C# projects either.

jcm
While I agree with you most of the things, your last paragraph is something I am disagreeing with. Judging the amount of commercial projects using a certain language based on search results from i.e. Stackoverflow, does not give an accurate result. Firstly I think most programmers commenting on Stack overflow and similar sites are hobbyists. Secondly even though a language doesn't yield as many search results, it can still be widely spread.
TommyA
Regarding my previous comment:To give you an example, look at Cobol, how many search results does that yield on stack overflow? (I got 85) still it is by far the most used programming language if you count lines of code. According to: http://advice.cio.com/stephen_kelly_micro_focus/cobol_still_doing_the_business Cobol resides in "220 billion lines" of code or in other words "around 80% of the world’s actively used code." The amount of Cobol code out there is staggering, but the amount of developers is not rising, unlike .NET programmers.
TommyA
My point is, if you want to choose a language for the sake of economy, or job possibilities don't base your decission on a mere look at what language is most popular on sites like this.*Sorry for the many comments, but could not fit in the details I wanted in less text, sorry*
TommyA
I suppose you are correct from a standpoint of sheer volume, but if you want to better yourself as a software engineer and work on new exciting things, I'd say it's the way to go. When is the last time you heard someone raving about their COBOL project?
jcm
I know a disturbingly large number of "developers" that are simply out for a paycheck, we all do. Many of them are stuck writing SQL or COBOL for a living and haven't learned anything in the last 15 years. I don't think the OP wants to be one of them. Given the fact that he has already been doing his homework, I know he is not one of them. He will only be satisfied working on new and exciting things with equally enthusiastic engineers.
jcm
I agree with you that COBOL projects might not be seen as the most exciting, from a financial point of view, I think it is the safest way to go though. Apart from that, I think as a developer - at least a professional one - you have to continuesly educating yourself, and not just in new and fancy languages. You need to learn the basics as well. Nomatter if you are Cobol, C or .NET should you not evolve as a programmer, you need to constantly educate. Anyway I mostly agree with you in all you say.
TommyA
I completely agree. This is a constantly evolving world. I'm not saying to only work on the latest and greatest things, but they will certainly be the most exciting things to work on. If you have your choice of platforms to work with, that is prboably what you choose. Of course, anyone worth their salt will be more than capable of tackling a project in COBOL/C/Java/Python/whatever, it just sounds like the OP is looking to move to something that will both stimulate his desire to learn and provide him some opportunities down the road once skills / technologies have matured.
jcm
MSBuild is great until you decide to set up continuous integration and then realise that it's not designed to be run external to Visual Studio. Stick to nUnit unless you're going down the TFS route!
Bayard Randel
+4  A: 

I've never made the transition from Java - .Net but I thought your first paragraph was interesting in that I believe you could/would find the same issue to exist in .Net. There are many frameworks, tools, apps, etc....

As for my thought on how to convert:

  • Keep paying the bills with Java work and keep working on your .Net skills until you can find a job you want to go to. "It's much easier to find a job when you have a job."

  • If you can build up your resume with some contract work in .Net then go for it.

  • Perhaps consider some open source contribution in .Net. That will be a good way to supplement your skills as well.

  • If you are a good developer many will hire you even if you weren't doing .Net development at your current job.

Good Luck!

klabranche
+9  A: 

I love .NET programming but I'm not sure that it will be your salvation if you hate fragmentation.

There is WinForms vs WPF vs Silverlight. On the web there is ASP.NET vs ASP.NET MVC. LINQ to SQL vs the Entity thing vs. several open source ORMs. Several versions of the CLR. .NET remoting vs WCF. I'm sure people can list many other overlapping technologies. Java no doubt has more due to it's age, but .NET isn't getting any cleaner.

Jacob
WPF and Silverlight do not overlap: one is for the desktop, another for the Web. And you can find many similarities. ASP.NET Web Forms and ASP.NET MVC are so close that you can use both at the same time. I agree with the ORM bit though, and the remoting vs WCF.
Martinho Fernandes
+1  A: 

I've been working for 7 years, mostly C++ though, but I've been through a bit of both Java and .NET, while I might not have as much experience as most of these other people, I'd still go as far as saying, that what language you excel in, is not important - however that you know the different concepts and know how to program in general (like ChaosPandion wrote), learn your tools, and know what languages and libraries to use for what tasks is important.

There are things that Java do good, that I wouldn't do in .NET, and wise versa. It is not whether you have 10 or 20 years of Java experience, but more important whether or not you have 10 or 20 years of programming experience.

The thing about programming languages is, that once you master one, it becomes so much easier to learn the others. Although it is not my position to decide I would at any time choose some one with a good understanding of the core concepts, over someone focused on only one single programming language. Hope that makes sense.

Having said that the transition from Java to .Net is essentially very easy, these two languages are very alike, and shouldn't pose any greater trouble. The only thing I am concerned with is the idea of choosing one language and sticking with it for what ever job you'll get.

All languages have their strengths and weaknesses. The true programming mastery comes from identifying these forces and weaknesses and taking advantage of them in your work.

TommyA
A: 

Thanks everyone for the great comments - I really appreciate you taking the time!

Joe
That's nice of you, but this is not an answer to your question.
Michael Myers
A: 

What do you mean by quitting Java? I have authored and currently support projects in Java, C++, C# and Objective-C on pcs, applets, and phones. Like an earlier answer that was given, programming is programming. Your OO design skills translate.

Gerry
+1  A: 

I too moved from the Java/Spring/Hibernate world, first into C# WinForms Development and now into ASP.NET MVC. Overall, the process was pretty smooth. Luckily for me, I had a little backing knowledge of C# 2.0 before jumping in. So if you have read up on .NET thats great! As soon as you start rolling with C# you will see how smooth the transition is if you understand all of the concepts of OOP.

The thing that kept helping me over and over with the framework and apis out there was communication and reading. There are a lot of great developers out there, and when you get on a smart team utilize them. Use resources on the internet, search MSDN, Tekpub.com, etc. I like RSS feeds, I think half of my company subscribes to .NET Twitter feeds to get information on any updates.

As far as income, I myself did not lose income during the switch in fact I gained a higher salary. I accomplished this by letting my future employee know that my understanding of OOP is vast, and that I have taken my time to fully understand all the important parts of the .NET Framework. An employer wants to know that you are going to be productive and beneficial to the company. They don't care if you know the language down to the last bit. If you do hear something like, "Well since you haven't had any real world experience with C# we can give you this []" then they are probably testing to see if you are weak or they themselves aren't doing so well, avoid ;).

Anyway, my experience was smooth but I also took my time in locating such a place, and if possible I suggest you do the same.

Andrew
A: 

I'm also playing with the idea of making a similar switch. I started out with C++, switched to Java, and now I am thinking of going to .NET. I didn't like C# in the beginning, but it has evolved so much unlike Java which has stayed stagnant for backward compatibility. I often find myself craving the use of functional features like Lambdas in Java code, but can't make the transition to a JVM based functional machine.

I think that at their core, the languages are not that different if you can learn the new C# features. If I were you, I would try and get some C# experience, even as toy projects, until I could be natural enough to interview. Knowing some basic APIS but also being able to do the classic data structure questions would be crucial, I assume.

In addition, I have seen jobs that look for both Java and C#. There are quite a few companies that work with both technologies. Having the multi-language background could be a huge plus for you, and carries less risk than jumping out of the JAva ship.

One good thing about Java is that if you ever come back ,it will be very much the same...

Uri
+1  A: 

Shucks, I know you're not trying to start any wars, but isn't the rich variety of solutions in the Java world a sign of creativity? Isn't it a consequence of a programming community never content with the status quo, always looking for a better solution? Isn't it a consequence of an open source community where anyone can study and learn from previous work? Would Microsoft's solutions be as good if it weren't for the competition from open source Java solutions? So if you're stuck maintaining someone else's hodgepodge, yes it could be a frustration to learn multiple ways of doing the same thing, but as a senior developer you could get to participate and vote in the Darwinian evolution of software by choosing the most productive, resilient solution to your customer's needs. All I'm saying is one person's 'tiring fragmentation' is another person's 'vibrant opportunity', eg. Google Wave, Spring Grails. By all means switch to .NET if that works for you, but also consider looking for work with people in an environment with a different perspective, that might let you leverage your Java experience, but give better satisfaction from your work.

Piers C
A: 

Having done both (java & c#), the issue isn't if it's a good career move (there are plentiful jobs in both markets). The issue is how 'good' are you as a developer, how good at object-oriented design/modeling/coding are you, and how much do you enjoy what you are doing. These are far more important than what language you are using as to the success of your career.

If java is stagnant for you right now and you will have more joy/happiness using c#, then that would be a good move on your part. If you have many of the other skills that a senior level developer needs then learning a language enough to be fluent (meaning that you are thinking in that language) is only a matter of 3 or so months of effort.

Find what you enjoy...and if it's c# than it's c#.

RMatthews
+1  A: 

I can say from experience that I sure would have liked to have known someone that had a lot of experience bridging .NET remoting and Java EJB's. So instead of "switching" I would just consider (to quote Jake Jarmel from Seinfeld) "adding something to your repetoire".

Josh Einstein
A: 

The problem is learning the mindset which comes from the libraries and the tools. This boils down to "write code!".

I would recommend an open source project as they are visible to a future employer, and allows strong peer review. The best way to learn stuff is to write documentation - the .NET version of javadoc as well as actual manuals - since that requires learning the code without necessarily being forced to create new functionality which is fine when being a newcomer.

If your employer will allow you to do this like getting trained for an internal .NET project fine, otherwise invest in your future in your spare time.

Thorbjørn Ravn Andersen
+1  A: 

I have done some .net recently after years of Java programming. Things you may want to consider:

  1. Microsoft only recently has introduced an MVC framework. There is a lot of code out there using the PageController model.

  2. My experience with compatibility support across versions of the CLR has been frustrating. I think Java has done an excellent job with backwards compatibility.

  3. Visual Studio didn't seem to have a lot of the functionality I was I used to do in Eclipse (Ctrl-Shift-T, Ctrl-Shift-R).

  4. Microsoft has changed there stance on open source somewhat, but this is largely because they had too. At the end of the day your going to have to rely on Microsoft to do the right thing.

BillMan
Point 3 - You are aware of Resharper, right?
ripper234
...and CodeRush.
Carl Manaster
even with those tools in the mix eclipse (for Java, for langs others its not good) is the best dev env I have ever used - and I use VS a lot
pm100
A: 

I'd suggest seeing if you can find places that have a mix of Java and .Net, so that both skillsets can be used and thus you wouldn't take a big income hit as your Java experience may be handy for some systems within a company. There may be something to be said for looking at smaller companies where you'd possibly have to bring in some process and put forth the changes into a company wanting to mature its software development methodology. While that may sound hard, it could be rather fun if you know some practices that should transfer over easily.

My guess is that at some point you'll see that .Net is a lot like Java in terms of having oodles of things that you could use if you so desire. Another thought would be to possibly move to where you are mentoring junior developers if you like that kind of thing.

JB King
A: 

Found this question looking for info on switching from .NET to JVM ecosystem. I have 15 years of Microsoft (including .NET) at typical corporate America shops, and zero Java. All keypoints below are IMHO. I don't want to start a holy war, just to point out some of my observations.

  • corporate .NET harbors many junior developers (including senior dudes who are junior developers) as well as junior managers
  • consequently, the junior .NET crowd seems to favor predictability over innovation and tends to believe in Elixir of Eternal Youth and the Philosopher's Stone (joke by Dijkstra)
  • JVM ecosystem seems to lead the innovation in the areas of design, architecture and best-practices (IoC, ORM, EIP just to name a few). Open source .NET community is mostly playing catch-up game, with projects like NAnt, NHibernate, etc. Truth be told, there's a radical cutting edge crowd in .NET too (sometimes known as Alt.NET) but its reach is limited and its projects often die in version 0.2
  • JVM innovation is mostly driven by OSS community (and therefore diverse), while .NET innovation is almost all driven by large players like Microsoft (ASP.NET MVC, C# language enhancements) and Novel (Mono).
  • in terms of language innovation, with JVM you're not limited to Java, there are Groovy, Clojure and Scala; finally, you can even coexist with JRuby. there are alternative languages in .NET too: Boo, IronRuby, Delphi Prism but they are either too niche, lacking community support, or belong to corporations that are likely to drop them at any moment

Forgive my generalizations, but these are my sincere opinions. In short, think before you jump, and don't burn the bridges.

zvolkov