部室の予約アプリを作ったとします。日付と名前を入れる画面は動きました。でも、二人が同じ時間に予約したらどうなるか、予約した人だけが取り消せるか、利用ルールが変わったらどこを直すかは、まだ決まっていません。[1]
「ソフトウェア・プログラミング」分野では、コンピュータに処理を表現する言語と、プログラムを設計・実装・検証し、変更していく方法を学びます。コードを書くことは中心的な作業ですが、何を実現するかを決めることや、他の人と作り続けることも含みます。
誰が、いつ予約できるかを決める
まず、システムに「何ができる必要があるか」を決めます。例えば、部員が空き時間を調べて予約できること、予約した本人が締切まで取り消せることです。こうした機能とその動作条件を定めたものを「機能要件」と呼びます。予約を認める時間帯や重複の扱いが曖昧なままだと、コードが実行できても、期待された動作なのか判断できません。[2]
機能に加え、「どのくらい速く、安定して使える必要があるか」も考えます。例えば、100人が同時に使っても空き時間を2秒以内に表示する、故障したときに予約記録を復元できるようにする、といった条件です。このような性能や信頼性、保守のしやすさなどの品質・制約に関する要件を「非機能要件」と呼びます。機能がそろっていても、使うたびに長く待たされたり、故障で記録を失ったりするシステムでは困るためです。[2]
次に、予約を表すデータと、そのデータを操作する機能を分けて考えます。画面、予約のルール、データの保存を一か所に詰め込まず、それぞれの役割と受け渡しを決めると、変更の影響を追いやすくなります。
例えば予約単位を30分から15分へ変えるとき、画面だけ直せばよいのか、重複を調べる処理も変わるのか。こうした問いから、設計の意味が見えてきます。
プログラミング言語を学ぶとは
プログラミング言語には、条件によって処理を分ける「条件分岐」、同じ処理を繰り返す方法、処理をまとめる「関数」などを記述するための規則があります。例えば、「空き時間なら予約を受け付ける」という判断や、「予約一覧を一件ずつ表示する」という処理を、その言語の規則に従って書きます。こうした書き方の規則を「文法」と呼びます。まずは言語ごとの記法を理解し、意図した処理をどう表現するかを学びます。
数値や文字列といったデータの種類を表す「型」も重要です。型の指定方法や、型の違いをどの段階で調べるかは言語によって異なります。人数を足す処理に名前の文字列を渡してしまう、といった誤りを実行前に見つける仕組みもあります。
さらに、なぜそのような記法や規則が用意されているのか、書いたプログラムがどのように解釈され、実行されるのかへと理解を深めます。例えば、処理のまとまりを明示すると読み間違いを減らせることや、型の規則によって防げる誤りを考えます。コンパイラなどの仕組みを学ぶと、ソースコードの文法を調べ、意味を読み取り、実行できる形へ変換する過程も扱います。特定の言語で書けるようになることと、言語そのものの仕組みを理解することの両方が、この分野の学びです。
作るだけではなくテストもソフトウェア・プログラミング分野では重要
「予約できました」という画面が表示されただけでは、必要な機能をすべて満たし、正常に動作しているとは言えません。実際に予約が保存されたか、空きのない時間には申し込めないか、締切を過ぎた取り消しを受け付けないかなど、決めた要件に合うかをテストで確かめる必要があります。
テストにも、確認する条件を筋道立てて選ぶ手法があります。入力を「受け付けるもの」「受け付けないもの」に分けて代表的な例を選ぶ方法や、締切の直前・ちょうど・直後のように、動作が変わる境目を重点的に調べる方法です。変更後に以前の機能を壊していないか確かめる「回帰テスト」もあります。テストに通ればあらゆる誤りがないと証明できるわけではありませんが、何を確かめるかを設計し、誤りを見つけやすくする考え方を学べます。[3]
こうした内容は、例えば「ソフトウェア工学」では要件の整理やテストの設計として、「ソフトウェア設計」では機能を分けて組み合わせる方法として学びます。「ソフトウェア開発演習」などでは、仕様を決め、実装し、テストで確かめる一連の開発に取り組むことがあります。科目名や扱う範囲は大学によって異なります。[4]
複数人で開発するための手法もあります。例えば、短い期間で計画・実装・振り返りを繰り返す進め方や、変更したコードを別の人が確認するレビューです。誰が何を変えたかを記録し、別々に作った部分を組み合わせ、共通の仕様や文書を保つことも必要になります。科目によっては、こうしたチームでの開発を想定した方法を、講義や共同制作を通じて学びます。
AIがコードを書く時代に、何を学ぶ?
生成AIに文章で指示してコードを作らせたり、修正案やテストの案を出してもらったりすることが、実際の開発現場でも行われています。
予約アプリのコードをAIが書く場合にも、「同じ時間への予約が重なったら、どちらを受け付けるか」「利用ルールを変えても、過去の予約が壊れないか」といった問いは残ります。AIに設計やテストを手伝わせる場合も、何を正しい結果とし、どの条件で確かめるかを考える必要があります。
こうした検証は、AIを使った開発でも重要です。AI開発支援ツールCodexを提供するOpenAIは、コードの変更に加え、必要なテストや確認を行い、結果が依頼に合っているかを確かめることを勧めています。Claudeを開発するAnthropicも、AI自身が結果を検証できるよう、テストや期待する結果を与えることを重視しています。AIに何を作らせるかだけでなく、その成果をどう確かめるかも、開発の一部なのです。[5]
大学では、具体的なアプリを作る経験を通じて、別のプログラムにも使える考え方を学びます。複雑な仕組みから必要な性質を取り出す「抽象化」、プログラムの意味や型、アルゴリズムの効率、正しさを論理的に確かめる方法などです。予約アプリなら、「予約の追加・変更・取消しの後も、同じ時間帯の予約は重ならない」という、常に守りたい条件を表し、それが保たれるように処理を設計する考え方につながります。[4]
こうした基礎は、AIへの指示を具体的にすること、提案された複数の設計を比べること、生成されたプログラムの問題を説明することにも役立ちます。使う言語や開発ツールが変わっても応用できる原理を、実装と結びつけて学ぶことに意味があります。
システム・データベースとの違い
予約を記録し、同時の更新でも矛盾を防ぐ技術は「データベース・Webサービス」分野とつながります。プログラムを実行するCPUやOSの仕組みは「コンピュータシステム・半導体・高性能計算」分野、権限や攻撃への備えは「セキュリティ」分野にも関わります。
「ソフトウェア・プログラミング」分野では、こうした基盤を利用しながら、要求を満たすプログラムをどのように構成し、正しさを確かめ、育てていくかに重点を置きます。複数の分野が同じ制作物へ関わることは自然です。
大学で学ぶ科目
学部では、プログラミングの基礎、データ構造とアルゴリズム、プログラミング言語、ソフトウェア工学などを学びます。言語の授業では、文法を覚えるだけでなく、プログラムを実行できる形へ変換する仕組みにも進みます。制作演習なら、予約アプリのルールを決め、実装し、テストを用意し、チームで変更を管理する、といった一連の開発を経験できます。[4]
大学院では、プログラムを数学的に検証する方法や、開発を支援する技術などを専門科目・研究で深めます。研究の例には、誤りを自動で発見する方法を考えて実際のコードで確かめることや、開発者が変更を理解しやすい道具を作って評価することがあります。[6]
アプリを完成させることだけでなく、「誤りを減らせる開発手法はどのようなものか」といった問いも研究のテーマになります。例えば、テストの作り方やコードの確認方法を変え、見つかる誤りや開発にかかる時間を比べる研究が考えられます。関心に合う専門科目と演習・研究指導の内容を確認することが大切です。
「ソフトウェア・プログラミング」分野を学べる大学学部・大学院を探すから、作ったものを確かめ、改善する学びへ進んでみましょう。
仕事・業界ガイドでは、仕事内容から関連する分野を確認したり、学びたい分野から仕事を調べたりできます。
tojihubの情報分野の区分について
tojihubは、プログラミング言語・開発手法・ソフトウェア工学を、この「ソフトウェア・プログラミング」分野として整理しています。
CS2023と科研費の区分を参考にしています。参照した区分と、各分野に含める内容・隣接分野との関係は、「18の分野について」のページで説明しています。
参考文献・注釈
- [1]部室の例は学び方を説明するための架空の題材で、特定の授業やサービスの紹介ではありません。 本文へ戻る
- [2]IEEE Computer Society『SWEBOK — Software Requirements』の機能要件・非機能要件の説明、情報処理推進機構(IPA)「非機能要求グレード」。人数や応答時間は説明用に設定した値です。 本文へ戻る(1) 本文へ戻る(2)
- [3]IEEE Computer Society『SWEBOK — Software Testing』、MIT「Software Construction — Testing」。入力の分類、境界値、回帰テストと、テストで確認できる範囲を参照。予約アプリの条件は説明用の例です。 本文へ戻る
- [4]MIT「6.102 Software Construction — General Information」、2026年春の公開授業。学習目標と設計・実装・テストのつながりを参照。日本の全大学の授業要件ではありません。 本文へ戻る(1) 本文へ戻る(2) 本文へ戻る(3)
- [5]OpenAI「Best practices — Improve reliability with testing and review」、Anthropic「Best practices for Claude Code — Give Claude a way to verify its work」。AIによる開発でのテスト・検証・変更の確認に関する案内を参照。 本文へ戻る
- [6]MIT「Formal Reasoning About Programs, Fall 2025」。プログラムの数学的な検証を扱う大学院科目の一例です。 本文へ戻る