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


97

Sono abbastanza abile con Java, C / C ++, JavaScript / jQuery e discretamente bravo in Objective-C. Sono abbastanza produttivo con le lingue e anche i loro quadri corrispondenti e produco sistemi di livello aziendale (e anche di piccola scala) con sufficiente facilità mantenendo il codice "pulito" e mantenibile (sì, posso leggere il mio codice dopo le sei mesi :)

Se non richiesto dalla piattaforma (iPhone, iPad, ecc.) O dall'organizzazione client / implementazione, solo "perché" dovrei imparare un nuovo linguaggio di programmazione? Solo per divertimento"? E cosa fare con quel divertimento se non ho intenzione di fare qualcosa di utile con esso?

Molti dei miei colleghi sono pronti ad immergersi per imparare la "prossima nuova cosa / lingua" e di solito è Python, Ruby o PHP (solo nominandone alcuni popolari). Ora, solo conoscere la lingua da sola è inutile IMHO. È inoltre necessario conoscere i framework, apprenderne l'utilizzo / le API nonché le "buone pratiche di implementazione", ecc.

Quindi, dal punto di vista "economico", c'è qualche vantaggio nell'apprendimento di un nuovo linguaggio di programmazione? Se il linguaggio viene appreso in modo rapido e sporco, probabilmente verrà utilizzato anche per la prototipazione / implementazione rapida e sporca, ma non lo vedo come un investimento giustificabile di tempo / fatica.

Quindi, PERCHÉ 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?


6
programmers.stackexchange.com/questions/118338/… Forse sarai interessato dalla risposta che ho dato.
deadalnix,

3
Se riesci a vedere una nuova lingua con nuovi concetti e non hai il desiderio di capirli, molti posti non ti assumeranno (in effetti, vengono fatte molte domande di intervista per determinare in modo specifico cose come questa)
Bill K

3
Chiederò perché non dovrei imparare una nuova lingua?
utente

2
@ZacharyK anche se il lavoro era per uno sviluppatore Java e il candidato era superduper di Java. Sembra che potresti spararti al piede.
NimChimpsky,

2
Ci sono molti ragazzi Super Java là fuori. Sono interessato a ciò che saprai tra 6 mesi come quello che sai ora. (Ovviamente mi sembra di passare tutto il mio tempo in Erlang, CoffeeScript e PHP)
Zachary K

Risposte:


178

Da The Pragmatic Programmer , Consiglio n. 8 "Investi regolarmente nel tuo portafoglio di conoscenze":

Impara almeno una nuova lingua ogni anno. Lingue diverse risolvono gli stessi problemi in modi diversi. Imparando diversi approcci, puoi aiutare ad ampliare il tuo pensiero ed evitare di rimanere bloccato in una carreggiata. Inoltre, imparare molte lingue ora è molto più semplice, grazie alla ricchezza di software liberamente disponibili su 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 qualche altra tecnologia. Se non esplori, potresti non sapere che era disponibile.


Punto eccellente. Questo pensiero è ciò che mi ha portato a provare RavenDB su un progetto, e ho imparato così tanto dopo anni di essere bloccato in una routine di SQL Server.
Bob Horn,

52
Ho pensato che fosse quando tutto ciò che hai è un martello tutto sembra il tuo pollice
Zachary K

2
Sono completamente d'accordo. Aggiungo anche che l'apprendimento di un'altra lingua ti aiuta a comprendere meglio gli aspetti delle lingue che in precedenza pensavi di conoscere. Aiuta anche a distinguere quali sono "reali" concetti / schemi / limitazioni fondamentali di programmazione e quali sono semplicemente artefatti del tuo set di strumenti specifico. Ad esempio, se tutte le lingue che conosci sono scritte in modo debole, potresti non sapere mai che esiste una digitazione forte e non ti chiedi mai perché! Di conseguenza, i tuoi prodotti potrebbero risentirne delle prestazioni o della sicurezza, anche se potrebbero eccellere nel time-to-market ;-).
JJC

3
Il programmatore pragmatico è uno dei migliori libri di programmazione che abbia mai letto. Veramente buono!
Soner Gönül

Sono davvero d'accordo su "Si tratta di pensare in modi diversi al di fuori dei normali schemi di pensiero". Quando ho imparato Python, ho avuto il nuovo mondo di un modo di pensare.
Yoo Matsuo

80

Perché le persone scalano il monte. Everest? O eseguire 100 miglia in 24 ore ? Perché intraprendiamo qualche sfida? Perché è lì. Non vedo nulla di sbagliato in "Ars gratia artis". Arriva un punto in cui l'apprendimento per amore dell'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, prendendoti davvero il tempo di immergerti, ti dà la possibilità di programmare di nuovo come un principiante. Quella nuova prospettiva può insegnarti tecniche che potrebbero essere trasferite in una vecchia lingua. Pensa all'influenza di Ruby on Rails su ASP.NET MVC o al modo in cui 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 citato sono OO / ibridi procedurali (o puramente procedurali nel caso di C). Metti alla prova una o due lingue funzionali. Prova a implementare fattoriale in Erlang usando la ricorsione e osserva la tua mascella colpire il pavimento quando 20000! ritorna in 5 secondi (nessun overflow dello stack nel sito). Quindi guarda la potenza di ridimensionare la tua applicazione per sgretolare i numeri e analizzare i protocolli con meno codice e in meno tempo di quanto ci vorrebbe per ottenere due istanze di una JVM che parla attraverso RMI o SOAP. Imparare altre lingue / framework mirati a risolvere problemi specifici ti darà più strumenti.

Conosci gente nuova / espandi la tua rete Immergiti 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 non può che aumentare le possibilità di ottenere quel lavoro con l'avvio a caldo. "Amico, questo lavoro sarebbe perfetto se conoscessi Ruby." Inoltre, potresti apprezzare abbastanza la lingua da decidere di cambiare percorso.

Mantienilo fresco Lavorare con la stessa cosa giorno dopo giorno diventa noioso. L'uso di una lingua diversa può darti una pausa dalla routine quotidiana e permetterti di venire aggiornato il giorno successivo.

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


3
+1 Javascript può essere funzionale, ma sembra certamente che l'OP possa mancare alcuni paradigmi dal loro toolbox. E una maggiore esperienza con i linguaggi funzionali fornirà informazioni più approfondite con le loro lingue esistenti, ad esempio con i modelli C ++
jk.

+1 per Keep it fresh, è davvero bello lavorare su qualcosa di diverso
Mona,

Vorrei sottolineare che l'ottimizzazione delle chiamate in coda non ha nulla a che fare con il fatto che un linguaggio sia (puro) funzionale o meno, i linguaggi imperativi compilati per essere eseguiti con il runtime .NET a 64 bit ottengono gratuitamente l'ottimizzazione delle chiamate in coda .
Cieco

1
LOL, sì, non è ciò che rende Erlang un linguaggio puramente funzionale, ma è un cambio di prospettiva totale. Nei linguaggi imperativi siamo incoraggiati a evitare la ricorsione per tutti tranne i casi più banali e la ricorsione dei linguaggi funzionali è uno stile di vita. Corrispondenza del modello al contrario di if / else o switch / case sono anche piuttosto interessanti.
Michael Brown,

2
Prova a implementare fattoriale in Erlang usando la ricorsione e osserva la tua mascella colpire il pavimento quando 20000! ritorna in 5 secondi (nessun overflow dello stack nel sito). Questo è uno degli argomenti più forti per l'apprendimento di un linguaggio funzionale che io abbia mai visto. Non avrei mai pensato che potesse essere così efficiente.
Olegs Jeremejevs,

37

Pensiamo con le parole. Il linguaggio che usiamo influenza il modo in cui lo facciamo. C'è un caso interessante sulla lingua Pirahã : le persone che parlano quella lingua non possono gestire come qualcosa di apparentemente "semplice" o "intuitivo" come numeri perché la lingua in cui sono stati cresciuti non ha parole per "quantità specifiche" (nemmeno "una" " 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 prima vuoi sentirti un po 'più a casa, prova un potente linguaggio di scripting come Python o Ruby.


22
+1. "Un linguaggio che non influisce sul modo in cui pensi alla programmazione, non vale la pena conoscerlo." - Alan Perlis
ruakh,

2
Respingo la premessa che "Pensiamo con le parole" in quanto nega la possibilità che chiunque (o qualsiasi cosa) senza parole possa pensare. Ma le parole sono estremamente utili per etichettare i concetti (e quindi aiutare a distinguerli). Per lo più facciamo il nostro pensiero più alto con (molto coinvolgimento da) parole perché è efficiente. Che è un'affermazione più equivoca, ma penso più vicino alla verità. Stranamente, non posso rifiutare l'uso delle parole senza usare le parole ...
Donal Fellows,

@DonalFellows: Penso che abbiamo alcuni "processi mentali" che non sono esprimibili attraverso le parole. Ma io non chiamo quei "pensieri", ma "sentimento", "riflessi", "intuizioni" ecc. Penso che un pensiero adeguato debba essere esprimibile in termini di una sorta di linguaggio. Quindi per me qualcosa che non ha una lingua può vivere, elaborare, reagire, sentire ... ma non pensare. Ma questa è una convinzione, basata sull'intuizione, non una vera prova. E anche un po 'fuori tema, davvero :)
egarcia,

Assolutamente d'accordo, imparare le lingue solo perché sono il nuovo fantastico linguaggio di programmazione non ha senso. Dovresti attenersi a quelli molto diversi e cercare di non coprirne troppi. Essere bravi in ​​qualcosa richiederà un notevole ammontare di tempo (probabilmente più di 10 anni), non importa se suona uno strumento musicale, cucina o programmazione.
Mister Smith,

2
@evilcandybag: In realtà posso dimostrare una fonte: sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/… (PDF).
Ruakh,

26

Non solo vuoi imparare nuove lingue, ma vuoi imparare lingue diverse da quelle che conosci già Se conosci Java che l'apprendimento C # non ti metterà davvero alla prova, sono abbastanza simili. Idealmente dovresti scegliere una lingua molto diversa da quella che conosci. Se conosci Java, JavaScript e Objective-C vuoi qualcosa di molto diverso

Ad esempio:

Ruby un divertente linguaggio OO debolmente digitato

Prolog Un linguaggio di programmazione logica molto diverso

La concorrenza di Erlang e la tolleranza agli errori sono state fatte molto bene

Schema Vai a leggere SICP e raggiungi l'illuminazione

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

O raccogli sette lingue in sette settimane, il che farà ciò che dice il titolo.


2
+1! Un esercizio che sto facendo in questo momento è quello di implementare lo stesso algoritmo (unisci ordinamento) in diverse lingue: questo mi dà davvero la sensazione di quanti modi ci sono per esprimere lo stesso calcolo. Ho già in esecuzione le versioni C, C ++, Pascal, Java, Scala e Haskell. Python, Ruby, Modula2, Scheme stanno arrivando. Trovo che puoi imparare così tanto guardando diversi linguaggi di programmazione! E facendo una cosa in una lingua posso ottenere molte idee su come implementarla in un modo migliore in un'altra lingua.
Giorgio,

3
Mi piace, tranne per come descrivi Haskell. Puoi ancora scrivere codice errato che viene compilato. (La correttezza del tipo non è l'unico requisito per la correttezza generale.) Il motivo per imparare Haskell è che è notoriamente molto vicino alla matematica e ha un modello di valutazione pigro; ciò dovrebbe scuotere le idee della maggior parte dei programmatori su cosa sia la programmazione.
Donal Fellows,

Penso che dovrei provare Prolog. Quando l'ho imparato per la prima volta, sono rimasto stupito. Come puoi fare le cose solo scrivendo pochi personaggi.
utente

3
@DonalFellows nella mia esperienza se ottieni i tipi giusti in Haskell, il resto del programma tende a scrivere da solo.
tobyodavies,

1
"Ruby è un divertente linguaggio OO debolmente digitato": Ruby è davvero tipizzato debolmente o piuttosto dinamicamente?
Giorgio,

15

La tua domanda è così importante che mi viene da porre la seguente domanda:

Se sei 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 avevo una volta. Un anno o due prima di Y2K insegnavo una classe Cobol (come elettiva), su richiesta del direttore dei servizi di carriera all'università dove insegnavo in quel momento. Aveva così tante aziende che si avvicinavano a lui con opportunità di lavoro per i programmatori Cobol che pensava che avremmo fatto un cattivo servizio ai nostri studenti non dando loro l'opportunità di apprendere le abilità e di aggiungere il loro set di abilità.

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

Conosco già C, e lo sto usando in modo professionale, quindi non so perché nel mondo che qualcuno vorrebbe o abbia persino bisogno di imparare 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 ciascun campo occupava su una riga, quale campo è arrivato primo, secondo, terzo, ecc. .)

Stava scrivendo 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:

Supponiamo che l'utente finale stia ottenendo dati da qualche altra parte. Sono gli stessi campi in ogni record, ma l'ordine e il numero di caratteri per campo è diverso. Mostrami cosa dovresti cambiare nel tuo programma per farlo funzionare con il nuovo formato di dati.

Ha impiegato un giorno per realizzare una nuova versione del programma che funzionasse 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 le modifiche che dovevo apportare al mio programma Cobol. Ho modificato la clausola di immagine per riflettere il nuovo formato di 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)


6
Mentre le tue intenzioni erano buone, se fossi quello studente penserei semplicemente che l'unica ragione per cui la tua app è stata facilmente cambiata è perché sapevi dell'eventuale modifica dei requisiti. Se il programma fosse scritto in C con le stesse conoscenze, sarebbe necessario apportare anche modifiche minime.
hspain,

Avevo un collega con un atteggiamento simile: "C e PHP mi fanno guadagnare soldi. Perché dovrei perdere tempo a imparare un'altra lingua?" Non ci lavora più.
Greyfade,

3
tutti i requisiti cambiano prima o poi! Questo è il punto.
Zaccaria K,

@hspain - in realtà a causa dell'intero punto dell'esercizio è che Cobol tratta le specifiche I / O come parte del primo ordine di un programma, piuttosto che qualcosa che accade in un modo laissez-faire basato sul modo in cui hai scritto e ordinato il tuo Dichiarazioni di I / O in C. E per fare eco al commento di Zachary K, il fatto è che i requisiti cambiano. - Sì, potresti strutturare un programma in C in modo tale che sia meno fragile quando cambiano cose come i requisiti I / O, ma ciò implica pensare al programma in un modo completamente diverso da come fai normalmente quando scrivi un programma C.
Zeke Hansell,

In realtà non lo sapevo di cobol. Un giorno dovrei andare a dare un'occhiata
Zachary K,

12

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

  1. Aumenta le dimensioni 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 migliore scelta della lingua / piattaforma per risolvere determinati problemi rispetto agli strumenti / lingue che si conoscevano 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, configurazione dell'ambiente, ecc.
  2. Ottenere l'accesso a una nuova piattaforma - un ottimo esempio potrebbe essere l'Obiettivo C - se si desidera sviluppare per iOS, l'apprendimento di questa lingua è quasi obbligatorio.
  3. Scopri nuovi paradigmi: alcune lingue potrebbero avere un migliore accesso ai paradigmi più recenti. Usando C come esempio, potrebbe essere difficile sviluppare servizi web nello standard ANSI C. Tuttavia, imparare a sviluppare in .NET, Java, PHP o altri nuovi linguaggi potrebbe accelerare lo sviluppo di servizi web.

Imparare nuove lingue può offrire vantaggi immediati, come hai già notato, in soluzioni "veloci e sporche". Tuttavia, queste soluzioni immediate potrebbero indurre un programmatore a indagare e approfondire l'architettura associata al nuovo linguaggio per apprenderlo "correttamente". Si possono vedere questi rapidi esercizi di apprendimento come un investimento nell'indagine per stabilire se una nuova lingua merita tempo di addestramento aggiuntivo.


11

In una parola: commerciabilità .

Apri le tue prospettive di lavoro quando puoi dimostrare di avere la capacità di adattarti e apprendere nuove cose. Certo, potresti continuare a scrivere applicazioni usando l'unica lingua in cui sei diventato veramente esperto, ma cosa succede quando scopri che la tua lingua preferita diventa irrilevante per il settore in cui stai lavorando. Ricordo davvero un tempo in cui usavamo per scrivere da zero i nostri servizi Web in C o C ++, al giorno d'oggi utilizziamo strumenti che fanno tutto il "webbiness" sottostante per noi (Think Rails, ecc ...).

Il punto è che finisci come quegli attori che recitano in una serie TV e quindi non riesci facilmente a passare ad altro perché sono visti per sempre come il loro personaggio originale. "Chi diavolo vuole che il Capitano Kirk sia Indiana Jones? !!". Lo stesso vale per i programmatori che hanno sempre usato un solo prodotto. Certo, lo saprai come nessun altro, ma questo non ti aiuterà quando sarai trattato come un fortran che non può passare a lavorare con C #.

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

Naturalmente, ci sono molte altre ragioni 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 ti viene incontro e ti dice "possiamo fare qualcosa", puoi dire Sì con una scelta di strumenti a tua disposizione.


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 convenzionali. Imparare ancora un altro linguaggio OO / imperativo probabilmente non ti insegnerà molto di più su quel tipo di programmazione. A meno che tu non abbia un interesse particolare, non ha senso imparare il sapore del mese sulle specifiche.

Sono anche propenso a essere scettico riguardo alle richieste di aumento della produttività per ordine di grandezza. Tuttavia, potrebbe valere la pena di dare un'occhiata al linguaggio occasionale ad alta produttività, per vedere se ti piace.

Il miglior motivo per imparare una nuova lingua è apprendere le abilità di applicabilità generale. Per questo, consiglierei un tuffo profondo in un linguaggio funzionale (Haskell, o uno dei Lisps) da un lato, e il codice assembly e l'architettura dei sistemi (x86 o ARM) dall'altro.

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


6

Ognuno di noi decide su cosa vogliamo lavorare così ...

  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 mai sapere nemmeno come si scrive PHP.

Molte persone guardano al mercato del lavoro per vedere dove si trovano le aree calde e saltare su quelle tecnologie. Molte persone imparano una lingua e la usano e 20 anni dopo diventano ingegneri della manutenzione legacy. E poi ci sono molte persone che si trovano ovunque tra questi due estremi.

Alla fine, è tutto su ciò che vuoi essere.


Nella tua descrizione, sembra un po 'troppo in bianco e nero. "Tramogge tecnologiche" e ingegneri di manutenzione legacy sono i due estremi dell'IMHO, con la maggior parte di noi seduti da qualche parte nel mezzo. Inoltre, alcuni "hopper tecnologici" sono troppo pazzi per le ultime cose luccicanti per imparare effettivamente qualsiasi tecnologia in modo corretto (che richiederebbe più tempo di quello che sono disposti a investire in qualsiasi singola tecnologia), quindi potrebbero non produrre mai soluzioni solide a lungo termine ai problemi.
Péter Török,

1
@ PéterTörök: modificata la mia risposta. Stavo sottolineando la scala, ma ero troppo pigro per precisare tutto. Hai ragione, è uno spettro continuo.
DXM,

5

L'argomento migliore che conosco è che allarga la tua prospettiva su quanti diversi modi in cui un problema può essere risolto o una logica può essere espressa. Conoscere bene Java e C ++ ti offre una buona visione sia dei regni nativi che VM, 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 alle spalle (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 restare con Java, per esempio, per un dato progetto, dovrai conoscere l'alternativa per presentare dei buoni controprogrammi ai suoi sostenitori.

Tuttavia, ho imparato Python proprio quest'anno, e sono stato felice di quanto elegantemente si possano fare alcune cose. 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 programmazione in C ++ e Java.

Detto questo, non credo che dovresti imparare molte lingue diverse per tutto il tempo, solo per il gusto di farlo. Ci vuole molto tempo, e le "sistemazioni" che dovrai prendere in considerazione per farle coesistere con quelle che già conosci richiedono anche tempo e fatica. Decido di imparare una lingua solo quando ha maturità sufficiente, una buona base di sviluppo e offre risultati significativamente diversi dagli altri che conosco o intendo apprendere. Quando ho deciso di imparare Python, per esempio, ho anche considerato Ruby e Perl, e in seguito li ho scartati - almeno per il prossimo futuro.


5

Le persone imparano nuove lingue per ...

  • ampliare le proprie conoscenze. Se sai di più ti senti meglio e sei più sicuro di te.
    Fiducia = codice fantastico!
  • avere una cassetta degli attrezzi più grande. Diciamo che devi 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.
  • trovare un lavoro. Affrontalo. Se conosci più lingue, hai più opportunità di lavoro. È piuttosto autoesplicativo.
  • diventare un programmatore a tutto tondo migliore. Se conosci la sintassi di Perl, sai che può diventare un po 'folle. Quando scrivi lunghi programmi in Perl, sei praticamente costretto a seguire le migliori pratiche o non sarai un campeggiatore felice. Dato che conosci le migliori pratiche di Perl, questo potrebbe aiutarti a scrivere codice PHP migliore (in un modo o nell'altro).

Come puoi vedere, ci sono molte ragioni per imparare una nuova lingua. Il mio consiglio per te (e la mia unica citazione originale che penso sia buona):

Scrivi il codice frequentemente; Scrivi bene il codice; Scrivi codice in Scheme, PHP, Java, Python, Lisp, Perl, C, C ++, C #, Visual Basic, Ruby ...


1
@Nupul: O almeno penso che la citazione vada così ...
Dynamic

5

Sono d'accordo con la maggior parte delle risposte già pubblicate. Per aggiungere a questi, controlla le statistiche prese dal sondaggio sugli utenti di StackTranslate.it del 2011. C'era un'altissima correlazione tra il numero di lingue conosciute e il denaro guadagnato. Potrebbero non essere direttamente collegati l'uno all'altro, ma è qualcosa a cui pensare.

Le persone che tendono ad imparare più lingue tendono a fare più soldi.

http://blog.stackoverflow.com/2012/02/survey-results/


4

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

È interessante notare quanto sia importante per lo sviluppo della scienza un simbolo dall'aspetto modesto. Può rappresentare la presentazione enfatica di un'idea, spesso un'idea molto sottile, e con la sua esistenza rende facile esibire la relazione di questa idea con tutti i complessi treni di idee in cui si presenta.

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

Tutti i motivi per l'apprendimento di nuove lingue dati finora sono validi, ma penso che il motivo migliore per imparare una nuova lingua sia che una nuova notazione può permetterti di pensare in un modo nuovo che può aiutarti a risolvere nuovi problemi.


2

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

Una buona ragione per non imparare un nuovo linguaggio di programmazione, nel tuo caso, è lasciarti riposare o fare altre cose oltre alla programmazione.

In base alla mia esperienza, lavorando in agricoltura e lavorando con il legno, mi sono molto interessato alla programmazione, più che all'apprendimento di una nuova lingua. vale a dire che 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 nella programmazione provengono direttamente dalla vita quotidiana: semplicità, mantenibilità, pratica, utile, veloce - e talvolta lento , modularità, ecc .; sono tutti concetti usati da un falegname, per esempio.

Che ci crediate o no: personalmente ho imparato molto sui concetti di programmazione, prendendo una lunga vacanza per raccogliere le arance. Il concetto principale da cui ho imparato era: semplicità. Lavorando come costruttore ho imparato un altro concetto: costruire la base il meglio possibile - se vuoi che i muri siano dritti.

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


Anche se potrei essere d'accordo con te, aggiungerei che dopo aver avuto tutte queste buone idee sulla programmazione mentre svolgevo altre attività, vorrei imparare un linguaggio di programmazione in cui queste idee sono implementate. Pertanto, i due aspetti dell'IMO (prendendo una pausa dalla programmazione e apprendendo nuovi linguaggi di programmazione) non si escludono a vicenda.
Giorgio,

È vero che prendersi una pausa dalla programmazione e apprendere nuovi linguaggi di programmazione non dovrebbe (non dovrebbe) escludersi a vicenda. Tuttavia, nel mondo molto veloce in cui viviamo, è importante ricordare che il riposo può essere più produttivo del movimento. Potrebbe essere una pausa caffè - o anche una pausa di 1 anno.
Shian,

-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 l'apprendimento di una nuova lingua di solito ti farà conoscere almeno uno o due, rendendoti più esperto e capace come programmatore. Alcuni potrebbero capovolgere il tuo mondo di programmazione. Ma quando impari una nuova lingua che presenta paradigmi che già conosci, li conosci già e ci sei abituato.


-3

Come molti di loro hanno già scritto, ho una buona conoscenza pratica di C. Recentemente, stavo lavorando su alcuni problemi per i quali avevo bisogno di un controllo incrociato dei risultati; era matematico. Quindi qual è il modo più veloce per ottenere la risposta mi ha dato un calcio per controllare un linguaggio di programmazione più veloce da imparare.

E ho scoperto che bc , un linguaggio di calcolatrice di precisione arbitrario, 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 crash.

È importante solo fino a un certo punto che è necessario conoscere una nuova lingua che faciliterà il tuo lavoro / problema al momento.

Sicuramente, se scrivo questo nel mio curriculum, credo che a nessuno importi, 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.


-8

Chiunque può creare una nuova lingua; ma nessuno sembra capire che "meglio" è raramente lo stesso di "tanto meglio che il costo dell'adozione è effettivamente giustificato". Il risultato finale sono centinaia di lingue diverse, in cui è impossibile per chiunque comprendere tutto il codice sorgente e in cui i programmatori devono perdere circa un quarto del loro tempo a essere improduttivi a causa delle differenze di lingua / framework / libreria.

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

Da un punto di vista "macroeconomico", non c'è niente di sbagliato nell'apprendere un nuovo linguaggio di programmazione come hobby, ma usare quel nuovo linguaggio di programmazione per qualsiasi cosa ti rende parte del problema.


4
Sembra un ideale piuttosto poco pratico. Chi deciderà queste lingue standard e come decidi che valga la pena cambiare una nuova lingua? Che dire del rischio di rimanere bloccati in un linguaggio schifoso solo perché nessuno è disposto a provare qualcosa di nuovo? Immagina di averlo fatto 10 anni fa: tutti possono usare C ++ e Java (o forse VB)!
Ripristina Monica il

3
Il tuo concetto di "mondo ideale" suona sospettosamente come quello di Diciannove ottantaquattro . Nel tuo Newspeak, idee rivoluzionarie come "programmazione funzionale" e "inferenza di tipo" e "polimorfismo di prima classe" e "metodi multipli" non potevano nemmeno essere pensate, perché non ci sarebbe modo di esprimerle. Certo, Orwell non sembra aver pensato alla tua idea di mazza, ma se lo avesse fatto, sono sicuro che avrebbe trovato la sua strada.
ruakh,

2
Oltre ai punti di cui sopra, pochissima della tua "risposta" è rilevante per la vera domanda. Downvote.
user16764,

3
In un mondo ideale, ci sarebbe una sola risposta alla domanda di Nupal. Avere tutte queste risposte aggiuntive dopo la prima da parte di persone che non capiscono le virtù della standardizzazione provoca solo confusione. Non c'è niente di sbagliato nel non essere d'accordo con la risposta nella tua mente, ma pubblicare una risposta aggiuntiva ti rende parte del problema.
benzado,

1
Limitare a quelle lingue non impedirebbe nessuno dei problemi menzionati. Ho dovuto riscrivere l'applicazione molte più volte a causa del cambiamento dei framework rispetto al cambio delle lingue.
Fabio Ceconello,
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.