web-dev-qa-db-ja.com

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

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

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

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

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

10
Victor

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

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

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

また、計算は、データへの曲線フィッティングを試みるときに、線形代数以外にもパフォーマンス分析で重要な役割を果たします。

6
Peter Smith

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

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

学部のコンピュータサイエンスの学位には、計算、線形代数、統計、論理、およびその他の数学のコースが必要になります。後で来る資料を理解する知識。

8
Caleb

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

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

6
comingstorm

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

4

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

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

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

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

1
user53019

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

1
Onno

他の人が述べたように、大学の数学コースは問題解決と演繹推論のスキルを磨くことができます。これらはほとんど誰にとっても重要です。

ただし、線形代数を知っていると役立つ場合もあります。特に いくつかのかなり優れたビジネスアイデアの場合 が役立ちます。

0
joshin4colours

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

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

方程式は、アルゴリズムの複雑さを推定するときに得られるものです。 0からNまでの3レベルのネストされたループはN、2レベルのネストされたループはN2、1つはNです。得られる評価は(N + 2 * N2 + N)-それは方程式です。

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

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

線形代数 については、ここでプログラミングアプリケーションは最初の写真からあなたを撃ちます。

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

ラスターグラフィックス に対処する必要がある場合(例:ビデオドライバー)、上記のような画像が最悪の悪夢の中であなたにやってくるでしょう。

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