I am moving from C# to Java

Posted on September 16, 2012 by Fernando Zamora

Recently, I have moved from a project that I’ve been on, on and off for the last 8 years. That project was, for the most part, a major windows application built using Microsoft .Net technologies. During that period I became quite fluent in the C# language and also in the .Net platform. I also became very skilled and knowledgeable with the business domain.

The domain knowledge came mostly from the hours that I spent at work collaborating with the entire team – business analysts, testers, the customer, and other programmers. While my knowledge of the domain was not as vast as that possessed by the business analysts, it was still good enough to tie it with the underlying technical implementation.

While much of my knowledge of the .Net platform came from challenges that arose from the project, much of the knowledge came from research and participation in things I did outside of work. This outside participation included experiments with the .Net capabilities, attendance in user groups, and preparation for .Net certifications. It’s not possible to learn many of the capabilities of the .Net framework from any single real world project. That is because any one single real world project leverages only those capabilities necessary for that project. This means that in order to learn more of the capabilities, one must do extra research. The Microsoft Certified Professional preparation books are a good source of information because they provide a good amount of breadth across the .Net framework.

As of lately many of the .Net user groups have matured significantly, that’s mostly because the .Net framework has been around for approximately nine years. There is only so much that we, as a community, can learn and share about the .Net framework. Don’t get me wrong on this, the framework is vast but there is much more that’s necessary for web development than the .Net framework alone. There has also been this big discovery that web development needs to be done in a certain manner. That manner being more aligned with other platforms such as Java, Ruby and so on. In the recent years Microsoft and the .Net team, for the most part, has started moving web development away from it’s original marketing ploys such as Webforms and even Silverlight. This is a significant shift because that means that web development on the .Net platform requires leveraging other front end technologies such as Cascading Style Sheets (CSS) and JavaScript and JavaScript frameworks such as JQuery. I say this is significant because it puts more on the table for the .Net developer to digest.

Another set of knowledge artifacts I acquired during that time are knowledge of design patterns. Design patterns are vital to the software architect because they are universal across (Object Oriented)OO Languages. Having and understanding of these patterns and when they should be used is vital in designing maintainable applications.

By now you may be wondering where I am going with all of this. The point that I want to make is, that since I am making the move from C# to Java there is, potentially, some concern by the the gaining management team that I may not be well suited for the job. Many times project managers and program managers have this false belief that if you don’t have X years of experience in the required language, you will not be able to be proficient in your new role. I say that this is a false belief because the understanding that I have of all of those other concepts are things that I can quickly begin leveraging from day one on the project.

I won’t say that this knowledge is going to lay out all the groundwork for my new role. It won’t. What I am saying is that I already carry a significant amount of knowledge and it is going to help me tremendously. That does not mean that my new role will not come without significant challenges. I have many challenges. I must learn the business domain – I see this as one of my most significant challenge. I must learn how to do things that I used to do in C# but now I must do them in Java. I must learn how dependency injection on Spring works, but not what dependency injection is, for instance. I must learn the Java programming conventions, they are definitely different than C# conventions. I must learn how Java Servlets work but not how HTTP works – in the end HTTP is the same no matter the platform.

What does all this mean for me? It means that for next few months I am going to be reading a lot and educating myself on Java Technologies such as the Spring Framework, JSP, Java, among some proprietary oracle technologies. I will also be learning a lot about the business domain of the new project. All of these things carry a significant learning curve. However because I am already familiar with the underlying concepts I can leverage that knowledge to exponentially reduce that curve.

I have my work cut out for me. The point I want to drive home is that a language is hardly ever the barrier. The concepts that a developer is well versed in, are more important than the skills of any particular language. This means that for this particular topic, I am making the point that this applies to Line of Business applications. I have delved in other types of applications such as games but not enough to have the authority to speak on that, but I imagine that the same applies. I think a move from game development in .Net to a LOB applications in .Net would be a bigger challenge than crossing over from one language within the same application type.

So next time you are looking for a developer don’t focus so much on the language and focus more on the application type and the concepts that the developer understands within that application domain.

I would like to hear what your thoughts are on this discussion.

Leave a Reply

Post Comment

Connect With Us

Recent Posts

A Guide for Learning Design Patterns

July 28th 2016 by Fernando Zamora If you’ve been writing code for more than a year, you might have h...

Read More

Using UML to Analyze Legacy Code

June 30th 2016 by Fernando Zamora For every programmer out there creating brand new code and working...

Read More

Python vs. Other Languages

April 29th 2016 by Fernando Zamora For the last two months or so my fellow McLane Advanced Technolog...

Read More

Naming Your Adapter When Implementing the Adapter Pattern

October 19th 2015 by Fernando Zamora At some point in your project you may need to use a third party...

Read More

10 Methods to Help You Debug Legacy Code

September 24th 2015 by Fernando Zamora A large majority of the work we do in our project is to fix r...

Read More