私たちに与えられた最後の自由、それは持っている時間を好きなように使うことなんじゃないだろうか。
好きに、とはいっても、家の中限定で好きなこと、というと手っ取り早いのが動画視聴で、私も結構動画を見る。最近滅入るような話も多い中、私はとにかく芸人さんのネタ動画みたいな、おもしろ動画をたくさん見ている。笑いたいって欲求が人一倍強いんだと思う。
今ではテレビを見るよりYouTubeを見る時間の方が長いよって人も増えてると思うんだけど、世の中には本当に様々な動画があふれている。でも、SNSを使えば使うほど、私たちの趣味やライフスタイル、どのデモグラフィック(購買層)に属しているか等はネットの向こう側の組織によって解析され続け、結果、私は私に’見合った’コンテンツを提供されがちだ。そのため、自分が興味を持つものや、持ちそうなものしか目に入らない状態になってしまいやすい。
わたしがお笑いを見れば見るほど、お勧め動画として挙がってくるものは他の芸人さんの動画などで埋め尽くされてしまう。ワタシハ ソレダケノ ニンゲンジャ、ナイノニ…
その偏りを少しでも食い止めるものがあるとしたら、きっとそれは、自分と全然違うものを面白いと思う人が面白がってるものを観ることだと思う。
まあ、今回はそんな例として昨晩観た、この動画のことについて書きたくなった。
それは、元Googleのシステムエンジニアで、現在プログラマーやシステムエンジニアの就職のためのプログラミング面接準備を支援するサイトを運営している、Clément Mihailescuによる、プログラミング面接の予行演習動画だ。私には、1ミリの縁もないような動画だwww
わたしは、モントリオールに来て最初に職業訓練でコンピューターサポートのクラスを受けて、そのコースの中に基礎のプログラミング(Java)も含まれていた。それから、職業訓練の最後の方の企業研修で2か月間、Java Scriptを応用したGoogle App Scriptを使うことになったという過去を持つ。レベル感でいうと、「プログラムの雰囲気だけわかっているけど、その実さっぱり分かっていない」というFalse Beginner(偽初心者- 前にやったことがあるのに初心者の域を出ていないレベル)だ。
ところが、最近ITのコースに入った娘につられて、何となくこの動画を見て、(世の中にはこんな世界があるんだ!)と目から鱗体験をすることになり、実際のプログラミングの部分は全く理解できなかったにもかかわらず、面白くて結局最後まで動画を見てしまった。
それは、約一時間の動画で、その中の45分がGoogleのプログラマーが実際に受けるようなインタビューの内容になっている。この45分の中で、受験者は作ってほしいもののブリーフィングを受け、そのためのアルゴリズムを考案して書き出し、その後にアルゴリズムに沿ってプログラミングを書く。
これ全部45分でするって、すごいとしか言いようがない。
課題は、「2人の人間がそれぞれ一日の内にいくつか予定の入っている時間帯がいくつかある。その情報を元に、お互いの空いている時間の内で30分のミーティングができる時間のスロットをリストアップすること」というものだ。ちなみに、9時前と18時以降もミーティングはできないという設定だ。
まずは課題を出された時に、受験者はしっかり質問をして、自分が出された課題を正しく理解しているか確認しなければならない。ここはとても大切な部分らしい。確かに、課題の詳細を理解していなかったら、求められていないものを作ってしまうことになるから、これは侮れないプロセスだ。
次に、アルゴリズム(問題を解決するための手順や計算方法を指す)を書く。これは、課題をどういうプロセスで解決するかについて、プログラムを書く前にしっかりまとめる部分だ。ここで、もし方向性が違っていた場合は、面接担当者の方から方向修正を提案される。両者が方向性について納得したら、いよいよプログラミングに入っていく。
アルゴリズムの段階から、この受験者はとっても饒舌で、常に考えを言語化しながら進んでいく。これが私が一番感動したことで、今この人が何を考えているのかをリアルタイムで聞くことができる。これは、ちょっとびっくりしたんだけど、自分がやっていることに相当の確信がないと、こんな風に話しながら進めていくことは難しいんじゃないか、と思った。私はこのスピードでこれだけ確信をもって自分の仮説を話せる自信がない。
(分野は違うけど最近、日本語のクラスで文法を実際の作文の際に上手く適用できていない生徒さんのクラスで、私がやって見せたのがほぼこれと同じ手法で、生徒さんの頭の中でこういう取捨選択がなされて文章が生成される、ということを口で言いながら見せていく授業をしたことがある。直接法が主体となっている日本語教授法からいうと「邪道」とも言われてしまう超間接法だったんだけど、文法の細部に気づきにくいタイプの生徒さんには有効なメソッドじゃないかと、自分では思っている。)
ちなみに、例題として出された「2人のスケジュールを照らし合わせて30分空いているスロットをリストアップ」という課題にも驚きがあった。現実に即しているし、頭の中で状況が想定しやすい出題だなと思った。何となく、私たちの様な素人には想像もできないような設定の課題が出るものなんじゃないかという思い込みがあったために、意外と手が届きそうな出題なんだなと思った。ただ、これはとても難易度の高いものらしいが、素人すぎてどこが難題要素なのかはつかみ切れなかったけれど。
素人目には、普通に2人のカレンダーを並べて、忙しくない箇所が同じ色で埋めてあれば、空いている時間帯は色のついた箇所として、目視できるほど容易に割り出せそう、と思われるかもしれない。しかし、プログラミングの面白いところは、この生々しい設定をあらゆる可能性を想定して言語化して、どのような条件下であっても自動的に計算ができるように計算式を作り上げることなのだ。そして、多分一旦プログラムができ上ってしまえば、2人だけじゃなくてこれが10人になったとしてもちょっとした書き換えで応用は可能になるし、30分じゃなくて40分欲しかったり、2日連続で1時間ずつほしかったりなどという細かい条件設定を変えることも可能になっていくんだと思う。つまり、プログラミングで鍛えられるのは、物事を俯瞰で見つつ、詳細を全部検討できるという思考プロセスだ。
今の私だと、アルゴリズムのところまでの話の理解はできたが、それを実際にプログラムしていくプロセスはまさに異次元の世界みたいな話だった。なんせプログラミングの授業で習ったことはすっかり頭から抜け落ちているから…それなのに、受験者が思考を言葉にしながら進めていくのが面白すぎて、結局最後まで見てしまった。
面接担当者の方も、テストするというよりも一緒に何かを仕上げていくナビゲーターの様なスタンスで面接が進んでいった。ここも面白いところなのかも…つまり、特に今回は研修生のためのテストということも考慮してなのか、またシニアエンジニアの面接の場合でも同じなのかは不明だが、話し合って方向を決めていくことに柔軟に対応できるか、ということも見られているんだろうなと思う。
一度は挫けてしまったプログラミングだけど、やっぱり思考法としてかっこいいし、興味深いものだなとあらためて思ったし、私はプロレスでも見るような気分でこのシリーズを見るんじゃないかと思っているw (いや、実際にプロレスのファンってことではないんだけど…あくまでもイメージで) まあ、娘との話題の一つとしても、少しでもわかっていたい、ということもあるからだけどね。
というわけで、プログラミングには何の興味もない方でも、前半のアルゴリズムの部分だけでも観たら、エンターテイメントとして楽しめるかもしれない。
SNSが取っている個人のデータを狂わせる目的でも、こんな異分野の動画をちょいちょい見てみるのは愉快に思う。
写真は、地産地消を目指すLufa Farmでオーダーしたパパイヤと、梨。マレーシアでは買う必要もないくらい(買っても安いけど)その辺に生えているパパイヤだが、ここモントリオールでは、南国のエキゾティックなフルーツで、まあまあのお値段がする。でも、これがとても栄養価の高いフルーツということだし、コクがあって美味しい。