ユーザーの見方はプログラマとは異なる。(組み込みシステム、アナログコンピュータ、スーパーコンピュータなどとは対照的な)一般のコンピュータのユーザーは、ソフトウェアを3つの階層(プラットフォームソフトウェア、アプリケーションソフトウェア、ユーザー作成ソフトウェア)として見ている。
プラットフォームソフトウェア
プラットフォームには、ファームウェア、デバイスドライバ、オペレーティングシステム、GUIなどが含まれ、ユーザーがコンピュータや周辺機器とやり取りすることを可能にする。コンピュータ本体に同梱あるいはプリインストールされていることが多い。パーソナルコンピュータの場合、プラットフォームソフトウェアをユーザーが置換することも可能である。
アプリケーションソフトウェア
エンドユーザーがソフトウェアと言ったときに想定しているのがアプリケーションソフトウェアである。典型例としてはオフィススイートやパソコンゲームがある。一般にハードウェアとは別に購入される。コンピュータ本体に同梱されることもあるが、独立したアプリケーションとして機能するという事実に変わりはない。アプリケーションは一般にオペレーティングシステムとは独立したソフトウェアであるが、特定プラットフォーム向けに作られることも多い。データベースもコンパイラもその他の「システムソフトウェア」も、エンドユーザーの観点ではアプリケーションと見なされることが多い。
ユーザー作成ソフトウェア
ユーザーが特定のニーズに合うように作成するソフトウェア。表計算ソフトのテンプレート、ワープロソフトのマクロ、科学技術シミュレーション、グラフィックスやアニメーションのためのスクリプトなどが含まれる。電子メールフィルタなども一種のユーザー作成ソフトウェアである。ユーザーは自身の作成したこれらのソフトウェアの重要性に気づいていないことが多い。ユーザー作成ソフトウェアが購入されたアプリケーションソフトウェアとうまく統合されていると、多くのユーザーはその区別ができない。
詳細はプログラミング (コンピュータ)を参照
ソフトウェアは記憶装置(ハードディスクドライブ、RAMなど)に「ロード」されて初めて機能する(実行可能になる)。逆にコンピュータはプログラムを実行することで機能する。このとき、アプリケーションソフトウェア内の命令列がシステムソフトウェアを経由してハードウェア(CPU)に渡され、それを機械語として実行する。各命令はコンピュータに何らかの操作(データの移動、計算、制御フローなど)を実行させる。
データの移動は、一般にメモリ上のある位置から別の位置に行われる。メモリとレジスタ間の移動の場合もあり、CPUがより高速にデータにアクセスできるようにする。大きなデータの移動は時間がかかるため、ポインタを使って移動しない場合もある。計算には、データのインクリメントのような単純なものも含まれる。より複雑な計算には、複数の命令と複数のデータ要素が必要となる。
命令は、逐次的に実行される場合、条件つきで実行される場合、繰り返し実行される場合がある。逐次的命令列は、1つずつ順に演算が実行される。条件付き命令列は、何らかのデータの値によってそれが実行されるか否かが決定される。プログラミング言語によってはこれをif文という。繰り返し命令列は、繰り返し実行されるもので、場合によっては何らかのデータの値で繰り返すか否かが決定される。これをループと呼ぶこともある。命令列をひとまとめにしたものをサブルーチンと呼び、他のサブルーチンを「呼び出す」命令もある。プロセッサが複数あるシステムでは(マルチプロセッシング)、命令列は複数同時並行的に実行される。
例えば、メニューから "Copy" というエントリを選択したとき、ソフトウェアがどのように機能するか考えてみよう。この場合、条件付き命令列が実行され、メモリ上の「文書」領域にあるデータからテキストが、一般に「クリップボード」と呼ばれる中間的記憶領域にコピーされる。別のメニューエントリである "Paste" が選ばれると、ソフトウェアはクリップボードから特定の領域にテキストをコピーする命令列を実行する。
アプリケーションによっては、もっと複雑な処理が行われる。ソフトウェア工学は、そのようなソフトウェアの操作の複雑さを管理・制御しようとする学問分野である。特に大規模なコンピュータを運用するためのソフトウェアは複雑化する傾向がある。
現在では、ソフトウェアの応用範囲を制限しているのは、開発者/プログラマの発想力だけと言っても過言ではない。かつては無理だと思われていた活動(グランドマスターレベルのチェスをさすことなど)も、次々とソフトウェア化されている。芸術だけはソフトウェアによるシミュレーションでは創造できないと考えられている[要出典]。
ソフトウェア品質は、ソフトウェアの運用によって生じるエラーや障害によって測られる。詳しくは、ソフトウェア品質、ソフトウェアテスト、コンピュータセキュリティを参照されたい。