Sobre debates técnicos (y ASP.NET Web Forms y ASP.NET MVC en particular)

Además del blog, podéis seguir a Scott en twitter: twitter.com/scottgu

Los debates técnicos son interminables en la blogosfera y en el twitter-verso, y pasan por todas las comunidades de desarrolladores. Cada lenguaje, cada framework, herramienta y plataforma se ha visto envuelto en algún debate.

Aquí os dejo algunas observaciones que he hecho sobre los años que llevo en debates técnicos en general, así como algunos comentarios sobre algunas discusiones recientes que he mantenido sobre ASP.NET Web Forms y ASP.NET MVC en particular.

Observaciones generales sobre debates técnicos

Aquí tenéis unas observaciones generales sin tener en cuenta ningún debate técnico concreto:

a) A los desarrolladores les encanta debatir y comparar lenguajes, frameworks, Apis y herramientas. Esto es así en cualquier comunidad de programadores (.NET, Java, PHP, C++, Ruby, Python, etc). Creo que se pueden ver estos tipos de debates técnico/religiosos de dos maneras:

  1. A menudo son molestos y una pérdida de tiempo.
  2. Son signos de una comunidad sana y activa (ya que suele haber gente apasionada en ambos lados del debate, y es mucho mejor que la apatía).

Personlamente creo que los dos puntos son verdad

b) Nunca hay una única forma de «hacerlo bien» para desarrollar algo. Como en una pregunta de una entrevista suelo preguntar a la gente que ordene una lista de números de la forma más eficiente que puedan. Muchos no lo hacen del todo bien. No es porque no conozcan algoritmos de ordenación, más bien es que nunca se han preguntado los requerimientos para ello – lo que es crítico para entender la mejor manera de hacerlo. ¿Cómo de grande es la secuencia de números? ¿Cómo de aleatoria es la secuencia (está parcialmente ordenada, cuál es la propagación de los números, son los números únicos, los repetidos están juntos)?¿Qué nivel de paralelismo tiene la arquitectura de la máquina?¿Puedes reservar memoria como parte del algoritmo o debe ser constante? Etc. Estas son preguntas importantes que hacerse ya que la forma más eficiente y óptima de ordenar un array de números depende de entender las respuestas.

Cuando alguien asegura que «sólo hay una forma de hacerlo» para resolver un problema está asumiendo un conjunto de requerimientos/escenarios/entradas – que rara vez es lo óptimo en otro escenario o para otro desarrollador. Y para afirmar lo obvio – la mayoría de problemas de programación son más complejos que ordenar un array de números.

c) Buenos programadores usando malas herramientas/frameworks pueden hacer buenas aplicaciones. Malos programadores usando buenas herramientas/frameworks pueden hacer malas aplicaciones. Sed muy cuidadosos haciendo suposiciones (buenas o malas) sobre la calidad de vuestro sistema basándoos en las herramientas/frameworks que uséis.

d)Desarrolladores (Buenos y malos) pueden hacerse fuertes aprendiendo nuevas ideas y aproximaciones. Incluso si no han usado algo nuevo directamente, el acto de aprender puede beneficiarles de maneras muy positivas.

e) Los cambios son una constante en la industria de la tecnología. Los cambios pueden asustar. Si te asusta el cambio es porque has dejado que te asuste. No te estreses por tener que parar y tener que aprender cosas nuevas – tendrás que hacerlo pocas veces. La mejor forma de que no te abrume es ser pragmático, mantente razonablemente informado a un alto nivel (no sólo sobre tecnologías y herramientas sino también sobre metodologías), y ten encuenta que si es importante aprender una nueva tecnología, tus capacidades actuales no se perderán sino que te ayudarán en el cambio. Sintaxis y APis son rara vez la parte importante en el desarrollo – resolver problemas, empatía con el cliente, y la habilidad de centrarse y ser disciplinado en un proyecto es mucho más importante.

f) Algún consejo que doy a mi equipo cuando trabajo y me comunico con otros:

  1. Rara vez ganarás un debate con alguien diciéndole que es un estúpido – no importa lo bien intencionado o elocuente que sea tu explicación.
  2. Siempre habrá alguien más inteligente en el mundo que tu – no asumas siempre que no está en la misma que tú.
  3. La gente con la que interactúas olvidan rápidamente los elogios que te dan, sin embargo se acuerdan muy bien de los insultos – se sensato ya que más tarde volverán para vengarse.
  4. La gente puede cambiar su mente y lo hacen – se abierto a ser persuadido, y no vayas en contra de alguien si también ha cambiado su mente.

g) Siempre encuentro irónico escuchar a gente quejarse de que la abstracción en la programación no es buena. Especialmente cuando esas quejas se publican en blogs – cuyo contenido se muestra en HTML, formateado con CSS, es interactivo gracias a JavaScript, transportandose por HTTP, e implementado en el servidor con aplicaciones escritas con lenguajes de alto nivel, usando frameworks de orientación a objetos con garbage collector, ejecutándose tanto en modo interpretado  o con compilación JIT, y que en el último paso se guarda el contenido del blog y los comentarios en bases de datos relacionales a traves de consultas SQL. Todo esto corriendo en una máquina virtual en un servidor – con el sistema operativo de la máquina virtual particionando memoria entre el nucleo y el modo de usuario, sincornizando procesos con threads, lanzando eventos con señales, y usando un API de almacenamiento para guardarlo en disco. Trata de mantener todo esto en la cabeza la próxima vez que leas algo como «ORM vs Procedimientos almacenados» o «Controles de servidor -bueno ó malo?». Los debates más interesantes son sobre cuales con las mejores abstracciones que podemos hacer para resolver un problema.

h) La historia de los debates de programación son un largo bucle infinito – con la mayoría de ideas de programación ya resultas antes. Y lo que es peor – muchos de los problemas sobre los que debatimos ya se solucionaron hace mucho con LISP y Smalltalk. Irónicamente, aunque resolvían un montón de problemas elegantemente, estos lenguajes están en desuso. Imagina porqué.

Algunos comentairos especificos sobre debates de ASP.NET Web Forms / ASP.NET MVC:

Aquí tenéis unos cuantos comentarios sobre unos debates que he tenido con la comunidad sobre cuál es la solución mejor ASP.NET Web Forms ó ASP.NET MVC:

a) Web Forms y MVC son dos formas de crear aplicaciones ASP.NET. Son dos buenas opciones. Cada una puede ser «la mejor opción» para una solución en particular dependiendo de los requisitos de la aplicación y del background del equipo que esté involucrado. Puedes crear buenas aplicaciones con cualquiera de las dos. Puedes crear malas aplicaciones con cualquiera de las dos. No eres mejor o peor programador dependiendo de la que eligas. Puedes ser bueno o malo con ambas.

b) Los equipos de ASP.NET y Visual Studio están invirtiendo fuertemente tanto en Web Forms como en MVC. Ninguna va a desaparecer. Ambas tienen actualizaciones futuras en los próximos meses. ASP.NET 4 incluye grandes actualizaciones en Web Forms (ClientIds limpios, salida basada en CSS, menor ViewState, URL Routing, nuevos controles de datos y gráficas, nuevas caracterísitcas para datos dinámicos, nuevas apis para SEO, nuevo diseñaodr de VS y mejoras, etc, etc). ASP.NET4 también viene con ASP.NET MVC 2 que incluye muchas actualizaciones (helpers fuertemente tipados, modelo de validación, areas, mejor infraestructura, soporte asíncrono, más APIs de helper, etc, etc). No te angusties por si alguna va a desaparecer o porque tengas que cambiar algo. Sospecho que mucho después de que todos estemos muertos quedará algún servidor en Internet ejecuando tanto aplicaciones ASP.NET Web Forms como ASP.NET MVC.

c) Web Forms y MVC comparten más código/infraestructura/APIs que cualquiera en cualquier lado de un debate sobre ellas menciona: Autentificación, autorización, membership, roles, URL routing, caching, session state, profiles, configuration, compilacion, páginas .aspx, archivos .master, archivos .ascx, Global.asax, APIS de Request/Response/Cookie, Health monitoring, Process model, tracing, despliegue, Ajax, etc, etc, etc. Todas esas comunes que aprendes es válido para cualquiera de los dos. Seguiremos investigando y añadiendo características al núcleo de ASP.NET que funcionen para ambas (como el url Routing, Deployment, Output caching, Dataannotations etc.).

d) Suelo encontrar debates sobre modelos de programación apropiados y abstracciones un poco tontos. Tanto Web Forms como MVC son frameworks de abstracción para programar aplicaciones web, creado encima de un framework de abstracción mucho más amplio, programado ocn lenguajes de alto nivel, ejecutándose en un motor de ejecución abstracto que se ejecuta en otro motor mucho más abstracto aún llamado Sistema Operativo. Lo que estás creando con ello es HTML/CSS/JavaScript (todas las abstracciones persistidas como texto, transmitidas sobre HTTP – otro protocolo de abstracción de más alto nivel).

La cuestión interesante a debatir no es si las abstracciones son buenas o malas – sino cuáles abstracciones son las más naturales y cual se acopla mejor a los requerimientos/escenarios/desarrolladores de tu proyecto.

e) Estamos apunto de hacer una actualización del sitio www.asp.net. Como parte de ello iremos posteando algunos tutoriales (tanto para Web Forms como MVC). También vamos a crear turoriales y guias que ayuden a los desarrolladores a evaluar tanto Web Forms como MVC, aprender lo básico de cada uno, y deteriminar rápidamente cual es en la que se sienten más cómodos. Esto hará más sencillo para nuevos desarrolladores de ASP.NET, y para los que ya lo conocen, entender y evaluar cual de las dos les conviene más.

f) Decidir en un proyecto sobre usar Web Forms o MVC y estar feliz con la elección. Ambas son buenas opciones. Respeta las elecciones que otros hacen – la elección que han hecho también es buena si funciona bien para ellos. Ten en mente que ellos saben más sobre sus negocios y capacidades que tu. De la misma forma en la que tu conoces tus negocios y capacidades mejor que ellos.

g) Comparte ideas y mejores prácitcas con otros. De eso es de lo que van los blogs, foros y la comunidad. Lo que hace que funciones es que cuando hay gente que comparte ideas sabe que no se las van a destripar, y que serán tratados con respeto. Se constructivo no destructivo. Enseña no des conferencias. Recuerda que ahí fuera hay alguien del que puedes aprender.

Espero que sirva.

Scott.

Traducido por: Juan María Laó Ramos.

Artículo original.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *