マガジンのカバー画像

シアトルで実践する「プログラミング的思考」

14
「プログラミング的思考」とはいったい何なのでしょうか?いまひとつよく分からないと感じている人も多いのではないでしょうか。ただ、ひとつ言えることは「プログラミング的思考」を身につけ…
運営しているクリエイター

記事一覧

シアトルで実践する「プログラミング的思考」[1] 〜アルゴリズムを考える(1)プログラミングとは?

シアトルで実践する「プログラミング的思考」[1] 〜アルゴリズムを考える(1)プログラミングとは?

プログラミング的思考とアルゴリズムプログラミング的思考には「アルゴリズムを考える」または「アルゴリズム的に考える」という概念が含まれています。非常に重要な概念ですが「アルゴリズム」という呼び方から、とても難しいもののように感じてしまうかもしれません。

実際、アルゴリズムの中には非常に難解なものもありますが、「アルゴリズムとは?」という疑問に対する答えは、実はいたってシンプルなものです。ここでは「

もっとみる
シアトルで実践する「プログラミング的思考」[2] 〜アルゴリズムを考える(2)いろんな名前がある

シアトルで実践する「プログラミング的思考」[2] 〜アルゴリズムを考える(2)いろんな名前がある

いろんな名前で登場するアルゴリズムアルゴリズムを「ある目的を解決するためのステップの組み合わせ」だと考えた時、ソフトウェア開発の様々な状況で、アルゴリズムは異なる名称でもって登場します。そのどの場合でも、原則的に目的とその性質はおおよそ同じだと考えられます。その中から、いくつか紹介したいと思います。

プロセス「プロセス」という言葉があります。これは抽象的な「手順・手続き・処理」などを指します。プ

もっとみる
シアトルで実践する「プログラミング的思考」[3] 〜アルゴリズムを考える(3)制御構造

シアトルで実践する「プログラミング的思考」[3] 〜アルゴリズムを考える(3)制御構造

上から順番に~順次実行最も単純なプロセスでは、複数のステップが上から下に向かって順に実行して完了します。途中でなにも特別な変化は起こりません。このような上から下に順にステップを実行していく制御構造を「順次実行」と呼びます。当たり前のように聞こえるかもしれませんが「上から下に読み進める」というのは人間の習慣であって、コンピュータには本質的に上も下も、さらには右も左もありません。コンピュータを設計する

もっとみる
シアトルで実践する「プログラミング的思考」[4] 〜アルゴリズムを考える(4)評価式の基礎

シアトルで実践する「プログラミング的思考」[4] 〜アルゴリズムを考える(4)評価式の基礎

アルゴリズムを考える(その3)では、順次実行、条件分岐、繰り返しなどの「制御構造」について見ていきました。ステップを「どのように組み合わせれば、どのように実行されるのか」の基本が理解できたことでしょう。これら制御構造は、コンピュータの「動き」をコントロールします。

評価式(式)制御構造とは別に「評価式(または簡潔に式)」というものがあります。それは「動き」ではなく「状態」に関わる点で制御構造とは

もっとみる
シアトルで実践する「プログラミング的思考」[5] 〜アルゴリズムを考える(5)評価式の発展

シアトルで実践する「プログラミング的思考」[5] 〜アルゴリズムを考える(5)評価式の発展

未知の値と式まず、式は変数を含むことが出来ます。(4)評価式の基礎で「1+1」という式を例に使いましたが、これは分かりやすい例であっても実用性がほとんどありませんでしたね。1+1の計算はコンピュータにやってもらわなくても、プログラミングをしている時点で人間が2という結果を知ることができます。仮に式が「39281-3827」だとしても、わざわざコンピュータで実行するのを待つまでもなく、電卓や筆算など

もっとみる
シアトルで実践する「プログラミング的思考」[6] ~分解する(1)責任で分ける

シアトルで実践する「プログラミング的思考」[6] ~分解する(1)責任で分ける

「プログラミング的思考」の由来でもある「コンピューテーショナルシンキング(computational thinking)」には4つの柱となる概念があります。分解(decomposition)はその中のひとつです(それ以外の3つは、パターン認識、抽象化、そしてアルゴリズム設計)。

「分解」とは、ひとつの大きな問題を、マネージ出来る小さくて理解しやすい部分に分け、それぞれを解決して最終的に統合して問

もっとみる
シアトルで実践する「プログラミング的思考」[7] ~分解する(2)ソフトウェアの分解

シアトルで実践する「プログラミング的思考」[7] ~分解する(2)ソフトウェアの分解

分解する(1)のおさらい分解する(1)責任で分ける、ではコンピュータシステム全体が物理的なハードウェアから、個々の問題を解決するアプリケーションまで「責任」を軸に分けられているようすを解説しました。

ハードウェア層、ドライバ層、そしてオペレーティングシステムの上で動くアプリケーションが、一般的なプログラミングの成果物です。問題によってはハードウェアを含めた全体を解決(ソリューション)として開発す

もっとみる
シアトルで実践する「プログラミング的思考」[8] ~データを表現する(1) デジタル情報として表す

シアトルで実践する「プログラミング的思考」[8] ~データを表現する(1) デジタル情報として表す

(上の挿絵「お前もだぞ」と書くつもりが「お前だぞ」と間違えて書いて意味不明になってしまいました。できるだけ早く直します。すみません)

コンピューターシステムで問題を解決しようとするときまず必要なのが、その問題に関わるデータをコンピューターが処理できる「デジタル情報」として表すことです。世の中にある様々な物事や概念が、デジタル情報としてどのように表されているかを知る事は「プログラミング的思考」を行

もっとみる
シアトルで実践する「プログラミング的思考」[9] ~データを表現する(2) データを抽象化する

シアトルで実践する「プログラミング的思考」[9] ~データを表現する(2) データを抽象化する

データを表現する(2)デジタル情報として表す では「デジタル情報」の利点と、人間にとって扱いやすいデジタル情報としての「データ型」について解説しました。ここではデータ型の抽象化についてみていきましょう。

抽象データ型データ型が表す事象が複雑になり、より人間にとって意味あるものに近づくにしたがい「抽象化が進む」と言い表します。高度に抽象化されたデータは「抽象データ型」と呼ばれ始めます。

抽象デー

もっとみる
シアトルで実践する「プログラミング的思考 」[10] 論理的に考える(1)なぜ?の思考

シアトルで実践する「プログラミング的思考 」[10] 論理的に考える(1)なぜ?の思考

ソフトウェア開発やプログラミング活動において、論理的思考が必要である事はよく知られています。プログラミング的思考も「論理的に考えていく力」と定義しています。

自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考え

もっとみる
シアトルで実践する「プログラミング的思考」[11] 論理的に考える(2)ロジックを使う

シアトルで実践する「プログラミング的思考」[11] 論理的に考える(2)ロジックを使う

論理的に考える(その1)では「論理的にアルゴリズム設計をする」ことを解説しました。ソフトウェアエンジニアが「重複がなく、なおかつ問題の全てを網羅する」よう論理的にアルゴリズムを設計することを取り上げました。

ここでは「論理的に考える」という思考はもちろんですが、さらに「論理を使う」場合について解説します。具体的には条件文と呼ばれる制御構造でどのようにロジック(論理)が利用されるかを見ていきます。

もっとみる
シアトルで実践する「プログラミング的思考」[12] 抽象化(1)分解による抽象化

シアトルで実践する「プログラミング的思考」[12] 抽象化(1)分解による抽象化

「抽象化 (abstraction) 」は「プログラミング的思考」の派生元と言われている「コンピューテーショナルシンキング」の4つの主要概念のうちのひとつです(その他は分解、パターン認識、アルゴリズム設計)。

「抽象化」がその4つのうちのひとつであることから、他の3つとは独立した概念のように感じるかもしれませんが、実際はお互い密接に関係しています。その関係を表すのは少し難しいのですが、三角形を使

もっとみる
シアトルで実践する「プログラミング的思考」[13] 抽象化(2)パターン認識による抽象化

シアトルで実践する「プログラミング的思考」[13] 抽象化(2)パターン認識による抽象化

抽象化(1)分解による抽象化 では「分解の文脈」でどのように抽象化が行われるかを解説しました。ここでは「パターン認識の文脈」で抽象化をみていきます。パターン認識は「プログラミング的思考」の派生元とされる「コンピューテーショナルシンキング」の4つの主要概念のひとつです。他の3つは分解、アルゴリズム設計、そして抽象化です。

パターン認識(pattern recognition)とは解決すべき問題の具

もっとみる
シアトルで実践する「プログラミング的思考」[14] 抽象化(3)インターフェーイスによる抽象化

シアトルで実践する「プログラミング的思考」[14] 抽象化(3)インターフェーイスによる抽象化

ソフトウェアは分解によっていくつもの小さなソフトウェア部品に分けられ、それらの部品が集まって連携することで問題を解決します。その際、それぞれの部品は抽象化された機能を提供し、部品と部品の間の「関わり」も抽象的になります。このような部品間の接続を「ゆるくつながっている」と表現したりします。(この「ゆるいつながり」は英語で loose coupling と呼んだりします)。

分かりやすい例を挙げると

もっとみる