Dov'è la media aurea tra monocoltura linguistica e policoltura? [chiuso]

7

La mia azienda utilizza Java (come lingua e piattaforma) da molti anni. Abbiamo molti prodotti che variano molto per dimensioni, scopo e complessità. Qualunque siano i requisiti, la risposta è sempre la stessa - Java. Questa posizione ovviamente ha vantaggi e svantaggi. Da un lato positivo, non c'è il cambio di contesto tra incarichi di lavoro su progetti diversi, ogni sviluppatore in azienda può essere relativamente produttivo su molti progetti; da un lato negativo, un piccolo strumento potrebbe finire per essere "schiacciato" da Hibernate. Da un lato, gli ambienti di confezionamento, distribuzione ed esecuzione potrebbero essere standardizzati; d'altra parte, potremmo perdere l'agilità della mente e perdere le soluzioni ottimali sempre "pensando in Java". Potrei andare avanti all'infinito.

La programmazione di poliglotta è diventata abbastanza comune nel recente passato, per quanto possa osservare. Detti come "strumento giusto per il lavoro" suonano sempre strong anche nelle mie orecchie. Il desiderio di aprirsi e di esporsi a più "strumenti giusti" è abbastanza strong, ma dov'è il rischio? Meglio ancora, dov'è la media aurea? È sempre pericoloso andare da un estremo all'altro. Ho paura di un giorno di svegliarsi in un pasticcio incomprensibile di una gigantesca pila di Java, Groovy, Python, Ruby, PHP, Scala, ecc. Con tutti i relativi strumenti, strutture, server e filosofie.

Hai un'esperienza pratica di lavoro in lingua e piattaforme di policoltura per almeno due anni? Quali sono le tue osservazioni principali? Di cosa sei ancora eccitato e cosa temi?

    
posta Yuriy Zubarev 25.03.2011 - 17:43
fonte

5 risposte

3

Siamo stati in una situaltion simile e abbiamo aggiunto un'altra lingua al mix quando ciò che volevamo ottenere non poteva essere fatto in alcun modo pratico con la lingua esistente.

Ci sono voluti anni per raggiungere quel punto però.

Per estendere il tuo strumento giusto per la metafora del lavoro, potrebbe essere meglio infilare un chiodo con l'impugnatura di un cacciavite anziché guidare in città verso il negozio per comprare un martello. Ma quando hai bisogno di abbattere un albero è tempo di andare al negozio.

    
risposta data 25.03.2011 - 18:23
fonte
2

Sono stato in una compagnia per circa quattro anni, facendo cose pesanti in C ++. Dopo circa un anno, sono stato assegnato alla gestione dell'infrastruttura software (CVS e Gnats, principalmente), e mi sono ritrovato a utilizzare Perl in modo estensivo, oltre a quello che pensavo fosse il mio lavoro "reale". Abbiamo anche alcune librerie scritte in C, ma questo ha almeno una certa sovrapposizione con C ++.

Non ho avuto alcun problema con esso. Sapevo cosa sarebbe stato il C ++ e cosa sarebbe stato Perl, e così anche tutti gli altri. Basta con noi che Perl sapeva che sostituirmi non sarebbe stato un problema.

Suggerirei che lingue diverse vengano utilizzate per scopi diversi, quindi in genere non dovrebbe esserci una domanda sull'uso di C ++ o Perl. Per questo, è utile avere lingue chiaramente diverse che sono generalmente adatte a cose diverse.

    
risposta data 25.03.2011 - 18:14
fonte
1

Lavoriamo con un set standard di strumenti:

  • Java - linguaggio generale. Tutte le nostre principali app di supporto sono o applicazioni web Java o servizi web.
  • RPG su AS400 fa gran parte dell'accesso al database.
  • Visual Basic avvia le nostre build automatiche. Non ho familiarità con come ha funzionato.
  • Gli script ant fanno funzionare la build.
  • Python (per Websphere Admin) esegue script di implementazione e configurazione del server.

Questa intera combinazione è stata elaborata prima di iniziare a lavorare qui e, per quanto posso dire, è ottimale per ciò che facciamo. Funziona e tutti lo capiscono.

Devo dire che i nostri requisiti cambiano raramente in quanto si tratta di app aziendali interne. Quindi, non c'è un reale bisogno di cercare nuovi modi di fare le cose perché i nostri bisogni sono già coperti.

    
risposta data 25.03.2011 - 18:11
fonte
1

Perché non testare le acque senza fare il salto?

Java e altri linguaggi VM (Virtual Machine) si evolvono ogni giorno di più per disaccoppiare la lingua principale (Java) dalla sua VM (JVM) collegata. Nel caso della JVM ci sono molte lingue che puoi ora scegliere e che possono essere eseguite insieme al codice Java perché condividono un'infrastruttura sottostante comune (la JVM).

Ecco un breve elenco di alcune lingue JVM:

  • Jython (python)
  • Rhino (JavaScript)
  • Groovy (Scripting)
  • JRuby (Ruby)
  • Clojure (Functional Lisp)
  • Scala (orientato agli oggetti e funzionale)
  • Kahlua (Lua)

etc ... Per un checkout completo della lista Elenco delle lingue JVM di Wikipedia .

Il vantaggio di avere un team di sviluppatori Java è che la JVM viene estesa per funzionare molto più del codice Java. Quindi puoi eseguire Java, Python e JavaScript tutti insieme.

Prova ad incorporare alcuni Jython per gli script di utilità di base. O qualche Rhino per fare JavaScript sul lato server. Non c'è molto rischio di investimento perché non devi necessariamente scegliere come target una lingua specifica. Dà spazio alle tue squadre per esercitarsi e ampliare le proprie competenze senza interrompere le tue applicazioni.

Potrebbe essere meglio saltare PHP e dare un'occhiata ad alcuni dei framework Python (piloni, django) se la tua azienda pensa di entrare nello sviluppo del web. Il salto di sviluppo del web sarà probabilmente il più drammatico. Lo sviluppo del web è diverso ... Mentre alcuni concetti sono molto meno formalizzati (sembra ancora selvaggio west) c'è una stretta molto più stretta sullo stile se stai cercando un'applicazione web performante efficiente. Inoltre, gli strumenti e i concetti per l'ottimizzazione dei siti web sono un lotto diverso da quello che ti aspetteresti su un'app desktop.

Microsoft ha avuto un enorme vantaggio nel mondo delle macchine virtuali rilasciando inizialmente C #, VB e C ++ sulla macchina virtuale .NET ma il mondo Java si sta avvicinando molto rapidamente.

SideNote: se sei curioso, ecco un Elenco delle lingue della CLI .NET .

    
risposta data 25.03.2011 - 20:13
fonte
0

Nella mia esperienza di consulente (> 5 anni), trovo organizzazioni che si concentrano prima su abilità fondamentali e indipendenti dall'apprendimento linguistico e le tecniche di sviluppo sperimentano un grande successo nei loro progetti di sviluppo. Modelli di progettazione, tecniche di sviluppo, metodologie agili, si applicano indipendentemente dal linguaggio di implementazione. Modelli architettonici come bus di messaggi, servizi Web, schemi SOA sono nuovamente applicabili a tutti i progetti. Integrazione continua, test unitario, testabilità. Probabilmente potrei divagare ancora per un po '.

I vantaggi di consentire agli sviluppatori di offrire gli strumenti migliori per la fornitura di soluzioni non devono essere sottovalutati. Gli sviluppatori hanno la libertà di applicare lo strumento migliore a un problema e sfruttare il pensiero critico quando si fondono le tecnologie. Gli sviluppatori felici di solito equivalgono a prodotti migliori e team di maggior successo.

Detto questo, ci devono essere anche dei vincoli applicati, specialmente per i team meno maturi. Ho visto le organizzazioni con una mescolanza di tecnologie inadeguate, incomprese e disparate perché non esistevano linee guida o vincoli di alto livello sulla libertà.

    
risposta data 25.03.2011 - 19:15
fonte