Blog -

プログラミングスキルの可視化とtrack



ITのスキルはプログラミングに限定されるわけではありませんが,プログラミングは「新しい価値を生み出す技術」として現在最も重要なものの一つでしょう.いまや,プログラミング,言い替えればソフトウェアと関係のない産業はほとんどなくなりました.イーロン・マスクのテスラー社のクルマはもうクルマ自体がソフトウェアだと断言する人もいます.

ふと思い付いた疑問をプログラムを書いて確かめるといった,紙とエンピツ代わりのプログラミング,生産性を上げるためのプログラミング,人々が喜ぶアプリのためのプログラミングなどなど,プログラミングにはいろいろな顔があります.私の持論ですが,それはプログラミングが「言語を使って書く」という意味で,我々が古から使ってきた「自然言語で書く」とほぼ同様の力を持つからです.自然言語では,詩歌もあれば,日記もあれば,手紙もあれば,法律もあれば,論文もある.実に多様です.しかし,いくら多様でもきちんとした文章を書くという技術は共通です.プログラミングも然りです.

自由自在に文章が書けるのと同じくらい,自由自在にプログラムが書ければ,立派なエンジニアとして世界が開けます.そういう人たちがこれからもっと活躍してほしい,いや,活躍すべきだと考えています.日本のように資源の少ない国ではなおさらです.

「プログラミング能力を測る」ということ

trackは,主に学生たちのプログラムを書く力を測定するためのシステムです.ソフトウェアの測定法であるソフトウェアメトリクスはとても難しい問題を含んでいますが,人がプログラムをどれくらい自由自在に書けるかを判定するのは,ある程度の正確さでできると思います.以下,私がtrackの問題作成のお手伝いをするようになった背景説明を書きます.

NTTの研究所から電気通信大学に移ってから,私はプログラミングの講義をよく行いました.残念ながら,当時(2000年前後)はペーパーテストしかできなかったので,プログラムを書く問題はそんなに出せませんでした.せいぜい10数行のプログラムを書くか,その程度の規模のプログラムを穴埋めするといったテストでした.なので,いまでいうComputational Thinking(カタカナ表記しかまだないようですが,文科省用語の「プログラミング的思考」がやや近い)の能力を測る問題を出していました.

2005年に東京大学に移ってから,大学院の入試にプログラミング実技という必須科目(後に数学と選択)を課すことになり,私はその問題作成に参画しました.議論の結果,試験方法が少々ユニークなものになりました(現在は少し違う形になっているかもしれないので,あくまでも昔話と思ってください).

2005年当時のプログラミング実技試験

受験者は自分の使い慣れたノートPCを持ち込めます(ない場合は,規定のノートPCが貸し出されます).ノートPCには,プログラムサンプルを始め,どんなものを入れてきても構いません.また,使用言語にはまったく制限がありません.極端な場合,誰も知らない自作のプログラミング言語でもいいのです.プログラミング言語のマニュアルは1冊にかぎり持ち込み可能にしました.ただ,インターネットへの接続は禁止されます.

試験時間は2時間半と長丁場です.しかも,午前の部が終わったあとはPCを試験室に置いたままにし,昼食後一人一人10分弱の面談を行うのです.待ち時間の長かった人は大変だったと思います.

解答は試験用紙に手書きするものと,USBに保存するものの両方が混ざっていました.どうしてこうなったかというと,プログラミング実技の入学試験が何を見るかという狙いがあったからです.その狙いを以下に箇条書にしました.


(1) 問題を読解できる能力
(2) 問題に潜む数理を理解できる能力
(3) プログラムを書くのに必要なデータモデルを構築できる能力
(4) それを具体的なプログラミング言語で書き下す能力
(5) 必要なアルゴリズムを設計して, プログラムに落し込むことのできる能力
(6) プログラム環境を使いこなす能力
(7) 適切なドキュメント (コメント) を自然言語で書ける能力
(8) 自分の書いたプログラムについて口頭で説明できる能力

なんと8項目もあるのです.項目(1)の問題を読解できる能力というのは,問題文が3ページとか4ページになることがあるからです.項目(4)のデータモデルをプログラミング言語で書き下ろす能力と,項目(5)のアルゴリズムをプログラムに落し込む能力を分けていることに注意してください.数理能力に直接関係するのは項目(2)と(5)だけです.答案用紙に書くのは項目(1),(2),(3)に関係したところです.項目(6)は複数の試験官が試験会場をいつも回りながら画面を覗いてチェックします.

面接では項目(7),(8)が主体になりますが,作ったプログラムをスクリーンに表示しながら,全項目に関して質疑応答がなされます.見たことのない言語でも,このときの説明で大体分かります.実はこの面接が受験者の能力の識別に一番役立ったと思います.

なお,問題自体は相当難しくて,多くの受験者は途中で討ち死しましたが,それをもってバツを出したわけではありません.高い山に登ろうと努力している受験生をこれだけ長い時間見ていると自ずと,そのプロセスを通じて,プログラミングの才能レベルが見えてくるのです.

この入学試験,受験生も大変だったでしょうが,採点に係わる教員たちも大変でした.

「track」というチャレンジ

こんなに労力をかけなくても,学生たちのプログラミング能力をうまく測れないかというのがtrack自身のチャレンジでもあります.世界を見ると,Giveryのようにリクルーティングを目的として似たようなチャレンジをしているところがいくつかあるようですが,trackは測定の精度を上げる努力が並々ならないところが素晴らしいと思います.

昔取った杵柄ではありませんが,私もそのチャレンジに加わることにしました.問題のアイデアを,Webでの系統的な出題や採点に結び付けるためにはたくさんの努力が必要ですが,そのお手伝いをしているわけです.上で述べたような評価項目すべてを,Webで自動化するのは困難かもしれませんが,それに限りなく近づけたいものです.

trackが,プログラミングスキルを武器に就職をしようという学生たちにとって有意義であると同時に,良い学生を採用したいと考えている企業さまにとっても,ほかでは得られない高い精度の評価が可能な,世界に誇れる問題のコレクションになるよう,お手伝いしていく所存です.

問題が難しくなりすぎないように,かつ基礎力の腕試しがしっかりできるように気をつけているつもりですが,ときどき,つい昔の癖でそれこそ「チャレンジング」な問題も混じることがあります.trackの問題集の幅の広さ,奥深さだと思ってご寛容ください.難しい問題にチャレンジして,ある程度進み切るだけでも(昔の大学院入試ではありませんが)そのガッツを評価できるようにしたいものです.

Writer >

track 運営事務局
track 運営事務局
track(トラック)とは、エンジニアのスキル可視化を目的としたプログラミングスキルチェックツールです。プログラミングテストの作成から採点、評価までをワンストップで実施できます。年間数千人を選考する大規模企業の新卒採用から、ベンチャーの早期インターン採用、中途即戦力採用においてミスマッチのない人材採用と、人事やマネージャー、選考に携わる現場エンジニア/CTOの工数削減に寄与します。また、自社のエンジニアの社内評価まであらゆるスキルチェックニーズにお応えします。