Gabriel Nelleは南ドイツのバーデン=バーデン近郊に住んでいます。ガールフレンドと2匹の猫とアパートを共有しています。ジーゲンの大学で数学とドイツ語の教師になるために学び、2008年に卒業しました。
Jonathan: はい、皆さんこんばんは。私はJonathanです。今夜のホストを務められて嬉しく思います。今日の番組には、とても光栄なゲストをお招きしています。Gabriel Nelleさんを紹介したいと思います。GabrielはExercismのコアコントリビューターの一人です。特にGoトラックに深く関わってきましたが、詳しい自己紹介はご本人に任せましょう。 まずは、Gabriel、来てくれて本当に嬉しいです。参加してくれてありがとう。今日の番組のリスナーの皆さんと同じくらい、楽しんでいただけたらと思います。それではGabriel、話を始めてください。どこ出身で、どうして今の場所にたどり着いたのか、少し教えてください。
Gabriel: はい、こんにちは。Gabrielです。お招きいただきありがとうございます。私は南ドイツ出身で、そこで育ち、今も南ドイツにいます。同じ場所ではありませんが、やはり南ドイツです。私は80年代初頭の生まれで、1981年生まれです。話は1980年代の終わり頃、父が初めてのコンピューターを家に持ち帰ったところから始まると思います。少なくとも、テキストとしての物語はそこからです。
Jonathan: はい。
Gabriel: MS-DOSが入っていました。正確にどのバージョンだったかはわかりませんが、古いバージョンだったと思います。というのも、覚えている限りでは、父はその会社で新しいコンピューターが導入されて、事実上捨てられることになったものを家に持ち帰ったのです。それで、それがコンピューターに対する私の最初の印象でした。 面白くて、不思議でした。
Jonathan: あの、画面の線、黒い画面に色のついた線ですか? それはなかなか
Gabriel: ええ、黒地に白だけでした。基本的にはそうでした。そして、ほとんどはコマンドラインで、それを最初に知りました。その後、父と一緒に、1990年か1991年頃に、父が私たちにQBasicで最初のforループを教えてくれました。そのとき私は10歳くらいでした。それから語彙学習もありました。
父は語彙を学ぶためのプログラムを買ってくれたのです。それはMS-DOSベースで、マウスでクリックしていたと思いますが、確信はありません。もっと後のことかもしれません。いずれにせよ、私がコンピューターをいじり始めたのはその頃で、何度か壊してしまいました。父に何度か直してもらいました。
それくらい、これについて学ぶことに間違いなく興味がありました。自分から「これを学ばなければ」と座り込んで言うような形ではありませんでしたが。
それで何ができるのかを理解するのが本当に面白くて、わくわくしました。
Jonathan: それで、お父さんはコンピューターの仕事をしていたのですか? それとも、たまたまコンピューターを家に持ち帰っただけで、ビジネスの仕事をしていたのですか? それとも、持ち帰った特別な理由があったのですか? コンピューターの理由か、技術的な理由か。
Gabriel: ええ、父は本職は電気技師で、それを学びました。でも当時はBoschで働いていて、車用の新しいチップや新しいものの開発をする電子機器部門にいました。そこにはもちろんコンピューターがあり、父はかなり早い段階から、コンピューターやネットワークプリンターなど、そういったもの全般を担当していました。それが父がこの世界に入ったきっかけです。 父は、部門の他のほとんどの人のように博士号を持っていなかったので、そういったことを引き受けていました。それで、コンピューターについて多くのことを学びました。 ええ。
Jonathan: ええ、なるほど。すみません、途中で口を挟んでしまいました。それで、あなたはコンピューターをいじって、何度か壊して、という話をしていましたね。 コンピューターやハードウェアとの出会いについて。そこから何があったのですか? その後の進展はどうだったのですか?
Gabriel: 次の大きなステップは、自分専用のコンピューターを手に入れたことだったと思います。それは、たぶん5、6年後くらいでした。子供の頃から大人になるまで。コンピューターにもっと興味を持ち、学校でも少し触れました。宿題をコンピューターで書くようになりました。 その頃にはすでにWord、MS Wordなどを使っていました。そしてある日、父はいつも教会のために文献の作業をしていました。私たちはとても小さな教会で育ち、そこで使う文献があり、父はその文献のデジタル化を手伝っていました。 最初は副業のようなものでしたが、それがやがて私の最初のフルタイムの仕事になりました。その文献を担当していたアメリカの出版社のために働くことになったのです。
Jonathan: ふむ。
Gabriel: 父が私に尋ねました。「マクロがたくさんあるんだ。ユーロスクリプトで書いたもので、Wordのバージョンに基づいたものだ。Wordに切り替えたいので、マクロをWordで動くようにしてほしい」と。 私が「わかった」と答えたのが、Wordのプログラミングを始めたきっかけです。Visual Basic for Applicationsですね。最初はマクロを記録できました。コードを見て、何をしているかを確認して、改善できました。そしてマクロをどんどん改良して、ほぼ自動化できるようにしました。 以前はカーソルをここに置いてキーを押すと、次の数行で何かをする、という程度でした。最終的にはWord文書全体を上から下まで完全に自動処理できるようになりました。 それが、そのために書いた多くのマクロへの入口でした。 それが大きな反響を呼び、父にこの作業を無償で依頼した人たちは「おお、これはすごい。もっとやろう、もっと自動化しよう」と言いました。ええ。そうやって私は
Jonathan: お父さんの時間を大幅に節約したわけですね
Gabriel: ええ。
Jonathan: そういう意味では、 若い年齢で、
Gabriel: そう言えますね。それからWordでのマクロ作成、後にExcelでのマクロ作成。小さいお店のためのExcelベースのシステムを書きました。有機食品などの小さなお店で、レジの仕組みです。彼らは値段を紙に書いて、頭か紙の上で計算していました。 それが最初のやり方でした。私はバーコードスキャンと、秤で重さを量ってレシートを受け取り、支払い時にそれをスキャンするシステムを書きました。すべてExcelベースでした。 今なら間違いなく違うやり方をするでしょう。Excelがデータベースであり、同時に印刷機でもありました。Excelシートで書式を整えて、レシートプリンターで印刷していました。 もちろん、それが私のキャリアの始まりだったと思います。
Jonathan: それを全部やっていたのはいつ頃ですか? それから何が、そこから導いたのですか? 大学の前、高校の頃ですか? それがキャリアパスに大きく影響したのですか?
Gabriel: ええ、それはすべて大学の前でした。お店のシステムは20、21歳の頃で、その頃に社会奉仕をしていました。
Jonathan: え?
Gabriel: マクロ作成は16歳の頃でした。その間に、手紙の宛名ラベルを印刷するAccessベースのシステムも書きました。住所などを印刷するものです。それから大学進学、そして意外なことに、情報学は専攻しませんでした。
Jonathan: なるほど。
Gabriel: 実は数学とドイツ語の教師になるために勉強しました。年齢を計算すると、10歳から20歳、19歳まで、5年生から13年生までです。
Jonathan: それで
Gabriel: 13年生まで。
Jonathan: キャリアパスは 進み始めていて、その決断は何に基づいていたのですか?
Gabriel: 実は、プログラミングの道に進んでいたかもしれません。でも社会奉仕の間に、技術的なこと以外にも多くを学びました。高齢者施設を担当する小さなチームにいました。5、6部屋ほどありました。 いろいろな人がいて、私は主に一人の方を担当しました。その方は55、60歳くらいで、アルツハイマーでした。それが大きな印象を残しました。その年齢でそういうことに直面すると、彼女は60歳で、20歳の私には年老いて聞こえましたが、これは誰にでも起こりうるし、自分にも起こりうると明確にわかりました。 それが、人生の社会的な側面にもっと興味を持つきっかけになりました。
Jonathan: 興味深いですね。
Gabriel: 社会的なキャリアパスです。それが、当時教師になることを選んだ理由です。コードを書きたかったし、教えることや、特に学校で同級生を助けるのが得意でした。 数学は私の最も得意な分野で、いつも好きでした。ええ、いつも好きでした。他の人のスキル向上を助けるのが。彼らが突然理解したとき、その瞬間を見るのがいつも大好きでした。それで、 実際に教師になりました。
Jonathan: それはいいですね。それで、社会奉仕について言及しましたね。 ドイツでは、すべての学生や子供が大学に行く前にやらなければならない義務なのですか? ドイツ文化の中でどう位置づけられているのですか?
Gabriel: 当時は、兵役の代替でした。9か月の兵役か、11か月の社会奉仕か、どちらかでした。それが要件でした。
Jonathan: なるほど。
Gabriel: 男性だけで、女性にはありませんでした。
Jonathan: ドイツでは今もそうなのですか?
Gabriel: いいえ、もうそうではありません。
Jonathan: なるほど。スイスではそうだと知っています。妻がスイス出身なので。それで、その仕組みはまだ残っているのかと。では、あなたは数学を学び、教師になるために勉強し、プログラミングは人生でかなり大きな役割を果たしました。いつ頃から、教えることに楽しみを感じつつも、プログラミングの部分も活発に関わっていたのですか? 教えることとプログラミングはどうバランスしていたのですか?
Gabriel: どうやってプログラミングに戻ったか、ですね。
Jonathan: ええ
Gabriel: はい。大学時代に、アルバイトとして基本的に2つのことをしていました。1つは教えること。塾で教えていました。大学でも教えていて、数学の最初と2番目の学期が主でした。 同時に、テック企業で働いていました。そこは主にAccessベースでした。
Jonathan: ふむ。
Gabriel: カーシェアリングや、従業員に車を貸し出す会社向けのハードウェアとソフトウェアを扱う会社でした。そこで最初はドキュメント作成者として始めましたが、すぐにプログラミングもできるとわかりました。 それでプログラミングの分野に移りました。ええ。それから状況が大きく変わったのは、大学の最後の方、学校での実習が6週間、それから4週間などと決まっていた時期でした。そして、 経験豊富で、非常に熱心な先生たちと話す中で、時代が大きく変わったこと、生徒も大きく変わったことがはっきりとわかりました。ある先生は、いつも5年生と6年生を教えていて、5年前は問題を抱えた生徒が1人いたと言っていました。学校が完結していない、離婚や家庭の問題などです。それが今では50%以上になったと。 それは10年か15年前のことで、2006年か2007年、つまり15年前のことでした。 それでどれだけ変わったかがわかりました。そして多くの生徒がもう学びたがっていないことも明確でした。教師はいつも最後で、 両親も校長も生徒も、みんな教師の上に立っています。教師はいつも最後の綱のようなもので、すべての責任を負わされながら、基本的に権利がないのです。
Jonathan: 行動する権限が、ええ。
Gabriel: ええ。
Jonathan: それで、 その決断は? すみません、話を遮ってしまいました。続けてください。
Gabriel: そういうことが、少なくともいろいろ考えさせました。大学を卒業した後、プログラミングに戻りました。友人の一人が父に文献の仕事を紹介した人で、その友人がプロジェクトを手伝ってほしいと頼んできました。 最初は4~6週間のプロジェクトと考えられていたものが、2年半か3年半のプロジェクトになりました。
Jonathan: スコープクリープですね。スコープクリープは現実でした
Gabriel: ええ。最初は何かを手伝ってほしいと頼まれました。それから彼は常にアメリカの出版社の人と連絡を取っていて、出版社は「この文献の公開ホームページがほしい。人々に本全体をオンラインで読んでほしい」と言っていました。
Jonathan: おお
Gabriel: ある時、友人に「それなら自分がやれるかもしれない」と言いました。特に今やることがないし、と。そしたら「Gabrielがやるって」となって、そうやって始まりました。
Jonathan: すごい。
Gabriel: プロジェクトができて、3年半そのプロジェクトのために働きました。何千冊もの本をオンラインにして、コンテンツライブラリ全体を インデックス化し、異なる言語を相互に接続しました。 ええ、ウェブサイトは今もオンラインです。egw writings.orgです。興味があれば見てみてください。新しいデザインになっていて、昨年12月頃に見たとき、デザインが変わっていましたが、下のコードは
Jonathan: 同じまま
Gabriel: ほとんど私のものです。ほとんどJavaScriptベースだったのでわかります。
Jonathan: ええ。
Gabriel: コードはとてもよく似ていて、ファイル構成は違いますが、スタイルは同じままです。
Jonathan: リンクを送ってください。適切なタイミングでショーノートに載せます。それで、3年半、3年間このプロジェクトをやって、すべてをインデックス化したわけですね。その時点でJavaScriptが主な言語だったのですか? 技術的な構成はどうでしたか? 何に焦点を当てていましたか?
Gabriel: それは、Windowsベースのソフトウェア、つまり以前のVisual BasicとVisual Basic .NETから離れる大きなステップでした。そして今はjQuery、JavaScript、バックグラウンドでPHPだけでした。
Jonathan: なるほど。
Gabriel: 調査をするときは時給が低いという合意もありました。
Jonathan: ふむ。
Gabriel: 実際にプログラミングをするときの3分の1でした。 それで、実務で学ぶ自由が得られました。ええ。
Jonathan: いいですね。それで、どこで、Exercismに? 今は多くのことをしていますね。Goが主な活動の一つで、たくさんメンタリングをしていて、ExercismのGoに関わって、その分野を助けてきました。いつ頃から関わるようになり、なぜ興味を持ったのですか? どうぞ。
Gabriel: ええ、2016年、その大きなプロジェクトの後の最初の仕事でした。実はその終わり頃にGoへ切り替え始めました。その仕事では主にPHPとPythonをやっていました。そしてGoはすぐに私の一番好きな言語になりました。シンプルさがあるからです。どんどん機能が増えて複雑になり、開発者の負担が増える世界から、 シンプルさに戻ろうとしているのです。どのやり方をするかを選ばなければならず、他の人のやり方も理解しなければならない。そういう負担の中で、Goは静けさとシンプルさをもたらしてくれました。それでとてもすぐに一番になりました。その会社を辞める半年前にプロトタイプを作りました。会社がGoに切り替えたがっていたからです。最初はもちろん、言語でできないことにぶつかり、なぜそうする意味がないのか、なぜ別のやり方が良いのかを理解しました。 そういうことを学ぶことに本当に興味がありました。それがきっかけでGo Timeポッドキャストを聴き始めました。Change Logのものです。
Jonathan: なるほど。
Gabriel: そこでKatrina Owenさんが出演していて、2回ほど聴いたと思います。それがきっかけでExercismを調べ始めました。 2017年に登録したと思います。確かめる必要がありますが。
Jonathan: そうでしょうね。
Gabriel: ええ、最初のバージョンだったかもしれません。最初はフィードバックがまったくなくて、いくつかの演習をやりましたが、フィードバックをもらえませんでした。他の人にはフィードバックをあげられましたし、実際にあげました。でも自分はもらえませんでした。フィードバックを得る仕組みがなかったのです。 やりたければやる、やりたくなければやめる、という感じでした。 バージョン1だったと思います。
Jonathan: そうでしょうね。バージョン1からバージョン3までかなり変化がありましたから。
Gabriel: ええ、ええ。
Jonathan: バージョン1はフィードバックが少なく、バージョン2は大量のフィードバックが必要で、バージョン3はその中間くらいですね。 それで、バージョン3の構築に関わっていましたか? どのように関わっていましたか? よくわかっていないので、ぜひ知りたいです。
Gabriel: 一つ戻ってもいいですか。2回目のインタビューを聴いた後、Katrinaさんの話をExercismで聴いて戻ってきました。
Jonathan: なるほど。
Gabriel: そのときにはバージョン2があって、大量のフィードバックが必要でした。それに飛び込んで、フィードバックを出すのが本当に好きでした。 そして、
Jonathan: ふむ。
Gabriel: どうすればもっと速くできるか考え始めました。特に最初の演習では、同じ回答を何度も何度もすることになるのがすぐにわかりました。
Jonathan: ええ。
Gabriel: 一方で、時には二つの問題があり、時には別の問題がありました。 それで最適化を始めました。静的解析を使う小さなGoプログラムを書きました。静的解析には前から興味があって、やってみたかったのです。それで試してみることにしました。コードがいつもとても似ているからです。 演習の解答、特に最初のものはとても似ています。そうやって静的解析に取り組み、コードの中のいろいろなパターンを探して、回答ブロックや定型ブロックを自動で追加するようにしました。まずはローカルで始めて、それで週に100件くらい、102件のメンタリングができるようになりました。しかも本業のかたわらで。それから評判になり始めて、たぶんPitfieldさん、本名はJohn Arunさんだと思いますが、彼が最初に「おお、すごい、最高だ」と言ってくれて。そうやって、私のやっていたことと静的解析の取り組みが知られるようになりました。 そしてそれがバージョン3の大きな部分になったと思います。どうやってチューターの作業を減らせるか、こうしたツール、静的解析、コードを自動でチェックしてフィードバックを自動で返すツールを使えば、メンターがまったく関わらなくても、あるいは関わらなくてもいいようにできるのではないかと考え始めました。メンターが足りないのは明らかでしたし、多くのメンターが燃え尽きて去っていくのも見ていました。ただでさえ負担が大きすぎて、500件以上の解答をメンタリングしなければならなかったり、1か月以上待たされることもありました。そうなると、いつか生徒も離れていってしまいます。
Jonathan: うーん。面白いですね。というのも、Jeremyが先日、提出される解答の中で75%くらいは完全に独自のものだと言っていて、それも興味深いなと思ったんです。Hello Worldの演習なんかはとても簡単ですから、きっと標準的なパターンが定期的に実装されるはずだと思っていたのに、彼は「みんながいろいろな違うことを試している」と言っていました。コーディングが人気になるにつれて、どこで自動化が開発者の役割を無効にし始めるのか、不思議に思いますね。ただ、まだ必要なものが多すぎると思うので、どうなるかはわかりませんが、最近のExercismではメンタリングに大きな力が注がれているのがとても興味深いです。あなたが言ったように、繰り返し何度も伝えなければならないレッスンを、みんなが管理しやすい形にまとめているんです。同時に、本当に人間のやり取りが必要な領域に踏み込むのかどうか。そのあたりについて何か考えがあれば知りたいですが、今のこの分野は面白いと思います。
Gabriel: そうですね、開発者がすぐに置き換えられるとは思いません。まだかなり先の話だと思います。アプリケーション開発全般でも、メンタリングでも、静的解析や自動メンタリングはExercismで大きな助けになると思います。でも、本当のメンタリングにはメンターが必要だと思います。たとえば、私がメンタリングしている人がいて、2~3か月ごとに通話しています。その人のキャリアについてメンタリングしているようなものです。技術的にも非常に深い話をしますが、単に解答を見て改善点を伝えるのとはまったく違うメンタリングの仕方です。そういうメンターはこれからも必要ですし、間違いなく必要とされるでしょう。そこに注力できると思います。一方で、解答に対するメンターを完全に置き換えることはできないし、すべきでもないと思います。多くのことは自動化できますが、それでもメンターは方向を示してくれる人です。今、あなたが苦しんでいる問題が見えて、これを理解して、これを理解してと伝えられます。 単に「コードをこう改善しなさい」と言うだけではありません。
Jonathan: ええ、そうですね。
Gabriel: 正直に言うと、演習でのメンタリングをもっと戻したいと思っています。ですから、検討すべきかもしれません。
Jonathan: 対面のやり取りのことですか?
Gabriel: そうです。以前は10の演習があったルートがあって、それを通過して、メンタリングを受けて初めて先に進めるようになっていました。
Jonathan: ええ。
Gabriel: 今ある自動化があれば、それを再び有効にできるかもしれません。今すぐではなくても、将来的には。そうできたらいいなと思います。
Jonathan: ぜひコミュニティコールで取り上げましょう。それをまた焦点に戻すのはいいことだと思います。それではGabriel、よく聞く質問のひとつで、これは先ほど話したものではありませんが、いつもとても興味深く、さまざまな答えがあるので聞くのが好きな質問です。あなたにとってプログラミングが「わかった」瞬間はありましたか?突然すべてが理解できたという経験をした人もいます。私の場合、学校で化学を学んでいたときの話をよくします。イギリスの学校では、試験があって、その3年前からすべてがその試験に向けて進んでいきます。3年間の学習が最終試験に集約されるんです。しかもすべての科目で。もちろん化学もありました。私は3年間、化学がまったくわかりませんでした。理解できなかったんです。でも試験の1週間前に、急にわかったんです。たとえば周期表からすべてが導けると気づきました。周期表の数字を知っていれば、あれもこれも理解できると。それでとてもシンプルになったんです。プログラミングでもそういう瞬間がありましたか? それとも自然にわかるものですか? もし瞬間があったなら、それはいつでしたか?
Gabriel: はっきりとした瞬間があったかどうかはわかりません。マクロの記録を見て、早い段階でVisual Basic for Applicationsのコードを見たことがとても役立ったと思います。今でもそういうのがあるのかはわかりませんが。Wordでできると思います。でも、記録してコードを見て学ぶというのは、そう頻繁にあることではありません。最初は苦労していたので、それがずいぶん楽にしてくれたと思います。ひとつの瞬間を挙げるとすれば、正しいやり方をしているのか、間違っているのかがわかったのは、学生時代にその会社に入ったときでした。他の開発者と一緒に仕事をしたのは初めてでした。それまではいつも一人で、すべてを自分でやらなければなりませんでした。これでいいのか、変だな、複雑だな、動いているけど正しいのか、という大きな疑問がいつもありました。それがその会社に入って答えを得られたんです。学ぶべきことはたくさんありましたが、たくさん学びました。たとえばAccessのレコードセットは、以前は本当に理解していませんでした。使ってはいましたが、動いてはいましたが。ある同僚が説明してくれて、ある日理解できました。どう動いているのか、どう使うべきなのか、どう正しく使うのかがわかったんです。
Jonathan: なるほど。
Gabriel: そういう瞬間だったかもしれません。でも、そういう瞬間は仕事の中でよく訪れます。ひとつの瞬間だけではなく、最初の瞬間かもしれませんが、Goでも理解できる場所がたくさんあります。なぜそうなっているのか、どう使うべきなのか。たとえばコンテキストなどです。
Jonathan: ええ。
Gabriel: コンテキストはたぶんバージョン1.6か1.7あたりで追加されたと思います。その頃、正直に言うと最初は必要なかったので、あまり見ていませんでした。それから1対1のミートアップがあって、誰かがコンテキストについて発表して、どう使うのかを説明しました。それを見て、これは調べるべきだと思いました。でも実際に調べて、なぜあるのかを理解するまでに数か月かかりました。たとえばcloseチャネルですが、インターネット上でまだcloseチャネルを提案している人がいるのを知っていますか? やってはいけません。そのためにコンテキストがあるんです。コンテキストを使い、コンテキストをキャンセルし、それでgoroutineを閉じるんです。closeチャネルを使うのは、コンテキストが内部でやっていることを手動でやっているようなもので、避けるべき落とし穴がたくさんあり、問題がたくさんあります。普通は間違って使われます。
Jonathan: ライブストリームでそれについて話していましたよね。コンテキストを使うべきだと。
Gabriel: ええ。
Jonathan: その話を覚えています。
Gabriel: その部分を話したのを覚えています。
Jonathan: なるほど。ではメンタリングの経験から、何かを素早く理解する人たちの行動や特徴はありますか? 彼らがより効果的に学ぶためにしていること、あるいはメンターが自然にそういう人たちと関わっているのでしょうか? 「この人たちはすごい、加速させる何かをしている」と思う人はいますか?
Gabriel: 他の人についてはよくわかりませんが、自分については言えます。私は両親から多くを学びました。彼らは多くのことを独学で学んでいて、私も同じように自分で学ぶことを身につけました。プログラミングは完全に独学です。最初は父がいました。学校でもいくつかのことを学びましたが、後半のクラスではほとんどの生徒が先生より優れていたので、本当に学ぶというよりは、お互いに学び合うような感じでした。一般的に、私はすべて自分で学びました。 それこそプログラミングに必要なことだと思います。常に未知のことに飛び込んで、調べて学ぶ必要があります。 自分で掘り下げて学ぶ能力が、プログラミングにおいては鍵だと思います。もちろん、誰かが教えてくれればずっと速く学べますから、メンターを探すべきではないとか、Exercismに行くべきではないとか、そういうことではありません。それは成長をずっと速くしてくれます。それでも、やはり自分で学ぶ力が重要だと思います。
Jonathan: あなたの学びは、実践的に問題を解決しようとすることから来ているようですね。マクロを作って効率化したり、そういうことが人生の中で繰り返されてきたテーマのように思えます。それはExercismがやろうとしていることとも重なりますね。
Gabriel: ええ、まさにそうです。
Jonathan: 素晴らしい。それではGabriel、あまり時間がありませんが、最後に2つ質問があります。1つ目は、あなたの意見を聞かせてください。よくインタビューの終わりに聞く大きな質問があります。それは「テック業界で、あなたが命を懸けて主張する丘(信念)は何ですか?」というものです。一つだけ、強く持っている意見を教えてください。ただ、理由も必要です。単に「これが私の意見だ」と言うだけでは不十分で、自分を弁護できる必要があります。深刻でも些細でも構いません。
Gabriel: Goコミュニティで誰かが言ったことわざがあります。「退屈なコードは賢いコードより優れている」です。
Jonathan: いいですね。どういう意味ですか?
Gabriel: つまり、Goの哲学、シンプルさと読みやすさをまとめた言葉です。Goのコードを見て「すごい、賢い」と思ったら、それは実は悪いコードです。たとえそれを書いた人が非常に優秀で、とても賢いやり方をしていてもです。時には、シンプルさとGoの慣習に従えば、コードベース全体に「見てほしい」と指さしたくなるようなコードはなくなるかもしれません。すべてのコードが退屈でとてもシンプルで、見た人は「どこが特別なの?」と思うかもしれません。でも、シンプルさにたどり着いたのは、あなたが優れたプログラマーだからであり、反復のプロセスです。複雑なコードを書くのはとても簡単です。シンプルなコードを書くのは難しい。まず頭の中で問題をシンプルにして、正しくコードを書き、それを反復してシンプルにする必要があります。それはずっと長いプロセスで、複雑なコードを書くよりもずっと優れた開発者が必要です。複雑なコードは、見るのも読みにくく、保守も変更も難しいですから。
Jonathan: トレードオフの話ですね。私はテック業界では比較的新しく3年ほどですが、開発側ではなく製品側、ビジネス側から来ました。非常に興味深かったのは、すべてがトレードオフだということです。シンプルなコードと複雑なコードのトレードオフで、複雑なコードは後で厄介になるかもしれません。シンプルなコードは時間がかかり、前もって多くのエネルギーと努力が必要です。それが常に行われるトレードオフですね。いかがですか?
Gabriel: ええ、まさにそうです。シンプルなコードを書くのは本当に難しい。明確な思考が必要で、単にコードを書くだけでは足りません。大学時代の友人の話を思い出しました。課題のエッセイをいつも2ページしか書かず、すべてを2ページに凝縮して最高点を取っていました。それはシンプルさの概念と重なります。
Jonathan: それは立派な丘ですし、うまく説明してくれました。ではGabriel、今週の最後の質問です。Exercismコミュニティにアドバイスをしてください。健康、食事、何でも構いません。コミュニティに伝えたいことを。今週、彼らが試すべきこと、やってみるべきことは何ですか?
Gabriel: うーん、難しいですね。では2ついいですか?
Jonathan: どうぞ、2つでいいですよ。
Gabriel: 1つ目は、私はベジタリアンで、ベジタリアンとして育ちました。肉は一度も食べたことがなく、子供時代と若い頃のほとんどはヴィーガンとして育ちました。ですから、乳製品なしの1週間を試してみてください。それが1つです。2つ目は、1週間でできるかはわかりませんが、もし良い開発者なら、複数のサービス間で共有メモリを構築してみるのはとても興味深く、価値があります。Raftプロトコルを使って共有メモリを実装してみてください。ライブラリを使ってもよく、Raft自体を実装する必要はありませんが。
Jonathan: Raftですね。後で載せられるようにリンクを送ってください。これがGabrielのチャレンジですね。
Gabriel: ええ、試すべきこととして。
Jonathan: チャレンジを出してもらう感じですね。楽しいですね。では、肉製品なしの1週間と、共有メモリサーバーを構築する。サービスと共有メモリですね?
Gabriel: そうですね。インメモリのキーバリューストアと考えてもいいです。
Jonathan: なるほど。
Gabriel: 複数のサービスに対して1つのデータベース、または1つのサービスですね。
Jonathan: いいですね。
Gabriel: データベースがどう動いているかを学べますから。特に分散型の共有データベースは。CassandraやScyllaですね。Cassandraに似ていますが、C++で書かれていて、最近Raftプロトコルに移行しています。キーバリューストアで、共有されているものです。データ管理のためのものです。Degraf BejaのBe degraffもそうです。それもRaftを内部的に使ってデータを分散していると思います。確かめる必要がありますが、でも多くのデータベースが使っています。分散システムは現代の大きな課題の1つだと思います。解決途上ですが、まだ多くの課題があります。その視点で考えられるのは良いことです。可能性が広がりますから。
Jonathan: なるほど。
Gabriel: 前の会社では、複数のサービス間で共有メモリを使う方向に進んでいました。
Jonathan: マスタークラスとして設定する必要があるかもしれませんね。数週間あげて、試してもらうのはどうでしょう。Gabriel、ありがとうございました。今夜お話しできて本当に楽しかったです。録音が終わった後も少し残っていただければと思います。Exercismへのすべての貢献に心から感謝しています。あなただけでなく、遠くまでメンタリングして、より良いコードを書く手助けをしていることに、きっとどこでも感謝されているでしょう。時間をありがとうございました。Gabrielに連絡してみてください。Exercismにいるなら、メッセージを送ってメンタリングをお願いしてみてください。きっと良い時間を過ごせるでしょう。
Gabriel: ありがとうございました。
Jonathan: 録音を終えます。では、参加してくれてありがとう。またどこかのプラットフォームでお会いしましょう。
Gabriel: ありがとう。
コミュニティのメンバーの話を聞いて、学び、刺激を受けましょう。