プログラミングというのは、最初の理解ができればあとはスイスイと行くものだ。
自転車でバランスをとるコツをつかめれば、あとは先に進んで行くのは簡単だというのと同じように。
しかし、最初にプログラミングを学ぶ時に
理解を妨害する意味不明な物がたくさん付いてくる。
#include とは何だ?
public static void mainとは何だ?
if __name__ = ‘__main__’ とは何なんだ?
そういう何が必要で何が必要じゃないのか。
自分が理解する上でまず必要なものかどうなのか
雑多な情報が出だしに多すぎてまずそこで躓く。
日本語だけで基本的な考えを理解しよう
というわけで、固有のプログラミング言語で基礎を始める前に
プログラミングの最初はプログラミング的思考の仕方を日本語でトレーニングしたら、
意外とすんなりと行くんじゃないか?
例えばこういう問題を出してみる。
例題:
ハンバーガーを300個作る手順を示せ。
バンズ(パン)はトーストする必要がある。
肉(冷凍)は焼く必要がある。
材料はバンズと肉とケチャップだけ
崩れている肉は捨てなければならない。
例題答:
パンを焼く
肉(冷凍)を手に取り、割れていたら捨てる。
割れていた場合はあたらしい物を手にとり、割れていた場合は先ほどの手順は先ほどと同じ。
割れていなければ肉を焼く
肉が焼き終わったらケチャップとパンに肉を挟んで完成
以上の工程を300回繰り返す。
これは、手順を分解して理解するというのに役に立つと思う。
答は一つじゃない。
例題だとパンと肉を順次繰り返し焼いていたが、最初に肉とパンを300回連続でやいて、最後に挟むということも可能だし
もっとも効率のよい工程を考えることでプログラミングの思考力が付くと思う。記事は
日本語で関数を理解する
このまま日本語で関数を理解してしまおう。
関数とはなんだというと、処理をわけておいたものなのだが、
日本語で説明するとこんな感じだ。
例題:
ピノを300個作る工程を示せ
関数的を使う場合の手順の組み立て方はこのように考える。
どうにかこうにかしてピノのアイスを作り
アイスが六つ貯まったら箱に詰める。
これを300回繰り返す。
この『どうにかこうにか』が関数である。
どうにかこうにかするって肝心な部分が抜けているが
肝心な部分は別途説明すればよい。
『どうにかこうにかしてピノのアイスを作る工程』
通常のアイスを作る手順で作ったアイスを
ピノの形にして、チョコでコーティングして完成
別途説明した中に更に曖昧に済まされちゃった部分がある。
『通常のアイスを作る手順』だ。
これもまた関数だ。
これもどこかで別途記載しなければならないか、別の人が用意してくれた手順を見せればよい。
通常のアイスを作る手順というのもまた関数であるが、
パルムを作る時、スーパーカップを作る時の工程の手順を示すときにも『通常のアイスを作る手順』は使える。
関数は一度作れば何度でも他の場所で使えるという便利なものだ。
理解ができたら、以下のような問題で関数を使う思考法に慣れて行くと良い。
問題:
カレーライスとハヤシライスとシチューを同時に用意しなければならなくなった。
関数を用いて手順を示せ。
オブジェクト指向を理解する
プログラミングを始めたい人ならば名前だけは聞いたことがあるかもしれないオブジェクト指向
初学者にとって見れば哲学を修める程の複雑怪奇な抽象的な概念かと思われるかもしれないが、
これも日本語で説明してしまおう。
ちなみにオブジェクト指向のオブジェクトとは対象というか物といった意味で、
今までは工程や手順を中心に考えていたけれども、
その工程に登場する物や人にも着目しようぜという考え。だいぶざっくり言っているがそういうこと。
例題:
職人を使って饅頭500個作れ。
職人はそれぞれアンコと皮、包みの工程を担当して貰う。
それに対してオブジェクト指向ではこのように手順を考える。
人や物がどんなものか、何ができるか、共通したものはあるかどうか
そうやって考えて、それらの登場人物が何をするかを考える。
アンコとは
小豆で作られた甘いペースト状のもの
皮とは
小麦粉で作られた奴。アンコを包むことができる
職人とは
お菓子を作ることができる。
主に煮る、蒸す、捏ねるなどができる職人1は小豆を煮て砂糖を入れてアンコを作る事ができる。
職人2は小麦粉を捏ねて皮を作ることができる
職人3は皮にアンコを包み、蒸すことができる。
手順:
職人1がアンコを作って、職人2が皮を作って、
職人3がアンコ包んで蒸す。
このように物や人がどんな奴なのかを決めて、
それがどういう手順で工程が進むのかと説明していう考えに近いのがオブジェクト指向。
以下のことは初学者は読み飛ばして構わないがオブジェクト指向用語で饅頭工程を説明すると、
アンコとは、皮とは、職人とは
というのはクラスという概念。
職人1や2や3などは継承
職人が持っている、煮る、蒸す、捏ねるはメソッド
手順はそれらのオブジェクトを駆使して饅頭を作る工程を記した関数(もしくは饅頭を作るという事自体クラスのメソッド)
メソッドとかクラスとか混乱するかもしれないがそこは着目をしないで
どうやって手順を考えたかの方だけを理解した上で
次のステップとして実際に何かのプログラミング言語を触ればいいと思う。