カブクのエンジニアインターンシッププログラムについての詩

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ヶ月も彼と仕事するのが楽しみです^^

さいごに

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

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

おまけ

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

その他の記事

Other Articles

2019/01/18
SIGGRAPH Asia 2018 参加レポート

2019/01/08
お正月だョ!ECMAScript Proposal全員集合!!

2019/01/08
カブクエンジニア開発合宿に行ってきました 2018秋

2018/12/25
OpenAPI 3 ファーストな Web アプリケーション開発(環境編)

2018/12/23
いまMLKitカスタムモデル(TF Lite)は使えるのか

2018/12/21
[IoT] Docker on JetsonでMQTTを使ってCloud IoT Coreと通信する

2018/12/11
TypeScriptで実現する型安全な多言語対応(Angularを例に)

2018/12/05
GASでCompute Engineの時間に応じた自動停止/起動ツールを作成する 〜GASで簡単に好きなGoogle APIを叩く方法〜

2018/12/02
single quotes な Black を vendoring して packaging

2018/11/14
3次元データに2次元データの深層学習の技術(Inception V3, ResNet)を適用

2018/11/04
Node Knockout 2018 に参戦しました

2018/10/24
SIGGRAPH 2018参加レポート-後編(VR/AR)

2018/10/11
Angular 4アプリケーションをAngular 6に移行する

2018/10/05
SIGGRAPH 2018参加レポート-特別編(VR@50)

2018/10/03
Three.jsでVRしたい

2018/10/02
SIGGRAPH 2018参加レポート-前編

2018/09/27
ズーム可能なSVGを実装する方法の解説

2018/09/25
Kerasを用いた複数入力モデル精度向上のためのTips

2018/09/21
競技プログラミングの勉強会を開催している話

2018/09/19
Ladder Netwoksによる半教師あり学習

2018/08/10
「Maker Faire Tokyo 2018」に出展しました

2018/08/02
Kerasを用いた複数時系列データを1つの深層学習モデルで学習させる方法

2018/07/26
Apollo GraphQLでWebサービスを開発してわかったこと

2018/07/19
【深層学習】時系列データに対する1次元畳み込み層の出力を可視化

2018/07/11
きたない requirements.txt から Pipenv への移行

2018/06/26
CSS Houdiniを味見する

2018/06/25
不確実性を考慮した時系列データ予測

2018/06/20
Google Colaboratory を自分のマシンで走らせる

2018/06/18
Go言語でWebAssembly

2018/06/15
カブクエンジニア開発合宿に行ってきました 2018春

2018/06/08
2018 年の tree shaking

2018/06/07
隠れマルコフモデル 入門

2018/05/30
DASKによる探索的データ分析(EDA)

2018/05/10
TensorFlowをソースからビルドする方法とその効果

2018/04/23
EGLとOpenGLを使用するコードのビルド方法〜libGLからlibOpenGLへ

2018/04/23
技術書典4にサークル参加してきました

2018/04/13
Python で Cura をバッチ実行するためには

2018/04/04
ARCoreで3Dプリント風エフェクトを実現する〜呪文による積層造形映像制作の舞台裏〜

2018/04/02
深層学習を用いた時系列データにおける異常検知

2018/04/01
音声ユーザーインターフェースを用いた新方式積層造形装置の提案

2018/03/31
Container builderでコンテナイメージをBuildしてSlackで結果を受け取る開発スタイルが捗る

2018/03/23
ngUpgrade を使って AngularJS から Angular に移行

2018/03/14
Three.jsのパフォーマンスTips

2018/02/14
C++17の新機能を試す〜その1「3次元版hypot」

2018/01/17
時系列データにおける異常検知

2018/01/11
異常検知の基礎

2018/01/09
three.ar.jsを使ったスマホAR入門

2017/12/17
Python OpenAPIライブラリ bravado-core の発展的な使い方

2017/12/15
WebAssembly(wat)を手書きする

2017/12/14
AngularJS を Angular に移行: ng-annotate 相当の機能を TypeScrpt ファイルに適用

2017/12/08
Android Thingsで4足ロボットを作る ~ Android ThingsとPCA9685でサーボ制御)

2017/12/06
Raspberry PIとDialogflow & Google Cloud Platformを利用した、3Dプリンターボット(仮)の開発 (概要編)

2017/11/20
カブクエンジニア開発合宿に行ってきました 2017秋

2017/10/19
Android Thingsを使って3Dプリント戦車を作ろう ① ハードウェア準備編

2017/10/13
第2回 魁!! GPUクラスタ on GKE ~PodからGPUを使う編~

2017/10/05
第1回 魁!! GPUクラスタ on GKE ~GPUクラスタ構築編~

2017/09/13
「Maker Faire Tokyo 2017」に出展しました。

2017/09/11
PyConJP2017に参加しました

2017/09/08
bravado-coreによるOpenAPIを利用したPythonアプリケーション開発

2017/08/23
OpenAPIのご紹介

2017/08/18
EuroPython2017で2名登壇しました。

2017/07/26
3DプリンターでLチカ

2017/07/03
Three.js r86で何が変わったのか

2017/06/21
3次元データへの深層学習の適用

2017/06/01
カブクエンジニア開発合宿に行ってきました 2017春

2017/05/08
Three.js r85で何が変わったのか

2017/04/10
GCPのGPUインスタンスでレンダリングを高速化

2017/02/07
Three.js r84で何が変わったのか

2017/01/27
Google App EngineのFlexible EnvironmentにTmpfsを導入する

2016/12/21
Three.js r83で何が変わったのか

2016/12/02
Three.jsでのクリッピング平面の利用

2016/11/08
Three.js r82で何が変わったのか

2016/12/17
SIGGRAPH 2016 レポート

2016/11/02
カブクエンジニア開発合宿に行ってきました 2016秋

2016/10/28
PyConJP2016 行きました

2016/10/17
EuroPython2016で登壇しました

2016/10/13
Angular 2.0.0ファイナルへのアップグレード

2016/10/04
Three.js r81で何が変わったのか

2016/09/05
カブクのエンジニアインターンとして3ヶ月でやった事 〜高橋知成の場合〜

2016/08/30
Three.js r80で何が変わったのか

2016/07/15
Three.js r79で何が変わったのか

2016/06/02
Vulkanを試してみた

2016/05/20
MakerGoの作り方

2016/05/08
TensorFlow on DockerでGPUを使えるようにする方法

2016/04/27
Blenderの3DデータをMinecraftに送りこむ

2016/04/20
Tensorflowを使ったDeep LearningにおけるGPU性能調査

→
←

関連職種

Recruit

サーバーサイドエンジニア

業務内容

カブク自社で開発・運営しているWebサービス(3Dプリンターなどを活用したデジタル製造サービス)のサーバサイド開発。WebサービスのバックエンドやAPIの設計・実装をお任せします。

フロントエンドエンジニア

業務内容

カブク自社で開発・運営しているWebサービス(3Dプリンターなどを活用したデジタル製造サービス)のWebフロントエンド開発。フロントエンドの設計や実装をお任せします。

機械学習エンジニア

業務内容

機械学習を用いた3Dデータや2Dデータからの情報抽出モデルの構築やセンサーデータの分析モデルの調査・研究・開発。 PoCだけでなく、データの前処理や学習、ハイパーパラメータチューニング、獲得モデルの評価、適用、運用のパイプライン構築まで、機械学習をプロダクション適用する全てのお仕事に携われます。

インターン(エンジニア)

業務内容

カブクの社員と肩を並べて、実業務を中心とした知識やスキルを身につけていただく実践型インターンシップ。スタートアップならではのスピードがあり、ダイナミックな就業経験を体験することが可能です。

→
←

お客様のご要望に「Kabuku」はお応えいたします。
ぜひお気軽にご相談ください。

お電話でも受け付けております
03-6380-2750
営業時間:09:30~18:00
※土日祝は除く