Vale la pena essere poliglotti di linguaggi per computer? [chiuso]


14

Spesso puoi sentire che i programmatori dovrebbero imparare molte lingue diverse per migliorarsi. Vado ancora a scuola e non ho una grande esperienza di programmazione (poco più di un anno). Ma quale nobile intenzione di migliorare le capacità di programmazione si è trasformata in una sorta di disturbo ossessivo compulsivo: sento che non mi calmerò finché non imparerò tutti i linguaggi di programmazione relativamente conosciuti.

Ed ecco la domanda stessa: essere poliglotti di linguaggi di programmazione ti aiuterà davvero (e non intendo il solito "programmatore dovrebbe conoscere almeno tutti i paradigmi", intendo davvero tutti i linguaggi di cui di solito ascolti)? Qualcuno ha un'esperienza simile? Aiuta con lavoro / competenze / carriera? Con quale frequenza riesci ad applicare queste abilità?


3
Penso che quando le persone suggeriscono agli altri di imparare nuove lingue, si tratta meno dell'apprendimento delle lingue e più dell'apprendimento di nuovi paradigmi. Le mie due lingue principali sono Python e C ++, imparare Haskell è stata una grande esperienza per me, perché mi costringe a pensare in un modo diverso da come altrimenti farei.
Vitor Py,

4
Conoscere tutti i principali paradigmi aiuta davvero molto . Essere esposti almeno un po 'a tutte le lingue interessanti potrebbe in qualche modo aiutare se stai progettando le tue lingue (e non appena entrerai nel paradigma della programmazione orientata alla lingua, probabilmente lo farai).
SK-logic

4
"Un linguaggio che non influisce sul modo in cui pensi alla programmazione, non vale la pena conoscerlo." (Alan Perlis). Amen.

2
@Job, conoscere 10 linguaggi di programmazione richiede solo una piccola parte dello sforzo richiesto per apprendere le basi di una singola lingua parlata.
SK-logic

2
@ SK-logic dipende. Scommetto che posso insegnare a un bambino di 6 anni a parlare spagnolo più velocemente, quindi posso insegnargli il pitone.
Raynos,

Risposte:


10

"Il programmatore dovrebbe conoscere almeno tutti i paradigmi"

Questo aiuta

Intendo davvero tutte le lingue di cui di solito ascolti

Questo non aiuta. Sebbene una volta che conosci tutti i paradigmi puoi imparare una lingua a settimana.

È semplicemente più ottimale passare una settimana a imparare quella lingua quando hai bisogno di quella lingua.

Un buon programmatore è un programmatore pigro

Nota a margine:

L'apprendimento delle lingue comuni / popolari non è utile quanto l'apprendimento di "tutti i paradigmi". Il primo non copre il secondo. Ad esempio, l'apprendimento del Sé è incredibilmente utile per comprendere OO prototipico. Non è una lingua comune né popolare, ma è molto più utile dell'apprendimento del pitone quando conosci già il rubino.

Progettazione linguistica:

Conoscere la maggior parte delle lingue è utile se si scrive / si progetta una nuova lingua. Quindi c'è un solido caso d'uso per questo, ma è piuttosto di nicchia.

Quello che ti consiglio di fare invece:

Leggi il codice Completa 2 almeno 3 volte

Le lingue vanno e vengono a destra e sinistra a seconda di "ciò che è popolare". La tecnologia diventa obsoleta dopo mesi o anni a seconda di come è la curva tecnologica. (Il web deprezza la tecnologia a una velocità di ogni 6 mesi).

La tecnica di programmazione e la teoria dell'informatica rimangono sempre le stesse.


Ma ci sono molte caratteristiche secondarie interessanti nelle lingue e persino l'apprendimento di una nuova lingua da un paradigma già noto può farti saltare la testa (per esempio per me era Smalltalk)
Anton Barkovsky,

@AntoBarkowski è un'affermazione falsa, non confrontare SmallTalk con altre lingue OO. Java / C ++ / C # / etc. non sono vere lingue OO. Ovviamente vale la pena imparare SmallTalk, ma non è lo stesso paradigma;)
Raynos

6
La gente continua a dire "puoi imparare una lingua a settimana", ma non è vero. Certo, sarai in grado di scrivere codice sintatticamente corretto in quella lingua, ma c'è di più. Ad esempio, C # e Java sono molto simili sintatticamente e sono entrambi linguaggi OO. Tuttavia scrivere codice Java in C # non ti rende un programmatore C #.
R0MANARMY,

3
@ R0MANARMY "<buoni programmatori> possono imparare una lingua in una settimana". Una lingua non include librerie, framework e API. La mia definizione di buoni programmatori potrebbe essere molto alta.
Raynos,

1
@ R0MANARMY, quale di quei minuscoli bit semantici non importanti che hai citato può richiedere più di un'ora per comprendere?
SK-logic

4

Non si tratta di saper codificare in una moltitudine di lingue, si tratta, come dici tu, dei paradigmi. Più opzioni conosci e meglio è. Conoscere più lingue sicuramente aiuta, ma se continui ad imparare gli stessi tipi di lingue, raggiungerai rapidamente un vicolo cieco.

La chiave è sapere quale lingua / sistema è meglio implementare una parte del tuo progetto. Anche se hai deciso una lingua principale (come la maggior parte dei progetti fa), avrai comunque tutti i tipi di strumenti, script, automazione e supporto di costruzione che devono essere scritti. Di solito una varietà di altre lingue o strumenti, sono migliori in questo rispetto alla tua lingua principale.

Giusto per chiarire, trovo sciocco cercare di imparare tutte le lingue di cui effettivamente si sente parlare: ce ne sono centinaia e spesso sono solo lievi variazioni su altre lingue.


3

IMHO, non lo è. Innanzitutto perché non puoi imparare una lingua in meno di un anno. Ci vogliono 2 giorni per essere in grado di scrivere codice in esso, ma ci vuole molta esperienza per scrivere codice fluente e ben formato per la lingua data. Perché GC funziona così, dove allocare memoria, quali costrutti sono più veloci, come concatenare correttamente le stringhe, quali sono gli angoli pericolosi della lingua, ecc.

Scrivo terribile codice Java / .NET essendo sviluppatore C ++, poiché molti sviluppatori Java scrivono terribile codice C ++.

La parte migliore dell'apprendimento di altre lingue è l'apprendimento di nuovi paradigmi e forse uno strumento migliore per alcuni problemi concreti. Dì: hai bisogno di un'app GUI molto rapida e non pubblica, .NET è insostituibile lì.

Ma imparare un linguaggio in modo da non usare le strutture in .NET o non perdere tutti gli oggetti in C ++ richiede molto tempo. Penso che sia meglio spenderlo per l'apprendimento dei principi di progettazione, delle piattaforme e del linguaggio che preferisci.

Ma questa è solo la mia opinione.


2
"perché non puoi imparare una lingua in meno di un anno" Falso. Non confondere l'apprendimento di una lingua con l'apprendimento dei quadri popolari che espone. Aggiungere anche "tecniche di programmazione generale" all'elenco alla fine.
Raynos,

@Raynos: ho pensato che fosse quello a cui si stava riferendo.
Steven Jeuris,

1
Il mio modo preferito di giocare con una nuova lingua è implementare un compilatore per un sottoinsieme decente di esso. In totale ci vogliono 2-4 ore per capire la lingua e essere in grado di identificare e rubare le migliori funzionalità da essa. Non quasi un anno, nemmeno un giorno.
SK-logic

1
Bene, se ti unissi a un grande progetto C ++ e arrivassi a un'intervista con parole come "Ho programmato in Java per 10 anni, ma ho trascorso gli ultimi 6 mesi su C ++, quindi conosco il linguaggio". Dubito che otterresti una posizione di sviluppo senior altamente pagata per quel lavoro. Quindi, no, penso ancora che non potrai imparare una lingua in circa un mese.
Coder

2
@Coder, se ti unissi a un grande progetto C ++ e arrivassi a un'intervista con parole come "Ho programmato in 20 lingue per 10 anni, incluso C ++", probabilmente avresti un lavoro.
SK-logic

2

Non è pratico per conoscere loro, ma può essere molto utile per sapere su di loro. Quello che voglio dire è che quando si ottiene un nuovo problema, si può dire: "Ricordo vagamente [un'altra lingua] che aveva un modo superiore per risolvere problemi come questo. Dovrei cercarlo."


Trovo che podcast come SE Radio siano utili. Spesso hanno la lunghezza giusta da ascoltare durante il viaggio e puoi imparare molto in questo modo. Ma è nella forma Why is <X> Interessante.
Zaccaria K,

1

Aiuteresti di più la tua carriera sviluppando le conoscenze del dominio e imparando molti linguaggi di programmazione. Per non parlare del fatto che avrai bisogno di imparare strumenti extra come quello di utilizzare un profiler nella tua lingua, lo stesso per il debugger, il miglior framework GUI e come programmare rapidamente con esso, quali librerie di terze parti comuni esistono con compromessi e modi di dire specifici della lingua.

È anche più saggio imparare a fare più cose piuttosto che molti modi di fare la stessa cosa.


1

Ho lavorato su diversi sistemi in cui i componenti sono stati scritti in più lingue (il peggior trasgressore mi ha richiesto di consegnare il codice scritto in Ada 83, C, Fortran 77, SQL e DCL, mentre il mio ultimo lavoro mi ha richiesto di fornire codice C ++ e Java ). Quindi, sì, ci sono casi del mondo reale in cui è necessario conoscere più lingue abbastanza bene per essere produttivi in ​​esse (produttivi! = Competenti; non sarai un esperto profondo in C ++ e Java e ... a meno che tu non sei un mostro).

Oltre a ciò, il punto di prendere tempo per imparare più lingue è quello di aiutare distinti concetti di implementazione . Per me, OOP non ha iniziato ad avere senso fino a quando non ho lavorato con più OOPL. Inoltre, ad un certo punto della tua carriera, si dovrà avere a cambiare rapidamente marcia e iniziare a lavorare su qualcosa di totalmente nuovo e sconosciuto; impiegare un po 'di tempo per andare oltre ciò che è necessario sapere contribuirà a rendere più facile la transizione quando si verifica.


1

Penso che ti servirebbe meglio imparare alcune lingue diverse e quindi almeno una in profondità prima di intraprendere la necessità di imparare ogni lingua possibile. Una volta che hai un minimo di ampiezza, la profondità diventa davvero importante per i tuoi progressi come sviluppatore. Avrei visto qualcuno con una profondità in una o due lingue e un'infarinatura di un paio di altre rispetto a qualcuno con un'infarinatura di tutto. Ottenere profondità è come imparare un altro paradigma, cambierà il modo di pensare alla programmazione e aprirà le porte a progetti entusiasmanti davvero complessi.


0

È come imparare a parlare molte lingue. Impararli tutti al punto di essere utili è quasi impossibile. Attenersi a quelli che probabilmente userete e starete meglio. Potresti imparare C ++, C # e Java abbastanza bene, ma provare a spremere in Perl, Python, VB (non VB.NET), Ruby e JavaScript a un livello professionale allo stesso tempo è semplicemente stupido. Non ci sono abbastanza ore al giorno per mantenere le tue abilità tutte in una volta.

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.