Perdí la fe en la industria, me quemé, pero el culto a la herramienta me salvó



A menudo critico las tecnologías que considero inadecuadas, y en respuesta recibo (junto con argumentos) pura ira y dolor. A veces fisico.

Los desarrolladores toman la cr√≠tica de sus tecnolog√≠as favoritas muy personalmente por alguna raz√≥n. Este "culto a la herramienta" es un fen√≥meno tan extra√Īo que no puedo explicarlo l√≥gicamente. Algunos dicen que todos son propensos, porque los procesos de pensamiento de un codificador se entrelazan muy profundamente con su lenguaje de programaci√≥n. Algunos dicen que es la falacia de un joven: escribes algo por primera vez, funciona, y comienzas a tratar tu lenguaje como algo divino.

Sea lo que sea, nunca lo entendí.

Siempre consideré a los cultistas como imbéciles. Pero siempre trato de entender por qué los imbéciles se convirtieron en ellos, por qué he evitado ese destino. Empiezo a pensar y bam! - Resultó que también soy un imbécil. Soy un cultista que adora a F #. Y, por supuesto, hay una historia detrás de esto.



Comenc√© como desarrollador junior de C #. Luego, Xamarin en bruto, desarrollo de Android, todo el shebang. Mis primeros pasos en el trabajo estuvieron llenos de dolor. Tuve que escribir una aplicaci√≥n de Android sola basada en capturas de pantalla y gifs de la versi√≥n de iOS. Solo se compil√≥ en cualquier otro momento, los buga estaban por todas partes, y el √ļnico comentario que recib√≠ fue: "¬Ņpor qu√© no es as√≠ en la captura de pantalla?". Fue una pesadilla y me fui r√°pidamente.

Luego pas√© medio a√Īo aprendiendo a codificar en casa, y luego consegu√≠ un trabajo en un gran personal. All√≠ estaba mucho m√°s organizado: equipo, mentores, ex√°menes, patrones, revisi√≥n de c√≥digo, linters estrictos, altos est√°ndares de calidad de c√≥digo, legibilidad y rendimiento. En una palabra, todo estaba maduro. Y pens√© que as√≠ deber√≠a funcionar. Pero, como result√≥, fue una pesadilla a√ļn mayor.

Durante m√°s de un a√Īo, todo nuestro equipo estaba creando un m√≥dulo para una herramienta que funcionaba con herramientas que se usaban para hacer otras herramientas. Probablemente los mismos que usamos para hacer los m√≥dulos. Todos los d√≠as ten√≠amos que llamar a indios y estadounidenses e informar sobre Dios sabe qu√©.

En alg√ļn momento me di cuenta de que estaba haciendo cada vez menos, pero nada cambi√≥. Ment√≠ entre dientes en ingl√©s roto: ‚ÄúDurante toda la semana pasada busqu√© un insecto. Todav√≠a no hay √©xito. Continuar√° ".

"Ok Phil, suena genial" - respondieron mis socios transatl√°nticos.

En un momento, desesperado y vergonzoso, fui a la gerencia y pedí que me despidieran, pero por alguna razón me dieron un aumento. Ya he contado esa historia antes. No estaba feliz ni triste: parecía una broma surrealista, como si la lógica de este mundo se estuviera desmoronando.

Por extra√Īo que parezca, por aburrimiento y por ser extremadamente ambicioso, decid√≠ desarrollar las cosas en casa y hacer todo "correctamente". Ten√≠a numerosas ideas sobre c√≥mo usar proyectos de software para mejorar el mundo y mi billetera. Hice todo por el libro: un documento de dise√Īo, arquitectura, requisitos del sistema, proyectos VSTS. Todo estaba organizado y maduro, como en las corporaciones.

No estaba llegando a ninguna parte.

Conclusi√≥n natural: la idea era una mierda. C√≥digo antiguo en el contenedor, nueva idea. Mismo resultado. Comienza de nuevo. Esto continu√≥ un par de veces. Le digo a mis compa√Īeros de trabajo y est√°n confundidos. ¬ŅQu√© estoy haciendo mal? Lo hago exactamente de la misma manera que aquellos que ya se hicieron ricos por la parte posterior.

Las personas con mi (alto) nivel de autoestima a menudo están mejor que otras, pero a veces tienen que pagar por ello. Necesita mentirse a sí mismo para hacer frente al fracaso. Y me dije: cualquier desarrollador es capaz de cualquier cosa. Se trata de cómo se hace, y mis requisitos para "cómo" son demasiado altos. No son aptos para una startup doméstica y no son dignos de tareas comerciales sin sentido. Pensamiento siguiente: "No estoy listo para abandonar mis estándares de calidad". Incluso si necesito hacer una aplicación que se pedo cuando tocas la pantalla, la haré lo más hermosa y pensada posible.

Así que establecí un negocio local de culto de carga en casa. Traído sobre todo - rituales, procesos, estándares - pero no la carne real de la cosa. Interpreté a un desarrollador de negocios sin un negocio, como un hombre de las cavernas que hizo una pista y una torre de vigilancia de paja y esperaba que aterrizaran pájaros de acero en ella.

Escribí montones sobre montones de código formal y estricto que no me acercó más al resultado final, sino todo lo contrario. Si lo piensas bien, mi carrera es una historia de fracasos y decepciones. Lo dejé por completo y solo vi programas de televisión en el trabajo mientras tomaba 16 tazas de café al día.

En el fondo, noté un artículo de Habr sobre F #, lo probé y pensé "¡Hm, no está mal!". Mi empleador felizmente pagó por un mes de estudio para mí (aunque él no lo sabe).

F # no fue difícil de aprender, ya que tenía el mismo tiempo de ejecución que C # y ya usaba el enfoque funcional para programar en TypeScript todos los días. Me di cuenta de que puedo transferir cualquiera de mis proyectos a F #. Dejemos mi habilidad técnica fuera de la ecuación por un momento, ya que todo es relativo. En los equipos en los que trabajo soy genial, pero en un equipo de, por ejemplo, desarrolladores de F #, no podría ser más que un conserje.

Pero podía resolver problemas en un nivel básico, aunque en el fondo lo sabía: realmente no podía resolver nada. Continuaré arrojando conocimiento a la basura. Perdí completamente mi fe en la programación.

Un día decidí que ya era suficiente. Iba a renunciar. Era un frío y oscuro día de invierno. Salí de la oficina, me subí a mi auto y no arranca. Después de un tiempo, el motor finalmente cobró vida. No sé si noté el humo del olor a plástico quemado antes, pero luego estalló un fuego debajo del capó. Un par de segundos después, estaba corriendo por el estacionamiento diciéndoles a todos que alejaran sus autos del mío.

Cinco minutos despu√©s de p√°nico y caos, solo quedaba una vieja carcasa de auto en llamas y un tel√©fono con est√ļpidos videos de YouTube. Era -30C, y estaba con una capa ligera de un hombre que ten√≠a la intenci√≥n de conducir a casa en un autom√≥vil c√°lido. Completamente gastado y moralmente destruido. No tengo dinero para un taxi y me preocupo demasiado por m√≠ como para subirme al transporte p√ļblico. Camin√© a casa, unos 10 km. En casa necesitaba ayudar a mi esposa con el ni√Īo, comer, llevarlos a la cama, hacer mil cosas peque√Īas. Pero con el tiempo ya no hay nada por lo que distraerme y me qued√© cara a cara con mi insomnio y una comprensi√≥n: no soy digno de nada, nunca tendr√© √©xito.

En esta, la peor tarde de mi vida, todav√≠a fr√≠a por un paseo helado a casa, me di una √ļltima oportunidad.



Me sent√© y escrib√≠ un peque√Īo bioma digital en F #, donde las unidades de aprendizaje autom√°tico interact√ļan entre s√≠ y se desarrollan, mientras juego con los par√°metros y veo lo que sucede.

Y sí, esa noche probablemente me volví un poco loco.

Usualmente uso una mezcla del modelo de programaci√≥n ascendente y descendente. Esbozo una soluci√≥n aproximada con pseudoc√≥digo, luego empiezo a escribir los detalles m√°s importantes como m√≥dulos separados. De peque√Īo a grande.

Pasando del pseudocódigo al código real, completo uno o dos módulos grandes y verifico si algo funciona. Por lo general, no es así, así que empiezo a repetir, repitiendo este proceso de principio a fin hasta que funcione. Pero la mayoría de las veces me doy por vencido después de la 5ta o 6ta iteración.

Intent√© el mismo enfoque con F #. Tuve una visi√≥n general del proyecto, y luego la soluci√≥n fue construir, ladrillo por ladrillo, en mi cabeza. Se te ocurre un caso tras otro y luego, en alg√ļn momento, te das cuenta de que sabes c√≥mo hacerlo funcionar. Y luego comienzas a codificar y te das cuenta de que no, no lo haces. Los pensamientos no se traducen a lenguajes de programaci√≥n, aunque a menudo piensas en ellos. Me pasaba esto todo el tiempo.

Esta vez, sin embargo, fue diferente. Creé un archivo .txt en VSCode y escribí el pseudocódigo para una función que describe el ciclo de vida de mi aplicación. Y me di cuenta de que mi pseudocódigo es válido en F #. No es necesario traducir nada, solo escribí la función principal de mi proyecto. Bien, cambié la extensión del archivo, lo agregué a la solución limpia. Estaba mi función del ciclo de vida. Acepta el estado mundial actual, algo que lo procesa (el mundo mismo) y escupe el estado actualizado, algo que lo traduce en un conjunto de parámetros de IA y viceversa, además de la propia IA que acepta parámetros y escupe la solución. .

Entonces fue simple. Tomas el estado, lo conviertes en parámetros de IA, los alimentas a la IA, vuelves el resultado al estado mundial, lo entregas al juego y el resultado vuelve a la función del ciclo de vida. Una hermosa recursión, un algoritmo simple, un código sublime, todo el GoF listo para usar. Todo lo que quedaba era hacerlo funcionar.

Pero la cuestión es que ya no tengo que pensar en la arquitectura. Escribo lo que los desarrolladores de Java y Sharp llaman "inversión del contenedor de control", una función que toma la función del ciclo de vida y pasa a través de las funciones de mis módulos (II, Juego). VSCode lo resalta en rojo porque no tiene funciones ni módulos, pero tengo lo que necesito: tan pronto como desaparezcan los resaltados en rojo, puedo construir el proyecto y listo.

Tomo los módulos y los hago, uno por uno, trabajando de la misma manera. Todo el proyecto son 5 archivos. El archivo AI tiene 500 líneas, mucho, pero la mayoría si funciona realmente bien. La belleza de este enfoque es que podría escribir una función del ciclo de vida laboral, el corazón de mi aplicación, sin describir nada más.

Toda la arquitectura tiene 10 l√≠neas de c√≥digo, escritas en un par de minutos. Sin interfaces, telas abstractas, locomotoras, todas estas DefaultInterfaceNameClasses y otras cosas que tengo que hacer en C # antes de siquiera entender lo que quiero crear. Escribes un n√ļcleo tonto que simplemente resuelve el problema, y ‚Äč‚Äčes m√°s hermoso que tus sufrimientos a nivel empresarial en Java o Sharp.

Y lo hice todo simplemente escribiendo mis pensamientos en el editor, como si estuviera pensando en F #. En lugar de delinear un plan en los comentarios de C #, escrib√≠ funciones de trabajo. En lugar de describir decenas o incluso cientos de interfaces, hay un peque√Īo archivo con el modelo de dominio de la aplicaci√≥n. Hizo clic en "construir". Recibi√≥ una soluci√≥n de trabajo. En una noche Con un c√≥digo de calidad que puedo dar con confianza para revisar. Tan simple como eso.



No s√© cu√°l es el problema: si F # es una tecnolog√≠a monumentalmente incre√≠ble, o si simplemente me queda perfectamente o si se cre√≥ espec√≠ficamente para estas tareas, ¬Ņcu√°l es la diferencia? Lo importante es que en ese momento me estaba hundiendo y necesitaba un bote salvavidas. La vida me arroj√≥ F # y sal√≠ de all√≠. Ahora no es solo otra tecnolog√≠a sin alma para m√≠, es un gran trato emocional.

Ahora, cuando escucho a alguien rega√Īar a F # - ‚Äú¬°Una tecnolog√≠a muerta! Un juguete geek ... "- Siempre recuerdo la fr√≠a noche de invierno, el auto en llamas, el cigarrillo congelado en mi boca, la depresi√≥n y F # que me sac√≥ de √©l. Es como si alguien arrojara mierda a mi mejor amigo.

Puede parecer extra√Īo para un extra√Īo, pero si vivieras ese d√≠a en mi lugar, habr√≠as reaccionado igual. Creo que eso es com√ļn en cualquier cultista tecnol√≥gico. Se enamoraron de sus idiomas, porque tienen un apego emocional a las circunstancias que les hicieron descubrirlo. Y luego vengo y escupo directamente en su alma. ¬ŅQui√©n es el idiota ahora? Yo soy No lo volver√© a hacer, espero.

Source: https://habr.com/ru/post/440914/


All Articles