Your SlideShare is downloading. ×
0
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
The Epistemology of Software Engineering
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

The Epistemology of Software Engineering

2,437

Published on

My keynote at GOTO Berlin 2013

My keynote at GOTO Berlin 2013

Published in: Technology, Spiritual
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,437
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
44
Comments
0
Likes
13
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. The Epistemology of Software Engineering Nathan Marz @nathanmarz 1
  • 2. My personal philosophies on software development
  • 3. Agenda 1. Limits of human knowledge 2. Effect of the limits of knowledge on software development 3. Embracing those limits enables you to build better software
  • 4. How do I know my software is correct?
  • 5. How do I know a proposition is true?
  • 6. Epistemology
  • 7. How do I know my software is correct? PREVIEW
  • 8. You don’t
  • 9. Your code is wrong
  • 10. How do I know a proposition is true? PREVIEW
  • 11. You don’t
  • 12. True knowledge is unattainable
  • 13. But wait... philosophy?
  • 14. Strawman Moral highground Appeal to authority Ad hominem attack Appeal to emotion Shotgun argumentation Circular reasoning Correlation vs causation False dilemma Equivocation Argument to moderation Burden of proof Fallacies
  • 15. Your code is wrong
  • 16. Your code is literally wrong
  • 17. Your code is wrong
  • 18. Why do you believe your code is correct?
  • 19. Dependency 1 Dependency 2 Your code Dependency 3
  • 20. Dependency 4 Dependency 1 Dependency 5
  • 21. Dependency 6 Dependency 7 Dependency 4 Dependency 8 Dependency 9
  • 22. Dependency 3,000,000 Hardware
  • 23. Electronics
  • 24. Chemistry
  • 25. Atomic physics
  • 26. Quantum mechanics
  • 27. I think I can safely say that nobody understands quantum mechanics. Richard Feynman
  • 28. Your code is wrong
  • 29. ... Your code
  • 30. Infinite regress
  • 31. Epistemological “solutions” 1. Infinitism 2. Foundationalism 3. Coherentism
  • 32. Coherentism
  • 33. Foundationalism Axioms
  • 34. René Descartes
  • 35. Cogito ergo sum
  • 36. I think, therefore I am
  • 37. Codito ergo sum
  • 38. I code, therefore I am
  • 39. Cartesian foundationalism 1. Limited axioms 2. Knowledge through deduction
  • 40. Cartesian programming 1. Axioms = rules of programming language 2. Programs = deductions from those axioms
  • 41. -> OutOfMemoryException
  • 42. -> Hallo welt!
  • 43. All the software you’ve used has had bugs in it
  • 44. Including the software you’ve written
  • 45. Induction
  • 46. f(0) and (f(n) → f(n+1)) ∀n≥0, f(n)
  • 47. Induction
  • 48. <sidenote>
  • 49. David Hume
  • 50. “Why is inductive reasoning valid?”
  • 51. </sidenote>
  • 52. Skepticism
  • 53. perfect code
  • 54. value to users
  • 55. “My software is correct”
  • 56. “My software is sometimes correct”
  • 57. How do you minimize imperfection?
  • 58. Storm’s “reportError” method
  • 59. (Storm is a realtime computation system, like Hadoop but for realtime)
  • 60. Storm architecture
  • 61. Storm architecture Master node (similar to Hadoop JobTracker)
  • 62. Storm architecture Used for cluster coordination
  • 63. Storm architecture Run worker processes
  • 64. Storm’s “reportError” method
  • 65. Used to show errors in the Storm UI
  • 66. Error info is stored in Zookeeper
  • 67. What happens when a user deploys code like this?
  • 68. Denial-of-service on Zookeeper and cluster goes down
  • 69. Irrelevant! Designed input space Robust! Failures! Bad performance! Security holes! Actual input space
  • 70. Implement self-throttling to avoid overloading Zookeeper
  • 71. Robust! Designed input space Actual input space
  • 72. Robust! Designed input space Actual input space
  • 73. Epistemology
  • 74. Trth Trut Truh Tuth Tru
  • 75. Foundation of modern science
  • 76. Newton’s laws of motion 1. When viewed in an inertial reference frame, an object either is at rest or moves at a constant velocity, unless acted upon by an external force. 2. The acceleration of a body is directly proportional to, and in the same direction as, the net force acting on the body, and inversely proportional to its mass. Thus, F = ma, where F is the net force acting on the object, m is the mass of the object and a is the acceleration of the object. 3. When one body exerts a force on a second body, the second body simultaneously exerts a force equal in magnitude and opposite in direction to that of the first body.
  • 77. Orbit of Mercury problem Cambridge, we have a problem...
  • 78. Einstein’s theory of relativity Sorry, Newton, you’ve been PWNED:
  • 79. limit approximation (truth) = truth n n→∞
  • 80. Science algorithm 1. Make observations 2. Find theories consistent with those observations 3. Falsify theories by making more observations
  • 81. Foundationalism + Coherentism
  • 82. Empiricism
  • 83. John Locke
  • 84. Occam’s Razor
  • 85. Software Use cases
  • 86. Software gets messy
  • 87. Refactoring
  • 88. Robust! Designed input space Actual input space
  • 89. Robust! Designed input space Actual input space
  • 90. TESTING
  • 91. Unit testing Load testing Stress testing Fuzz testing
  • 92. TDD?
  • 93. Review 1. Cannot perfectly reason about software • Infinite regress problem • Deduction is fundamentally flawed • Evidence shows programmers are not good at deductive reasoning 2. Best you can do is minimize wrongness • Truth can only be approximate • Observe/theorize/falsify cycle minimizes wrongness over time • Testing = empiricism applied to software development • Make programs less wrong by testing more
  • 94. Does any of this matter?
  • 95. YES
  • 96. Embrace “your code is wrong” to design better software
  • 97. Redundancy Fault-tolerance > Perfection
  • 98. An example
  • 99. Learning from Hadoop Job Jobtracker Job Job
  • 100. Learning from Hadoop Job Jobtracker Job Job
  • 101. Learning from Hadoop Job Jobtracker Job Job
  • 102. Your code is wrong
  • 103. So your processes will crash
  • 104. Storm’s daemons are process fault-tolerant
  • 105. Storm Topology Nimbus Topology Topology
  • 106. Storm Topology Nimbus Topology Topology
  • 107. Storm Topology Nimbus Topology Topology
  • 108. Storm Topology Nimbus Topology Topology
  • 109. Storm Topology Nimbus Topology Topology
  • 110. Robust! Designed input space Actual input space
  • 111. Robust! Designed input space Actual input space
  • 112. Reasoning is fundamentally hard
  • 113. So program in ways that require less of it
  • 114. Pure function
  • 115. Mutability is hard to reason about
  • 116. Minimize state mutation
  • 117. Functional programming
  • 118. Clojure
  • 119. skepticism(skepticism)
  • 120. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? perfect software ? ? ? ? ? ?
  • 121. Thank you

×