È saggio per uno sviluppatore di alto livello dedicare del tempo allo studio dell'assemblaggio? [chiuso]

33

È chiaro che la conoscenza delle cose di basso livello è molto importante nel nostro lavoro.

Ma in una situazione in cui stai già sviluppando software commerciale ad alto livello, e quando hai già una direzione scelta ma non hai alcuna abilità di assemblaggio, non è più ragionevole concentrarti sullo studio di cose relative alla tua direzione? O c'è un motivo per cui dovresti dedicare del tempo ad apprendere le basi di basso livello comunque?

Quando è troppo tardi e quando non lo è? E se è non troppo tardi, allora come si dovrebbe imparare in modo ottimale (nel senso di non spendere troppo tempo per ottenere una certa profondità e comprensione)?

    
posta zkaje 17.12.2010 - 15:45
fonte

11 risposte

43

Non posso credere che nessuno abbia menzionato debugging ...

Non ho scritto una riga di codice assembly in molti anni. Ma io leggo abbastanza spesso. Il debugging di alto livello è ottimo quando si hanno le informazioni su sorgenti e simboli, ma quando la libreria di fantasia lancia un'eccezione non gestita sui computer dei clienti, è troppo tardi per richiedere l'inclusione nella licenza ...

Ma posso ancora aprire il disassemblatore e vedere cosa alla fine la tua logica di alto livello ha finito facendo , rintracciare i cattivi dati all'origine, scoprire chi ha cambiato il registro di controllo della FPU ...

Questo ha salvato il mio bacon più spesso di quanto mi interessi a pensare. Ed è mai troppo tardi per imparare - ci sono un sacco di ottimi riferimenti ed esercitazioni out su 'Net, e quasi tutti i programmi in esecuzione sul tuo computer possono fornire un ambiente pratico.

    
risposta data 17.12.2010 - 16:49
fonte
15

Non hai bisogno di imparare il linguaggio assembly, hai solo bisogno di capire come funziona. Devi sapere che cos'è XOR e contare in codice binario nel sonno, ecc. Ma non ho mai avuto bisogno del codice di assemblaggio nel mio lavoro, mai.

Quindi, come dici tu, la conoscenza delle cose di basso livello è importante, ma la conoscenza pratica dell'assemblaggio non lo è.

    
risposta data 17.12.2010 - 15:49
fonte
11

Se non hai veramente competenze di programmazione di basso livello, altamente ti consiglio di imparare qualcosa nel tuo tempo libero. Non è necessario diventare esperti in questo; solo raggiungere un certo livello di competenza. Devi fare molto lavoro matematico, piuttosto che dipendere dal compilatore o dalle librerie per farlo per te. Ti aiuterà a capire la leggibilità nella programmazione, poiché la maggior parte delle istruzioni di assemblaggio corrispondono a un'istruzione del processore. Devi gestire la complessità in programmi leggermente più grandi, senza il beneficio di cose come if...else . Questo ti aiuterà a scrivere programmi di alto livello più semplici, perché l'esperienza di assemblaggio ti avrebbe insegnato quanto è più facile leggere.

Inoltre, ricorda che l'assemblea non è una lingua! È un termine generico, che in pratica significa l'insieme di istruzioni di un processore che è stato astratto in un linguaggio simbolico. Diversi processori hanno set di istruzioni differenti e quindi diversi linguaggi di assemblaggio. Quando impari "assemblaggio", impari un processo, non una lingua.

    
risposta data 17.12.2010 - 15:54
fonte
8

Trarrai sempre beneficio dal picco sotto le coperte e capirai un po 'di più su ciò che si trova sotto l'astrazione sulla quale ti trovi sopra. Come un mio professore universitario ha dichiarato una volta che "tutti i bravi programmatori comprendono l'hardware" - non devi essere in grado di creare e manipolare circuiti, ma dovresti avere un'idea di cosa sta succedendo laggiù - lo farà solo è meglio.

Prova Organizzazione e progettazione del computer

    
risposta data 17.12.2010 - 16:11
fonte
1

- L'apprendimento continuo e permanente è una componente essenziale di una carriera nello sviluppo del software. Se sei interessato a continuare a imparare sulla programmazione e su come migliorare il tuo mestiere allora sì, a un certo punto dovresti imparare l'assemblaggio in quanto ti esporrà a un linguaggio e a un modo completamente nuovi di scrivere codice. Per lo stesso motivo, consiglio di sperimentare molti linguaggi / stili di programmazione tra cui Ruby / Python (linguaggio dinamico), Haskell / F # (linguaggio funzionale puro), Lisp / Scheme (linguaggio funzionale), ecc ...

Direi che è troppo tardi se non sei più interessato a saperne di più sulla programmazione. Ad esempio, se hai raggiunto il punto della tua carriera in cui potresti presto passare dalla programmazione in un'altra area come Management, Ingegneria dei sistemi, Vendite / Marketing, ecc. Se pensi di voler entrare in una nuova area in nei prossimi anni mi concentrerei di più sulle competenze necessarie per sviluppare in quell'area, invece che sul mestiere di programmazione.

    
risposta data 17.12.2010 - 16:30
fonte
1

Dovresti sapere di cosa si tratta e cosa sta facendo il computer. Imparare qualcosa come MIX di Knuth ti aiuterà. Per lo più essere in grado di giudicare l'efficienza del tuo codice. Vai a prendere l'arte della programmazione del computer e leggerlo. Ti renderà un programmatore più intelligente.

    
risposta data 17.12.2010 - 17:05
fonte
1

Isn't it more reasonable to focus on studying stuff related to your direction? Or is there a reason you should spend some time to learn the low-level basics anyway?

Risposta:

  1. Se non hai intenzione di cambiare la tua direzione per programmare il sistema embedded non c'è motivo di imparare ad assamble. Anche se pensate che l'assembly è dipendente dalla CPU, potete imparare alcune nozioni di base, ma le vostre conoscenze saranno basate sull'architettura della CPU e sul set di istruzioni per quella CPU.
  2. Lascia che tu dica il codice per Windows. Se vuoi imparare un livello più basso di un linguaggio di alto livello che potrebbe avvantaggiare la tua attuale direzione, ti consiglio di imparare Windows I in profondità, API di Windows, gestione della memoria di Windows ecc. Basta imparare il sistema operativo / piattaforma che stai codificando.
  3. Migliora le tue competenze sul tuo attuale linguaggio di alto livello, come gestione della memoria, garbage collection, ecc. Se vuoi andare a un livello basso.
risposta data 18.12.2010 - 01:20
fonte
0

Penso che raggiungi un punto in cui i rendimenti diminuiscono man mano che la tua carriera avanza. Cioè, dovresti imparare presto il linguaggio di assemblaggio, in quanto porta a una migliore comprensione fondamentale di tutto ciò che viene dopo. Tuttavia, se sei già nel mondo del lavoro e hai qualche anno di esperienza, avrai già un'idea del modo in cui funzionano le cose, quindi l'apprendimento dei dettagli reali potrebbe non fornirti più informazioni .

    
risposta data 17.12.2010 - 16:23
fonte
0

Non so quanto sia utile studiare l'assemblaggio. Ma almeno fare qualche programmazione in un linguaggio come C sarebbe vantaggioso. Recentemente ho dovuto fare qualche programmazione in C e ho trovato che fosse piuttosto illuminante. C rimuove gran parte dell'astrazione presente nei linguaggi di livello superiore. Quelle astrazioni non arrivano senza un costo. Devi gestire più dettagli di livello inferiore in C, dove, come in un linguaggio di livello superiore, questi dettagli vengono gestiti per te. Facendo un po 'di programmazione in C dovresti diventare consapevole di quei dettagli. Quindi, quando tornerai nel tuo linguaggio quotidiano, avrai ancora questa consapevolezza e apprezzerai meglio ciò che sta realmente accadendo. Questo dovrebbe aiutarti a diventare un programmatore migliore.

    
risposta data 17.12.2010 - 17:30
fonte
0

Nella professione dell'Insegnante, almeno qui nel Regno Unito, gli insegnanti devono essere qualificati di gran lunga superiori a ciò che insegnano. Ci si aspetta che un insegnante di Secondary (High School) abbia una laurea in materia insegnata, e anche gli insegnanti della scuola primaria (elementare) abbiano una laurea e devono essere competenti in tutte le materie principali fino ad un livello GCSE di buona qualità (scuola superiore exit esami ?, nessun vero equivalente americano).

Perché? Perché per insegnare qualcosa bene, o effettivamente usare qualcosa bene, devi capirlo. Ciò richiede la comprensione della struttura di base, la catena di decisioni prima di quella con cui si sta lavorando. Per comprendere correttamente il codice di alto livello, è necessario comprendere il livello su cui è costruito, come funziona, dove si trovano i suoi punti di forza e di debolezza. Questo è ricorsivo, per capire il livello sottostante, devi capire anche il livello sottostante.

Alla fine, questo è il motivo per cui i decenti corsi universitari / universitari in Informatica richiedono buone capacità matematiche prima di tutto, dato che è effettivamente il gradino più basso.

Maths -> Physics                ->
      -> Chemistry -> Materials -> Hardware Design -> Microcode      -> Assembler
                                                   -> Bus Interfaces -> Peripherals

... Assembler    -> Low Level      -> High Level   ->
... OS / Drivers -> API Level      -> Applications -> User

Se manchi di conoscenza in queste aree, la tua comprensione è compromessa al di sotto di essa. Più è vicino al livello in cui gestisci un altro livello, più è importante avere una messa a terra.

Quindi: Hai bisogno di conoscere l'assemblatore come codificatore di alto livello? Aiuterà.

    
risposta data 17.12.2010 - 21:21
fonte
0

Era stato molto importante nella mia vita precedente come guru dei supercomputer. Allora Ho sentito che non hai capito una macchina fino a quando non hai scritto almeno diverse centinaia di linee di assemblatore, e armeggiato con esso cercando di spremere le prestazioni. Poiché pochissimi programmatori volevano andare così in profondità, mi rendevano davvero indispensabile. E ho ancora un linguaggio comune quando parlo con i tipi di designer HW.

Ma in realtà il bisogno / beneficio di questo è per lo più un paio di decenni fa. Tra gli avanzamenti del compilatore e l'esecuzione fuori dai piani avanzata HW c'è ben poco spazio per essere in grado di interpretare l'eroe scrivendo assemblatore più. Anche se penso che sia utile capire come funzionano le cose. Ho intenzione di insegnare ai miei figli (matricole CS major) a programmare in un assemblatore molto semplificato su una semplice macchina virtuale, solo così hanno un'idea di cosa succede. Speriamo di poter giocare con cose come lo srotolamento, il pipelining del software, le cache e il precaricamento, il caricamento dal basso ecc. Quindi almeno loro sapranno che a un certo livello questa roba sta succedendo.

    
risposta data 18.12.2010 - 00:02
fonte

Leggi altre domande sui tag