Vale la pena di imparare le lingue sperimentali? [chiuso]

25

Sono un giovane programmatore che desidera lavorare sul campo un giorno come programmatore. Conosco Java, VB.NET e C #. Voglio imparare una nuova lingua (come programmatore, so che è prezioso estendere ciò che so - per imparare le lingue che ti fanno pensare in modo diverso). Ho dato un'occhiata online per vedere quali lingue erano comuni. Tutti conoscono C e C ++ (anche quei babbani che sanno così poco dei computer in generale), quindi ho pensato, forse dovrei spingere per C.

C e C ++ sono belli ma sono vecchi. Cose come Haskell e Forth (ecc. Ecc. Ecc.) Sono vecchie e hanno perso la loro popolarità. Ho paura di imparare C (o anche C ++) per questa stessa ragione. Anche Java è piuttosto vecchio ed è lento perché è gestito dalla JVM e non è compilato in codice nativo.

Sono stato sviluppatore di Windows da un po 'di tempo. Recentemente ho iniziato a utilizzare Java, ma solo perché era più versatile e diffondibile in altri posti. Il problema è che non sembra molto usabile per questi motivi:

  • Lo scopo più utilizzato è per le applicazioni web e le app per cellulari (in particolare per Android)
  • Per quanto riguarda i prodotti effettivi, le uniche cose che vengono in mente sono Netbeans, Eclipse (hurray for making e IDE con il linguaggio a cui è destinato l'IDE - è come creare una pagina Web per scrivere HTML / CSS / Javascript) e Minecraft, che sembra essere divertente ma laggoso e bipolare per quanto riguarda le specifiche del computer. supporto.
  • Oltre a questo è usato per i server ma diamine - non voglio solo creare / configurare server .

I linguaggi .NET sono comunque carini:

  • Le persone ridono se menzioni VB.NET o C # in una conversazione seria.
  • Non è multipiattaforma a meno che tu non usi MONO (che è ancora in sviluppo e ha alcuni miglioramenti da apportare).
  • Manca cose di basso livello perché, come Java con JVM, viene eseguito / gestito dal CLR.

Il mio primo pensiero è stato imparare qualcosa come C e poi usarlo per trampolino di lancio in C ++ (giusto per assicurarmi che avrei una strong comprensione / base), ma come ho detto prima, sta diventando sempre più vecchio di minuto in minuto.

Cosa ho cercato in

Fantom sembra carino. È come un buon intermediario tra i miei due linguaggi preferiti e mi consente persino di pubblicare tra i due in modo intercambiabile, ma, a differenza di ciò che voglio, si compila con CLR o JVM (a seconda di cosa lo pubblichi) invece di essere una compilazione completa .

Anche

D è bello. Sembra un linguaggio molto usabile e da mult IPle fonti sembra effettivamente migliore di C / C ++. Salterò a destra con esso, ma sono ancora insicuro del suo successo perché ovviamente non è molto mainstream a questo punto.

Ci sono un paio di altri che sembravano molto carini e focalizzati su altre cose come Opa con sviluppo web e Go di GOOGLE.

La mia domanda

Vale la pena imparare queste lingue "sperimentali"? Ho letto altre domande che dicono che se non si impara costantemente le lingue e si aprono a tutte le lingue non si ha la mentalità giusta per la programmazione. Capisco questo e ancora non riuscirò a capirlo, ma in verità, se una lingua non diventerà mainstream, dovrei passare il mio tempo ad imparare qualcos'altro? Non voglio imparare i linguaggi di programmazione vecchi (o che presto diventeranno vecchi). So che molte persone vedono questo come qualcosa di importante, * ma qualcuno di voi lo considererebbe mai (supponendo che tu non lo sapessi già) FORTRAN? Il mio obiettivo è rimanere aggiornato per assicurarmi di avere successo in futuro.

responsabilità

Sì, sono un giovane programmatore, quindi probabilmente ho fatto molte dichiarazioni ingenue nella mia domanda. Sentitevi liberi di correggermi su QUALSIASI COSA! Devo iniziare ad apprendere da qualche parte quindi sono sicuro che molte delle mie conoscenze sono abbastanza schematiche da aver causato dichiarazioni o difetti errati in Il mio pensiero. Si prega di lasciare qualsiasi sentimento nei commenti.

I risultati ...

Sono davvero stupito dalle sorprendenti risposte, la maggior parte delle quali sottolinea così bene i miei fraintendimenti e le mie valutazioni errate. Ho imparato molto da questo e sono entusiasta di utilizzare, spero, tutto ciò che ho imparato! Probabilmente comincerò a imparare Haskell dopo (la non così vecchia lingua, anche se ha più di 20 anni - hahaha ) e poi inizierò a guardare alcune altre opzioni intorno a me.

Grazie

    
posta FreeSnow 01.07.2012 - 21:46
fonte

13 risposte

28

La cosa con l'apprendimento di lingue drasticamente diverse non riguarda l'apprendimento delle lingue, ma l'esposizione a diversi approcci ai problemi. Strumenti per la casella degli strumenti.

Una cosa da notare è che Haskell non è particolarmente vecchio ed è in realtà un ottimo candidato per qualcuno che abbia familiarità con le lingue tradizionali. Anche un linguaggio molto vecchio come Lisp è molto utile da imparare a causa della sua influenza sulle cose.

Inoltre, Java e .Net non sono interpretati e mi aspetto che tu stia facendo alcune ipotesi errate sulla base di tale errore di etichettatura.

    
risposta data 01.07.2012 - 22:17
fonte
22

Rimani in forma: ottieni pratica regolare

La pratica rende perfetti.

Più codice scrivi E leggi , più ti avvicini all'illuminazione / padronanza come programmatore / sviluppatore / ingegnere del software / guru / ninja / artigiano / hacker / buzzword-di-scelta. Non solo codificando e leggendo di più, ma anche provando i nostri nuovi modi di scrivere codice, più resterai (spero) più aperto.

Lettura consigliata:

Informazioni su nuovi paradigmi e funzioni linguistiche

Forse non sarai in grado di tradurre ciò che usi nel nuovissimo Super-Language-X in Enterprise-Language-Y, ma forse sarai in grado di riconoscere quando potrebbe sono stato una buona misura. Forse sarai in grado di sapere quando integrare una tecnologia diversa o impilare nel tuo progetto per adattarsi a uno scopo particolare. O forse saprai come usare le caratteristiche del linguaggio Y per emulare la caratteristica interessante del linguaggio X e ridefinire il tuo codice per trarne vantaggio (e potenzialmente illuminare altri colleghi durante il percorso) .

Ad esempio, potresti aver scoperto interessanti principi FP e vuoi adattali a Java, che probabilmente non è FP per design .

Lettura consigliata:

Diventa un tuttofare ... Maestro di alcuni?

Non sai quale lingua diventerà mainstrain quando è in quella fase "sperimentale", quindi non dovresti preoccuparti troppo delle scommesse su una di esse. Le probabilità sono, altre persone faranno la stessa scommessa e saranno incuriositi quando vedono questi visualizzati sul tuo curriculum. Aggiungi uno strumento alla cintura. Nel nostro caso, non c'è molto problema con quanto pesa alla fine.

Certo, non puoi diventare un maestro di tutti i mestieri. Ma potresti essere un maestro di uno, e piuttosto buono per il resto. Stai imparando un mestiere, e il nostro è sfaccettato. Fare esercizi regolari, frequentare workshop, afferrare un libro, scrivere un nuovo progetto per animali domestici e altre cose simili sono il nostro modo per tenere il passo con il ritmo sempre crescente di cambiamenti nel nostro campo.

Lettura consigliata:

Resta adattabile

Se non impari ad adattarti, è difficile farlo quando ne hai bisogno. Imparando costantemente cose nuove, ogni volta migliori sempre di più a raccogliere nuove cose (purché non ti limiti a sfide molto simili).

È come se la canzone di "Stay Young" Oasis: Resta giovane e invincibile .

Se riesci ad adattarti, puoi sopravvivere.

Lettura consigliata:

Resta Visibile: Comprendi il Radar dell'Agenzia di reclutamento

Usano parole chiave e tecnologie come check-box. Li usiamo come vasi di miele per reclutatori senza mente.

Funziona in entrambi i modi. Fintanto che conosci davvero le tue cose, avere un sacco di cose sul tuo curriculum è buono. Mostra la tua adattabilità e ampiezza di conoscenza. Inoltre, se ne padroneggi veramente alcuni e sono decenti in pochi altri, ti consente di modulare diverse versioni del tuo curriculum per posizioni e lavori diversi.

Altri argomenti SE utili

risposta data 02.07.2012 - 01:07
fonte
8

Per estendere la risposta di Telastyn, si tratta in effetti di esposizione a diversi paradigmi di programmazione . Ad esempio, non si tratta di imparare la programmazione logica, ma di:

  • imparare a imparare (pratica sull'apprendimento di nuove competenze)
  • allenare il tuo cervello a pensare in modi nuovi
  • forse ottenere una conoscenza meno popolare (o addirittura esoterica) che poche persone hanno e potrebbero tornare utili
    • o almeno impressionali con le tue conoscenze tecniche:)
  • e, naturalmente, fornisce preziose informazioni tecniche. Perché C # è più popolare di D? Il C ++ può fare tutto ciò che D può fare? Posso fare di più, o è più simile allo zucchero sintattico?

link

Another good reason to learn brainf*ck is to understand how basic a Turing-complete programming language can be. A common argument when programmers compare languages is “well they’re all Turing-complete”, meaning that anything you can do in one language you can do in another. Once you’ve learnt brainf*ck, you’ll understand just how difficult it can be to use a Turing-complete language, and how that argument holds no water.

link (Peter Norvig)

Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

    
risposta data 01.07.2012 - 22:40
fonte
7

My first thought was learning something like C and then using it to springboard into C++ (just to make sure I would have a strong understanding/base), but like I said earlier, it's getting older and older by the minute.

Bene, questo è un mucchio enorme di errori. Le persone che conoscono C hanno un <++> difficile tempo di apprendimento del C ++, perché praticamente tutto ciò che pensano di sapere come usare la lingua è una gigantesca pila di errori. Non c'è virtualmente nessuna C idiomatica che sia anche C ++ lontanamente buona. Stai meglio semplicemente imparando C ++ da zero. Persone come me che offrono volontariamente il loro tempo per aiutare altre persone ad imparare il C ++, spendono una massiccia parte di essa cercando di insegnare alle persone a rinunciare alle loro abitudini C.

Per quanto riguarda la popolarità, beh, C ++ sta vivendo un po 'di riemergenza di recente. La gente ha notato che in realtà le prestazioni fanno sono importanti, e non si può farla franca con l'esecuzione di ogni componente come gestita, e Modern C ++ (specialmente con C ++ 11) non assomiglia assolutamente la spazzatura C pensavano che fosse, e non è poi così male. Non sta davvero invecchiando. Sta diventando più recente. Il nuovo standard è un vasto aggiornamento e non ci sono linguaggi sostitutivi adatti, attuali o in pipeline, per molte delle aree in cui attualmente viene utilizzato il linguaggio C ++. Questo non è il minimo perché non ci sono linguaggi con un'intercabilità C ++ decente (anche C ++), rendendo difficile la migrazione da codebase C ++ esistenti.

People laugh if I even mention VB.NET or C# in a serious conversation.

Ottieni nuove persone. AFAIK, VB.NET in realtà non esiste per nessuna ragione se non per aiutare a migrare lontano da VB6 e non è davvero un obiettivo degno in quanto è proprio, ma C # è un linguaggio reale. È un po 'come Java, tranne che poi hanno aggiunto caratteristiche linguistiche reali e alcune belle librerie. C # è un linguaggio molto popolare e ben supportato con ottimi strumenti in VS, che non fa schifo che male, ed è una cosa solida, se non eccezionale, da imparare.

It isn't cross-platform unless you use MONO (which is still in development and has some improvements to be made).

MONO è abbastanza stabile. Inoltre, in definitiva, il 90% dei consumatori desktop (o 80%?) Esegue Windows adesso. Se svilupperai un'applicazione desktop, è una questione aperta se i non utenti Windows valgono il tempo di supporto, anche se utilizzi un linguaggio multipiattaforma.

In definitiva, potresti ottenere molto dall'apprendimento di una lingua come C ++ o Haskell, che si concentra su una strong tecnologia di compilazione piuttosto che su un enorme runtime.

Basta non scegliere PHP. L'unica cosa che puoi imparare è come non costruire una lingua.

    
risposta data 02.07.2012 - 08:47
fonte
6

Un paio di commenti su ciò che hai detto ...

1) Ogni programmatore dovrebbe imparare C, anche se è vecchio. È un ottimo linguaggio per avvicinarsi alla macchina. Dai consigli di Joel agli studenti CS ....

Learn C before graduating

Part two: C. Notice I didn't say C++. Although C is becoming increasingly rare, it is still the lingua franca of working programmers. It is the language they use to communicate with one another, and, more importantly, it is much closer to the machine than "modern" languages that you'll be taught in college like ML, Java, Python, whatever trendy junk they teach these days. You need to spend at least a semester getting close to the machine or you'll never be able to create efficient code in higher level languages. You'll never be able to work on compilers and operating systems, which are some of the best programming jobs around. You'll never be trusted to create architectures for large scale projects. I don't care how much you know about continuations and closures and exception handling: if you can't explain why while (*s++ = *t++); copies a string, or if that isn't the most natural thing in the world to you, well, you're programming based on superstition, as far as I'm concerned: a medical doctor who doesn't know basic anatomy, passing out prescriptions based on what the pharma sales babe said would work.

2) Le lingue possono essere utili per l'apprendimento della mentalità, anche se non sono comunemente usate. Learn Scheme (o LISP) per capire la programmazione funzionale, anche se non è alla moda. Da altro post in questo forum .

Congratulations, it sounds (to me) like you may be going to one of the few schools left that actually tries to teach computer science. Learning Scheme as a first language is (IMO) a very good thing. No, it's not as commercial as many others, but it's an excellent language for learning the real essence of computer science. – Jerry Coffin Oct 20 '11 at 3:32

C, C++ and Java are industry byproducts of computer science. Scheme's entire roots are in computer science. The languages in commercial use have as much to do with computer science as McDonalds has to do with cuisine. – JasonTrue Oct 20 '11 at 5:30

These guys are correct; you are confusing computer programming with computer science -- as Dijkstra said, that's like confusing telescope construction with astronomy. Scheme is about the best language there is for learning basic concepts in computer science. If you're expecting that taking a computer science degree is about learning how to write line-of-business apps in Java, you might be enrolled in the wrong program. – Eric Lippert Oct 20 '11 at 7:40

Almost all developers I know have learned C/C++ by themselves. You don't need university for that. – mouviciel Oct 20 '11 at 7:48

For the same reason that zoology courses teach evolutionary biology, anatomy and animal behaviour rather than how to muck out an elephant stall – jk. Oct 20 '11 at 7:58

Ora, nonostante tu abbia attaccato la tua premessa originale, penso che dovresti essere elogiato per la tua curiosità. Troppe persone diventano obsolete a causa della mancanza di curiosità. Approfittare del tuo sviluppo personale è un grande segnale che ti svilupperai bene. Le persone che apprendono di più sono quelle che vogliono continuare a chiedere come funzionano le cose.

    
risposta data 02.07.2012 - 05:17
fonte
3

QUALUNQUE lingua che impari cambierà nei prossimi 5 anni. Non si tratta di imparare una lingua che pensi possa essere in giro, ma piuttosto di imparare COME imparare. Maggiore è l'esposizione all'apprendimento della lingua e il processo di apprendimento che la lingua ti aiuterà moltissimo a lungo termine!

L'ultima società per cui ho lavorato utilizzava la propria lingua interna. Era simile al visual basic ma non lo stesso. Solo per il fatto che conoscevo altre lingue, ero in grado di scegliere la loro lingua molto più velocemente rispetto agli altri dipendenti.

Ho imparato il giapponese dopo aver imparato C ++, BASIC, Pascal e posso dire che l'apprendimento di una lingua di computer e di una lingua straniera richiede le stesse competenze. Queste abilità possono essere perse o affinate. Se hai l'unità, continua così e impara nuove lingue!

(come per l'apprendimento di FORTRAN o assemblaggio, penso che sia prezioso almeno prendere un semestre delle lingue più vecchie. Ti fa pensare a cose che date per scontate nelle lingue più recenti, cose come bandiere, memoria assegnazione e così via.)

    
risposta data 01.07.2012 - 22:31
fonte
3

Faresti meglio a imparare quante più lingue "vecchie" puoi, se mai vuoi diventare un programmatore. Inizia con Lisp, ottieni una buona conoscenza di Forth, presti molta attenzione all'evoluzione di tutte le lingue di Wirth, all'evoluzione di Fortran, all'ascesa e alla caduta di Prolog, introduci furtivamente nell'ecosistema di Ada, ottieni la tua arma segreta dall'apprendimento di Occam. Inseguire il "mainstream" è la cosa più stupida che un aspirante programmatore potrebbe mai fare.

    
risposta data 02.07.2012 - 10:48
fonte
2

Sono d'accordo con te sulla parte dell'esposizione delle cose. Anche se conosco Java, C, C ++, Javascript, Python, Ruby e un po 'di .NET (principalmente perché odio qualcosa M $ < - opinione personale) Devo dire che mi piace molto programmare in D.

D ha un set di funzionalità davvero bello (molti di questi sono implementati in C ++ / Java (lingue che hanno astrazioni di classe) ecc.) ma l'unica cosa che amo di più sono i generici e i delegati (rende facile implementare i callback) . A parte questo si ottiene una sintassi molto più semplice da affrontare rispetto al C ++. D ha un garbage collector davvero efficiente, sebbene tu possa scegliere di gestire da solo la memoria (specialmente quando si interfaccia con i moduli C / C ++). Sebbene D non abbia un sacco di moduli forniti dagli utenti, non dovrebbe essere una barriera per l'ingresso. Puoi facilmente interfacciarti con le librerie C / C ++ esistenti (che sono pleanty) rendendole ridondanti per necessità di moduli.

D ha una sua libreria standard (Phobos) che serve per tutti i problemi di programmazione comuni. Esiste anche una libreria alternativa ( Tango-D2 ) che puoi utilizzare con Phobos o da solo. Se sei uno sviluppatore web e hai bisogno di scrivere un server basato su eventi, Tango ha una buona astrazione Selector (tango.io.Selector per solo select (), poll (), epoll ()). Ho trovato che funziona anche meglio di libev.

    
risposta data 02.07.2012 - 07:13
fonte
1

Le lingue sono sviluppate per risolvere problemi in una sorta di dominio (almeno all'inizio). Se non hai affrontato problemi che i tuoi strumenti non riescono a risolvere in un modo con cui ti trovi a tuo agio, martellerai una tavola di legno che si aspetta di diventare un falegname. Cerca di capire il tipo di problemi che le lingue stanno cercando di risolvere. L'unica differenza tra un linguaggio "sperimentale" e un linguaggio nuovo / alla moda è il denaro che lo suppone, per esempio Vai da Google e Dart. Se fossero stati sviluppati nel mio cortile, probabilmente moriranno in alcuni forum e basta. Sopravvivono solo se sono bravi a spiegare i problemi che stanno cercando di risolvere. O viceversa, come Perl e C ++, che sono bravi ad assorbi i modi di risolvere i problemi per continuare a essere vivi. E potrei suggerire di imparare Lua, è un linguaggio fatto per incorporare programmi all'interno, è molto veloce e leggero, che ti darà gli strumenti per risolvere i problemi piccoli o grandi che alcuni linguaggi come Java non possono risolvere in modo semplice. Prendendo l'esempio del giapponese, se impari solo la sintassi, la grammatica e gli alfabeti, ignorando la cultura, non capirai mai perché è così complicato, e alla fine dimenticarti di tutto ciò. Non risolve nulla per te.

    
risposta data 02.07.2012 - 01:06
fonte
1

Imparare più lingue diverse ti offrirà una visione più ampia della programmazione. Enfasi su "diversi" - ad es. imparare C # e Java non ti insegneranno molto più dell'apprendimento di uno solo di essi. Ma l'apprendimento di C # o Java e un linguaggio funzionale (per esempio) lo faranno.

Detto questo, come giovane programmatore, penso che otterresti molto più valore dal conoscere una lingua in modo solido, prima di rimbalzare su diversi tipi di linguaggio. Non è del tutto chiaro dalla tua domanda quanto tu sappia Java, VB.NET e C #. Sei sicuro che se hai attaccato un progetto usando una delle lingue sopra elencate, il tuo collo di bottiglia sarebbe stato il progetto stesso, non la tua conoscenza della lingua? Se passassi più tempo a chiederti "come faccio questo in lingua ?" di quanto potresti spendere pensando al problema reale, allora probabilmente hai bisogno di concentrarti maggiormente su una delle tue lingue attuali.

E personalmente penso che dovresti adottare un approccio pragmatico per decidere quale sia. Java è utilizzato per le app Android? Ottimo, se creare app per Android è qualcosa che ti interessa. Irrilevante se non lo è. C # non è adatto per lo sviluppo non Windows? Cattive notizie se sei interessato allo sviluppo per Linux. Irrilevante se non lo sei. E così via.

E le lingue "sperimentali" che hai menzionato? Pragmaticamente, saranno inadeguati quando si tratta di lavorare con altre persone: probabilmente troverai un migliaio di persone che conoscono C # o Java per chiunque conosca Fantom. Per i progetti personali, questo non è necessariamente un problema. Se il tuo obiettivo è aumentare la tua occupabilità, lo è.

    
risposta data 02.07.2012 - 05:32
fonte
1

Potresti dire che imparare a programmare in una lingua come Postscript o APL è probabilmente una perdita di tempo, soprattutto perché le possibilità che tu abbia mai usato quella conoscenza si avvicinano allo zero. Ma allo stesso modo, potresti dire che Ruby e Python sono una perdita di tempo se non hai intenzione di usarli per qualcosa.

Ma poche persone direbbero che l'apprendimento del Lisp è uno spreco, anche se è probabile che tu debba scrivere Lisp come Postscript; ma l'apprendimento di Lisp ti insegna a pensare in modo diverso al tuo problema (si spera), motivo per cui la maggior parte dei programmatori ti dirà che vale il tuo tempo.

Tuttavia, non esagero mai dall'imparare una nuova lingua poiché l'investimento di tempo richiesto è in realtà solo un'ora o quattro. E usi per una lingua come Lua pop-up nei luoghi più insoliti e non li avresti mai riconosciuti se non avessi passato alcune ore a scorrere gli esempi.

Quando vedi una nuova lingua, leggi un po 'su cosa è utile. Se è una nicchia le tue lingue preferite non coprono troppo bene, quindi prenditi un giorno per imparare le basi. È sicuramente meglio passare il tempo che guardare la stagione 17 di The Bachelor o comunque puoi perdere tempo. In questo modo, se ne hai l'utilità, può venire in mente e sai dove trovare altro.

Personalmente raccomando vivamente di dare un'occhiata a Go. L'ho usato per scrivere programmi a pagina singola che funzionano meglio di quanto ci vorrebbe tre giorni e 13 librerie di terze parti in C o C ++, e non sarebbe nemmeno possibile in Python, C #, Ruby, ecc. È stato progettato da persone che conoscono davvero, davvero, veramente le loro cose.

    
risposta data 03.07.2012 - 09:16
fonte
-1

Scegli quelli con tipi diversi. Raggruppali per funzioni e sceglierne una in ciascun gruppo. Se vuoi farlo professionalmente, scegli quello che viene usato (quindi C ++ su D per il linguaggio compilato in modo statico con metaprogrammazione del modello).

Povero D, è un buon linguaggio, ma manca l'app killer che ha C ++: compatibilità quasi totale con il linguaggio # 1 del tempo (caso C per C ++). È bello, ma quel piccolo fatto importante probabilmente relegherà D allo status di baraccone nei libri di storia.

    
risposta data 03.07.2012 - 02:09
fonte
-2

C può essere vecchio, ma è ancora molto potente e interessante, l'apprendimento C ti aiuterà molto nel tuo futuro "di programmazione".

Java non è lento, chiunque ti abbia detto che non sa di cosa sta parlando, Java ti imparerà tantissimo su O.O.P.

Perché non inizi solo con Python e poi vai per C o qualcos'altro,

    
risposta data 02.07.2012 - 10:20
fonte

Leggi altre domande sui tag