In che modo il calcolo e l'algebra lineare possono essere utili per un programmatore di sistema? [chiuso]


10

Ho trovato un sito Web in cui si dice che il calcolo e l'algebra lineare sono necessari per la programmazione del sistema.

La programmazione del sistema, per quanto ne so, riguarda osdev, i driver, i programmi di utilità e così via. Non riesco proprio a capire come il calcolo e l'algebra lineare possano esservi utili. So che il calcolo ha diverse applicazioni scientifiche, ma in questo particolare campo della programmazione non riesco proprio a immaginare come il calcolo possa essere così importante.

Le informazioni erano su questo sito: http://www.wikihow.com/Become-a-Programmer

Modifica: alcune risposte qui spiegano la complessità e l'ottimizzazione dell'algoritmo. Quando ho fatto questa domanda, stavo cercando di essere più specifico nell'area della programmazione del sistema. La complessità e l'ottimizzazione dell'algoritmo possono essere applicate a qualsiasi area della programmazione, non solo alla Programmazione del sistema. Questo potrebbe essere il motivo per cui non sono stato in grado di pensare in modo simile al momento della domanda.


6
Non è un'applicazione così diretta come cambiare il tuo processo di pensiero.
SomeKittens,

3
Non faccio molta programmazione di sistema (ok - non ne faccio nessuna), ma immagino che se stai eseguendo una serie di test delle prestazioni e vuoi fare analisi statistiche sui risultati, il calcolo e l'algebra lineare potrebbero entra in gioco. Potrebbero anche essere necessari durante l'analisi della complessità degli algoritmi.
FrustratedWithFormsDesigner il

2
@Telastyn: Davvero? Interessante. Come funziona?
FrustratedWithFormsDesigner,

2
Potete fornire un collegamento al sito Web? Potrebbe aggiungere un contesto che ti aiuterà a ottenere una risposta più specifica.
Caleb,

2
@FrustratedWithFormsDesigner - L'analogia tra un valore e un puntatore è come una derivazione. Si inizia con una funzione e la si ricava per ottenere una nuova funzione che significa qualcos'altro (un int che si riferisce a un indirizzo di memoria anziché a un numero). Puoi anche ottenere la seconda derivata (un puntatore a un puntatore) che significa un po 'la stessa cosa ma è diversa. Quindi per annullare ciò, è necessario integrare (dereferenza il puntatore), che presenta alcuni avvertimenti (la costante persa quando si ricava una funzione rispetto all'affilamento di oggetti). Spero che abbia senso, sono passati secoli ...
Telastyn,

Risposte:


6

Immagino che non sia molto importante se stai scrivendo utility non GUI su un sistema operativo moderno senza lavorare sui suoi interni. È probabilmente una storia diversa se stai lavorando per cambiare un moderno sistema operativo o svilupparne uno nuovo.

Se lavori con hardware video o un sistema di finestre bare metal, avrai bisogno di conoscenza dell'algebra lineare per aggiornare in modo efficiente la grafica. Non mi sono guardato, ma scommetto che potresti trovare esempi nel codice sorgente per X, KDE e Gnome.

Se stai lavorando con hardware per quanto riguarda l'elaborazione del segnale digitale, il calcolo sarà molto importante. Immagino che ci siano alcuni dispositivi che fanno il loro lavoro pesante con la CPU del sistema invece di un microprocessore locale e questi spesso si interfacciano con i sistemi elettrici analogici.

Anche il calcolo gioca un ruolo importante nell'analisi delle prestazioni oltre alla semplice algebra lineare quando si tenta di adattare la curva ai dati.


Anche solo la programmazione di directx o opengl richiederà una comprensione algebrica lineare.
Rig,

@Rig: impara come vai, è così che l'ho fatto. Imparare dal punto di vista della matematica, IMHO, è basso-ackwards.
Coder

8

Il commento di SomeKittens è giusto sui soldi: hai bisogno di calcolo e algebra lineare perché quei corsi cambiano il modo in cui pensi e il modo in cui comprendi il mondo. L'algebra lineare riguarda la mappatura da un dominio all'altro; il calcolo copre il modo in cui le funzioni si comportano. Sono strumenti potenti stessi, ma le tecniche che impari studiando quei campi diventano anche parte della tua immagine mentale del mondo.

Hai anche bisogno di quei corsi perché le persone si aspettano che tu sia in grado di pensare in questi termini. Non vedo spesso i miei colleghi prendere la derivata di un polinomio sulle loro lavagne bianche, ma vedo spesso schizzi di funzioni con la tangente disegnata in un punto interessante o l'area sotto la curva ombreggiata. Non ci preoccupiamo abbastanza dei valori effettivi da preoccuparci di calcolarli, ma capire come cambiano i valori è essenziale ed è parte delle conversazioni quotidiane.

Qualsiasi laurea in informatica richiede calcoli, algebra lineare, statistica, logica e altri corsi di matematica non perché i programmatori debbano applicare le tecniche direttamente su base regolare (anche se potrebbero, a seconda di ciò che fanno), ma perché ne hai bisogno conoscenza per comprendere il materiale che verrà dopo.


2
Se potessi votare questo più di una volta, lo farei.
Mr.Mindor,

Anche se una risposta utile, ma non risponde alla domanda. Ad esempio, sono venuto qui perché recentemente stavo facendo un po 'di hacking sul driver r600g per divertimento e sono anche interessato a migliorare il background matematico, che è debole. Sarebbe davvero bello trovare un'idea da implementare nel driver che richieda l'estensione della mia conoscenza matematica, preferibilmente qualcosa di algebra astratta, topologia, ma non necessariamente limitato. Un gruppo di domande come "matematica di sviluppo dei driver" non ha prodotto un singolo documento, questa pagina è la più vicina che ho potuto ottenere.
Hi-Angel,

@ Ciao Angelo non sono d'accordo. Potrebbe non rispondere alla domanda nel modo in cui ti aspettavi, e potrebbe non rispondere alla tua domanda separata "su cosa posso lavorare per migliorare le mie capacità matematiche", ma sostengo che la matematica avanzata sia utile a un programmatore di sistema principalmente perché cambia la tua prospettiva e fornisce una comprensione più profonda. I programmatori grafici usano effettivamente il calcolo e l'algebra lineare su base regolare, meno i programmatori di sistema. Ma comprendere questi argomenti è ancora importante.
Caleb,

6

Continuerò e dirò che non credo che il calcolo o l'algebra lineare siano probabilmente importanti per la programmazione dei sistemi.

Sicuramente penso che vale la pena imparare il calcolo e l'algebra lineare in generale: sono un ragazzo di matematica! E, come sottolineano altre risposte, vi è una certa rilevanza indiretta, poiché l'analisi delle prestazioni e la progettazione dell'algoritmo possono utilizzare la matematica avanzata. Tuttavia, non penso che la programmazione dei sistemi sia più dipendente da quel tipo di matematica rispetto alla maggior parte degli altri campi che non sono generalmente considerati matematici.


Hai mai visto una GPU? :) È un po 'matematico, esp. per scrivere i driver per questo ... ma è vero: se sei bloccato, puoi sempre usare math.stackexchange.com :))
Aadaam,

Sono anche un ragazzo di computer grafica; Assomiglio a quell'osservazione! E hai ragione: chiunque voglia scrivere un driver per scheda grafica deve comprendere la grafica del computer (e l'algebra lineare e il calcolo di base che comporta) nonché la programmazione dei sistemi.
comingstorm

Per quanto posso vedere, è necessario conoscere la trigonometria e l'algebra lineare per fare qualcosa di utile dall'API grafica, ma non per implementare questa API in un driver grafico. Lì ti occupi principalmente di cambiare un mucchio di registri in base alle richieste dell'applicazione. L'unico posto in cui applicare la matematica nel driver grafico che posso immaginare sono le ottimizzazioni per il suo compilatore. Correggimi se sbaglio - Voglio esserlo. In realtà sono venuto qui perché voglio migliorare il mio background in matematica e sto anche facendo un piccolo hacking su r600g, e sarebbe bello combinare entrambi.
Hi-Angel,

4

Sospetto che sia vero attorno ai bordi. I programmatori di sistema devono essere molto più preoccupati delle prestazioni e dell'affidabilità, quindi l'analisi dell'algoritmo potrebbe essere importante e talvolta è necessario il calcolo per le prove dell'analisi Big-Oh. Anche soggetti come la teoria delle code e l'ottimizzazione discreta (ovvero l'ottimizzazione matematica non l'ottimizzazione del codice) possono svolgere un ruolo. Tuttavia, penso che ciò si applicherebbe soprattutto alle persone che lavorano ai margini dei sistemi operativi e dei protocolli di rete, non tanto alla persona che lavora sul driver USB 3.0.


For¹ per l'ottimizzazione discreta, sembra essere interessante e correlato.
Hi-Angel,

1

La tua definizione di Programmazione di Sistemi si allinea abbastanza bene con la risposta in Wikipedia.

Se pensi a ciò che sta fornendo, ad es. un'interfaccia software nell'hardware, quindi inizia a capire perché il calcolo e l'algebra lineare sono abilità utili da avere.

Estrarre quell'interfaccia di basso livello richiede di capire come funziona il dispositivo. I dispositivi elettronici sono ancora vincolati dalle leggi della fisica. Il calcolo e l'algebra lineare forniscono un mezzo per modellare il comportamento del dispositivo. La modellazione del dispositivo consente di fornire un servizio nella sua funzionalità.

Detto questo, quei due campi non sono la fine di tutti per la programmazione di sistemi. Conosco parecchi EE che non hanno fatto altrettanto bene con il calcolo e l'algebra lineare, ma possono comunque spiegare cosa sta facendo il dispositivo in modo abbastanza succinto.


Questa definizione di programmazione dei sistemi è giusta o sbagliata?
Victor,

2
Non è molto preciso. L'interfaccia con una CPU richiede solo la conoscenza delle istruzioni fornite.
DeadMG,

@DeadMG - Non posso discutere nel caso di una CPU. Avevo pensato più ai termini dell'hardware grezzo come un accelerometro o un'interfaccia IO diretta. Detto questo, la maggior parte di quelli sono dotati di una sorta di chip per fornire l'interfaccia. Penso che i miei commenti siano più appropriati per la logica all'interno del chip rispetto forse al livello del driver del dispositivo.

1

L'applicazione web generale e / o la programmazione amministrativa non implicano molta applicazione dell'algebra lineare o del calcolo, ma molti campi specialistici lo fanno. Se hai a che fare con la geometria, ti imbatterai in un'algebra lineare. La maggior parte della programmazione fisica si occupa anche di algebra e calcolo. Oltre a tutto ciò che riguarda la manipolazione della forma d'onda, come la programmazione del suono e della radio. In generale è più importante comprendere la matematica discreta che, tra le altre cose, si occupa della teoria degli insiemi, della teoria dei grafi e della logica formale (booleana) che è utile in molte applicazioni come la gestione delle informazioni, i database e altri luoghi in cui dati e / o logica si combinano . Nel caso della programmazione di sistemi non vedo molte applicazioni.


2
Penso che tu possa "cavartela" senza mai usare il calcolo o l'algebra lineare nella maggior parte dei domini di programmazione. Tuttavia, se ti senti a tuo agio con i concetti, rimarrai sorpreso da quanti diversi problemi puoi applicarli. Misurando e predicendo la deriva dell'orologio, mi viene in mente il tempo di mantenimento della batteria di cose per le quali ho appena usato il calcolo di recente. La triangolazione e la previsione del percorso riguardavano l'algebra lineare per un problema su cui ho lavorato l'anno scorso. Nessuno dei problemi richiesti dall'uso di questi argomenti come i precedenti metodi di approssimazione estremamente complicati e poveri che altri hanno dimostrato ...
Dunk,

2
(cont) ... ma facendo uso della matematica più avanzata fatta per implementazioni molto più succinte e accurate che funzionavano come avrebbero dovuto. IOW, il calcolo e l'algebra lineare sono strumenti potenti una volta che hai imparato come applicarli e ti aiuteranno a salire in cima rispetto alla maggior parte degli altri programmatori, dal momento che la maggior parte non si preoccupava di imparare la matematica sufficientemente mentre era a scuola. Per me, ha significato mettersi al lavoro su progetti davvero fantastici contro i banali.
Dunk,

0

Come altri hanno già detto, qualsiasi corso di matematica all'università può affinare le tue capacità di problem solving e di ragionamento deduttivo. Questi sono importanti per quasi tutti.

Ma a volte conoscere qualche algebra lineare può essere utile, in particolare per alcune idee imprenditoriali piuttosto buone .


0

La programmazione del sistema, per quanto ne so, riguarda osdev, i driver, i programmi di utilità e così via. Non riesco proprio a capire come il calcolo e l'algebra lineare possano esservi utili.

Con il calcolo è abbastanza facile, non appena si dà uno sguardo più da vicino al contenuto del corso . È strettamente correlato alla complessità dell'algoritmo, alla notazione Big-O - cose del genere, piuttosto fondamentali nella programmazione.

Le equazioni sono ciò che ottieni quando si stima la complessità dell'algoritmo. I loop nidificati a tre livelli da 0a Nsono N 3 , i loop nidificati a due livelli sono N 2 , uno è N. La valutazione che si ottiene potrebbe apparire come (N 3 + 2 * N 2 + N) - questa è un'equazione.

Ora, se vuoi capire meglio quanto velocemente aumenterà il tempo di esecuzione quando N aumenta, questo è strettamente correlato a derivati ​​/ differenziazione. Altre parti del calcolo che potresti trovare utili sono i limiti e l'analisi asintotica - questi ti porteranno a comprendere la notazione Big-O, un punteggio migliore durante le interviste di programmazione e possibilmente, una migliore programmazione dei sistemi.

  • Sei assegnato alla progettazione della tabella di allocazione dei file, quale struttura di dati utilizzerai? Supponendo che ci siano molti piccoli file che raramente vengono modificati, quale sarebbe preferibile? Supponendo che una quantità relativamente piccola di file di grandi dimensioni venga sempre aggiunta alla fine, utilizzerai la stessa struttura? Come decideresti?

Per quanto riguarda l' algebra lineare , qui le applicazioni di programmazione ti sparano fin dalla prima immagine.

http://pad1.whstatic.com/images/thumb/c/c4/LaTeX-2m.jpg/251px-LaTeX-2m.jpg

Se dovessi mai avere a che fare con la grafica raster (ad esempio nei driver video), le immagini come sopra ti arriveranno nei tuoi peggiori incubi.

  • Come mai quel test n. 12345 mostra pixel mancanti? ho fatto qualcosa di sbagliato nell'implementare Bresenham ? potrebbe essere solo un errore nella progettazione del test che non tiene correttamente conto degli errori di arrotondamento?

C'è una tendenza in cui CS in ogni università che conosco si sta separando dai dipartimenti di matematica. Penso che sia una mossa molto intelligente. Inoltre, gli studenti CS sono pensati per capire le soluzioni usando soluzioni esistenti. Un bravo studente CS leggeva un documento sul contenitore, vedeva una O (nsomething), apriva la Wikipedia, vedeva il grafico e decideva se il contenitore era appropriato. Ciò richiederebbe 2 minuti, proprio come il controllo della reentranza e dei requisiti dei parametri per alcune chiamate alle funzioni API. E, IMHO, un profiler è quasi sempre una soluzione migliore della matematica teorica.
Coder

2
@Coder, ovviamente alcuni studenti di informatica finiscono per essere quelli che devono innanzitutto progettare i contenitori e gli algoritmi. Per loro la matematica e il profiler sono strumenti complementari: la matematica non fornirà un'implementazione funzionante e il profiler non ti avvertirà che i tuoi dati di test sono solo un colpo di fortuna.
Charles E. Grant,
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.