「何でも屋」と否定的にレッテルを貼られることがあるかもしれません。でも、それは実は良いことなのかもしれません。特に、さまざまな背景やプログラミング経験、文化を持つ人たちをメンタリングするときには! アイザックは自称IT好きにして何でも屋……そしてそれだけにとどまりません!
Jonathan: みなさん、こんにちは。Exercismコミュニティポッドキャストへようこそ。今回は、メンテナーでありコントリビューターでもあるIsaacをお迎えできて光栄です。Isaacは最近、Go Hort、つまり学習コホートでたくさんの生徒のメンタリングをしてくれました。コホートは30日間の取り組みで、GoとElixirを中心に、これまでに2回ほど開催しています。IsaacはGoトラックを手伝ってくれて、本当に助かりました。というわけでIsaac、ようこそお越しくださいました。まず、どこにお住まいで、どちらの出身で、どうやってIT業界に入ったのか、少し教えていただけますか。
Isaac: はい、私はカリフォルニアに住んでいます。サンノゼです。正直に言うと、IT業界に入ったのは兄の影響です。兄がIT業界にいて、私は兄がやることは何でもやっていました。きょうだいはたくさんいました。みんなで一緒に過ごすのが好きでしたが、相性の良し悪しはそれぞれでした。私は特に、ある兄と一緒にいるのが大好きでした。兄のほうはそこまでではなかったかもしれませんが、私はよく兄の後をついて回り、兄がやっていることを自分もやりたがっていました。兄が15歳くらいのとき、家に転がっていた『C for Dummies』の本を手に取りました。私が9歳だったと記憶しています。兄がCを書いているのを見て、私も兄がやるなら自分もやろうと思いました。その歳では、私のプログラムはとても単純で基本的なものでした。名前を聞いて『Hello Bob』と表示するような練習です。決して複雑ではありませんでした。誰でもどこかから始めるものです。私はそこから始めたわけです。ある文字を出力すると音が出るんだ、すごくかっこいいと思ってね。スラッシュAを出力するだけのプログラムを書いたんです。でも9歳から始めていたんです。Cのプログラムを書いていました。家には古いWindows 3.1のマシンがあって、DOSで起動していました。兄がバッチスクリプトを組んでいて、コンピューターが起動するとメニューが表示され、Windowsを起動するとか、ゲームを起動するとか選べるようになっていました。ゲームメニューのようなものです。Warcraftなら5を押す、みたいな感じです。それで、ほかのゲームもインストールしていたので、私はバッチスクリプトを書くようになりました。そこからはもう、転がるように進んでいきました。兄は大学でコンピューターエンジニアリングを専攻しました。そしてまたしても、兄がやるなら自分もやろうと思ったんです。それで9歳からCを書き始めました。高校ではVisual Basic 6を書いていました。高校时代はPOM Pilotを持っていて、それでいろいろなプログラムを書いていました。数学の先生はとてもクールでした。当時は、昔ながらの…
Jonathan: あれですよね、iPadの前身みたいなものを出そうとしていたのを覚えていますか。一部の人が手に入れて、小さなペンで書き込むやつです。ペンが先端から出てくるとか、シュッと出て、それでトントンと叩ける、みたいな。みんなすごくクールだと思っていました。そういうのをいつも覚えています。その後でiPadが出始めて、みんな『ちょっと早すぎたね』という感じでした。あのPilotは、ほんの少しだけ時代の先を行きすぎていたんですよね、わかりますか。
Isaac: 10年ほどは素晴らしいものでした。そう、入力に使うPalm Graffitiというのがあって。小さな入力パッドがあって、文字を書いて入力するのですが、アルファベットを基にした形でした。たとえばAは三角形のような形で、Fは直角のような形でした。そう、高校の数学の先生が『自分でプログラムを書いたなら、テストで使ってもいいよ』と言ってくれて。それで高校ではPOM Pilotのプログラムを書いていました。本当にクールでした。大学ではコンピューターエンジニアリングを専攻しました。周りがスクリプト言語の話をしていて、私はそれが何なのかよくわかっていなかったので、なんとなくPerlを手に取りました。大学院を出たあと、Googleに採用されました。2013年に、東海岸からカリフォルニアへ移されました。そこで10年ほど前にPythonを覚えました。それ以来、Pythonが私の主要言語です。Googleで働いていたので、私のスタイルはGoogleスタイルの影響を強く受けています。だから主にそういう書き方をしてきました。そして4年ほど前、2018年くらいだったと思いますが、Googleが社内でGo言語を推し始めて、そのときにGoを覚えました。
Jonathan: なるほど。Isaac、Googleスタイルという話ですが、『これが正しいやり方だ』という明確な感覚があったのでしょうか、それとも…もう少し詳しく話してもらえますか。興味深いです。
Isaac: コードスタイルは、必ずしも正しいやり方というわけではなく、全員が従うべき統一されたやり方という性格が強いです。良い妥協や良い取引とは、誰も満足しない取引だと言われます。誰もスタイルガイドに完全に満足しているわけではありませんが、全員がそれに従っている限り、コードは統一された見た目になります。つまり、誰でもGoogleのコードベースにある任意のコードを手に取って修正できます。同じスタイルガイドラインに従っていればコードはすべて統一されているので、『このコードベースはインデントが4スペースで、こっちは2スペース』とか、『こっちはこういう命名規則で、あっちはこう』などと気にする必要がありません。コードベース全体で、すべてが同じやり方で書かれています。誰もがすべてに満足しているわけではありません。それぞれに『こう書いてほしい』という箇所はあります。ただ、公開されている文書化されたスタイルガイドがあるので、『Google Python style guide』で検索すれば、Googleではこう書くというのがわかります。全員がそのガイドに従っている限り、コードはとても統一された見た目になります。どのコードベースを開いても、『ここはこう書くだろうに』という驚きがないのは本当にいいことです。
Jonathan: それが、Goがそういう文脈にうまく当てはまる理由なのでしょうか。フォーマットが決まっていて、『こうである』という感じですから。Googleの影響がはっきり見えますよね。
Isaac: そうですね。Rob PikeがGoogleのやり方にどれだけ影響を受けたのか、逆に彼がどれだけGoogleのやり方に影響を与えたのかはわかりません。どちらが先かは定かではありませんが、Goは間違いなくそれをさらに徹底しています。Pythonでは複数のスタイルがあって、人はリンターを調整して違う書き方も受け入れるようにします。たとえば、Google社内ではPythonでインデントに2スペースを使います。深く入れ子になったコードが多く、スペースの壁を大きくしたくないからです。社外では多くの人が4スペースを使い、それはPythonのドキュメントにも書かれています。ですがGoでは、それをさらに徹底しました。言語自体にフォーマット機能があり、フォーマットの方法は1つだけです。どれが正しいかという議論はありません。方法は1つだけです。
Jonathan: そうすることで、やり取りがすごく減ります。まあ、そういうことにしておきましょうか。いいですね。
Isaac: そうですね。
Jonathan: では、Googleに入ったとき、Pythonはまったく未経験だったのですか、それとも少し触ったことがあったのですか、それとも簡単に移行できたのですか。Googleで仕事が決まってから『よし、Pythonを覚えよう』という感じだったと聞こえたのですが。
Isaac: そのとおりです。Googleに入る前はPythonを書いたことがなかったと思います。1、2年はPerlを書いていました。その時点で2年ほど前、初めての夏のアルバイトでPerlを書き始めたのだと思います。それはまた別の話ですが。Googleに入る6年前からPerlを書いていたので、その頃にはかなりPerlを書いていました。Bashも少し書いていたので、スクリプト言語には馴染みがありました。でもPythonは一度も書いたことがありませんでした。ただ、十分な数の言語に触れていると、別の言語を覚えるときの学習曲線は少し緩やかになります。ほとんどの構文はすでに見たことがあって、文法が少し違い、ツールキットが少し違うだけだからです。でも、だいたいは同じで、書き方が少し違うだけなんです。構文はどれもよく似ています。だから4つの言語を覚えたら、5つ目を覚えるのは『ああ、ちょっと書き方が違うだけだな』という感じです。
Jonathan: はいはい。興味深いですね。さて、先ほど高校を出てからの最初の仕事の話で少し笑っていましたね。それで、ずっと『自分はエンジニアリングの道に進むんだ、コンピューター関係のことをやるんだ』と考えていたのですか。それとも、自然に馴染む場所で、楽しいからそれでいい、という感じだったのですか。どういう…
Isaac: そうですね。私は兄の足跡を追うことに一生懸命でした。兄はコンピューターエンジニアリングに進みました。兄がプログラミングを始めたのは、私が子どもだったときです。私はそのあとを追いました。若い頃からプログラミングを書いていました。兄がコンピューターエンジニアリングに進み、私も兄と同じことをしたいと思っていましたし、プログラミングを書くのがとても楽しかったのです。だから高校に入る頃には、兄はすでに大学に行っていましたが、自分が進みたい場所はそこだとわかっていました。
Jonathan: ということは、何歳か年上の兄で、人としてあなたにものすごく大きな影響を与えたようですね。ほかにきょうだいは何人いるのですか。それとも、あなたの目には兄が最高の人だったのですか。
Isaac: きょうだいは8人いますが、その中でも兄とは特に仲が良かったです。8人もいれば、相性の良し悪しは当然あります。兄とはとても仲が良かったです。考え方もよく似ていますし、興味も似ています。いつもコンピューターの話で盛り上がっていました。今でもそうです。それが食卓の話題になると、兄の妻は嫌がります。『食卓で仕事の話はなし』という感じです。いつもプログラミングの話で盛り上がってばかりです。私が兄を真似したかっただけなのか、単に興味が似ていただけなのかは、正直わかりません。今は確かに興味が似ていますが、それが生まれつきなのか育ちなのかはわかりません。私が兄を真似ているのか、ただ興味が似ているだけなのかは、なんとも言えません。ただ、幼い頃から兄の足跡を追っていたのは確かで、兄がある程度道を作り、私はそれを追っていました。
Jonathan: いいですね。それで、兄は今どこにいるのですか。興味本位ですが、東海岸にいるのですか。
Isaac: まだ東海岸にいて、IT業界で働いています。一時期、同じ会社で働いていたこともあります。
Jonathan: はい、なるほど。そういうことですね。いいと思います。単純に興味があって聞いてみました。さて、ひとつお聞きしたいのは、先日開催したコホートでとても活躍してくれましたね。最新の学習コホート、特にGoで、30日間の取り組みをGoで行いましたが、それとこれまでのExercismへの関わりは、主にメンテナンスで、あとはメンタリングもかなり多かったと理解しています。その二つの役割の分け方はどう感じていますか。そもそもExercismとはどうやって出会ったのか、またどのあたりに貢献するのが楽しいと感じるのか、教えてください。
Isaac: Exercismを知ったのは、Haskellを学び直そうとしていたときです。Googleで『Haskell 101』という講座を受けて、それがとても楽しかったんです。それで『もっと時間をかけよう』と思ったのですが、いったんは疎遠になってしまいました。その後、また戻ってこようとしました。
Jonathan: では、また次回お会いしましょう。
Isaac: どの言語でも、一番早く身につくのは実際に書くことだと思います。一番書きやすいのは、書く目的があるときです。Haskellを書く良い目的が見つからず、それがなかなか身につかない理由でした。でもExercismを見つけて『これならもっとHaskellを書けそうだ』と思いました。それがExercismとの最初の出会いです。始めてみると、PythonのトラックやShellのトラック、ほかにもいろいろな演習があって、そのまま深みにはまっていきました。
Jonathan: そして、深みにはまっていったわけですね。
Isaac: はい。Pythonで演習を解き始め、Bashでも解き始めました。Goの演習もいくつかやりました。Go Hortが始まったとき、以前の自分の解答を見返していたら、多くが3年前に提出されたものでした。というのも、Goトラックには2019年に初めて登録していて、そのときにかなりの数の演習を解いていたのです。それまでにPythonを10年やっていたので、Pythonのメンターとして参加するのは比較的気楽に感じました。最近は主にそこでの演習に時間を使っています。それから、Pythonトラックにおかしな点があったので、PR、つまりプルリクエストを出すようになりました。そしてBashトラックにも関わるようになりました。どういう経緯だったかはよく覚えていませんが、Bashトラックに修正を送る側から、Bashのメンテナーになりました。
Jonathan: そういうものなんですね。つまり、『登録するときは気をつけて』ということですね。
Isaac: はい。それからGlennがOckトラックを作り始めて、『Ockなら知ってるし、好きだから、便乗しよう』と思って、Ockトラックの演習づくりを手伝いました。はっきりとは覚えていませんが、3年前にGoの演習を見たとき、トラック全体を終わらせたのだと思います。するとメンターの一人が『全部の演習を終えたのだから、メンターになってみたら』と言ってきました。でも私には十分ではなく、Goをそこまで頻繁に、定期的に書いているわけではないので、安心してメンタリングできるとは言えませんでした。だから、当時はGoのメンターではなかったのです。でも、Go Hortに参加したとき、メンタリングを求める人がたくさんいたので、『では1か月、メンターとして登録して手伝おうかな』と思いました。ただ、実は最近はGo Hortに生徒として参加していて、そのまま生徒側から少しずつ移っていく感じになりそうです。
Jonathan: そのまま生徒側から移っていったわけですね。登録するときは気をつけてください。というのも、ひとつに登録したら別のものになっている、というパターンができつつあるようですから。でも、いいことです。では、特にGoトラックで生徒をメンタリングしてきた中で、よく見かけるものは何ですか。Goトラックには、かなり経験を積んだエンジニア、つまり開発の実績がある程度ある人も多いと思いますが、『これはよくある、みんながつまずきやすいところだ』と気づいたことはありましたか。よくあるパターンや、繰り返し現れる傾向のようなものはありましたか。
Isaac: どうでしょうか。私が見てきたメンタリングのほとんどは、演習を完了した人に対するものでした。多くの場合、メンタリングを求める前に演習は解き終えています。なので、私が関わるほとんどのやり取りでは、みんな基本的に行き詰まっているわけではありません。ほとんどは、演習を見事に解き終えた人に対して、『もっと効率的なやり方はありますか』『もっと良いアルゴリズムはありますか』といった内容です。よく出てくるもののひとつは、文字列の組み立てです。GoやPythonのように文字列がイミュータブルな言語では、文字列の連結をたくさん行うのはあまり効率的ではありません。なので、『配列を使って組み立ててから文字列を結合するとか、Goなら文字列ビルダーを使うといいですよ』といった話をよくします。より良いパターン、ベストプラクティスやパターンへと導くことが多いです。ご視聴ありがとうございました。
Jonathan: なるほど、それは面白いですね。では、今の仕事の日常はどんな感じですか。開発はどこに位置づけられますか。IT業界に長くいるわけですが、1日はどんなふうに過ぎますか。大変なことは何ですか。今の仕事で楽しいと感じるのはどんなところですか。
Isaac: 私はサイトリライアビリティエンジニアという役割で、おおまかに言うとDevOpsに近いです。システム管理の要素もあります。ここ10年ほど、オンコールのローテーションでポケットベルを持っています。なので、毎日がどんな感じかは、その週が自分のオンコール週かどうかで大きく変わります。オンコールの週は、ポケットベルを見ていることが多く、チケットキューやサポートキューがあり、失敗している処理や問題がきちんと診断・修正されるようにします。これはだいたい6週間に1週間、あるいは今のチームの人数によって変わります。それ以外の期間は、オンコールではありません。
Jonathan: なるほど。
Isaac: 自動化に多くの時間を使っています。面倒なプロセスを見つけて、それを楽にする作業です。理由があってそうなっていることもありますが、一般的には、たとえば問題が起きたときに、あのコマンドとこのコマンドを手で実行して修復しているとします。でも『なぜこのコマンドを手で実行しているのか』と思います。それを全部やってくれるPythonスクリプトを書けないでしょうか。あるいは、ツール自体が失敗せず、その問題を自分で検知できるように改善できないでしょうか。そんなふうに、システムの運用を日々改善して、人がそこまで深く関わらなくてもスムーズに動くようにする作業が多いです。
Jonathan: では、そういう最適化できる小さな箇所を見つけるのは楽しいですか。仕事のうちどれくらいが、何かに対応して、そこから『これはチャンスだ』と気づく受け身のもので、どれくらいが、そういう箇所を前もって探す能動的なものですか。ふだんはどんなバランスですか。
Isaac: 自動化は楽しいです。おそらく仕事で一番楽しいのは、物事を自動化できることです。いつも受け身というわけではありません。受け身というのは、何かが壊れることかもしれませんし、たとえばみんながコピペしているコマンドがあって『これは改善できないかな』と思うようなことかもしれません。ランブックが誰かに変更されたのを見たり、どこかのコマンドが改善されたのを見て、『このコマンドはごちゃごちゃしているな、一から書き直せないかな』と思うこともあります。もちろん、やりすぎはよくありません。バランスを取る必要があります。もっと簡単な言葉で、より良い書き方で、といったことも大切です。そうやって取り組んでいくしかありません。正直に言うと、仕事の中身はどれも自分に合っていると思います。私はとても前向きな人間で、何であれ好きなことには時間をかけたくなるものです。
Jonathan: ものづくり、と言えるかもしれませんね。
Isaac: リファクタリングですね。使いにくいツールに気づいて、それを書き直したり、ラッパーを書いたりすることです。大きな複雑なプログラムへの変更を見て、『このプログラムはごちゃごちゃだな、書き直したりリファクタリングしたりできないかな』と思うこともあります。新しいものを作ることもあります。いつもリファクタリングというわけではなく、新しいツールを作ることもあります。『20ステップ必要なプロセスがあるなら、全部プログラムにまとめてしまおう』という感じです。こうしたものは何らかの形で見つける必要があります。タスクを任されて、『これを手で実行したくないな』と気づくこともありますし、どこかのコードを見ていて、『別のチームが管理しているこちらのコードは良くないな、リファクタリングしよう、モダンなライブラリを使おう』と気づくこともあります。
Jonathan: つまり、見つけられるかどうかですね。それで、どのくらい自由に動けるのですか。あちこち動き回って、ひょいと入り込んで手を加えるような裁量はかなりあるのですか。それはきっと楽しいですよね。
Isaac: 上司はかなり自由にやらせてくれます。ありがたいことです。これがどれだけGoogle時代の経験によるものかはわかりませんが。Googleでは、みんな気軽にひょいと入り込んで、『このライブラリを使っていて、こう改善できると気づいたので直しておきます』という感じでした。ごく短期間ですが、文化がまったく違うスタートアップで働いたことがあります。ずっと閉鎖的でした。そのスタートアップでは、みんな自分のコードベースをとても守っていて、他人が自分のコードを変更するのはあまり歓迎されませんでした。だから『このコードベースには問題があるな』と思っても、なかなか変えられませんでした。
Jonathan: ええ、『手を出すな』という感じですね。でも面白いです。スタートアップのほうが『とにかく仕事を片付けて、できるだけ安くやろう』という感じだと思うでしょう。でも実際は、Googleのほうがそういう考え方に対応できていたのかもしれません。すみません、今電気をつけました。今は電気がなくて、聞いてくれているみなさん、ケープタウンでは時々停電するんです。今ちょっとまぶしいですが、大丈夫です。でも、スタートアップの文化の話に戻ると面白いですね。皮肉なことに、みんなが所有権にこだわって、かえって物事を難しくしていることがあるんですよね。
Isaac: そうですね。スタートアップであることが、オープンであることや、遊び心のある仕事の文化と結びつくとは限らないと思います。Googleでは、みんなが楽しみながらやっていて、好きだからやっているという面が強く、とても友好的で、オープンでした。他の職場文化では、好きだからやるというより、『これは仕事だから』とか『これは自分のコードで、自分は仕組みをわかっている。他人に触ってほしくない』という感じが強いこともあります。職場文化がどう変わっていくのかは、私にもよくわかりません。でもGoogleは、全員がすべてのコードにアクセスでき、誰もが変更する権限を持っているという感覚をとても大切にしていました。『自分が正しいと思うことをやりなさい』という感じです。今の仕事の上司も、かなり自由にやらせてくれます。『直したいものを見つけたなら、直せばいい。改善できるところを見つけたなら、私は邪魔しないから、手伝えることがあれば教えてくれ』という感じです。なので、やることの多くは自分で決められます。『ここをもっと良くできるな』と思えば、上司は『いいね、やってみて』と言ってくれます。
Jonathan: いいですね。それで、会社は東海岸に拠点があるのですよね。ということは、実際はリモートで働いているのですか。以前、引っ越す予定だったのがCOVIDでその話がなくなった、と話していたのを覚えています。リモート、距離、時差、そういったものはどうですか。影響はありますか。
Isaac: オフィスに出て、直接人と関わるのは間違いなく恋しいです。時差については、チームがとても融通を利かせてくれています。私はチームのみんなより3時間遅れています。毎日短いスタンドアップがあるのですが、それは参加できません。2つの製品それぞれに毎日スタンドアップがあり、最初のほうには出られません。チームはそこをうまく調整してくれていて、社内ではSlackをよく使っています。問題があれば毎日のSlackスレッドに書いてくれるので、キャッチアップできますし、何か必要ならメンションしてくれます。私もできるだけ早く返事をするようにしていて、朝はそうしたものをできるだけ早く処理します。時差はあまり良くはありませんが、うまくやり過ごせています。逆に、チームにはもう少し遅くまで起きている人がいる、という利点もあります。東海岸で18時になって『あ、これが壊れてる』というときに、『Isaacは西海岸にいるから、そっちはまだ15時だから手伝ってもらえるかも』という具合です。両方向にうまく働いています。
Jonathan: はい。
Isaac: そう、Googleを辞めたのは2019年、失礼、2020年です。面接は2019年でした。2020年5月に入社する予定で、2020年の4月か8月に引っ越すつもりでした。でもコロナ禍が始まって、オフィスが閉鎖されて、『オフィスはまだ開いていない。開いたらすぐ引っ越す』という状態が続きました。そしてパンデミックが始まって2年経って、オフィスがまた開き始めました。そのときには『もう引っ越したいかどうかわからないな』と思っていました。ニューヨークはとても魅力的に聞こえました。いろんな店が開いていて、会場やイベントもあって。でもパンデミックになって、そういうものの多くがそれほど魅力的に思えなくなりました。それで、2年間リモートで働いたあと、正式にリモートの職種に移りました。
Jonathan: 都会派ですか、田舎派ですか、それともその中間ですか。ニューヨークは都会ですからね。100%都会です。間違いありません。なので、かなり大きな変化だったでしょうね。でも、わくわくしますよね。
Isaac: 大きな都市圏で育ったので、都会の暮らしには慣れています。今は郊外に住んでいます。ハイキングとサイクリングが好きで、できるだけ外に出るようにしています。素晴らしいハイキングやサイクリングのトレイルの近くの郊外に住むのは気に入っています。ニューヨークへの引っ越しはかなり大きな変化でしょう。でも、ときどき環境を変えるのも悪くないと思っています。ニューヨークでの生活が嫌になったら、また引っ越せばいいだけです。
Jonathan: それもそんなに難しいことではありませんからね。いいですね。それで、間違っていたら訂正してくださいが、おそらくオフィスや在宅の仕事で画面に向かう時間が長いですよね。毎日外に出たりしますか。画面の世界と、外に出て何か別のことをする時間はどうやってバランスを取っていますか。『これは外に出て何かしよう』という決まった時間はありますか。
Isaac: そうだといいのですが。日や月や年によって、うまくいくときとそうでないときがあります。2020年はほとんど毎日サイクリングをしていて、かなり良かったです。たいていの週末は外に出ています。週に一度はハイキングに行くようにしています。あまりうまくできているとは言えませんが、ハイキングには行きます。季節にもよります。私はカリフォルニアにいて、ものすごく暑い週もあります。先週は熱波で、1週間ほど40度以上が続きました。そうなると外に出るのは大変です。カリフォルニアでは山火事もあります。1、2週間、外の空気が安全に吸えないほど悪いこともあります。だから、カリフォルニアでは何週間か外に出るのが難しいこともあります。それに、パンデミックで室内にいるのも大変です。なので、他の週よりずっと室内にいる週も確かにあります。でも外に出るのは好きです。半年間、少なくとも隔週でハイキングに行っていた時期もありました。
Jonathan: それから…。
Isaac: 半年間、毎月のようにキャンプに行っていた時期もありました。うまくできている時期もあれば、2週間ずっと家にこもっている時期もあります。
Jonathan: いいですね。それでIsaac、次はどんな…。まだそこまで考えていないかもしれませんが、これからの5年はどうなりそうですか。何か考えがありますか。自分で事業を始めたいとか、これをやりたいとか、それとも、ただ人生を楽しんで、今の自分に満足しているという感じですか。
Isaac: 西海岸に引っ越す前は、自分の将来がどうなるか、もっとよくわかっているつもりでした。でもそういうものが全部ひっくり返って、1年後に何が起きるか予測するのも難しい、まして5年後はなおさらだと学びました。今はとても満足しています。つい最近、転職したばかりです。2年、2年半ほど前に転職しました。今の仕事がとても気に入っているので、しばらく変わることはないと思います。この先2年、3年、5年と、同じ仕事を続けられれば嬉しいです。カリフォルニアでの暮らしが大好きです。ハイキングやサイクリング、キャンプができるのが好きです。なので、すぐにカリフォルニアを離れることはないと思います。仕事もとても楽しいので、そうすぐに辞めることもないでしょう。かなり満足していて、大きな変化の予定はありませんが、本当に先のことはわかりません。
Jonathan: いいですね。では、もういくつか質問があります。ぜひIsaacの考えを聞きたいです。最初の質問は、たぶん事前に伝えていたものではないのですが…。もし今、10人のまったく知らない人がオフィスに入ってきたとして、その人たちがプログラミングについて何も知らないとしたら、たとえばハープ奏者や庭師など、いろいろな人がいるとします。そんな人たちに、プログラミングを始めるために、まず伝える3つのコツは何ですか。『これだけは必ずやれ』というところまで絞るとしたら、どんなアドバイスになりますか。
Isaac: 一番のオススメは、プログラミングで解決できる問題を見つけることです。具体的なプロジェクトがあると、やる気につながります。逆に、前に進むための目標が何もなければ、プログラミングの学習はとても困難です。ほかのスキルと同じように、プログラミングを学ぶにはそれなりの粘り強さや根気が必要です。とにかく続けることが大切です。最初はとても大変で、いらいらすることも多いでしょう。前に進むための何かがなければ、簡単にあきらめてしまいます。なので、できれば、実際にやりたいことがあるととても助かります。結局は同じ話なのですが、とにかく続けることです。自分に辛抱強く、新しいスキルを学んでいるのだから失敗はたくさんするものだと認めることが大切です。プログラミングを学ぼうとして、いらいらしてしまう人もいました。『普段は物事がうまくいくのに、これは最初からうまくいかない』という感じです。私は『失敗は学習の一部だよ』と言います。何かに失敗するのが苦手だと、新しいスキルを身につけるのは本当に大変です。自分にも、学ぶプロセスにも辛抱強くなって、とにかく続けることです。
Jonathan: 役に立ちますね。私自身、メソッドがどう働くのか、つい最近までわかっていませんでした。というのも、人が何かを教えるときには、前提とされている知識がとても多いんです。突然みんなが『メソッド』という言葉を使い始めて、『メソッドって一体何なんだ』『どうなっているんだ』という感じでした。Goのコホートを通して初めて、『ああ、メソッドはこう働くのか』とわかったんです。パッと理解できたというより、この環境とこの用語に長く浸かることで、じわじわ染み込んでくる感じでした。私にとって最大の学びのひとつは、すべてを覚えようとせず、ひとつのシンプルな概念を少しずつ削っていくことでした。すべてが密接につながっているので、やがて頭の中のイメージを組み立てられるようになります。それがとても大切です。これはいい知恵ですね。みなさんにも伝えます。Isaacのオススメは、自分に辛抱強く、優しく、少しずつ進めること。とてもいいと思います。では最後の質問です。そして、Isaacを残りの1日に送り出す前に。チームで話したのですが、IT業界で自分が死んでも譲れない一線、という考え方があります。ずいぶんドラマチックに聞こえますが、要は、IT業界で絶対に譲れない考え方や姿勢は何か、ということです。たとえば、とても些細な例ですが、フロントエンドをやるときはいつも関数を先に書いて、それからCSSを書きます。機能、次にロジック、そのあとに残り、という順番です。別の例では、Unisonトラックを運営しているRebeccaが、意見が強くて一緒に働くのが難しい天才よりも、チームで働いて一緒に問題を解くのが本当に好きな50人のほうがいい、と言っていました。管理の手間をすべて奪ってしまう天才一人より、ということです。それが彼女の一線でした。私なりにうまく言い換えましたが、Isaacにとって、IT業界で譲れない一線は何ですか。
Isaac: これはおそらく、Googleのやり方に非常に強く影響されています。Googleには『リーダビリティ』という考え方があって、コードは読みやすいものであるべきとされています。私もコードを書くときは、読みやすく理解しやすいコードにしたいと思っています。多くのコードを見てきましたが、特に効率やベンチマーク、コードを速くすることに重点が置かれることが多いです。私のやり方が必ずしも最も効率的でないことはよくわかっていますが、読みやすいコードになるなら、超効率的なコードよりも、非効率でも読みやすいコードのほうが好きです。よく引用される言葉で、誰の言葉かは正確には覚えていませんが、『早すぎる最適化は諸悪の根源である』というのがあります。『どうすればもっと効率的になりますか』と聞かれたら、『もっと効率的にする必要があるのですか』と返します。本番環境で効率の問題に直面しているのですか。本番で使うには遅すぎるのですか、と。本番環境でコードに効率の問題が実際に起きていないなら、なぜもっと効率的にするのですか。今のままで読みやすく、保守しやすい。他の人も何が起きているか理解できます。CPUサイクルを少し節約するために、なぜ扱いやすく保守しやすい、よく書かれたコードを手放すのですか。電気もCPUも十分に安いので、最適化のためだけにコードを最適化する必要はないのです。
Jonathan: そうですね。いつも面白いのは、『うちのプログラムは30ミリ秒でコンパイルして実行できた』という話に対して、『でも20ミリ秒まで縮めました』と言われても、どちらが速いか遅いか、私にはわからないということです。十分速く感じます。いい指摘だと思います。Isaacのコードを読むのはきっと楽しいでしょう。素晴らしいです。Isaac、時間を取ってくれて、早起きしてくれて、南半球の輪番停電に耐えてくれて、本当にありがとうございます。私が真っ暗闇に座っているのも、きっとIsaacには面白おかしく映っているでしょう。お時間をいただき、本当にありがとうございました。今後の学習コホートやメンタリングの場でお会いできるのを楽しみにしています。Exercismや各方面への貢献にも感謝しています。ありがとうございました。それでは、またすぐお会いしましょう。いえ、こちらこそ。お元気で、Isaac。では。
Isaac: こちらこそ、本当にありがとうございました。いえ、こちらこそ。お元気で、Isaac。
コミュニティのメンバーの話を聞いて、学び、刺激を受けましょう。