Domanda

Sto per produrre un prototipo per una startup tecnologica che ho appena aderito e sto cercando di decidere quale lingua usare. Sarà un semplice strumento Web con un database MySQL in background e alcune cose AI in corso tra loro. Ho usato Ruby e PHP in quantità ragionevole in passato, ma mi chiedo se potrei andare meglio con Python o persino Perl. La mia esperienza di programmazione principale è con C / C ++ / Java, ma mi sento come se volessi fare qualcosa che rendesse la mia vita il più semplice possibile poiché sto solo sviluppando un prototipo.

Suppongo che quello che sto cercando sia:

  • velocità di sviluppo
  • librerie AI esistenti (ad es. SVM, reti neurali, classificatori bayesiani)
  • facilità di interazione con un'interfaccia web

Qualcuno ha qualche idea al riguardo?

È stato utile?

Soluzione

Prototipo o no, se stai scricchiolando enormi quantità di numeri, potresti aver bisogno della velocità di un Java o C / C ++ almeno per le parti AI. Non so esattamente cosa stai facendo, ma molte cose di intelligenza artificiale richiedono un calcolo intenso. Python VS C può fare la differenza da 10 minuti a quasi 2 ore o più (o da un giorno a un mese).

Probabilmente la tua scommessa migliore è un approccio ibrido. Java / C ++ o qualcosa per l'intelligenza artificiale (dico Java solo perché ha un sacco di librerie, ho persino un libro su Data Mining che discute di diverse librerie in Java che sono liberamente disponibili ed eseguono alcune delle tecniche). E Python / Ruby / Perl per tutto il resto (come le web part).

Sono titubante nel raccomandare PHP perché non sai mai cosa potresti fare. PHP sembra davvero brillare sul web e per le cose relative al web, ma una volta che hai bisogno di usi non web sembra essere più ingombrante di ogni altra cosa (anche se ho visto i riferimenti a PHP essere usati come un Perl / Python / ecc. Come un normale linguaggio di scripting di alcune persone).

La scelta tra Python / Ruby / Perl è quasi una questione di gusti. Solo che Perl ha CPAN che è al di là di tutto ciò che Python e Ruby hanno in questo momento. Dal momento che sei in fase di avvio, l'ampia selezione di moduli su CPAN che puoi semplicemente dare uno schiaffo può fornirti un valore nel fare le cose prima. Personalmente mi piace Python su Perl (trovo che il sistema a oggetti di Perl sia brutto quando costruisco i tuoi oggetti, e a volte mi ci vuole un po 'per capire come funziona il codice che ho scritto mesi fa). Ma non posso negare il valore di CPAN.

Quindi, in breve, probabilmente hai bisogno di un linguaggio delle prestazioni per alcune cose dell'IA e della facilità e velocità di sviluppo di un linguaggio di scripting per tutto il resto perché una start-up consiste nel realizzare il prodotto il prima possibile e nel battere i tuoi concorrenti sul mercato. Mi piacerebbe raccomandare Python, ma in base a ciò che so delle start-up, è necessario valutare CPAN nel processo decisionale. Il solo fatto di poter mettere insieme un sacco di moduli che fanno quello che vuoi velocemente può essere di grande valore in una start-up.

Dovrei anche aggiungere che Perl e Python (non sono sicuro di Ruby ma penso che a) possano chiamare il codice C piuttosto facilmente. Quindi è possibile utilizzare le librerie C o C ++ creando un insieme di associazioni al linguaggio. Potresti anche provare a scrivere tutto in Perl / Python / Ruby e se è troppo lento riscrivere quella parte in C o C ++ e chiamarla dal linguaggio di scripting. Con l'intero avvio, riscrivere in questo modo può essere molto costoso in termini di completamento. Inoltre, poiché ti senti più a tuo agio in C, C ++ o Java, potrebbe valere la pena andarci fin dall'inizio.

Altri suggerimenti

Tutti e tre i rubini, Python e Perl sono utili per lo sviluppo rapido, i prototipi e le app Web. Immagino dalla tua domanda che la parte più sostanziale di questo progetto sia il pezzo AI. Perl ha un certo numero di librerie relative all'IA su CPAN. Controlla lo spazio dei nomi AI per un campionamento. Ci sono anche moduli in altri spazi dei nomi, quindi assicurati di cercare cose specifiche come " Bayes " o " SVM " ;.

Non so molto sulle opzioni della libreria AI per Python o Ruby. La mia raccomandazione è di prendere un giorno o due e fare delle ricerche serie sulle librerie per ciascuno di Perl, Python e Ruby. Dato che hai già usato Ruby prima, se questo ha le librerie di cui hai bisogno, è un gioco da ragazzi, e Ruby è certamente amico del web.

Per quanto riguarda il lato web, per Python ho sentito molte cose positive su Django . Per Perl, consiglierei di dare un'occhiata a Catalyst .

Noterai che ho ignorato PHP. È qualcosa che cerco di fare il più possibile;)

Scegli una lingua perché è lo strumento giusto per il lavoro, ma non ci hai ancora detto quale sia il lavoro. Non sappiamo di quali tipi di biblioteche ti serviranno, quali altre persone del settore utilizzino per lo stesso lavoro e così via. La maggior parte delle persone sembra raccomandare qualcosa con la totale ignoranza di ciò che è effettivamente necessario fare, il che significa che non hanno davvero idea di come aiutarti.

Come hai già sottolineato:

  • Se sei l'unica persona a svolgere il tuo compito nella lingua X, avrai difficoltà a ottenere aiuto da chiunque altro. Scopri cosa hanno già usato altre persone per svolgere attività simili.

  • Se tutte le librerie valide per il tuo compito sono in un'altra lingua, dovrai reinventare molte ruote. Invece della tua domanda, chiedi quali biblioteche svolgono le parti importanti del tuo compito, quindi cerca quelle. & Quot; AI " è un argomento troppo vasto per raccomandare qualsiasi cosa.

  • Se nessuno al lavoro conosce la lingua che desideri utilizzare, anche se si tratta di un linguaggio di prototipazione rapida, perderai la rapidità in quanto devono imparare la lingua. Imparare una lingua è più che conoscerne la sintassi; sta conoscendo i suoi modi di dire, le sue biblioteche, la documentazione e molto altro. Cosa sanno già le persone al lavoro? Cosa tollereranno?

  • Vuoi davvero semplificarti la vita o renderla più semplice per i tuoi clienti? A volte queste cose sono in contrasto, quindi dovresti considerare se stai davvero offrendo il valore di cui il cliente ha bisogno. I prototipi sembrano spesso trasformarsi nel codice di produzione, quindi una volta iniziato, sei spesso bloccato con esso.

L'unica cosa su cui posso davvero commentare è questa: PHP è fondamentalmente un DSL per il web, mentre gli altri tre (Perl, Ruby, Python) sono linguaggi più generici che non hanno un dominio specifico, sebbene tutti siano sicuramente web-capable.

In termini di secondo punto, penso che PHP sarà probabilmente la scelta peggiore dalla tua lista.

AI? Sicuramente LISP

Penso che Java ti semplificherebbe la vita.

  • velocità di sviluppo: hai detto di conoscerla già.

  • librerie AI esistenti - controlla JOONE

  • facilità di interazione con un'interfaccia web - servlet, JSP, troppi framework Web da elencare.

Java si integra facilmente anche con MySQL usando JDBC.

Sono d'accordo con le altre risposte che raccomandano Java, specialmente perché potresti aver bisogno della sua velocità nel codice AI e per le librerie ecc. che sono disponibili.

Una combinazione di Java (servlet) e JSP probabilmente funzionerebbe bene.

Tuttavia, la ragione per scrivere questa risposta è di raccomandare caldamente:

Vai con quello che sai.

Nuove lingue o quelle che " una specie di " sanno che sono fantastici per cose divertenti e anche per alcuni progetti di sviluppo e prototipazione. Ma se hai bisogno di qualcosa che funzionerà per te nel lungo periodo, usa la lingua migliore per l'attività CHE GIÀ SAPI. In questo caso, penso (dal tuo post) sarebbe Java.

Inoltre, ora è un prototipo, ma posso quasi garantire che, se funziona, diventerà l'inizio predefinito dell'applicazione effettiva. Dubito davvero che avrai il lusso di riscrivere l'applicazione da zero in un'altra lingua, quindi di nuovo - usare ciò che sai ora pagherà i dividendi in seguito quando "crunch tempo" tu e tu devi consegnare.

Saluti,

-R

Penso che Perl sarebbe la strada da percorrere. Dai un'occhiata a Moose per Perl OOP e per le altre librerie che stai cercando, sono sicuro che troverai alcune su CPAN (forse qualcosa come i moduli bayesiani )

Se sei abituato allo stack / ambiente di Unix, sceglierei Python: bello e semplice.

EDIT: puoi implementare la parte di scricchiolio dei numeri in C o C ++ e trasformarla in un modulo da usare nel tuo codice Python. In questo modo, ottieni un codice rapido per la compressione dei numeri e una colla facile da programmare.

Lisp è stato menzionato, ma penso che Scheme (in particolare plt-schema ) sia in alcuni rispetta una buona scelta come Ruby / Python / Perl / PHP. Non ha tante buone librerie come alcune di quelle, il che è un aspetto negativo, ma la maggior parte degli schemi ha un eccellente ffi (interfaccia di funzione esterna), il che rende banale l'integrazione di librerie esterne (codice C). Un altro punto di forza dello schema è il suo profilo prestazionale; Spesso puoi avvicinarti alle prestazioni di tipo C-code su elementi che riducono il numero.

Potresti dare un'occhiata a GLASS: smalltalk, seaside e un database di oggetti di pietre preziose. Web migliore di ruby, no orm e il miglior linguaggio di modellazione.

Vorrei in secondo luogo dare un'occhiata ai graal. È sicuramente facile da configurare e iniziare a lavorare entro un'ora e hai ancora il potere di Java sotto.

Sono anche d'accordo con coloro che affermano di essere sicuro di pensare in fondo alla strada. Sono stato il beneficiario troppe volte di quelli che non l'avevano fatto.

Se fossi in me, scriverei tutto in Python, quindi lo profilerei e scriverei i colli di bottiglia in pyrex . Quando sviluppi complessi algoritmi di tipo AI, è (1) utile sviluppare in un linguaggio di alto livello in modo da poter provare rapidamente molti approcci diversi e (2) utile avere un'implementazione di riferimento in un linguaggio di alto livello per testare l'implementazione C / C ++ contro. Uso python / pyrex in questo modo tutto il tempo e funziona bene per me.

Se stai montando un prototipo veloce e sporco, probabilmente è nel tuo interesse attenersi a qualcosa che già conosci, in particolare se il prototipo deve mostrare alcune altre fantasiose funzionalità; le prestazioni di molti non sono una grande preoccupazione qui.

Prova Python usando Mod_Python. Come lingua, ha molti fantastici moduli di machine learning e di elaborazione del linguaggio naturale ed è davvero facile da leggere, apprendere e usare.

Dato che non è una semplice app CRUD, Java potrebbe essere una buona opzione. Dai un'occhiata a Grails ( http://grails.org/ ) offre gran parte delle impalcature e della generazione di codice che un framework come fa rails, ma offre una perfetta integrazione con qualsiasi altra libreria o framework Java disponibile.

PHP o anche SSI sarebbero la mia scelta per la prototipazione in questo caso. Il mio ragionamento: non devo preoccuparmi di un sistema di template, in quanto entrambi sono sistemi di template. Non ha senso perdere tempo a decidere un sistema di templating per un semplice prototipo. La SSI in particolare è una scelta convincente, hai ancora la tua scelta di lingue per l'elaborazione CGI e, per quanto riguarda la restituzione di dati non atomici, puoi emettere JSON e quindi consentire all'interfaccia utente di eseguire il ciclo sulla struttura dei dati restituita utilizzando Javascript.

Qualcosa che gestisce la memoria per te. Sostengono che è il cambiamento tecnologico a dare il massimo impulso alla produttività. Penso che la sterlina per libbra c # sia incredibilmente difficile da battere.

Riguardo a Python:

Se hai bisogno di prestazioni per cose ad alta intensità di calcolo, guarda Numeric Python http://numpy.scipy.org/ e Pyrex http: //www.cosc.canterbury .ac.nz / greg.ewing / python / Pyrex / . Numeric Python è un'estensione Python che fornisce molte funzioni numeriche di vecchia scuola come codice C veloce - matematica vettoriale (uno strumento essenziale per il lavoro ANN), ecc. Pyrex è uno strumento che ti consente essenzialmente di compilare il codice Python in un eseguibile nativo.

Con Pyrex è necessario fare attenzione all'utilizzo di reflection, poiché non è in grado di compilare completamente il codice che utilizza determinati costrutti riflettenti (in particolare locals () e globals ()). Cito questa limitazione solo perché sia ??l'IA che la codifica esplorativa (implicita dal tuo "prototipo" osservazione) spesso sfruttano la riflessione più di altri tipi di aree di applicazione.

Se sei un utente Mac, dai un'occhiata a WebObjects per fare tutto roba del framework e puoi concentrarti sulla scrittura del codice neurale significativo in Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top