「Java8でgrepを作ろう」出題の意図とは?
「Java8でgrepを作ろう」──CodeIQ「ウチに来ない?」のコーナーに出題されている問題だ。Java8は、今年3月にリリースされたばかりのJavaのニューバージョン。「待ちに待ってたよ」という声も、「え、知らなかった。何が変わったの?」という声も、業界内にはさまざまな感想が飛び交う。JavaはSIの現場でなくてはならない言語ではあるが、今回のバージョンアップには多少の今さら感もぬぐえない。リリースが遅れに遅れたことも要因の一つ。
<ウルシステムズ株式会社 前多 賢太郎さんからのウチに来ない?の問題>
「ただ、Java8は、関数をより簡便に表記するための記法であるラムダ(lambda)式や、このラムダ式を利用したコレクション操作用のStreamAPIなどが導入されるなど、大きく変わりました。
リリースされたばかりだからこそ、その新機能にどれだけ敏感に対応できる人がいるだろうかと思って、あえて出題しました」と言うのは、ウルシステムズでコンサルタント業務を行う、出題者の前多賢太郎さんだ。
「Java8のStream APIを使ってシンプルなgrep機能を実装せよ」というのがお題。Javaによるgrep実装自体は珍しい出題ではないが、Stream APIを使ってというのがポイントだ。
しかも、条件分岐(if文/3項演算子/switch文)、繰り返し(for文/while文)は使用禁止とするという条件がついている。
「ラムダ式は関数型プログラミング言語由来の機能で、RubyやPythonなどでも採用されていますが、これまでJavaプログラミングだけしかやってこなかった人にはとっつきにくい。問題自体、ちょっとひねりが入っていますし、普通にやると失敗します。発想を変えて取り組んでいただいかないと、ラムダ式自体も理解できないし、この問題も解くのも難しいと思います」と、前多さんは言う。
前多さんによれば、現時点での回答者の内、「わかっている人」は6割。正解またはそれに近い回答が多いのはよしとすべきだが、Java8の機能の習熟度としては今ひとつといったところだ。前多さんのコードレビューは、その後の採用プロセスにも直結する。
コードでスカウトされたエンジニアが今度は誰かのコードを評価
実はこの前多さん、CodeIQでの出題に答えたことがきっかけで、昨年10月のウルシステムズに入社している。
「回答した人がそれをきっかけに入社して、今度は出題者に回る。なんかドラマティックですね(笑)」
そうそう、その連鎖のドラマを取材したいんです。前職は金融系の中堅SIer。言語はもっぱらJava。とはいえ、実際のプロジェクトは基幹系というよりは、営業店の店頭システムなど情報系が多かった。9年半務め、直近はプロジェクトリーダーとして、チームの技術的課題を解決するためのフレームワークづくりやメンバーの管理などを担当していた。
「金融系とはいえ、基幹系システムにあまりタッチしてこなかったので、現場のスキルとしては不十分。なのに、9年もいるともはや管理職しかキャリアパスがない。次のキャリアをどう展開していこうかと迷っていたときに、CodeIQに出会いました」
以前から、自分の業務の中だけに閉じこもらず、スキルを広めることには貪欲で、社外の勉強会に参加したり、GitHubにコードを公開したりしていた。
ウルシステムズが出題したClojure言語の問題も、Scalaなどの関数型言語を独学で勉強していたため、すんなり解けた。当時の出題者からは「よく勉強している人。変数の命名などにもセンスを感じる」などと高い評価を得た。
さっそくスカウトの声がかかり、面接でもじっくり技術話ができた。
「社員はもちろん、社長までが技術に明るい。例えば、すでに2年前から小売業向けにクラウド上で基幹システムを構築するなど、先進的なITの戦略提案ができる企業だと思いました」
金融系SEとしての技術の幅が、これから先、ぐんと広がるという期待。それが入社の決め手になった。
「技術者であるからには、誰かに自分の技術力、つまりコードを見てほしいと思うのは当然。それが転職に直結するのであればなおさらいい。このシステムは実に合理的にできている」というのが、CodeIQのサービスへの評価だ。
絶えず学習する組織の中で広がるエンジニアのキャリア
入社後1カ月の研修を経て配属されたのは、とあるSIer企業向けの技術コーチの仕事である。そこでは、主に若手エンジニアに対して、コードの書き方からプロジェクトの進め方、成果物のレビューや表現の仕方などを指導する。開発現場に外部のコンサルタントを入れることで、これまでの社内教育だけでは得られない若手のスキル向上をもたらして欲しい、というのがクライアント企業の要望なのだ。
「恥ずかしいのですが、お客様先では“前多塾”なんて呼ばれています。一人ひとりのエンジニアが自立するためのお手伝い。手取り足取り教えすぎず、自分で考えられるようになることが最終的な目標です」
“自分で考える”というのは、CodeIQへの出題にも共通する、エンジニアの最低限のスキルなのだ。
ウルシステムズはもともと社内勉強会が熱心な企業でもある。エキスパートが自主的に最新技術やプロジェクトマネジメントの勉強会を開いたり、若手向けに先輩社員がマンツーマンで指導する“プロフェッショナル道場”というのもある。
社内の技術者がWeb記事や書籍を執筆することも少なくない。勉強会のテーマは例えば、JavaScriptでLISPインタープリターを作るなど少々マニアックなものから、AWS活用法、ストリームコンピューティングの基本まで多岐に及ぶ。前多さんも業務の合間をぬって、Java関連の講座の講師を務めることもある。
エンジニアの技術への飽くなき探究心が、自然に醸成される“学習する組織”。そんなウルシステムズでの、前多さんの新しいキャリアがスタートしてから6カ月。社内での教育、社外でのコンサルンタント、そしていずれは最先端の開発現場で大規模プロジェクトを指揮したい。
もちろん、「CodeIQとは縁があるし、私自身もっとすごいエンジニアのコードを見たいですからね。先端的でちょっとひねった問題、これからも出題ますよ」。
ウチに来ない?「Java8でgrepを作ろう」に挑戦してみよう!
ウルシステムズ前多賢太郎さんからの「ウチに来ない?」問題です。ウルシステムズのITアーキテクトの仕事興味を持った方は、ぜひ挑戦してみてくださいね。
- 問題:Java8のStream APIを使ってシンプルなgrep機能を実装してください。
- 締切:5月26日(月)AM10:00まで
- 挑戦はこちらから