Fa male imparare bit di molti linguaggi di programmazione?


37

Ho iniziato la mia carriera di programmatore con BASIC, durante la terza media. Ho imparato un po 'di BASIC scrivendo semplici programmi da aggiungere, sottrarre e stampare. Poi sono andato all'università e ho preso l'informatica e l'ingegneria dei sistemi. Nel primo anno mi è stato insegnato C e ho una buona padronanza su di esso.

Successivamente ho imparato il C ++ nel secondo anno. Mi ha appena insegnato alcune conoscenze di OOP. Ora sto facendo PHP (insieme a HTML). Non ho imparato C ++, BASIC o PHP. Sto programmando di passare allo sviluppo mobile. Ma sento di non aver coperto tutto nelle lingue che ho imparato.

Importa davvero?

Risposte:


50

Stiamo solo imparando pezzi di linguaggi di programmazione. Considererei solo gli implementatori di linguaggio quelli che sono un 10 su 10 nella conoscenza di una lingua.

Imparare più lingue e paradigmi è l'unico modo per sviluppare un "gusto" per ciò che ti piace e non ti piace. Se avete imparato una sola lingua, non sarebbe nemmeno in grado di veramente decidere se anche piaccia o no.

In realtà lo stai facendo nel modo giusto. Sarai in grado di riutilizzare i fondamenti più importanti che impari in ciascuno ottenendo esposizione a diverse sintassi, librerie e framework.


16
Mi piace questa risposta, tranne che è meno "quello che ti piace" ed è più "lo strumento giusto per il lavoro". Nessuno dovrebbe usare la stessa lingua per risolvere ogni problema. Ciò renderebbe un cattivo sviluppatore di software. Ogni lingua e paradigma hanno pro e contro.
user606723

1
Dato che compilatori e interpreti hanno dei bug, non penso che sia umanamente possibile arrivare a 10 per la maggior parte delle lingue.
jmoreno,

6
Non penso che nemmeno le persone che scrivono compilatori C ++ capiscano il C ++. Individualmente, intendo. Ovviamente collettivamente, devono in qualche modo comprendere l'intera lingua, ma non penso che ci sia una sola persona su questo pianeta che capisca tutto. In effetti, i membri del comitato sono di solito abbastanza chiari sul fatto che tutti comprendono solo la propria area di competenza. Allo stesso modo in Java: Martin Odersky ha recentemente affermato di credere che ci siano solo 3 persone al mondo che capiscono i caratteri jolly. E dal tono dell'e-mail ho avuto l'impressione che non si includesse
Jörg W Mittag

2
in quel gruppo, anche se in realtà ha progettato Java Generics (insieme a Phil Wadler, ovviamente). Anche se, per essere onesti, i caratteri jolly sono stati aggiunti al suo design senza il suo consenso, in realtà, contro il suo dissenso espresso.
Jörg W Mittag,

1
@brian, fidati di me, non devi conoscere la lingua per poter implementare il suo compilatore. Puoi semplicemente tradurre le specifiche in un codice alla cieca. Ma come risultato di ciò imparerai almeno alcune nozioni di base sulla lingua - ecco perché è il mio modo preferito di apprendere le nuove lingue.
SK-logic,

21

Se sei ancora all'università, non dovrebbe ancora importare che non pensi di aver coperto tutto in nessuna delle lingue che conosci. Comprendere le teorie fondamentali comuni alla base di queste lingue è molto più importante. Una volta comprese le nozioni di base, puoi apprendere i dettagli di altre lingue quando ne hai bisogno.


5
Nei miei primi due anni penso che abbiamo scelto una nuova lingua ogni 3-4 settimane per andare con il Pascal che era la base della maggior parte del nostro lavoro di progetto (1982-85) - alcuni di questi erano linguaggi funzionali. Parte del punto era cercare di garantire che abbiamo separato la "programmazione" dalla "codifica"
Murph

12

Credo che il più importante nella programmazione sia comprendere i diversi paradigmi .

Nella tua domanda hai menzionato la programmazione orientata agli oggetti (OOP) . Se hai imparato questo argomento, dovresti essere in grado di spiegarlo usando solo pseudo-codice e essenzialmente una rappresentazione grafica di modellazione (come i diagrammi di classe UML).

Che tu decida di utilizzare Java, C ++ o C # (...) dipende da te o dalla società per cui lavori, ma ciò che è veramente importante è capire / riconoscere i diversi problemi e decidere il modello migliore per risolverli . Un modo molto importante per risolvere i problemi di programmazione consiste nell'utilizzare i modelli di progettazione che è possibile scoprire in questo libro di consultazione .

Per quanto riguarda le lingue integrate, credo che l'importante sia capire i diversi problemi associati a tali tecnologie.

In modo metaforico, lo paragonerei allo scrivere un buon libro scientifico; ciò che è importante è la teoria che esponi, i problemi che riesci a risolvere e così via. Alla fine, scrivere il libro in inglese, in francese o in giapponese non è così importante.

Detto questo, è anche importante conoscere i dettagli di una determinata lingua se si desidera specializzarsi in quella tecnologia per sfruttarla in modo molto efficiente.


2
+1 per i paradigmi. Non è importante concentrarsi sullo zucchero sintattico del linguaggio X o Y (ovviamente è necessario che se si utilizza il linguaggio X ogni giorno al lavoro); ciò che è utile è studiare diversi paradigmi perché IMHO ti aiutano ad essere più aperti e creativi nella risoluzione dei problemi.
sakisk,

5

Secondo me, non ha molto senso cambiare lingua molto frequentemente. Non ne afferrerai mai nessuno. Soprattutto alcuni come C ++, dove alcune persone trascorrono un decennio a scrivere la lingua e hanno ancora il loro codice simile a C.

Se non riesci a scrivere le migliori pratiche in una lingua, allora non andare avanti, IMO. Ciò significa che per coprire più di una coppia ci vorranno molti anni, se non decenni.


5

Penso che non farà male imparare un po 'di molte lingue diverse, ma allo stesso tempo dovresti imparare almeno una o due in profondità.


3

Ho usato molte lingue durante la mia carriera, come AMOS Basic, Java, C ++, PHP, VB6, Delphi ecc. Oggi uso C #, JavaScript, Ruby e alcuni Clojure al lavoro, e ho anche suonato con Pyhton, Erlang, Lisp e schema comuni.

Ma quest'autunno ho voluto creare un calendario speciale per il mio blog e ho deciso di familiarizzare con me stesso e risolvere un problema particolare in 24 lingue aggiuntive. Questa è stata una grande esperienza, ho imparato molto e consiglio vivamente di farlo una volta che hai esperienza di programmazione.

La mia risposta è questa: impara davvero un paio di lingue (dovrebbero essere abbastanza diverse), ma assicurati di assaggiare e familiarizzare con molte.

Oggi è importante conoscere bene sia OOP che FP (programmazione funzionale) e dovresti anche sentirti a tuo agio in un linguaggio molto statico e molto dinamico.

PS: Il mio blog è in norvegese, ma se desideri vedere l'elenco delle lingue che ho coperto puoi dare un'occhiata qui .


2

Imparo quello che devo imparare in una lingua particolare quando devo imparare qualcosa di nuovo. Il "trigger" che mi dice che ho bisogno di approfondire una lingua è che un particolare bit di codice sembra brutto o goffo, sembra non mantenibile o è difficile da testare o commentare. Spesso questi trigger indicano la mia mancanza di conoscenza di un particolare linguaggio di programmazione, stile, struttura dei dati e così via.


2

L'apprendimento di più linguaggi di programmazione è una buona pratica ed è necessario al giorno d'oggi; tante volte non puoi sempre usare la tua lingua preferita per tutto.

I vantaggi di vedere come le altre lingue fanno le cose ti aiuteranno come programmatore; anche se occasionalmente quando si stanno saltando intorno si commettono errori sintattici (ad esempio, sta controllando per la disuguaglianza !=, ~=o <>). Dovresti stare attento però a imparare qualcosa di più della semplice sintassi di una lingua, ma delle migliori pratiche all'interno di una lingua e delle buone capacità generali di ingegneria del software. Roba se hai imparato il C e poi hai imparato il C ++ dovresti assicurarti quando scrivi il codice C ++ che è nello stile del codice C ++ (piuttosto che solo C con alcune nuove parole chiave. Cioè hai più classi / oggetti, preferisci i riferimenti / puntatori intelligenti su puntatori non elaborati, ecc.


1
Non farmi iniziare Se x <b> = </b> 5 Quindi. Devo ricontrollare tutto il mio codice C per circa una settimana dopo aver mantenuto tutto ciò che riguarda BASIC.
user606723

2

è bene studiare almeno linguaggi da diversi paradigmi di programmazione! Linguaggio procedurale, dichiarativo, funzionale, orientato agli oggetti, prototipico e dinamico: ogni classe di programmazione offre il suo punto di vista su come organizzare e risolvere un problema. Alla fine scopri uno o più paradigmi di cui sei più produttivo e soddisfatto e lo usi.


2

Sicuramente no. Naturalmente vuoi anche assicurarti di apprendere diversi stili di lingue. L'apprendimento sia di C # che di Java non amplierà la tua mente in alcun modo importante, ma imparerà Java e Haskell.

Dai un'occhiata al libro Seven Languages ​​in Seven Weeks , che ti guiderà attraverso un'introduzione a Ruby, IO, Scala, Erlang, Prolog, Clojure e Haskell. SE ti piacciono le lingue, adorerai quel libro.


1
Imparare C # dopo Java potrebbe ampliare la tua mente grazie alla sua programmazione funzionale (e altre caratteristiche che mancano a Java). Ma se è solo per l'apprendimento, Haskell probabilmente sarà molto meglio, a causa di quanto sia puramente funzionale.
svick

1

Bene, C e C ++ non ti danneggeranno nella programmazione mobile. Puoi utilizzare entrambi con Cocoa Touch o Android NDK e, a volte, è necessario per le prestazioni. Inoltre, a volte lo vuoi perché vuoi scrivere codice che gira su diverse piattaforme. In tal caso, supponendo che non si stia utilizzando solo un framework di terze parti, è possibile scrivere l'app in C / C ++ e compilare in wrapper specifici della piattaforma per gli elementi nativi richiesti (ad esempio, l'unico modo per ottenere un contesto OpenGL su iPhone è utilizzando la classe CAEAGLLayer nativa).

Quindi è come più strumenti hai nel cassetto, più opzioni hai per fare il lavoro. Scoprirai di avere una preferenza per alcuni mentre sei specializzato in vari tipi di attività. Se fai solo cose dell'interfaccia utente, C potrebbe non essere il tuo preferito di tutti i tempi. Mi preoccuperei di più del tipo di cose che avrei voluto fare e poi avrei imparato tutti gli strumenti di cui avevo bisogno per realizzarle.


1

In realtà è utile quanto imparare un po 'di francese, spagnolo, inglese, arabo, hindi e cinese senza mai conoscerne nessuno.


6
Non ho idea di cosa stavi cercando di dire.
svick,

Ti rendi conto che la maggior parte di noi non conosce "bene" nemmeno le nostre lingue native, giusto?
Spidey,

1

Al contrario, penso che faccia male quando non riesco / non sono in grado di imparare un nuovo linguaggio di programmazione. Potrebbe essere a causa della mancanza di tempo o di altri motivi. Per quanto vedo, i programmatori / sviluppatori di software sono innamorati di sfidare le lingue, mettere cose / prodotti migliori e quando vedi che fai sempre la stessa cosa, non ti senti bene. Quindi vuoi una nuova sfida, una nuova lingua, qualcosa di nuovo da imparare e mettere più prodotti da essa.

Quindi penso che mi dia entusiasmo seguire nuove lingue, nuove biblioteche, nuovi approcci, nuove tecnologie. Ma non ho tempo per ottenerli tutti e le persone potrebbero non essere in grado di approfondire sempre sempre. Quindi fa male non imparare di più; ma non fa male per saperne di più.


0

Sono d'accordo con Brian, FrustratedWithFormsDesign e SRKX, ma vorrei aggiungere che durante l'università questo, ampliare le tue conoscenze con più linguaggi di programmazione e paradigmi, è il modo desiderabile per diventare un buon professionista.

È davvero improbabile che tu esca dal college come programmatore formato. La programmazione è un mestiere difficile e avrai bisogno degli anni nel settore a fianco di buoni programmatori, frequentando buoni programmi di formazione e riunioni della comunità e, soprattutto, dovrai affrontare i problemi del mestiere e fallire molto, fino a quando non impari a padroneggiare esso.

Imparare più paradigmi, più lingue, risolvere i molteplici problemi della nostra area, ti fornirà una buona base di supporto per apprendere il mestiere da solo, quotidianamente, agendo come professionista nel settore.

Puoi frequentare un corso di compilatori, ma non uscirai come designer di lingue, creatore o persino come sviluppatore di compilatori. Otterrai i passaggi, i processi, i problemi e le soluzioni di base, e questo ti darà il vantaggio di adattare questa conoscenza a una vasta gamma di problemi.


0

Risposta breve: No.

Risposta lunga: gran parte del lavoro di un programmatore, ingegnere del software o designer è indipendente da un linguaggio specifico ma molto dipendente da una determinata metodologia. Ad esempio, la programmazione orientata agli oggetti riguarda in gran parte dove esistono le cose in memoria e in fase di esecuzione, quanto sono accessibili e quanto sono disponibili per un uso successivo (eredità e incapsulamento). Le implementazioni differiscono, come Java che ha un oggetto di classe ereditato di livello superiore, che ti piaccia o no, e C ++ che non ne abbia uno che non specifichi.

Molte lingue condividono funzionalità (e molte divergono). La sintassi differisce, ovviamente, ed è più complicata quando si confrontano paradigmi completamente diversi come imperativo contro funzionale. Ma l'elaborazione delle stringhe è in gran parte la stessa ovunque tu vada, una volta che hai qualche piccolo problema di sintassi, indice e mutabilità. Qualsiasi linguaggio con tipizzazione statica generalmente ha qualche metodo di fusione e coercizione, ma come e quando puoi farlo dipende dal progettista della lingua.

La lingua è lo strumento. Stai solo mettendo più strumenti nella tua cintura. Ma lo strumento è buono solo come l'artigiano che lo maneggia.

Ora, quanti ne impari sono una scelta personale. Non imparerei mai una lingua per il gusto di impararne una nuova. Qualsiasi scelta per imparare una nuova lingua è dettata da un requisito del corso (dovuto prendere js, php e R per una singola classe l'anno scorso), un requisito di progetto esistente (se il 90% del lavoro è svolto in perl 6 prima vieni assunto, così è il restante 10% dopo) o un vantaggio specifico dell'applicazione (R sopra dire Java combinato con una libreria zuccherina per l'analisi statistica).

Detto questo, vuoi imparare cosa c'è là fuori e disponibile. Il mio college ha tenuto un corso su questo argomento, Programmazione dei concetti linguistici . Si è trattato di un ampio corso di panoramica, non di una matematica rigorosa o di una codifica, che copriva le basi di ciò che poteva essere considerato pratico piuttosto che teorico. È stato un ottimo corso e vorrei che fosse qualcosa offerto nel 1 ° -2 ° anno piuttosto che nel 3 ° -4 °. Il testo era Concetti di programmazione linguistica . Non dire che devi uscire e leggere questo libro, ma certamente allargherebbe i tuoi orizzonti.


0

Bene, per come la vedo io non devi imparare ogni singolo linguaggio. Ma prova ad imparare le funzionalità di base che saranno richieste anche in altre lingue.
Ad esempio, i concetti OOPS sono richiesti in tutte le lingue, Java , PHP o qualsiasi altra lingua.
Allocazione della memoria concetti di sono abbastanza simili in molti linguaggi di programmazione. Questo tipo di argomenti da non perdere. Ogni lingua ha grammatica e regole, lo stesso vale per i linguaggi di programmazione; Dennis Ritchie stesso ha accettato questo fatto. Quindi si dovrebbe imparare la grammatica di quella lingua. Ma il modo in cui la vedo è che devi imparare i fattori non comuni tra due linguaggi di programmazione. Ti permetteranno di identificare quale lingua rappresenta cosa. Il C ++ è tutto OOP di base (programmazione orientata agli oggetti), quindi una volta appresi i concetti di OOP , imparerai la grammatica che vedrai anche in PHP e Java. Il mio flusso di apprendimento era:



Visual Basic 5 (parziale) -> HTML 2.0 (parziale) -> C (parziale) -> CPP (parziale) -> Java (parziale)
e poi ho imparato di nuovo C Language seguito da C ++ seguito da JAVA (completare questa volta) quindi Mi sono trasferito su Android perché conoscevo Java e XML(parziale) e l'ho imparato nel frattempo. Il primo tentativo mi ha insegnato meno, ma nel secondo tentativo assicurati di imparare tutto ciò che ti aiuterà la prossima volta.


questo post è piuttosto difficile da leggere (wall of text). Ti dispiacerebbe modificarlo in una forma migliore?
moscerino
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.