ohataken のはてなブログ

ソフトウェアエンジニアのキャリアと、コンピューターギークのライフスタイル

メモアプリによるエンパワメント

なぜわたしはソフトウェアエンジニアとして働いているのか?というと、コンピューターが好きで、プログラミングスキルがあるから、というのが表向きの理由になるのですが、内心では、パソコンの前に座る仕事をして、パソコンに助けてもらって自分の弱点を補ってもらって、ようやくひとと同じ仕事ができるのだと感じているのも理由のひとつです。わたしは「重要」「親展」と書かれた封筒は、あとで開いて読もうと思って数週間経ってしまうけれど、受信ボックスに未読のまま置いておくと忘れないし、フィルターやラベルだってつけられます。毎朝新聞を読むことはできませんが、 RSS リーダーであれば毎日、あるいは1日数回だって読むことができます。

なかでも特に重要なのがメモアプリで、これがないとちょっとひとから声かけられただけでも何をしていたか忘れてしまってもとに戻るのに時間がかかってしまうし、ものを調べるときや網羅的にやる必要があるときであってもどこかに抜け漏れが出てしまいます。命綱ともいえるでしょう。

かつてヌーブでコンピューターキッズらしくアルファギークに憧れていたころ、スーパーハッカーたちは Emacs というテキストエディタでコードを書くしメールも書くし Web ブラウズもやる、 org-mode という Emacs Lisp 拡張を追加してメモをとって生産的にプログラミングすると聞いて、さっそく Emacs をインストールしたものの、うまく拡張を入れられないし、空のメモ用ファイルを開いても何を書けばいいかわからないし、という体たらくでした。なにぶんヌーブなので入ってくる情報は新鮮で、またキッズなので没頭して、それだけで突破していたのだと思います。その間はいいのですが、集中が切れて問題を解決できなくなると投げ出してしまってそのままお蔵入りしてしまうことがほとんどでした。

いまは Emacs でメモをとっているわけではないのですが、集中を維持したり、技術的な課題を解決したり、そうすることでアイデアが浮かんできたりと、うまく活用できるようになりました。

メモアプリとはただ単に紙とペンを代替したものではなくて、それ以上にクリエイティヴィティを刺激するものだと思います。憧れのハッカーがこぞって使っている Happy Hacking Keyboard で気分よくタイピングして、 macOS のうつくしいフォントが Retina ディスプレイに表示され、それを見て Emacs 風のショートカットキーでカーソルを動かしたり、文字列を切り貼りしたり、という作業は紙とペンよりはるかに速く精密で、キーボードの手触りやディスプレイに映った文字が脳を刺激して身体性を感じさせてくれて、脳から指先を通じて画面の中に直接文字を書くような錯覚をおぼえるのです。

コンピューターは世界中のあらゆる人々をエンパワーしているけれど、メモアプリがわたしをエンパワーしてくれているということは、その確かな一例になっていると思います。

型の理 型の利

プログラミングを学びはじめたころ、わたしにとっての最初のハードルは分岐でも繰り返しでも関数でもなく、型でした。コードを書いたらすぐに動かしてみたいのに、暗黙の型変換はよくないとか、文字列のつもりなのに数値が入ってきてるとか、細かいことをチクチク指摘してきて、あまり面白くありませんでした。まるでプログラムが敵対的な意思をもっていて、動こうともせずにここがダメだからやりませんと言っているように感じられたのです。一家に一台の時代、Pentium III のノートパソコンを独り占めしていた中学生のころのことで、思い通りにならないと面白くない年頃だったのでしょう。

プログラミング教育に携わっていた経験から言っても、型を説明するのはむずかしくて、一斉講義であれば極力避けますし、個別の対面指導であれば、型は難しいよねと寄り添ってから、いまやりたいことと、次にやることのイメージを具体的にしてあげて、学習意欲を損なわないように助けるという方法をとると思います。型を教える特効薬はなくて、アクティヴラーニングで乗り越えよう、ということです。

コンピューター、正確にはチューリングマシンは、長いテープとその上を移動するヘッドのようなものでできていて、テープのひと区画を読み取ったり書き換えたりしながら動くわけで、別に型は必要ありません。ただし、チューリングマシンは頭がよすぎる故の弱点があって、計算を終えることができるかどうかを自分自身で検証できません。そこで、チューリングマシンより単純で、そのかわりにチューリングマシン以上の検証ができる計算モデルを導入することで解決しようとしました。型はその流れのなかのひとつなのだと思います。この考え方は計算機科学的すぎますが、結果的にソフトウェアの保守性を維持したり、エディタですばやく補完が効いたり、エンジニアリングにおいて都合がいい機能を支えているのです。

計算機科学に限らず、科学的・理論的な議論では「実数Rの要素a, bが以下の性質をもつとき」のような表現があります。これはふつうは集合論だと読み取るのですが、型と考えてみるのもおもしろいと思います。たとえば2次方程式は中学数学では解なしだったとしても高校数学では複素数解だったりするわけで、これは型によって振る舞いが変わる例として親しみやすいと思います。英語でも、種としての犬は Dog で、道端で散歩している犬は a dog なので、集合と要素、型とインスタンスという構造があります。こうやってほんの少しだけでも計算機科学のことを考えながらプログラミングしていると、一片の花びらを見て桜という集合・型を意識するような計算機科学的な世界観が広がっていって、プログラミングがますます楽しくなっていく気がします。

クラシックなコンピューターギーク像

私は大学在学中から職業プログラマーとしてやっていて、これからもこの仕事を続けていきたいと思っているのですが、ふとしたときに、もしかしたら自分はすでにプログラミングに飽きてるんじゃないかと思うことがあります。そのすぐあとに、まだまだやってないことたくさんあるよね?と考えて持ち直すのですが。

そもそもコンピューターは弾道計算を目的として発明されたわけで、物体の運動を調べたり、流体のシミュレーションや倒立振子の姿勢制御するのだって原始のコンピューターの目的にかなっているわけです。コンピューターは科学史上の業績へのアクセシビリティを飛躍的に高めて、手元で再現する手軽さを研究者ではない私のようなギークに与えてくれているのです。

エイダ・ラブレスはコンピューターが発明されていない時代で人類で初めてデバッグしたとか、オートマトンパーセプトロンとは異なる計算モデルを求めた結果だとか、19世紀の数学者・物理学者のハミルトンが提示したハミルトン閉路問題が計算複雑性の研究のきっかけだったり、ブラウン運動に確率微分方程式が研究されて拡散モデルで役立っているとか、フォン・ノイマンの業績とか、ユーザーインターフェイスに関するアラン・ケイの仕事や Apple の HIG とか。こういう話はめちゃくちゃおもしろいし、その続きである現代ではコンピューター・情報科学・数学・物理学が渾然一体となって、社会に大きい影響を与えているわけです。

いま私はこういった話題を興味深く感じていますし、この先ずっと情熱を燃やしていきたいと思っています。こういう姿勢のことを、クラシックなコンピューターギークと私は呼んでいます。SFやロボットアニメが好きな子供の気持ちのまま、年齢に見合ったコンピュータースキルを身につけていきたい、そう思えば、職業プログラマー・ソフトウェアエンジニアとしての心のよりどころを持つことができて、飽きずに続けられそうです。もしプログラマーとしての仕事を失ってもコンピューターギークとして霞を食って生きていけそうですし、ひょっとしたら、何かが起きてゲームのルールが変わったときにひと山稼げてしまうかもしれません。こういう気持ちをもって、この不確実な世を生きていきたいと思ってます。