Un maggiore utilizzo di linguaggi di programmazione sempre più elevati può portare a un deficit di programmatori con conoscenze di architettura informatica?


15

Citazione da Wikipedia dell'articolo "Linguaggio di programmazione di alto livello":

Un linguaggio di programmazione di alto livello è un linguaggio di programmazione con una forte astrazione dai dettagli del computer. Rispetto ai linguaggi di programmazione di basso livello, può utilizzare elementi di linguaggio naturale, essere più facile da usare o essere più portatile su tutte le piattaforme. Tali linguaggi nascondono i dettagli delle operazioni della CPU come i modelli di accesso alla memoria e la gestione dell'ambito.

Vale a dire, con l'aumentare del livello del linguaggio di programmazione, più il programmatore si allontana dall'hardware su cui viene eseguito il programma.

Ora non conosco le statistiche sull'uso delle lingue tra i livelli, ma sospetto che le lingue di livello superiore sempre più stanno sostituendo le lingue di livello inferiore. In tal caso, ciò può comportare un deficit di programmatori con conoscenze di architettura informatica? Questo sarebbe un problema per l'industria?

Risposte:


16

Può , ma probabilmente non porterà a un problema.

È solo economia. Se la stragrande maggioranza delle persone perde la capacità di comprendere l'architettura sottostante, e c'è ancora un enorme BISOGNO di comprendere l'architettura sottostante, allora quelli che lo faranno avranno lavori e saranno pagati di più, mentre quelli che non lo faranno avranno lavori dove ciò non è necessario (e può ancora essere pagato di più ... chi lo sa?).

È utile sapere? Assolutamente. Probabilmente starai meglio. È necessario nella maggior parte dei casi? No. Ecco perché l'astrazione è così grande, siamo sulle spalle dei giganti senza dover essere noi stessi giganti (ma ci saranno sempre giganti in giro).


4
Ma tutte le astrazioni perdono. Conoscere l'architettura di base è d'obbligo se si vuole essere i protagonisti per la risoluzione di astrazioni che perdono.
dsimcha,

5
@dsimcha, D'accordo, ma per essere il ragazzo giusto devi "gli altri" per venire da te ;-) Se tutti hanno bisogno di sapere tutto, l'astrazione è fallita miseramente.
Preimposta il

1
@Preets, ed è per questo che molte astrazioni hanno fallito miseramente. Avere persino spazio per l'esistenza di un ragazzo è la prova che un'astrazione è già fallita.
Pacerier,

@Ryan, in realtà porterà a un problema in cui in futuro il mondo è invaso da app piene di bug sottili a causa di strati su strati di astrazioni che perdono. È abbastanza sorprendente ora che aziende come Google con risorse infinite possano ancora avere bug nelle loro app principali.
Pacerier,

3
@Pacerier google ha tutt'altro che infinite risorse e rende le applicazioni che sono diversi ordini di grandezza più complesse e che consistono in diversi ordini di grandezza più righe di codice rispetto alla maggior parte degli altri. affermare che tutti dovrebbero conoscere roba di computer di basso livello perché tutte le astrazioni possono fuoriuscire è come dire che tutti dovrebbero sapere come costruire una casa da zero senza l'uso di strumenti perché una tempesta potrebbe arrivare e abbattere la propria casa. semplicemente non è fattibile (o intelligente) spendere risorse del genere.
Sara

9

Credo di si. È una tendenza che mi preoccupa. Nessuna astrazione è perfetta ; se esistesse un modo perfetto per semplificare qualsiasi problema complesso, sostituirebbe l'originale molto rapidamente. (Ciò è accaduto in passato, occasionalmente con i computer, e molto più frequentemente in altri campi che non si preoccupano tanto della retrocompatibilità di noi, come la fisica.)

Ciò significa che ogni volta che usi un'astrazione, c'è un pezzo importante di complessità essenziale che ti sta nascondendo. Se non sai di cosa si tratta, perché è lì e cosa sta facendo, finisci per scrivere accidentalmente grandi relitti di treni e non sai come ripararli perché non sai cosa sta realmente succedendo.

Chiunque cerchi di dirti altrimenti vende olio di serpente o semplicemente non ha molta esperienza con un software serio. Al lavoro, lavoro su un programma che gestisce una buona percentuale di tutte le stazioni TV e radio negli Stati Uniti. Man mano che le stazioni e le reti diventano più grandi e complesse, le tecniche rapide e sporche che hanno funzionato bene per la progettazione di un prodotto per una piccola stazione finiscono per colpire grandi pareti tecniche quando vengono implementate per una rete con 50 stazioni e 200 canali! Senza una profonda comprensione di come funziona la lingua (e in primo luogo un linguaggio efficiente) e una profonda comprensione di come funziona il database, i nostri programmatori non sarebbero mai stati in grado di realizzare con successo la scalabilità del prodotto.

Anche questa non è una storia isolata. Il software continua a crescere sempre più complesso, non più semplice, e temo che questo livello di competenza tecnica diventerà una sorta di arte perduta e che i programmi di domani saranno peggiori di quelli odierni, non migliori.


5
L'ho sentito espresso come "devi conoscere l'astrazione uno strato più in basso rispetto a dove lavori". Bene, era piuttosto più pigro; la mia memoria è imperfetta. Quindi, se lavori in C o Delphi, dovresti sapere come funziona l'assemblaggio. Se lavori in Smalltalk o Java, dovresti sapere come funziona la tua VM. (Probabilmente, dovresti sempre sapere qualcosa sull'assemblaggio!) Se lavori con TCP, dovresti sapere come funziona l'IP. E così via.
Frank Shearar,

1
Voglio dire, potresti prenderlo ancora di più: perché dovrebbe essere sufficiente conoscere il montaggio? questa è solo un'astrazione di alto livello che tiene in mano le istruzioni binarie della CPU. ma aspetta! codice macchina? questa è solo un'astrazione! devi imparare come viene costruita la CPU usando i transistor per costruire porte logiche! e l'autobus e i registri. ma aspetta! transistor? questa è solo un'astrazione per una certa configurazione di atomi. e gli atomi sono solo un'astrazione sulle fluttuazioni dei campi quantistici. alla fine, questo javascript:alert("Hello world")richiede solo un dottorato di ricerca in teoria delle stringhe.
Sara

1
@kai Stai diventando un po 'ridicolo . Tendo a concordare con te sul fatto che di solito non è necessario comprendere diversi livelli per la maggior parte delle applicazioni. Ma stiamo parlando di casi limite, non di roba di tutti i giorni. Certo, non è necessario sapere come funzionano gli impianti idraulici per lavare i piatti. Ma se l'acqua sporca inizia a riempire il lavandino, probabilmente dovresti imparare un po 'su di esso prima di provare a ripararlo. Oppure, puoi semplicemente speronare un pezzo di tondo per cemento armato nello scarico fino a quando non funziona di nuovo, e chi se ne frega dove va l'acqua. (cont ...)
DrewJordan,

1
@DrewJordan mio punto è proprio questo: se non sei un professionista che ha bisogno di conoscere e fissare una certa classe di problemi (o semplicemente hanno un interesse privato vivo), allora è francamente assurdo pretendere che è necessario conoscere il funzionamento interno e strane sottigliezze di ogni strumento che stai usando. Ho semplicemente disegnato il punto di vista alla sua logica conclusione. certo, sapere come è costruito un cavo ethernet ti permetterebbe di costruirne uno nuovo, dati gli strumenti giusti quando la tua connessione internet fallisce, ma spendere tempo e denaro per acquisire la conoscenza quando lavori 20 strati sopra è solo uno spreco.
Sara

1
@DrewJordan ovviamente QUALCUNO ha bisogno di conoscere tutte queste cose in modo che qualcuno possa risolverlo quando si rompe un'astrazione, ma l'intero PUNTO di astrazioni è quello di mantenere il numero di persone che hanno bisogno di conoscere i dettagli al minimo in modo che la stragrande maggioranza possa concentrarsi su fare cose. dove traccia arbitrariamente la linea in cui le cose diventano "di livello troppo basso" dipende solo da cosa ti capita di lavorare personalmente, come illustrato con il mio argomento per l'assurdo (che non è un errore, lo farò sapere!)
Sara,

5

Sì, penso che le persone capiranno l'hardware molto meno con il progredire delle lingue (e, allo stesso modo, con il progredire delle istruzioni). Ma come è stato notato in molti altri luoghi, il principale vincolo per la maggior parte dei programmi oggi non è il tempo o l'efficienza della CPU, ma il tempo del programmatore. Se le persone che progettano le lingue continuano a svolgere il proprio lavoro nel rendere efficiente l'astrazione e se le persone continuano a utilizzare correttamente queste astrazioni, non è necessaria una comprensione dell'architettura del computer; almeno una conoscenza completa non è fondamentale per essere un buon programmatore in questi giorni.


2
In teoria, sì, ma quelli sono un paio di if piuttosto grandi .
Mason Wheeler,

1

No, non porterà a un deficit di programmatori con conoscenze di architettura informatica. Le lingue sono utilizzate per risolvere problemi in un determinato dominio. Se si desidera risolvere un problema particolare, si utilizza la lingua appropriata o una abbastanza buona data le proprie risorse.

In realtà, quali domini hanno effettivamente bisogno di conoscenza dell'architettura del computer? Che bisogno di essere legato a una particolare architettura hardware? Sistemi operativi? I driver di periferica? Certo, ma anche allora solo alcune parti di tale codice necessitano di conoscenze architettoniche specifiche.

Miglioramento delle prestazioni? Sì, è possibile applicare la conoscenza dell'architettura del computer per migliorare le prestazioni degli algoritmi. Ma altri due fattori hanno un impatto maggiore sulle prestazioni: l'uso di algoritmi migliori e la conoscenza dell'ambiente di runtime del linguaggio.

In sostanza, linguaggi di programmazione più astratti risolvono problemi per i quali non sono necessari dettagli dell'architettura del computer. Consentono di risolvere più problemi. Le persone che li usano non li usano per risolvere i problemi dipendenti dalla macchina. Le persone che devono risolvere i problemi dipendenti dalla macchina continueranno a utilizzare linguaggi che supportano la macchina. Questo non è un problema a somma zero.

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.