小学校でのプログラミング教育も始まり、ますます「プログラミング」という技術が万人に求められる状況になっています。
しかしながら、「プログラミング」という技術に興味はあるが、苦手意識があるという方も少なくないと思います。
この苦手意識は、「プログラミング」というと何らかのプログラミング言語を駆使してアプリを作るなどソフトウェア開発に関する技術にばかり目がいくことが原因ではないかと考えています。
我々は、ソフトウェア開発はプログラミングのごく一部であると考えており、「プログラミング」的な考え方が重要であると考えています。
そこで本稿では、プログラミング的な考え方から始めて、最低限知っておくべき技術をまとめます。具体的な技術の解説にはPythonを利用しますが、ここで述べる考え方は他のどの言語でも共通する考え方です。
Contents
プログラミング的考え方
目標達成のための考え方
ここでいう「プログラミング的な考え方」とは、次の5つの考え方です。
プログラミング的考え方 | 何をするのか | 得られるもの |
---|---|---|
目標設定 | まずは全体で何を達成したいのかを定義します。入力は何で、出力として何を得たいのかを決めましょう。 | 入出力を明確にすることで、「やりたいこと」が明確になります |
タスク分解 | 設定した目標を達成するために、何が必要なのかを細かく分解します。 | 大きな目標も小さなタスクの集まりとして考えることで、目標を達成するための筋道が見えてきますね |
共通部分の抽出 | 分解したタスクの中で、共通したタスクをまとめます。 | 共通した部分はまとめて実行したりできますね |
タスクフローの設計 | 目標を達成するためにタスクの流れ、組み合わせを考えます。 | タスクの流れを組み替えるだけで効率化できたりします |
シミュレーション | 上記のフローに矛盾がないか、頭の中で考えたり、実際に小さい問題を例に試したりします。 | これで計画が実現可能なのか、目標が達成できる見込みがあるのかが確認できます |
この表を見て分かる通り、決して「ソフトウェア開発」だけに必要な考え方ではありません。多くの仕事で自然にこのような考え方をしていると思います。
プログラミング的な考え方を意識するということは、タスクの抽象化ということに繋がります。このような考え方は、あらゆる仕事、また、生活の中でも普遍的に役立つ考え方です。
手段としての「プログラミング」
プログラミングというのは、あくまで手段であり、目標を達成するために何をするのかが重要です。
「オブジェクト思考」などソフトウェア開発に関する技術や考え方は色々ありますが、これらは、効率的にとか、他人との共有をしやすくするなどの理由があって作られています。
自分だけが一時的に目標達成のために動かすだけなら、愚直に書いても良いわけです。いわゆる「スパゲッティコード」だとしても良いわけです。
あくまでもプログラミングは手段であるということを認識しましょう。
「意識の低いプログラミング」
上述の通り、プログラミングはあくまでも手段であるため、その目的が満たされれば、「可読性が高い」など、いわゆる「綺麗なソースコード」を書くことに囚われる必要はありません。
まず始めるにあたっては、意識を低く、とにかく動けば良いというつもりで書いていくことが重要です。
(まず書いてみないことには何も始まらないので)
なお、綺麗なソースコードや機能的な書き方、一目でわかる変数名などは他人とのシェアや数ヶ月先の自分自身がメンテナンスするためには重要な考え方です。なので、プログラミング自体に慣れていった後では、「書き方」というものにも拘っていくべきではあると思います。
プログラムを書いてみる
この後は実際にプログラムを書いてみます。
「プログラミング的考え方」を「意識低く」実現していきます。
実行環境の用意
世の中には、ソフトウェアを開発するための開発環境がたくさんあります。それらは、効率的な開発を進めたり、複数人での共有を容易にするなど色々な理由があって存在します。
しかし、上記のようにプログラミング的な考え方を実践するだけであれば、凝った環境は必要ありません。目標達成のためにもっともシンプルな環境を使えば良いのです。
ここでは、ブラウザとGoogleアカウントさえあれば即座にプログラミングができる環境として、Google Colabratoryを利用します。
Google Colabの基本的な使い方
https://colab.research.google.com/?hl=ja
最低限知っておくべきプログラミング技術
上記の通り、プログラミングとは手段であると捉えると、以下で解説する4つの項目でかなり多くのことが達成できます。これらはどのプログラミング言語でも共通の普遍的な要素なので、必ず抑えておくようにしましょう。
変数
値を代入するブロック。
このブロックをつなげて管理するものが「リスト」または「配列」と呼ばれる。
演算
変数に格納される「値」を処理する機能。もっとも単純な演算は四則演算。
演算をまとめて関数とする。
条件分岐
変数の値に依存して別の処理を実行させる機能。
ループ
一連の処理を繰り返す。
プログラミング実例
この後に何を知るべきか
ここまでは、本当に最低限知っておくべき技術を解説してきました。ここに挙げた技術だけで多くのタスクをこなすソフトウェアを開発することは可能です。ここでは、さらに知っておくと良い考え方を解説します。
ライブラリの利用
「プログラミング的な考え方」では目標をを分解して小さな処理に分割して整理することだと初めに書きました。
この「処理」は似たタスクに共通して適用できる場合が多くあります(できるだけ共通な一般的な処理に細分化できることが望ましい)。さまざまなタスクに利用できる処理は、世界中のどこか別の人にも必要な場合があります。
すると、誰かがその処理をする機能をまとめた「ライブラリ」を提供していることが少なくありません。自分が欲しい機能は誰か別の人も欲しがっていると考えることが重要です。プログラムを書く前に、その処理をするライブラリが公開されてないかを探しましょう。
実際のプログラム開発では、できるだけ独自のコードを書かずに、公開されているライブラリを利用していくことが望ましいです。なぜなら、公開されているコードは多くの人の目に晒され、堅牢で汎用的な書かれ方をしていることが多いからです。つまり、バグが減るということです。