Stai cercando un nuovo linguaggio di programmazione per lo sviluppo web? [chiuso]


14

Mi chiedo se ci siano risorse meno distorte che offrono panoramiche valide e specifiche dei linguaggi di programmazione e dei loro obiettivi previsti. Vorrei imparare una nuova lingua, ma visitare i siti di ogni lingua non funziona. Ognuno parla di quanto sia bello senza menzionare le sue debolezze o obiettivi specifici .

Ruby è un linguaggio di programmazione dinamico e open source incentrato su semplicità e produttività.

Python è un linguaggio di programmazione che ti consente di lavorare più rapidamente e di integrare i tuoi sistemi in modo più efficace.

Essendo stato uno sviluppatore di PHP per anni, Vic Cherubini riassume bene la mia situazione:

Conoscevo bene PHP, avevo il mio framework e potevo lavorare rapidamente per mettere in funzione qualcosa.

Ho programmato così durante la rivoluzione MVC. Ho ottenuto lavori sempre migliori (leggi: pagamento migliore, titolo migliore) come sviluppatore di PHP, ma nel frattempo mi sono reso conto che il codice che ho scritto sul mio tempo era fantastico e che il codice con cui lavoravo sul lavoro era orribile. Come, peggio che orribile. Atroce. Livello di OS Commerce cattivo. Avere progetti secondari mi ha reso sano di mente, perché il codice con cui ho lavorato sul lavoro mi ha reso infelice.

Questo è il motivo per cui mi sto ritirando da PHP per i miei progetti collaterali e nuove iniziative di programmazione. Ho trascorso con PHP. Esausto, se vuoi. Ho raggiunto un livello in cui penso di essere al top con esso come lingua e se non passerò presto a una nuova lingua, avrò finito completamente con la programmazione e non lo voglio.

Le lingue che ho esaminato includono JavaScript (per node.js), Ruby, Python ed Erlang. Ho anche pensato a Scala o C ++.

Il problema è capire quali sono costruiti per gestire al meglio le mie esigenze.

Quindi dove posso andare per saltare l'hype e ottenere informazioni reali sulla maturità di una piattaforma, le dimensioni della comunità e i punti di forza e di debolezza di quella lingua. Se li conosco, scegliere una lingua per continuare il mio sviluppo web dovrebbe essere facile.

Aggiornare

Semplicemente non voglio fare 4 mesi lungo la strada con un po 'di lingua e trovarlo fa schifo perché ogni thread ha 4 MB di sovraccarico, o il numero massimo di connessioni simultanee è 999, non esiste un pacchetto per fare la funzione "X", o il supporto è essere gradualmente eliminato per un nuovo ramo linguistico.


14
È difficile dire quale gestirà meglio le tue esigenze se non le specifichi.
Vartec,

3
Questo è il motivo per cui non ho definito i miei bisogni - I miei bisogni personali sono fuori tema . Voglio sapere dove posso cercare di abbinare le mie esigenze a un determinato linguaggio di programmazione. Perché i miei bisogni possono cambiare e dovrò tornare di nuovo.
Xeoncross,

Vale la pena sottolineare che c'è anche di più in un programma della sua velocità di esecuzione . La velocità di sviluppo e il modo in cui devi costruire la tua applicazione (grazie alla lingua) svolgono un ruolo importante.
Xeoncross,

4
si tratta meno delle lingue e più della maturità e della ricchezza delle strutture disponibili per loro.

1
Ti suggerisco di dare un'occhiata a questo eccellente post di Alex Martelli.
phant0m

Risposte:


3

Non avrei pubblicato questo come risposta, ma Xeoncross mi ha chiesto di farlo, quindi eccoci qui:

(Sidenote: se qualcuno potesse risolvere il problema del markdown nel piccolo esempio di codice, lo apprezzerei.)

Postato da Alex Martelli su comp.lang.python : Cosa c'è di meglio in Ruby di Python? il 18 agosto 2003, alle 17:50

Erik Max Francis ha scritto:

"Brandon J. Van Every" ha scritto:

Cosa c'è di meglio di Ruby di Python? Sono sicuro che c'è qualcosa. Che cos'è? Non avrebbe molto più senso chiedere alla gente di Ruby questo, piuttosto che alla gente di Python?

Potrebbe, o no, a seconda dei propri scopi - ad esempio, se i propri scopi includono uno "studio sociologico" della comunità Python, allora porre domande a quella comunità rischia di rivelarsi più rivelatore di informazioni al riguardo, piuttosto che metterle altrove :-). Personalmente, ho colto volentieri l'occasione di seguire il tutorial di un giorno sul Ruby di Dave Thomas nell'ultimo OSCON. Sotto una sottile patina di differenze di sintassi, trovo Ruby e Python sorprendentemente simili - se stavo calcolando l'albero di spanning minimo tra quasi tutte le lingue, sono abbastanza sicuro che Python e Ruby sarebbero le prime due foglie in cui fondersi un nodo intermedio :-).

Certo, mi stanco, in Ruby, di digitare la "fine" sciocca alla fine di ogni blocco (piuttosto che solo unindenting) - ma poi riesco a evitare di digitare la stessa stupidaggine : che Python richiede all'inizio di ogni blocco, quindi è quasi un lavaggio :-). Altre differenze di sintassi come @fooversus self.foo, o il significato più elevato del caso in Ruby vs Python, sono davvero altrettanto irrilevanti per me.

Altri senza dubbio basano la loro scelta di linguaggi di programmazione proprio su tali questioni e generano i dibattiti più importanti - ma per me questo è solo un esempio di una delle leggi del Parkinson in azione (l'ammontare del dibattito su una questione è inversamente proporzionale alla questione importanza reale). Una differenza di sintassi che trovo importante, e a favore di Python - ma altre persone penseranno senza dubbio al contrario - è "come si chiama una funzione che non accetta parametri". In Python (come in C), per chiamare una funzione applichi sempre l '"operatore di chiamata" - parentesi finali subito dopo l'oggetto che stai chiamando (all'interno di quelle parentesi finali vanno gli argomenti che stai passando nella chiamata - se non passi argomenti, quindi le parentesi sono vuote). Questo lascia la semplice menzione di qualsiasi oggetto, senza operatore coinvolto, poiché significa solo un riferimento all'oggetto - in qualsiasi contesto, senza casi speciali, eccezioni, regole ad hoc e simili. In Ruby (come in Pascal), per chiamare una funzione CON argomenti si passa l'args (normalmente tra parentesi, anche se non è invariabilmente il caso) - MA se la funzione non prende argomenti, semplicemente menzionando implicitamente la funzione la chiama. Questo può soddisfare le aspettative di molte persone (almeno, senza dubbio, quelle la cui unica precedente esperienza di programmazione è stata con Pascal, o altri linguaggi con "chiamate implcit" simili, come Visual Basic) - ma per me significa che il la semplice menzione di un oggetto può ORE significare un riferimento all'oggetto, O una chiamata all'oggetto, a seconda del tipo di oggetto - e nei casi in cui non riesco a ottenere un riferimento all'oggetto semplicemente citandolo, dovrò usare esplicito "dammi un riferimento a questo, NON chiamarlo!" operatori che non sono necessari altrimenti. Sento che ciò influisce sulla "prima classe" di funzioni (o metodi, o altri oggetti richiamabili) e sulla possibilità di scambiare oggetti senza problemi. Pertanto, per me, questa specifica differenza di sintassi è un grave segno nero contro Ruby - ma capisco perché gli altri farebbero diversamente, anche se difficilmente potrei essere in disaccordo con più veemente :-). Sotto la sintassi, entriamo in alcune importanti differenze nella semantica elementare - ad esempio, le stringhe in Ruby sono oggetti mutabili (come in C ++), mentre in Python non sono mutabili (come in Java, o credo C #). Ancora una volta, le persone che giudicano principalmente per ciò che hanno già familiarità possono pensare che questo sia un vantaggio per Ruby (a meno che non abbiano familiarità con Java o C #, ovviamente :-). Io penso che le stringhe immutabili siano un'ottima idea (e non mi sorprende che Java, indipendentemente da me, abbia reinventato quell'idea che era già in Python), anche se non mi dispiacerebbe avere un tipo di "buffer di stringa mutabile" (e idealmente uno con una migliore facilità d'uso rispetto ai "buffer di stringhe" di Java); e non do questo giudizio a causa della familiarità - prima di studiare Java, a parte i linguaggi di programmazione funzionale dove le persone che giudicano principalmente per ciò che hanno già familiarità possono pensare che questo sia un vantaggio per Ruby (a meno che non abbiano familiarità con Java o C #, ovviamente :-). Io penso che le stringhe immutabili siano un'ottima idea (e non mi sorprende che Java, indipendentemente da me, abbia reinventato quell'idea che era già in Python), anche se non mi dispiacerebbe avere un tipo di "buffer di stringa mutabile" (e idealmente uno con una migliore facilità d'uso rispetto ai "buffer di stringhe" di Java); e non do questo giudizio a causa della familiarità - prima di studiare Java, a parte i linguaggi di programmazione funzionale dove le persone che giudicano principalmente per ciò che hanno già familiarità possono pensare che questo sia un vantaggio per Ruby (a meno che non abbiano familiarità con Java o C #, ovviamente :-). Io penso che le stringhe immutabili siano un'ottima idea (e non mi sorprende che Java, indipendentemente da me, abbia reinventato quell'idea che era già in Python), anche se non mi dispiacerebbe avere un tipo di "buffer di stringa mutabile" (e idealmente uno con una migliore facilità d'uso rispetto ai "buffer di stringhe" di Java); e non do questo giudizio a causa della familiarità - prima di studiare Java, a parte i linguaggi di programmazione funzionale dove Penso che le stringhe immutabili siano un'ottima idea (e non mi sorprende che Java, indipendentemente da me, abbia reinventato quell'idea che era già in Python), anche se non mi dispiacerebbe avere un tipo di "buffer di stringa mutabile" (e idealmente uno con una migliore facilità d'uso rispetto ai propri "buffer di stringhe" di Java); e non do questo giudizio a causa della familiarità - prima di studiare Java, a parte i linguaggi di programmazione funzionale dove Penso che le stringhe immutabili siano un'ottima idea (e non mi sorprende che Java, indipendentemente da me, abbia reinventato quell'idea che era già in Python), anche se non mi dispiacerebbe avere un tipo di "buffer di stringa mutabile" (e idealmente uno con una migliore facilità d'uso rispetto ai propri "buffer di stringhe" di Java); e non do questo giudizio a causa della familiarità - prima di studiare Java, a parte i linguaggi di programmazione funzionale dovetutti i dati sono immutabili, tutte le lingue che conoscevo avevano stringhe mutabili - eppure quando ho visto per la prima volta l'idea di stringa immutabile in Java (che ho imparato molto prima di apprendere Python), mi è sembrato subito eccellente, un'ottima soluzione per la semantica di riferimento di un linguaggio di programmazione di livello superiore (al contrario della semantica di valore che si adatta meglio ai linguaggi più vicini alla macchina e più lontani dalle applicazioni, come C) con stringhe come di prima classe, integrate (e piuttosto cruciale) tipo di dati.

Ruby presenta alcuni vantaggi nella semantica elementare, ad esempio la rimozione delle "liste contro le tuple" di Python in modo estremamente sottile. Ma soprattutto il punteggio (come lo conservo, con semplicità un grande vantaggio e sottili, intelligenti distinzioni un notevole meno) è contro Ruby (ad esempio, con intervalli sia chiusi che semiaperti, con le notazioni a..b e a .. .b [qualcuno vuole affermare che è ovvio quale è quale? -)], è sciocco - IMHO, ovviamente!). Ancora una volta, le persone che considerano di avere un sacco di cose simili ma sottilmente diverse nel cuore di una lingua un PLUS, piuttosto che un MINUS, contano ovviamente questi "viceversa" da come li conto :-).

Non farti ingannare da questi confronti nel pensare che le due lingue siano moltodiverso, intendiamoci. Non lo sono. Ma se mi viene chiesto di confrontare i "capelli d'angelo" con gli "spaghettini", dopo aver sottolineato che questi due tipi di pasta sono praticamente indistinguibili per chiunque e intercambiabili in qualsiasi piatto che potresti voler preparare, avrei inevitabilmente passare all'esame microscopico di come le lunghezze e i diametri differiscano impercettibilmente, come le estremità dei fili siano rastremate in un caso e non nell'altro, e così via - per cercare di spiegare perché io, personalmente, preferirei avere capelli d 'angelo come la pasta in qualsiasi tipo di brodo, ma preferirei gli spaghettini come la pastasciutta per accompagnare salse adatte a forme di pasta così lunghe e sottili (olio d'oliva, aglio tritato, peperoni rossi tritati e acciughe macinate finemente, per esempio - ma se hai affettato aglio e peperoni invece di tritarli, allora dovresti scegliere il corpo più sano degli spaghetti piuttosto che la più sottile evanescenza degli spaghettini, e ti consigliamo di rinunciare all'achoview e aggiungere invece un po 'di basilico fresco di primavera [ o anche - sono un eretico ...! - foglie di menta leggera ...] - all'ultimo momento prima di servire il piatto). Ops, scusa, dimostra che sto viaggiando all'estero e non ho mangiato pasta per un po ', immagino. Ma l'analogia è ancora abbastanza buona! -) e sarebbe bene consigliato di rinunciare alla vista panoramica e aggiungere invece un po 'di basilico fresco di primavera [o anche - sono un eretico ...! - foglie di menta leggera ...] - all'ultimo momento prima di servire il piatto). Ops, scusa, dimostra che sto viaggiando all'estero e non ho mangiato pasta per un po ', immagino. Ma l'analogia è ancora abbastanza buona! -) e sarebbe bene consigliato di rinunciare alla vista panoramica e aggiungere invece un po 'di basilico fresco di primavera [o anche - sono un eretico ...! - foglie di menta leggera ...] - all'ultimo momento prima di servire il piatto). Ops, scusa, dimostra che sto viaggiando all'estero e non ho mangiato pasta per un po ', immagino. Ma l'analogia è ancora abbastanza buona! -)

Quindi, tornando a Python e Ruby, arriviamo ai due biggies (in termini di linguaggio proprio - lasciando le biblioteche e altri importanti accessori come strumenti e ambienti, come incorporare / estendere ogni lingua, ecc., Ecc. Da per ora - non si applicherebbero comunque a tutte le IMPLEMENTAZIONI di ogni lingua, ad esempio, Jython vs Classic Python essendo due implementazioni del linguaggio Python!):

  1. Iteratori e blocchi di codice di Ruby vs iteratori e generatori di Python;

  2. La "dinamica" TOTALE e sfrenata di Ruby, inclusa la possibilità di "riaprire" qualsiasi classe esistente, comprese quelle incorporate, e di modificarne il comportamento in fase di esecuzione - rispetto alla vasta ma limitata dinamicità di Python     , che non cambia mai il comportamento dell'esistente classi integrate e loro istanze.

Personalmente, considero 1 un lavaggio (le differenze sono così profonde che potrei facilmente vedere le persone odiare l'uno o l'altro approccio e riverire l'altro, ma sulla MIA scala personale i vantaggi e gli svantaggi sono quasi pari); e [2] un problema cruciale - uno che rende Ruby molto più adatto per "armeggiare", MA Python è anche più adatto per l'uso in grandi applicazioni di produzione. È divertente, in un certo senso, perché entrambe le lingue sono così MOLTO più dinamiche della maggior parte delle altre, che alla fine la differenza chiave tra loro dal mio POV dovrebbe dipendere da questo - che Ruby "va a undici" a questo proposito (il riferimento ecco "Spinal Tap", ovviamente). In Ruby,POSSO FARLO ! Cioè, posso modificare dinamicamente la classe di stringhe incorporata in modo che

a = "Hello World" 
b = "ciao mondo" 
se a == b 
    stampa "uguale! \ n" 
altro 
    stampa "diverso! \ n" 
fine
 

STAMPA "uguale". In Python, NON c'è modo di farlo. Ai fini della metaprogrammazione, dell'implementazione di quadri sperimentali e simili, questa straordinaria abilità dinamica di Ruby è estremamente attraente. MA - se stiamo parlando di applicazioni di grandi dimensioni, sviluppate da molte persone e gestite da ancora di più, inclusi tutti i tipi di librerie da diverse fonti, e che devono andare in produzione nei siti dei clienti ... beh, non VOGLIO un linguaggio che è abbastanza dinamico, grazie mille. Detesto l'idea stessa di una biblioteca che rompe inconsapevolmente altre non correlate che si basano sul fatto che quelle stringhe sono diverse - è il tipo di "canale" profondo e profondamente nascosto, tra pezzi di codice che GUARDANO separati e DOVREBBERO ESSERE separati, che compongono la morte in programmazione su larga scala. Lasciando che qualsiasi modulo influisca sul comportamento di qualsiasi altro "di nascosto",

Se dovessi usare Ruby per un'applicazione così grande, proverei a fare affidamento su restrizioni in stile codifica, molti test (da ripetere ogni volta che cambia QUALCOSA - anche ciò che dovrebbe essere totalmente indipendente ...), e simili, per vietare l'uso di questa funzione linguistica. Ma NON avere la funzionalità in primo luogo è ancora meglio, secondo me - proprio come Python stesso sarebbe un linguaggio ancora migliore per la programmazione dell'applicazione se un certo numero di built-in potesse essere "inchiodato", quindi SAPEVO che , ad esempio, len("ciao")è 4 (piuttosto che doversi preoccupare in modo subliminale se qualcuno ha cambiato il legame di nome lennel __builtins__ modulo ...). Spero che alla fine Python "inchioda" i suoi built-in.

Ma il problema è minore, dal momento che il rebinding degli built-in è piuttosto deprecato e una pratica rara in Python. In Ruby, mi sembra importante - proprio come le macro strutture troppo potenti di altre lingue (come, diciamo, Dylan) presentano rischi simili secondo me (spero che Python non ottenga mai un sistema macro così potente, no importa il fascino di "lasciare che le persone definiscano le loro piccole lingue specifiche del dominio incorporate nella lingua stessa" - IMHO, comprometterebbe la meravigliosa utilità di Python per la programmazione delle applicazioni, presentando un "fastidio attraente" al potenziale armeggiatore che si nasconde nel cuore di ogni programmatore ...).

alex


Ho assegnato questo come risposta perché è una panoramica eccellente e relativamente non distorta di Ruby e Python nel suo insieme. Spiegare come funzionano le lingue e non funzionano .
Xeoncross,

27

In bocca al lupo

Nessuna delle descrizioni di esempio fornite è obiettiva o verificabile. Sono tutti hype e opinioni.

... semplicità e produttività ... più rapidamente ... in modo più efficace.

Provalo

Prendi un piccolo progetto di esempio del tipo che probabilmente stai facendo e provalo con tutte le lingue che ti interessano. Quindi pubblica la tua recensione obiettiva e lo sapremo tutti.


2
Non è una cattiva idea, tuttavia non funzionerebbe nel mondo reale. Senza perdere tempo a comprendere appieno ogni lingua, non potrei mai prevedere il problema del modello di progettazione completo e i vantaggi che ogni sistema potrebbe offrire. Sono sicuro che occorrerebbero mesi di lavoro in ogni lingua per ottenere una comprensione di alto livello della lingua stessa. Preferirei sentire dagli esperti di pneumatici piuttosto che passare mesi a progettare ogni ruota per capire perché l'hanno costruita in quel modo. Tuttavia, dopo che avrò dei buoni candidati, lo farò sicuramente.
Xeoncross,

1
@Xeoncross: con ogni lingua che provi, aumenterai la tua esperienza e sarai in grado di sfruttarla in altre lingue. 4 mesi per immergersi in una lingua non sono mai persi; e se la lingua è davvero schifosa, hai bisogno di meno di due settimane per scoprirlo.
tdammers,

È vero, per costruire qualcosa ci vorrebbero solo un paio di settimane e trarrebbero beneficio dall'esperienza poiché le lingue generalmente seguono altre lingue.
Xeoncross,

3
Sì, probabilmente dovresti provare tutte queste lingue per trovare una buona soluzione. Ma il problema è che quando usi una nuova lingua non la usi come dovresti inizialmente. Finisci per fare la stessa dannata cosa che stavi facendo con la lingua che già sai usare solo con una sintassi diversa. Ci vuole un po 'di tempo per capire i punti più fini di ogni lingua e quali sono i vantaggi.
radix07,

3
Sarei sorpreso se ci fosse qualche differenza significativa tra le lingue moderne per scopi generali. Lì, l'ho detto ad alta voce. E in corsivo . Lascia che le fiamme inizino!
Steven A. Lowe,

8

Penso che parte del problema sia che chiunque sappia abbastanza per commentare in modo significativo una o più lingue avrà dei pregiudizi. In quasi 4 decenni di programmazione ho lavorato in più lingue di quante ne possa contare. Posso darti opinioni (alcune datate) su alcune di quelle lingue, ma nessuna di queste opinioni sarà imparziale.

Prendo l'approccio di usare la lingua giusta per il lavoro. In particolare chiedi dello sviluppo web , ma questa è ancora una categoria piuttosto ampia - un po 'come dire che sei interessato alla fotografia. Micro? Astro? ecc. Anche se sono d'accordo sul fatto che PHP non è una lingua emotivamente appagante in cui lavorare, per molti clienti è la lingua giusta in base a un numero qualsiasi di fattori, non ultimo il quale è la capacità a lungo termine di trovare programmatori per riparare il sito dopo aver lasciato e / o essere investito da un autobus.

Quindi forse dovresti guardare i tipi di clienti che sono interessati a progetti che si prestano a qualcosa di diverso, e quindi lavorare per renderti interessante per loro.


Bene, dal momento che sono così bravo in PHP - continuerò a lavorarci perché posso ancora guadagnarmi da vivere. Stavo per lo più pensando a un nuovo linguaggio per i miei propri progetti. Qualcosa che aiuti ad aggiungere un po 'di sapore alla mia vita. Lavoro in quasi tutti gli aspetti dello sviluppo web a cui puoi pensare, PNL, analisi del testo, CMS, API, archiviazione, ecc. Inoltre, qualcuno con esperienza in molte lingue ha un pregiudizio molto inferiore rispetto alle persone con un solo processo di progettazione.
Xeoncross,

Ah. Quindi darò la mia risposta standard alle domande di tipo "miglior lingua": Python. Ignorando "spazi bianchi significativi" (cosa che è possibile fare), è vicino a un linguaggio perfetto per me. Inoltre, esiste un numero incredibile di librerie di altissima qualità disponibili con le API Python. Ad esempio, NLTK, Natural Language Toolkit ( nltk.org ).
Peter Rowell,

Ah, ma cos'è Python che lo rende migliore? La maggior parte delle lingue condividono tutti gli stessi toolkit - è il design del linguaggio che introduce elementi come threading, concorrenza, requisiti VM, compilazione / interpretazione, persistenza, ecc.
Xeoncross

Python è semplicemente divertente da programmare. Questo è ciò che lo rende "migliore" per me. È abbastanza semplice che non hai bisogno di un grande IDE di clacson solo per codificarlo. Ma ha anche molte caratteristiche interessanti come oggetti, capacità di programmazione funzionale, molte librerie / framework / strumenti esistenti e una comunità fiorente ed entusiasta con molta documentazione aperta / gratuita per iniziare.
John Gaines Jr.,

2
Vero. La spiegazione più semplice è che Python funziona un po 'come fa il mio cervello e questo mi rende solo più produttivo; Non mi trovo quasi mai a chiedere: "Ora come potrei farlo in Python?" Sebbene il GIL (Global Interpreter Lock) sia un po 'un problema, non tende a influenzarmi così tanto perché mi occupo più spesso di situazioni multiprocesso (in particolare pipeline di elaborazione NL a più livelli) che multitasking . Mi piace anche la varietà di opzioni di interfaccia per l'accesso a nuove librerie esterne: ctypes, Boost, ecc.
Peter Rowell,

7

Pitone

Lo scopo più universale e generale di tutti, ma anche nel caso della programmazione web offre una più ampia scelta di prodotti. Avere un'interfaccia WSGI standardizzata garantisce una grande interoperabilità tra framework e server. Alcuni dei notevoli prodotti Web Python:

  • Django: struttura di alto livello, a tutti gli effetti, matura con ORM avanzato, sistema di templating, gestione dei moduli, ecc.
  • Twisted - framework per la programmazione di rete (asincrona) basata su eventi, può essere utilizzato per chat, server socket, servizi Web, il nome.
  • Tornado - anche framework basato sugli eventi, ma questo è progettato per servizi web asincroni.

Rubino

Ruby è anche un linguaggio abbastanza universale. Ma di gran lunga il prodotto più notevole è Ruby on Rails. Il suo design è stato fonte di ispirazione per molti (incluso Django menzionato sopra).

JavaScript

Attualmente l'unica scelta lato server per JS è node.js. È molto simile a Tornado e Twisted (da cui è stato ispirato). Tuttavia, manca ancora di un framework completo simile a Django o RoR costruito su di esso.

Scala

Essendo un linguaggio funzionale è ottimo per il calcolo in parallelo massivo, per quanto riguarda la programmazione web per scopi generali c'è Lift - framework web ispirato a RoR, usato ad esempio da FourSquare.


Vale la pena sottolineare che cose come risposte non bloccanti, utilizzo della memoria, concorrenza e altri fattori sono enormi sul mercato per un nuovo linguaggio che alimenterà un'applicazione web.
Xeoncross,

+1 per Django. Mi è scoppiato in mente quando l'ho imparato ... quello, o ero in uno stupore stupito perché l'ho imparato e Python contemporaneamente. Ad ogni modo, una grande tecnologia mi piacerebbe rivisitarla come il mio "tempo libero" sempre sfuggente.
Zourtney,

1
"... manca ancora di un framework completo" Dai
T. Stone,

@T: sì, ho visto Express. Uno dei punti di forza di Django e RoR è ORM. Express non sembra averlo.
Vartec,

3

Nel mio ultimo progetto Web ho iniziato con PHP perché l'avevo già utilizzato per progetti Web prima (avvio rapido), ma avevo molti problemi con la lingua, ad esempio il cattivo supporto UTF-8 e la digitazione dinamica. Ho anche un po 'di background Java e mi piace molto la digitazione statica e buoni strumenti di refactoring. Anche Java ha buone prestazioni rispetto a PHP. Ma mi piace anche l'espressività della programmazione funzionale.

Scala and Play Framework

Con l'esperienza di cui sopra, mi piace molto il linguaggio di programmazione Scala, è tipicamente statico, supporta sia la programmazione orientata agli oggetti che funzionale e ha buone prestazioni rispetto ad altri linguaggi utilizzati per lo sviluppo web. Ma non mi piacevano i framework web per Java e servlet e ho trovato Play Framework che supporta sia Scala che Java e ha un ciclo di sviluppo molto veloce: salva il file e aggiorna la tua pagina web. Sono stato molto soddisfatto di Scala & Play Framework lo scorso mese. Ma il supporto Scala in Play Framework non è ancora molto maturo, né il supporto degli strumenti.

In breve, consiglio Scala come linguaggio di programmazione e Play Framework come web framework.


Il gioco sembra bello, ma non ho avuto la possibilità di testarlo davvero ( davvero ). Provenendo da un background php simile, ho scoperto che Lift era abbastanza facile da capire. Sembra anche essere un po 'più maturo di Play, ma sono troppo nuovo per Scala, per essere conclusivo.
yannis,

3

In realtà, stai probabilmente esaminando tre tipi di risorse:

  • Quello che spiega le basi della lingua e perché vuoi usarla,
  • Quello che confronta diverse lingue.
  • Quello che critica alcuni aspetti di una lingua.

Entrambe queste risorse sarebbero di parte.

  • Quando spieghi qualcosa su una lingua, stai provando la maggior parte del tempo a convincere il lettore a usarla. Quindi diresti raramente che la lingua fa schifo.
  • Quando confronti diverse lingue, hai sempre una preferenza personale per una di esse.
  • Quando critichi qualcosa, beh, è ​​quasi impossibile essere neutrali.

Potresti avere la possibilità di trovare un confronto neutrale, ma è molto difficile scriverne uno. Personalmente, non sarei mai in grado di scrivere un confronto tra un linguaggio reale e PHP senza criticare PHP continuamente. E sono abbastanza sicuro di non essere il solo a non essere abbastanza neutrale.


Se vuoi avere una panoramica di lingue diverse, allora devi impararle tu stesso e leggere molto . Con l'apprendimento intendo conoscere le basi della lingua, ma essere in grado di avere la tua opinione . Non è perché hai letto un manuale di Ruby che sei in grado di spiegare cosa è buono e cosa è male in questa lingua.

Ciò significa che devi trascorrere del tempo (mesi o addirittura anni) a praticare. Oppure puoi leggere molto. Ma prova a leggere cose contraddittorie . Se qualcuno scrive che odia PHP e PHP è una delle lingue peggiori di sempre, soprattutto rispetto a linguaggi reali come Ruby, C # o Java, prova anche a trovare una persona che dice che PHP è meraviglioso, ed è molto più facile da usare di C #, molto più veloce di Java e molto ... (non so davvero cosa) di Ruby.

Ricorda una cosa: se conosci già bene una lingua, all'inizio ne sarai molto critico quando ne impari un'altra , credendo che la lingua che già conosci sia migliore e molto più facile da usare. È come gli utenti Linux che odiano Windows e gli utenti Windows che odiano Linux: in effetti, nessuno dei due sistemi operativi è migliore; è solo che un utente Linux non sa come usare Windows e viceversa. È solo dopo aver acquisito sufficiente esperienza in entrambi che sarai in grado di decidere correttamente quale è meglio per te.


Ultima cosa, spesso dimenticata: è anche molto importante essere in grado di valutare i "dintorni" di una lingua:

  • Quanto è buono il framework (o i framework più utilizzati)?
  • È facile trovare un servizio di hosting? Apprezzi l'IDE?
  • Ci sono molte librerie di terze parti ben scritte?
  • La community è composta da sviluppatori altamente professionali, o principalmente da principianti che non sanno nulla né della programmazione in generale, né del linguaggio stesso?
  • La documentazione è abbastanza dettagliata e facile da cercare e capire?
  • La lingua e i framework vengono aggiornati frequentemente?
  • eccetera.

Sono totalmente d'accordo. Sono queste le domande a cui cerco una risposta. Hai detto di leggere molto - ed è quello che sto cercando di fare - ho bisogno di molte risorse per leggere le lingue che voglio esaminare. Anche se non è possibile avere una recensione parziale, alcuni sono molto più equilibrati e questo è tutto ciò che desideravo.
Xeoncross,

2

Bene, poiché uno dei tuoi criteri sembra essere "è divertente lavorare con", penso che vorrai trovare informazioni distorte. Se l'autore di qualcosa è appassionato del loro linguaggio preferito, ci sono buone possibilità che diano una valutazione parziale.

Forse dovresti avvicinarti dall'altra direzione. Dal momento che sembra che tu stia parlando di spostarti da una carriera piuttosto che di un hobby, forse dovresti esaminare alcuni annunci di lavoro, trovare alcune tecnologie / lingue interessanti e esaminare quelle.

Per quanto riguarda le lingue con obiettivi specifici, molte lingue non li hanno. La maggior parte delle lingue che hai elencato sono piuttosto generiche. Ad esempio, il linguaggio Ruby è un linguaggio piuttosto generico adatto a molte attività. Una volta aggiunto un framework, come Rails , questo ha un obiettivo piuttosto specifico.


1

Questo non è esattamente quello che mi stavi chiedendo, ma se stavo cercando qualcosa per farmi uscire da una routine professionale di sviluppo web, pur sfruttando quell'esperienza e i contatti, avrei iniziato a scrivere app per Android e iPhone. Essere in grado di vendere un'app che integra il sito Web di un cliente potrebbe davvero farti spiccare lo sviluppo di un Internet a cui si accede sempre più tramite dispositivi mobili.


Non è proprio una cattiva idea. Stavo anche pensando di dedicare più tempo a Illustrator e Photoshop lavorando sui miei progetti. Tuttavia, vorrei saperne di più sulle opzioni dell'applicazione web là fuori.
Xeoncross,

0

Hai davvero raggiunto il limite di PHP, o solo i limiti di PHP come lo conosci?

Hai guardato Drupal ? È un CMS basato su PHP e un framework di programmazione che incoraggia fortemente i buoni standard e pratiche di codifica. (Avendo dovuto lavorare con OSCommerce in precedenti lavori, sento il tuo dolore lì.) Sebbene basato su PHP, è abbastanza diverso che spesso il modo "giusto" di fare qualcosa in PHP puro non è il modo giusto di farlo in Drupal, e avrai una buona curva di apprendimento da scalare per dominarla davvero. Tuttavia, potrebbe cambiare le tue prospettive sulle capacità di PHP come lingua e sviluppo web nel suo insieme.


L'ultima volta che ho visto Drupal (4 e 5) è stato piuttosto male. Forse le loro versioni più recenti ora utilizzano standard adeguati. Tuttavia, per quanto lento sia, preferirei rimanere fedele ai fantastici framework là fuori.
Xeoncross,
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.