漏れのある抽象化の法則

4,358 views

Published on

漏れのある抽象化の法則

  1. 1. 漏れのある抽象化の 法則について
  2. 2. 自己紹介● 名前 – 橘田 隼一● TwitterID – hayabusa333● 興味があること – カーネルとか言語開発とか● 現在のお仕事 – テストプログラマー● 信仰 – Joel教
  3. 3. 漏れのある抽象化の法則
  4. 4. 漏れのある抽象化の法則 ● Joel Spolsky提唱 ● Fog Creek Software 創 業者 ● 人気ブログ Joel on Software
  5. 5. 抽象化一度に注目すべき概念を減らすことおよびその仕組み
  6. 6.
  7. 7. TCP/IPIP● 信頼性のない通信方式TCP● 信頼性のある通信方式
  8. 8. TCPはIPの上に実装されている
  9. 9. 信頼性のない通信方式で信頼性のある通信を行う
  10. 10. TCPはIPを使って通信を行っているが詳しいことを 知らなくても通信できる
  11. 11. TCPはIPを使って通信を行っているが詳しいことを 知らなくても通信できる
  12. 12. TCPはIPを抽象化している
  13. 13. しかしLANケーブルが切れていれば繋がらない回線が重ければ、TCPは信頼性を確保できない
  14. 14. 抽象化には漏れがある
  15. 15. これが漏れのある抽象化の法則
  16. 16. 漏れのある抽象化の法則自明でない抽象化はすべて、程度の差こそあれ、漏れがある
  17. 17. 抽象化は失敗する。あるときは小さく、あるときは 大きく、漏れがあるのだ。 物事は悪くなるものだ。この漏れは、抽象化が行われているあらゆる場所で起こる。
  18. 18. Joel の出した例
  19. 19. 大きな二次元配列の要素を順番にたどるという単純な事でも、水平方向か垂直方向かで、「芝目」に依存してパフォーマンス特性が劇的に異なるこ とがある
  20. 20. C言語で記載for(i = 0; i < 30000; i++){ for(j = 0; j < 30000; j++){ array[i][j] = 0; }}for(i = 0; i < 30000; i++){ for(j = 0; j < 30000; j++){ array[j][i] = 1; }}
  21. 21. デモ
  22. 22. この性能差はプログラム言語に よって出たものではなくOSやCPUによって現れたものである
  23. 23. C言語は簡単である。ただしOSの特殊な振る舞い に目をつむれば
  24. 24. OSは簡単である。 OS ただしCPUの特殊な振る舞いに目をつむれば
  25. 25. あなたが日常使うことの90%は 1週間で学習できるが、残りの10%を知るためには2、3年かか るかもしれない
  26. 26. 先ほどの例の理由を知るためには、C言語だけではなく OSの特性、メモリ管理、仮想化、CPUの挙動についても知らない といけない
  27. 27. 漏れのある抽象化の法則にうまく対処する唯一の方法は、その抽象化がどのように機能し、それが何を抽象化している のかを学ぶことだ。
  28. 28. そういうわけで、抽象化は私たちが作業する時間を節約してくれるが、私たちが学ぶ時間までは節約してくれないのだ。
  29. 29. ネットワーク・サーバはプログラム言語で実装されている
  30. 30. プログラムはOSやCPUの上で動いている
  31. 31. 抽象化されている先を 知らなければ 問題は解決できない
  32. 32. 問題を解決できるエンジニアになるためには全てを勉強する必要がある
  33. 33. 我々が目指すエンジニア像は 漏れのある抽象化の法則の漏れを解決できるエンジニアで あるべきである
  34. 34. ぜひ、漏れのある抽象化に だまされないで 漏れを解決できる人に なってほしい
  35. 35. 参考書籍
  36. 36. ご清聴ありがとう ございました

×