Evangelistas contra hombres lobo


El nombre podría pretender ser una película B, pero de hecho se tratará de cosas mucho más mundanas, a saber: amor apasionado y a veces completamente irracional de los programadores y otras personas que promueven soluciones tecnológicas para el "grupo de plata": la creencia de que La solución tiene una amplia gama de aplicaciones.

Los programas son particulares


Comenzaré un poco desde lejos: el código del programa en sentido amplio es siempre una función particular que funciona estrictamente en un cierto rango de valores posibles. Cualquier salida fuera del rango es una situación de emergencia y un problema grave, que a menudo conduce a un alto (sin embargo, hay otros puntos de vista sobre estos temas, ver, por ejemplo, la ideología de Rust). En la electrónica moderna, mucho más código funciona en cajas de arena cercadas administradas por un código diferente y, por lo tanto, se libera de la responsabilidad de los bloqueos "graves": lo más probable es que su teléfono no se corrompa y ni siquiera requerirá un reinicio si una de las aplicaciones falla. Pero esto no cambia las especificaciones de cada bloque de código individual, ni cambia la necesidad de una coincidencia exacta del hardware en el que se ejecuta el programa con las expectativas de este programa: no importa cuán seguro sea Rust, no podrá ejecutar su código,compilado para una arquitectura de procesador diferente. Y cualquier extensión del rango de valores aceptables para el procesamiento, por ejemplo, la capacidad de los navegadores para ignorar y omitir el html "incorrecto", procesar y mostrar todos los "buenos", deben describirse explícitamente en el mismo código.

El código del programa no tiene la capacidad de replicarse, gracias a lo cual vivimos más o menos normalmente durante 60-90 años, a pesar de billones de fallas menores en nuestros cuerpos a nivel celular, y ni siquiera puede "ganar" naturalmente las leyes de la física, por ejemplo, de la segunda ley de la termodinámica y la interacción débil, gracias a la cual puedes soltar algo inadvertidamente de tus manos, pero recogerlo del suelo o del piso, porque no volará más allá del piso. Si el código del programa se rompe, se rompe.

Por supuesto, todo esto se opone a nuestra realidad objetiva. Si el código funciona (no hablemos de computación cuántica aquí) en un conjunto de ciertos estados discretos, incluso si hay muchísimos de ellos, entonces el mundo real funciona en un número infinito de estados en ciertos rangos. O en un estado mucho más amplio (orden astronómico) más discreto, si crees que la realidad tiene una naturaleza discreta.

Bueno, ¿por qué fue todo esto?


No, no por el hecho de que el código predeterminado es más "frágil" que mucho más en realidad, aunque esto es así, no es lo principal. Y lo principal aquí es que, por el hecho de que su solución de software puede funcionar teóricamente en un cierto rango de valores (es decir, resolver ciertos problemas específicos), no se deduce que los resolverá en realidad, posibles estados mucho más, y la idoneidad teórica del programa entre ellos puede ser completamente irrelevante.

Por ejemplo, el lenguaje de señal en el juego Factorio es Turing-complete:


Y con él incluso puedes mostrar clips. Ahora levante la mano, ¿quién cree que se escribirá software comercial en él, a pesar de que en teoría esto es completamente posible?

Sin embargo, cuando leo artículos sobre tecnologías, a menudo me encuentro con el hecho de que las personas que los escriben prefieren ser matemáticos fuertes y morir técnicamente correctos (el mejor, el peor tipo de corrección).

En teoría, la teoría no es diferente de la práctica.


¿Por qué están haciendo esto? Esta es una excelente pregunta, y personalmente encontré dos versiones: en primer lugar, algunos entienden con bastante honestidad la diferencia entre "tal vez en teoría" y "tal vez en la práctica", pero prefieren ignorarla en los artículos de manera bastante intencional, guiados por el principio "si gritas truenos - más se enterará de las personas ". Es cierto, la ironía aquí es que este principio tampoco es una bala de plata, y si gritas muy fuerte sin razón, la mayoría de la gente no sabrá cosas halagadoras sobre ti.

Bueno, y en segundo lugar, algunos realmente no entienden muy bien la diferencia, lo que da lugar a todo un conjunto de malas situaciones, desde "un científico violó a un periodista", cuando una persona que escribe artículos no es un autor directo de tecnología y, en general, incluso feliz de ser violada, por lo que cómo cree que una descripción más radical y "convexa" es de su interés o de la tecnología descrita; a situaciones en las que el autor simplemente cree en sus propias tesis amplias, a pesar de que básicamente no hay motivos para tal creencia.

Y sería muy bueno si la tesis del artículo siguiera siendo un problema teórico no demasiado importante, pero, por desgracia, se traduce en realidad. Desde mi punto de vista personal: no hace mucho tiempo pasé más de un día hábil explicando a mi colega que existe la eliminación del código no utilizado en el paquete web (sacudidas de árboles), pero funciona con principios bastante primitivos, por lo que el alcance de esto es bastante modesto , y no puedes confiar ciegamente en él sin un montón de trucos y comprobaciones adicionales(un excelente artículo, por cierto, pero yo mismo estaba cavando este material mucho antes). Podrías, por supuesto, culpar a un colega, pero yo mismo recuerdo la gran cantidad de artículos y materiales sobre el tema "¡ahora hay sacudidas de árboles en el paquete web, banzai!", Que no cubrió toda la modestia y primitividad de esto, pero, por el contrario, fue muy fuerte el hecho de que ahora nuestros ensamblajes se volverán pequeños y todo esto es absolutamente automático debido a la "magia" del paquete web.

¿Quién tiene la culpa y qué hacer?


Por supuesto, no creo que la voz de alguien que llora en el desierto (e incluso en el habr) cambie algo aquí, y al final, hay una proporción bastante grande de aquellos que describen el alcance de sus tecnologías de manera completamente intencional para parecer más atractivos. . Pero si alguien hace esto a propósito, PIENSEpor favor piénsalo. Al menos tenga en cuenta que si su programa o tecnología es capaz de hacer algo, desde este punto hasta el punto de que con la ayuda de su programa o tecnología realmente puede hacer algo en la práctica, especialmente para aquellos que no son los autores, un tiempo muy largo camino. Reconozca que si ha hecho algo que funciona en un caso específico en un proyecto de un tema específico con una lista específica de problemas, esto no le da ninguna razón para suponer automáticamente que su tecnología será útil en todas partes. Finalmente, tenga en cuenta que el código para "su" y el código para todos son dos grandes diferencias, y si coloca el código "para su" en código abierto, esto no lo convierte automáticamente en un código útil para otros desarrolladores.

All Articles