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

今こそ必要な「問題を論理的に解く」技術
未読
教養としてのプログラミング的思考
教養としてのプログラミング的思考
今こそ必要な「問題を論理的に解く」技術
未読
教養としてのプログラミング的思考
出版社
SBクリエイティブ

出版社ページへ

定価
1,100円(税込)
出版日
2018年03月25日
評点
総合
3.3
明瞭性
4.0
革新性
3.0
応用性
3.0
要約全文を読むには会員登録ログインが必要です
ログイン
本の購入はこちら
書籍情報を見る
本の購入はこちら
おすすめポイント

コンピュータの発展やAI技術の登場により、私たちの生活はここ数年で大きな変化を遂げた。それを受けて、2020年には小学校でもプログラミング教育が必修化される。社会で生きていくうえで、プログラミングの知識が必須になりつつある。とはいえ生活のなかで実際にプログラミングに触れる機会がなく、どうすれば「プログラミング的思考」が身につくのか、わからないという人も多い。

本書はプログラミング的思考を身につけるための入門書だ。とはいっても専門的なプログラミング言語を扱うのではなく、「プログラミングとはなにか」「プログラミング的思考とはどのようなものか」について、焦点を当てた内容となっている。

プログラミング的思考と聞いても、抽象的すぎるように感じるかもしれない。だが「じゃんけん」や「カレーの調理」のような身近なものを例として用いつつ、プログラミング学習を受けたことのない初心者にも、その思考プロセスを理解できる構成となっているのが、本書の大きな特徴である。

プログラミング的思考はコンピュータ技術を理解するための知識というだけではない、と著者はいう。正解のない問題に対して思考を可視化し、順序立てて向き合うひとつの方法として、プログラミング的思考がある。この思考法はコンピュータ技術がさらなる進化を遂げるにつれ、今後ますます社会人に必要とされるスキルになるだろう。

基本的な知識から生活に役立つスキルまで幅広くカバーする、すぐれた案内書だ。

ライター画像
池田明季哉

著者

草野 俊彦 (くさの としひこ)
1986年千葉大学工学部卒。同年日本電気株式会社に入社。高度先端基幹通信システムの研究開発に従事。米国デラウェア大学コンピュータ情報科学科、客員研究員。NECアメリカに駐在し、ネットワーク管理システムの基本ソフトウェア開発を推進。2007年米国系半導体企業に移り、通信機器組込システムの開発を主導。2010年ネットワーク仮想化ソフトウェア開発ベンチャーを、イスラエルで起業。過去20年間に渡って国際機関におけるIT技術の標準化に貢献し、米国電気電子学会(IEEE)の標準化小部会で議長を務める。長年の海外経験から、論理的説明力に通じるプログラミング的思考の重要性を痛感。2017年その普及のため、みらいアクセス合同会社を設立し同代表。通信システムに関する国内特許20件、米国特許13件。電子通信情報学会並びにIEEE正会員。

本書の要点

  • 要点
    1
    プログラムは、コンピュータを動かす処理手順である「アルゴリズム」をもとに、プログラミング言語と呼ばれる一連の命令で記述されている。
  • 要点
    2
    今日のコンピュータは電卓と異なり、知的な仕事ができる機械である。それはプログラミング言語という中間言語が進化したためだ。
  • 要点
    3
    アルゴリズムにもとづくプログラミング的思考は、コンピュータを動かすだけではなく、私たちの日常生活にも応用できる。数多くのアルゴリズムから最適なものを選び、順序立てて思考を明確化することが重要である。

要約

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

私たちの身近にあるコンピュータ
a-image/iStock/Thinkstock

私たちの身近にはすでに多くのコンピュータが存在し、生活とは切り離せないものとなっている。かつてコンピュータといえば、パソコンをイメージする人が多かった。だが現在、あらゆる家電にコンピュータ技術が応用され、その存在はほとんど意識されなくなっている。コンピュータの存在感が希薄になっていくのと反比例するように、私たちの生活はコンピュータに依存したものへ変わってきているのだ。

いま家電量販店で売られている多くの家電製品は、コンピュータを内蔵している。そのコンピュータの頭脳に当たる部分がCPU(中央制御装置)だ。このCPUとソフトウェア、そして各種のデータを保存するメモリによって、家電のなかのコンピュータシステムは成り立っている。

たとえば炊飯器の場合、炊飯コースの設定にしたがって、コンピュータが蒸気発生器や炊飯釜ヒーターを制御する。またCPUが常に温度センサーなどの情報をモニタリングすることで、最適な炊飯がおこなわれる。そして各種の設定情報やリアルタイムのセンサー情報は、メモリに保存されて管理されるという仕組みだ。

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

プログラムとは人間が書いたコンピュータへの命令の集まりだ。これをコンピュータに理解できる言葉に翻訳したものがソフトウェアである。

プログラムとソフトウェアは、「私たちがコンピュータを使って実現したいこと」を具現化したものだ。プログラムはコンピュータを動かす処理の手順である「アルゴリズム」をもとに、プログラミング言語と呼ばれる一連の命令で記述されている。これを前提にして、実際にコンピュータを動かすソフトウェアができあがる。

プログラムそれ自体は、独立した命令文を集めたものだ。だが最終的な目的を達成するには、あらゆる命令を正しく組み合わせ、意図した行動が達成される仕組みが必要となる。重要なのはプログラムそのものよりも、その前提となるアルゴリズムということができるだろう。

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

プログラミング的に考える準備
scyther5/iStock/Thinkstock

プログラミングをするには、コンピュータを使ってなにをどうするのか考える「プログラム設計」という作業が必要になる。使用するプログラム言語やOSなどの条件をもとに、適切なアルゴリズムやデータベースの構造を決定し、プログラムを細部まで決める。その後コンピュータを使って実際にソースコードを入力し、変換ソフトウェアを使って、コンピュータが理解できる言語に置き換えていく。

ただしこの時点で、問題なく動くプログラムというのはほとんど存在しない。できあがったらコンピュータ上で動かしてテストを重ねていく。これを「デバッグ」と呼ぶ。プログラムを打ちこむ作業よりも、デバッグ作業の方に多大な時間が費やされることも珍しくない。

プログラムの完成度や完成までのスピードは、プログラミングが始まる前の段階で決まる。だからこそ設計の時点で、実現すべき要件を正確に盛りこむことが重要である。

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

世界で最初のプログラミングは、計算問題を解くために加算機や乗算器などの計算回路をつなぎ替える目的で考案された。当時は複雑な数式を組み替えることがもっとも大切であり、そこに「思考を表現する」などという意味合いは存在しなかった。

今日のコンピュータは電卓的な計算機の範囲を超え、人間の代わりに知的な仕事をする機械と化した。まるでかつてただの計算機だったコンピュータが、突然変異を起こしたようだ。だが実際は突然変異などではない。プログラミング言語という中間言語の進化が、高度に抽象的な人間の思考内容すらも、コンピュータ上に反映できるようにしたのだ。

ただしプログラムに思考を反映できるようになったといっても、そこにはまだいくつかの条件がある。(1)考え方が順序立てられていること、(2)順序立てられた処理の内容がそれ自身で完結していること、そして(3)感情表現や抽象的表現のようなあいまいさがないことだ。プログラムを組むためには、人間側の思考が明瞭でなければならないのである。

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

カレーライスを作る

もっとも基本的なプログラムは、上から一直線に処理をこなしていく形態である。ここでは料理ロボット用のカレーライス調理プログラムを題材に、直線的な処理の作り方を通して、「あいまい」な指示をどのようにプログラミングしていくか見ていく。

炊飯の段階で重要なのは、米の量や研ぎ時間、セットする炊飯コースの指定など、具体的な値を入力することだ。またカレーを調理する段階でも、材料の分量をすべてグラム単位で計算するとともに、「しんなりするまで炒める」や「とろみがつくまで煮込む」といった抽象的な表現を、すべて正確な時間で表現しなければならない。人間なら目分量でおこなえることも、コンピュータには具体的な条件として指示する必要がある。

プログラミング作業だけでいえば、直線的な処理は非常に単純だ。しかし「あいまいさ」を取り除く作業のような「なにをプログラミングするのか」という視点は、処理の流れとはまた異なった次元で大切なポイントになる。

じゃんけんの勝ち負け
tommaso79/iStock/Thinkstock

特定の条件についての判断結果によって次の処理内容が変わる「条件分岐」を、プログラミングでは頻繁に使う。ここではじゃんけんを例として、条件分岐のプログラミング処理を考えていく。

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

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

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

論理的な正解のない問題に対する解決に、コンピュータを活用することは可能だろうか。ここではアルゴリズムを概念化し、ひとつの答えを導き出す過程を紹介する。とはいえ注意しなければならないのは、ここで出てくる答えはかならずしも真理ではなく、アルゴリズムにもとづいたひとつの結論にすぎないということだ。

「買い物」を例にとろう。買い物は商品と価値の交換だ。その判断には思考や投機的期待など、それぞれ異なった価値交換の考えが働いている。感情をともなった曖昧な買い物の判断をプログラム化するには、なんらかの手順で定量化された指標に置き換える必要がある。たとえば必要性と価格のバランスを数量化し、価格順に選択肢を並べるなどの手順を加え、購入判定プログラムのアルゴリズムを組み立てなければならない。

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

今日の情報化社会では、驚くべき速さで情報が拡散されるが、その正確性は定かではない。私たちが入手する情報について、その真偽の判定を行うプログラミングを作ることは可能だろうか。

たとえば入手する情報を、「ニュース」「特ダネ」「怪情報」の3つに分類し、それぞれの真偽判定アルゴリズムを検討。最後に「入力情報」に対する真偽判定として、プログラムを統合することは可能である。

そして情報源は実在するか、情報源が情報を発信したことは事実か、発信情報の内容によって誰かが利益を得たり不利益を被ったりしないかなど、「推定した発信情報の真偽のレベルを判定する」ための判断基準を入力する。それをフローチャートに入れれば、情報の正しさを推定するプログラミングが完成するはずだ。

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

プロセスを処理するプログラムは、ある種の対話型コンピュータシステムについて考えることと似ている。

たとえばディベートは、議論自体の進め方と思考の進め方がセットになっている。ディベートの主張は通常、複数の論拠から成り立ち、証拠となる根拠がそれを支える。主題の性質上、賛否どちらかが100%正しいということはあり得ないため、相手の主張の整合性を崩すことが目的となる。相手の論拠の欠点・弱点・矛盾・根拠の欠落を露呈させつつ、それを防いだ方が勝ちだ。

反論を述べるフローチャートを作り、それにしたがって議論を進めていくことは、プロセス的なプログラミングのイメージに近い。プログラミング的思考は、実際の議論の場でも活用できるといえる。

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

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

問題を解くアルゴリズムは、1つの問題に1つしかないわけではない。実現方法の視点を変えれば、まったく異なる方法を用いることもできる。たとえばカレーライスの作り方をプログラミングするとき、「玉ねぎがしんなりするまで炒める」というだけでは曖昧すぎる。だがここには「玉ねぎを炒める」と「玉ねぎがしんなりしたら炒めるのをやめる」という2つの動作が含まれており、後者を「玉ねぎを10分炒めたら終了する」に置き換えれば表現可能だ。

もちろん玉ねぎの状態によって終了を判定することが、かならずしも不可能というわけではない。玉ねぎの状態の変化を常に監視して、その違いから終了のタイミングを導き出すこともできるだろう。とはいえ現実的な視点からいえば、時間判定の方が適当だ。手間や費用といった外的な要因から、適切なアルゴリズムを導き出すことも、プログラミングには欠かせない要素なのである。

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

電卓とコンピュータの生まれはどちらも計算機だ。しかし電卓で計算するには、人間が特定の演算キーを特定の順番で押す必要がある。つまり電卓は計算能力があっても、問題の解き方(アルゴリズム)をもたないため、解ける問題の範囲が狭いのだ。これに対しコンピュータは、プログラムという形でアルゴリズムを内包しているので、答えを求めることができる。

アルゴリズムをもつかもたないかを境にして、両者は求められる機能とできることがまったく異なる道具となり、現在にいたっている。このことからプログラムは、コンピュータが理解できるアルゴリズム表現として、非常に大きな役割を果たしているといえるだろう。

もっと見る
この続きを見るには...
残り0/4180文字
会員登録(7日間無料)

3,400冊以上の要約が楽しめる

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