Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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!

6ed7c9c01ba124114f965ad3660bc276?s=128

Pablo Astigarraga

October 25, 2014
Tweet

Transcript

  1. Dilema Simplicidad El de la

  2. @poteland ! "

  3. None
  4. 2013

  5. 2012

  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. None
  14. KEYNOTE

  15. ánico Felicidad Inseguridad Orgullo =D Ham bre (? Emoción M

    ás Pánico \o/ D=
  16. Simplicidad

  17. Acto I obsesiones y caminos

  18. Calidad

  19. Experiencia de Usuario

  20. Robustez

  21. Seguridad

  22. Mantenibilidad

  23. Performance

  24. Son Importantes

  25. Acto II trampas y definiciones

  26. Buzzword

  27. Definición

  28. No es trivial :\

  29. Percepción

  30. class FictionalModelsController! < ApplicationController! def new! ! ! ! render

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

    :new! end! end! @model = FictionalModel.last
  33. None
  34. Percepción (de nuevo)

  35. class FictionalModelsController! < ApplicationController! def new! ! ! ! render

    :new! end! end! @model = FictionalModel.last
  36. Programación

  37. Ruby

  38. Rails

  39. class FictionalModelsController! < ApplicationController! def new! ! ! ! render

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

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

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

    :new! end! end! @model = FictionalModel.last
  43. `rake middleware`

  44. None
  45. None
  46. None
  47. None
  48. None
  49. None
  50. class SessionsController! < ApplicationController! def new! ! ! ! render

    :new! end! end! @model = FictionalModel.last
  51. None
  52. Complejidad escondida.

  53. Que pasa si se rompe?

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

  56. Reescribirlo en Node!

  57. None
  58. Seguimos sin una definición :(

  59. TRAMPA.

  60. Cuando importa la complejidad?

  61. enfrentarla Cuando hay que

  62. entenderla. Cuando hay que

  63. “Algo que podes entender rapidamente”

  64. Un stack más chico.

  65. Microservicios

  66. Acto III pelear con los ojos vendados

  67. Que cambia siendo simple?

  68. Que pasa con la calidad?

  69. Simple != Bueno

  70. Bueno == Bueno

  71. La simplicidad facilita la calidad

  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
  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
  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
  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
  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
  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
  78. Total: URI()! URI.encode_www_form() ! Net::HTTP.get_response()! Net::HTTPSuccess

  79. \

  80. Python

  81. Experiencia de Usuario payload = {'key1': 'value1', 'key2': 'value2'}! !

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

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

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

    r = requests.get(! “http://httpbin.org/get",! params=payload! )! ! r.status_code #=> 200
  85. Total: requests.get()! http

  86. Intuitivo

  87. Entendible rápidamente.

  88. Robustez

  89. 100 funcionalidades = 1 bug

  90. Más funcionalidad = Más bugs

  91. Menos funcionalidad = menos bugs

  92. Los bugs son inevitables.

  93. Más fácil de arreglar.

  94. Simple = (más) robusto.

  95. Seguridad

  96. Más funcionaidad = Más bugs

  97. Más funcionalidad = más vulnerabilidades

  98. Rails.

  99. Mantenibilidad

  100. Entendimiento Reescritura

  101. Facil de entender?

  102. Facil de arreglar.

  103. Performance

  104. Cosas = Tiempo

  105. Más cosas = más tiempo

  106. Encontrar cuellos de botella.

  107. Síntomas de Complejidad

  108. Relational vs Graph

  109. No se enfoquen en los síntomas.

  110. Reduzcan la complejidad.

  111. Lo demás viene gratis.

  112. Epilogo ganar batallas perdidas

  113. Funcionalidad = Complejidad

  114. Big O

  115. Tradeoffs

  116. Michel Martens

  117. github.com/soveran

  118. Tomar decisiones conscientes

  119. Gracias!

  120. None
  121. Preguntas? @poteland

  122. Resources @poteland