Condividi tramite


Il presente articolo è stato tradotto automaticamente.

Una provocazione

La trivella a vapore

David Platt

John Henry disse al capitano, "un uomo non è niente ma un Man. Ma prima ho lasciato il tuo trapano vapore mi ha battuto, morirò con un martello in mano."

— "La ballata di John Henry," American tradizionale

John Henry occupa un posto di possente nel folklore americano (bit.ly/3HqIMd). Alcune persone dicono che lui è solo un racconto alto, ma gli altri insistono che egli si basa su un vero uomo. John Henry "acciaio ha guidato" di fine Ottocento, pestando una mazza un asta d'acciaio di trivello, alesatura fori nella roccia per la sabbiatura di gallerie della ferrovia. Quando un trapano a vapore ha minacciato il suo lavoro, John Henry ha sfidato a duello — e ha vinto. La ballataJohn Henry ha guidato 16 piedi e il trapano di vapore fatto solo nove," dice. Ma non importa quale versione della canzone che si sente, finisce sempre male: "Ha lavorato così duramente, che ha rotto il suo povero cuore, così egli stabilite dal suo martello ed è morto."

Un ragazzo quintessenza hardware cosa ha a che fare con il software, sento che vi state chiedendo. Ho avuto il mio momento di Henry di John la scorsa settimana, insegnamento discussioni nella mia classe di "Programming Microsoft.NET" Harvard Extension. Iniziato i miei studenti con filetti crudi, li mostrò il pool di thread poi lavorato nei problemi di progettazione di sincronizzazione e affinità di thread. Si è concluso con un compito brutale che ha tentato di utilizzare il pool di thread, ma imposti requisiti che non consentono di. (Studente: "Platt, sei un sadico bastardo." Me: "Uhm, sì, qual è il tuo punto?")

La prossima settimana ho mostrato loro la Task Parallel Library (TPL), con i suoi Parallel. for e Parallel. ForEach costruisce. Ho poi detto loro che io stesso non ha fiducia. Era troppo nuovo. E non risparmiare me abbastanza tempo e sforzo per compensare la perdita di controllo e trasparenza. Poi ho capito quello che dinosauro sarei diventato.

Ogni anticipo nell'informatica ha generato un nuovo livello di astrazione. E con ogni livello di astrazione superiore, i programmatori che si è sforzato potentemente a padroneggiare il livello inferiore si arrabbiano. Ora qualsiasi idiota può fare quello che hanno rotto loro asini per imparare. Non è giusto!

Ad esempio, quando quelli thingies disco magnetico è uscito prima, i programmatori dovevano comandare direttamente l'hardware — prendere testa 3, spostare traccia 19, attendere per settore 247 a venire e poi leggerlo. Poi qualche intelligentone ha capito come nascondere l'hardware dietro un livello di astrazione software che ha fornito una serie logicamente contigua di byte denominato file.

It ' modo inefficiente,"urlò i parrucconi. "Voi ragazzi questi giorni non hanno alcun rispetto per le risorse. Pensare tutti quei settori sprecati di, che cosa che li chiami, directory?"

"Mazzo di vecchie scoregge," schernivano i bambini. "Ancora programmare solo con quelli e zeri?"

Quando ha fatto saltare da parvenu a tradizionalista? Non ho alcun problema con il pool di thread. Io mostrare agli studenti come controlla l'utilizzo della CPU di relativo thread, l'assegnazione di più thread al lavoro quando alcuni di loro blocco. Ma almeno ci posso vedere i thread, al contrario di TPL, dove sono nascosti.

Ho sempre trovato non non c'è nessun sostituto per sapere cosa sta succedendo sotto il cofano. Sempre una perdita di astrazioni. Dischi frammentati, spargendo i file rispetto ai cluster scomodi che richiedono movimento uno spreco di metallo. Gli studenti che hanno fatto il meglio nei miei anni di classe MFC fa sono stati quelli che hanno ascoltato il mio consiglio per studiare il classico libro di Charles Petzold l'API di Windows. Ogni volta che posso risolvere il problema relativo alla filettatura di un cliente, esso sempre — e voglio dire ogni volta, senza eccezione — nasce da un equivoco fondamentale di ciò che un thread è e fa.

Quindi avanti, utilizzare il TPL Parallel. for e Parallel. ForEach. Ma se li si usa come una stampella senza capire come funzionano davvero, è come usare un tubo interno per pagaia fuori nel mezzo del porto di Boston senza saper nuotare. Potrai urlare per la guardia costiera, per i ragazzi come me, a venire soccorso si. Fortunatamente, siamo sulla palla, perché sappiamo che dobbiamo essere. Un geek non è niente ma un geek. E prima ho lasciato il TPL mi ha battuto, morirò con un manico filo nella mia mano.

David S. Platt insegna programmazione .net presso la Harvard University Extension School e presso le aziende di tutto il mondo. Egli è l'autore di 11 libri di programmazione, tra cui "Perché Software Sucks" (Addison-Wesley Professional, 2006) e "Introducing Microsoft.NET" (Microsoft Press, 2002). Microsoft lo ha nominato una leggenda Software nel 2002. Egli si chiede se egli dovrebbe nastro due dita della sua figlia in modo Lei impara a contare ottale. È possibile contattarlo al indirizzo rollthunder.com.