megamouthの葬列

長い旅路の終わり

広告を貼ったりもしたけれど、私は元気です。今月の懺悔

年度末もそろそろ終わりですね。皆さまいかがお過ごしでしょうか。
月末までは少し日がありますが、なんか面倒なので、さっさと懺悔を済ましたいと思います。

Books&Apps様へ寄稿させていただきました

blog.tinect.jp

少し趣を変えて、啓蒙的な「主張」を入れ込んだエントリになりました。
当ブログより遥かに多い読者と幅広い層が読むメディアなので、何を投稿するのか、
というのは毎回悩むところなのですが、最近メンター的な仕事をしているので、
思ったことをすんなり書いて、すんなり読んでいただけたかな、という印象です。

長い言い訳

www.megamouth.info

今月はこちらが少しBuzzったのと

www.megamouth.info

こちらがこんがり炎上しました。

前者については、なんとも感傷的で、ほんのり誰かをDisってるような絶妙な配合で、
ほとんどの人に悪意が伝わらなくて良かった良かった。という印象です。

後者については、その…なんといいますか、色々問題のあるエントリを書いちゃったな、というのがあって、
twitterでも断片的に呟いているのですが、ちょっと長い言い訳を書こうと思います。

主語がでかい

この文章の主題は「プログラマは出来ないと軽く言うべきではない」という主張を含んでいます。
私は、これは割りと普遍的な話だと(勝手に)思い込んでいて、その部分が
「いや、予算上、日程上、能力上、出来ない時はちゃんと言うべきだろう」
という至極真っ当な、ツッコミを受けることになったわけですが、
これは意図したことではなくて、「えっ出来ないって軽く言っちゃってるのみんな?」
という軽い驚きがあったりしました。

出来ないと言うプログラマ

確かに思えば、出来もしないことを「とりあえずやってみます」的にやってみて
ひどい目にあったこともあるし、人に迷惑をかけたりもしてるので、私の主張は極端には間違いだし、少なくとも普遍的な前提とすべきことではない、のは明らかでした。

「思い込み激しいね」

とはこのエントリを読んだ、知人の談ですが、書いてみるまでその事に全く気づいていなかったのは完全に私の不徳のいたす所でございまして、
こういう価値観は、あんまり真に受けないでいただきたい、
でないと俺みたいになんぞ、と若い読者にはお伝えしたいと思います。

ちなみに、誰かが「出来ない」と言われたことを代わりにやる、という仕事はけっこうあるんですけど、(そんで年度末にそういう話がけっこう多い)ある程度、予算の目処をつけてもらって、頼まれている自分と、多分バジェットを固定されて無理難題を言われていたであろう、前の業者を同列に比較するのも間違いだと思います。

「出来るけど、お前(クライアント)とはやりたくない」

という場面でもあったのかもしれない、という想像力は働かせるべきでした。
こちらも合わせてお詫び申し上げます。

本エントリの恥ずかしさ

私が「出来る」「出来ない」に異常なこだわりを持っているのは、色々と過去の経緯であるとか、
出来もしないことを無理にやってきて、人に迷惑をかけながら、自分の守備範囲を広げていった、という歪な生存戦略をとっていたことと関係していて、正直なところ、これを他人に言いたくはなかったんです。

例えるなら

「自分が当たり前だと思っていた特殊な性癖を、下ネタの流れで言ってみたらドン引きされた」

的な気恥ずかしさがあります。はい。

によると当ブログはエロサイトらしいので、megamouthが
そういう特殊性癖を披露するのもしょうがないと、読者の方々におかれましては承知いただければと思います。

広告を貼ってみた話

前々から予告していた通り、buzzった時にどうなるか、という意味合いで、Amazonアソシエイト・プログラムにしつこく申請をし続けていた当ブログですが、
なんかの拍子で、審査が通ったので、前述のエントリがbuzzった後に貼ってみました。

収支報告とかアホらしいことはしませんが、ざっと結果を言うと、CTRは0.1%ぐらいでワンカップ大関が5本ぐらい買える程度には儲かりました。

性癖を披露した成果が安酒にしかならないというのも割にあわないというか、こういうエントリを晒して得られる報酬としてどの程度が妥当なのか、というのはさっぱりわかりませんし、例え10倍の収益があったところで、狙ってこんなのを書くのは真っ平ごめんです。

というわけで、当ブログは今後も広告なしで運用していきます、と言いたいところなんですが、文末のAmazon本へのリンクはなんかコンテンツとして言及いただいたりもするので、たまにつけて、報酬のamazonギフトカードで安酒を買おうと思います。

そもそもは、リンクの一貫としてAmazon埋め込みリンクを貼ると、勝手にhatenaのアフィIDが入る(Pro版でも!)というはてなブログのさもしい仕様が
「自分が儲からないのはどうでもいいが、勝手に他人が儲けるのは許せない」
という私のさもしい心根にひっかかったのが事の発端ですので、アフィIDを空白にすることが出来るようにならない以上、これはしょうがないことなんですよ。そうですよ(と、ブラックニッカを飲む)

文章の慣れと怪談

一ヶ月にポツポツとそれなりの文字数を書いているせいなのか、そこそこ文章がスムーズに出てくるようになりました。
書く時間は半分ぐらいになったんじゃないでしょうか。

まあそのせいで、変なエントリを書くこともあるわけですが、突然、怪談を書いてみたのもその一貫というか、事の勢いによるものです。

実はかなり昔、私は怪談作家を目指して、こういう怪談をmixiで書いてたことがあるんですけど、「おもしろくなくはないんだけど、とりあえず全く怖くはない」という感想をいただいて、辞めた経緯があります。

なので、まあ多分今も大して怖くはないんでしょうけど、こういう文章がブログにあると、著者が得体の知れない存在に見えてくる、という効果があるようにも感じ、実際、私などは誰かに共感を持たれたり、ましてや誰かの目標にされるような人間ではないという自覚があり、それはそれで好都合なので、これからもボツボツと怪談は書いていこうと思います。(5つぐらいになったらカテゴリを独立させてもいいかな)

懺悔としてはこんな感じです。
今月もお読み頂き誠にありがとうございました。

今後ともよろしくお願いします。


プログラマが「出来ません」と言う日

長い間、フリーランスなどという「便利屋」をこなしていると、馴染みの顧客から、トラブったプロジェクトに急遽参画してほしいという、ヘルプ案件が入ってきたりする。
嫌かと言われるとそうでもなく、むしろ、恩を着せて(足元を見るとも言う)高単価を取るチャンスだし、案件が燃え上がっているのは他人のせいであり、途中から入る私は気楽なものなので、積極的に首をつっこむことにしている。

こう言うと颯爽と現れるスーパーマンのようでかっこいいのだが、そこはクソ雑魚フリーランスの私。トラブルの内容というのは、「安いWordpress業者に頼んだ案件で、途中で、(カスタマイズ要件)がやっぱり出来ないと言われた」とか「アプリが毎回メモリリークで5分で落ちるのだが、全く治る気配がない」とかそういう情けない話ばかりである。

共通して言えるのは、炎上させた業者が「(問題を解決することが)出来ません」とはっきり言ってしまっていることである。

私などはプライドだけは一人前なので、自分の技量が足りないという理由で「出来ません」と言ったことはほとんどない。
もちろん、「Webアプリからデスクトップにある任意のExcelファイルを開いてください」とか、それはどういうセキュリティホールを突けば出来るんだ、的な根本的、常識的に無理なリクエストには「最近は起きながら寝言が言えるんだな(Webの仕様上出来ません)」ぐらいの返しはする。

だが、「Wordpressの○○というプラグインが対応していないので出来ません」とか、そういう類の「出来ません」は、要するに、自分がWPプラグインの内部動作やフックAPIを理解していないことを自白しているのに等しいわけで、「(工数上)出来ません」なのは理解できるものの、そうでない場合(そうでないから私のような高利悪徳エンジニアに依頼が来るわけであるから)
よくもまあ、「出来ません」なんてことを気楽に言うものだ。と毎回思ってしまう。

彼らの事情に首を突っ込んだことはないので、どういう「出来ません」なのかは本当のところわからない。
だが、プログラマにとって「出来ません」という事がいかに屈辱的なことであるか、と私が考えているのはご理解いただけたかと思う。


そんな私だが、最近、彼らの気持ちが少しわかるような出来事があった。
その仕事は、ES6をbabelでトランスパイルできるようにgulpタスクを追加して欲しいという内容だったのだが、ES6のある構文をサポートする為のgulpタスクがさっぱりわからないのである。

私は、出来るだけ公式のリファレンス以外をググるという行為を戒めてるのだが、今回ばかりはどうにもならないので、ググッてみた。
そうすると、有りがちな問題だったのか、すぐにコピペできそうな文例が沢山でてきた。
だが、それらは意味不明のモジュールを挟んだ、これは結局何をやってるんだ、という内容だったり、もはやgulpで書くタスクじゃないだろこれ、という内容だったりしたので、私は書かれた内容に全く納得がいかなかった。
しかし、最適な答えを探している時間がなかったので、私は仕方なく、良さそうなコピペを使って、なんとか要求される仕様通りに動くようにしてファイルを返した。

一応はちゃんと動いたようで、その場はなんとかなったのだが、自分でもよくわからない物を納品してしまったので、非常に収まりが悪い。

私は仕事が終わった後も、自分が何を書いたのか、ということを調べ続けて、ようやく自分がコピペした内容がどういうものかを理解できた。
(結論から言うと、それはgulpのアーキテクチャがそのエコシステムの中ですでに破綻しているという印象を受けざるを得ないものだったわけだが、それはさておき)
肝心なことは、もし私が仕事に追われ、調べる時間をとれず、そのファイルが何らかのトラブルを起こしてしまったら、私は「出来ません」と答えるしかなかっただろう、ということだ。

そもそも私はgulpが嫌いだし(思想自体は理解できるのだが、現在の定番的なgulpタスクはその思想を理解して作られているとは思えない)、こんな腐った物のためにgulp本体やプラグインのソースを読むなんてことは真っ平ごめんである。

「自分が何をしているかを理解しているのが良いプログラマだ」というのはこの世界でよく知られた格言であるが、逆に言えば、大半のプログラマは自分が何をしているか理解していないとも言える。

理解していないまま、または理解する事ができないまま、書いたプログラムを放置すれば、未知の問題が起きた時にどうすることもできない。
これを「恐怖」や「屈辱」であると考えることができないのであれば、おそらくその時プログラマは涼しい顔をして「出来ません」と言うことができるだろう。

私もgulpという素晴らしいソフトウェアを通じて、「こんなもの理解できなくて当たり前じゃ」と言う気分になったので、
Wordpressプラグインが対応してないので、その仕様が出来ません、と答えたプログラマも「WPなんて腐ったものを理解するなんてごめんだ」ということだったかもしれないし、メモリリークも「なんで低レベルAPI触ったとたんにメモリ管理できなくなる欠陥言語を触らないといけないんだ」ということだったのかもしれない、と、想像力を働かすことができた。


それでも、私は「出来ません」と答えることは屈辱的であると思う。

それはプログラマにとっての飯の種であり、存在意義であり、聖杯でもあるところのプログラムを汚す行為に他ならないからだ。

しかし、案件の内容やその人の待遇によっては、その敬意を失ってしまうのも無理はないのかもしれない。

私にもいつか、この不遇の時を経て、いつかニヤニヤと「出来ません」と答える日が来るだろう。

それでもプログラマを続ける意義があるのかどうかは、その時に考えようと思う。


新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

ソ連のテープレコーダー

Aさんは小さい頃、両親の仕事の都合でソ連時代のロシアの田舎に住んでいたことがある。

当時のロシアの片田舎には外国人学校もなく、Aさんは地元の公立小学校に通うことになった。

学校では日本人は相当珍しく、アジア系の人種が多いその地域でもAさんは目立った。
というより、言葉もほとんどわからないAさんに話かける者はなく、遠くからこちらがわからない言葉でからかわれるような具合だった。

「子供でもなんとなくわかるんですね、バカにされているのが。辛かったですよ」

打ち解けたきっかけは水泳教室だった。ソ連の公立小学校にはプールがない。
なにかの行事なのか、Aさんのクラスは街中にあるプールに出かけた。

皆が水に顔をつけるのも苦労している中、日本で水泳が得意だったAさんは、そのプールで一人だけ見事な泳ぎを見せた。

それ以来、周囲のAさんを見る目が変わった。片言ながら、Aさんはクラスのグループに誘われて、帰りの寄り道にも付き合えるようになった。

「それで、ある日、あの建物に連れて行かれたんです」

古い建物で、誰も住んでいないように見えた。謂れがあるのかもしれないが、言葉が通じないのでわからない。
友達は廃墟のような建物の中を慣れた様子でどんどん進んでいく。

最上階の部屋には鍵がかかっていなかった。すりガラスで仕切られた、元は豪勢だっただろう部屋に入ると、中は散乱としてた。
お菓子の袋や、煙草などが無造作に落ちていて、どうも地域の悪ガキのたまり場になっているようだった。
リーダー格の男がくつろげ、と手振りでしめしたので、皆がめいめい自由に部屋で過ごし始めた。

「そこにテープレコーダーがあったんです」

その巨大なテープレコーダーは日本では馴染みのないマルチトラックのレコーダーで、複数のトラックがあった。
簡単に言うと、巻き戻しをせずに複数の曲を同時に録音したり再生できるのだ。

それは部屋に最初から備え付けられていたような様子で立派なテーブルの中央に置いてあった。

Aさんはなんとなく、テープレコーダーのスイッチを探した。ボタンを押すと、ボスン…ボスン…と断続的な雑音が再生された。

リーダー格の子が「それは鳴らないんだよ」というような意味のことを言ったような気がした。

それでもかまわずAさんはスイッチを色々いじってみた。
違うトラックには西側のディスコ・ミュージックが入っていて、
スイッチを組み合わせると、なかなかおもしろい音楽のようなものが再生されるのだ。

その様子がおもしろかったのか、いつのまにか人が集まってきて、皆でスイッチやツマミを操作して音を鳴らした。
音質は悪かった。Aさんは日本のスピーカーを繋げばもっといい音で聞けそうだな、と思った。

ひとしきり遊ぶと、テープが終わったのかカチャリと音楽が止んだ。
一瞬で皆は興味を失ったようで、めいめい壁際に座ってとっておいたお菓子の包みを開けて食べだした。

「それでもなんだか、私はテープレコーダーが気になったんです」

Aさんは少しだけ巻き戻すと、最初に雑音が入っていたトラックを再生してみた。

間延びしたテープによってピッチの安定しない調子の外れた音で、古い曲のようなものが再生された。

部屋が異様な雰囲気になった。曲の中でピッチの狂った女性の声で何かが歌われていた。

「私にはわかった気がしたんです。歌詞が英語だったんですよ」

Yuri died.Alexey died....

誰かが死んだということを延々と歌っているように聞こえた。
不穏な空気をかんじとったのか、皆が黙った。

その時、部屋の入り口のほうを見たAさんは凍りついた。

髪の長い女が、磨りガラスに顔を押し付けて、背中を向けて座っている子を見下ろしているのだ。

Aさんは悲鳴をあげた。テープがガチャンと音をたてて止まった。

いつのまにか女の姿は消えてしまった。

「それからあの建物には誰もいかなくなりました。女の人の話はしなかったんですけどね」


しばらくして、Aさんは帰国した。
ロシア語は最後までほとんど書けないままだったので、当時の友人との連絡はない。

「だからなおさら気になるですよね。あの部屋にいた子たちがどうなったのか。私の名前は呼ばれなかったと思うんですけど」

呼ばれていたらどうなっていたのか。それも気になりますけど、とAさんはポツリと言った。