(Perché) Dovrei imparare un nuovo linguaggio di programmazione? [chiuso]

97

Sono abbastanza abile con Java, C / C ++, JavaScript / jQuery e decentemente bravo in Objective-C. Sono abbastanza produttivo anche con le lingue e le relative strutture e produco sistemi di livello aziendale (e anche su scala ridotta) con sufficiente facilità pur mantenendo il codice 'pulito' e mantenibile (sì, posso leggere il mio codice dopo sei mesi:)

A meno che non sia richiesto dalla piattaforma (iPhone, iPad, ecc.) o dal cliente / organizzazione dell'implementazione, solo "perché" dovrei imparare un nuovo linguaggio di programmazione? Solo per divertimento"? E cosa fare con quel divertimento se non farò nulla di utile con esso?

Molti miei coetanei sono pronti ad immergersi per imparare la "prossima nuova cosa / lingua" e di solito sono Python, Ruby o PHP (basta nominare alcuni popolari). Ora, solo conoscere la lingua di per sé è futile IMHO. Devi anche conoscere i framework, apprendere il loro utilizzo / API e "buone pratiche di implementazione", ecc.

Quindi, dal punto di vista economico, c'è qualche vantaggio nell'apprendimento di un nuovo linguaggio di programmazione? Se la lingua viene appresa in modo rapido e sporco, sarà probabilmente utilizzata anche per la prototipazione / implementazione rapida e sporca - ma non vedo QUESTO come un investimento giustificabile di tempo / impegno.

Quindi, PERCHE 'dovrei (o chiunque altro) imparare un nuovo linguaggio di programmazione diverso da "è divertente quindi proviamolo" - se l'investimento di tempo potrebbe non valerne la pena nel lungo periodo?

    
posta PhD 22.02.2012 - 20:32
fonte

17 risposte

178

Da The Pragmatic Programmer , Tip # 8 "Investi regolarmente nel tuo portfolio di conoscenze":

Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet

Non si tratta della prossima "novità". Si tratta di pensare in modi diversi al di fuori dei normali schemi di pensiero.

C'è un detto: "Quando sei un martello, tutto sembra un chiodo". Forse c'è un modo migliore per risolvere un problema usando un'altra tecnologia. Se non esplori, potresti non sapere che era disponibile.

    
risposta data 21.02.2012 - 20:55
fonte
80

Perché la gente sale sul Monte. Everest? Oppure esegui 100 miglia in 24 ore ? Perché affrontiamo una sfida? Perché è lì. Non vedo nulla di sbagliato in "Ars gratia artis". Arriva un punto in cui l'apprendimento per l'apprendimento diventa la propria ricompensa. Ma se vuoi motivi più potenti per imparare una nuova lingua, ecco alcuni:

Nuovi modi per risolvere i problemi Imparare una nuova lingua, prendersi veramente del tempo per tuffarsi, ti dà la possibilità di programmare di nuovo come novellino. Questa nuova prospettiva può insegnarti tecniche che potrebbero essere trasferite in una vecchia lingua. Pensa all'influenza che Ruby on Rails ha avuto su ASP.NET MVC o su come Java Hibernate è stato portato su C # (insieme a innumerevoli altri framework che influenzano lo sviluppo di .NET). L'esposizione a lingue diverse può insegnarti nuovi modi per affrontare i problemi.

Lo strumento giusto per il lavoro giusto Tutte le lingue che hai menzionato sono OO / Ibridi procedurali (o puramente procedurali nel caso di C). Prova la tua mano in una lingua funzionale o due. Prova a implementare fattoriali in Erlang usando la ricorsione e guarda la tua mascella colpire il pavimento quando 20000! ritorna in 5 secondi (nessun sovraccarico di stack nel sito). Quindi guarda il potere di ridimensionare la tua applicazione per scricchiolare attraverso i numeri e analizzare i protocolli con meno codice e in meno tempo di quanto sarebbe necessario per ottenere due istanze di una JVM che parla tramite RMI o SOAP. Imparare altri linguaggi / framework che sono mirati a risolvere problemi specifici ti darà più strumenti.

Conosci nuove persone / espandi la tua rete Immergersi in una nuova lingua ti espone a una nuova comunità. Incontrare nuove persone è una buona cosa per la tua carriera e personalmente.

Nuove opportunità Conoscere una nuova lingua può solo aumentare le tue possibilità di ottenere quel lavoro con quell'avvio caldo. "Questo lavoro sarebbe perfetto se conoscessi Ruby." Inoltre, potresti goderti il linguaggio abbastanza da decidere di cambiare percorso.

Mantieni la freschezza Lavorare con la stessa cosa giorno dopo giorno diventa noioso. L'utilizzo di una lingua diversa ti consente di interrompere la routine quotidiana e ti consente di tornare al giorno successivo aggiornato.

Perché è lì Impara una nuova lingua perché vuoi.

    
risposta data 21.02.2012 - 19:01
fonte
37

Pensiamo con le parole. Il linguaggio che usiamo influenza il modo in cui lo facciamo. C'è un caso interessante su lingua Pirahã - persone che parlano che la lingua non può gestire come qualcosa apparentemente "semplice" o "intuitivi" come numeri perché il linguaggio in cui sono stati educati non ha parole per "quantità specifiche" (nemmeno "uno" e "molti").

Con i linguaggi di programmazione è lo stesso. Un nuovo linguaggio di programmazione, può "aprire" la tua mente ad alcuni aspetti della programmazione.

Dato il tuo attuale background di programmazione, ti consiglio di imparare un linguaggio funzionale, come Erlang o Scala. Infine, Clojure è anche un linguaggio molto solido.

Se vuoi sentirti un po 'più a casa prima, prova un potente linguaggio di scripting come Python o Ruby.

    
risposta data 22.02.2012 - 11:11
fonte
26

Non solo vuoi imparare nuove lingue che vuoi imparare lingue diverse da quelle che conosci già Se sai che imparare C in Java non ti sfiderà veramente, sono abbastanza simili. Idealmente dovresti scegliere un linguaggio molto diverso da quello che sai. Se conosci java, JavaScript e Objective-C vuoi qualcosa di molto diverso

Ad esempio:

Ruby un divertente linguaggio OO debolmente tipizzato

Prolog Un linguaggio di programmazione logica molto diverso

Erlang Concurrency and Fault Tolerance fatto molto bene

Schema vai a leggere SICP e raggiungi l'illuminazione

Haskell Uno dei sistemi di tipi più potenti al mondo, se compilato, probabilmente funzionerà, inoltre ti impedirà di fare ogni sorta di errori strani e molto altro ancora.

Oppure prendi sette lingue in sette settimane, cosa che farà su ciò che il titolo dice che farà.

    
risposta data 22.02.2012 - 12:01
fonte
15

La tua domanda è così importante che mi chiede di porre la seguente domanda:

Se sei un programmatore di professione, perché nel mondo non vorresti imparare qualcosa di nuovo da aggiungere alla tua esperienza professionale?

La tua domanda mi sembra molto simile all'atteggiamento di uno studente che ho avuto una volta. Un anno o due prima del Y2K stavo insegnando un corso di Cobol (come elettivo), su richiesta del direttore dei servizi di carriera presso l'università dove stavo insegnando in quel momento. Aveva così tante aziende che gli si avvicinavano con opportunità di lavoro per i programmatori Cobol che pensava che avremmo fatto un disservizio ai nostri studenti non dando loro l'opportunità di imparare le abilità e di aggiungere le loro competenze.

Ho avuto uno studente che ha preso la classe come sua ultima classe elettiva per diplomarsi . All'epoca lavorava anche come programmatore C. Ha frequentato la classe Cobol perché non aveva altre scelte e voleva la laurea. Così è venuto in classe con un chip sulla spalla.

I already know C, and I'm using it professionally so I don't know why in the world that anyone would want or even need to learn Cobol.

Quindi l'ho sfidato con il compito di scrivere un programma per leggere i dati da un file che aveva un formato specifico per ogni record di input (cioè quanti caratteri ogni campo occupava su una riga, quale campo veniva prima, secondo, terzo, ecc.)

Doveva scrivere il suo programma in C, cosa che ha fatto, e mi ha mostrato il suo programma. Allo stesso tempo, gli ho mostrato la mia versione Cobol del programma.

Poi gli ho lanciato una palla curva:

Supposed that the end user is getting data from somewhere else. It's the same fields in each record, but the order and the number of characters per field is different. Show me what you would have to change in your program to make it work with the new data format.

Si è preso un giorno per creare una nuova versione del programma che ha funzionato con il nuovo formato di dati. Ha comportato la modifica di almeno 20 o 30 righe di codice e la modifica di diverse funzioni e moduli.

Poi gli ho mostrato i cambiamenti che dovevo apportare al mio programma Cobol. Ho modificato la clausola immagine per riflettere il nuovo formato dei dati.

Non sono sicuro che abbia compreso completamente la lezione di quell'esercizio, ma almeno ha smesso di lamentarsi per il resto del semestre.

Quindi - in risposta alla tua domanda: Dovresti imparare nuove lingue perché vuoi imparare. E se non vuoi imparare - più potere per te ... (Non sono sicuro che ti assumerei con quell'atteggiamento)

    
risposta data 21.02.2012 - 20:21
fonte
12

Ci sono diversi motivi per cui l'apprendimento di una nuova lingua può valere un investimento nel tempo:

  1. Aumenta la dimensione della cassetta degli attrezzi: l'apprendimento di una nuova lingua può fornire percorsi aggiuntivi per risolvere problemi tecnici. La possibilità di nuovi strumenti potrebbe fornire una scelta migliore della lingua / piattaforma per risolvere alcuni problemi rispetto agli strumenti / linguaggi che uno sapeva in precedenza. Un esempio semplicistico potrebbe essere quello di un programmatore che conosce solo C. L'apprendimento di un linguaggio di scripting apre altre possibilità per lui / lei - in termini di implementazione, impostazione dell'ambiente, ecc.
  2. Accesso a una nuova piattaforma - un ottimo esempio potrebbe essere l'obiettivo C - se uno vuole svilupparsi per iOS, l'apprendimento di questa lingua è quasi obbligatorio.
  3. Scopri nuovi paradigmi: alcune lingue potrebbero avere un migliore accesso ai nuovi paradigmi. Utilizzando C come esempio, potrebbe essere difficile sviluppare servizi Web in standard ANSI C. Tuttavia, imparare a sviluppare in .NET, Java, PHP o in altri nuovi linguaggi potrebbe velocizzare lo sviluppo di servizi Web.

Imparare nuove lingue può offrire vantaggi immediati, come già notato, in soluzioni "rapide e sporche". Tuttavia, queste soluzioni immediate potrebbero portare un programmatore a indagare e scavare più a fondo nell'architettura associata alla nuova lingua per apprenderla "appropriatamente". È possibile visualizzare questi esercizi di apprendimento rapido come un investimento nell'indagine sul fatto che una nuova lingua valga la pena di aggiungere tempo di formazione.

    
risposta data 21.02.2012 - 18:38
fonte
11

In una parola: Marketability .

Apri le tue prospettive lavorative quando puoi dimostrare di avere la capacità di adattarsi e apprendere nuove cose. Certo, potresti continuare a scrivere applicazioni usando l'unica lingua in cui sei diventato veramente bravo, ma cosa succede quando impari che la tua lingua preferita di scelta diventa irrilevante per il settore in cui hai lavorato. Ricordo davvero un periodo in cui usavamo per scrivere i nostri servizi web da zero in C o C ++, al giorno d'oggi usiamo strumenti che fanno tutto il sottostante "webbiness" per noi (Think Rails, ecc ...).

Il punto è che finisci come quegli attori che fanno una serie TV, e quindi non possono facilmente spostarsi su qualcos'altro perché sono visti per sempre come il loro personaggio originale. "Chi diavolo vuole che il Capitano Kirk sia Indiana Jones? !!". Lo stesso con i programmatori che hanno sempre usato l'unico prodotto. Certo, lo saprai come nessun altro, ma questo non ti aiuterà quando sarai trattato come se fossi stato ingabbiato come un Fortran che non può più lavorare con C #.

Se vuoi essere in grado di spostare facilmente i lavori e mantenere aperte le opzioni, è necessario ampliare la tua esperienza. Lavora su molti progetti diversi in molte lingue diverse, preferibilmente su almeno 2 o più piattaforme e mantieniti commerciabile per qualcosa di più che essere ciò che sei oggi.

Naturalmente, ci sono molti altri motivi per imparare una nuova lingua, a volte anche solo per il gusto di farlo. Ti apre la mente ad altre possibilità, quindi quando il tuo capo si avvicina a te e dice "possiamo fare qualcosa", puoi dire sì con una scelta di strumenti a tua disposizione.

    
risposta data 21.02.2012 - 21:50
fonte
8

A questo punto della tua carriera, dovresti imparare nuove lingue se pensi che ti renderanno un programmatore migliore.

La maggior parte delle lingue elencate (Java / C / C ++ / Javascript / Objective-C) sono OO / imperativo convenzionale. Imparare un altro OO / linguaggio imperativo probabilmente non ti insegnerà molto di più su quel tipo di programmazione. A meno che tu non abbia un particolare interesse, non ha senso imparare il sapore del mese sulle specifiche.

Sono anche incline ad essere scettico riguardo alle pretese di aumento della produttività dell'ordine di grandezza. Tuttavia, potrebbe essere utile verificare il linguaggio reputato ad alta produttività occasionale, per vedere se ti piace.

La miglior ragione per imparare una nuova lingua è imparare le abilità di applicabilità generale. Per questo, vorrei raccomandare un tuffo in profondità in un linguaggio funzionale (Haskell o uno dei Lisps) da una parte, e codice di assembly e architettura di sistema (x86 o ARM) dall'altra.

La programmazione funzionale spezzerà il tuo cervello e migliorerà la tua mente, mentre l'apprendimento dell'architettura della macchina migliorerà le tue capacità di debug e ottimizzazione, anche se non scriverai mai un'altra linea di assemblaggio.

    
risposta data 22.02.2012 - 00:14
fonte
6

Ognuno di noi decide su cosa vogliamo lavorare, quindi ...

  1. lo impari perché vuoi
  2. lo impari perché ne hai bisogno per il lavoro che desideri

Se non vuoi imparare PHP, nessuno ti sta creando e ci sono un sacco di aree in cui puoi programmare senza neanche sapere come si scrive PHP.

Un sacco di persone guardano al mercato del lavoro per vedere dove sono le aree calde e saltare su quelle tecnologie. Un sacco di gente impara una lingua e ne tiene fede e 20 anni dopo diventano ingegneri di manutenzione legacy. E poi ci sono molte persone che si trovano ovunque tra questi due estremi.

Alla fine, tutto dipende da dove vuoi essere.

    
risposta data 21.02.2012 - 19:26
fonte
5

La migliore argomentazione che conosco è che amplia la tua prospettiva su quanti diversi modi un problema può essere risolto, o qualche logica può essere espressa. Sapere bene che Java e C ++ ti offrono una buona visuale sia sul dispositivo nativo che su quello di ampli; VM realm, ma ci sono molti più "gradi di libertà" da esplorare.

Ho circa 15 anni di esperienza in C ++, 5 in Java. Ci sono molte lingue che ho imparato e lasciato (PHP, Pascal, assembly per un gruppo di processori diversi, tra gli altri) e posso dire con certezza che anche quelli che non uso più hanno lasciato un segno significativo su come penso a un problema . Inoltre: anche se vuoi attaccare, per esempio, Java, per un dato progetto, devi conoscere l'alternativa per presentare buoni controsensi ai suoi sostenitori.

Comunque, ho imparato Python solo quest'anno, e sono rimasto deliziato dal modo elegante con cui alcune cose possono essere fatte. Tanto che ho deciso di convertire una manciata di servlet REST che avevo scritto, da Java a Python. I vantaggi nella manutenibilità del codice erano piuttosto significativi. Sicuramente ha lasciato un segno anche nel mio modo di fare le cose, non solo perché ora sceglierò Python per alcune attività, ma anche perché potrei adottare principi di progettazione simili durante la codifica in C ++ e amp; Java.

Detto questo, non penso che dovresti imparare molte lingue diverse per tutto il tempo, solo per il gusto di farlo. Ci vuole molto tempo, e le "accomodazioni" che dovrai fare nella tua mente per farle coesistere con le altre già conosciute richiedono anche tempo e impegno. Decido solo di imparare una lingua quando ha abbastanza maturità, ha una buona base di sviluppatori e offre risultati significativamente diversi dagli altri che conosco o che intendo apprendere. Quando ho deciso di imparare Python, ad esempio, ho preso in considerazione anche Ruby e Perl, e in seguito li ho scartati - almeno per il prossimo futuro.

    
risposta data 21.02.2012 - 19:48
fonte
5

Le persone imparano nuove lingue per ...

  • espandi le loro conoscenze. Se ne sai di più ti senti meglio e sei più sicuro.
    Fiducia = Codice fantastico!
  • avere una cassetta degli attrezzi più grande. Supponiamo che tu debba creare un'app. Se conosci solo Java, realizzerai il programma in Java. Ma se conosci Java, Python, Scheme e Lisp, è probabile che sceglierai lo strumento migliore per il lavoro.
  • trova lavoro. Affrontalo. Se conosci più lingue, hai più opportunità di lavoro. Questo è abbastanza auto-esplicativo.
  • diventa un programmatore completo migliore. Se conosci la sintassi di Perl, sai che può diventare un po 'pazzo. Quando scrivi lunghi programmi in Perl, sei sostanzialmente costretto a seguire le migliori pratiche, o non sarai un campeggiatore felice. Poiché conosci le migliori pratiche di Perl, questo potrebbe aiutarti a scrivere codice PHP migliore (in un modo o nell'altro).

Quindi come puoi vedere ci sono molti motivi per imparare una nuova lingua. Il mio consiglio per te (e la mia unica citazione originale che ritengo sia buona):

Write code frequently; Write code well; Write code in Scheme, PHP, Java, Python, Lisp, Perl, C, C++, C#, Visual Basic, Ruby...

    
risposta data 21.02.2012 - 21:44
fonte
5

Sono d'accordo con la maggior parte delle risposte già pubblicate. Per aggiungerli, controlla le statistiche prese dall'indagine sugli utenti di Overflow dello stack 2011. C'era una correlazione molto alta tra il numero di lingue conosciute e il denaro guadagnato. Possono non essere direttamente legati l'uno all'altro, ma è qualcosa su cui riflettere.

Le persone che tendono ad apprendere più lingue tendono a guadagnare di più.

link

    
risposta data 21.02.2012 - 23:50
fonte
4

Alfred North Whitehead ha scritto un grande saggio intitolato " L'importanza della buona notazione "

It is interesting to note how important for the development of science a modest-looking symbol may be. It may stand for the emphatic presentation of an idea, often a very subtle idea, and by its existence make it easy to exhibit the relation of this idea to all the complex trains of ideas in which it occurs.

Un linguaggio di programmazione è una forma di notazione. Posso codificare OO in C; in effetti è così che Stroustrup ha iniziato con C ++ - come una serie di macro del precompilatore C. Tuttavia, è molto più facile e veloce scrivere codice OO in Java, C ++ o C # perché hanno primitive di linguaggio presenti che supportano OO più facilmente.

Tutti i motivi per imparare nuove lingue finora sono validi, ma ritengo che la miglior ragione per imparare una nuova lingua sia che una nuova notazione potrebbe permetterti di pensare in un modo nuovo che potrebbe aiutarti a risolvere nuovi problemi.

    
risposta data 21.02.2012 - 21:38
fonte
2

La maggior parte o tutte le risposte sopra sono relative alla professione. Programmazione. Voglio ricordare che prima di essere programmatori siamo esseri umani.

Un buon motivo per cui non imparare un nuovo linguaggio di programmazione, nel tuo caso, è lasciarti riposare o fare altre cose oltre alla programmazione.

Dalla mia esperienza, lavorando in agricoltura e lavorando con il legno, ho pensato molto alla programmazione, più che all'apprendimento di una nuova lingua. Ad esempio, per essere un buon programmatore dovresti prima essere un buon essere umano. Se non hai molta esperienza nella vita, oltre alla programmazione, la tua idea sulla programmazione potrebbe essere totalmente sbagliata, anche se sei un esperto.

Molti concetti di programmazione derivano direttamente dalla vita quotidiana: semplicità, manutenibilità, praticità, utilità, velocità - e talvolta lentezza , modularità, ecc; sono tutti concetti che sono usati da un falegname, per esempio.

Che ci crediate o no: personalmente ho imparato molto sui concetti di programmazione, facendo una lunga vacanza per la raccolta delle arance. Il concetto principale che ho imparato è stato: semplicità. Dal lavoro come costruttore ho imparato un altro concetto: costruire la base nel miglior modo possibile, se vuoi che le pareti siano dritte.

Infine, la risposta alla tua domanda potrebbe essere: prendi una vacanza, partecipa a una lezione di taekwondo o prenditi cura del giardino, quindi la tua domanda potrebbe non infastidirti più.

    
risposta data 25.02.2013 - 10:50
fonte
-2

Il valore dell'apprendimento di un nuovo linguaggio di programmazione è, approssimativamente, il reciproco del numero di linguaggi di programmazione che già conosci.

Questo perché ci sono un numero finito di paradigmi e imparare una nuova lingua di solito ti introdurrà ad almeno uno o due, rendendoti più esperto e capace come programmatore. Alcuni potrebbero capovolgere il tuo mondo di programmazione. Ma quando impari un nuovo linguaggio che presenta paradigmi che già conosci, li conosci già e sei abituato a loro.

    
risposta data 21.02.2012 - 22:14
fonte
-3

Come molti di loro hanno già scritto, ho una buona conoscenza di lavoro su C. Di recente, stavo lavorando su qualche problema per il quale avevo bisogno di controllare i risultati; era matematico. Quindi qual è il modo più veloce per ottenere la risposta mi ha dato un calcio per controllare il linguaggio di programmazione più veloce da imparare.

E ho scoperto che bc , un linguaggio di calcolatrice arbitrario di precisione, l'utilità quasi disponibile su ogni piattaforma Unix.

Non pensavo a Python, Perl o altro, ma ho scoperto che questo risolveva i miei problemi in un attimo. L'ho verificato sul fattoriale (20000) suggerito da un amico, e ha dato risultati in un attimo senza alcun arresto.

È importante solo a un certo punto che devi conoscere una nuova lingua che alleggerirà il tuo lavoro / problema al momento.

Sicuramente, se scrivo questo nel mio curriculum credo che nessuno se ne preoccupi, ma dal mio punto di vista risolve il mio problema prima di attaccarlo nella mia lingua preferita, "C".

E anche se è necessario imparare una nuova lingua, avrai l'opportunità con diversi problemi e n numero di soluzioni.

    
risposta data 22.02.2012 - 20:38
fonte
-8

Chiunque può creare una nuova lingua; ma nessuno sembra capire che "migliore" sia raramente uguale a "molto meglio che il costo dell'adozione sia effettivamente giustificato". Il risultato finale è centinaia di lingue diverse, in cui è impossibile per chiunque capire tutto il codice sorgente e dove i programmatori devono sprecare circa un quarto del loro tempo a causa di differenze linguistiche / strutturali / bibliografiche.

In un mondo ideale, ci sarebbe un linguaggio di programmazione di basso livello (ad es. C), un linguaggio di programmazione di alto livello "sicuro" (ad es. Java) e un linguaggio di scripting. Ci sarebbe anche un grande martello da demolizione per distruggere la "Torre del linguaggio di programmazione di Babele" creata da persone che non capiscono le virtù della standardizzazione e il costo di "abbandono" e la costante riqualificazione sul I.T. settore nel suo complesso.

Da un punto di vista "macroeconomico", non c'è nulla di sbagliato nell'imparare un nuovo linguaggio di programmazione come hobby, ma usare che il nuovo linguaggio di programmazione per qualsiasi cosa ti renda parte del problema.

    
risposta data 21.02.2012 - 19:26
fonte

Leggi altre domande sui tag