><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
「ドリルその物が欲しい」は、話がわき道に行っちゃうけど「付加価値!!><」の話になるかも>< オレンジが大好きすぎる秋田新幹線開通時のCMが、その付加価値をわかりやすく表現してるかも><https://www.youtube.com/watch?v=MM98lYzp9Dsこの動画の特に後半のほう><
ドリルを買いに来た人は穴を開ける気がなくてもドリルが欲しいのではないか
ていうか、何らかの「設計」を完全にボトムアップで考えるなんてまずありえないかも><;
『プログラミングできる人』に、新しい言語を教えるのであれば、ボトムアップでも教えられると思うし、独学してる人もコード見て「なるほど・・・><」ってしてるかも>< でもそもそもプログラミングできない人にそういう意味の基礎から教えても、考え方自体がわかんないんだから無茶かも><
なので比喩表現で言うと、「ジャガイモの切り方はまず忘れて!>< そうじゃなくカレーライスは最終的にどうやったら出来るのか?>< 完成品からたどって考えて行きましょう><」って教える方が、「どうやったらカレーを作れるのか?><」を『考える方法』を学べるかも><
「カレーを作る時にジャガイモを切ってる人は、ジャガイモを切りたいんじゃなくてカレーを作りたいのだ」みたいな>< プログラミングでもジャガイモの切り方をいくら教えてもカレーの作り方はわかんないかも><
このトップダウンで考える方法、デザインの話でもあるし、プロダクトとソリューションの違いの話とも同じ><(前に書いたけど、「クルマのハンドルを曲げた人は何がしたいのか?>< タイヤの向きを変えたいわけではないんだよ?><」とか、有名な「ドリルを買いに来た人はトリルが欲しいのではなく穴をあけたいのだ」とかそういうの><)
そのトップダウンで分解して考えられない人のfactorioを見ると、全ての工場が原料から作られるみたいになってる><(例えば緑基板(鉄板+銅線)の工場の入力が、鉄鉱石+銅鉱石+石炭になっちゃってたり><(つい数週間前の実話><))
プログラミングできる人々ってたぶん、「カレーライス作るよ!><」って考えた時に無意識に「カレーライスって事はカレールーとライスが必要かも!><」って考えて、「まずルーの方は、カレールーのなんか固形のやつと、にんじんとジャガイモと肉と・・・」みたいに完成予定からトップダウン(?)に考える人が多いかも?><
例えば、カレーライスを作るよ!><ってなった時に、プログラミングできないタイプの人ってオレンジが観察した限りボトムアップ的に考えちゃいやすいっぽくて、レシピを頭から呼んで混乱してるかも><
これら、プログラミングに限った事じゃなく、お料理もそうだし、ゲームなら例えばfactorioとかプログラミングの分解して考える方法が出来てない人を観察できるかも><
ずっと「挙動を分解して記号化する」の方向で勉強してきたのであまりイメッジがわかない
あれ、もしかして普通の人って「コードから挙動を想像する」の方向で考えてるんですか……
プログラミングに困難を覚えている人の大半は挙動を想像するという段階に至ってなくて「○○をするためには~~と書く」というのが頭に定着していないのではないかと思う.
人に伝えるための情報なんて、コードとコメント(ドキュメント)とテストから自動生成すればよろしい(個人の感想)
あと設計といってもクラス図云々みたいな「人に伝えるための整理された情報」ではなくて、もっとモヤっと混沌としたグラフ的なものです(私の場合は)
もしかすると脳内でガチャガチャせずに要件からスマートにコードを吐き出せるタイプの人もいるのかもしれませんが、それは私の考えの及ぶところではありませんね……
で、結局「何をさせたいか」の部分って脳内で可動式のオモチャをガチャガチャ動かしているようなものなので、メンタルモデルが堅固であることがとても大事なのではないかと考えるわけです
逆に言えば、コードとおおよそ1対1対応するくらいに精確に、コンピュータやコンパイラに何をさせたいかイメージできていないと手が動かない
個人的には、コーディングってマジで「書くだけ」なので、その前段階の設計と書いたあとのデバッグが思考リソースの大部分を占めていると思うんですが
思考の /dev/null