微積分と線形代数は、システムプログラマにとってどのように役立つのでしょうか。[閉まっている]


10

システムプログラミングには微積分と線形代数が必要であるというウェブサイトを見つけました。

システムプログラミングは、私の知る限り、osdev、ドライバー、ユーティリティなどに関するものです。微積分と線形代数がその上でどのように役立つかを理解できません。微積分学は科学においていくつかの応用があることを知っていますが、この特定のプログラミング分野では、微積分学がどれほど重要であるかを想像することはできません。

情報はこのサイトにありました:http : //www.wikihow.com/Become-a-Programmer

編集:ここでのいくつかの回答は、アルゴリズムの複雑さと最適化について説明しています。私がこの質問をしたとき、私はシステムのプログラミングの領域についてより具体的にしようとしていました。アルゴリズムの複雑さと最適化は、システムのプログラミングだけでなく、プログラミングのあらゆる領域に適用できます。それが質問の時に私がそのような考えを思いつくことができなかった理由かもしれません。


6
それはあなたの思考プロセスを変えるほどの直接的な適用ではありません。
SomeKittens 2012

3
私は多くのシステムプログラミングを行っていません(わかりました-何もしていません)が、一連のパフォーマンステストを実行していて、結果に対して統計分析を実行したい場合、微積分と線形代数遊びに来ます。アルゴリズムの複雑さ分析を行うときにも必要になる場合があります。
FrustratedWithFormsDesigner 2012

2
@Telastyn:本当に?それは面白い。それはどのように機能しますか?
FrustratedWithFormsDesigner 2012

2
ウェブサイトへのリンクを提供できますか?より具体的な答えを得るのに役立つコンテキストが追加される場合があります。
カレブ

2
@FrustratedWithFormsDesigner-類推は、値からポインタへの派生です。関数から始めて、別の何かを意味する新しい関数(数値ではなくメモリアドレスを参照するint)を取得するためにそれを派生させます。同じことを意味するが、異なる2次導関数(ポインターへのポインター)を取得することもできます。次に、それを元に戻すには、いくつかの注意事項(関数とオブジェクトのスライスを導出するときに失われる定数)を統合する(ポインターを逆参照する)必要があります。それが理にかなっているといいのですが、それは
長い年月を

回答:


6

内部の作業をせずに、最新のオペレーティングシステム上で非GUIユーティリティを作成する場合は、それほど重要ではないと思います。現代のオペレーションシステムの変更や新しいシステムの開発に取り組んでいる場合は、おそらく別の話になります。

ビデオハードウェアまたはベアメタルウィンドウシステムで作業している場合、グラフィックを効率的に更新するには線形代数の知識が必要になります。私は自分自身を見ていませんが、X、KDE、およびGnomeのソースコードに例が見つかるかもしれません。

デジタル信号処理に関してハードウェアを使用している場合、計算は非常に重要です。ローカルマイクロプロセッサの代わりにシステムのCPUを使用して重い処理を行うデバイスがあり、これらは多くの場合、アナログ電気システムにインターフェイスします。

また、データへの曲線フィッティングを試みる場合、微積分は、線形代数だけでなくパフォーマンス分析でも重要な役割を果たします。


directxやopenglプログラミングを行うだけでも、線形代数を理解する必要があります。
リグ

@リグ:あなたが行くにつれて学ぶ、それは私がそれをやった方法です。数学の側面から学ぶIMHOは、低音を嫌います。
コーダー、2012

8

SomeKittensのコメントは金銭に正解です。これらのコースはあなたの考え方や世界を理解する方法を変えるため、微積分と線形代数が必要です。線形代数は、あるドメインから別のドメインへのマッピングに関するすべてです。微積分は、関数の動作をカバーしています。それらはそれ自体が強力なツールですが、それらの分野を研究するときに学ぶテクニックは、世界の精神的な絵の一部にもなります。

人々はあなたがそれらの言葉で考えることができると期待するので、あなたはそれらのコースも必要とします。同僚がホワイトボードで多項式の導関数をとっているのを見かけることはあまりありませんが、いくつかの興味深い点に接線が描かれた関数のスケッチや、曲線の下の領域に陰影が付けられているのをよく見ます。実際の値を気にしてそれらを計算する必要はありませんが、値どのように変化するかを理解することは不可欠であり、日常の会話の一部です。

学部のコンピュータサイエンスの学位では、計算、線形代数、統計、論理、その他の数学のコースが必要になります。プログラマが定期的に手法を直接適用する必要があるからではありません(ただし、何をするかによって異なりますが)。後で来る資料を理解する知識。


2
これを複数回賛成できるとしたら、そうします。
Mr.Mindor 2012

便利な返信ですが、質問には答えません。たとえば、私が最近r600gドライバをハッキングしていて、数学のバックグラウンドを改善することに興味があるため、ここに来ました。数学の知識を拡張する必要のあるドライバーに実装するアイデアを見つけると本当に良いでしょう。できれば抽象代数、トポロジー以外のものが望ましいですが、必ずしもそれに限定されるわけではありません。"drivers development math"のような一連のクエリでは、1つの論文は作成されませんでした。このページは、私が得ることができる最も近いものです。
Hi-Angel

@ Hi-Angel同意しません。それはあなたが期待した方法で質問に答えないかもしれませんし、あなたの個別の「数学のスキルを向上させるために何ができるか」という質問に答えないかもしれませんが、高度な数学はにシステムプログラマーが変化する点で有用であると私は主張しますあなたの視点と深い理解を提供します。グラフィックスプログラマは実際に定期的に微積分と線形代数を使用しますが、システムプログラマはそうではありません。しかし、それらのトピックを理解することは依然として重要です。
カレブ2017年

6

先に進んで、計算や線形代数がシステムプログラミングにとって重要である可能性は低いと思います。

計算と線形代数は一般的に学ぶ価値があると私は確かに思います-私は数学の人です!そして、他の回答が指摘するように、パフォーマンス分析とアルゴリズム設計は高度な計算を使用できるため、いくつかの間接的な関連性があります。ただし、システムプログラミングは、一般に数学とは考えられていない他のほとんどのフィールドよりも、これらの種類の数学に依存しているとは思いません。


GPUを見たことがありますか?:)これは少し数学的なものです。そのためのドライバーを作成するには...しかし、それは本当です。行き詰まっている場合は、いつでもmath.stackexchange.comを使用できます:))
Aadaam

私もコンピューターグラフィックの人です。私はその発言に似ています!そして、あなたは正しいです。グラフィックスカードドライバーを書きたい人は、コンピュータープログラミング(および線形代数とそれに伴う基本的な計算)とシステムプログラミングを理解する必要があります。
2012

私が見る限り、グラフィックAPIから何か有用なことをするために三角法と線形代数を知る必要がありますが、このAPIをグラフィックスドライバーに実装する必要はありません。そこでは主に、アプリケーションの要求に基づいて一連のレジスターを切り替えることを扱います。グラフィックスドライバーで数学を適用できる唯一の場所は、コンパイラーの最適化です。私が間違っていたら訂正してください—なりたいです。私は実際にここに来ました。数学の背景を改善したいと思っており、r600gのハッキングもほとんどしていないので、両方を組み合わせるといいでしょう。
Hi-Angel

4

私はそれが縁のあたりで本当だと思う。システムプログラマーは、パフォーマンスと信頼性をはるかに重視する必要があるため、アルゴリズム分析が重要になる場合があり、Big-Oh分析の証明には微積分が必要になる場合があります。キューイング理論や離散最適化(コード最適化ではなく数学的最適化)のような主題も役割を果たすことができます。しかし、それらはオペレーティングシステムとネットワークプロトコルの最先端に取り組んでいる人々にほとんど当てはまると思いますが、USB 3.0ドライバーに取り組んでいる人はそうではありません。


discrete離散最適化の場合、興味深い関連性があるようです。
Hi-Angel

1

システムプログラミングの定義は、ウィキペディアの回答とかなり一致しています。

あなたがそれが提供しているものについて考えるなら-つまり。ハードウェアへのソフトウェアインターフェイス、それから微積分と線形代数が便利なスキルである理由を理解し始めます。

低レベルのインターフェースを抽象化するには、デバイスの動作を理解する必要があります。電子機器は依然として物理法則に拘束されています。微積分と線形代数は、デバイスの動作をモデル化する手段を提供します。デバイスをモデリングすると、その機能にサービスを提供できます。

そうは言っても、これらの2つのフィールドは、システムプログラミングのすべてではありません。私は微積分と線形代数でうまくいかなかったかなりの数のEEを知っていますが、それでもデバイスがかなり簡潔に何をしているかを説明できます。


そのシステムプログラミングの定義は正しいですか、それとも間違っていますか?
ビクター

2
それはあまり正確ではありません。CPUとのインターフェースには、提供された命令の知識のみが必要です。
DeadMG

@DeadMG-CPUの場合は議論できません。私は加速度計やダイレクトIOインターフェースのような生のハードウェアの条件に沿ってもっと考えていました。そうは言っても、それらのほとんどは、インターフェースを提供するためのある種のチップに直面しています。私のコメントは、おそらくデバイスドライバー層よりも、チップ内のロジックに適していると思います。

1

一般的なWebアプリケーションや管理プログラミングには、線形代数や微積分の多くのアプリケーションは含まれませんが、多くの専門分野が含まれます。ジオメトリを扱う場合、線形代数にぶつかることになります。ほとんどの物理プログラミングは、代数と微積分の両方も扱います。同様に、サウンドやラジオのプログラミングなど、波形操作に関係するほとんどすべてのものです。一般に、とりわけ、集合理論、グラフ理論、および情報管理、データベース、およびデータやロジックが組み合わされる他の場所などの多くのアプリケーションで役立つ形式(ブール)ロジックを扱う離散数学を理解することがより重要です。 。システムプログラミングの場合、私はそれほど多くのアプリケーションを見ていません。


2
ほとんどのプログラミングドメインで計算や線形代数を使用しなくても、「うまくいく」と思います。ただし、概念に慣れている場合は、それらを適用できるさまざまな問題の数に驚くでしょう。クロックドリフトの測定と予測、バッテリ持続時間は、最近計算を使用したばかりのことを思い出します。三角測量とパス予測には、昨年取り組んだ問題の線形代数が含まれていました。他の人が使用した以前の非常に複雑で貧弱な近似方法が示したように、これらのトピックを使用する必要のある問題はありません...
Dunk

2
(続き)...しかし、より高度な数学を利用して、想定されていた方法で機能する、より簡潔で正確な実装を実現しました。IOW、微積分、線形代数は、それらを適用する方法を学ぶと強力なツールになり、ほとんどの人は学校にいる間に数学を十分に学ぶことを気にしていなかったため、他のほとんどのプログラマーと比べてトップに上がるのに役立ちます。私にとって、それは平凡ではなく本当にクールなプロジェクトに取り組むことを意味しました。
ダンク


0

システムプログラミングは、私の知る限り、osdev、ドライバー、ユーティリティなどに関するものです。微積分と線形代数がその上でどのように役立つかを理解できません。

微積分を使用すると、コースの内容を詳しく見るとすぐに、とても簡単です。これは、アルゴリズムの複雑さ、Big-O表記などと密接に関連しており、プログラミングの基本的な要素です。

方程式は、アルゴリズムの複雑さを推定するときに得られるものです。3レベルのネストされたループ0にはNNです3 2レベルのネストされたループがNあり、2 1あなたは次のようになり得るN.評価され、(N 3 + 2 * N 2 + N) -方程式だという。

ここで、Nが増加したときに実行時間がどれだけ速く成長するかをよりよく理解したい場合、これは導関数/微分と密接に関連しています。役立つと思われる微積分の他の部分は、制限と漸近分析です。これらは、Big-O表記法の理解、プログラミングインタビューでのより良い採点、そしておそらくシステムプログラミングのより良い実行につながります。

  • 設計ファイル割り当てテーブルに割り当てられていますが、どのデータ構造を使用しますか?ほとんど変更されない小さなファイルがたくさんあるとすると、何が望ましいでしょうか?常に最後に追加される比較的少量の大きなファイルを想定して、同じ構造を使用しますか?どうやって決めるの?

線形代数と同様に、ここではプログラミングアプリケーションが最初の画面から撮影します。

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

あなたがこれまでに対処しなければならない場合はラスタグラフィックス(ビデオドライバで例えば)、上記のような写真があなたの最悪の悪夢にあなたに来るということです。

  • テスト#12345で欠落しているピクセルが表示されるのはなぜですか?Bresenhamの実装で何か問題がありましたか?丸め誤差を適切に考慮していないテスト設計の単なる誤りである可能性がありますか?

私が知っているすべての大学のCSが数学の学部から分離する傾向があります。それは非常に賢明な動きだと思います。さらに、CSの学生は、既存のソリューションを使用してソリューションを見つけ出すと考えられています。優れたCSの学生は、コンテナに関するドキュメントを読み、O(nsomething)を表示し、ウィキペディアを開き、グラフを表示して、コンテナが適切かどうかを判断します。一部のAPI関数呼び出しの再入可能性とパラメーターの要件を確認するのと同じように、2分かかります。そして、私見、プロファイラーはほとんど常に理論的な数学よりも優れたソリューションです。
Coder、2007

2
@Coder、もちろん一部のコンピューターサイエンスの学生は、そもそもコンテナーとアルゴリズムを設計しなければならない人になってしまいます。それらにとって、数学とプロファイラーは補完的なツールです。数学は機能する実装を提供せず、プロファイラーはテストデータが単なる変則であることを警告しません。
チャールズE.グラント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.