$30 off During Our Annual Pro Sale. View Details »

What is software made of?

What is software made of?

Yukihiro Matsumoto

January 28, 2017
Tweet

More Decks by Yukihiro Matsumoto

Other Decks in Programming

Transcript

  1. Powered by Rabbit 2.1.9
    What is software made of?
    Heroku
    Ruby Association
    Yukihiro "Matz" Matsumoto
    @yukihiro_matz

    View Slide

  2. Powered by Rabbit 2.1.9
     
    RubyConf India

    View Slide

  3. Powered by Rabbit 2.1.9
     
    What is software made of?

    View Slide

  4. Powered by Rabbit 2.1.9
     
    What are little boys made of?

    View Slide

  5. Powered by Rabbit 2.1.9
     
    What are little boys made of?
    What are little boys made of?
    Snips and snails
    And puppy-dogs' tails
    That's what little boys are made of

    View Slide

  6. Powered by Rabbit 2.1.9
     
    What are little girls made of?
    What are little girls made of?
    Sugar and spice
    And all things nice
    That's what little girls are made of

    View Slide

  7. Powered by Rabbit 2.1.9
     
    What is software made of?

    View Slide

  8. Powered by Rabbit 2.1.9
     
    First Ingredient

    View Slide

  9. Powered by Rabbit 2.1.9
     
    Hardware

    View Slide

  10. Powered by Rabbit 2.1.9
     
    Hardware can exist without
    Software

    View Slide

  11. Powered by Rabbit 2.1.9
     

    View Slide

  12. Powered by Rabbit 2.1.9
     
    No Software can exist without
    Hardware

    View Slide

  13. Powered by Rabbit 2.1.9
     
    Not 100% True

    View Slide

  14. Powered by Rabbit 2.1.9
     
    But Mostly True

    View Slide

  15. Powered by Rabbit 2.1.9
     
    My first computer

    View Slide

  16. Powered by Rabbit 2.1.9
     

    View Slide

  17. Powered by Rabbit 2.1.9
     
    4bit CPU
    BASIC
    1400 Steps
    26 Variables

    View Slide

  18. Powered by Rabbit 2.1.9
     
    Poor Computer

    View Slide

  19. Powered by Rabbit 2.1.9
     
    It's 37 years ago

    View Slide

  20. Powered by Rabbit 2.1.9
     
    The Computer has been evolving
    so fast!

    View Slide

  21. Powered by Rabbit 2.1.9
     
    Faster CPU
    More memory
    More storage
    Wider bandwidth

    View Slide

  22. Powered by Rabbit 2.1.9
     
    The Computer I was using when I
    started Ruby (1993)

    View Slide

  23. Powered by Rabbit 2.1.9
     
    Engineering Work Station

    View Slide

  24. Powered by Rabbit 2.1.9
     
    SONY NEWS (NWS-831)

    View Slide

  25. Powered by Rabbit 2.1.9
     
    CPU: 68020 16MHz
    MEM: 8MB
    HDD: 156MB

    View Slide

  26. Powered by Rabbit 2.1.9
     
    Cost: 20,000USD

    View Slide

  27. Powered by Rabbit 2.1.9
     
    2016

    View Slide

  28. Powered by Rabbit 2.1.9
     
    Lenovo Thinkpad T460s

    View Slide

  29. Powered by Rabbit 2.1.9
     
    CPU: Core i7 (2.6GHz)
    MEM: 20GB
    HDD: 1TB (SSD)

    View Slide

  30. Powered by Rabbit 2.1.9
     
    Cost: 2,000USD

    View Slide

  31. Powered by Rabbit 2.1.9
     
    CPU: 325x

    View Slide

  32. Powered by Rabbit 2.1.9
     
    MEM: 2500x

    View Slide

  33. Powered by Rabbit 2.1.9
     
    HDD: 6410x

    View Slide

  34. Powered by Rabbit 2.1.9
     
    Now Computers are Fast!

    View Slide

  35. Powered by Rabbit 2.1.9
     
    The problem is..

    View Slide

  36. Powered by Rabbit 2.1.9
     
    Grand Illusion

    View Slide

  37. Powered by Rabbit 2.1.9
     
    1. Moore's Law

    View Slide

  38. Powered by Rabbit 2.1.9
     
    The number of transistors in LSI
    doubles every 18 months=  

    View Slide

  39. Powered by Rabbit 2.1.9
     

    View Slide

  40. Powered by Rabbit 2.1.9
     
    2. Cores

    View Slide

  41. Powered by Rabbit 2.1.9
     
    Multi Cores

    View Slide

  42. Powered by Rabbit 2.1.9
     
    The end of free lunch

    View Slide

  43. Powered by Rabbit 2.1.9
     
    Concurrency

    View Slide

  44. Powered by Rabbit 2.1.9
     
    Concurrency is hard

    View Slide

  45. Powered by Rabbit 2.1.9
     
    3. Caches

    View Slide

  46. Powered by Rabbit 2.1.9
     
    Variables≒Memory

    View Slide

  47. Powered by Rabbit 2.1.9
     
    Memory Model
    Registers
    Memory (Stack+Heap)

    View Slide

  48. Powered by Rabbit 2.1.9
     
    Real Memory Model
    Registers
    Caches
    Memory (Stack+Heap)
    Storage

    View Slide

  49. Powered by Rabbit 2.1.9
     
    Registers (1x)
    L1 Caches (4x)
    L2 Caches (10x)
    L3 Caches (40x)
    Memory (100x)
    Storage (20Mx)

    View Slide

  50. Powered by Rabbit 2.1.9
     
    Developers (sometimes) need to
    fight with illusion

    View Slide

  51. Powered by Rabbit 2.1.9
     
    Next Ingredient

    View Slide

  52. Powered by Rabbit 2.1.9
     
    Languages

    View Slide

  53. Powered by Rabbit 2.1.9
     
    Language = Grammar +
    Vocabulary

    View Slide

  54. Powered by Rabbit 2.1.9
     
    Language = Syntax + Library

    View Slide

  55. Powered by Rabbit 2.1.9
     
    How to express your idea

    View Slide

  56. Powered by Rabbit 2.1.9
     
    Communication between
    humans and machines

    View Slide

  57. Powered by Rabbit 2.1.9
     
    The tool to form your idea

    View Slide

  58. Powered by Rabbit 2.1.9
     
    The tool to boost your brain

    View Slide

  59. Powered by Rabbit 2.1.9
     
    Sapir-Whorf hypothesis

    View Slide

  60. Powered by Rabbit 2.1.9
     
    human thoughts are influenced
    by (spoken) languages

    View Slide

  61. Powered by Rabbit 2.1.9
     
    Languages influence human
    thought, more than you think

    View Slide

  62. Powered by Rabbit 2.1.9
     
    Languages matter

    View Slide

  63. Powered by Rabbit 2.1.9
     
    The evolution of programming
    languages

    View Slide

  64. Powered by Rabbit 2.1.9
     
    More abstract

    View Slide

  65. Powered by Rabbit 2.1.9
     
    More concise

    View Slide

  66. Powered by Rabbit 2.1.9
     
    Less code

    View Slide

  67. Powered by Rabbit 2.1.9
     
    Easier to write

    View Slide

  68. Powered by Rabbit 2.1.9
     
    Easier to read

    View Slide

  69. Powered by Rabbit 2.1.9
     
    More productive

    View Slide

  70. Powered by Rabbit 2.1.9
     
    Abstraction

    View Slide

  71. Powered by Rabbit 2.1.9
     
    Hide internal detail

    View Slide

  72. Powered by Rabbit 2.1.9
     
    Illusion

    View Slide

  73. Powered by Rabbit 2.1.9
     
    Languages create illusion

    View Slide

  74. Powered by Rabbit 2.1.9
     
    Developers (sometimes) need to
    play with illusion

    View Slide

  75. Powered by Rabbit 2.1.9
     
    Illusion that make you productive

    View Slide

  76. Powered by Rabbit 2.1.9
     
    Illusion that make you consume
    less brain power

    View Slide

  77. Powered by Rabbit 2.1.9
     
    Productivity matters

    View Slide

  78. Powered by Rabbit 2.1.9
     
    Productivity solves most of
    problems

    View Slide

  79. Powered by Rabbit 2.1.9
     
    Productivity make work work less

    View Slide

  80. Powered by Rabbit 2.1.9
     
    Productivity make work earn
    more

    View Slide

  81. Powered by Rabbit 2.1.9
     
    Productivity bring you success

    View Slide

  82. Powered by Rabbit 2.1.9
     
    Last Ingredient

    View Slide

  83. Powered by Rabbit 2.1.9
     
    Developers Community

    View Slide

  84. Powered by Rabbit 2.1.9
     
    Programmers

    View Slide

  85. Powered by Rabbit 2.1.9
     
    People

    View Slide

  86. Powered by Rabbit 2.1.9
     
    Programming is a human thing

    View Slide

  87. Powered by Rabbit 2.1.9
     
    Machines don't program

    View Slide

  88. Powered by Rabbit 2.1.9
     
    At least yet

    View Slide

  89. Powered by Rabbit 2.1.9
     
    We are not machines

    View Slide

  90. Powered by Rabbit 2.1.9
     
    Difference?

    View Slide

  91. Powered by Rabbit 2.1.9
     
    Heart

    View Slide

  92. Powered by Rabbit 2.1.9
     
    Desire

    View Slide

  93. Powered by Rabbit 2.1.9
     
    Machines do not desire anything

    View Slide

  94. Powered by Rabbit 2.1.9
     
    We program because we want
    something

    View Slide

  95. Powered by Rabbit 2.1.9
     
    Passion

    View Slide

  96. Powered by Rabbit 2.1.9
     
    Machines do not have passion

    View Slide

  97. Powered by Rabbit 2.1.9
     
    We keep programming because
    we have passion

    View Slide

  98. Powered by Rabbit 2.1.9
     
    20+ years of Ruby development

    View Slide

  99. Powered by Rabbit 2.1.9
     
    Anger

    View Slide

  100. Powered by Rabbit 2.1.9
     
    We (sometimes) program
    because we get angry at
    something

    View Slide

  101. Powered by Rabbit 2.1.9
     
    3 Virtues of Programmers
    Laziness
    Impatient
    Hubris

    View Slide

  102. Powered by Rabbit 2.1.9
     
    Weakness

    View Slide

  103. Powered by Rabbit 2.1.9
     
    Weak memory

    View Slide

  104. Powered by Rabbit 2.1.9
     
    Weak will

    View Slide

  105. Powered by Rabbit 2.1.9
     
    Weak mind

    View Slide

  106. Powered by Rabbit 2.1.9
     
    Weakness is the reason we need
    illusion

    View Slide

  107. Powered by Rabbit 2.1.9
     
    Community

    View Slide

  108. Powered by Rabbit 2.1.9
     
    Communication

    View Slide

  109. Powered by Rabbit 2.1.9
     
    Collaboration

    View Slide

  110. Powered by Rabbit 2.1.9
     
    Motivation

    View Slide

  111. Powered by Rabbit 2.1.9
     
    They made Ruby possible

    View Slide

  112. Powered by Rabbit 2.1.9
     
    They made other great software

    View Slide

  113. Powered by Rabbit 2.1.9
     
    They will make your software

    View Slide

  114. Powered by Rabbit 2.1.9
     
    Summary

    View Slide

  115. Powered by Rabbit 2.1.9
     
    What is software made of?
    Hardware and languages
    And developers community
    That's what is software made of?

    View Slide

  116. Powered by Rabbit 2.1.9
     
    Hardware

    View Slide

  117. Powered by Rabbit 2.1.9
     
    Languages

    View Slide

  118. Powered by Rabbit 2.1.9
     
    Community

    View Slide

  119. Powered by Rabbit 2.1.9
     
    Happy Hacking!

    View Slide

  120. Powered by Rabbit 2.1.9
     
    A Few More Things

    View Slide

  121. Powered by Rabbit 2.1.9
     
    Ruby3

    View Slide

  122. Powered by Rabbit 2.1.9
     
    Concurrency
    Performance
    Static Analysis

    View Slide

  123. Powered by Rabbit 2.1.9
     
    mruby

    View Slide

  124. Powered by Rabbit 2.1.9
     
    Streem

    View Slide

  125. Powered by Rabbit 2.1.9
     
    Happy Hacking!

    View Slide