Adsence

jueves, 9 de febrero de 2017

Desarrollar software es una tarea muy compleja




Un buen software es poco común porque escribirlo es difícil. En resumen, todos sabemos que es difícil. Hablamos incesantemente de cómo es difícil. Y, sin embargo, también colectivamente parecen sorprendidos - sólo conmocionado! - cuando sucede lo esperable y el software que estamos expuestos o está trabajando en resulta pobre.

Esta es la disonancia cognitiva clásica: Aceptar que el software de escritura es difícil, pero esperando que todo lo que debe ser bueno.

También es una aplicación de una teoría del mundo justo de esfuerzo y logro. Que a pesar de las probabilidades, todo el que tiene la intención correcta en el corazón, y pone en el trabajo, tendrá éxito. No, no lo harán. Eso es simplemente delirante. Y esos delirios son todo menos inofensivos.

Cuando esperamos que el buen software sea el resultado más probable de la dificultad de escribirlo, nos estamos preparando para una decepción inevitable. Aún peor, si creemos que merecemos un buen software de nuestros esfuerzos imperfectos, proyectaremos los fracasos inevitables en todo el mundo y en todo menos en nosotros mismos.

El primer sospechoso habitual que ha sido acusado de responder por este sorprendente fracaso aún esperado es el de nuestras herramientas. Es la salida más fácil. Si usted está maldiciendo en su entorno de programación, no va a hablar de nuevo, no va a refutar sus cargos absurdos. Cuando compartes tu historia con tus amigos o colegas, por lo general hacen lo que la gente amable que saben que hacer: Están de acuerdo con usted. Ellos están de acuerdo, incluso si estás equivocado.

Esto infla una burbuja de competencia ilusoria con bondad y autoestima. Las herramientas no se defienden y sus compadres le complacen. Así que no hay nada que pinchar esa burbuja. (Bueno, a menos que te aventures en Internet, los extranjeros siempre están dispuestos a decirte lo incompetente que eres si no justificas las opciones tecnológicas que ya han hecho).

De todos modos, eso es un gran preámbulo para llegar a una verdad básica, pero incómoda: El software a menudo no es bueno porque sus creadores simplemente no son competentes desarrolladores de software. Hay muchas calificaciones a ese cargo, muchas circunstancias de alivio, y una definición muy amplia de "desarrollador de software competente". Pero es un comienzo útil para aceptar la responsabilidad. Y aceptar la responsabilidad es el primer paso para mejorar.

Porque considere la alternativa: si culpo mis herramientas o mi proceso o mis partes interesadas o la luna llena, consigo exonerarme, y mi ego, pero me quedo con mucho menos motivación para mejorar y muy poca penetración en cómo. Si en cambio acepto al menos la responsabilidad parcial, hay un lugar claro para empezar a mejorar.

Yo entiendo completamente cómo terminamos aquí. Con buenas intenciones, por supuesto. Aprender algo nuevo, como la programación, es desalentador. El síndrome de Imposter es abundante. Tenemos todo tipo de razones por las que queremos alentar y apoyar a todos los que tratan de atraer a las computadoras gruñonas a bailar.

Y hemos logrado un grado asombroso con esas intenciones. Comenzar a programar hoy nunca ha sido tan fácil. De fuente abierta a libros y tutoriales magníficos a bootcamps, es realmente asombroso.

Esto contrasta claramente con el hecho de que la programación también nunca ha sido más difícil de dominar, tanto en profundidad como en amplitud. Nunca ha habido más lenguas, más conceptos, más marcos, bibliotecas, herramientas. Es imposible saber, y mucho menos entenderlo todo. Qué extraña dicotomía. Pero esa dicotomía rara vez es el punto culminante de cualquier discusión con los recién llegados. Todos estamos tan ansiosos de alentar y exaltar con razón lo fácil que es para empezar. Así que, por supuesto, muchas personas se sienten un poco erróneas cuando su falta de competencia conduce al fracaso. Y por supuesto van a buscar chivos expiatorios, como malas herramientas o mala documentación.

Es por eso que vale la pena reflexionar sobre qué mal servicio podemos ofrecer a aquellos que buscan aprender programación al proclamar lo fácil que es ahora. Sí, hemos hecho que sea más fácil y menos intimidante empezar. Ese es el verdadero progreso. Pero empezar es, por definición, sólo el primer paso.

Creo que es hora de hablar con más franqueza sobre el paso dos, tres y mil. Para dejar de esperar que todo el mundo que se dispone a desarrollar software va a terminar con código hermoso y las estructuras de mantenimiento como el resultado más probable. Simplemente no. La mayoría del código es probable que siga siendo sólo eso: código. Impenetrable para los lectores secundarios, porque era apenas comprensible para su autor original. Es difícil de razonar porque la razón era un objetivo lejano detrás de "hacer que funcione lo suficientemente bien para enviar".

Algunos ambientes pueden hacer que sea un poco más o menos probable. Al igual que el viento detener un balon de futbol, algunos coches realmente se toman las curvas más rápido. Las herramientas absolutamente, positivamente importa. Sólo mucho menos de lo que nos gustaría dejar creer a los recién llegados.

El verdadero propósito de encontrar las herramientas adecuadas es cómo ayuda al progreso del desarrollador de software en su camino hacia la maestría.

Ahora me doy cuenta de que estoy hablando de mi propio libro aquí. Como desarrollador, he escuchado varias historias lamentables de toda la vida, culpando a los entornos de programación por software deficiente. Pero también es mi libro porque es mi propia historia: Un camino a la maestría pavimentado con mucha proyección hasta que me golpeó la chispa roja que encendió mi curiosidad y cambió mi trayectoria.
También es la suma de la observación de diez años desarrollando software y mirando a otros hacer lo mismo. Ver quién sigue creciendo y quién se asienta para la meseta. Las personas que se resignan a quejarse de su entorno sin tratar de mejorarlo normalmente caen en la segunda categoría. También lo hacen las personas que están ansiosas de saltar a una persecución sobrenatural o personal como explicación de por qué no pueden hacer que algo funcione.

Me gustaría ver menos gente atrapada en la meseta. La vida es más interesante cuando sigues subiendo. Y es más probable que lo haga si acepta las probabilidades: Desarrollara mal software durante mucho tiempo. Si aceptas la responsabilidad de esto, tienes la oportunidad de desarrollar lo que es al menos es pobre en nueva tecnologia y emocion, pero probablemente mejor desarrollado también.

No hay un marco o incluso un lenguaje que le permitirá evitar esta progresión. Sólo hay más o menos probabilidades de coincidir con sus sentimientos y encender tu motivación para entender todo. Encuentra algunos de esos puntos o motivaciones que te permitiran crecer y empiece a caminar.

La idea es poder seguir creciendo para con nuestro trabajo mejorar todo nuestro entorno.