
Durante la siguiente discusión, un amigo expresó un pensamiento que me impactó mucho. “En los YaP más populares, hay muchas maneras diferentes de hacer lo mismo. Esto lleva a problemas. Pero en Go, no todo es así. La filosofía del lenguaje es que en Go diferentes desarrolladores resuelven los mismos problemas de la misma manera. Por lo tanto, su código es fácil de leer, predecible y confiable. Y entonces las grandes empresas eligen Go ". Este es un argumento bastante poderoso que debe considerarse cuidadosamente antes de refutarlo.
Por lo tanto, lo extendí dos veces, aferrándome a la falta de genéricos, y me llevé una idea inteligente, viví con él durante varios días y, en algún momento, formé su visión sombría.
Mi trabajo es elegir la solución más adecuada entre un número infinito de combinaciones. Esto es lo que me pagan, y esto es por lo que amo mi trabajo y, por lo tanto, mi vida. Pero me dicen: no se necesita una súper solución. Necesitas lo de siempre. Porque el producto terminado es más importante que su implementación.
Si me arrojan a la calle y se hacen el tonto en mi lugar, él puede trabajar fácilmente con mi código. Entonces la compañía estará mucho más cómoda. Las empresas no quieren depender del azar. La idea de que el mal humor del desarrollador líder obtendrá una parte de las ganancias del negocio no es atractiva para los altos directivos. Se convirtieron en altos directivos porque saben cómo evitar situaciones en las que su negocio sagrado pierde dinero. Y ahora vivimos en un momento en que "bien hecho" y "rentable" son dos cosas diferentes.
Y entiendo cómo llegamos a esto. Explicaré ahora, mira tus dedos:

Yo, como la mayoría de los ingenieros, creo que hago grandes cosas. Lo que invento, automatizo, hago con mi trabajo y mi cerebro, la vida de toda la humanidad es mejor, mientras que todos los oscurantistas solo rechinan la lengua. Pero luego me saco la nariz del editor de código y me horroriza lo cruelmente equivocada que estoy.
¿Qué demonios estoy haciendo?
Así que pienso en la arquitectura de un sistema altamente cargado, pero en el 95% de los casos lo usarán para ordenar rápidamente las selfies de mi teléfono con patrones y fotos de mi querido perro. Entonces, estoy desarrollando un cliente VPN, ¿y qué harán con él? ¿Mira todo tipo de porno y estúpidas películas de piratas?
Mis cerebros son servidos por una pequeña lista de deseos minuto a minuto para que la gente me traiga dinero, para que yo también satisfaga mi lista de deseos.
Hace cosas buenas, pero su porcentaje es insignificante. La mayoría atiende necesidades extravagantes que simplemente no existían antes porque TI no existía. Es decir, los ingenieros no hacen grandes cosas, los ingenieros simplemente mantienen la infraestructura para transferir la masa entre las personas.
En tales circunstancias, escribir un buen código ya no es necesario. Esto solo es necesario para que me divierta más trabajando, y no me quemaré más. Pero tarde o temprano, el gerente superior viene y dice: "Eso es todo, clavar y bala". Es hora de cortar el botín ".
En lugar del "bien universal" abstracto, TI aprendió a disfrutar de una lista de deseos moderada y solo por eso se ha convertido en una industria gigantesca, donde trabajan cientos de millones de personas. La programación solía ser una cuestión de élite, ahora cualquier tonto se sentará durante un año más o menos y escribirá el código.
Y cuando ingrese a la industria, no habrá tiempo para profundizar: el producto se necesita esta noche, de lo contrario perderemos dinero. Profundizar y aprender tecnología se convierte en un pasatiempo, necesario solo para no volverse loco al darse cuenta de su propia inutilidad.
En un sistema en el que necesita lanzar una nueva característica al mercado una vez por semana, necesita enfoques simples y herramientas primitivas. Cuando a algún desarrollador genial se le ocurre una nueva tecnología, trata de hacerlo para que la mayoría lo solicite, porque la demanda de la mayoría es el principal valor del mundo moderno. Es por eso que hay tales filosofías y tales aquí Go.
Y creo que no necesito todo este jodido. Todo esto causa rechazo.
Si observa de cerca, mi VSCode está lleno de síntomas peligrosos. Mi tslint no me permite agregar un espacio extra. Mi código no se construye si nombro una variable con la letra incorrecta. Mi compilador no funcionará porque no he agregado comentarios al método público. Aquí todo es simple: escriba, chicos, el mismo código. Código sin rostro Esto no es una novela para ti, ¿qué demonios es el estilo del autor?
En general, estoy de acuerdo en que tales convenciones son algo bueno, pero solo mientras se relacionen con la apariencia del código. En el momento en que te quitan la oportunidad de elegir cómo funcionará este código es mi peor pesadilla. Imagina un caso: escribiste un módulo sensible al rendimiento complejo y te dicen: “Escucha, es demasiado complicado. Hagámoslo más simple, no es importante que funcione peor ". ¿Eso suena absurdo? Y así será. En serio Si ya lo es. No agregaron genéricos a Go porque los genéricos son complejos.
Go es un efecto comercial, no una solución de ingeniería. Él se contradice a sí mismo. Aquí quiere confiabilidad, y esto deja la complejidad. Pero la complejidad en la industria surgió por la confiabilidad. Los genéricos existen solo en aras de la fiabilidad, para anticipar posibles errores de tiempo de desarrollo. Y sí, son bastante complicados.
En programación, quiero ser creativo. Quiero tener una gran cantidad de opciones al diseñar un sistema. Simulamos la realidad en el mundo de las máquinas, pero lo sé con certeza: la realidad no es una cosa simple, no hay respuestas correctas o incorrectas. Y tengo la sensación de que tecnologías como Go están buscando respuestas simples. Al igual, tengamos una decisión correcta para cada tarea. Pero esto es un engaño! Puede funcionar, pero siempre hay una mejor solución. Y bajo la presión del hecho de que no tenemos presupuestos para soluciones de alta calidad, matamos el software nosotros mismos, y luego nos sentimos decepcionados de que todo funcione mal.

La filosofía del código sin rostro quiere hacerme una máquina que copie y pegue la placa repetitiva. Y pensando en esto, llego a una contradicción aún más terrible.
Siempre he creído que el mensaje básico del desarrollo es: "Todo lo que se puede automatizar debe ser automatizado". Pero la ironía es que mi mensaje también es fatal.
No estoy listo para hacer algo que pueda hacer una máquina que puedo construir. Esto es irracional, y me enseñaron a ser racional. Pero como tengo que automatizar todo, resulta que tengo que automatizar y automatizar, es decir, el desarrollo. Y resulta que deberíamos estar contentos con los idiomas que gradualmente nos llevan a esto. Es decir, mi profesión, como la mayoría de los demás, en un mundo ideal no debería existir.
El progreso no puede ser detenido. Pero él puede ir de diferentes maneras, de lo cual estoy seguro. Si la programación ahora se convierte en la pista Go y las prácticas sin rostro, entonces llegaremos a la curva y no a la automatización optimizada que pueda imaginar.
Mi solución al problema es utópica y no resistirá las críticas. Entiendo que es demasiado tarde para ofrecerlo, pero aún así.
Separaría el negocio y la TI para que solo las organizaciones sin fines de lucro puedan programar. Y que su prioridad debería ser una mejora profunda de la tecnología, libre del flujo diario. Que el requisito "liberamos lo que es, de lo contrario la ganancia desaparecerá" era moralmente inaceptable. Haría todo lo posible para mantener el umbral para ingresar a la programación lo más alto posible para que las herramientas no se adapten al desarrollador promedio cuando un ingeniero experimentado y el graduado de los cursos de ayer se vean obligados a escribir el mismo código.
Sí, esto ralentizará el progreso durante siglos y privará a nuestras vidas de todos los buenos bollos en los que nos quedamos a diario. Pero al menos esto devolverá la idea de progreso al tipo en que creemos en los momentos de nuestros impulsos idealistas más fuertes.