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

El Dilema de la Simplicidad - RubyConf Argentina

El Dilema de la Simplicidad - RubyConf Argentina

Video: https://vimeo.com/116458315

Over the years we've learned to pay attention to the importance of a number of highly desirable qualities in software: readability, maintainability, adaptation to change. We've accepted these values as good and actively pursue them yet we consistently ignore what is probably the best method of achieving these qualities, it's staring us right in the face now.
Slowly but steadily the philosophy of embracing simplicity in software design by carefully calculating and minimizing unnecessary complexity is gaining traction in our community, and for a good reason: it organically pushes us to the best software practices we all know and love, it both embraces all the core principles the ruby community has developed over the years while rejecting many of the common practices we carry based on inertia but which directly contradict these values.
In this talk I explore my journey on this shift in perspective from certain fragments of our community and how thinking about simplicity as one of our core values can push us to be better developers while producing better quality of software. We don't need our crutches anymore, let's drop them together!

Pablo Astigarraga

October 25, 2014
Tweet

More Decks by Pablo Astigarraga

Other Decks in Programming

Transcript

  1. Dilema
    Simplicidad
    El de la

    View Slide

  2. @poteland
    !
    "

    View Slide

  3. View Slide

  4. 2013

    View Slide

  5. 2012

    View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. KEYNOTE

    View Slide

  15. ánico
    Felicidad
    Inseguridad
    Orgullo
    =D
    Ham
    bre (?
    Emoción
    M
    ás Pánico
    \o/
    D=

    View Slide

  16. Simplicidad

    View Slide

  17. Acto I
    obsesiones y caminos

    View Slide

  18. Calidad

    View Slide

  19. Experiencia de Usuario

    View Slide

  20. Robustez

    View Slide

  21. Seguridad

    View Slide

  22. Mantenibilidad

    View Slide

  23. Performance

    View Slide

  24. Son
    Importantes

    View Slide

  25. Acto II
    trampas y definiciones

    View Slide

  26. Buzzword

    View Slide

  27. Definición

    View Slide

  28. No es trivial
    :\

    View Slide

  29. Percepción

    View Slide

  30. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  31. View Slide

  32. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  33. View Slide

  34. Percepción
    (de nuevo)

    View Slide

  35. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  36. Programación

    View Slide

  37. Ruby

    View Slide

  38. Rails

    View Slide

  39. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  40. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  41. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  42. class FictionalModelsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  43. `rake middleware`

    View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. class SessionsController!
    < ApplicationController!
    def new!
    ! ! !
    render :new!
    end!
    end!
    @model = FictionalModel.last

    View Slide

  51. View Slide

  52. Complejidad
    escondida.

    View Slide

  53. Que pasa si
    se rompe?

    View Slide

  54. View Slide

  55. (╯°□°)╯︵ sʃıɐᴚ

    View Slide

  56. Reescribirlo
    en Node!

    View Slide

  57. View Slide

  58. Seguimos sin
    una
    definición :(

    View Slide

  59. TRAMPA.

    View Slide

  60. Cuando
    importa la
    complejidad?

    View Slide

  61. enfrentarla
    Cuando hay que

    View Slide

  62. entenderla.
    Cuando hay que

    View Slide

  63. “Algo que
    podes
    entender
    rapidamente”

    View Slide

  64. Un stack
    más chico.

    View Slide

  65. Microservicios

    View Slide

  66. Acto III
    pelear con los ojos vendados

    View Slide

  67. Que cambia
    siendo
    simple?

    View Slide

  68. Que pasa con
    la calidad?

    View Slide

  69. Simple != Bueno

    View Slide

  70. Bueno == Bueno

    View Slide

  71. La simplicidad
    facilita la
    calidad

    View Slide

  72. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  73. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  74. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  75. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  76. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  77. uri = URI('http://example.com/index.html')!
    payload = { limit: 10, page: 3 }!
    uri.query = URI.encode_www_form(payload)!
    !
    res = Net::HTTP.get_response(uri)!
    !
    puts res.body if res.is_a (Net::HTTPSuccess)
    Experiencia de Usuario

    View Slide

  78. Total:
    URI()!
    URI.encode_www_form() !
    Net::HTTP.get_response()!
    Net::HTTPSuccess

    View Slide

  79. \

    View Slide

  80. Python

    View Slide

  81. Experiencia de Usuario
    payload = {'key1': 'value1', 'key2': 'value2'}!
    !
    r = requests.get(!
    “http://httpbin.org/get",!
    params=payload!
    )!
    !
    r.status_code #=> 200

    View Slide

  82. Experiencia de Usuario
    payload = {'key1': 'value1', 'key2': 'value2'}!
    !
    r = requests.get(!
    “http://httpbin.org/get",!
    params=payload!
    )!
    !
    r.status_code #=> 200

    View Slide

  83. Experiencia de Usuario
    payload = {'key1': 'value1', 'key2': 'value2'}!
    !
    r = requests.get(!
    “http://httpbin.org/get",!
    params=payload!
    )!
    !
    r.status_code #=> 200

    View Slide

  84. Experiencia de Usuario
    payload = {'key1': 'value1', 'key2': 'value2'}!
    !
    r = requests.get(!
    “http://httpbin.org/get",!
    params=payload!
    )!
    !
    r.status_code #=> 200

    View Slide

  85. Total:
    requests.get()!
    http

    View Slide

  86. Intuitivo

    View Slide

  87. Entendible
    rápidamente.

    View Slide

  88. Robustez

    View Slide

  89. 100
    funcionalidades
    =
    1 bug

    View Slide

  90. Más
    funcionalidad
    =
    Más bugs

    View Slide

  91. Menos
    funcionalidad
    =
    menos bugs

    View Slide

  92. Los bugs son
    inevitables.

    View Slide

  93. Más fácil de
    arreglar.

    View Slide

  94. Simple
    =
    (más) robusto.

    View Slide

  95. Seguridad

    View Slide

  96. Más
    funcionaidad
    =
    Más bugs

    View Slide

  97. Más funcionalidad
    =
    más vulnerabilidades

    View Slide

  98. Rails.

    View Slide

  99. Mantenibilidad

    View Slide

  100. Entendimiento
    Reescritura

    View Slide

  101. Facil de
    entender?

    View Slide

  102. Facil de
    arreglar.

    View Slide

  103. Performance

    View Slide

  104. Cosas
    =
    Tiempo

    View Slide

  105. Más cosas
    =
    más tiempo

    View Slide

  106. Encontrar
    cuellos de
    botella.

    View Slide

  107. Síntomas de
    Complejidad

    View Slide

  108. Relational vs Graph

    View Slide

  109. No se
    enfoquen en
    los síntomas.

    View Slide

  110. Reduzcan la
    complejidad.

    View Slide

  111. Lo demás
    viene gratis.

    View Slide

  112. Epilogo
    ganar batallas perdidas

    View Slide

  113. Funcionalidad
    =
    Complejidad

    View Slide

  114. Big O

    View Slide

  115. Tradeoffs

    View Slide

  116. Michel Martens

    View Slide

  117. github.com/soveran

    View Slide

  118. Tomar decisiones
    conscientes

    View Slide

  119. Gracias!

    View Slide

  120. View Slide

  121. Preguntas?
    @poteland

    View Slide

  122. Resources
    @poteland

    View Slide