Island Life

< 完成しすぎの呪い | 集中の制御 >

2015/06/06

退屈なプログラミング

  • プログラミングが退屈だ

    最近、プログラミングが退屈に感じる。もはやルーチンと言っても差し支えないとまで思うこともある。プログラミングというと一般的には創造的な活動だと思われているが、実際のところその大部分は定型的な作業であり、多少頭を使うというだけである。

こんな感じですかね。

[image]

(追記2015/06/08 10:04:36 UTC): 「役に立つが金にならずおもしろくもないプログラム」が大きいのはなぜ、という疑問を複数目にして気づいたんだけど、この図は「これまで書いてきたプログラム」じゃなくて、「これから書き得るプログラム」で考えてた。つまり潜在的な需要みたいなものを反映してる。

ちょっとコードを書けば誰かがすごく助かるっていう場面はよくある。その誰かに喜んでもらえるというメリットはあるものの、要するプログラミングそのものは単純でつまらない。しかも単純もしくはニッチすぎて金を取れるほどではない。私の感覚ではそういう潜在的なプログラミング需要って膨大にある。うまく共通項を括り出せさえすれば、プログラミングのスケールメリットが効いて金になり得るし、売り物のプログラムのほとんどは実際そういうものだと思う。でもそうできるのは役に立つプログラミングのほんの一部でしかない。

Tag: Programming

Past comment(s)

インドリ (2015/06/07 01:38:14):

テーマが興味深いだけに、リンク元の記事で気になったのですが、木構造はグラフ構造の一種であり、それでは現状が変わらないので「プログラミングを楽しくする」という目的を叶える大胆な仮説とは思えないのですが、Shiroさんはどう思われますか?

Kei (2015/06/07 18:34:17):

役に立つプログラム=大部分が定型的で退屈な部分に読めるのですが、あってます?

shiro (2015/06/08 02:49:54):

誰かの役に立つプログラムの大部分は既に一度解かれた問題のバリエーションなので自分にとっては退屈、という意図です。おもしろくてチャレンジングな一つの問題を解くと広範囲に役に立つということもあるので、重要度で重み付けしたら比率は変わってくると思います。

shiro (2015/06/08 02:53:18):

木構造は一般のグラフのサブセットですよね。木構造は再帰で簡単に扱えますが、一般のグラフになると途端に面倒になります。なので世の中には木構造に特化した解が多くて、ほんとは木構造じゃなくても無理やり木構造にしていろいろ不自由が出てきてる、みたいなことかなあと元記事を読んでて思いました。

インドリ (2015/06/08 16:36:17):

なるほど、そういったことがあるのですね。

yamasushi (2015/06/21 06:54:54):

課題を言語化できた時点でいろいろなものが切り捨てられているだけでは。プログラミングというのは農耕の延長線上にある文化と認識しているのですが,狩猟採集の延長にもプログラミングはあるわけで。で,言語というのは農耕のため(暦とか)であって,狩猟採集ではあまり重要ではない。(適当理論ですみません

shiro (2015/06/21 13:08:21):

あーyamasushiさん、このエントリの主題とはずれますが、「言語化により切り捨てられるもの」はあると思います。結局、記述できる問題しか明確に認識できないので、それを意識してないと世界がどんどん狭くなっちゃう。

農耕文化かどうか、については私はむしろ「都市化」=「脳化」かなあと思います。頭で考え、制御可能なもので回りを固めてゆく、という。

yamasushi (2015/06/22 22:00:42):

あー,ずれましたか。「記述できる問題しか扱えないこと」がプログラミングを退屈にしているということではないかという趣旨でした。

狩猟採集というのは,自然の制御不能さをそのままにして,そこから資源を獲得する行動と認識しています。問題解決者が枠組みを決めるのではなく,そこにある環境に自分を置くというか。そういうときに少しずつ世界の構造を削りだす道具として,プログラミングは役に立つのではないかと期待しています。

yamasushi (2015/06/23 21:10:41):

「ほんとは木構造じゃなくても無理やり木構造にしていろいろ不自由が出てきてる、みたいなこと」でいま困ってるのが,楽曲ファイルの整理で,あれらは木構造で保存されますが,タグ情報は別の木構造になってる。この木構造は人によって違ってしまう。作曲家を重視するか,演奏家を重視するか,曲想を重視するか,etc。複数の木構造が重層的になってるように思われるのですが,コレなんとか綺麗になればいいなと今朝思いついたので補足しておきます。

shiro (2015/06/23 23:35:21):

ファイルの整理というのは昔から人々が悩んでるテーマなんですよ。そんで安直な発想としては「ツリーを止めてデータベースにしちゃえば色々検索できていいよね?」ってのがあって、それに挑んでは破れさっていった歴史の数々… (WinFS、覚えてますか?)

私自身、CG映画の膨大な素材(アセット)管理をどうするかで侃々諤々の議論を重ねた経験があり、ファイルシステムの上にDBを重ねるようなシステムも作ったんですが、結局運用上の取扱いで生のツリーには勝てないってことになりました。

木構造は実装がロバストで、ユーザのメンタルモデルも作りやすく、アーカイブやコピーなどの取り回しも楽です。これは本質的には、木構造ではノードの子が純粋部分集合になっているという性質によるものだと思います。

yamasushi (2015/06/24 04:21:46):

なるほど。ありがとうございます。 (WinFSは知らなかったのですが,知っている範囲ではBTRONの実身仮身FSとかありますね。) 素人考えでアレなんですけど,exiftoolでタグを統一的に扱えるんだから,なんとかなるようなイメージを持ってるんです。タグ情報を扱うとなると,木構造よりも,グラフということになりそうですが,そこが実際上はうまくいかないということですね。

インドリ (2015/06/24 18:08:37):

おっ盛り上がっていますね♪ 狩猟採集プログラミングについてなのですが、一応できると思います。 私は主に基幹系業務システムを販売している者ですが、お客様の経営課題を考えている時に、演繹的でないアイデアを試すために、そのアイデアをプログラミングします。 記号化できないものはプログラミングできないのですが、システム開発全体の視点で見ると、言語化できないものを記号化するのも我々の仕事だと私は考えています。 それでも人間の能力には限界があるので、できないものはありますが、人間が認識できないものはプログラミングに限らず無理だと思います。 だから無問題です。 主題についてですが、プログラミングって退屈な部分が多いかな? 私は考える=プログラミングであり、考えること自体が好きなので全てのプログラミングが楽しいと感じています。 楽しみ=刺激として、刺激の面から言うと、確かに刺激は初心者の時ほどありませんが、初々しい楽しみとは違う、経験から出る味わい深い楽しみもあるのではないかと思います。 私がプログラミング狂すぎるのかな?

yamasushi (2015/06/24 22:58:55):

言い出しっぺの法則でフォローしますと)「狩猟採集プログラミング」というのは,わけのわからない自然を認識するための行為というか。人間が何かを習得するときにする自然なやり方というのは,こちらのほうの「プログラミング」なんじゃないかなと。摸倣を基本としつつ,その先にあるものを獲得していく的な。狩猟採集という,農耕のように環境の制御を前提としない行為では,先行者を摸倣しつつ,試行錯誤していくわけで。(まあ,いま流行りの機械学習となってしまいますかね。

yamasushi (2015/06/24 23:13:48):

(投稿してから後悔したのですが,わたしは機械学習について無知もいいところです。ただ,わけのわからない事象に立ち向かう道具としてプログラミンがが役に立つだろうというコトです(汗)

インドリ (2015/06/25 15:38:03):

>「摸倣を基本としつつ,その先にあるものを獲得していく的な。狩猟採集という」 OK。できます。実際私はしています。どういうことかというと、目についた問題(非言語的なものも含む)を獲物を狩るようにプログラミングしています。非言語的な物をプログラミングをしようとすると、自然と >「わけのわからない自然を認識するための行為」になります。私の場合は思考できる=プログラミングなので、感じるだけでも自然とプログラムが出てきます。そして、出てきたプログラムを見ながら思考を纏めます。今まで無意識にしていたのですが、yamasushiさんのお蔭で自分がしていることを狩猟プログラミングとして認識できました。これにより技術力を向上できます。大変勉強になりました。ありがとうございます。

shiro (2015/06/25 15:59:56):

面白い話ですね。私の感覚では、やったことのない領域に入ってゆく時にそれをうまく記述できるような言語体系をデザインしてゆく、というのが、探険的プログラミングのように感じられます。一度うまくデザインできるとそこは自分の領土になるので、狩猟採集というのとはちょっと違うかなあ。

インドリ (2015/06/25 20:44:53):

確かにshiroさんがおっしゃるように、プログラミングは「自分の領土になる」という感覚がありますよね。ここがプログラミングの面白いところだと思いました。現実社会の狩猟と農耕って相手によって変わりませんが、プログラミングは自分の認識により変わります。さらにプログラミングは、対処したことがない問題であっても、感じた瞬間に勝手にプログラム片が出てきて、それを纏めると自分の領域になってしまう。もしかしたら、このプログラム片からプログラムになっていく段階が、我々技術者にとって一番刺激的なのかもしれませんね。

yamasushi (2015/06/27 05:33:41):

(話がずれますが,shiroさんは都市----探検 という対で捉え,わたしは,農耕牧畜---狩猟採集という対で捉えているだけで,それほど認識の違いは無いかと思います。単にわたしは,「その行為で資源を得る」という点で統一しただけです。 )

わたしはSchemeの関数記述は人間の行動をモデル化できるように考えているので,自我を含めた人間社会を捉えることができるんとちがうかなーとか。入力しか定義できないあたり。出力は継続という「未来」へ引き渡すだけで。

そういうふうに手にしているプログラミング言語をつかって世界を記述していこうか,っていうのがわたしのプログラミングです。

yamasushi (2015/06/27 06:49:50):

うまい実例があったんで補足しますと,「やったことのない領域に入ってゆく時にそれをうまく記述できるような」体系というのが時代や社会によって違っていて,たとえば地図の場合ならマッパ・ムンディやTO図だって「うまく記述でき」ていたわけです。たぶん,地図の歴史を紐解くとわりと面白いです。(的外れでしたらすみません

Post a comment

Name: