Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
manifes2018_PDL.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
MakKi
September 03, 2018
1
160
manifes2018_PDL.pdf
MakKi
September 03, 2018
Tweet
Share
More Decks by MakKi
See All by MakKi
テストだけじゃない!インプロセスDBで生まれるGoらしさ
makki_d
0
39
SQLだけでマイグレーションしたい!
makki_d
0
1.4k
Recap: An Operating System in Go
makki_d
2
140
XSLTで作るBrainfuck処理系
makki_d
0
340
眼鏡と視力についての誤解を解く
makki_d
0
190
標準ライブラリの動向とイテレータのパフォーマンス
makki_d
3
750
range over funcのエラー処理
makki_d
1
1.8k
GoとテストとインプロセスDB
makki_d
3
670
君は古の言語M4を知っているか (LT)
makki_d
0
530
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
3
370
Into the Great Unknown - MozCon
thekraken
40
2.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
400
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
Site-Speed That Sticks
csswizardry
13
1.1k
What's in a price? How to price your products and services
michaelherold
247
13k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
61
52k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
140
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
68
Embracing the Ebb and Flow
colly
88
5k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
390
Transcript
PDL ― 移植駆動学習 KLab株式会社 牧内大輔
早速ですが質問です
何を考えますか?
今日のお話について • 移植駆動学習 • 機械学習のお話ではありません • 人間学習のお話です
移植駆動学習(PDL)とは Porting-Driven Learning. 何らかのプログラムを 別の言語に移植することにより そのプログラムと対象技術領域について 自然と学習することができる学習方法のこと。 ― Makiuchi, D.
(2018)
実例 移植対象:ZXing https://github.com/zxing/zxing • 1D/2Dバーコードリーダー ◦ QRコードやDataMatrix、各種バーコード • Javaによる実装 ◦ Androidでよく使われている
移植先:gozxing https://github.com/makiuchi-d/gozxing • Go言語に移植 • QRコード、UPC/EANバーコードを移植済み
学習前の私
学習後の私 BCH符号 JIS X 0510 ISO/IEC 18004 8つのマスクパターン GB2312 バージョン1〜40
ガロア拡大体 Alphanumeric Mode ReedSolomon符号 ISO-8859-1 構造的連接 þ(ソーン) AIM Inc. Position Pattern 拡張チャネル解釈 中华人民共和国国家标准 デンソーウェーブ
圧倒的成長!!
PDLの進め方
PDLの進め方 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4. 移植完了
PDLの進め方 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4. 移植完了 理解していなくてもできてしまう
これだけでは学習にならない
PDLに必要なもの
テスト!テスト!テスト!
カバレッジ ほぼ 100%
カバレッジ100%を目指す • テストケースがすべての分岐を網羅している ◦ 分岐1つ1つの意味まで理解する必要がある • エッジケースをひたすら考える ◦ 規格書などの資料と照らし合わせながら このようにしてコードの理解を深めていく
= 学習
学習以外の効果 テストをしっかり書くことで • 単純なミスを防げる ◦ 書き間違い ◦ 言語仕様の違いの考慮漏れ • 修正が楽になる
◦ あとから設計を直したいとき ◦ 動作が変わっていないことを保証できる つまり、一般的なテストの効果
テストケースを思いつかないとき • 手が進まないとモチベーションが低下 • 学習も止まってしまう そんなときは • 元のコードを動かしてみる • 入出力のペアを得る
• そのままテストケースにする
gozxingのカバレッジ • 8/22現在 97.92% 右図について • 円の階層=ディレクトリとファイル • 弧の長さ(割合)=行数 •
緑=カバレッジ100% ◦ 赤に近いほどカバレッジが低い オレンジの場所はReedSolomonDecoder まだ理解が不十分なことがわかる https://codecov.io/gh/makiuchi-d/gozxing
PDLまとめ
PDLまとめ 移植駆動学習(Porting-Driven Learning) 1. 学習したいプログラムを探す 2. そのコードを眺めながら 3. 移植先の言語に書き換えていく 4.
カバレッジ100%を目指してテストを書く 5. 移植完了 隅々まで理解することで学習できる
ぜひお試しください
おまけ
その他のメリット • 元コードのバグを見つけることがある • プロジェクトに報告、修正を提案(PR) • コントリビューターになれる!