ソフトウェア自体は、コンピューターに何をすべきか伝える一連の指示またはプログラムであり、ハードウェアに依存せず、コンピューターをプログラムで制御できるようにします。3つの基本的なソフトウェアは次のとおりです。
システム・ソフトウェアは、オペレーティング・システム(OS)やディスク管理、ユーティリティー、ハードウェア管理、そのほか操作に必要な中核機能を提供します。
プログラミング・ソフトウェアは、プログラマーにツールを提供します。たとえばテキスト・エディター、コンパイラー、リンカー、デバッガー、そコードを作成するためのその他ツールなどです。
アプリケーション・ソフトウェア(アプリケーションまたはアプリ)はユーザーのタスク実行を支援します。職場の生産性を上げるスイート、データ管理ソフトウェア、メディア・プレーヤー、セキュリティー・プログラムがその例です。アプリケーションはAmazon.comでのお買い物、Facebookでの交流、Instagramへの写真投稿に使われるようなウェブおよびモバイル・アプリケーションも指します。1
4つ目として考えられるのは、組み込みソフトウェアです。組み込みソフトウェアは通信ネットワーク、車、工業用ロボットなど、一般的にコンピューターと見なされない機械やデバイスの制御に使われます。こうしたデバイスやソフトウェアはモノのインターネット(IoT)の一部として接続される場合があります。2
ソフトウェア開発を主に行うのはプログラマー、ソフトウェア・エンジニア、ソフトウェア・デベロッパーです。これらの役割は相互に関連しており、重複する部分もあります。3者間の関係性は、開発を担う部署やコミュニティーで大きく異なります。
プログラマーまたはコーダーはソースコードを書き、コンピューターがデータベースのマージやオンライン注文の処理、通信の送信、検索の実行、文章や図表の表示といった特定のタスクを行うようプログラムします。通常、プログラマーはソフトウェア・デベロッパーやエンジニアの指示を理解した上で、C++やJavaなどのプログラミング言語を使用して作業します。
ソフトウェア・エンジニア は、エンジニアリングの原則を用いて問題解決のためのソフトウェアとシステムを構築します。特定の事例やクライアントの問題をただ解決するのではなく、モデリング言語とその他ツールを使って、一般的な方法で幅広い問題に適用できるソリューションを考案します。ソフトウェア・エンジニアリングのソリューションには一貫して科学的手法が用いられており、橋やエレベーターのように現実世界で機能するものでなくてはなりません。マイクロプロセッサー、センサー、ソフトウェアの性能が上がり、製品の情報処理機能が向上するにつれて、ソフトウェア・エンジニアの責任も大きくなっています。市場での差別化を図るためソフトウェアに依存する製品が増えていますが、それだけでなく、ソフトウェア開発は製品の機械的および電気的な開発との調整が必要です。
ソフトウェア・デベロッパーの役割はエンジニアほど定型通りではなく、コード記述を含め、具体的なプロジェクト領域に密接に関わる場合があります。同時に、ソフトウェア開発のライフサイクル全般を動かします。複数のチームにまたがって要件を機能に作り変え、開発チームと工程を管理し、ソフトウェアのテストと保守を実施することも含まれます。3
ソフトウェア開発の仕事は、コーダーや開発チームだけで行うものではありません。科学者、デバイス製造業者、ハードウェア・メーカーといった専門家も、もともとはソフトウェア・デベロッパーではありませんが、ソフトウェアのコードを作成します。また、ソフトウェアや半導体事業といった従来型のIT業界にも限定されません。Brookings Instituteによると(ibm.com外部へのリンク)、こうした事業は「ソフトウェア開発を行う企業の半分以下」となっています。
カスタム・ソフトウェア開発と市販ソフトウェア開発には重要な違いがあります。カスタム・ソフトウェア開発とは特定のユーザー、部門または組織に対してソフトウェアを設計、作成、展開、保守するプロセスです。対照的に、既製の商用ソフトウェア(COTS)は幅広い要件に対して設計されているので、パッケージ化して市販・配布できます。