Slashdot Mirror


Moving a Development Team from C++ to Java?

Nicros asks: "I work for a company that is working toward an FDA approved software development process. We have always used C++ in a Windows environment, and we have more than 6 years of code, applications and libraries developed. Because of our long and convoluted software development history, our existing architecture is difficult to manage for a group of our relatively small size (5 FTEs), and development times are rather slow. Our IT director has made the decision that, to speed up development times, we need to re-architect all of our existing code, from C++ to Java." What would be the best way to go about handling such a migration? In a general sense, how would you go about moving a development team from one language to another? "Our IT director has hired a 3rd party (offshore) company assist us with this migration, and they have recommended that we change from C++ to Java, Spring and Hibernate. We are all professional programmers here, so learning Java is not a problem for those of us who don't know it. The real question is: what do we gain from moving to Java? Or conversely: what do we lose by moving away from C++? Additionally, will one language or another really help us to get FDA approval?

I personally am a bit suspicious of this solution. I find it more likely that the problems we have would persist across languages or architectures (lack of time and resources leading to buggy code, lack of direction from marketing, and so on). However, having not gone through this process before, I would be interested to hear any thoughts, stories of similar experiences, or pros and cons."

7 of 204 comments (clear)

  1. Logic check by greywar · · Score: 5, Insightful

    OK so you all have years of experience in c++, 6 years of code, etc. Consultants who are familiar with jave recomend changing to java. And changing development languages and re-doing all of this will save you time? I just don't buy that, to me it sounds more like it will make those offshore consultants more money. You're going to spend the next couple years re-writing all of your old work, not getting things done.

  2. Resume by pete-classic · · Score: 5, Insightful

    Sounds to me like the best case is that some salesman has convinced your management that Java is a cure-all. The worst case is that your management has decided that this is the first step in off-shoring your job.

    In either case my advice to you is the same: Polish up your resume.

    -Peter

    1. Re:Resume by Ozwald · · Score: 5, Insightful

      This is a common tactic by consulting companies. It always follows the same flow, never fail:

      1) consulting company hires a lot of junior/intermediate coders for his company that only learned Java or C#. C++ skills and experience avoided in favor of knowing the latest .NET/Java technologies.
      2) an expensive consultant comes in to analyze an imperfect system
      3) this person makes all kinds of suggestions, says nice things about management, says "use lots of UML"
      4) says his devs are really good C++
      5) brings in his coders to help fix bugs, charges lots of money for diagrams never used
      6) consultant coders fail at fixing bugs, claim that code base is too fubar'ed to maintain
      7) convince management to "port" code to Java/C#.
      8) consultant coders soon have more knowledge of the system than the old devs because knowledge isn't shared properly (no more UML)
      9) management becomes too afraid to let go consultant coders because they know more about the system than the devs (despite costing atleast twice as much)

      I can't count how many times I've seen this because the city I used to live in had atleast 2 massive consulting companies that made this their business model. I imagine it's even worse when it goes off shore to India because all the knowledge is looked away in peoples' minds thousands of miles away. Such a huge mistake for management to lose all they paid for for nothing.

      Oz

  3. Don't by AuMatar · · Score: 5, Insightful

    You have working code in C++. Throwing out all that work will take years and millions of dollars. Even if Java doubled your productivity (it won't- you don't have experienced Java developers so it will greatly reduce your productivity) it would take over a decade to break even if you ever did.

    Never rewrite working code. Refactor, rewrite subsystems if absolutely necessary. Otherwise leave it as is and if you really want to experiment with Java, do it with new tools.

    --
    I still have more fans than freaks. WTF is wrong with you people?
    1. Re:Don't by Marillion · · Score: 5, Insightful
      Initially, I'm inclined to agree. Swapping out a language to fix problems isn't fixing the problem. It's like those companies that move all the boxes the org-chart every so often trying to solve the problems of their company - those boxes at the top. The problem is poor development processes.

      There are two kinds of Software Development Processes: 1) Manager centric and 2) Developer centric.

      All the stuff we do at our company for Sarbanes-Oxley is classic Manager Centric SDP. It's about tracking the track every inch of code, who changed what, who had business authorization to put it in. Developers loose productivity over this, it's tedious, it doesn't improve quality, it doesn't prevent errors, but it does keep the auditors happy which does keep management happy.

      The SDP's that benefits developers are things like Agile Programming. Among the cornerstones of Agile are Test Driven Development and frequent iterations. These are the processes that focus on preventing bugs in the first place.

      I once worked for A Company that wanted all of #1 and none of #2. They got what the deserved. You need a measure of both with a dash of flexibility.

      Software development processes have almost nothing to do with the choice of language. That said, it's been my observation that there are lots of really smart people working on Java to improve the development process. Eclipse is amazing with code completion, on-the-fly error tracking and refactoring. JUnit (comes with eclipse) is a benchmark Test Driven Development system. If you must switch languages, invest in the training to make those tools productive!

      --
      This is a boring sig
  4. Oh my. by Jerf · · Score: 5, Insightful
    Or conversely: what do we lose by moving away from C++?

    Six years of C++ development, and all the corresponding skill development.

    Even with the C++ to guide you, and assuming you had all the manpower to do the full conversion to Java that you had to write the C++ in the first place, you'll need at least a third of that time again to re-write the whole thing in Java, most likely. And that's being conservative; if you're good with C++ it's extremely likely to borderline-certain that you have used idioms that will translate poorly or effectively not translate at all into Java.

    That's a shitload of stuff to just throw away to be buzzword compliant.

    My suggestions would be to do one of two things.
    1. Research JNI and see if that would allow you to incrementally pull things over to Java as you need them, while leaving the rest C++. C++ is so wonderfully... ahh... I'll go with "powerful" that it's hard to tell how things will interact, but if you can pull things over incrementally, you can at least not toss everything all at once. Because that's a guaranteed recipe for disaster.
    2. Research your choice of Python or Ruby. My recommendation would be the former as it's more mature in a lot of little ways (and some big ones, like Unicode from what I hear). There are several technologies for using C++ objects in Python. I presume there are some in Ruby. Incrementally wrap pieces of your code in Python handlers as you need them, write Python or C++ as the situation warrents. There are other such languages to consider too; you'll have to evaluate them for your needs.
    The key word here is not Java or JNI or Ruby or Python; those are really incidental to my point. The key word is incremental. Incremental might succeed. Attempting Total Switchover is just writing a check to the consultants for no return this decade.

    And while you're incremental-ing and maybe wrapping, be sure to write unit tests if you haven't already got them. If you do manage to not toss out your entire code base, a good first step for any of this is to write unit tests on the parts of the code you're going to manhandle.
  5. Process != Language by bssteph · · Score: 5, Insightful

    You say you're looking to achieve a "FDA approved software development process." And your IT director decided that Java is the magic bullet.

    This should be setting off some kind of warning in your head.

    A software development _process_ has little to do with implementation language. What you're looking for is a way to verify that you and the rest of your developers can rigorously apply software engineering principles in your organization and (reasonably) predict cost, development times, etc.

    You should have your developers reading the Capability Maturity Model, not books on Java. The government loves the CMM. I'd suspect a critical organization like the FDA would want CMM Level 5 (as hardcore in software engineering as you can get) out of your _organization_.

    That is, the process is people, not implementation language. Java being the green light is a load of malarkey (or at least, it should be).