Uno sviluppatore dovrebbe conoscere il funzionamento interno dell'hardware del computer? [chiuso]

13

Non sto parlando solo di come viene assegnata la memoria e della gestione della memoria (cose che puoi imparare da C per esempio), ma piuttosto dell'aspetto hardware e di come ciascun componente dell'hardware del computer funziona internamente e in che modo comunicano tra loro.

Quanti di voi sanno tutto questo?

    
posta Adrian 29.12.2010 - 20:15
fonte

9 risposte

31

Dipende da cosa fai.

Se sei uno sviluppatore incorporato (e stai scrivendo molto vicino al metallo in un dispositivo molto piccolo), devi conoscere tutti i componenti di ogni componente del sistema.

Se sei uno sviluppatore di sistemi (e stai scrivendo sistemi operativi o driver di dispositivo o forse anche database), allora avrai bisogno di sapere tutto ciò che c'è da sapere sulle interfacce hardware di basso livello.

Se sei uno sviluppatore di giochi e in ritardo nel tuo progetto (dove stai ottimizzando le cose), devi conoscere i dettagli della cache della CPU e le architetture grafiche che utilizzerai.

Se sei uno sviluppatore di applicazioni, non hai bisogno di sapere nulla di ciò tranne che mantenere l'utilizzo della memoria a livelli ragionevoli.

Se sei uno sviluppatore web, è utile conoscere i protocolli Internet, ma nessuna di queste altre cose è necessaria eccetto come affrontare i problemi di memoria.

    
risposta data 29.12.2010 - 20:19
fonte
12

No, non hai , ma penso che sia un'idea eccellente. L'apprendimento di una panoramica generale di come funzionano le cose a livello logico mi ha davvero aiutato nello sviluppo.

    
risposta data 29.12.2010 - 20:28
fonte
6

Penso che i commenti sugli sviluppatori di applicazioni e sugli sviluppatori web siano errati.

Ad esempio, se qualcuno sta sviluppando un'applicazione web che implica un sacco di elementi di sicurezza come ssh o qualche altro algoritmo di crittografia, è piuttosto importante sapere quale tipo di hardware sono in esecuzione, in modo che possano determinare se la macchina può effettivamente gestire il carico di lavoro. Un altro esempio potrebbe includere un server che ospita una sorta di contenuto scaricato. È meglio conoscere le capacità dell'unità disco e qualsiasi tipo di interfaccia bus a cui è collegata se ci si aspetta una quantità ragionevolmente elevata di richieste.

Dal punto di vista di un'applicazione, se stai sviluppando una sorta di programma CAD, o qualcosa che esegue il rendering 3d, puoi aspettarti che queste applicazioni siano ad alta intensità di calcolo sia dal punto di vista algoritmico che grafico. Sarebbe prudente capire l'hardware per assicurarsi che l'applicazione sia reattiva e utilizzabile.

Non sto dicendo che si debba arrivare fino a comprendere i dettagli di qualcosa come il protocollo PCI, ma è meglio capire di cosa sono capaci l'interfaccia e l'hardware.

In definitiva, è importante indipendentemente dal tipo di sviluppo che fai. Il livello di dettaglio necessario per capire è discutibile.

    
risposta data 29.12.2010 - 20:39
fonte
2

Per un programmatore professionista, lo considero un approccio olistico alla comprensione dell'intero sistema , piuttosto che conoscere solo la sintassi di un determinato linguaggio di programmazione du jour . Trovo che aiuti i programmatori (e gli analisti) a prendere decisioni di progettazione intelligenti e a fare algoritmi e algoritmi più informati; scelte della struttura dei dati.

Nella mia esperienza personale, i migliori programmatori tendono a conoscere i meccanismi interni, a diversi livelli, che si tratti di capire le istruzioni di assemblaggio nativo impostare per una piattaforma di destinazione, una organizzazione informatica corso a scuola, rudimentale elettronica digitale o in grado di comprendere le descrizioni dettagliate dei nuclei CPU e GPU negli ultimi modelli, i migliori hanno una conoscenza più completa rispetto ai loro pari meno stellari.

    
risposta data 29.12.2010 - 21:23
fonte
1

Non sono sicuro che sia d'aiuto, ma mi sento più a mio agio quando ne so di più sul sistema su cui sto lavorando di quello che mi serve davvero. Quando ero più giovane, non mi piaceva non conoscere il linguaggio di assemblaggio del sistema su cui stavo lavorando; o sono cambiato, o ne ho imparato a sufficienza molti che un altro non espanderà molto il mio sentire per il sistema. Non sono mai stato un tipo di hardware, ma posso dividere un computer e nominare i diversi sottosistemi e il modo in cui interagiscono.

    
risposta data 29.12.2010 - 21:22
fonte
0

Quel poco che so ho imparato in una classe di architettura informatica quasi 25 anni fa, e su un'architettura non del mondo reale.

Faccio principalmente la programmazione di applicazioni su una varietà di piattaforme. C'è stato un periodo in cui stavo sviluppando il codice per eseguire non solo hardware commodity x86, ma anche su Sparc, PA-RISC e altre architetture server. La conoscenza a quel livello semplicemente non è richiesta per il lavoro che faccio.

    
risposta data 29.12.2010 - 20:44
fonte
0

Insegno la programmazione Java come classe di scuola superiore AP. Ho scoperto che quando gli studenti sanno qualcosa sul funzionamento interno di un computer, li aiuta a capire i concetti di programmazione.

Non esagerare: solo semplici concetti come il modo in cui le cose sono memorizzate sembrano aiutare gli studenti.

    
risposta data 30.12.2010 - 19:10
fonte
0

Ho intenzione di rispondere a questo come richiesto nel titolo:

Sì, uno sviluppatore dovrebbe conoscere il funzionamento interno dell'hardware. Quanto dipende dal tipo di sviluppatore e amp; i loro obiettivi, tempo disponibile e interesse personale. La priorità dovrebbe, ovviamente, essere sugli strumenti, le tecniche, ecc. Che impiegano nella loro area. Questa opinione è sulla falsariga di essere un individuo ben arrotondato. Più conosci le cose al di fuori del tuo mestiere, senza sacrificare il tuo mestiere, meglio è.

Questo non significa che devi diventare pazzo con il mago del formaggio. Avere una buona panoramica dell'hardware, come interagiscono i pezzi, come i sistemi operativi li usano. Seguendo queste linee, suggerisco di leggere un libro di concetti sui sistemi operativi per tutti gli sviluppatori.

Conosco tutto questo? Heck no. Ho dimenticato così tante informazioni inutili su SCSI che non è nemmeno divertente. Tuttavia, conoscerlo è stata un'esperienza inestimabile. Ho anche dimenticato molti altri dettagli relativi all'hardware, ma ricordo i concetti importanti che ho imparato da quella conoscenza.

Quindi, di certo suggerisco di conoscere l'hardware. Fatelo a un ritmo ragionevole, a seconda delle vostre esigenze. Scopri tutti i dettagli che puoi, ma concentrati sui concetti.

    
risposta data 30.12.2010 - 20:00
fonte
0

Ogni sviluppatore dovrebbe conoscere i concetti di base associati all'ingegneria del computer: aritmetica binaria, conversione di base, algebra booleana, porte logiche, composizione di una CPU (e cosa fanno i componenti), cache, memoria virtuale, compressione, rilevamento e correzione degli errori ...

La misura in cui questi dovrebbero essere conosciuti dipende dal lavoro del programmatore. Come altri hanno già detto, uno sviluppatore di sistemi embedded dovrebbe avere molta più familiarità con le capacità hardware e come scrivere software che utilizza al meglio l'hardware di quanto lo sia uno sviluppatore web.

    
risposta data 30.12.2010 - 20:24
fonte

Leggi altre domande sui tag