1
2017年5月20日
株式会社U-NEXT 舟木 初
U-NEXT学生インターン、
過激なJavaの学び方と
過激な要求
2
目次
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
3
1.自己紹介
• 舟木 初 (ふなき はじめ)
• U-NEXTの新卒(17卒)
– 1年間インターンシップをしていた
• プログラミング経験が全くなかった
– 法学部出身
– 数学と漢詩が好き
4
2.U-NEXT紹介
日本最大級の
デジタルコンテンツ配信サービス
http://video.unext.jp/
5
3.過激な要求
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
6
3.過激な要求
「戦略DBを作成せよ」
• 戦略DB
– 社内用のWebアプリ
• 作るうえで必要なもの・知識
– Java8とDBFlute/LastaFlute
– DB設計
– 画面(HTML, CSS, JavaScript)
– 検索エンジンsolr
– 要件定義
7
3.過激な要求
「戦略DBを作成せよ」
• なにひとつ、まったく知らない
– そもそも学生だし、法学部だし・・・
• インターンの1年間で
– 昼はJava、夜は民法
8
• 要件定義
– 検索機能
– 追加機能
• 名寄せ
3.過激な要求
「戦略DBを作成せよ」
作品名
製作国
公開日
評点
etc
これってどんな映画?
この映画ってもうあったっけ?
9
3.過激な要求
Java8
• とりあえずJavaの本を読め
– 「Java言語プログラミングレッスン」
– 分かったような分からんような
• とりあえずDBFluteハンズオンやれ
– いや、Javaも分かんないのにDBアクセスとか・・・
10
3.過激な要求
DBFluteとは
• O/Rマッパー
– DBアクセスするためのクラスが自動生成
• 豊富なドキュメント
– http://dbflute.seasar.org/
• ハンズオン
– http://dbflute.seasar.org/ja/tutorial/handson/index.html
11
3.過激な要求
jfluteさん
• DBFluteのメインコミッター
• U-NEXTの技術顧問
• ブロガー
– http://d.hatena.ne.jp/jflute/
• 陰に日向に支えてもらった
12
4.できたもの
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
13
• 検索機能
• 追加機能
– 名寄せ
4.できたもの
戦略DB
作品名
製作国
公開日
評点
etc
これってどんな映画?
この映画ってもうあったっけ?
14
4.できたもの
検索機能
映画などのコンテンツ検索
15
4.できたもの
追加機能
• 新しいコンテンツ情報の取り込み
– 最新の映画など
• 自社の他システムとの連携
– 自社で何を配信しているのか調べる
• 検索エンジンを使った名寄せ
– 「AAA」と「AA・A」は同じ映画?
16
5.過激な学び方
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
17
5.過激な学び方
• 納得感がない
– 理解はできる but 納得感があるかは別の問題
– 例:なぜfor でループなの?
– 例:「This is a pen.」
• 「a」の意味は分かっても、「a」の存在を納得することは
難しい。おとしこめていないから書き忘れたり。
最初で最大の壁
18
5.過激な学び方
①識者との対話
– jfluteさんのレビュー
②アナロジーで理解する
– 知っている世界との比較
納得するために
19
5.過激な学び方
• 感情的に納得する
– 識者:権威がもたらす納得感
– 対話:人に教えてもらうことがもたらす納得感
– 納得感!
①識者との対話
20
5.過激な学び方
• 類比、類推のこと
• 知っている概念で受け入れやすくする
②アナロジーで理解する
21
5.過激な学び方
アナロジーで理解する
未知の世界
既知の世界
未知の世界
?
22
5.過激な学び方
• 例えば「APIってなに?」
– ソフトウェアコンポーネントが互いにやりとりする
のに使用するインタフェースの仕様
– この説明でピンとくる??
アナロジーで理解する
23
5.過激な学び方
APIってなに?
– ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェース
の仕様
–回転寿司で客と店員がやりとりするために
使うタッチパネルの機能
–納得感!
アナロジーで理解する
24
6.アナロジー
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
25
6.アナロジー
• 納得しやすくなる(前述)
• 気づきがうまれる
アナロジーの効果
26
6.アナロジー
付きまとうnullチェック
null“hoge”
String
If (str != null) {
・・・・
} else {
・・・・
}
27
6.アナロジー
般若心経の「空」
無有
空
「無いという状態」が有る
28
6.アナロジー
空を悟ったOptional型
空
null“hoge”
「無いという状態」が有る
Optional<String>
29
6.アナロジー
空を悟ったOptional型
getTitle().map(title -> title.get..).orElse(“XX”)...
空.map(有 -> 有.get...).orElse(無)...
null“hoge”
30
6.アナロジー
李白の「静夜思」
挙 頭 望 山 月
低 頭 思 故 郷
31
6.アナロジー
李白の「静夜思」
• 統一感
• 視覚的
⇒ということは・・・
挙 頭 望 山 月
低 頭 思 故 郷
32
6.アナロジー
「統一感のあるコード」
if (title != null) {
cb.query().setTitle_Equal(title);
}
if (year != null) {
cb.query().setYear_Equal(year);
}
• プロジェクトごとの統一
• クラスごとの統一
• 段落ごとの統一
if (country != null) {
cb.query().setCountry_Equal(country);
}
if (genre != null) {
cb.query().setGenre_Equal(genre);
}
33
6.アナロジー
「viewable code」(視覚的なコード)
for (MovieRow row : movieRowList) {
… = row.getTitle()
}
⇓ たぶん・・・
タイトル 製作年 製作国
td td td
td td td
34
6.アナロジー
アナロジーがもたらす技術力
• カワセミと新幹線
• 脳神経と機械学習のニューラルネットワーク
• Dockerのコンテナ技術
35
7.採用情報
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
36
採用
U-NEXT ではJava8 を使った
Webアプリ開発者を募集しています!
37
採用
中途入社でも2週間の研修
• 2週間かけてフレームワークを学ぶ
– フレームワークを理解せず使うことがないように
– いきなり迷いながらの仕事にならないように
– スキルアップにビジネス的価値があるという考え
38
採用
jfluteさんからのレビュー
• jfluteさんからのレビュー
– TODO funa こういうときは0件チェックをしよう、なぜなら... by jflute
– フレームワークについて 1on1 でじっくり話を聞ける
– 気付いたらショートカットの達人になっている
39
採用
開発に快適な環境
40
採用
助かるアーキテクトの支援
• 品質にこだわったコードレビュー
• 開発基盤の提供、新規プロジェクトの即時発足
• わかりやすく高度な勉強会
• スキルアップに前向きなムード!
41
目次
1. 自己紹介
2. U-NEXT紹介
3. 過激な要求
4. できたもの
5. 過激な学び方
6. アナロジー
7. 採用情報
42
補足:受け入れるということ
1.世界観を受け入れるという困難
何か新たなことを学ぶとき、最も困難なことのひとつはその世界観を受け入れることである。
例えば、中学一年生で初めての外国語として英語を勉強した際の「This is a pen.」という文を理解する困難を想像してみたい。
「This」は「これ」、「is」は「~である」、「a」は「ひとつの」、「pen」は「ペン」と教えてもらう。
なるほど、それぞれの言葉の意味はこれで理解できるし、文全体を和訳することもできるだろう。
しかし、だからと言ってこの文を抵抗なく呑み込めるわけではない。
例えば「a」という冠詞が「ひとつの」という意味であること自体は理解できても、「a」のある世界観をすぐに受け入れることができ
ないからである。
ただただその存在を認めて受け入れ、英語とはそのような言語なのであるのかと思うしかないのである。
ここでは、理解することよりむしろ、受け入れる(落とし込む、飲み込む)ことの壁が高いのである。
また、単語を理解していても、この文を間違いなく英作することは簡単ではない。
例えば英語を学びたての中学一年生はピリオドを打ち忘れることが多い。
ピリオドが日本語の句点に相当することは当然理解しているし、日本語の文を書くときに句点を忘れはしない。
にもかかわらず、ピリオドを忘れる。
日本語と同じように英語を自らに落とし込めていないからである。
であるから、ピリオドという存在を英語という世界の登場人物であるとしっかり認識して受け入れるしかないように思える。
もちろん理解は必要であるが、理解そのものに問題があるわけではなく、むしろそのあとのステップが重要である。
Javaを学習するときも、「なぜForを使ってループを表すのか」と思うが、そう思っても仕方がない。
これも結局、単なる理解だけの問題ではないのである。理解に加えて、Javaはそういうものなのだなと無理にでも納得する必要
がある。
この壁を乗り越えるのは素直にその世界を受け入れる力である。
そしてこれこそが、自分にとって未踏の分野の学習において、初期に最も必要なスキルのひとつである。
43
補足:受け入れるということ
2.世界観を受け入れるために
世界観を受け入れるための有効な方法を私なりに2つあげたい。
一つめは識者との対話である。
なぜ有効かという説明は難しい。
(なぜその説明が難しいかは説明できる。そもそも受け入れるということは感情的なプロセスであり、その解決方法も多分に感
情論的な側面を含んでいるので、合理的な理由との親和性が乏しいからである。)
ただ、識者のもつ説得力と対話がもたらす納得によって「まあそういうものなのか」と受け入れる余地が生まれたという経験は誰
しもあるのではないか。
結局のところ、その世界観に反発したくなる気持ちがないことが重要であり、その気持ちがその世界を由来とするか否かは二次
的な問題なのである。
卑近な例でいえば、好きな先生の科目は自然とよく理解するし、嫌いな先生の科目はなんとなく理解が進まないということであ
る。つまり科目そのものは必ずしも関係ない。
そういう意味で、識者との間の信頼関係も重要であるし、識者の徳も重要かもしれない。
二つ目は自分の知っている他の世界の概念で理解することである。
例えば仏語の「un」という単語はひとつということを示す冠詞であるが、これを英語の「a」と同じだととらえるということである。
高尚にいえば、未知の世界を既知の概念を導として理解しているのである。
他の例としては、将棋を知っていれば、チェスの呑み込みも早いであろうというのもその一つである。
自らの経験としても、エンジニアという世界を学ぶ際に他の世界と類比させながら受け入れていった。
類比させるような世界があまりないため苦労したが、専攻の法学の概念を用いたことで一定の効果はあったように思う。
例えば、パンデクテン方式と類比することでオブジェクト指向という考え方をつかむことができた。
このように、知っている概念により、自分と知らない世界の概念とのギャップを埋めていくことが重要なのではないかと思う。

U-NEXT学生インターン、過激なJavaの学び方と過激な要求