カブクのエンジニアインターンシッププログラムについての詩
2016/09/14
  • このエントリーをはてなブックマークに追加
※超短焦点Full HDプロジェクターまじいいよね!の図


どうも、おはこんばんちわ、カブクの足立です。

今回はカブクのエンジニアインターンシップのメンターによるポエムです。

弊社は少数ですが、エンジニア職におけるインターンシップの方に働いていただいています。
いま(2016年5月から)活躍してくれているのが高橋知成さん。
前の記事で彼の3ヶ月の活動を報告してくれています。
ご興味ある方はご一読下さい。
カブクでのエンジニアインターンの実際が少し分かるかもしれません。


これは、メンターからのアンサーポエムです。

カブクでのエンジニア・インターンシップは、給料をお支払いし会社の仕事を手伝って頂く(就業体験を積んでもらう)のはもちろん、それに加えて学習プログラムを準備し学んでもらうことも仕事としています。

1. なぜインターンに学ぶ仕事をしてもらうのか
2. カブクのインターンシッププログラムとその意図
3. カブク、エンジニアインターンシップに期待すること

を説明し、高橋知成さん、ひいては、カブクのエンジニアインターンシップとして将来一緒に働いてくれる方へのメッセージとしたいと思います。


なぜインターンに学ぶ仕事をしてもらうのか

エエかっこしたいからです。
いい会社だなって思ってほしいからです。

うっかり本音が吐露したところで建前です。

Web技術の進歩スピードは速く、そういったフィールドで活躍するエンジニアは常に(新旧問わず)技術を習得し、活用して(もしくは捨てて)います。カブクのエンジニアは全員それをあたりまえのようにしています。たぶん、捨てることのほうが多いと思います。
それがカブクエンジニアの技術力の源泉です。

技術習得の効率は経験によって高めることができます。
開発者としてスタート地点にいるインターンシップは、技術習得の効率が良いわけではないので、メンターがその手助けを行い、習得した技術を活用し会社の仕事を高い品質とスピードで手伝ってもらうのが意図です。

Give & Givenです。

仕事にかこつけて勉強したいんです、僕が。


カブクのインターンシッププログラムとその意図


特にエンジニアインターンシッププログラムは2つのパートがあります。
基礎力と実践力です。

基礎力は、エンジニアとして根本的に備えていて欲しい事を課題として設定しています。
実践力は今まさに役立つ事を中心に課題を設定しています。
それぞれに50%ずつの時間を使ってもらっています。

純粋な勉強が50%で、仕事が50%です。
仕事が早く終われば勉強の時間を増やしてもOKなルールです。
仕事は減りませんので、反対になったらキツイです。
時間配分は本人にまかせています。

このプログラムを考えているとき、両方のバランスをとても大切にしました。
実践力はすぐに動いて、使えて、楽しくて楽しくて仕方ないので、こちらに集中してしまいがち。
なぜそうなっているのか、なぜ別の方法ではダメなのか、なぜ、なぜ、、、
ということを考えられるようになるには、基礎の積み重ねが大事だと私は考えています。
掘り下げて考えていく力は、深層(基礎)の知識や経験によって強化されます。
※「なぜ」なんて考える必要ないという仕事や人もいますが、カブクには「なぜ」が必要なのです。ロジックがあればデバッグ(改善)できますから。

では、まずは基礎力向上のプログラムをご紹介します。


基礎力向上プログラム


理科系の作文技術

文章で情報を伝える技術の基礎を身につけるための本です。
いきなり、プログラミングとは関係ない図書ですが、一番はじめにこれをやってもらいます。
最低3回読んでもらいます。

情報は発信者の意図とは無関係に受け手によって解釈される定めです。
特に技術文書では、価値ある情報を間違いなく伝わる文章で綴られる事で価値のある文書になります。

Daily Reportでは、内容と共に本書で説明されている「間違いなく伝わる文章」になっているかもチェックします。

僕、国語苦手で著者の気持ちとか汲み取れないので、数式チックに分かりやすく伝えてねってことです。


ノンデザイナーズ・デザインブック

読んでもらうための文書レイアウトの技術を身につけてるための本です。
文書を作成しても、読みづらければその価値が下がります。
正しく読み易い文書はスケールします。

情報の発信者よりも受信者の方が一般的には多いので、発信者側が少し気を使うことで、その効果はN倍になります。
何に気を使えば良のでしょうか。
文章は「理科系の作文技術」で、その見た目(フォントやレイアウト)は本書に書いています。

つまり、いちいち構造解析してらんないので、構造化しといてねってことです。


上達の法則

なにかを習得する「やり方の王道」を学んでもらうための本です。
「このやり方でちゃんと力つくのかなぁ」と不安になるだけで時間がもったいない。

まずは脇目もふらず王道に沿って努力時間を投下したらいいんじゃないかな?
それが周り道かもしれないけど、どこかには到達するよw
四の五の言わずに、王道を習得してから、自分なりのやり方を模索すれば良いと思います。

守あっての破です。


アルゴリズムとデータ構造

プログラムを"組む"とはどういうことかを学んでもらうための本です。
情報系の学生であれば授業とかでやっていると思うので、非情報系のエンジニアインターンシップの方だけが読むことになるかも。

弊社で開発するソフトェアは性能を非常に重視しています。
一番効くのはアルゴリズムレベルの性能です(ディスク、メモリ、CPU、GPUレベルの最適化をしていく事もあります)。
その入口となる本書を読んで、「計算量」に注意を持てるようになってもらいます。

ぶっちゃけ私の趣味です。


続いて、実践力を高めるためのプログラムとその意図を紹介します。


実践力向上プログラム


TypeScriptチュートリアル

この言語を使った仕事だったので、まずは使い方を勉強してもらいました。
型言語はあまりやったことないということだったので、学んだことがそのまま仕事に活かせる、ちょうど良い課題でした。


Java言語で学ぶデザインパターン入門

高橋知成さんに担当してもらう業務はTypeScriptを使ったWebフロントエンド開発です。
型言語やオブジェクト指向プログラミングに長けているわけではないと本人から聞いたので、この本を渡しました。
Java言語を学ぶ事は目的ではありません。型言語やオブジェクトの活用例を学んでもらう事が目的です。

classベースオブジェクト指向言語のプログラミングに慣れてもらわないことにはレビューつらい。


新しいLinuxの教科書

開発にはMacを使ってもらっていますが、ターミナルで操作する方法はほぼ同じなので、この本を読んでもらい、日々の業務効率をあげてもらいました。
Shell(PATHやスクリプトなど)とかファイルシステムやらを知っていると、開発環境を構築する際の"呪文"の意味がわかるようになり、動かなくなった時に解決できる力が付くよ!ぜったい役立つよ!

という、それらしい理由を説明して、PATHとかファイルシステムとかの説明をサボりました、わたし。


はじめて学ぶソフトウェアテスト技法

ソフトウェアテストを書く技術を学んでもらうための本です。

テストって大事だよ。まじ大事。
テストがなかったらプログラムが動くことが保証できないよ!
プログラム書くんだったら、先にテスト書くべきだよ!まじべきだよ!

って教団の人が言ってました。

ちゃんとしたテストが書けるようになる仕事、つぎに準備するから、その時に実践して学ぼう >高橋くん


TypeScriptでのWebフロントエンド開発

Rinkak 3Dペットステーションというペットの写真1枚からペットのフィギュアが制作できるサービスの開発プロジェクトに参加してもらいました。
主にその申し込みフォームの開発です。

Micro Serviceアーキテクチャで、サーバとクライアントを疎結合にし、独立して開発しました。
クライアントサイドの開発をお願いし、サーバサイド(APIとロジック)は私。

このプロジェクトではあえてフレームワークは使わず、独自フレームワークを開発してもらいました。
フレームワークを開発するには、それを利用するあらゆる状況を考慮した設計が必要になり、技術力を高める良いトレーニングになります。

また、[基礎力]で習得したものが実践で使えることで、学習のモチベーションが上がることも目的としていました。

本サービスはバージョンアップが事前にスケジュールに組みこまれていたので、具体的な指示は極力少なくして、自分で設計・実装してもらいました。
「質問やアドバイスは求められた時にだけ」。

あとで「"なぜ"そうしたのか」と質問して、設計思想を教えてもらうのが楽しみでした。

「ああすれば良かった」「こうしたほうが良かった」「次はこうしてみよう」という反省点・改善案を次のバージョンアップで実際に試してもらいました。
これを繰り返せば、いつか「うまくできた」に近づけるでしょう。
しかも、今回は同じサービスなので、条件がほぼ変わりません。改善案がそのまま使え、試せます。
試した結果どうだったのかを検証することで、課題の質がさらに上がります。

同じサービスを何度も作りなおすのは面白みにかけたかもしれませんが、レゴブロックで家を作るような楽しみはあったのではないかと。


開発が一通り終わると私がコードレビューして質問します。直接修正することはしません。
めんどくさい手を動かすことが大事だと考えているからです。
頭で分かったつもりでいても、手が動かないなんて事はよくあることです。


カブク、エンジニアインターンシップに期待すること

「技術を楽しめる」です。

技術は道具。
道具を試しては、捨て、よさそうなら仕事に使ってみる。

ベルボンが良いのか、スリックなのか、やっぱりマンフロットなのか。
全部、使ってみたら分かるってもんです。

そういうことが楽しめるのがカブクのエンジニアっぽいかなぁ。

幸いにして高橋くんは雑食で何でも食べてみる男子だったので、
「これやってみる?」「はい!」って感じでたまーにしかやってないメンタリングも楽しかったです。

次の3ヶ月も彼と仕事するのが楽しみです^^


さいごに

宣伝です。
カブクでエンジニア・デザイナー(正規・インターンシップ)を募集しています。
ご興味あれば、お問い合わせ下さい。

物理的なモノづくりと仮想空間のモノづくりが交わる面白い会社です。

おまけ

理科系の作文技術を読むと、もっとマシなブログ記事が書けるようになるよ!