Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PDL ― 移植駆動学習 KLab株式会社 牧内大輔
Slide 2
Slide 2 text
早速ですが質問です
Slide 3
Slide 3 text
何を考えますか?
Slide 4
Slide 4 text
今日のお話について ● 移植駆動学習 ● 機械学習のお話ではありません ● 人間学習のお話です
Slide 5
Slide 5 text
移植駆動学習(PDL)とは Porting-Driven Learning. 何らかのプログラムを 別の言語に移植することにより そのプログラムと対象技術領域について 自然と学習することができる学習方法のこと。 ― Makiuchi, D. (2018)
Slide 6
Slide 6 text
実例 移植対象:ZXing https://github.com/zxing/zxing ● 1D/2Dバーコードリーダー ○ QRコードやDataMatrix、各種バーコード ● Javaによる実装 ○ Androidでよく使われている 移植先:gozxing https://github.com/makiuchi-d/gozxing ● Go言語に移植 ● QRコード、UPC/EANバーコードを移植済み
Slide 7
Slide 7 text
学習前の私
Slide 8
Slide 8 text
学習後の私 BCH符号 JIS X 0510 ISO/IEC 18004 8つのマスクパターン GB2312 バージョン1〜40 ガロア拡大体 Alphanumeric Mode ReedSolomon符号 ISO-8859-1 構造的連接 þ(ソーン) AIM Inc. Position Pattern 拡張チャネル解釈 中华人民共和国国家标准 デンソーウェーブ
Slide 9
Slide 9 text
圧倒的成長!!
Slide 10
Slide 10 text
PDLの進め方
Slide 11
Slide 11 text
PDLの進め方 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4. 移植完了
Slide 12
Slide 12 text
PDLの進め方 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4. 移植完了 理解していなくてもできてしまう これだけでは学習にならない
Slide 13
Slide 13 text
PDLに必要なもの
Slide 14
Slide 14 text
テスト!テスト!テスト!
Slide 15
Slide 15 text
カバレッジ ほぼ 100%
Slide 16
Slide 16 text
カバレッジ100%を目指す ● テストケースがすべての分岐を網羅している ○ 分岐1つ1つの意味まで理解する必要がある ● エッジケースをひたすら考える ○ 規格書などの資料と照らし合わせながら このようにしてコードの理解を深めていく = 学習
Slide 17
Slide 17 text
学習以外の効果 テストをしっかり書くことで ● 単純なミスを防げる ○ 書き間違い ○ 言語仕様の違いの考慮漏れ ● 修正が楽になる ○ あとから設計を直したいとき ○ 動作が変わっていないことを保証できる つまり、一般的なテストの効果
Slide 18
Slide 18 text
テストケースを思いつかないとき ● 手が進まないとモチベーションが低下 ● 学習も止まってしまう そんなときは ● 元のコードを動かしてみる ● 入出力のペアを得る ● そのままテストケースにする
Slide 19
Slide 19 text
gozxingのカバレッジ ● 8/22現在 97.92% 右図について ● 円の階層=ディレクトリとファイル ● 弧の長さ(割合)=行数 ● 緑=カバレッジ100% ○ 赤に近いほどカバレッジが低い オレンジの場所はReedSolomonDecoder まだ理解が不十分なことがわかる https://codecov.io/gh/makiuchi-d/gozxing
Slide 20
Slide 20 text
PDLまとめ
Slide 21
Slide 21 text
PDLまとめ 移植駆動学習(Porting-Driven Learning) 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4. カバレッジ100%を目指してテストを書く 5. 移植完了 隅々まで理解することで学習できる
Slide 22
Slide 22 text
ぜひお試しください
Slide 23
Slide 23 text
おまけ
Slide 24
Slide 24 text
その他のメリット ● 元コードのバグを見つけることがある ● プロジェクトに報告、修正を提案(PR) ● コントリビューターになれる!