El siglo de la galantería está pasando. El esta siendo reemplazado
la era de los sofistas, economistas y calculadoras; Fama
Europa desaparecerá para siempre.
E. Beck (Inglaterra, 1792)Por qué
Habiendo vivido una corta vida como programador, me pregunto: "¿Hubo algo interesante en la programación y, de ser así, qué fue lo que más llamó la atención?" Dependiendo del talento literario, la respuesta podría resultar en una novela, un tratado filosófico, un poema o una broma. Con el talento de Chekhov, uno podría escribir una serie completa de historias sobre la vida gris / vibrante de los programadores comunes con quienes la vida virtual mata / da a luz a una verdadera. ¿Pero dónde está Chéjov el programador?
A lo mejor de mis habilidades, me limito a una mezcla de ensayos al estilo de la "meditación en el sofá". Y aunque es el texto principal durante muchos años, todavía me arriesgo ...
La escena es Minsk.
Cómo me convertí en programador
Inicio . Después de graduarse de BSU, no nos dieron diplomas, sino que se fueron a estudiar en el sexto año sobre el tema de ACS. El país necesitaba asushnikami. Imagine la vida paradisíaca de un estudiante que sabe que tiene un diploma y que estudie durante otros seis meses.
La programación comenzó con el curso CCK: el sistema de codificación simbólica para la máquina Minsk-32. Y al principio había un registro de base misterioso. Mucho más tarde, hice una buena programación en ensamblador, pero imagina a una persona que no sabe nada sobre programación y que comenzó a aprender programación de Assembler, y no de un libro de texto, sino de alguna descripción técnica. Después de un sistema armonioso de física, era una especie de tontería (sospecho que realmente era una tontería). El alma de un físico no pudo llegar a un acuerdo con este tema. Y luego las dificultades cotidianas cayeron sobre mí y apenas fui a clases. En general, no sabía absolutamente nada sobre SSK. Pero ahora es el momento de tomar el examen. Los cinco años antes de este examen, honestamente, me preparé bien para el examen. Que hacer ahora Y luego me encuentro con un amigo del aquelarre siberiano (lo recuerdo con su disposición alegre y que los tres días de nuestro viaje a Siberia, los chistes contaban historias día y noche). Compartió su dolor por una cerveza. La solución se encontró rápida y audazmente: me pasa un examen por una botella de vodka (el asunto fue facilitado por la ausencia de marcas adicionales). Todo fue a O'key.
Un intento de poner excusas. "No soy el único culpable". Culpable y maestros. La calidad de la enseñanza fue en muchos sentidos desagradable. Un profesor, como ventaja de la computadora Minsk-32 sobre IBM con el sistema OS / 360, indicó que IBM solo trabaja con 8 bits (bytes), y Minsk-32 es cuatro veces más grande: 32 (palabra). Y, al parecer, se deduce que Minsk-32 es cuatro veces mejor que las computadoras IBM. Resultó que esto se aplicaba solo al direccionamiento. Todo esto cambió exactamente lo contrario.
Sin embargo, la situación descrita era característica no solo para la programación. En el cuarto año del Departamento de Física de BSU, se enseñó la disciplina "Teoría del campo cuántico" durante un año. Y durante todo un año no escuchamos nada sobre ella, pero presentamos nuestros propios resultados de un maestro-académico relacionado con su parametrización original del grupo de Lorentz. Esto puede ser importante, pero ¿dónde está la teoría del campo cuántico del aparato básico de la física fundamental? Por cierto, cualquier grupo puede, como me parece, ser parametrizado por un número infinito de formas y cada una de ellas tendrá algunas ventajas. ¿Te imaginas cuántas disertaciones puedes escribir? Debido al hecho de que hay varias universidades en la República de Bielorrusia, tengo una duda aún mayor sobre la calidad de su educación. Si no había suficientes maestros para uno, entonces no queda claro dónde fueron agrupados en varios. Con la "calidad" de especialistas tuvo que reunirse más tarde. Por ejemplo, en la ONG Agat. Un doctor en ciencias mejoró nuestras calificaciones de esta manera: él, suponiendo que "... el vector a es mayor que el vector b ..." llegó a grandes conclusiones. Pero los vectores están desordenados: nadie determinó la proporción de más / menos para ellos. El segundo usó implícitamente la proporción incorrecta “la suma de los productos es igual al producto de la suma:
$ en línea $ ∑_i∏_ja (i, j) = ∏_j∑_ia (i, j) $ en línea $ . De esto recibió muchas consecuencias. Y aunque admitió el error, por alguna razón consideró que las consecuencias eran correctas ("Lo necesito, por lo tanto es correcto"). Y el siguiente caso es generalmente patológico. El ingeniero de radio estaba considerando el vector eléctrico del campo electromagnético. En términos generales, gira. Recordando la mecánica de Newton, el ingeniero de radio introdujo una fuerza centrífuga que actúa sobre el extremo del vector de campo eléctrico y desarrolló una teoría completa a partir de aquí, refutando algunos Gonorovsky, aparentemente una autoridad en el campo de la ingeniería de radio.
Volviendo a la programación, sin embargo, no me gustaba gustar la programación, pero estaba imbuida de respeto por ella. Pero este es el mérito del mejor maestro: la vida.
Continuará Pero la vida se venga de nosotros por trucos. Me distribuí al Instituto de Física y comencé a esforzarme en el campo de la teoría axiomática del campo cuántico (¡Guau!). Pero pronto se dio cuenta de que, al recibir 86 rublos en sus manos y dar 30 de ellos por un apartamento, la teoría del campo cuántico axiomático no se presta mucho, y el problema "¿Cómo vivir?" Surge cada vez más. Conclusión: "No puedes vivir así". Por cierto, mi compañero de clase, un niño de tres años, que trabajaba como ajustador en Integral, recibió tres veces más que yo con un diploma BSU. Entonces, ¿cómo vives? Y aquí de nuevo, una jarra de cerveza ayuda. En una reunión con mis novias, me familiaricé con el director del Instituto Central de Investigación Científica de Telecomunicaciones e Informática; bajo las damas, nuestros hombres hablan después de todo sobre el trabajo. Y entonces él me dice lo que está haciendo y me parece que puedo ser un buen administrador de tareas. Después de todo, establecer objetivos no es resolverlos, ¿no es así? Y aquí estoy en el Instituto Central de Investigación Científica de Tecnología. Aunque, por desgracia, no es un director, sino un programador novato. Pero, ¿qué pasa con la física "alta"? Me consolé que estaría involucrado en una programación "alta", todo tipo de cálculos científicos. Lo principal está lejos de todos los débitos y créditos de contabilidad. La contabilidad y los bancos eran un símbolo de tedio y querían mantenerse alejados de ellos. Pero la vida tercamente pone nuestro esnobismo en la realidad. Y en realidad fue precisamente el débito y el crédito lo que luego tuvo que ser tratado. Aquí hay una evolución de los quarks a la programación contable. Sí, era contabilidad lo que tenía que ser programado. Después de todo, "el socialismo es contabilidad y control". Bueno, como el lugar de control ya estaba ocupado (la parte controlaba todo en nuestro país), tuvimos que lidiar con la contabilidad.
Moralidad
No amamos solo aquellas ciencias que no entendemos. Necesita ver los fundamentos, el respeto por el tema viene con una comprensión de los fundamentos, si es, por supuesto, los fundamentos.
¿Qué es la programación y el principal problema de las matemáticas?
Existe tal tedio: preguntar "¿Qué es la programación?", "¿Qué es la física?", "¿Qué es la matemática?". No puede haber una respuesta exacta a tales preguntas. La naturaleza no divide el mundo en física, química, ... Por lo tanto, los límites entre las ciencias son arbitrarios. Fueron entregados no por naturaleza, sino por personas. Por cierto, parece que Engels dijo que, al final, habrá dos ciencias: física y psicología (materia y conciencia). Un físico, enojado, a la pregunta "Entonces, ¿qué es la física?" él respondió de esta manera: "La física es lo que hacen los físicos". Y esto es completamente serio.
Entonces, ¿qué hacen los programadores? ¿Cuál es la esencia de sus actividades? Me parece que la ocupación principal del programador es presentar el gran problema sin resolver como una composición de los pequeños resueltos. Esta composición es el camino desde la puesta en escena hasta la solución. Escrito en un lenguaje formal dado, este camino se llama programa. Luego, la composición debe ser texto en un lenguaje formal dado; este es el programa. La realización formal-textual del algoritmo es la programación y difiere de otras disciplinas constructivas. Por lo tanto, hay
dos características de programación: 1) Extrema constructividad 2) Marco sintáctico estricto .
Dado que la programación es una disciplina constructiva, no es tan interesante para él si hay una solución, sino la solución misma. En matemáticas, hay muchos teoremas de existencia que afirman que hay una solución, pero no dicen nada sobre cómo encontrarla. El físico Nobel Landau propuso expulsar del curso de las matemáticas a los físicos cualquier mención de los teoremas de existencia. ¿De qué sirve un físico saber que una ecuación diferencial tiene una solución? Necesita conocer la solución, no cuál es. Solo sobre el tema "¿hay una solución?" Hay una historia tan interesante sobre Landau. Cuando los físicos iban a algún lugar para una fiesta, se entretenían en la carretera al observar el número de cuatro dígitos en frente del automóvil que estaba delante, era necesario captar el patrón en la habitación lo más rápido posible, usando solo las actividades elementales (acciones escolares) sin reorganizar los números y usándolos solo una vez . Por ejemplo, para el número 73-85 tenemos 7-3 = 8-5, para el número 38-53 tenemos
∛ 8 = 5 - 3 . Landau fue una gran autoridad en este asunto. Surgió la pregunta de si se puede encontrar un patrón en algún número; esta es la cuestión del teorema de la existencia. Landau respondió: "No, no para nadie". "¿Por qué, Landau, has demostrado el teorema de la inexistencia?" "Bueno, no, simplemente porque yo, Landau, no encontré este patrón para ningún número. Por ejemplo, para el número 75-65 ". Ingenioso Pero uno de los jóvenes matemáticos se tomó el teorema de la existencia absolutamente en serio y demostró que cualquier número entero puede "equipararse" a otro, ya que existe una fórmula para reducir N + 1 a N:
√ ( N + 1 ) = s e c ( a r c t g ( √ N ) )Por desgracia, después de la prueba del teorema de existencia, el juego perdió su agudeza. Aquí está: "
Cuanto más conocimiento, más tristeza" .
La solución de diseño distingue dos etapas:
- Algorítmico Algoritmización del problema: reducción a la composición de las operaciones estándar que la gente entiende. Esta es la parte más importante. Después de todo, los programas están escritos para personas.
- Codificación Reducción del algoritmo a una composición de operaciones elementales dadas y frases de datos en un lenguaje de programación. Sin embargo, la redacción del programa más pequeño pasa por su etapa de microalgoritmización.
Ejemplos de problemas constructivos privados.
El conjunto de operaciones aceptables son las operaciones escolares realizadas por una brújula y una regla: construir una línea que conecta dos puntos dados, dividir la línea por la mitad, construir una perpendicular, extraer la raíz cuadrada ...
Aquí están los problemas clásicos de construcción:
El cuadrado del círculo . Dado un círculo, debe usar un
número finito de las operaciones anteriores para construir un cuadrado con un área igual al área de un círculo dado.
Trisección del ángulo . Un ángulo dado debe dividirse en tres partes iguales usando un número finito de las operaciones anteriores
Aquí, entonces, el acercamiento "a la línea del teorema de la existencia: dénos una solución de inmediato" da una falla.
Suponiendo que hay una solución, se ha buscado durante muchos siglos. Pero resultó que no había solución.Muchos matemáticos y aficionados lucharon por estas tareas (y de niño propuse mi solución para cuadrar el círculo, que resultó ser aproximado con una precisión de aproximadamente el 10%, pero esto ya se hizo evidente en mi juventud). Se propusieron muchas soluciones, pero todas resultaron aproximadas. En el siglo XIX, se demostró que las tareas no tienen solución. Para la trisección del ángulo, esto ahora se puede mostrar al alumno (ver, por ejemplo, el libro de Courant y Robbins "What is Mathematics"), y para cuadrar el círculo al alumno. Además, la situación es tal que es posible encontrar la aproximación arbitrariamente precisa, pero no puede haber una solución exacta. El resultado, si lo piensas, es extraño. Como si delante del cuadrado deseado hay un muro que no se puede superar. Pero vale la pena permitir otras operaciones también, ya que la solución se vuelve elemental. Arquímedes hizo esto en relación con la trisección del ángulo.
Formalización del concepto de algoritmo.
Lo que es un algoritmo fue intuitivamente claro. Pero los matemáticos no serían matemáticos si no formalizaran el concepto de un algoritmo. La intuición ha fallado repetidamente. Por lo tanto, era imposible creer que hay funciones continuas que no tienen una derivada en ninguna parte, donde sea que toques la curva, en todas partes hay espinas. La intuición no permite esto.
Se propusieron varias formulaciones para aprender el concepto de algoritmo (o explicación científica): funciones recursivas, sustituciones alfabéticas de Markov, máquina de correos, máquina de Turing. La equivalencia de estas formulaciones fue probada gradualmente. Al final, los matemáticos tomaron como un axioma que estas formulaciones son adecuadas para el concepto de algoritmo; esta es la tesis de Church. La máquina de Turing en sus términos se acerca a las máquinas informáticas reales. Es elemental simularlo, pero estos modelos no son necesarios debido a su primitividad y, por lo tanto, lentitud. Pero como aparato teórico, es indispensable. Por ejemplo, fue posible formalizar el concepto de complejidad algorítmica. Y de nuevo surgieron cosas sorprendentes. Entonces, la intuición del programador sugiere que la multiplicación es más difícil que la multiplicación. Multiplicar el número a por el número n significa hacer n sumas. Entonces parece que la multiplicación es varias veces más complicada. ¿Y qué da la teoría?
Supongamos que hay dos números de n bits y la máquina de Turing los multiplica por U (n), y la suma por S (n). Entonces la intuición sugiere que U (n)) / (S (n) → ∞. Pero el análisis teórico ha demostrado que para cualquier ε arbitrariamente pequeño tenemos
$ en línea $ U (n)) / [S (n) (S (n)) ^ ε] → 0 $ en línea $ . Y esto sugiere que más cerca que la multiplicación de la suma, ya no hay nada: tienen una complejidad cercana.
Cualquier problema constructivo puede representarse como la programación de una máquina Turing universal. Surge la pregunta: ¿es
posible encontrar un algoritmo universal para cualquier problema constructivo ? Y aquí el problema ya es radicalmente diferente de la declaración del tipo de cuadratura del círculo. Allí fue posible agregar una nueva operación constructiva permitida y el problema se resolvió. No hay nada que agregar a la máquina universal de Turing: esta es la máquina más general, puede implementar cualquier algoritmo. Y resultó que incluso aquí el creador puso obstáculos. Se encuentran muchos problemas constructivos que no tienen un algoritmo común para su solución. Por ejemplo, en lógica matemática, intentaron durante mucho tiempo encontrar un algoritmo por el cual es posible determinar si una expresión lógica es deducible de otra. Resultó que el problema no tiene solución.
Tenemos una situación similar en el Gran Teorema de Fermat: la ecuación
xn+yn=zn no tiene solución en enteros para n> 2.
Esta declaración puede tener un carácter tal que quiero decir: "Esto no puede ser".
Dividiendo por el lado derecho, pasamos a números racionales: la ecuación
pn+qn=1 no tiene solución en números racionales <> 0.
Además, nos restringimos incluso a n. Para ellos tenemos una foto:

La figura muestra las curvas de Fermat para n = 2 (círculo) yn = infinito (cuadrado). Para n = 2k> 2, todas las demás curvas se encuentran entre el círculo y el cuadrado, y a medida que n aumenta, se acercan más y más al cuadrado. Y, si toma todas esas curvas, llenarán cada vez más el espacio alrededor del cuadrado. Y hay infinitos puntos con coordenadas racionales, de modo que si todos los puntos racionales están pintados en color oscuro, entonces todo el espacio del cuadrado será negro: el conjunto de puntos con coordenadas racionales es denso en todas partes. Y, sin embargo, ninguna de las curvas de Fermat pasa por puntos racionales. Parece que para esto necesitas enloquecer. Sin embargo, el teorema de Fermat dice que una curva perfectamente suave no pasa por ningún punto racional. Bueno, es imposible de creer. Algo está mal aquí.
Una situación similar existe en todas las matemáticas. Sería bueno para problemas matemáticos y enfoque matemático. Por ejemplo, imagine encontrar una solución al problema matemático "Si A, entonces B" como un movimiento en un cierto espacio de objetos matemáticos desde los datos originales hasta los requeridos. Aquí hay un ejemplo de una ruta constructiva de A a B:

Al moverse a lo largo de un camino, solo se utilizan los axiomas de la aritmética.
Eso sería para cualquier teorema "Si A, entonces B", se podría construir mediante métodos constructivos la trayectoria que lleva de A a B. Esto sería un triunfo de las matemáticas. ¿Se puede hacer esto? ¿Existe tal trayectoria?
El gran matemático Hilbert (considerado por muchos el mejor en el siglo XX) comenzó a implementar con entusiasmo el programa Leibniz para formalizar y algoritmar cualquier problema matemático. Este programa se llamaba formalización de las matemáticas: para brindar una base axiomática para todas las matemáticas, expresar todos los problemas matemáticos en un lenguaje formal como consecuencia de los axiomas y derivar todos los teoremas de acuerdo con las reglas de la lógica matemática. Se ha hecho un gran trabajo para formalizar completamente las matemáticas. Los que lo deseen pueden ver dos grandes volúmenes de Fundamentos de las Matemáticas de Hilbert y Bernays. Pero en medio del trabajo apareció el trabajo de Kurt Gödel, quien, entre otras cosas, demostró que en cualquier teoría formal que contenga aritmética se puede establecer un teorema significativo que no será deducible. Y ella (o, con no menos justificación, su negación) puede ser tomada por un nuevo axioma. Llamamos la atención sobre la palabra "formal". Para una teoría informal, siempre se puede decir algo como "es obvio que ..." y se eliminarán todo tipo de obstáculos. Por lo tanto, cualquier aplicación del teorema de Godel a las teorías informales es incorrecta. Esto es especialmente cierto para la filosofía, a la que le gusta especular sobre este tema.
Por lo tanto,
FORMAT MATHEMATICS ES IMPORTANTE INCOMPLETO Y NUNCA SERÁ COMPLETO. Esto la hace relacionarse con la física, que nunca reclamó formalización debido a su posición natural (y, además, el espíritu de formalización es ajeno a la física, lo que está acostumbrado al hecho de que todos los axiomas son temporales).
Parecería que uno puede salir de la situación tomando el teorema irreducible (o su negación) como un axioma, agregarlo al sistema original de axiomas y derivar los teoremas del corolario de este sistema formal extendido. Pero el teorema de Gödel es aplicable a este sistema formal extendido. Tenemos un proceso interminable. Solo en un sistema infinito se puede encontrar la universalidad. ¿Pero cómo trabajar con un conjunto infinito de axiomas? El asunto se complica por el hecho de que el axioma más inofensivo puede tener consecuencias completamente inesperadas. Por ejemplo, tome el axioma de elección: si se proporciona un conjunto de conjuntos disjuntos, de cada conjunto se puede seleccionar un elemento y ensamblarlos en un conjunto. Parece que hay algo sobre lo que discutir. Pero usando el axioma de elección, Banach y Tarski demostraronque dos esferas S1 y S2 de radios diferentes se pueden dividir en el mismo número finito de conjuntos disjuntos por pares:S1 = A1 + A2 + ... + An y S2 = B1 + B2 + ... Bn demodo que para todo i: Ai = Bi. Entonces, las esferas desiguales se dividieron en partes idénticas. ¿Qué tontería es esta? Pero todo es lógico: ¿qué creer, qué rechazar? Sumando uno a la vez, obtenemos una esfera y otra, una grande.John von Neumann, utilizando el axioma de elección, demostró que un segmento A de una línea con una partición finita es menor que un segmento B de una línea que es más corta que su longitud. Así que cree en estas matemáticas. Si aceptamos el inocuo axioma de elección (y lo que podría ser más obvio que el hecho de que un alumno puede ser seleccionado de la primera clase, un alumno de la segunda, etc.), se obtienen consecuencias completamente paradójicas.Por cierto, von Neumann también se distinguió en la programación: demostró la posibilidad de auto-reproducción de autómatas y la arquitectura de computadora von Neumann vino de él; se distinguió tanto en matemáticas como en física cuántica: construyó el aparato matemático de física cuántica basado en el concepto del espacio de Hilbert y trató de demostrar la imposibilidad de parámetros ocultos en los que Einstein confiaba, argumentando que la teoría cuántica es incompleta.Entonces, volviendo al dibujo superior, lamentamos no poder construir la trayectoria universal indicada por medios constructivos. ¡Ay! Esto significa que las matemáticas son aún más complicadas de lo que parece. Puede deambular por la solución arbitrariamente cerca, pero nunca llegar a ella. Aquí está la "cuadratura" del problema matemático general. Pero, a diferencia de cuadrar un círculo,bajo cualquier expansión del conjunto de operaciones constructivas, no tiene solución . Solo puede programar tareas bastante privadas. El problema más común no tiene una solución constructiva. Además, incluso muchos problemas particulares no tienen una solución constructiva común y, por lo tanto, deben dividirse en problemas aún más particulares, que quizás tengan una solución constructiva.Volviendo al teorema de Godel, observamos que un lenguaje de programación es un sistema formal. Por lo tanto, puede escribir un programa para el que no hay ningún programa que demuestre su corrección o incorrección. ¿Es realmente así? Un programa escrito o su negación puede tomarse como el axioma de la programación.Por lo tanto, no puede haber una verificación universal de los programas. Y no puede haber un programa universal. Bueno, aunque es imposible tener un programa universal en general, pero al menos obtener uno universal para un tema específico.Aquí hay una imagen de programa típica:
la desventaja de este enfoque es que se agudiza mediante una función específica. Por supuesto, puedes parametrizarlo. Con esta parametrización, el tipo de la función no cambia, pero solo cambian sus parámetros de argumento. Pero me gustaría que los parámetros puedan cambiar el tipo de función. Sí, puede pasar una función como parámetro, por ejemplo, un programa de integración de funciones. Pero no va más allá de la integración. En resumen, sería bueno dar una descripción completa del área temática como parámetro . Es decir
Esto es lo que me gustaría:
¡Ba! - Pero este es un programa en Prologe. Prolog en sí mismo actúa como la función paramétrica antes mencionada. Descripción del dominio: Prologe el texto que codifica el dominio. El objetivo es un parámetro.Me sorprendió gratamente cuando intenté implementar tareas de búsqueda en muchas relaciones en Prolog. Esta búsqueda se implementó primero en Delphi y luego en C #. Entonces, lo que fue implementado por varios programas bastante grandes en Delphi (C #), en Prologe, se ajusta a una descripción compacta de las relaciones y funciones en ellos. Y luego se podría solicitar una variedad de solicitudes de destino para esta descripción. Es cierto que no puedo decir nada sobre el rendimiento comparativo. Pero en algunos ejemplos específicos, no noté una diferencia significativa. Sin embargo, Delphi todavía dibujó hermosos gráficos de relaciones objetivo. No hice esto en Prologe. Pero a cada uno lo suyo. La lógica debe implementarse mediante un lenguaje lógico, presentaciones - lenguaje de presentación, informes - idioma de informe, entrada - idioma de entrada, comunicación - lenguaje de comunicación, interacción de servicio - lenguaje de distribución,interacción y orquestación de servicios.Clásico
Viejos clásicos
"Los clásicos necesitan saber y honrar". No hace falta pensar que todo fue inventado en nuestro siglo. "Nada es nuevo bajo la luna". Esto es válido para la programación y sus conceptos básicos. Por cierto, el término "algoritmo" en sí tiene sus raíces en el siglo IX y proviene del nombre del matemático al-Khwarizmi. Algorítmico muchas construcciones de Euclides. Entonces su algoritmo para encontrar el máximo divisor común todavía está vivo. Lully (los musulmanes le arrojaron piedras, este es el papel "progresivo" de la religión) en el siglo XIII se le ocurrió la idea de una máquina lógica que funcionara con símbolos. En los manuscritos de Leonardo da Vinci, se encontraron dibujos de un dispositivo informático de trece dígitos. (Sin embargo, solo se han encontrado tantos en sus manuscritos que algunos estudiosos afirman seriamente que Da Vinci no era un hombre, sino un extraterrestre).
En 1623, Schickard, profesor de idiomas (!!) en la Universidad de Thuring, diseñó una computadora. Gran Pascal tenía una idea clara de una computadora mecánica y construyó aritmómetros mecánicos. El gran Leibniz propuso la idea de aritmetizar las declaraciones para reducir la disputa a un cálculo "." ¡¡Argumentar, sentémonos y calculemos quién tiene la razón "!! .." ¡Una persona con talento indigno debería pasar horas como un esclavo en los cálculos, que, por supuesto, podrían confiarse a cualquier persona si pudiera usar una máquina al mismo tiempo ”, dijo Leibniz, e hizo una computadora y soñó con una máquina universal que pudiera calcular todo.
Bebbage en el siglo XIX diseñó y comenzó a construir una
máquina mecánica universal programable . Esta fue la primera computadora universal. Babbage es algo inmerecidamente olvidado, por lo que no puedo resistirme, y citaré algunos datos interesantes sobre él.
"Creemos que la existencia de tales dispositivos, además de ahorrar mano de obra al realizar operaciones aritméticas, hará posible eso, que, siendo factible, está demasiado cerca de los límites de las capacidades humanas", dijo el informe de la Asociación Británica para el Avance de la Ciencia para el Estudio de la Máquina Analítica Babbage.
Si sigue la terminología moderna - Babbage "físico". No le gustaba la música. En la ópera, se le ocurrió la música de color. Sobre los poemas de Tennyson
"Cada minuto muere un hombre,
Pero cada minuto nace un hombre "Babbage escribió al autor lo siguiente: “Tengo que indicarle seriamente que estos cálculos llevan a la conclusión de que la población total se encuentra en un estado de equilibrio constante. Al mismo tiempo, es bien sabido que la cantidad mencionada aumenta constantemente. Por lo tanto, me tomo la libertad de asumir que en la próxima edición de su excelente poema, los cálculos erróneos que señalé se corregirán de la siguiente manera:
Cada momento muere una persona
Pero nacen 1,16 personas ...Puedo decirle una cifra más precisa: 1.167, pero esto, por supuesto, debería violar el ritmo del verso ... "
A pesar de esto (y, quizás, gracias a esto) Babbage tenía la intención de estudiar la naturaleza del humor. Es un generador típico de ideas. Debido al exceso de ideas, no completó sus numerosas propuestas y proyectos. Inventó el velocímetro, creó máquinas de cepillado cruzado y giratorio, moldes, cortadores, propuso un método de grabado en madera. En general, este es el inglés Leonardo da Vinci. En 1832, escribió un libro, "La economía de las máquinas y la producción", en el que anticipó el análisis de sistemas, la investigación de operaciones y la organización científica del trabajo. Marx conocía bien este libro y lo citó en Capital, Keynes habló con admiración al respecto. Pero la invención más importante es una máquina analítica, que es una computadora mecánica universal programable. No había suficiente dinero estatal y Babbage gasta su dinero en construir un automóvil. En busca de dinero surge todo tipo de fuentes. Junto con su compañero, Ada Lovelace presenta un "sistema de ganar-ganar" para las carreras de caballos. El sistema llevó al hecho de que la dama tenía que pagar con perlas familiares. Entonces Babbage planea escribir una novela para el año y gastar las ganancias en el automóvil. Disuadió a su amigo de esta aventura. Luego, el infatigable Babbage planea inundar el país con máquinas de tres en raya y, nuevamente, poner las ganancias en el automóvil. Pero se necesitaba dinero para esto.
Los músicos callejeros interfirieron con sus actuaciones. Babbage a través de la prensa, el parlamento, la policía está luchando contra ellos. En respuesta, cada borracho consideraba que era su deber gritar bajo las ventanas de Babbage, los músicos ya están lejos para divertirse bajo sus ventanas. Después de la muerte de Babbage, el obituario en The Times tiene las líneas "... un hombre que vivió casi 80 años, a pesar de la persecución de los músicos callejeros". Me pregunto qué años habría vivido ahora, cuando los músicos callejeros modernos están armados con decibelios mucho más grandes.
Una vez que Babbage ideó un plan para lidiar efectivamente con los incendios, pero dijo: "No lo publicaré, se perderán todos, se quemarán todas sus casas". Odiaba la piedad. Cuando vio en Italia una bomba de agua con una inscripción que decía que el propietario la construyó en nombre del amor a Dios y a su país, para que el vagabundo cansado pudiera calmar su sed, entonces Babbage estaba alerta, miró la bomba de agua y descubrió que cada vez que un viajero bombeó agua, la mayor parte cayó en la casa de un maestro piadoso. Después de este episodio, Babbage agregó: "
Solo hay una cosa que odio más que la piedad es el patriotismo "
.El primer programador de la máquina analítica Babbage fue la hija del poeta Byron, Ada. Estas son algunas de sus declaraciones.
"¡La
máquina analítica se puede definir como la realización material de cualquier función indefinida que tenga cualquier grado de generalidad o complejidad "!
"Cuando consideramos cualquier invento nuevo, a menudo encontramos intentos de sobreestimar lo que ya consideramos interesante o incluso sobresaliente, y, por otro lado, subestimar el verdadero estado de cosas cuando descubrimos que nuestras nuevas ideas están reemplazando a las que consideramos inquebrantables".
Ada acuñó los términos "células de trabajo", "ciclo". Entonces el lenguaje de programación "Ada" usado en el Pentágono tiene un nombre digno.
Babbage era más un físico que un matemático. Se sintió atraído por la realización práctica de una calculadora universal. Cuando los matemáticos se pusieron a trabajar, como siempre, quisieron formalizar el concepto de una calculadora universal. Después de todo, el concepto informal de una máquina es una cosa, y el concepto exacto es otra. Al final, como hemos visto, la intuición y el formalismo divergen. Church, Markov fueron los primeros en formalizar el concepto de algoritmo. El primero como una función recursiva, el segundo como un conjunto de permutaciones en el alfabeto, es decir, como una gramática. Turing formaliza el concepto de algoritmo en términos casi técnicos: es una máquina de Turing.
Una máquina universal de Turing es el equivalente teórico de una máquina informática universal: una computadora. Resulta que hay suficiente lenguaje de dos caracteres (| y un espacio), cuatro comandos y memoria externa infinita, y cualquier algoritmo se puede programar en una máquina universal de Turing. Está comprobado que las tres definiciones anteriores del algoritmo son equivalentes; lo que se expresa en una definición se expresará en otras definiciones. Los méritos de Turing se reflejan en la existencia del Premio Turing a los mejores logros de programación. Por cierto, Turing presentó la llamada prueba de Turing, una prueba para distinguir a una persona de una computadora. Esta es una
prueba puramente
funcional sin ninguna sustancia mística como el alma humana . Si una persona se sienta en una habitación y una máquina se comunica con ella en otra a través de la pantalla, y durante mucho tiempo no podemos decidir dónde está la persona y a qué se refiere la máquina, esa máquina es intelectualmente equivalente a esa persona y no hay necesidad de discutir qué hecho y cómo. Esto no es esencial.
El ya mencionado von Neumann demostró teóricamente la posibilidad de auto-reproducción de autómatas. Por cierto, esta característica se implementa en la práctica.
Literatura clásica
El texto se coloca en una de las tablillas de Babilonia: "Han llegado tiempos difíciles, los dioses se han enojado, los niños ya no obedecen a sus padres y todos buscan escribir un libro". Se ha leído un gran número de libros, a medias. Pero pocos de ellos fueron cruciales para mí. Cuales? Al comienzo de mis actividades de TI, estas fueron:
Brooks Cómo se diseñan y programan los sistemas de softwareUn clásico sobre los problemas que enfrentan los grandes proyectos.
Dahl, Dijkstra, Hoor. Programación estructural .
Marca el comienzo de una nueva era en la programación. Te sorprende lo inesperada y profundamente que puedes ver los programas comunes. Contiene muchos comentarios filosóficos.
Dijkstra La disciplina de la programación.Un libro absolutamente asombroso. En mi juventud pasé dos vacaciones en él. Por desgracia, no puedo asegurarme de haber entendido todo. Cuando conocí a programadores que intentaban brillar con su intelecto, les dejé leer este libro. La devolvieron con cierta vergüenza. Una reacción similar fue al "Informe revisado sobre Algol-68" (como lo expresó una de las autoridades sobre Algol-68: "es un lenguaje para programadores y poetas")
Wirth Programación sistemática.El primer libro leído, que mostró que un tutorial de programación podría ser bueno.
Yodan Programación estructural .
Lo principal es tener en cuenta un tema de moda. Pero aquí estaba fuera de lugar.
Gris Ciencia de la programación"Si consideramos el libro crucial de la revelación intelectual de Dijkstra (la disciplina de la programación), el libro de Gris es un acto apostólico" (Ershov).
Aho, Hopcroft, Ullman. Construcción y análisis de algoritmos computacionales.El contrapeso a los libros modernos de un día como "C- + en 21 segundos, un minuto, ..." contiene una exposición de importantes algoritmos rápidos que no morirán durante mucho tiempo.
Tours Metodología de programaciónHay muchas notas interesantes sobre la programación en pequeño y la programación en grande.
Kushnirenko Programación para matemáticosGran tutorial con un alto nivel de presentación.
Durante mi programación activa, se podría agregar muy poco a esta lista. Ha pasado mucho tiempo desde entonces. Pero incluso ahora, la tecnología de programación no tiene una base fundamental como la física como base para la tecnología técnica. La situación se asemeja al estado de la tecnología medieval, cuando no tenía una base científica en forma de física. Luego aparecen los proyectos de la máquina de movimiento perpetuo.
Misceláneo
Mitos
Cualquiera puede programar . En este sentido, al lugar de cita de Shakespeare: "
Puedo convocar espíritus del abismo, y puedo y todos pueden, la única pregunta es si están llamando ". Como con cualquier actividad profesional, la programación requiere una inclinación y habilidad. Me parece que no todos los programadores pueden programar. Es posible conocer Windows NT a un bitick y ser impotente antes de resolver una tarea de aplicación primaria usted mismo.
Todos pueden escribir en su idioma nativo, pero no hay tantos buenos escritores. Esto también se aplica a la escritura en un lenguaje de programación.
La tarea de contabilidad es fácil de escribir y poco interesante, pero crear una página web es difícil e interesante.Tanto el primero como el segundo pueden ser variados. Lo principal: la tarea cotidiana, dicen, es fácil de implementar y no debe trabajar particularmente en ella. Solo todos los tipos de kunshtyuki son dignos de atención. Pero, en mi opinión, solo los programadores dicen, sin crear un solo proyecto decente. Esto es como una idea de la música como auriculares de moda, y muchos amantes de la música en los auriculares deambulan, y con algún tipo de participación especial en algún tipo de esoterismo. Yo mismo una vez rindí homenaje al esnobismo del programador. Aparentemente, cualquier programador pasa por la etapa "Sé todo y puedo hacer todo". Pero para la mayoría, no dura mucho.
Este tipo de estado de ánimo puede ser del lado "alto". En una compañía me encuentro con un programador que vino de Fiztekh, que una vez programó un vuelo de misil balístico. Comenzamos una conversación sobre el uso de las matemáticas en la banca. Inmediatamente me trae muchas páginas con un modelo matemático de un fragmento de la actividad del banco: ecuaciones diferenciales con retraso (!!) (el retraso vino de los intereses, el préstamo emitido hoy genera ganancias después de un tiempo, ese es el retraso). Resulta que comienza con el beneficio funcional del banco y luego aplica los métodos matemáticos bien conocidos. Pero la tarea consiste en encontrar esta funcionalidad. Pero al matemático-programador le pareció que esto era algo con lo que cualquier banquero podría hacer frente, pero el banquero no podría acumular más fórmulas. Lo segundo es cierto, pero lo primero no lo es. Y este es el punto. Lo que se necesita no es solo matemática, sino matemáticas de trabajo. De lo contrario, es solo una escolástica de fórmulas. Por cierto, el beneficio funcional seguramente será una función discontinua (casi todos los indicadores económicos son discontinuos, el tipo de cambio, por ejemplo) y, por lo tanto, los métodos clásicos continuos no le son aplicables: el principio máximo de Pontryagin, por ejemplo.
Dame una computadora que sea lo suficientemente fuerte y descifraré cualquier código . Hay muchos programadores que asegurarán con voz ronca que cualquier código puede ser pirateado. Entregue solo una computadora que sea lo suficientemente fuerte. En mi opinión, esto es ignorancia de los fundamentos de la teoría de la información establecida por Shannon. Y todo es bastante simple. Considere el ruido como un mensaje codificado. Cualquier cosa se puede extraer del ruido. No se puede decodificar de ninguna manera, para extraer algo útil. De lo contrario, esto no es ruido. El ruido superpuesto en el mensaje produce un ruido. Entonces, hagamos ruido en el mensaje: Ruido (W) + Mensaje (C) = Ruido1 (1). El ruido 1 no se puede descifrar. Por supuesto, mediante una búsqueda exhaustiva puede llegar al final del mensaje. Pero, ¿cómo sabes que este es el mensaje correcto? Tengamos el mensaje "Petia es una tonta". Una búsqueda completa extraerá este mensaje, pero también extraerá lo siguiente: "Petya es un tipo inteligente" y "Vasya es un tonto", etc. Entonces, ¿cuál tomar?
Pero aún puede extraer el mensaje. Para hacer esto, necesita conocer el ruido y el método de superposición. Entonces = 1-. Pero esto no necesita una supercomputadora, pero necesita saber el ruido.
Por cierto, un esquema similar parece aplicarse en las conversaciones entre los presidentes estadounidense y ruso.
Los programadores no necesitan matemáticasAlrededor de la programación, las humanidades-estetas comenzaron a luchar. Bueno, ¿cómo puede un programador dibujar una página web hermosa sin un esteta, y cómo llevarse bien sin un esteta con una interfaz GUI? Y aparecen los injertos. Y comienza a parecer que son programadores.
Me parece que como un físico es miserable sin las matemáticas, también lo es un programador y miserable y ridículo sin el conocimiento de las matemáticas. En el mejor de los casos, es un artesano. Puede conocer cada opción del sistema operativo, cómo instalar todo tipo de controladores y no poder desarrollar un proyecto elemental. En tecnología, esta es una situación familiar. Hay ingenieros y hay trabajadores. Puede ser un excelente diseñador de automóviles y conducirlo mal, o puede ser un piloto de carreras y no es una maldita cosa para comprender los principios de la construcción de motores.
Principios
¿Qué disposiciones generales te impresionaron?
Divide y vencerásEl principio más útil. Cualquier tarea debe poder dividirse en varias más simples para que las subtareas puedan resolverse y combinarse a fin de obtener una solución al problema original. En relación con las subtareas obtenidas, uno puede hacer lo mismo. Y así sucesivamente. El arte de la división es, en muchos sentidos, el arte de encontrar un algoritmo. Los ejemplos carecen de números: la ordenación rápida divide el conjunto ordenado en dos, la búsqueda binaria divide el conjunto de búsqueda en dos.
Deja feo pero uniformeNo cree variedad innecesaria. Solo aumenta la entropía. Acepte el estándar unificador y adhiérase a él sin vacilar. Esto se aplica a nombres, abreviaturas, estilo de codificación.
A este respecto, es sorprendente que no haya construcciones de lenguaje necesarias que empujen al sistema. Y las herramientas más avanzadas para desarrollar aplicaciones DBMS se basan en enfoques de archivo. ¿Y cómo sería más conveniente presentar el proyecto en forma de una base de datos y aplicarle el aparato de búsqueda y selección ...
El lenguaje define el pensamientoAl restringirnos a ciertas construcciones sintácticas, ni siquiera sospechamos cómo limitamos nuestro pensamiento. ¿Qué sería un cálculo diferencial sin simbolismo matemático? ¿Cuál sería la sintaxis de un lenguaje de programación sin el formalismo Backus-Naur o equivalente?
Programa = Algoritmo + DatosEn un enfoque orientado a objetos, esta posición se extiende a construcciones elementales, objetos que consisten en datos y métodos. Programación desarrollada primero bajo el signo de algoritmos, y luego datos. El tema DBMS va completamente bajo el encabezado "datos". Pero los algoritmos también se infiltraron allí: métodos de búsqueda, métodos de indexación.
Modelar un área temáticaEl modelo verbal genera una idea del área temática, accesible para el especialista en TI y que contiene lo más esencial. Un modelo de información del tipo "entidad - comunicación" genera una base de datos. El modelo funcional "el módulo M recibe en la entrada In y lo convierte en Out" define la arquitectura de los programas. Un modelo de objetos representa un área temática como un conjunto de objetos que interactúan. El modelo de eventos ayuda a representar el movimiento del sistema como un cambio en respuesta a ciertos eventos.
Algunas tareas
Algunas tareas que me impresionaron. Cito, por supuesto, solo pequeñas tareas. Es difícil decir brevemente sobre grandes tareas, apegarse al género.Problema delos granos de café El banco tiene un número conocido de granos de café en blanco y negro y un suministro gratuito de granos. Seleccione al azar dos granos de la lata. Si son del mismo color, póngalos en stock y coloque grano negro en el banco. Si son de diferentes colores, devuelva el grano blanco y coloque el negro en stock. Continúe el proceso hasta que un grano esté en el banco. ¿De qué color será?SoluciónEl proceso es claramente cíclico: se repite la acción "sacar y poner"La invariante del ciclo es la paridad del número de granos blancos. Entonces, si el número inicial de granos blancos es par, entonces el último grano será negro, y si es impar, entonces blanco. Hay tres archivos muy largosen el manual: Trabajadores r, Estudiantes s, Desempleados b. Están ordenados por nombre. Se sabe que hay estudiantes deshonestos que trabajan y están en las listas de desempleados y, por lo tanto, reciben beneficios de desempleo. Escriba un programa que encuentre el primer pícaro, el nombre cuyo nombre es primero en orden alfabético.SoluciónSean i, j, k las coordenadas en los archivos r, s, bI, j, k: = 0,0,0; - comience desde el principioHasta ahora (r (i) <> s (j) y s (j) <> b (k) y b (k) <> r (i)) repita elcomienzoSi r (i) <s (j ) entonces i: = i + 1;Si s (i) <b (j) entonces j: = j + 1;Si b (i) <r (j) entonces k: = k + 1;endi, j, k contienen coordenadas deshonestas en sus archivos.Pero qué elegante se ve en la notación de Dijkstra:i, j, k: = 0,0,0;do R (i) <S (j) i: = i + 1; S (j) <B (k) j: = j + 1; B (k) <R (i) k: = k + 1;od{i, j, k son las coordenadas deseadas}Donde el símbolo identifica la llamada guardia (R (i) <S (j), etc.)Es una pena que esta notación no esté incluida en los idiomas.La parábola de los baños en los trenes.Érase una vez un cierto país donde cada carro se hacía con un inodoro. Pero luego apareció un economista y decidió ahorrar suministrando a la mitad de los vagones un inodoro. Entonces comenzaron a hacer. Pero se olvidaron de advertir sobre estas estaciones de clasificación, hacia dónde va el tren. Como resultado, algunos trenes terminaron sin baños. Para corregir la situación, a cada vagón se le proporcionó una inscripción que decía si había un inodoro y les indicó a los acopladores: "Debería haber aproximadamente la mitad de los inodoros en el tren". Aunque esto complicó la vida de los trailers, honestamente siguieron las instrucciones. Sin embargo, hubo quejas de que a veces los baños estaban en la mitad del tren. Para solucionar el problema, publicaron una nueva instrucción: "Al acoplar, alterne los vagones con inodoros y sin ellos". Esto agregó trabajo a los trailers, pero ellos, refunfuñando, comenzaron a seguir honestamente las instrucciones. Sin embargo, hubo quejas de queque para un automóvil sin inodoro, además, el inodoro no estaba al principio de al menos un automóvil vecino, sino en los extremos de ambos. Terrible injusticia para un país democrático. Que hacer
Después de pensar, los funcionarios emitieron una instrucción adicional: "Suministrar a cada vagón un inodoro con una flecha que indique dónde está el inodoro. Al acoplar, todas las flechas de los vagones deben dirigirse en una dirección ". Los remolques, aunque no tenían suficientes platos giratorios, se tensaron y comenzaron a hacer esto. Sin embargo, ¡oh horror! - los pasajeros comenzaron a preocuparse de que, aunque el baño más cercano no era más que un automóvil, no estaba claro de qué lado estaba el baño. Salieron instrucciones adicionales: "En cada automóvil sin inodoro, dibuje la flecha" Inodoro "y enclave los automóviles para que esta flecha apunte al inodoro más cercano". Los trailers aullaron: no tuvieron tiempo en el tiempo. Y luego hubo un hombre que notó lo siguiente: si engancha el automóvil con el inodoro y sin él para que el inodoro esté en el medio del par y nunca lo desabroche,entonces la estación de clasificación tratará en lugar de N vagones orientados con N / 2 pares de vagones simétricos (no orientados). Entonces todos los problemas de clasificación desaparecieron. Es cierto que los trenes deben contener un número par de vagones. Pero puedes soportarlo. Entonces lo hicieron.Los clásicos afirman que aunque las computadoras aún no se conocían en ese país, quien encontró la solución fue un verdadero programador.Clasificación rápidaDespués de la clasificación y clasificación de burbujas, Shell es una revelación. Hermoso algoritmo y el resultado más rápido.Un programa que imprime el texto de sí mismo.Este es un programa cuyo resultado es la impresión de su propio texto. Me sorprendió gratamente cómo un joven programador escribió este programa en Pascal en un cuarto de hora.Ajedrez en varias líneasMe llamó la atención el programa, de unas cincuenta líneas en C, que jugaba al ajedrez decentemente. Podría haber varias declaraciones en una línea.Casos
Entrada polaca
Fue hace mucho tiempo. Estamos desarrollando un proyecto en el Centro de Exposiciones Belpromstroibank para mantener datos sobre proyectos de construcción en la república. El generador de informes se traza. Cada gráfico se puede definir mediante cualquier fórmula aritmética. ¿Cómo calcularlo? Se toma la decisión de que el usuario debe completar un formulario especial en el que él mismo reduce la fórmula a primaria. Por ejemplo, la fórmula r = (a + b) / (cd) se descompone de la siguiente manera: 1) x = a + b, 2) y = cd, 3) r = x / y. Entonces lo hicieron. Corremos adentro. El proyecto se está implementando. Todos los días, se imprimen docenas de informes en decenas de kilogramos de papel finlandés perforado. El jefe está pensando en un mayor desarrollo del proyecto. Poco a poco, tuvo la idea de que la descomposición de cualquier fórmula podría ser realizada por la máquina misma. Por lo tanto, el usuario se deshace del mal trabajo: descomposición de la fórmula (descomponiéndola en una secuencia de simples).Aparece la idea de promover una fórmula en un registro sin corchetes. Luego viene la idea de una pila. Y luego recuerdo que leí en alguna parte sobre el registro polaco de la expresión. Encuentro un libro y veo que a mi jefe se le ocurrió la idea de un registro polaco (o, en otras palabras, un postfix) y una pila. Todo esto hubiera sido delicioso si no fuera por la invención de la bicicleta. Después de todo, todo esto lo debe saber un programador. Pero tanto él como yo éramos aficionados, extraterrestres de otras profesiones ... Por desgracia, nuestros profesionales (que se graduaron del BSU matfak y trabajaron en el Computer Research Institute) no sabían esto. Entonces aquí está aún más triste.Después de todo, todo esto lo debe saber un programador. Pero tanto él como yo éramos aficionados, extranjeros de otras profesiones ... Por desgracia, nuestros profesionales (que se graduaron del BSU matfak y trabajaron en el Computer Research Institute) no sabían esto. Entonces aquí está aún más triste.Después de todo, todo esto lo debe saber un programador. Pero tanto él como yo éramos aficionados, extranjeros de otras profesiones ... Por desgracia, nuestros profesionales (que se graduaron del BSU matfak y trabajaron en el Computer Research Institute) no sabían esto. Entonces aquí está aún más triste.Por desgracia, me parece que esta situación no es solo en la programación. Somos tratados por médicos de tres vías, los constructores de tres vías están construyendo y los maestros de tres vías enseñan. Tenemos "el estudiante que no estudia, pero que solo aburre aprender". Y luego salen expertos aficionados. Como resultado, tenemos muchos tontos sin educación, muchos tontos educados, muchas personas inteligentes sin educación, pero muy pocas personas inteligentes y educadas.Un poco más sobre el amateurismo. Habiendo venido a trabajar para nosotros, el jefe (lo llamaremos A.M.) decidió cambiar el jefe de los programadores. Por eso me consideran un contendiente. Parece que se está llevando a cabo una buena entrevista, pero la prueba está en marcha. Y entonces me hacen la pregunta "¿Cómo se determina físicamente el final del archivo?" Por desgracia, no sabía esto y respondo que dicen, ¿por qué debería saber si el lenguaje me da una situación EOF y no importa cómo se implemente? Como dijo K. Prutkov: "... Kostaki tiene razón, yo tengo razón". Pero como jefe de programadores, fui hackeado. Sin embargo, me ofrecieron dirigir a los directores. (Volviendo al comienzo de la historia y, recordando los clásicos, podemos decir: "el sueño del idiota se hizo realidad"). "Teniendo en cuenta la amplia visión del mundo" como dijo A.M. Entonces las ovejas se separaron de las cabras, generalistas de especialistas. Y además A.M. Trato hábilmente con el personal.Por lo tanto, mi enfoque del problema "de arriba hacia abajo - del problema a la máquina" dominó y domina, y mi colega tuvo el opuesto "de abajo hacia arriba - de la máquina al problema". A.M. Inmediatamente nos llevó a diferentes polos. Un colega comenzó a trabajar en controladores de dispositivos de entrada de datos sobre sitios de construcción, y yo estaba trabajando en un modelo matemático para recibir informes sobre el estado de los sitios de construcción. En otros proyectos, conocí lo contrario con otros gerentes. Como resultado, uno habla de bits y el segundo acerca de integrales y no se comprende entre sí.En otros proyectos, conocí lo contrario con otros gerentes. Como resultado, uno habla de bits y el segundo acerca de integrales y no se comprende entre sí.En otros proyectos, conocí lo contrario con otros gerentes. Como resultado, uno habla de bits y el segundo acerca de integrales y no se comprende entre sí.Entonces me convertí en el director de directores. Y programado, por supuesto. Y los programadores fueron guiados por otra persona, un profesional. Nos hemos convertido en buenos amigos. Y recibí de él la caracterización halagadora e irónica "especialista en problemas inciertos", reconociendo el hecho de que podía aportar el problema más banal a la base matemática y darle solidez, incluso si en esencia podría ser un farol. El legado de un físico teórico afectado.En el ejemplo de A.M. Vi que un proyecto es producto de no tanta inteligencia como lo hará .Imbuidos de respeto por el chef, incluso recopilamos sus frases.Ejemplos:
" De y para ": no hay nada que pensar solo en su llaga, necesita ver todo el proceso." Para Bitik ": un enfoque superficial y superficial no funcionará aquí." Remangarse las mangas ": no hay nada que liberar, trabajar sin una red.“ ¿Es eso así? "- ¿Estás hablando tonterías, hermano?Estos registros se repitieron con él a diario. Pero fue a las A.M. y propiedades más desagradables. Le gustaba mucho la lluvia de ideas en las vacaciones. Vacaciones. La disposición de la mesa está completa, el champán se está descorchando y luego espera la llamada de AM. Así es, la campana. - “Entonces tuve un par de ideas. Propongo discutirlos. Y - adiós vacaciones.Una serpiente que llena todo el espacioTan pronto como aparecieron las pantallas, aparecieron juegos visuales. Una de las primeras es una serpiente que atrapa su cola. La serpiente tenía que ser guiada, evitando obstáculos aleatorios, dando órdenes a la izquierda / derecha. La serpiente se alargaba todo el tiempo, por lo que quedaba menos espacio. Y luego tuve una tarea. ¿Es posible elegir una ruta de serpiente para que ocupe todo el espacio de la pantalla? Después de pensar un par de horas, encontré la ruta correcta. Vamos a almorzar. Pongo la tarea en cola a mi colega. Y para mi sorpresa, no tuvimos tiempo de verter el primero, ya que resolvió el problema (aunque las colas eran largas, pero no por un par de horas). Después de pensar en este caso, comencé a consolarme con el hecho de que, aparentemente, el deseo de comer estimula el intelecto.Frases clásicas
Algunas frases malas de clásicos cuestan volúmenes de mediocridad. Aquí hay algunas declaraciones que han definido áreas completas de programación.Brooks :- Detrás del dominio está el ingenio, gracias al cual aparecen programas económicos y rápidos. Casi siempre, este es el resultado de un avance estratégico, no una habilidad táctica. A veces, este avance estratégico es un algoritmo, como, por ejemplo, la rápida transformación de Fourier propuesta por Cooley y Tukey, o un reemplazon2comparaciones en n * log (n) al ordenar.
Más a menudo, se produce un avance estratégico como resultado de la presentación de datos o tablas. El núcleo del programa está aquí. Muéstrame los diagramas de flujo sin mostrar las tablas, y seguiré por mal camino. Muéstrame tus tablas, y los diagramas de flujo probablemente no sean necesarios: serán obvios .
- La presentación de datos es la esencia de la programación.
- Acostumbrarse a los requisitos de precisión perfecta es, en mi opinión, lo más difícil en el proceso de programación de aprendizaje.
- Una vez que el proyecto es finalmente adoptado, se vuelve obsoleto en el sentido de sus conceptos.
Wirth :- Programa = algoritmo + datos.
- () , , .
- . , .
- , , .
- , (, ), . , .
- , , , , . , . , . .
- ( ) ; , . , .
- , , . , :
- ,
- la descomposición elegida le permite obtener instrucciones en algún sentido más cercanas al lenguaje en el que finalmente se formulará el programa.
SOL :Una red es una computadora.Buena idea
Por lo tanto, idealmente, un programa distribuido, considerado a nivel de un lenguaje de desarrollo, no debería diferir de uno unitario. La base distribuida a nivel de uso no debe diferir de la no asignada. La distribución debe ser implementada por el sistema operativo. La distribución y la orquestación de servicios tampoco deberían ser la preocupación de un programador de aplicaciones.Dijkstra :- - , ( , , , ).
- -: – .
- ? : “ : . , , , – , ,
… , . , , , “” . – … , ,
– ”.
— 1/106 — 104 . . , -, .- .
, , , , , , . , , , . , , , . , , , . , , . , – , . , , , , . - … . : “” ? : ””, , ; : ””, — . , , – – , . , , , . : , .
- , .
- , , « » — ! — « ». - ,
, : « , , , , «» , ?» , , -, ." , , , , . - , , ( ), , « ». ; , , , « », . . , ,
.
No sé_to :el lenguaje de programación más importante es el idioma nativo. Un programa en un idioma formal es una traducción de ideas formuladas en el idioma nativo. Por lo tanto, aquellos que se presentan oscuramente en su idioma nativo también se oscurecerán en el formal.Marketing y programadores
Preparé materiales promocionales para la exposición de mi proyecto. Los vendedores de mi compañía atacaron mi material publicitario con tales ataques:- El material tiene muchos aspectos negativos (una descripción de las deficiencias de los proyectos existentes), y esto conlleva energía negativa.
- El tamaño de los folletos no encajaba en la proporción dorada.
Y algo más como eso.
Pero estos especialistas en marketing no notaron la ausencia de teléfonos, direcciones e información sobre la compañía en los folletos, a los que mi antiguo jefe me llamó la atención cuando conocí mis materiales en la exposición. Comencé a hablar: caballeros, les doy una descripción técnica del producto, y ustedes, los vendedores, le dan una descripción del mercado. Donde hay Solo aceptan criticar. Como resultado, llegó al jefe de la empresa. Él me dijo: obedezca a la comercializadora, después de todo, ella se graduó de las economías con honores. Yo: y me gradué de BSU con honores. Entonces el chef dice: "Ustedes, excelentes estudiantes, se entienden a sí mismos y no voy a entrar en sus peleas".
Me impresionó esto en marketing (en general, y no en marketing de una empresa). Esta es la magia de los nombres. Todos deben dar al menos un hecho significativo un nombre y posiblemente una abreviatura sonora. Esto ya garantiza que no hizo caso omiso de este hecho en sí. Y luego necesitas hacer coincidir el nombre. El nombre es la aplicación del principio de "Divide y vencerás". Cuando le damos un nombre, resaltamos el tema. Cuántos reclamos de derechos de autor fueron: "vimos esto, pero no destacamos este hecho y no le dimos un nombre". Ese es el punto! Entonces entendí el giro de OLE -> OCX -> ActiveX -> COM ->? Y el sitio -> portal ->? .. Bueno, ¿qué podemos decir sobre la interacción de empresa a empresa, pero cuando decimos B2B (Business to Business) - este es el término y, por lo tanto, hay algo detrás de esto, aunque de hecho de hecho, puede que no haya nada, sino simplemente una designación. Tan pronto como apareció la abreviatura ERP, muchos desarrolladores comenzaron a presentar sus desarrollos como ERP ... La moda para los términos es algo poderoso.
A este respecto, se recuerda lo siguiente. Cuando el partido permitió la cibernética, comenzó un debate sobre cómo llamar lo que ahora se llama "computadora". "Calculadora", "TsAM", "Computadora" ... - todo no funcionó. El gran y poderoso lenguaje nuestro salvó la "Computadora" antes del americanismo. En mi opinión, esta es una manifestación del complejo de inferioridad en Occidente. Y, debo decir, por desgracia, un complejo completamente justificado.
Sobre integración
Vi muchas implementaciones de sistemas bancarios y, casi siempre, se promocionaban como sistemas integrados. Pero realmente, nunca han sido así. Creo que aún está por llegar un sistema verdaderamente integrado. Tal sistema debería tener un único modelo de información, un único modelo de objeto, un único modelo funcional, un solo concepto y arquitectura: la integración debería lograrse sobre datos, objetos, funciones, eventos, interfaces. No he visto esto
Lo mas
La tarea mas interesante
Este es un proyecto de análisis de negocios. Lo que puede divertir al orgullo es la conciencia del hecho de que TK se determinó a sí mismo, realizó la producción él mismo, el modelo de información en sí, el modelo de objetos en sí y, además, también programa. La tarea es interesante en su novedad y amplitud. Sus bordes no son visibles.
El mayor desafío
El proyecto colectivo más grande es el pasaporte de construcción de toda Bielorrusia. El proyecto se implementó en un ensamblador de computadoras de la UE. Área temática: datos sobre todos los proyectos de construcción en Bielorrusia. El usuario mismo establece la estructura y el contenido del informe de construcción.
El proyecto individual más grande es Business Intelligence. Área temática: análisis del estado pasado, actual, planificado y previsto del negocio. Herramientas: descomponedores, comparadores, escenarios de simulación, series temporales, hipótesis estadísticas. Idiomas: Delphi, C #.
El reto mas sorprendente
Esta es la primera introducción a la recursividad. Estaba muy impresionado con la solución del problema de la torre de Hanoi usando la recursión: reducción al mismo problema, pero de una dimensión inferior, por lo que la solución es obvia para las dimensiones pequeñas. El problema de las ocho reinas también fue muy impresionante.
El libro mas llamativo
Dahl, Dijkstra, Hoar. Programación estructural.
Dijkstra La disciplina de la programación.
Los casos mas ridiculos
Desarrollamos un proyecto en Kobol para el EC-1020. Soy un programador principiante. Era necesario un programa de despachador que llamara a ciertos programas, dependiendo de la situación. Los programas en Kobol no pudieron ser descargados por otros (o no sabía cómo hacerlo). Era necesario escribir en ensamblador (que no sabíamos) o hacer algo más. Y luego encontraron esto diferente: este es el lenguaje de administración de trabajos (JCL) del sistema operativo DOS.
Había tal cosa como SYSIN (dispositivo de entrada lógica), SYSRDRR (dispositivo de entrada de directiva lógica JCL), etc. Podrían reasignarse en tiempo de ejecución. Por lo tanto, habiendo preparado un montón de SYSRDR para cada rama posible, puede, en principio, completar la tarea. Y dedicamos mucho esfuerzo para hacer esto. Y todo, por supuesto, en vano. Después de estudiar Assembler, lo obtuvimos todo, y después de haber realizado un gran esfuerzo con JCL, incluso después de haber logrado el resultado, no obtuvimos nada nuevo. Debe elegir no entre lo que está más cerca, sino lo que traerá más beneficios en general. Por cierto, DOS fue reemplazado por OS / 360 y ese JCL es cosa del pasado. Pero fue aún más seductor, pero ese error no se ha repetido. Es difícil hacer un arma con un tirachinas.
Lo mas gracioso
Al comienzo del "tapping", el producto se puso en funcionamiento utilizando un ejemplo de prueba. Un caso de prueba es una prueba global compilada por economistas. El resultado de la ejecución de un producto generalmente eran tabulogramas: informes sobre el estado del problema que se está resolviendo, en diferentes etapas de su solución. Los tabulagramas se verificaron con un ejemplo de control y si coincidían, el producto se aceptaba para la operación de prueba. Pero el proyecto no está listo. Que hacer La solución es simple. Se escriben programas que producen tabulagramas en la frente. En la entrega, comienzan. Y un Cliente sin experiencia (¿y quién tenía experiencia?) Firma un certificado de aceptación para la operación de prueba.
"Si puedes decirlo, entonces por qué mostrar": un querido programador respondió con una frase así, cuando después de un emocionante programa del programa que creó, este último se cayó al comienzo del programa y pasó de mostrar a contar.
El mas extraño
Se está desarrollando un proyecto: "Business Intelligence". Fue desarrollado bajo NT. Y ahora necesitamos demostrar con urgencia el sistema en el banco. Decidimos hacerlo en una computadora portátil. Windows 98 ya estaba parado allí. Ponemos, recompilamos, corremos, todo está bien, excepto uno: el comienzo del período se estableció en 1898. Comenzamos a sospechar que el contexto que contiene las fechas se extrajo incorrectamente. El contexto se recupera mediante el código de usuario, que se recupera llamando a la función GetUserName de la API de Windows. Comenzamos a sospechar que esta función no funciona correctamente. Establecemos el punto de palanca y ejecutamos el depurador. Todo está bien y el programa funciona bien y las fechas son normales. Descartaron todo por casualidad. Era de noche y nosotros, complacidos, nos íbamos a casa. Mañana en el banco. A la mañana siguiente activamos, nuevamente la misma situación con las fechas. Activamos el analizador en el depurador; todo está bien. Bueno, la situación en la mecánica cuántica es sencilla: cuando no espían una partícula, interfieren con las ondas, y cuando las espían, son partículas. Entonces no recibimos una respuesta. Y para que todo saliera bien, nosotros "bolígrafos" ingresamos los datos correctos y la demostración fue exitosa.
Bueno, y otro caso de demonio. Desarrollamos el proyecto de análisis juntos y, por lo tanto, utilizamos las herramientas para apoyar el trabajo en equipo en el proyecto: MS SourceSafe. Este producto admite varias versiones históricas. Y aquí he encontrado repetidamente que, después de arreglar alguna rama importante, después de un tiempo noto que la versión anterior está allí, pero no hay correcciones. Y así se repitió varias veces. Atribuí todo al analfabetismo. Pero, ¿qué tipo de producto es tan despiadado para los analfabetos?
Casi filosofia
¿Cómo describir las capacidades intelectuales de un programa, una computadora con un tamaño de memoria fijo? Está claro que ni siquiera pueden recordar un número suficientemente grande. Entonces, qué, nosotros tampoco podemos recordar y escribir un número suficientemente grande. Pero no nos relacionamos con
criaturas no intelectuales. Entonces, ¿dónde está la definición formal de inteligencia? Creo que este es uno de los problemas fundamentales. ¿Cómo describir una medida de la inteligencia de un sistema con parámetros externos dados: memoria? ¿Cómo puede un programa entenderse a sí mismo: los límites del autoconocimiento? El uso de macros: programas que se modifican a sí mismos, plantean preguntas: ¿puede un programa hacerse más sabio ?, ¿dónde están los límites de la inteligencia?
Como antes, la visión del mundo estaba determinada por las ciencias naturales, por lo que ahora está cada vez más determinada por la informática. No me refiero a la programación primitiva, sino a la ciencia de la programación.
Muchos de los problemas filosóficos más abstractos se vuelven completamente concretos cuando se ven desde un punto de vista informático . Considera este ejemplo. Después de todo, los programas de criaturas inteligentes se pueden simular en una computadora. Puede simular reproducción, selección, herencia, espacio, tiempo ... El resultado es un mundo dentro de la computadora. Y aquí las criaturas intracomputadoras (softhomo) viven allí, luchan por un pedazo de pan, hablan, filosofan y, tarde o temprano, piensan: ¿hay un dios en el mundo? ¿Qué es primario: materia o conciencia? ¿Hay cosas en ti? ¿Conoces el mundo? Hay un solipsista y declara: "todo el mundo existe solo en mi imaginación". Los materialistas locales lanzaron un aullido a este respecto. ¿Quién tiene la razón? Desde el punto de vista de su mundo, los materialistas tienen razón, y desde el punto de vista de nuestro mundo, externo a ellos, el solipsista tiene razón. Prueba de ello es apagar la computadora.
Y en nuestro mundo se ha expresado la idea de que tanto los materialistas como los idealistas tienen razón. En física, el pensamiento dicotómico primitivo como "partícula u onda" - "Y partícula y onda" ha sido superado durante mucho tiempo. Así es en filosofía. Cuando se le preguntó qué es la verdad profunda, Bora respondió: "La verdad profunda es una verdad, cuya negación también es una verdad profunda". La negación de la verdad 2 * 2 = 4 no es profunda, lo que significa que esta verdad en sí misma no es profunda. Pero la negación de la verdad "la materia es primaria" es profunda, como dice todo el desarrollo de la filosofía, cuando los materialistas leninistas solo criticaron las innovaciones idealistas sin proponer nada nuevo: dicen "Sí, ellos mismos no entienden lo que se les ocurrió. Pero tan pronto como le demos una interpretación materialista, todo se volverá verdaderamente científico. Ejemplo: cibernética, semiótica, interpretación de Copenhague de la mecánica cuántica, etc.
Y esto es lo que pasa: no importa lo que inventen los softhomes, no importa cuán difícil sea su intelecto, nunca verán y escucharán nuestro mundo fuera de ellos, un programador, por ejemplo (si el programador no abre el diálogo explícitamente). Y para ellos, el programador es un dios, y nuestro mundo es una cosa para ellos en sí mismos, y nada de nuestro mundo es incognoscible para ellos, y su capacidad intelectual hecha por el programador es un conocimiento a priori. Parece que Kant, que habló sobre todo esto en su filosofía, realmente sabía mucho al respecto. Los conceptos más abstractos de Kant de "cosa en sí misma", "trascendental", "trascendental", "conocimiento sintético a priori" reciben cosas bastante comprensibles en esta interpretación. Para este mundo, nuestro mundo entero es cosas en sí mismo, el conocimiento sintético a priori es todo lo que un programador ha puesto en el intelecto del mundo intracomputador, el conocimiento trascendental para él es el conocimiento de cómo un programador creó este mundo informático.
En este caso, puede preguntarse: ¿O tal vez para algunos de nosotros somos el mundo de las computadoras y Dios es un programador? Por cierto, el llamado principio antrópico está formulado en física. Resulta que todas las leyes de la física están dispuestas de tal manera que las habrían cambiado un poco y no habría surgido una persona. Cambie un poco la constante gravitacional, o la carga del electrón, o la constante de Planck, y todo funcionará para que el Sol no se ilumine o haga demasiado calor. Es decir, todo se hace para que aparezca una persona. Es cierto, muchos dicen que esto es evidente: pueden surgir mundos diferentes millones de veces sin una persona, pero si una persona ya ha aparecido, entonces, naturalmente, el mundo en el que apareció está diseñado para que aparezca. Una vez que el tractor abandona el transportador, es natural que el transportador esté diseñado para que aparezca el tractor. Pero aún así, aún ...
Por lo tanto, la programación le permite tener una nueva visión de los problemas de la cosmovisión. Esto puede cambiar fundamentalmente la cosmovisión misma.
Pasado
De todo el viaje de mi vida he sacado la sabiduría banal: "
Una mente no es suficiente para actuar de manera inteligente ". Cuántas mujeres inteligentes había en nuestro curso, muchas. Donde estan ¿Qué más se necesita para el éxito? Pero Dios lo conoce. Y suerte, y dinero, y arrogancia mundana. Por desgracia, los descarados tres gobernantes gobiernan todo. Los hombres inteligentes también dudan de sí mismos. Tienen suficiente inteligencia, pero no lo suficiente.
La queja de los antiguos babilonios "Llegaron los tiempos difíciles, los dioses estaban enojados, los niños ya no obedecen a los padres y todos quieren escribir un libro". Modernidad modificada: "
Llegaron los tiempos difíciles, los dioses están enojados, los niños ya no obedecen a los padres y todos quieren escribir un libro, y, ay, todos el tonto quiere crear su propio sitio / portal / blog en Internete ".