Saturday, February 12, 2011

What are the real challenges for a developer migrating between programming languages?

Many developers will claim that moving from one programming language to another is relatively simple especially if the languages are based on similar paradigms. However, in practice the effort comes not from learning the syntax of the language but in developing a deep understanding of the language nuances and more importantly knowing what is offered in the language’s libraries. For example, switching from Java to .Net is not difficult from a syntactic perspective but programming efficiency requires a good knowledge of the available libraries. Switching from PHP to .Net could present an even greater hurdle given the language disparities.

What are the real overheads for a developer to move to a different language in the same paradigm? What if the paradigms are different?

  • For me it would finding good bloggers and useful sites on the language. After a while you get to know where the best people are. Those people and sites are good sources of information for learning the subtleties.

    From harriyott
  • leaving your comfort zone. I think this is one of the biggest reasons some developers don't learn new languages.

    But for others, this is what drives them.

    From levi rosol
  • The biggest challenge (for me) is usually the API, rather than the language itself (.NET notwithstanding). For example, I've been using Microsoft's C++ and C# for a lot of years (Delphi before that). But I have great difficulty getting started on Java; even trivial projects can take me a while. Not because the language is difficult (it's not), but because the APIs are different, and arranged differently.

    It takes months to get up to speed on an API to the point you can use it fluently, and years to become "good" and learn all the ins and outs of the language. That's daunting for a lot of developers, because you basically have to devote a significant amount (if not all) of your time and effort toward working in the new language to become an expert at it. Many times, the incentive to move out of your current area of expertise just isn't there.

    Bill the Lizard : Spot on. I'm always amazed at developers who say they can "learn" a new language in 3 days. Sure, you can learn the syntax, but knowing how to use the language is entirely different.
    DannySmurf : Absolutely. It takes months to get up to speed on an API to the point you can use it fluently, and years to become "good" and learn all the ins and outs of the language. I think I'll put that in my answer, actually.
    Mark Baker : I do think Java's libraries are particularly poor, but it's a problem picking up any new platform. What makes it worse is that it's hard to know what to search for, you pretty much have to just read large chunks of the documentation.
    From DannySmurf
  • Same paradigm is much easier because it is really just a matter of grasping the various libraries and locating them quickly as you mentioned.

    If the paradigms are different than this switch is more difficult. Moving from a static to dynamic language or a procedural to OOP language will require a different mind set. This will take more time but it is possible and still a very good exercise.

    It may be similar to learning foreign languages. If you speak English, than moving to another Latin based language is far easier than going to something like Greek.

  • Moving within the same paradigm is relatively easy. I find that switching between Java and .NET painless because both platforms offer similar functionality and similar libraries. But switching paradigms could be a real challenge.

    My students usually have a hard time going to Functional and Logical languages after learning Java even though the functional and logic programming are easier.

    Another problem is switching between types of applications. For example, if you are accustomed to building desktop applications in Java then suddenly try to build web applications in .NET the switch is hard because you are not only learning new languages but new fields of programming.

    Another challenge is the tool sets that are available for a particular language. Java and .NET have similar tools but with some differences. If you learned to program using Visual Studio then it is possible that features of Visual Studio become confused with the language. I see students having this problem all the time. When you switch to Java and there is no equivalent menu option of wizard in the new IDE it could cause problems.

    I advocate to persons learning programming to learn the core concepts of the paradigm rather than the specific language because it makes you more portable in the future. A person comfortable with Object Oriented Concepts will have an easier time switching between Java and .NET or Python than a person who simple learned how to program in C#.

    Richard Dorman : Understanding the core concepts is essential but management often make the mistake of assuming that having a core understanding implies that your library knowledge in one language migrates easily to another language. I believe this takes longer and is more costly than is expected.
  • Just like learning a new human language, for me the biggest problem lies on typical constructions you need to do to solve a problem.

    I know that perhaps learning "while" or "for" loops in several languages aren't so difficult - but when your problem goes up one level of abstraction (iterate through this array) you'll find yourself using "[" instead of "(" and vice-versa.

    The learning curve can be even steeper if, besides learning a new language, you have to learn a new framework. When I went from typícal ASP.Net to MVC (using NVelocity) I kinda felt myself completely lost - all my knowledge on how to solve typical problems with asp.net control had to be forgotten.

    Finally, the biggest challenge happens when you change between languages with different paradigms - because you can no longer think in the same way to solve a problem. Like - when moving from C# to Prolog, instead of thinking in functions, arguments, class hierarchy, etcs... I had to think only in states, events linked to data changes and event chaining via recursion - it was madness but I could finish my university homework.

    From rshimoda
  • Coming from 15+ years of C++ background I just had to move to Java for a new project I am working on, and this is a rather painful step. There are tools and frameworks for almost everything, but the learning curve is enormous! The new syntax is nothing to worry about, the API is more difficult, but the most difficult area is to find the way through the all the frameworks.

    Also, having to use Eclipse as IDE is a step back in terms of stability and reliability compared to Emacs. The features of Eclipse are really compelling, but the bugs in the IDE cause constant hassle.

    From struppi

0 comments:

Post a Comment