Apprendimento delle lingue: prima di alto livello o prima di livello inferiore? [chiuso]

4

Ogni volta che imparo su un linguaggio di alto livello che voglio imparare, una parte di me dice: "Probabilmente dovrei imparare il linguaggio di livello inferiore su cui è costruito per padroneggiarlo veramente". Ad esempio,

Ruby    => C
Closure => Java
Elixir  => Erlang

La mia esperienza con Ruby e C mi fa pensare di averlo fatto all'indietro. Ho imparato prima Ruby e penso che sia stata una buona introduzione a molti concetti. Forniva un contesto generale che rendeva l'apprendimento C molto più semplice di quanto sarebbe stato altrimenti. Certo, Ruby è stata anche la prima lingua che ho appreso in modo approfondito, quindi alcuni potrebbero essere studiati per familiarizzare con i concetti di calcolo in generale, piuttosto che con qualsiasi esperienza specifica della lingua.

Penso che sia bello sapere cosa succede sotto le copertine, anche se si tratta di un livello in cui non lavori regolarmente. Ma è generalmente meglio adottare un approccio dall'alto verso il basso o dal basso verso l'alto quando si imparano nuovi lingue?

    
posta ivan 09.09.2016 - 01:38
fonte

4 risposte

8

Questo può sembrare uno sbaglio, ma onestamente .... fai entrambi, se puoi.

I linguaggi di livello superiore sono ottimi per insegnare concetti di alto livello; puoi realizzare molto, molto rapidamente e apprendere buone pratiche e modelli di progettazione. L'apprendimento di un linguaggio di alto livello può insegnarti a guardare i problemi in un modo complesso e suddividerli in parti componibili. Credo che con molti linguaggi di alto livello (linguaggi dichiarativi, linguaggi funzionali, programmazione logica), sia più facile concentrarsi sull'obiettivo finale, insieme ai modelli e alla scomposizione necessari per raggiungere tale obiettivo.

I linguaggi di livello inferiore sono ottimi per capire cosa succede a livello hardware e penso che siano indispensabili. La ragione è questa; le lingue di alto livello sono generalmente basate su linguaggi di livello inferiore. L'apprendimento di un linguaggio di basso livello consente di vedere oltre le astrazioni e risolvere i problemi relativi alle perdite nell'astrazione; sono eccellenti per insegnare i fondamenti e sono anche bravi nell'insegnare a un programmatore come fare attenzione (e quali trucchi cercare che un linguaggio di livello superiore possa mascherare, come la gestione della memoria).

Suggerirei di bagnare i piedi con un linguaggio di scripting - qualcosa di dinamico digitato e interpretato - e un linguaggio compilato di livello inferiore, tipizzato staticamente. (Molte lingue oggigiorno possono superare tutte queste categorie). Entrambe le esperienze ti renderanno un programmatore migliore e avere l'opportunità di fare entrambe le cose vale più della somma delle sue parti; sarai in grado di scomporre grandi problemi in una raccolta di oggetti molto piccoli e risolvere facilmente questi piccoli problemi.

    
risposta data 09.09.2016 - 02:32
fonte
1

In genere!?

Probabilmente dipende. Il più grande motivatore che vedo per preferire un'estremità dello spettro rispetto all'altro, per uno studio autodiretto, è interesse

Trudging attraverso c e scrivere app per console sarà di scarso interesse per qualcuno che alla fine vuole scrivere front-end per le applicazioni web. O anche i back-end delle app Web.

D'altra parte, se fare hardware di basso livello "fare roba" è ciò che fa galleggiare la tua barca, quanto sarà motivante lavorare attraverso le tue esercitazioni standard nello stack web PHP?

Fai ciò che ti interessa per primo. Impara i livelli sempre più bassi nel tempo per capire meglio il livello a cui sei realmente interessato.

    
risposta data 09.09.2016 - 02:09
fonte
0

Prendo la tesi opposta e suggerirei un linguaggio di livello inferiore come C come primo linguaggio di programmazione. Sì, c'è una curva di apprendimento leggermente più ripida, ma c'è una ragione per questo, e ti aiuterà attraverso ogni altra lingua che utilizzerai da quel momento.

In un linguaggio di livello inferiore, tu (non un'implementazione di classe opaca di X) sei responsabile della gestione di ogni byte di memoria, proteggendo contro la lettura / scrittura oltre la fine dello spazio allocato (archiviazione automatica o dinamica), convalidando tutto il tuo input / output, individuando ogni posizione necessaria con array, gestendo line-endings, ecc., e un migliaio di altri aspetti fondamentali della programmazione che i linguaggi di livello superiore lavorano duramente per nasconderti.

Imparando a codificare a un livello fondamentale e sviluppando buone abitudini per la validazione di input / output, gestione dei file, gestione della memoria, ecc ... a un livello basso, la transizione a qualsiasi lingua è resa più facile e più breve perché capirai come vengono implementati i paradigmi di livello superiore e come ognuno di quegli aspetti fondamentali della programmazione funziona dietro le quinte.

Nel continuum delle lingue dal codice macchina, all'assemblaggio, alla C, ai tuoi cosiddetti linguaggi orientati agli oggetti di C ++, Java e il resto, C occupa una posizione unica. Fornisce molte delle funzionalità di un linguaggio di livello superiore fornendo un controllo completo a livello di hardware.

Mentre altri potrebbero suggerire che potresti essere in grado di ottenere più risultati più rapidamente partendo da un linguaggio di livello superiore, non avrai mai una migliore opportunità di imparare la programmazione da un livello fondamentale piuttosto che partire dalla parte inferiore della scala. Il passaggio a una qualsiasi delle lingue da un livello inferiore a un altro ti darà molta più comprensione di ciò che forniscono i linguaggi di livello superiore, oltre a una chiara comprensione dei limiti che hanno e, soprattutto, perché.

    
risposta data 09.09.2016 - 09:02
fonte
0

Non è assolutamente necessario imparare C per capire come funziona Ruby.

Imparare come funziona l'interprete a livello di macchina può essere interessante per la conoscenza a livello di padronanza, ma ciò non richiede strettamente la conoscenza di C, e non è sicuramente utile per un principiante in Ruby.

Nel caso di Closure ed Elixir, l'apprendimento degli ambienti sottostanti (JVM e BEAM) è utile perché influenza strongmente il modo in cui le lingue funzionano, ma ancora una volta non è necessario imparare Java ed Erlang per questo.

Detto questo, da un punto di vista generale delle abilità di programmazione, l'apprendimento di un linguaggio di basso livello come C è utile per capire meglio come funzionano i computer o per avere un escape se il tuo linguaggio di alto livello è inadeguato per un compito . Ma questa è un'abilità aggiuntiva da padroneggiare, non un prerequisito per l'apprendimento del linguaggio di alto livello.

    
risposta data 09.09.2016 - 09:54
fonte

Leggi altre domande sui tag