教養としてのプログラミング的思考の表紙

教養としてのプログラミング的思考

今こそ必要な「問題を論理的に解く」技術


本書の要点

  • プログラムは、コンピュータを動かす処理手順である「アルゴリズム」をもとに、プログラミング言語と呼ばれる一連の命令で記述されている。

  • 今日のコンピュータは電卓と異なり、知的な仕事ができる機械である。それはプログラミング言語という中間言語が進化したためだ。

  • アルゴリズムにもとづくプログラミング的思考は、コンピュータを動かすだけではなく、私たちの日常生活にも応用できる。数多くのアルゴリズムから最適なものを選び、順序立てて思考を明確化することが重要である。

1 / 5

コンピュータとソフトウェア

私たちの身近にあるコンピュータ

a-image/iStock/Thinkstock

私たちの身近にはすでに多くのコンピュータが存在し、生活とは切り離せないものとなっている。かつてコンピュータといえば、パソコンをイメージする人が多かった。だが現在、あらゆる家電にコンピュータ技術が応用され、その存在はほとんど意識されなくなっている。コンピュータの存在感が希薄になっていくのと反比例するように、私たちの生活はコンピュータに依存したものへ変わってきているのだ。いま家電量販店で売られている多くの家電製品は、コンピュータを内蔵している。そのコンピュータの頭脳に当たる部分がCPU(中央制御装置)だ。このCPUとソフトウェア、そして各種のデータを保存するメモリによって、家電のなかのコンピュータシステムは成り立っている。たとえば炊飯器の場合、炊飯コースの設定にしたがって、コンピュータが蒸気発生器や炊飯釜ヒーターを制御する。またCPUが常に温度センサーなどの情報をモニタリングすることで、最適な炊飯がおこなわれる。そして各種の設定情報やリアルタイムのセンサー情報は、メモリに保存されて管理されるという仕組みだ。

思考機械としてのコンピュータ

プログラムとは人間が書いたコンピュータへの命令の集まりだ。これをコンピュータに理解できる言葉に翻訳したものがソフトウェアである。プログラムとソフトウェアは、「私たちがコンピュータを使って実現したいこと」を具現化したものだ。プログラムはコンピュータを動かす処理の手順である「アルゴリズム」をもとに、プログラミング言語と呼ばれる一連の命令で記述されている。これを前提にして、実際にコンピュータを動かすソフトウェアができあがる。プログラムそれ自体は、独立した命令文を集めたものだ。だが最終的な目的を達成するには、あらゆる命令を正しく組み合わせ、意図した行動が達成される仕組みが必要となる。重要なのはプログラムそのものよりも、その前提となるアルゴリズムということができるだろう。

2 / 5

プログラミング的な思考と表現

プログラミング的に考える準備

scyther5/iStock/Thinkstock

プログラミングをするには、コンピュータを使ってなにをどうするのか考える「プログラム設計」という作業が必要になる。使用するプログラム言語やOSなどの条件をもとに、適切なアルゴリズムやデータベースの構造を決定し、プログラムを細部まで決める。その後コンピュータを使って実際にソースコードを入力し、変換ソフトウェアを使って、コンピュータが理解できる言語に置き換えていく。ただしこの時点で、問題なく動くプログラムというのはほとんど存在しない。できあがったらコンピュータ上で動かしてテストを重ねていく。これを「デバッグ」と呼ぶ。プログラムを打ちこむ作業よりも、デバッグ作業の方に多大な時間が費やされることも珍しくない。プログラムの完成度や完成までのスピードは、プログラミングが始まる前の段階で決まる。だからこそ設計の時点で、実現すべき要件を正確に盛りこむことが重要である。

思考表現としてのプログラム

世界で最初のプログラミングは、計算問題を解くために加算機や乗算器などの計算回路をつなぎ替える目的で考案された。当時は複雑な数式を組み替えることがもっとも大切であり、そこに「思考を表現する」などという意味合いは存在しなかった。今日のコンピュータは電卓的な計算機の範囲を超え、人間の代わりに知的な仕事をする機械と化した。まるでかつてただの計算機だったコンピュータが、突然変異を起こしたようだ。だが実際は突然変異などではない。プログラミング言語という中間言語の進化が、高度に抽象的な人間の思考内容すらも、コンピュータ上に反映できるようにしたのだ。ただしプログラムに思考を反映できるようになったといっても、そこにはまだいくつかの条件がある。(1)考え方が順序立てられていること、(2)順序立てられた処理の内容がそれ自身で完結していること、そして(3)感情表現や抽象的表現のようなあいまいさがないことだ。プログラムを組むためには、人間側の思考が明瞭でなければならないのである。

3 / 5

【必読ポイント!】プログラムの基本形と考え方

カレーライスを作る

もっとも基本的なプログラムは、上から一直線に処理をこなしていく形態である。ここでは料理ロボット用のカレーライス調理プログラムを題材に、直線的な処理の作り方を通して、「あいまい」な指示をどのようにプログラミングしていくか見ていく。炊飯の段階で重要なのは、米の量や研ぎ時間、セットする炊飯コースの指定など、具体的な値を入力することだ。またカレーを調理する段階でも、材料の分量をすべてグラム単位で計算するとともに、「しんなりするまで炒める」や「とろみがつくまで煮込む」といった抽象的な表現を、すべて正確な時間で表現しなければならない。人間なら目分量でおこなえることも、コンピュータには具体的な条件として指示する必要がある。プログラミング作業だけでいえば、直線的な処理は非常に単純だ。しかし「あいまいさ」を取り除く作業のような「なにをプログラミングするのか」という視点は、処理の流れとはまた異なった次元で大切なポイントになる。

じゃんけんの勝ち負け

tommaso79/iStock/Thinkstock

特定の条件についての判断結果によって次の処理内容が変わる「条件分岐」を、プログラミングでは頻繁に使う。ここではじゃんけんを例として、条件分岐のプログラミング処理を考えていく。まずじゃんけんの詳細なルールを入力する。合図を出し、自分の手を指示し、相手の手を見て勝敗を判定する、といった感じになるだろう。このとき勝ちか負けか、あるいはあいこかによって、次の行動が分岐する。勝った場合は「勝ち」を宣言、負けた場合は「負け」を宣言、あいこの場合は最初に戻るといった行動を記す。ここに勝ち負けの判定方法を加えたフローチャートを作ることで、条件分岐を加えたプログラミング処理が完成する。

4 / 5

正解のない問題をプログラミングする

定量化してプログラミングする

論理的な正解のない問題に対する解決に、コンピュータを活用することは可能だろうか。ここではアルゴリズムを概念化し、ひとつの答えを導き出す過程を紹介する。とはいえ注意しなければならないのは、ここで出てくる答えはかならずしも真理ではなく、アルゴリズムにもとづいたひとつの結論にすぎないということだ。「買い物」を例にとろう。買い物は商品と価値の交換だ。その判断には思考や投機的期待など、それぞれ異なった価値交換の考えが働いている。感情をともなった曖昧な買い物の判断をプログラム化するには、なんらかの手順で定量化された指標に置き換える必要がある。たとえば必要性と価格のバランスを数量化し、価格順に選択肢を並べるなどの手順を加え、購入判定プログラムのアルゴリズムを組み立てなければならない。

推論をプログラミングする

今日の情報化社会では、驚くべき速さで情報が拡散されるが、その正確性は定かではない。私たちが入手する情報について、その真偽の判定を行うプログラミングを作ることは可能だろうか。たとえば入手する情報を、「ニュース」「特ダネ」「怪情報」の3つに分類し、それぞれの真偽判定アルゴリズムを検討。最後に「入力情報」に対する真偽判定として、プログラムを統合することは可能である。そして情報源は実在するか、情報源が情報を発信したことは事実か、発信情報の内容によって誰かが利益を得たり不利益を被ったりしないかなど、「推定した発信情報の真偽のレベルを判定する」ための判断基準を入力する。それをフローチャートに入れれば、情報の正しさを推定するプログラミングが完成するはずだ。

プロセスをプログラミングする

プロセスを処理するプログラムは、ある種の対話型コンピュータシステムについて考えることと似ている。たとえばディベートは、議論自体の進め方と思考の進め方がセットになっている。ディベートの主張は通常、複数の論拠から成り立ち、証拠となる根拠がそれを支える。主題の性質上、賛否どちらかが100%正しいということはあり得ないため、相手の主張の整合性を崩すことが目的となる。相手の論拠の欠点・弱点・矛盾・根拠の欠落を露呈させつつ、それを防いだ方が勝ちだ。反論を述べるフローチャートを作り、それにしたがって議論を進めていくことは、プロセス的なプログラミングのイメージに近い。プログラミング的思考は、実際の議論の場でも活用できるといえる。

5 / 5

プログラミングに適したアルゴリズムを考える

視点を変えてアルゴリズムを置き換える

venuestock/iStock/Thinkstock

問題を解くアルゴリズムは、1つの問題に1つしかないわけではない。実現方法の視点を変えれば、まったく異なる方法を用いることもできる。たとえばカレーライスの作り方をプログラミングするとき、「玉ねぎがしんなりするまで炒める」というだけでは曖昧すぎる。だがここには「玉ねぎを炒める」と「玉ねぎがしんなりしたら炒めるのをやめる」という2つの動作が含まれており、後者を「玉ねぎを10分炒めたら終了する」に置き換えれば表現可能だ。もちろん玉ねぎの状態によって終了を判定することが、かならずしも不可能というわけではない。玉ねぎの状態の変化を常に監視して、その違いから終了のタイミングを導き出すこともできるだろう。とはいえ現実的な視点からいえば、時間判定の方が適当だ。手間や費用といった外的な要因から、適切なアルゴリズムを導き出すことも、プログラミングには欠かせない要素なのである。

電卓とコンピュータの違い

電卓とコンピュータの生まれはどちらも計算機だ。しかし電卓で計算するには、人間が特定の演算キーを特定の順番で押す必要がある。つまり電卓は計算能力があっても、問題の解き方(アルゴリズム)をもたないため、解ける問題の範囲が狭いのだ。これに対しコンピュータは、プログラムという形でアルゴリズムを内包しているので、答えを求めることができる。アルゴリズムをもつかもたないかを境にして、両者は求められる機能とできることがまったく異なる道具となり、現在にいたっている。このことからプログラムは、コンピュータが理解できるアルゴリズム表現として、非常に大きな役割を果たしているといえるだろう。</p>

もっと見る
この続きを見るには...
残り0/4180文字

4,000冊以上の要約が楽しめる

要約公開日 2018.06.17
Copyright © 2025 Flier Inc. All rights reserved.

一緒に読まれている要約

ソーシャル物理学
ソーシャル物理学
アレックス・ペントランド小林啓倫(訳)
最強の思考法 「抽象化する力」の講義
最強の思考法 「抽象化する力」の講義
的場昭弘
インド・シフト
インド・シフト
武鑓行雄
信用の新世紀
信用の新世紀
斉藤賢爾
問題児
問題児
山川健一
会社をつくれば自由になれる
会社をつくれば自由になれる
竹田茂
新しい時代のお金の教科書
新しい時代のお金の教科書
山口揚平
ビジネススクールで教えている武器としてのITスキル
ビジネススクールで教えている武器としてのITスキル
グロービス経営大学院

同じカテゴリーの要約

AIエージェント革命
AIエージェント革命
シグマクシス
生成AI最速仕事術
生成AI最速仕事術
たてばやし淳
トリニティ組織
トリニティ組織
矢野和男平岡さつき(協力)
AIのド素人ですが、10年後も仕事とお金に困らない方法を教えて下さい!
AIのド素人ですが、10年後も仕事とお金に困らない方法を教えて下さい!
木内翔大
生成AIで世界はこう変わる
生成AIで世界はこう変わる
今井翔太
頭がいい人のChatGPT&Copilotの使い方
頭がいい人のChatGPT&Copilotの使い方
橋本大也
超初心者でも稼げるAI活用法
超初心者でも稼げるAI活用法
あべむつき
DIGITAL STANCE スマホに支配されない生き方
DIGITAL STANCE スマホに支配されない生き方
ピョートル・フェリクス・グジバチ
先読み!IT ×ビジネス講座 ChatGPT 対話型AIが生み出す未来
先読み!IT ×ビジネス講座 ChatGPT 対話型AIが生み出す未来
古川渉一酒井麻里子
日本再興戦略
日本再興戦略
落合陽一