システムソフトウェア
システムプログラミング(英: System programming)は、システムソフトウェアのプログラミングを指す。以下では、オペレーティングシステムやデバイスドライバの開発におけるシステムプログラミングについて述べる。アプリケーションソフトウェアのプログラミングとの主な違いは、ハードウェアとの関わりが大きい点である。他にも以下のような特徴がある。
プログラマはハードウェアやその他のシステムの特徴を前提として、それらを利用してコードを作成する。例えば、そのハードウェアで効率がよいとわかっているアルゴリズムを採用したりする。
以下のような低レベルなプログラミング言語が使われることが多い。 リソースに制限のある環境で動作可能な言語を使う。 効率がよく、実行時オーバーヘッドの小さい言語を使う。 ランタイムライブラリが非常に小さいか、全くライブラリを持たない言語を使う。 メモリアクセスや制御構造を直接制御できる。 プログラムの一部を直接アセンブリ言語で書くことが出来る。
リソースが制限されているためデバッガが使えない場合もあり、そうするとデバッグが困難になる。このため、エミュレータ上でデバッグを行ったりする。
システムプログラミングはアプリケーションプログラミングとかなり異なるため、プログラマはそれぞれの領域に特化する傾向がある。 高い実行効率が求められるため、プログラマーにはアルゴリズムとデータ構造に関する深い知識が要求されることもあるが、資源の制約などで高度なアルゴリズムやデータ構造が使えないという縛りの下でのプログラミングが必要なこともある。