プログラミングを勉強する人って、
「ゲーム作ってみたい!」
「IT業界で働きたい!」
みたいな実用的な目的をもっている人が多いのかなと思います。
が、文系出身である私が文系的観点からプログラミングを勉強するメリットについて話してみたいと思います。
まぁ最初に、一応これも述べておきますか。
プログラミングを勉強するとプログラミングができるようになります。(クソ論調)
今の時代、会社でシステムを構えるのは当然な話なので強みになるのは明らかです。
まぁ今回はそんな話がしたい訳じゃないので次に行きます。
私はプログラミングの勉強によって、論理的思考を身に付けました。
というか、
それまでも物事を論理的に考えてるつもりだったんですが、実際は全く論理的じゃなかったんですよね。
もちろん、論理性を鍛える方法はたくさんあります。
以下は、私が思う比較的効率的だと思う、論理的思考を鍛える手段です。
自頭が良い人や環境に恵まれている人は学校の教育だけで身に着けられるスキルだとは思います。
ただ、プログラミングの場合は他の手段よりも効率的で、数段深い理解を得ることができるっていう話です。
論理的思考と言っても分類分けすると色々あります。
一般的にどう言われているかは分かりませんが、私は3つに分けられると思っています。
一つ目はプロセス。物事を行う順序です。
例として料理を挙げてみます。欧風カレーを作るとしましょう。
欧風カレーの場合、
みたいな手順になりますよね。
これが論理的思考における「プロセス」です。
この例は一人で作っているのでシンプルですが、これが2人になった場合どうでしょう。
Aさんが玉ねぎを先に切って、その間にBさんがじゃがいもを切る。
次に、Aさんがにんじんを切って、その間にBさんは玉ねぎを炒める。……
というように、2人になった瞬間プロセスが複雑化していきます。
Aさんが玉ねぎを切っている間にBさんが玉ねぎを炒める、なんてことはできないですからね。
プログラミングをやっていると、こういった思考が鍛えられ、かつ考える癖がつくので、物事を効率よくこなすことができるようになります。
(または考えすぎて物事を効率よくこなせなくなります!)
次はMECEです。MECEって言うと難しそうですが、実際難しいと思いますw
言い換えると、「物事の具体化・抽象化」ですね。
図だと以下のように表現されることが多いです。
物事は概念のツリー構造になっています。
りんごを抽象化すると果物
果物を抽象化すると食べ物
食べ物を抽象化すると物
みたいな感じです。
具体化はその逆です。
この考え方は色んな所で役に立ちますし、色んな事に応用できます。
会話を例にしてみます。
私がAさんに
「食べたい。」と言ったとします。
この記事を見ている方がAさんだとしたら、「いや、何をだよw」って思うと思います。
しかし、これが私のことをよく知っている友人だったら
「あー松屋の牛丼ねー」って分かります。
「松屋の牛丼食べたい。」を抽象的にしたのが「食べたい。」になっている訳ですね。
私の友達に話す場合は、物事の抽象化度合いは「食べたい。」でOKですが、コンテキストが共有されていない相手の場合は「食べたい。」だけじゃダメなわけですね。
「それ具体・抽象じゃなくね?」って反論くらいそうですが、これは具体・抽象です。
と言う感じで、めちゃくちゃ実用的なスキルです。
3つ目は視点です。
一番シンプルなのは「誰が」です。
「山田さんは松屋の牛丼を食べたいと思った。」の山田さんですね。
この場合は、山田さんの目をカメラとして捉えるのが重要です。
これが複雑になってくると
と色んなパターンが出てきます。
日本語は一人称視点でカメラを切り替えながら話す言語なのでカメラの切り替え自体は得意ですが、カメラの数が多くなった場合や俯瞰で物事を捉えるのが苦手な傾向があると思います。
え、エビデンス?エビデンスは集合的無意識にあります。