Scala sarebbe una buona scelta invece di Java?


11

Inizieremo un nuovo progetto che prevede la formazione di tutti gli sviluppatori .net in Java (framework / sistema ECO ecc.). Abbiamo un sacco di codice scritto in C # e sembra che tutto ciò andrà sprecato poiché dovremo riscriverlo tutto in Java. Il problema che vedo è che il primo anno o giù di lì (probabilmente 2 anni) non avremo nulla da offrire in quanto passeremo la maggior parte del tempo a riprodurre ciò che avevamo prima ma ora in Java.

Poiché il nostro team è distribuito in diversi uffici in tutto il mondo e abbiamo un gran numero di sviluppatori java (da 20 a 30) e 10 sviluppatori che utilizzano .net, vogliamo ottenere tutti gli sviluppatori utilizzando la stessa lingua / piattaforma in modo da poter iniziare a riutilizzare componenti / moduli. Quindi posso capire il punto di vista della gestione.

Ieri mi sono imbattuto in Scala e mi chiedevo se sarebbe stato meglio usarlo con il prodotto attuale (che è scritto in C #) e poi almeno avremo un prodotto funzionante tra un anno. Inoltre tra un anno abbiamo moduli che possono essere utilizzati nel mondo Java mentre migriamo altre parti del prodotto.

Scala sarebbe una scelta migliore di Java considerando ciò che stiamo cercando di ottenere?


2
Riscrivere tutto in un'altra lingua? E 2 anni senza nulla da offrire? Sembra una terribile decisione di gestione e potresti aver bisogno di un nuovo lavoro in sei mesi;)
zvrba

Sì, è stato considerato. Non sono sicuro di dove dovrei iniziare a cercare ora e
attenermi

1
Sembra che stai
back2dos,

Risposte:


15

Alcuni punti da considerare:

  • Scala è una lingua fantastica, ma vale la pena notare che è anche una lingua piuttosto stimolante da imparare e usare correttamente. Non solo la mia opinione - lo dicono anche gli esperti di Scala . A seconda del livello di abilità nel tuo team, è probabilmente il più adatto come strumento per i tuoi sviluppatori più esperti / esperti
  • Java e C # sono abbastanza simili in molti modi: non ci vorrà molto perché gli sviluppatori addestrati in uno si muovano (la sintassi è simile, è principalmente solo un caso di apprendimento delle stranezze di ciascuno e comprensione delle diverse librerie, che spesso hanno funzionalità simili ma sono impacchettati in modo diverso e / o hanno nomi diversi). Sono passato personalmente da Java a C # e di nuovo a Java senza alcuna difficoltà.
  • Vale anche la pena notare che tutti i linguaggi JVM (Java e Scala, ma anche JRuby e Clojure ecc.) Sono molto compatibili: condividono la stessa piattaforma JVM fondamentale e possono condividere codice / librerie molto facilmente.

Alla luce di tutto ciò, potresti voler proteggere le tue scommesse e scegliere una strategia mista Java / Scala, ovvero migrare alla piattaforma JVM e concentrarti inizialmente su Java, ma tieni aperta l'opzione per usare Scala quando i tuoi sviluppatori sono a proprio agio e / o si adatta al problema attuale.

Dal punto di vista gestionale ciò presenta molti vantaggi:

  • Puoi comunque condividere tutte le librerie in modo che i tuoi investimenti siano al sicuro
  • I tuoi sviluppatori meno esperti saranno in grado di trasferire C # -> Java abbastanza velocemente
  • I tuoi sviluppatori più esperti possono sfruttare appieno le funzionalità avanzate di Scala
  • Tutti gli strumenti sono compatibili / possono essere condivisi (sistemi di creazione, IDE, strumenti di distribuzione ecc.)
  • Ottieni accesso gratuito all'ampio ecosistema open source di librerie sulla JVM (oltre alla portabilità multipiattaforma, questo è probabilmente il miglior motivo per essere sulla piattaforma JVM)
  • I tuoi sviluppatori potranno usare il linguaggio che li rende più produttivi date le loro abilità / il compito a portata di mano (Java in alcuni casi, Scala in altri, forse altre lingue come Clojure in futuro)

L'aspetto negativo è che hai ancora due lingue principali da supportare. Ma probabilmente in realtà ne hai già molti di più di due (script di shell? Formati XML specifici del dominio? File di configurazione? Motori di regole? HTML? Javascript?), Quindi potresti obiettare che in realtà non è un grosso problema.


Grazie per l'informazione. Sto solo cercando di scoprire qual è il modo migliore per andare avanti e mi hai dato delle informazioni eccellenti. Al momento abbiamo alcuni buoni sviluppatori OO ma nessuno ha familiarità con la programmazione funzionale.
JD01,

1
Felice di aiutare! Vale la pena essere consapevoli del fatto che Scala è più un linguaggio basato su più paradigmi / OOP. Mentre puoi certamente fare FP in Scala, se vuoi che le lingue siano più chiaramente funzionali a fuoco, Haskell o Clojure sono probabilmente più vicini al segno.
Mikera,

Per quanto riguarda il riutilizzo del codice, se avessi usato Clojure o Scala sin dal primo giorno o anche come hai detto in una strategia mista, potrei riutilizzare il codice Clojure / Scala sia in .net che in Java? Mi chiedo se questo sia un buon punto di forza per il management. In questo modo potremmo ancora ottenere un prodotto (il vecchio prodotto con nuove funzionalità) ed essere anche sulla strada per riscrivere il codice esistente in Java con il riutilizzo del codice dei moduli clojure / scala. Sono corretto nel mio pensiero qui o questo apre altri problemi?
JD01,

1
Se lo desideri, puoi esporre la funzionalità Clojure / Scala come servizio web o interfaccia REST. Questo è un overhead leggermente più elevato rispetto alla semplice creazione diretta di una libreria (che sarebbe l'opzione migliore se si volesse chiamare la funzionalità da Java / un altro linguaggio JVM) ma darebbe sicuramente la flessibilità di chiamare il codice da qualunque client ti piaccia (. Net, Java, Ruby, ecc.)
Mikera,

Grazie Mike. Penso che il percorso di riutilizzo del codice mostrerebbe almeno alla direzione che non è necessaria una riscrittura completa con l'opzione Scala / Clojure. Non voglio che finiamo come Netscape :). Tornando alla costruzione di una biblioteca, non potrei semplicemente usarlo in .net e java senza servizi web?
JD01,

15

Aggiungerò una terza opzione. Qualcuno nella tua organizzazione ha esaminato l'interoperabilità tra i moduli C # e Java? Come stai esponendo la funzionalità C #? I servizi web SOAP o RESTFul sono un'opzione?

Una riscrittura di 2 anni può essere una campana mortale per un'organizzazione (basta chiedere a Netscape). Tuttavia, una migrazione graduale mentre il codice esistente si gioca bene l'uno con l'altro ha potenzialmente un impatto commerciale minore.


3

Riscrivere C # su Scala sarà difficile quanto riscrivere su Java. Per quanto riguarda quale lingua è "migliore", quel punto è discutibile, ogni lingua ha i suoi punti più e meno.

Non so quanto sia grande la tua base di codice ma 2 anni per 30 sviluppatori sembrano enormi per una semplice riscrittura. Raccogliere Java quando sai che C # è facile. Mi ci sono voluti un paio di giorni per sentirmi a mio agio.

Il mio consiglio sarebbe di lasciare che la gestione si faccia strada e goda del fatto che vieni pagato per ampliare le tue competenze.


Solo circa 10 sviluppatori lavoreranno sul nuovo prodotto. Sto solo cercando di scoprire quali sarebbero i pro ei contro di andare con Scala.
JD01,

1
Non conosco abbastanza i dettagli del tuo progetto o Scala per darti una risposta defiante. Tuttavia, mi sembra che l'introduzione di una terza lingua che nessuno conosce complicherebbe le cose.
Tom Squires,

Potresti avere ragione. Ci stavo pensando in termini di uscita di un prodotto in circa un anno, mentre allo stesso tempo riuscivo a riutilizzare il codice in .net e java. I tuoi punti sono ben noti :)
JD01

1

Penso che l'opzione più semplice sarebbe quella di convincere gli sviluppatori Java a imparare C #. Entrambe le lingue sono molto simili in molti modi e non ci vuole molto tempo perché uno sviluppatore Java raccolga C #. Ho lavorato con molti sviluppatori Java che hanno imparato C # e di solito è una transizione graduale. L'area in cui potrebbero rimanere bloccati per un po 'è il modello di programmazione WebForms. Gli sviluppatori Java si adattano meglio al paradigma MVC. In questo modo, non è necessario attendere un anno prima di iniziare a sviluppare nuove funzionalità. Per quanto riguarda Scala, temo che introdurrà un problema completamente nuovo con tutti e 30 gli sviluppatori che cercano di imparare una nuova lingua.


Ci sono così tanti prodotti scritti in Java, quindi farli imparare C # sarebbe difficile. Speravo con Scala, una volta che avremo il nuovo prodotto, gli sviluppatori Java potrebbero usare le librerie così com'è senza bisogno di imparare Scala.
JD01,

2
Non sarebbe ok se esponessi il tuo codice .Net esistente come servizi che gli sviluppatori Java possono invocare e sviluppare tutte le nuove funzionalità in Java.
Sriram,

Ciò era stato suggerito in passato, ma è stato deciso di abbandonare .net.
JD01,

Wow! Quindi vorrei mantenerlo semplice e riscrivere il codice in Java. Penso che Scala introdurrebbe un'ulteriore complessità da gestire e sarebbe un duro affare per il management.
Sriram,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.