小飼弾です。ブロマガをお届けいたします。今月は二号発行する予定だったのですが、drobo5dが昏睡してしまったおかげでいろいろ押してます。すみません。
「死亡」でないのは、中の人とのやりとりの結果、データが死んでないところまでは確認できたから。しかしそれを取り出せない…
テクニカルにいうと、droboを読み取り専用にするときちんと起動する。HFS+のVolumeも見える。しかしマウントしようとすると、(読み取り専用なので当然)ジャーナルを巻き戻せなくて失敗する。しかし通常モードにすると起動せず電源が落ちてしまうという状態。
データなのですが、ないと生活できないとか(Mailや原稿のとか)、それ通り越して生活する意味がなくなるとか(家族の写真とか)といったデータは無事なのですが、なければないで困る(Time Machineのバックアップとか仮想マシンのイメージとか)がどっさり入っていたのでそれなりに困ってます。
「あれ?弾さんNAS自作してたんじゃありませんでしたっけ?」おっしゃるとおりです。V型8磁筒とかHP Proliant Microserverとか。
はい。どちらもビンビンです。この子達のおかげで「困る」で留まっています。とはいえ、NASというのはLANの速度以上は原理的に出ませんし、せっかくThunderboltがあるということで導入してみたわけです。実際とても役に立ってきました。iMac 27-inch Mid 2011をRetina 5Kに置き換える時には、これのおかげで引っ越しがメチャ楽でした。
しかし、いざ不具合が出るともう中の人に聞くしかない。これが自作NASだったらいろいろ自活もできるのですが…
200 Any Questions OK
といいわけで、今回の質問です。本ブロマガの購読者からではなく、Twitter経由で中学生から、社会科の授業の一環だということで。大変お待たせしました。そういうわけなので、本号は全部無料です。もともとの質問は、こうでした。
- プログラマーという仕事のやりがい
- プログラマーという仕事の魅力
- 小飼さんがプログラマーになろうと思ったきっかけ、動機
- プログラマーの仕事で大変なこと、苦労していること
- これからプログラマーとしてどうしていきたいか
プログラマーという仕事のやりがい/魅力
「やりがいと魅力の違いはなんですか?」と逆質問したくなりましたが、ここでは同じものとしてあつかいます。
「『仕事』といっても弾さん仕事してるの」って声が聞こえました。いいツッコミです。そうですね。プログラマーの仕事というのは、仕事することじゃないんですから。電脳に仕事をさせるのが、仕事。
そのためには、仕事の内容を電脳にわかるぐらい精確に把握しなければなりません。これが人であれば、「部屋全部片付けておいて」と頼んでも家財道具一式全部ゴミに出したりはしませんが、電脳に同じことを同じように頼むと、まさにそのようなことが起こります。
rm *
ってやつですね。これでは仕事になりません。から、プログラマーが同じことを機械にやらせようとしたら、「部屋とは」「全部とは」「片付けるとは」ということを、ユーザーの心よりも広く、コンピューターの心より深く考えざるをえないのです。
「なら自分でやればいいじゃん」、実はその通りなのですが、電脳には電脳のよいところがあります。できることはものすごい限られている代わりに、もしそれができるならものすごい速い。たとえばひと昔前の電子計算機は、電子計算機とはいいながら掛け算や割り算ができませんでした。そのかわり、足し算や引き算はできるので、プログラマーはそれを使って掛け算や割り算のやりかたを電脳に教え、つまりプログラムし、あとはそのプログラムを使えば掛け算や割り算ができるというわけです。それもヒトがやるよりずっと早く。どれくらい?今私がこれを書いているiMac Retina 5k搭載のCore i7、理想的な状況下では一秒間に320億回ほど(4GHz = 40億回/秒/スレッド * 8スレッド)。
プログラマーの仕事いうのは、つまるところ算数しかできない超アホの子に、アホな子でもできることを組みあわせてどうやって仕事させようかを練ることだと言えます。元がアホな分、できるようにしたときの感動も一段と大きいのですよ。
プログラマーになろうと思ったきっかけ、動機
一言でまとめると「なりゆき」ということになりますか。
40代も半ばとなった我が身を振り返るとつくづく思うのですが、私の人生というのは「やりたいことをやる」ではなく、「やりたくないことをやらない」に突き動かされてきたように思います。そもそも生まれて来たかったのかよというのはさておき、UC Berkeleyに留学したのも、「学びたかった」以上に「この毒親父から少しでも遠いところに行きたかった」でしたし。
ところが、その実家が全焼してしまいます。1991年の12月でしたか。ああ、もうその後の人生の方がそれ以前の人生より長いわ。大学に戻れず、さりとてその全焼した実家を再建するためにもフルタイムでの就職はままならない私は、フリーランスの技術翻訳をとりあえずはじめました。すでにBerkeleyでは息をするように使っていたインターネットはまだありませんでしたが、そのかわりパソコン通信はすでにありました。それで仕事をやりとりしたのです。
ちなみに実家の再建を一切手伝わないという選択肢は想定すらしていませんでした。毒親父はとにかく、母と妹がいたからです。
話を元にもどします。技術翻訳というのは、同じ言葉が繰り返し登場します。そして同じ言葉というのは、翻訳後もたいてい同じになります。つまり文字列置換が大活躍するわけです。いちいち手で打つより、あらかじめ訳出できる用語を全置換しておいた方がずっと速く楽にできるのは今なら常識ですが、ワープロ専用機さえふつうに使われていた当時は、それだけで魔法を見るような目で見られたものです。「どうしてこんな速くできるの?」って。一語づつであればテキストエディタの置換機能でも間に合いますが、何百何千も一括でやりたいとなると、プログラムの出番になります。
そうして築いた信用もあって、いつしか私は東京で働くようになっていました。そしてその頃に、Berkeleyのような大学でなくても一般人でもインターネットを使えるようにしようという動きが強まってきました。雨後のタケノコのようにインターネットプロバイダー(ISP_が乱立したこの時期に、私がBerkeleyで習ったことが突然役にたつようになりました。私はどうやってサーバーを立てればいいのかを知っていたのです。いつの魔に、私の主な仕事は技術翻訳ではなくISPの立ち上げになっていました。日本だけではなく、いろいろな国のISPを立ち上げました。インターネットはコンピューターとコンピューターのネットワークなのですから、そのコンピューターにできることをコンピューターにやらせるのは理にかなっていました。どうやって?もちろんプログラムを書いて!
特に問題になっていたのは、それぞれのコンピューターどうしの日本語の表現法、つまり文字コードが食い違っていたこと。JISにShiftJISにEUC-JP…コンピューターどうしがつがっていなければ問題になりませんでしたが、つながった以上相互に変換できなければなりません。もちろん直接にはつながっていなくても、フロッピーディスク(!)などを通じてデータをやりとりする機会はあったので変換用のプログラムは存在していました。が、機能が足りなかったのです。特にUnicodeのサポート。
文字コードの乱立で困っていたのはコンピューターメーカーも同様だったので、これを統一しようという動きが高まりました。これがUnicode。すでにあった文字コードのうちの一つに統合するという方法をとらなかったのは、今までの文字コードというのは「英語+現地語」という使われ方ばかり想定されていて、「これ一つで世界のどこでも使える」というものにはなっていなかったこと。新しい文字コードということは変換プログラムがまた必要になるわけですが、適当なのがなかったのです。そこで私はJcode.pmというプログラムを書きました。
このプログラムが、堀江貴文さんの目にとまりました。彼は当時オン・ザ・エッヂというWeb製作会社で、同プログラムのヘヴィーユーザーだったのです。「今度上場します。CTOを探してます。弾さんやってくれますよね」。
ここから先は検索でいくらでも引っかかると思うので残りは自習ということで(笑)。ここまで見た通り、世間で思われているのとは180度とまでは言わないまでも135度ぐらいちがうことに、私は何者かに積極的になろうとしたことはほとんど、いや一度もないんです。何になるのかは全然選んでいない。でも世界は何をやるのかを私に与えても、どうやるかに関しては無言だったのです。だからやらせたわけですよ。プログラムに。
プログラマーの仕事で大変なこと、苦労していること
プログラミング自体が大変だと思ったことはほとんどありません。見てのとおり、私は自分の人生を楽にするためにプログラムを書いてきたんですから。同じことを三回自分でやるより、三回分の苦労でプログラムを一本書いて、残りの300回、30,000回、三億回、三兆回は電脳にやらせた方が楽だと思いませんか?このあたりは拙著小飼弾の「仕組み」進化論にも書いたので、よろしけばご一読を。
しかしデータ構造はいつも大変だと思っています。電脳の仕事は、つまるところデータを別のデータにすることですから。そして電脳に扱いやすいデータ構造と、人間が扱いやすいデータ構造って違うんですよ。たとえばほとんどの人は10進法に慣れていますが、電脳は2進法。当然逐次変換しているわけですが、このデータ構造をどう決めるかで、プログラムのしやすさもプログラムの速度も決定的に変わってきます。その意味でUnicodeというのは、大人の事情を引きずりすぎてプログラムしやすいものではありませんでした。今この瞬間も世界中のプログラマーがその不備で泣いてます。
これからプログラマーとしてどうしていきたいか
別の言い方をすれば、私の人生というのは人様に与えられたデータをプログラムしてきたわけです。データはどうにもならない。しかしコードならなんとかなる。よってどういきたいかは、データ次第ということになります。
このあたりのディープな話を何回かにわたって神永正博先生とお話しした結果が本になります。未来予測を嗤え!という一冊です。前著「中卒」でもわかる科学入門の続編的な位置づけで、「中卒科学」よりもやや大人向けなのですが、「どうしていきたい」以前に「どうにかなるの」まで含めて実に興味深い一冊に仕上がったと自負しております。これまたよろしければご一読を。
そう。「どうしていきたいか」といのは「どうにかできるのか」が成り立ってはじめて成立する設問でもあるのです。
100 Mail Magazine Continues
それでは、次号でまたお会いしましょう。
Dan the Programmer