2009-04-11 8 views
10

Con alcuni cambiamenti nel personale in ufficio, i livelli di competenza di C# sono diminuiti in modo vertiginoso e ora ci sono più sviluppatori Java. È arrivato al punto in cui i superiori stanno prendendo in considerazione lo spostamento di un progetto .NET esistente scritto in C# nel mondo Java.Migrazione di un progetto da C# a Java

A parte l'ovvio problema di starting completely from scratch quali sono i possibili modi in cui questa azienda può eseguire una mossa di sviluppo di successo su un progetto da .NET C# in Java?

risposta

18

Qui ci sono cose da considerare:

  • È questo grande progetto? Se sì, prova ad attaccare con C#
  • Questo progetto di dimensioni medie con componenti? Se No, prova ad attaccare con C#
  • Questo piccolo progetto doveva essere implementato solo su Windows? Se sì, prova ad attaccare con C#
  • È questo vecchio codice sorgente? Se Sì, prova ad attaccare con C#
  • Usi API specifiche di Windows OS? Se Sì, prova ad attaccare con C#
  • Usi API di terze parti senza controparte Java? Se sì, prova ad attaccare con C#
  • Usi .Net in "deep" (associazione dati, controlli utente, ecc.)? Se sì, prova ad attaccare con C#
  • Il tempo di migrazione è più accettabile rispetto all'acquisto di ragazzi C# nuovi/convertiti? Se no, prova ad attaccare con C#
  • Pensi che gli utenti finali non saranno ricettivi ai cambiamenti, se vuoi usare il framework Java che cambierà la presentazione?Se sì, cercare di attaccare con C#
  • Controlla spot

Se si decide di convertire:

  • Vai per componente
  • Vai per strato
  • avere un sacco di test
  • Verifica se ci sono strumenti per aiutare (per quanto piccolo aiuto possa essere) con la migrazione
+0

perché "# è questo piccolo progetto pensato per essere distribuito solo su Windows? Se sì, prova ad attaccare con C#" importa? Penso che ti sia mancato: è un gui? prova ad attaccare con C# – Egwor

+0

Se è un progetto piccolo, non vale la pena di convertirlo in Java quando sono ancora disponibili pochi programmatori C#. Ma se è necessario eseguire su sistemi operativi diversi, vale la pena convertire. Penso che il punto della GUI sia coperto dai cambiamenti nella presentazione e vinca le chiamate API. – isntn

2

Se alcuni componenti sono già isolati o nessuno di essi utilizza un'architettura orientata ai servizi, è possibile migrare un componente alla volta (in cui ogni singolo componente è una riscrittura) e avere i componenti parlare con uno solo un altro utilizzando gli stessi protocolli di rete interoperabili. Probabilmente dipende dal tipo di app di cui stiamo parlando.

2

Assicurati di avere tonnellate di test, perché una tale migrazione ti morderà dove ti aspetti meno.

1

Avete più. Netto o più applicazioni Java in produzione. Se hai già un notevole investimento in server e applicazioni .Net, perché non chiedere ai volontari tra gli sviluppatori Java di passare a .Net? Il linguaggio e la sintassi sono molto simili, quindi la parte difficile sarebbe imparare il framework e, a meno che non passassero tutto il loro tempo a fare lo sviluppo dell'interfaccia utente, anche l'apprendimento del framework non è così difficile.

Nel nostro ufficio abbiamo un numero di ottimi sviluppatori che si spostano avanti e indietro tra Java e .Net secondo necessità.

15

Giusto per aggiungere le opinioni di Brian ed Eric, direi che prendere C# per uno sviluppatore Java dovrebbe essere semplice a mio avviso. Sono linguaggi concettualmente molto simili e suggerirei di addestrare i tuoi sviluppatori Java ad acquisire alcune abilità in C# in modo da non essere costretti ad andare incontro al fastidio di un processo di migrazione.

0

io non sono un esperto di Java, ma dalla mia esperienza di lavoro con il codice Java, pur essendo un # ventilatore C, i seguenti sono alcuni dei possibili mal di testa:

  • Generics sono implementate in modo diverso in Java e C#.
  • Boxe/comportamenti unboxing sono diversi tra Java e C#
  • Java classe di convenzione di denominazione + lotti C# codice generato
  • gestione delle stringhe (vale a dire Unicode preoccupazioni/ASCII) può essere problematico a seconda della qualità di Java/C# codice essendo portato su

Personalmente, non penso che scrivere da zero sia una cattiva idea. Dal momento che hai già un'architettura funzionante.

1

Per dimostrare la gestione, è sempre necessario parlare in termini di ROI e numeri. Mostra loro che, se sposti queste applicazioni, ci vorrà una quantità enorme di tempo, risorse di QA, e puoi facilmente prendere un sedile posteriore se viene declassificato a causa di altri progetti o di nuovi sviluppi che assumono importanza.

ho avuto successo quando ho mostrato loro lo scadenze, ROI, lavoro in questione, denaro, ecc

Così ora venire al punto attuale, penso sviluppatori Java sarebbe in grado di sostenere C# a meno che abbiano un blocco mentale fondamentale contro le tecnologie Microsoft.

1

Dai uno sguardo a Net2Java, che aiuta a convertire il tuo codice da C# a Java. Dubito che sarà perfetto, ma il suo unico modo per rimuovere un sacco di lavoro pesante dal compito, lasciandoti con i nodi delle chiamate quadro incompatibili e le funzionalità del linguaggio per appianare.

Una volta fatto, il tuo compito è come qualsiasi altro grande progetto di migrazione: test, prova e prova di nuovo. Test unitari, test di integrazione del sistema, quindi test dell'utente finale. Dovresti avere quei test già in uso che hai usato con l'applicazione originale, a parte i test unitari, saranno comunque rilevanti.

0

Sono un po 'sorpreso, nessuno ha nemmeno suggerito l'idea di rifiutare la migrazione.

Non credo che uno sviluppatore C# possa essere forzato a passare a Java (o viceversa) perché gli è stato detto (beh, se è minacciato con una pistola, forse). Mi ci vuole molto tempo, esercizio e passione per padroneggiare almeno uno stack tecnologico. Non puoi iniziare da un giorno all'altro con una nuova tecnologia e aspettarti di fornire la stessa qualità.

Personalmente non mi preoccuperei di informarlo prima di iniziare la migrazione. A quel punto direi al manager che sono un ragazzo di .NET e non passerò a un'altra tecnologia solo perché hanno deciso di farlo.

Per quanto riguarda il lato tecnico, non è la sintassi del linguaggio che differisce, ma piuttosto le librerie e le loro caratteristiche. Naturalmente, se tutti gli ultimi campanelli e fischietti di .NET 3.5 sono stati ampiamente utilizzati, la differenza linguistica ti fornirà una vera sfida.

Questo è sicuramente un modo divertente, basta decidere di migrare le applicazioni da .NET a Java. Qualcuno non ha idea della seccatura coinvolta ...

+0

fai quello che ti dice il tuo capo, c'è un sacco di sviluppatori disoccupati che sono disposti a codificare qualsiasi cosa sia richiesta. Se possedessi il business, sarebbe diverso. – gbjbaanb

3

Indipendentemente dalle lingue coinvolte, la gestione di questa azienda sembra folle. Per qualcosa di diverso da un'applicazione banale, come può essere economicamente ragionevole riscrivere da zero un intero codice base invece di assumere una sola persona con alcune abilità nella lingua giusta? È un affare con quel noto problema: troppi soldi in eccesso ?!

Per quanto tempo è in sviluppo il codice esistente? Se è appena iniziato, potrei capire questo. Se è stato visto un rilascio e ha utenti attivi, sarà mai avere senso buttarlo via. Se hai donato il codice C# ad una start-up con le giuste abilità, pensa a quanto inizio avrebbe su di te.

3

Prima di completare la conversione del progetto .NET in Java, tutti gli sviluppatori Java che facevano parte del progetto di conversione avranno appreso C#. Quindi non hai più bisogno di convertirlo in Java (e puoi buttare via tutto il codice Java che è stato prodotto nella conversione), perché ora hai un team di sviluppo che può fare sia Java che C#. Problema risolto. : D

5

Mi iscrivo al punto di vista di Joel che a total rewrite is almost always a mistake. Altri poster hanno ragione: C# e Java sono abbastanza simili che qualsiasi sviluppatore Java competente dovrebbe essere in grado di diventare competente in C# nel giro di settimane o mesi. Questo non vuol dire che saranno esperti. Ciò richiede più tempo, ma finché hai sviluppatori C# che possono guidare il processo, allora dovresti essere OK.

È difficile commentare se una tale transizione sia una buona o una cattiva idea senza conoscere le specifiche dell'applicazione: dimensione, tipo di applicazione, settore e così via.

Sarei estremamente reticente su un tale interruttore perché, a mio modesto parere, C# is now a much more modern language than Java e ti dico questo come qualcuno che è stato uno sviluppatore Java di oltre un decennio (dal 1.0.2/1.1 giorni).

Questo non vuol dire che Java sia cattivo. Non è. Sun ha una nuvola sospesa sopra di esso e ha dimostrato riluttanza o incapacità di far avanzare la piattaforma negli ultimi anni.

1

Se si decide di farlo, molto probabilmente si trarrà vantaggio da un approccio ibrido in cui è possibile mescolare fondamentalmente C# e Java nella stessa applicazione, poiché cambierà lo scenario da una conversione a cascata a una migrazione graduale. Qui so di due possibilità:

1) ikvm (http://www.ikvm.net/) che consente di eseguire codice Java in un runtime .NET. Ciò consente al codice Java di chiamare il codice C# e viceversa. Quindi è possibile bloccare lo sviluppo del codice C# e aggiungere lentamente la funzionalità rivista alla parte Java mantenendo un'applicazione funzionale.

2) Mainsoft (http://dev.mainsoft.com/Default.aspx?tabid=130) che consente di compilare bytecode .NET in bytecode Java. Hanno una versione gratuita. Non ho esperienza con il prodotto, ma pubblicizzano molto sulla nostra piattaforma che ha solo Java disponibile.

+0

Sembra che Mainsoft sia completamente gratuito ora. –