2012-06-05 12 views
20

DisclosureScrivi grande progetto utilizzando il linguaggio di programmazione J

Questa è una domanda "generale", forse senza una risposta specifica, ma è non inteso come una guerra di fiamma. Mi piacerebbe davvero qualche informazione prima di imbarcarmi nel mio progetto.

devo realizzare un particolare progetto che sarebbe davvero beneficiare delle strutture dati e astrazioni disponibile da J. Questo è un grande progetto, destinato a funzionare come componente centrale di un grande (reale morbido tempo) applicazione web. Quindi le prestazioni sono molto importanti.

Ho cercato di trovare alcune informazioni sull'utilizzo di J in grandi progetti commerciali o open source, ma non sono in grado di trovare alcuna informazione su cui basare la mia decisione di andare avanti. Ho:

  • Ricerca Google Tendenze, ma ha ricevuto la seguente risposta: "I tuoi termini - linguaggio di programmazione j - non hanno abbastanza volume di ricerca per mostrare grafici".
  • cercato sul libero (codice), e non hanno trovato un unico progetto che utilizza J
  • Cercato su Sourceforge, e non hanno trovato un unico progetto che utilizza J
  • cercato sul Lambda Ultimate, e solo trovato le following discussion che obliquamente riferimenti APL
  • Cercato generalmente su Google e Bing, e non è riuscito a trovare nessuna esempi di progetti su larga scala in distribuzione che utilizzano J

sarei facendo un errore nell'uso J per il mio progetto? Sembra che abbia tutto - specialmente in termini di strutture dati, astrazione e concisione - che voglio. Certo, potrei passare il tempo a simulare tutte quelle proprietà in F #, C# o C++, ma J le ha già, quindi ...

Qualcuno può dirmi qualche inconveniente dell'uso di J (o di un linguaggio oscuro) per progetti importanti? Non è sufficientemente performante? Non ha librerie? Qualcos'altro che dovrei sapere?

Grazie in anticipo per le vostre risposte.

+6

Probabilmente il principale inconveniente di un linguaggio oscuro in un progetto ** grande ** è che è difficile trovare ** molti ** sviluppatori con esperienza in quella lingua. –

+0

Quali strutture dati e astrazioni chiave presenti in J non sono presenti nei linguaggi funzionali? –

+0

@DonStewart, a dire il vero, mi sarebbe difficile dare esempi specifici di strutture dati, perché so che con un po 'di lavoro tutti possono essere replicati in Haskell o in qualsiasi altra lingua. Ma gli array iperdimensionali mi sono molto utili. E il fatto che io possa manipolarli con pochi verbi corti significa che posso scendere alla "carne" del lavoro, senza preoccuparmi di troppo codice. Naturalmente, tutto ciò è discutibile se, per esempio, J non ha librerie XML pronte (e un paio di altre cose). – Shredderroy

risposta

16

Penso che J sia adatto per l'uso critico su progetti grandi e importanti. Ma penso anche che J sarebbe una scelta molto avventurosa (leggi: ad alto rischio) per un progetto del genere.

Le due aziende di buone dimensioni di cui sono a conoscenza, usano J come tecnologia centrale per un importante sistema software: Cognos e Luen Thai. (Cognos è stato acquistato da IBM). Alcune discussioni su questi sistemi, o almeno su alcune esperienze che li coinvolgono, sono state presentate nello J Chat Forum. Non ci sono molte informazioni lì, comunque.

Ci possono essere altri sistemi software grandi che si basano su J, ma io non li ho individuati (e ho tenuto il mio occhio fuori per anni.)

Dmitri Chubarov è giusto pensare che difficoltà a trovare in modo appropriato sviluppatori esperti potrebbero essere un problema significativo. Inoltre, penso che sia difficile per le persone che non hanno già sviluppato un'abilità significativa in un linguaggio array per stimare quanto impegno ci vorrà per diventare bravi a programmare in J.Personalmente considero particolarmente importante imparare J da un atteggiamento di gioiosa eccitazione, e questo atteggiamento può essere messo a rischio dalle pressioni produttive di un progetto software. (E è possibile imparare J sul lavoro e lo amano, ma il rischio che un programmatore odierà perché essi "devono" imparare non dovrebbe essere ignorato.)

Un'altra probabile difficoltà è sforzi di integrazione. J ha una varietà di librerie ed è stato collegato a vari altri sistemi software, ma il contrasto con ciò che è stato realizzato per le lingue più popolari è drammatico. La mia esperienza ha indicato che le interfacce di J sono abbastanza pronte, che attribuisco ad alcune buone scelte su come lavorare con il mondo esterno. (Ciò include DLL, file mappati in memoria, socket e script di file di testo). Tuttavia, in un progetto di grandi dimensioni si potrebbe innovare molto più spesso del solito quando si effettua la connessione al software di supporto circostante.

Nella mia mente, il più grande fattore sarebbe se avessi un team adeguato per intraprendere il prodotto principale. Questo potrebbe realisticamente essere un team molto più piccolo di quello che la maggior parte dei "grandi" progetti si affidano. Le lingue dell'array sono state associate a squadre significativamente più piccole di quelle tipiche del campo, che considero tra i vantaggi. Se hai deciso di coinvolgere qualsiasi collega di cui avrai bisogno, bene. In caso contrario, non impegnarsi in un progetto del genere fino a quando non lo fai.

Le prossime cose più importanti sarebbero sapere cosa si aspetta di ottenere come i principali vantaggi di J, e modi per verificare che si ottengano tali benefici mentre si passa attraverso il progetto. Non sono la persona giusta per consigliare come fare questo, ma sono sicuro che non si vuole dedicare il capitale di investimento senza tenere traccia del fatto che una scelta ad alto rischio come questa sta portando fuori i frutti attesi.

Paul Graham ha scritto che alcune lingue sono considerate vantaggi segreti. J potrebbe sicuramente essere un tale linguaggio. Solo l'uso di J, tuttavia, non sarebbe sufficiente a garantire che offra il tipo di vantaggi che aveva in mente. Ciò che hai descritto come aspetti accattivanti di J suggerisce che un tale vantaggio potrebbe essere alla portata tua. Se scegli di fare affidamento su di esso, potrebbe essere di vitale importanza che tutti i partecipanti principali abbiano una comprensione forte e sobria del perché questa lingua sia stata scelta per quel lavoro.

+0

Grazie per la risposta dettagliata. E punti bonus per il collegamento alle librerie XML. E sì, "divertimento" è il mio punto di partenza. Diverse parti del progetto sono ancora in fase di pianificazione, quindi ho almeno quattro o cinque settimane prima di iniziare a scrivere il codice per il progetto. – Shredderroy

11

Rispondo a questo nonostante la risposta già accettata.

  • Portabilità: io sono responsabile del mantenimento di una grande base di codice costruita con J, la maggior parte dei quali è un-portatile (o realmente pericoloso per farlo) per J6, così mi sono bloccato in J5. J non è pensato per essere molto compatibile con le versioni precedenti. In effetti, la maggior parte delle versioni introduce cambiamenti improvvisi. La versione 7 utilizza Java per il suo frontend, quindi le tue interfacce e tutto ciò che utilizza il driver Windows (wd) non funzionerà. La versione 8 promette di avere il QT per il suo frontend, quindi ancora una volta la vostra nuova interfaccia Java non sarà probabilmente portata. Giusto avvertimento.

  • IDE: Per me, un grande progetto dovrebbe andare di pari passo con un IDE affidabile. J's è un editor di testo.

  • Librerie: ci sono molte librerie J, ma essendo J così noto, esistono diverse lingue che hanno librerie e framework molto più ricchi.

  • Struttura del codice: questo dipende interamente da te, e in realtà non un punto contro J. J può essere scritto in modo chiaro o come offuscato come qualsiasi altra lingua. Si applicano pratiche di programmazione standard e si dovrebbe sempre documentare e descrivere il più esplicitamente possibile. Questo vale doppio in J se si scopre che un certo insieme di "parolacce censurate" funziona meglio di un altro.

  • Infine, se è necessario solo J per alcune delle sue funzionalità, è possibile utilizzare J come componente. Sfortunatamente l'integrazione con .NET è stata lasciata andare in J7 (e non era nemmeno compatibile al 100% in J6, in particolare nel suo stile a 64 bit), ma ci sono modi per farlo comunicare con il mondo esterno. KDB per esempio si basa sul fratello estraniato di K, J, e fondamentalmente avvolge file mappati per un accesso veloce, una struttura che J ha anch'essa.

+2

Grazie mille per la risposta. Sono molto vicino al punto in cui devo iniziare a scrivere codice. Finora, ho fatto più o meno test di unità parallele in J e F #. In questo modo, se una delle lingue dovesse risultare troppo fastidiosa per completare il progetto, posso sempre ricorrere all'altra. (Sto amando entrambi: l'espressività di F # e la "nerdiness" di J hanno entrambi il loro fascino.) – Shredderroy

+2

Questo è * veramente * un peccato che l'integrazione di .NET sia stata lasciata andare. Ho sempre pensato che J sarebbe stato il migliore come linguaggio incorporato, vale a dire, dovrebbe essere distribuito come libreria con un front-end CLI opzionale. Quindi, potresti usare J dove J è il migliore e una lingua host dove è meglio. –

1

Per me, J è un linguaggio di scripting buona (nel ruolo di supporto), in particolare per i calcoli relativi matematici. È molto autonomo per essere distribuito tramite copia di cartelle (specialmente l'ambiente Windows), che è vantaggioso rispetto a ruby ​​o python.

Ad esempio, in una webapp nodejs, è possibile utilizzare un processo figlio per chiamare jconsole.exe e passare i parametri tramite l'interfaccia a riga di comando.

L'intero programma può essere distribuito ed eseguito sulla piattaforma Windows Azure, nonché su una macchina locale senza alcuna installazione aggiuntiva (ad esempio, node.exe e jconsole.exe sono inclusi nella stessa cartella).

2

qualcuno può dirmi alcuni svantaggi dell'utilizzo di J (o qualsiasi altro linguaggio oscuro) per i progetti importanti?

Il più grande svantaggio di utilizzare linguaggi più oscuri per la missione progetti critici per qualcuno nel ruolo di un manager o responsabile del progetto sono tutti di persone e competenze.

  1. Come individuare e valutare le competenze e le attitudini dei potenziali membri del team nella lingua?
  2. Se qualcuno lascia quanto ci vorrà per colmare le lacune nella conoscenza?
  3. Quando abbiamo bisogno di ulteriore aiuto possiamo ridimensionare il team di sviluppo abbastanza velocemente?

Per un progetto importante voglio persone che hanno già molta esperienza nella lingua e che non lo stanno imparando appena come sono.

Problemi correlati