プログラミングと心

前回の記事でチラリと書いたプログラミングと心についてツラツラと。

プログラミングとは作るのに十分が技術を得た後はただ心との戦いとなる。
もちろん技術や知識が上がればよりよい解決策を見に付け、よりスマートに解決できるのかもしれない。
だがそれは大体のプログラムにおいて二の次に過ぎない。

例えばテスト駆動開発という開発手法が存在する。
これはプログラムをテストするプログラムを書く事によりよりよいプログラムを書こうというものだ。
だがこのテストを書くという作業は精神的に非常に辛く、この開発手法を導入しても満足にテストが書かれていないのは業界内では日常茶飯事であったりする。

他にもコメント、コピペコード、ペアプログラミング、コードレビュー、極端な話をしてしまえばオブジェクト指向や手続き型や関数型言語といった区分けなども含めて様々
それらは実際にコードを書くための方法ではなく、プログラマーによりよいコードを書かせるための手法のようなものは上げていけば限が無いほど存在する。
これら全て完璧に実践できれば完璧だとまでは言わないが、間違いであるとうすうす感じつつもその間違いを続けてしまっているのはほぼ全てのプログラマーに対して言える事だと思う。

もし仮に、これら全ての誘惑に負けず、プログラマーとしてあるべき理想像とでも言うべき物を追求できる人が居たとすれば
その人は、ただ技術力が高いだけのプログラマーとは比べ物にならないほど素晴らしいプログラマーといえるだろう。

武道では最終的には技術力ではなく精神力が物をいう世界だとよく聞く。
そういう意味では、プログラミングも武道のようなものなのかもしれない。

形の無い不安

心配性、もしくは臆病というのかもしれない。

たとえば仕事中の仕様策定の時、どれほど見直そうとどれほど議論を交わそうと、常に仕様漏れしている予感に苛まれ
何かあるたびに全仕様のレビューしなおしを提案したくなる、というか実際している。

これはバグの無いプログラムが存在しないのと同じぐらい当然のことで、仕様漏れは実装が終わるまで、いや終わった後ですら0になることは無い。
なので、不安に思うのは当然で、でも0にすることは不可能なのだから、見つかっても対応出来るよう備えておくしかない。
これは何度も注意を受けたし頭では理解しているのだが、それでもつい不安で、理由もなく問題があると騒ぎ立ててしまう事すらある。

どうなればその不安はなくなるのか、それすらも判らないうちから行動を起こしてはいけないことはわかっている。
せめて問題提示する際は、解決すべき点なり、目指すべき点について明確になっていなければいけないこともわかっている。
だが、それらを持たない不安は一体どうしたら良いのだろうか?

仕様に抜けがあることを恐れている、経験則として仕様抜けが0ではないことも断言できる。
だが仕様抜けを見つけだす手段はなく、仕様抜けがない事を証明する手段も無い。
アプリケーションを設計する上でこれらは当然の事だ、当然の事だが無視して進めるほど割り切る事もできない。
一体自分はどうすればいいのだろうか?
皆は一体どうしているのだろうか?

プログラムを書く上で重要なのは、技術や知識よりも心なのかもしれない。

主観性が強すぎる

自分は物事を客観的に考えるのが特に苦手だと思っていたが、実は自分が思っているよりよほど酷かったことに気づいた。

とある事情でAPIの設計をし、何度も抜けが無いかを確認した上で他人にレビューをお願いする事があった。
結果、API仕様はまるで使い物にならないことがわかり、ほぼ一から書き直すことになった。

この情報の足りて無い具合は本当に酷く
* NVP(ネームバリューペア)な方式だったにもかかわらず、実際に渡す際の引数名が書かれていない
* 引数の呼び名だけで、説明が一切書かれていない
という、仕様とよべる最低限すらクリアできていない有様。

だがそれよりもひどいのは、散々チェックしたにも関わらず指摘されるまでちらりとも気づかなかった事。
人間ってここまで主観的になれるものなのかと逆に感心してしまったほど。

もちろん他人の文章なら気づいたはず。
けれど、試しにモック的な実装を書いてみるまでしても気づかなかったのだから、自分ひとりでは実装終わっても気づかなかったかもしれない。
(引数名も意味も脳内にはあったので、書かれていないことに気づかなかった)

こりゃ文章書いたり意思疎通が苦手なわけだと納得。
他人のものをレビューする際は細かすぎるぐらいだというのに、なぜ自分相手にもあの細かさが発揮できないのかなぁ。
ある意味、これが一番根本的な意味での短所なのかもしれない。

もうこの人がAI作れば良いんじゃね?

twitterを眺めていたら某ツール作者(?)さんが非の解析改造でたぶん自分以上のことをやっていた。
もうこの人がAI作れば良いとおもうよ!

乗っ取りは禁じ手扱いして封印してきた自分だけれど、見ていたらむっちゃ楽しそうでやりたくなってくる。
イイナイイナ

前提条件

自分と他人の間で議論が成立しない理由について。

例えば、壊れるものと壊れないものがあり、壊れない物があると言う事もどれがそうであるかも明白になっている場合。
一般的な人は、壊れるものとして考えなければ意味が通じない話をする際、”全て”という単語を”壊れるもの全て”という意味で使用する。
自分はこのとき、壊れるものも含んだ全てであると受け取るため、前提条件がずれ、会話が成立しなくなる。

理由はよくわかっていないが、おそらく同じような経緯で、いつの間にか前提が外れて、広義の意味での単語になっており、狭義の意味だと勘違いをしたせいで会話が成立しないこともよくおこる。

自分から見れば、周囲の人は口を開くごとに前言に矛盾する発言を繰り返し、それをさも当然のごとく振舞っているように見える。
当然そんなものは理解できないので、重要そうな要素に見当をつけ、しつこいぐらいに細かい確認を行って認識にずれがないことを確認して、そこから周囲に推論と確認を繰り返すことで認識をあわせようとしたりする。
けれど、大体の場合は素直に質問に答えてくれるだけのでくの坊で居てくれ無いので、次から次へと新しい矛盾や新情報が語られ話の方向性さえねじまがっていき、また始めからやり直せざるを得なくなっていく。
かといって理解できないまま聞きに徹すれば、欠片も理解できないままに会話は終わり、後々より大きな勘違いとなって返ってくるのだ。

正直どうしろっちゅうんじゃという心境だが、そんな気持ちは周囲の人たちの方がよほど大きいだろうとも思う。
日本語って難しいね、うん。

理由と方法

うまくやる方法だけ教えても、状況が変わり通用しなくなれば次の方法に至れずに意味が無い。
これは成果だけ知っても本質を知らなければ意味が無い、といった教訓を含んだ話としてよく例に出される。
しかし、本当にそうだろうか?

目的と状況が同じであっても、実際に導き出す方法論が違ったものになる可能性があることは明白だ。
その上で、それぞれの方法論にはメリットデメリットはもちろんの事、どちらが優れているといった上下差も存在する。

つまり、原因/目的/思想といった大本が同じであっても、至る結果は人によって異なるのが通常だ。
なので、本質だけでは十分ではない、もちろん結果だけでも十分ではない。
結果と本質、両方揃って初めて十分といえる。

結果だけ教えることを批判する人は数居れど、本質だけ教えることを批判する人を見た事が無い。
以上のような理由から、自分は本質だけでも結果だけでも不十分であると考えるのだが、間違っているのだろうか?

人の気持ちって案外簡単に変わるものなんだね

こんなに前向きな気分になったのは数ヶ月、へたしたら1年ぶりぐらいかもしれない。
単に開き直っただけなのにね、不思議だね。
小説やらで凄く頑なだったのにあっけなく心変わりする人の気持ちってこんな感じなのかしら。

うーん、どうしよう。
ブログを元の位置に復帰させようかしら。
ついでに開発再会なんてしてみたりして、色々手付かずだった仕事を片付けてしまうのも良いかもしれない。
もう他人の評価なぞ気にせん、怒られたなら怒られないぐらい凄いものにしてやるだけだ!

……これで明日元のテンションに戻ったら凄い後悔しそうだw

自己嫌悪の理由とか

最近自己嫌悪が酷く、よく死にたくなる。
なら、具体的にどういう人間になりたかったのかと考えてみれば、特に何も思い浮かばない不思議。
いや、想像がつかないという意味ではなく、考えれば考えるほど今の自分そのままになる、という感覚。
我ながら不思議だったのだけれど、今ちょっとだけ理由がわかった気が舌ので書いておく。

自分は昔から人付き合いやら空気を読むやらそういったことが心底嫌だった、そんな事しなくても生きていけるようになりたかった。
だから、いっそそういった方面では意識的にダメになり、それでもなお平然と生きていけるような、そんな一芸特化の人間になりたい、そう願っていた。

実際、その夢は叶ったといえる。
そりゃ世界一とか考えていた理想には遠く及ばないにしても、対人能力があれほど欠けているのに社会人出来ているのが証明だと思う。

ならば、なぜこんなにも生きるのが辛いのか?
それは対人能力が低いという事が、予想以上に苦しいものであったからだろう。
対人能力の欠如がこれほどに仕事に支障をきたすものだとは予想すらしていなかったのだ。

例えば、自分の仕事のうちかなりの時間が他人との議論に費やされる。
自分が言いたいことは他人に伝わらず、他人の言いたいことを自分は理解できない。
そうやって余計なことをしたり必要なことをしなかったり、そんなすれ違いはしないほうが珍しいというぐらい日常茶飯事だ。

結果、自分は人並みの対人能力を持っていたら出来ただろう作業の1/2程度しかこなす事ができていない。
それだって皆の多大な労力の上に成り立っているもので、全体ではマイナスになっているかもしれない。

たぶんこれが自己嫌悪の理由、「そんなはずではなかったのに」という自身への失望と、今までの全てが無駄であったと知らされたかのような自己の否定だ。
自分は愚かで、対人能力がなくても90%程度の実力は出せるだろうと甘い憶測の上に生きていた。
20年かけて築き上げてきた力は、一番最初に捨てた物一つに負け、今や自己嫌悪で気が狂いそうになっている。

自分にだけは嘘をつかないで生きてきた、自分が正しいと思う道を曲げた事は無い。
望まない結果になったことは数多いが、それでも自分の軸は物心付いたころの夢や理想からたいしてぶれていないはずだ。
間違いだったのは唯一つ、子供の想像力は人の一生を委ねられるほど正確でなければ正しくも無いということだ。

だけれども、自分はこれからも生き方を変えられはしないだろう。
稚拙な頭で考えた理想に突き進み、結果間違いに気づいて後悔し続けるんだと思う。
そして、短所を補う暇があれば長所を伸ばす方がいいという考えも変わらない。
ぶっちゃけてしまえば、心のどこかで諦めているからで、そんな伸びる目の無い事を続けるぐらいなら上を見ていたいからだ。

好きこそ物の上手なれ、きっとこの言葉は苦手なことは好きになる所から始めようとかそういった教訓を含んでいるんだろうが、自分は別の意味で使う。

好きこそ物の上手なれ、苦手を1伸ばす余裕があったなら好きを10伸ばすべし、そうすればもしかしたら、今の自分もまだ至れていない理想に手が届くかもしれないのだから。


適当に書いていたら今までわだかまっていたものが抜けていった気分。
結局開き直っただけですが、やっぱり欠点に怯えて直そうと努力するなんて性に合わないってことなんだろう。
もうそんな事どうでもいい、一応出来る範囲では努力するけれど、そんなのは所詮二の次三の次。
自分が目指すべきはスーパープログラマーで、目標は生涯コード書きで生きていけるだけの能力をつけること。
そう考えたら、こんな瑣末事で時間を無駄にするとかありえないですよね!

うおお、OSでもコンパイラでも3Dゲームいいから何か書くぞおおおおお、うおおおおおおおおお

目をつぶって歩こう

別に現実逃避的な意味では無いです。

ふと意味もなく、目をつぶったまま階段を上り下りしてみたり。
その結果、上りは何の問題もなかったのに、下りはなぜだか最後の2~3段だけ異様な恐怖に襲われてどうしても降りられないという不思議なことに。
別に段数数えているわけでもないというのに、目を閉じるタイミングを変えても毎回恐くて進めなくなる。

人間の体って不思議や……

シューティング楽しい

以前は間を抜けられるとは思えなかったいくつかのスペルで、鼻歌交じりに間を抜けていけるようになりました。
プレイヤー力が要求されるものは苦手なんですが、時間をつぎ込めばそれなりに何とかなるものですね。

また、シューティングは脳味噌をフルに使うようで
そのときのコンディション次第で感覚がえらく替わるのだが、それがまた面白い。
たとえば、朝起きた直後は集中力が高く、普段はいっぱいいっぱいになる気合系スペルも容易に抜けられたりする。
寝る前には気持ちが落ち着いていて、普段のように欲張る事も無ければ焦ったり諦めたりすることも無くなり、パターンが安定する。
コーディングしているときですらここまで明確な違いは実感できないので、もしかしたらシューティングの方がよほど頭を使っているのかもしれない。
で、大体初クリアは寝る前にプレイしているときなので、まだまだ欲張って抱え落ちる場面が多い様子。
もっと精進しないとなー