Un maggiore utilizzo di linguaggi di programmazione sempre più elevati porta a un deficit di programmatori con conoscenze di architettura del computer?

14

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

A high-level programming language is a programming language with strong abstraction from the details of the computer. In comparison to low-level programming languages, it may use natural language elements, be easier to use, or be more portable across platforms. Such languages hide the details of CPU operations such as memory access models and management of scope.

I.e. man mano che aumenta il livello del linguaggio di programmazione, tanto più lontano il programmatore passa dall'hardware su cui viene eseguito il programma.

Ora non conosco le statistiche degli usi linguistici tra i livelli, ma sospetterei che le lingue di livello superiore stiano sempre più sostituendo le lingue di livello inferiore. In tal caso, questo può portare ad un deficit di programmatori con conoscenza dell'architettura del computer? Questo sarebbe un problema per l'industria?

    
posta gablin 01.10.2010 - 15:21
fonte

4 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 capire l'architettura sottostante, allora quelli che lo fanno avranno posti di lavoro e saranno pagati di più, mentre quelli che non lo faranno avranno solo lavori in cui non è necessario (e possono ancora essere pagati di più ... chissà?).

È utile saperlo? 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).

    
risposta data 01.10.2010 - 15:52
fonte
9

Penso di sì. È una tendenza che mi preoccupa. Nessuna astrazione è perfetta ; se esistesse un modo perfetto per semplificare qualsiasi problema complesso, avrebbe sostituito l'originale molto rapidamente. (Questo è successo in passato, occasionalmente con i computer, e molto più frequentemente in altri campi che non si preoccupano tanto della retrocompatibilità come facciamo 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 cosa sia, perché è lì e cosa sta facendo, finisci per scrivere accidentalmente relitti di grandi treni, e non sapendo come risolverli perché non sai cosa sta realmente accadendo.

Chiunque tenti di dirti diversamente o sta vendendo 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. Quando le stazioni e le reti diventano più grandi e più complesse, le tecniche rapide e sporche che hanno funzionato bene per progettare 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 di un linguaggio efficiente in primo luogo) e una profonda comprensione di come funziona il database, i nostri programmatori non sarebbero mai stati in grado di realizzare con successo la scala del prodotto.

Questa non è una storia isolata, neanche. Il software continua a diventare sempre più complesso, non più semplice, e temo che questo livello di competenza tecnica diventi un'arte perduta, ei programmi di domani saranno peggiori di quelli attuali, non migliori.

    
risposta data 01.10.2010 - 16:25
fonte
5

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

    
risposta data 01.10.2010 - 15:54
fonte
1

No, non porterà a un deficit di programmatori con conoscenza dell'architettura del computer. Le lingue sono usate per risolvere problemi in un particolare dominio. Se vuoi risolvere un particolare problema, usi la lingua appropriata o una abbastanza buona data le tue risorse.

In realtà, quali domini richiedono effettivamente la conoscenza dell'architettura del computer? Questo deve essere legato ad una particolare architettura hardware? Sistemi operativi? I driver di periferica? Certo, ma anche in questo caso solo alcune parti di questo codice richiedono conoscenze architettoniche specifiche.

Miglioramento delle prestazioni? Sì, puoi 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 migliori algoritmi e la conoscenza dell'ambiente di runtime del linguaggio.

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

    
risposta data 21.10.2010 - 15:04
fonte