Esiste la possibilità che qualcuno che abbia imparato tutti gli aspetti chiave del C ++ e conosca molto bene i fondamenti della lingua, imparerà altre lingue (come Python, Perl, Java) più velocemente e più facilmente?
Esiste la possibilità che qualcuno che abbia imparato tutti gli aspetti chiave del C ++ e conosca molto bene i fondamenti della lingua, imparerà altre lingue (come Python, Perl, Java) più velocemente e più facilmente?
Risposte:
Una profonda conoscenza di qualsiasi linguaggio di programmazione è probabile che ti aiuti a imparare altre lingue più velocemente. Questo è in parte così perché la programmazione è un modo di pensare più di quanto non sia l'apprendimento della sintassi. La maggior parte delle pratiche di programmazione sarebbe vera per la maggior parte degli altri linguaggi di programmazione. Ecco perché la gente dice che impari sempre il secondo linguaggio di programmazione più velocemente del primo.
Il C ++ è un linguaggio che consente un "controllo" molto maggiore rispetto ad altre lingue. Questo può essere sia buono che cattivo. Ad esempio, una vera pistola è meglio di una pistola ad aria quando vai nella foresta (perché puoi effettivamente abbattere qualcosa con essa), ma è anche più pericolosa per te e per quelli che ti circondano. C ++ ha concetti come la gestione della memoria, di cui non devi preoccuparti nella maggior parte delle altre lingue. Avere una solida conoscenza di questi concetti è tutt'altro che inutile anche quando si lavora con linguaggi di gestione automatica della memoria. Puoi anche eseguire operazioni bit per bit e scendere molto al "metal" con un linguaggio come C ++. Anche una conoscenza di base in queste aree può aiutarti molto come programmatore in qualsiasi lingua.
Personalmente ho imparato Java per quasi 3 anni prima di imparare il C ++, e dovrei dire che me ne rammarico (corso uni ...). Ciò ha reso l'apprendimento del C ++ (sto ancora imparando - lungi dall'essere una conoscenza "profonda": D) non così semplice come mi piacerebbe. Se l'avessi fatto al contrario direi che sarebbe stato molto più facile per me. Soprattutto quando sai PERCHÉ qualcosa viene fatto in un modo specifico, e non solo ti assicuri dell'automagia della lingua. Se mi è permesso di esprimere un'opinione, suggerirei: C (per i paradigmi di programmazione universale e di base) -> C ++ (per la comprensione di base di OOP insieme alla gestione della memoria) -> Quindi puoi andare in qualsiasi linguaggio "reale" di OOP con un buona base oppure puoi continuare con argomenti più avanzati in C ++, tutto a seconda di ciò che
OR
eAND
Sfortunatamente no. Questo in realtà è un grosso problema quando insegni il C ++ nelle lezioni di programmazione, in particolare le lezioni di livello principiante: puoi imparare i principi di programmazione o puoi imparare il linguaggio C ++, ma il linguaggio C ++ ha troppe insidie e stupidi piccoli trucchi per imparare entrambi in modo efficace all'interno l'ambito di una classe di un semestre!
Ci sono molte cose che sono state provate in C ++ e alla fine sono diventate idiomatiche nel linguaggio per pura inerzia, che praticamente ogni altra lingua da quando ha guardato e respinto perché si è rivelato essere un enorme errore. I principali sono i modelli di C ++ e il modello di oggetti di C ++ (gli oggetti come tipi di valore non sono mai una buona cosa, perché interrompono la sostituzione di Liskov e mille OOP stesso).
Quindi se prima acquisisci una profonda conoscenza del C ++ e poi vuoi imparare altri linguaggi di programmazione, ci sarà un sacco di roba dannosa e controproducente che dovrai disimparare per essere efficace in altri linguaggi di programmazione.
No. Conoscere bene il C ++ renderà più facile l'apprendimento di altre lingue come il C ++. Ma sarebbe noioso. Perché vorresti conoscere due lingue uguali? Questo non ti compra nulla. (Nota che questo non è specifico per il C ++. Si applica a qualsiasi lingua. Confronta con le lingue naturali: imparare l'italiano non renderà più facile l'apprendimento di altre lingue. Semplificherà l'apprendimento dello spagnolo, del francese o del portoghese e l'apprendimento di tre di questi renderà più facile l'apprendimento della quarta, ma anche l'apprendimento di tutte le lingue romanze non ti aiuterà a imparare un po 'finlandese, cinese, hindi, ebraico, arabo, pashtu, greco, ecc.)
I linguaggi di programmazione implementano paradigmi. Peter van Roy ha raccolto un poster dei 34 principali paradigmi di programmazione .
I paradigmi, a loro volta, sono composti da concetti. Quel poster elenca circa 18 concetti.
Tutti i paradigmi (o almeno quelli nel poster) sono composti da quei concetti. Tutte le lingue implementano uno o più paradigmi composti da tali concetti. Quindi, se impari quei concetti, imparerai (in un certo senso) tutti i linguaggi di programmazione contemporaneamente.
Naturalmente ci sono ancora molte stranezze specifiche per la lingua (sintassi tra loro). Inoltre, quel poster ignora completamente la digitazione, e c'è ovviamente una differenza significativa tra un sistema di tipo System F <: ω , un sistema di tipo Scala o un sistema di tipo dinamico duck duck, per non parlare di un sistema di tipo dipendente à la Idris, Agda, Coq, Guru o ATS.
Direi che conoscere profondamente qualsiasi linguaggio di programmazione aiuterà a imparare gli altri, almeno altre lingue nella stessa famiglia. Ad esempio, la conoscenza del C ++ non aiuterà molto con LISP o Haskell, ma per i linguaggi procedurali orientati agli oggetti, lo farà. Il mio approccio è stato quello di cercare di imparare una lingua da ciascuna delle diverse famiglie (procedurali, funzionali, orientate agli oggetti, ecc.) Delle lingue, quindi quella conoscenza può essere trasferita in altre lingue di quella famiglia. D'altra parte, una profonda conoscenza di APL non aiuterà con nient'altro ...
Prenderò un'interpretazione diversa qui.
Il C ++ è un buon linguaggio per l'apprendimento della memoria e delle strutture di dati, poiché ti costringe a pensare attentamente a concetti come la proprietà dell'oggetto e la durata della vita. E conoscere le strutture di memoria e dati è una delle parti essenziali di qualsiasi curriculum di ingegneria del software.
Ma devi conoscere le strutture di dati. Se semplicemente "impari il C ++", non otterrai molto, e potrebbe rallentare il processo di apprendimento di altre lingue nel breve periodo.
Quando ero al college, Data Structures era un corso richiesto a livello di matricola, seguito da CS1 (che almeno metà della classe aveva posto fuori). Era difficile. Il formato del corso era sostanzialmente "Ecco una struttura di dati che non hai mai visto prima [ad esempio un heap di sinistra ]. Implementalo in C ++ in una settimana e fai in modo che il tuo output corrisponda esattamente al nostro output previsto, byte per byte, quindi noi può classificarlo automaticamente. " Quindi, la prossima settimana otterrai una nuova struttura di dati e un nuovo incarico. Probabilmente ho imparato di più in quel corso rispetto a tutti gli altri corsi messi insieme.
Questo è il tipo di apprendimento che devi fare affinché C ++ sia prezioso.
Ogni lingua che impari rende più facile l'apprendimento della prossima, specialmente all'interno dello stesso paradigma. Si indebitano pesantemente l'uno dall'altro, e dopo un po 'si arriva al punto in cui una nuova lingua sembra semplicemente una raccolta di funzionalità di altre lingue, con alcuni colpi di scena unici.
Non credo che il C ++ sia migliore o peggiore di qualsiasi altro linguaggio in questo senso. È una delle lingue più prolisse che conosco e rende difficili alcune cose che sono facili nella maggior parte delle altre lingue, ma ciò non si traduce necessariamente in una lingua più facile da imparare . In genere, tuttavia, rende la lingua successiva più facile da usare . C'è una differenza
No. Una conoscenza approfondita di C , o del sottoinsieme di C ++ che è "fondamentalmente C", aiuterà durante l'apprendimento di altre lingue, almeno quando si immagina cosa devono fare le loro implementazioni. Una profonda conoscenza del C ++ , d'altra parte, sarà principalmente un'informazione confusa o irrilevante nell'apprendimento di altre lingue; se impari l'orientamento agli oggetti di C ++ a più di un livello di superficie, ad esempio, quando passi a Perl / Python / Ruby, trascorri più tempo a imparare ciò che sai che a usarlo, poiché gli oggetti in quelle lingue sono implementati in un modo completamente diversoche in C ++. La stessa cosa è vera in misura maggiore o minore per la maggior parte delle altre lingue e per le altre funzionalità linguistiche (ad esempio, i modelli C ++ e il polimorfismo di Haskell sono sostanzialmente la stessa funzionalità, con, di nuovo, implementazioni completamente diverse). Quindi la conoscenza approfondita del C ++ sarà principalmente specifica per il C ++.