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


13

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

Quanti di voi sanno tutto questo?

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 ogni entrata e uscita 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 dovrai 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 delle architetture grafiche che utilizzerai.

Se sei uno sviluppatore di applicazioni, non è necessario conoscere nulla di tutto ciò tranne che per 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 tranne come affrontare i problemi di memoria.


20
Conoscere la tua macchina ti rende sempre uno sviluppatore migliore, anche se fai solo applicazioni line-of-business. Tale conoscenza potrebbe non essere richiesta, ma è certamente importante.
Robert Harvey,

@Robert Harvey: Corretto, motivo per cui dico "non c'è bisogno di sapere". Certamente non fa male sapere queste cose comunque. :)
Greyfade il

2
+1, ma conosco (più di) alcuni sviluppatori Web che non considerano mai l'utilizzo della memoria.
Tim Post

-1 per "Se sei uno sviluppatore di applicazioni, non è necessario conoscere nulla di tutto ciò tranne che per mantenere l'utilizzo della memoria a livelli ragionevoli". Alcuni dei maggiori problemi nei sistemi qui sono causati dal fatto che i progettisti di applicazioni non sanno come usare i database e quindi incolpano i dba quando "le cose funzionano lentamente e non è il mio codice; vedi, c'è il profilo".
Andrew Hill,

@AndrewHill: quando è un problema hardware e non algoritmico? La domanda riguarda la comprensione del comportamento dell'hardware di basso livello, non degli algoritmi di alto livello.
Greyfade,

12

No, non è necessario, ma penso che sia un'ottima idea. Imparare una panoramica generale di come funzionano le cose a livello logico mi ha davvero aiutato nello sviluppo.


6

Penso che i commenti su sviluppatori di applicazioni e sviluppatori web siano sbagliati.

Ad esempio, se qualcuno sta sviluppando un'applicazione Web che coinvolge molte cose di sicurezza come ssh o qualche altro algoritmo di crittografia, è piuttosto importante che sappiano su quale tipo di hardware sono in esecuzione in modo da poter 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. Conoscere meglio le capacità dell'unità disco e qualsiasi tipo di interfaccia bus a cui è collegata se si prevede una quantità ragionevolmente elevata di richieste.

Dal punto di vista dell'applicazione, se si sta sviluppando una sorta di programma CAD o qualcosa che esegue il rendering 3D, è possibile aspettarsi che queste applicazioni richiedano un calcolo intensivo sia algoritmicamente che graficamente. Sarebbe prudente comprendere l'hardware per assicurarsi che l'applicazione sia reattiva e utilizzabile.

Non sto dicendo che devi arrivare fino a comprendere i dettagli di qualcosa come il protocollo PCI, ma capisci meglio 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 la comprensione è discutibile.


2

Per un programmatore professionista, lo considero un approccio olistico alla comprensione dell'intero sistema , piuttosto che conoscere semplicemente 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 scelte più informate sugli algoritmi e sulla struttura dei dati.

Nella mia esperienza, i migliori programmatori tendono a conoscere il funzionamento interno, a vari livelli, sia che comprenda le istruzioni di assemblaggio native impostate per una piattaforma target, un corso introduttivo di organizzazione informatica a scuola, elettronica digitale rudimentale o sia in grado di comprendere dettagliatamente descrizioni di core CPU e GPU negli ultimi modelli, i migliori hanno una conoscenza più completa rispetto ai loro peer meno stellari.


1

Non sono sicuro che possa essere d'aiuto, ma mi sento più a mio agio quando so di più sul sistema su cui sto lavorando di quanto non sia realmente necessario. Quando ero più giovane, non mi piaceva non conoscere il linguaggio assembly del sistema su cui stavo lavorando; o sono cambiato, o ne ho imparato abbastanza che un altro non amplierà molto il mio feeling con il sistema. Non sono mai stato un tipo hardware, ma posso smontare un computer e nominare i diversi sottosistemi e il modo in cui interagiscono.


0

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

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


0

Insegno alla programmazione Java come classe 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 concetti semplici come il modo in cui le cose sono archiviate nella memoria sembrano aiutare gli studenti.


0

Ho intenzione di rispondere a questa domanda come richiesto nel titolo:

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

Ciò non significa che devi impazzire con il formaggio Whiz. Avere una buona panoramica dell'hardware, come interagiscono i pezzi, come li usano i sistemi operativi. In questo senso, suggerisco di leggere un libro di concetti sui sistemi operativi per tutti gli sviluppatori.

Conosco tutto questo? Diamine no. Ho dimenticato così tante informazioni inutili su SCSI che non sono nemmeno divertenti. Tuttavia, apprenderlo è 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, suggerisco sicuramente di conoscere l'hardware. Fallo ad un ritmo ragionevole, a seconda delle tue esigenze. Scopri quanti più dettagli puoi ragionevolmente, ma concentrati sui concetti.


0

Ogni sviluppatore dovrebbe conoscere i concetti di base associati all'ingegneria informatica: aritmetica binaria, conversione di base, algebra booleana, porte logiche, composizione di una CPU (e cosa fanno i componenti), cache, memoria virtuale, compressione, rilevazione 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 utilizzi meglio l'hardware piuttosto che dire, uno sviluppatore web.

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.