https://zenn.dev/mizchi/articles/programming-study-initiation

プログラミング学習とはそもそも何なのか

プログラミング初学者やITに関わる人が最初に知るべきこととして、プログラミングとは「あなたが解決したい手段を、あなたが思っていたようにコンピュータに入力すること」ではない。

実際には、プログラミング学習はコンピュータに可能な(非常に限定された)処理セットを学ぶことであり、その応用の先に当初のゴールが含まれるかは、プログラミングを学んでその特性を学ばないと、判断することすらできない。

例えば、手段 A によってゴール X を達成したいとしよう。非プログラマ/プログラミング初学者の発想は、よほど目の付け所がいいのではない限り、次のいずれかに分類される。

  1. A には簡易な代替手段 B があり、非常に筋が悪い。 A で実現するほどの価値がない
  2. A は現状の人類の既存のソフトウェアの応用では実現できない。あるいは非常に困難。(いわゆる「一応可能です」)
  3. A はこの宇宙の物理法則下では実現できない (特に計算オーダーや光速度に起因)

まず自分の発想が 1 かどうかを判断できないといけない。経験を積むほど問題の認識方法そのものを用意して、代替手段を選択できるようになる。 2 は長時間取り組んだり、場合によって会社を作ったりする必要があるが、そもそも実現する価値があるか?という判断がセットになる。大抵はないか、あるとしても人類最高の英知の集団が必要になったりする。本当にそれをやる価値があるのか。 3 はどうあがいても無理だが、ゴールをちょっとずらすことで 1 や 2 に変化したりする。

プログラミング学習のイニシエーションとして、この技術制約を、必ず、受け入れる過程がある。これができない人は、プログラミング学習が始まらない。

プログラミングとは、「与えられた問題をコンピュータの視点で再定義し、再定義された問題空間を分割し、分割された対象に対して個別にプログラムを書いて解決していくこと」であり、いわゆるプログラミング学習は、その解決方法の弾を増やすこと、解決できるような問題の認識の視点を得ることである。対象を正しく認識・言語化せずに、プログラミングで解決することはできない。

よほど目の付け所がいいのでない限り、但し書きを添えたが、これには本当に注意が必要で、特に経験が足りない人ほど自分は目の付け所がいいと思い込んでいたり、自分の発想は他にない新しいもの、と思ってるフシがあり、その無駄な自信を捨てる/叩き折る必要がある。自分もそうだった。

何がいいたかったかというと、巷ではプログラミング学習は作りたいものがあると学習が早いと言われており(要出典)、その最初に設定したゴールを情熱を持って実現することがある種の美学として語られている気がするのだが(要出典)、目的志向が強い人ほど最初のゴールが困難なときに詰む可能性が高い。プログラミングで可能なことが、プログラミングを学んでいない人間の直感に反することが多い以上、ゴールの困難さは事前に判断できない。

自分も最初は作りたいものがあった気がするが、そこまでゴールに拘ってはいなかった。あくまで最初のきっかけにした上で、時折振り返って現時点での自分の能力と突き合わせて実現可否を考えつつ、「そんな時期もあったね」と振り返るぐらいでいいと思う。

というのを 未経験者がプログラミングを学びたいと思った時に最初に読む記事 を読みながらふと思った。

Discussion