¿Por qué los físicos no escriben fórmulas legibles por humanos, como hacen los desarrolladores? Por ejemplo, energía = masa * velocidad_de_luz ^ 2 en lugar de E = mc ^ 2

Después de haber tenido una carrera de investigación en física y una carrera de ingeniería de software para aplicaciones técnicas, tuve que lidiar con este problema y darme cuenta de que uno debe tener en cuenta el contexto y el propósito.

La buena notación es su amiga y puede ayudar enormemente, pero lo que constituye una buena notación depende en gran medida del contexto y de lo que sea posible.

El desarrollo de software y el análisis físico tienen dos objetivos diferentes y dos anotaciones diferentes disponibles.

Metas:

El objetivo del físico es usar ecuaciones para hacer manipulación algebraica, reorganizar ecuaciones, realizar la sustitución de un lado de una ecuación por otro lado de una ecuación en una segunda ecuación, etc. Las expresiones son diferenciadas, integradas, enrevesadas y manipuladas de otro modo. Todo esto se hace simbólicamente, no numéricamente, hasta que uno necesite obtener una respuesta numérica real. Para un físico, escribir mc ² = E es tan bueno como escribir E = mc ²: manipulan de la misma manera. A los físicos no les importan mucho los valores numéricos; en cambio, prefieren principios e interrelaciones. ¿Qué le sucede a una cantidad cuando doblo otra cantidad? ¿Se duplica, se cuadruplica, se reduce a la mitad o hay una relación logarítmica …? Es mucho más esclarecedor, cuando se le da un problema de tarea en un libro de texto que se describe en un contexto muy específico con valores numéricos, resolver el problema del caso general sustituyendo las variables por los valores numéricos, haciendo la manipulación algebraica necesaria (y observando un un montón de información irrelevante se cancela reduciendo la cantidad de esfuerzo final de cálculo de números, lo que ahorra tiempo y reduce el riesgo de error), evaluando la expresión formulada para la cantidad solicitada en el problema en términos de las cantidades conocidas que buscan la cordura [o locura] de resultado al verificar casos extremos (objeto 1 con una masa mucho mayor que el objeto 2, y luego al revés), proporciones esperadas y análisis dimensional. Luego sustituya los números por las variables para responder la pregunta específica del libro de texto. Si, en cambio, va directamente a la calculadora y conecta los valores numéricos solo para hacer la tarea, es mucho más difícil saber si su respuesta está en el estadio correcto y no ha obtenido una visión física.

El objetivo del desarrollador de software es, por otro lado, desarrollar algoritmos, tal vez con la ayuda de un experto en el dominio de la aplicación, e implementarlos en una computadora para que, cuando se le den valores numéricos para las entradas, se procesen los números de acuerdo con salen fórmulas o algoritmos programados y números. Todo esto es manipulación de números, no de ecuaciones. Si se supone que debo programar la capacidad de determinar, dado el número de kilogramos para una masa y saber la velocidad de la luz es 299 782 458 m / s, el número de julios de energía equivalente, entonces E = m * c ** 2 no es una ecuación en este contexto, sino una declaración de asignación que dice extraer el valor de lo que está almacenado en una ubicación de memoria que se llama m, extraer el valor de una ubicación de memoria llamada c (que siempre debe tener el valor 299_792_458. 0), cuadra el último y multiplica por el primero, y almacena el resultado numérico en una ranura de memoria llamada E. Está prohibido sintácticamente reescribir esto como m * c ** 2 = E como puedes hacer con una ecuación, porque esto no es una ecuación para la manipulación, sino simplemente una notación para dirigir una cierta secuencia de cálculos y almacenar el resultado en una ranura de memoria etiquetada por lo que está en el lado izquierdo de =. Una acción común necesaria en un programa de computadora es contar eventos o recorrer los elementos de una matriz, por lo que uno necesita incrementar este contador en 1, lo que se hace en un programa de computadora como n = n + 1 (y, sí, para Programadores de C, C ++ y Java, sé que tienes ++ n y n ++, pero otros lenguajes no y el procesador de lenguaje generalmente ejercitará las mismas instrucciones que n = n + 1 y, lo más importante, ++ n no comunicar mi punto) Para un físico, n = n + 1 tiene la sintaxis de algo que puede manipular algebraicamente como una ecuación, pero si intenta hacerlo, obtendrá el resultado obviamente erróneo de que 0 es igual a 1.

Es una tarea completamente diferente que los físicos están tratando de lograr con ecuaciones que lo que los desarrolladores de software están tratando de lograr con las asignaciones. Es mucho más fácil ver que hay un valor idéntico en el numerador de una fracción que en el denominador de la fracción que se puede cancelar, simplificando la ecuación que se manipula, cuando la notación de las cantidades es corta y simple que los nombres largos . Con símbolos cortos, una ecuación probablemente encajará en una o, como máximo, dos líneas, mientras que los nombres de variables largos pueden desencadenar seis o siete líneas de expresión, lo que puede ocultar efectivamente el uso repetido de nombres. Los desarrolladores de software generalmente reciben las fórmulas adecuadas para usar y ya están simplificados, por lo que los desarrolladores no tienen necesidad de buscar duplicados o posibles simplificaciones.

Notación:

Los físicos tienen disponible una amplia variedad de técnicas para distinguir múltiples significados para nombres muy similares. Se utiliza la mayor parte del alfabeto inglés y gran parte del alfabeto griego, evitando rigurosamente las letras griegas que, en el mejor de los casos, apenas se distinguen de las letras inglesas en apariencia. Por ejemplo, las letras griegas Α, Β, Ε, Ζ, Η, Ι, Κ, Μ, Ν, Ο, Ρ, Τ, y Χ nunca se usarían para símbolos, pero eso todavía deja un poco del alfabeto griego disponible. Además de eso, importa si una letra es mayúscula versus minúscula, en cursiva o vertical, negrita o peso normal, y en algunos casos si se usan o no serif. (S como la unidad de medida de conductancia siemens, s como la unidad de medida segundo, s como la medida de una longitud de arco, S como área de superficie, S como el vector de Poynting para la propagación de potencia electromagnética, etc., todos estos son potencialmente utilizados en un libro de texto de física o incluso en un artículo de revista de física, y todos se mantienen rectos.) Muchos símbolos son bastante estándar al menos dentro de una rama de la física y serían familiares para los investigadores en ese campo; Los símbolos inusuales (y en algunos casos también los símbolos comunes) se explican típicamente en algún lugar del libro de texto o artículo de revista. y fácil de entender por el lector típico. Se pueden aplicar numerosos signos diacríticos sobre las letras, como barras, puntos, circunflejos, etc. para proporcionar un símbolo diferente con un significado diferente. La escritura (a mano o en publicación) de fórmulas físicas permite el uso de estructuración vertical para que las fórmulas se expresen en dos dimensiones: superíndices versus subíndices, fracciones que usan el vinculo (barra horizontal) con el numerador físicamente arriba y el denominador físicamente debajo. Además, los físicos pueden usar nuevos símbolos para nuevos operadores: en un artículo de revista, simplemente declararán que están definiendo tal y tal símbolo para significar tal y tal operación en tal y tal conjunto. Los físicos usan numerosos nombres no alfabéticos para operadores como +, -, ×, ∙, /, ∗,!, ±, ∓, ∆, ∇, ∑, ∏ y muchos otros. Cuando se eligen bien, los símbolos pueden transmitir impresiones al lector que los guían a la interpretación correcta correcta muy rápidamente.

Los programadores de computadoras están muy restringidos en cómo pueden formatear el código fuente. Históricamente, el código fuente tenía que escribirse usando solo caracteres ASCII (lo que está disponible en los teclados estadounidenses, señalando más, nada menos); La capacidad de usar caracteres de otros alfabetos (como el griego o el cirílico) en el código fuente ha ido creciendo a lo largo de los años. Los operadores, por otro lado, todavía deben ser caracteres ASCII y solo lo que el lenguaje define como operador con algunos idiomas que permiten definiciones definidas por el usuario para esos operadores. Una dificultad es que los símbolos matemáticos estándar × y · no están disponibles en el teclado, por lo que * fue sustituido en la mayoría de los lenguajes de programación, aunque * tiene un significado bastante diferente en matemáticas. El código fuente es estrictamente lineal: el único uso de la estructuración vertical es alinear las cosas en diferentes líneas para fines de legibilidad humana, y no hay forma de crear fracciones verticales como [math] \ frac {x} {y} [/ math] . No hay capacidad para usar subíndices o superíndices en el sentido de notación matemática y física. Si tiene una matriz (como para un vector o una matriz), no puede escribir código como [math] v_1 [/ math] para acceder al elemento # 1 del vector v ; en su lugar, deberá escribir algo como v (1), v [1] o nombrar individualmente cada elemento como v_1 (notación LaTeX para indicar un subíndice). En el mejor de los casos, el lenguaje de programación considerará dos identificadores que difieren solo en el uso de minúsculas versus mayúsculas como identificadores distintos (C, C ++, Java) y muchos ni siquiera lo hacen (Ada, Fortran). Los lenguajes de programación no permiten distinguir los caracteres en cursiva de los verticales, los caracteres de negrita versus los de peso normal en los identificadores o cualquier otra característica de fuente. Por lo tanto, si está tratando de escribir un programa basado en fórmulas dadas en un diario de física que tiene S, s, s , S y S , como máximo puede usar un identificador S y un identificador s; Para manejar los otros elementos, se necesitan letras totalmente diferentes o nombres de identificación más largos. Además, los programas de computadora pueden durar muchos años y, a menudo, habrá un cambio de personas que los mantienen y actualizan, a menudo trayendo nuevas personas que no son expertas en el dominio de la aplicación; por lo tanto, los identificadores breves serían más difíciles de entender para ellos, justificando nombres más largos y con más palabras.

En pocas palabras: los símbolos breves tienen muchas ventajas para los físicos en contraste con los desarrolladores de software para los cuales los identificadores más largos tienen muchas ventajas. Esto surge debido a los diferentes propósitos de las ecuaciones para el análisis en física versus las fórmulas para el cálculo y la asignación, así como las diferentes habilidades para anotar y formatear para facilitar la comprensión y la manipulación.

El problema en su pregunta es el sesgo : ha decidido que una práctica particular que usan los programadores, a saber, la denominación de variables en inglés en un programa para mejorar la legibilidad humana, debe hacerse en todas partes. Para ilustrarlo, ha tomado una ecuación en particular, una muy simple y aparentemente directa que parece aumentar su legibilidad. Este es un error clásico de lógica, llamado la falacia del “hombre de paja”. Es un hombre de paja, porque has confundido el trabajo de lo que hacen los desarrolladores con el trabajo de lo que hacen las personas en otros campos de estudio.

Tomemos como ejemplo la siguiente ecuación, las ecuaciones de campo de Einstein:

Me mago de las ecuaciones de campo de Einstein – Wikipedia

Ahora, siguiendo la lógica que has establecido, escribe lo mismo en forma legible para humanos. Necesitará un poco de tiempo, porque para hacerlo, probablemente tendrá que escribir lo que equivale a un libro de texto de posgrado, página tras página, sin absolutamente ninguna imagen. Lo que hace una fórmula, escrita en el formato que se le da, es reemplazar una representación usando los 26 caracteres alfanuméricos con un conjunto mucho más amplio de imágenes posibles donde la orientación posicional, el uso de caracteres no romanos, incluyendo letras griegas, signos y símbolos, Transmite rápidamente el significado de lo que se está comunicando en una forma que otros físicos practican e interpretan fácilmente. Es posible que haya escuchado la frase, “una imagen vale más que mil palabras”: ¿no hay un puñado de situaciones en las que usted, como programador, estaría perdiendo menos tiempo dibujando un diagrama de estado UML en lugar de su equivalente en algún sentido? ¿inglés simple? Entonces comprenderá por qué un programa, escrito en forma alfanumérica, no siempre es la forma más fácil o más rápida de documentar o comunicar a otro programador los componentes elementales de lo que un programa bastante complicado podría esperar lograr.

Donde es “la forma más rápida” es cuando quieres meter algo así en una máquina de estados finitos, es decir, una computadora. Una computadora ha evolucionado de algo que solo es capaz de recibir información en forma de “unos” y “ceros” en una forma más “legible para humanos” a través de un compilador. Allí, ahora tiene una doble traducción: la máquina de estados finitos apunta a una serie específica de bytes en algún lugar de la memoria, empuja y hace estallar los bits en pilas, y luego se da vuelta y los vuelve a traducir a una forma pseudo legible para decir ” error-failure_to_initialize en variable speed_of_light ”cuando se trata de ir y venir con esa máquina de estados finitos.

Hay una razón por la cual los físicos no dicen “the_ricci_curvature_tensor_sub_mu_sub_nu” para el primer término de la ecuación, en el sentido de que “el tensor de curvatura de Ricci” no es una variable en el sentido de que los programadores podrían usar el término. Para que un programador exprese el tensor de curvatura de Ricci en cualquiera de los aproximadamente 20 lenguajes de programación actualmente en uso popular, es probable que necesite escribir un programa completo (o dibujar en secciones extensas de una biblioteca de funciones especializadas) de una manera que sea no es tan sencillo como escribir la ecuación E = mc ^ 2.

Los científicos no participan habitualmente en el acto de ingresar programas en las computadoras en forma alfanumérica pura. No están interesados ​​en la respuesta final, una operación de “10 velocidades de impresión de luz” que tiene una respuesta única y absoluta al final del día. Para realizar los actos que realizan a diario, se involucran en una serie de operaciones simbólicas que no están perfectamente linealizadas en “inglés simple” alfanumérico. Es por eso que la abrumadora mayoría de los científicos no usa una simple máquina de escribir con teclado para escribir sus ecuaciones, lo hacen con tiza y pizarra, o si están escribiendo profesionalmente sus ecuaciones para hablar con otros físicos, un editor especializado como Látex.

También he entendido mal el papel que desempeña una función como E = mc ^ 2 en el trabajo diario de los físicos y otros científicos. Como cuestión práctica, ningún físico dice rutinariamente “caramba, tengo un poco de masa aquí, ¿cómo sería eso en energía?”, La forma en que un programador podría decir: “caramba, estoy tratando de reunir una suma de cuántos píxeles Necesito mover este punto de xay en una pantalla “. Cuando un físico habla sobre el significado de E = mc ^ 2, está hablando de la intercambiabilidad inherente de las unidades de medida de masa y energía, y como resultado, habla de ellas como si fueran la misma cosa. Por ejemplo, así como uno podría decir “tengo dos o tres gramos de azúcar”, un físico podría referirse a la masa como medida en electronvoltios o kilojulios o algún otro término derivado.

Esto lleva a otra ceguera inherente dentro de la programación de computadoras: cuando usas un nombre de variable como speed_of_light, asumes que tal cosa tiene una forma distinta (y representable en binario). Sin embargo, para un físico, eso podría ser 1 (si usa unidades de Planck), pero cuando ingenuamente escribió eso, no tenía forma de decir si la velocidad de la luz estaba en unidades de Planck o metros_por_segundo o kilofurlongs_por_fortnight o aardvarks o cualquier otra unidad de medida. Entonces, en el proceso de escribirlo en una forma que no sea tradicional (pero aparentemente más “legible para los humanos” para los ojos de su programador), en realidad está empeorando las cosas para los cientos de miles de no programadores que saben que E no es un variable, es una representación abstracta para toda una clase de cosas. Lo has forzado, en lenguaje de programador, a ser una variable cuando ningún físico realmente trata la “energía” como un número o en forma numérica. Lo pretenden en forma simbólica.

Además, hablas de E = mc ^ 2 como si fuera algo que cualquiera usa. En realidad, si bien es famoso, no es útil; de hecho, es la derivación de esta forma simple que muestra todas las “cosas” simbólicas útiles reales detrás de la Relatividad Especial, y de hecho, no es una “ley”, así que como resultado derivado de otras leyes. Para una explicación más completa del tipo de cosas en las que te estás metiendo cuando empiezas a hablar sobre tener que escribir speed_of_light ^ 2, te indico una de las numerosas publicaciones de blog que muestran la derivación real de E = mc ^ 2, diga “La derivación de Einstein de E = mc ^ 2” de Terence Tao:

imagen: de la derivación de Einstein de E = mc ^ 2

Si tuviera que escribir una línea de un programa de computadora en la forma que Einstein realmente pretendía, podría tener que escribir mass_of_object = mass_of_object – energy_of_photon / speed_of_light ^ 2. Y hay otra complicación en el “lenguaje de programador”: cuando un físico escribe ecuaciones, está hablando de una equivalencia simbólica, mientras que cuando un programador escribe una ecuación, está hablando del estado evolutivo de una máquina de estados: el valor de mass_of_object antes de la acción de la línea escrita y después de la línea escrita hay dos valores diferentes. Es por eso que Einstein no escribió m = m – e / c ^ 2: no está tratando de forzar el lenguaje en uno que pueda ser entendido por una máquina de estados discreta y finita. Está diciendo que todas las cosas en el lado derecho del signo igual son esencialmente lo mismo, bajo sus suposiciones y teoremas, como las cosas en el lado izquierdo de la ecuación, para siempre.

Para usted, como programador, es posible que se sienta cómodo solo lidiando con tangibles absolutos, aquellos que nunca aparecen en la pantalla azul, que siempre son completamente expresables en una máquina de estados finitos. Excepto que, si bien las leyes de la física algún día podrían ser completamente expresables y no “error de sintaxis” de su máquina de estados finitos, debe comenzar a sentirse más cómodo con el hecho de que su lenguaje de programador de “inglés simple” no es completamente robusto y forma “completa” de expresar todas las cosas que los humanos quieren expresar.

Volvamos brevemente al tensor de curvatura de Ricci. Puede ver esto escrito en algunos libros de texto como (en su “inglés simple”) Ricci_curvature_tensor_sub_mu_sub_nu o puede verlo escrito Ricci_curvature_tensor_sub_i_sub_j. Inmediatamente, reconocerá que el simple reemplazo de las palabras en inglés para los parámetros del subíndice no es suficiente o una buena práctica de programación; por ejemplo, tanto ” i ” como ” j ” son formas en que algunos ingenieros o matemáticos podrían escribir square_root_of_negative_one, excepto (con suerte, obviamente) que “sabes” no queremos decir eso cuando hablamos de i o j aquí. Entonces, ¿cuál es la representación en inglés simple que debería usar aquí para el “significado” de mu o nu ? De hecho, estos son dos campos vectoriales, colecciones abstractas de un número infinito de puntos en un espacio cuatridimensional ordinario, cada uno de los cuales tiene una “curvatura”, un vector que apunta a otro de los puntos en ese espacio cuatridimensional.

Así que demos un golpe: “Ricci_curvature_tensor_over_the_interaction_of_the_set_of_all_conditions_related_to_the_first_location_in_spacetime_and_the_second_location_in_spacetime”.

¿Es eso realmente más útil que tres identidades simbólicas capital_R_sub_mu_sub_nu? Estás perdiendo la utilidad del “inglés simple” al intentar escribir una regla, diciendo “todas las cosas deben hacerse claramente y en inglés simple como lo hacen los desarrolladores” sin entender primero las razones por las que las cosas se hacen de esa manera: estás comprometido en sesgo , en una insensibilidad cultural.

Ciertamente, hay formas más compactas de expresar cosas simbólicamente que no se pueden expresar en los primeros 255 caracteres ascii: es mucho más fácil dibujar que escribir four_sided_equilateral_parallelogram, y eso ni siquiera involucra infinitos, infintesimales, cálculo de tensor simbólico o cualquiera de Las complejidades y matices del cálculo en la parte superior de esta respuesta.

Entonces, ¿por qué odias? Abraza el simbolismo en E = mc ^ 2.

ver también: la respuesta de Viktor T. Toth a ¿Por qué los científicos no crearon una sola palabra simple que comience con la letra c para la velocidad de la luz?

Soy un desarrollador, con casi 40 años de experiencia práctica, ¡que se remonta a los días de las tarjetas perforadas y los compiladores FORTRAN! Ah, y yo también soy físico, de algún tipo. ¿Y la mejor parte? Parte del trabajo de desarrollo que hago es la computación científica, una especie de intersección de los dos mundos.

A veces, escribo código como este (un ejemplo hipotético *):

doble E (doble m)
{
const doble c = 299792458; // Sra
devuelve m * c * c;
}

De hecho, encuentro este código más legible que cualquier alternativa con nombres largos y descriptivos, porque el significado de los símbolos es bien conocido y no es ambiguo.

OK, este ejemplo es demasiado simplista, tal vez. Digamos que estoy haciendo otra cosa: en realidad estoy calculando el potencial gravitacional de un planeta en alguna posición. Mi función bien podría verse así:

doble SQ (doble x) {retorno x * x; }

doble U (doble * r, doble * r0, doble M)
{
const doble G = 6.674e-11; // m ^ 3 / kg / s ^ 2
doble dr = sqrt (SQ (r [0] -r0 [0]) + SQ (r [1] -r0 [1]) + SQ (r [2] -r0 [2]));
retorno -G * M / dr;
}

Nuevamente, para cualquiera que realmente sepa lo que hace esta función, la notación es inequívoca. ¿Pero sabes que? Hagámoslo de la manera “como lo hacen los desarrolladores”, supuestamente:

double square_of (parámetro doble) {parámetro de retorno * parámetro; }

double GravitationalPotentialOfAPlanet (double * location_vector,
double * planet_location_vector, double planet_mass)
{
const doble Newtons_constant_of_gravity = 6.674e-11; // m ^ 3 / kg / s ^ 2
const int x_coordinate = 0;
const int y_coordinate = 1;
const int z_coordinate = 2;
double distance_from_planet_to_location =
sqrt (square_of (location_vector [x_coordinate] –
planet_location_vector [x_coordinate]) +
square_of (location_vector [y_coordinate] –
planet_location_vector [y_coordinate]) +
square_of (location_vector [z_coordinate] –
planet_location_vector [z_coordinate]));
return -Newtons_constant_of_gravity * planet_mass /
distance_from_planet_to_location;
}

No sé tú, pero seguro que no me parece más legible. Por el contrario, esta confusión ahora requiere un gran esfuerzo para descifrarla.

Y esto, por cierto, es solo la fórmula relativamente simple [math] U = -GM / | {\ mathbf {r}} – {\ mathbf {r}} _ 0 | [/ math]. Imagine un caso más realista, calculando, por ejemplo, pequeñas correcciones al potencial gravitacional debido a los armónicos esféricos de un cuerpo rotacionalmente simétrico, como un gigante gaseoso:

[matemáticas] U = – \ dfrac {GM} {| {\ mathbf {r}} – {\ mathbf {r}} _ 0 |} \ left [1- \ displaystyle \ sum \ limits_k \ left (J_ka ^ k \ dfrac {P_k (\ sin \ theta)} {| {\ mathbf {r}} – {\ mathbf {r}} _ 0 | ^ k} \ right) \ right], \ tag * {} [/ math]

Ni siquiera intentaré transcribir esta fórmula en “habla del desarrollador” a mano.

Para ser claros, no estoy en contra de la idea de nombres de variables descriptivas. A veces tienen sentido. Pero en los últimos años, he visto a personas exagerar demasiado en esto. Las fórmulas simples que deberían ser obvias de un vistazo ahora ocupan varias líneas y requieren un gran esfuerzo para descifrar, porque algunos desarrolladores creen que ya ni siquiera puede tener un contador de bucle con un nombre de peatón como i ; tiene que ser algo así como counter_of_my_thirteenth_inner_loop_that_is_counting_the_gadgets_of_widgets, porque, como, ¡eso es más legible!

No es.


* Solo en caso de que sea necesario decirlo, estos no pretenden ser ejemplos representativos del código de producción de “mejores prácticas” y, como tal, carecen de cosas como verificación de límites de matriz, validación de parámetros o protección contra desbordamiento, división por cero , etc. Elegí usar la sintaxis C de vainilla para estos ejemplos por simplicidad.

De acuerdo, déjame intentarlo:

  • la energía es igual a la masa multiplicada por el cuadrado de la velocidad de la luz
  • energía = masa * velocidad_de_luz ** 2
  • E = mc ^ 2

¿Ves un patrón? Ahora déjame probar alguna ecuación más utilizada, algo que se enseña a los estudiantes de secundaria:

  • La fuerza gravitacional ejercida entre dos cuerpos es igual al producto de la constante gravitacional, la masa del primer cuerpo y la masa del segundo cuerpo, dividida por el cuadrado de la distancia entre el centro de masa de los dos cuerpos.
  • gravitational_force = universal_gravitational_constant * mass_first_body * mass_second_body / distance_between_bodies_center_of_mass ** 2
  • F_g = GmM / r ^ 2

Tenga en cuenta que la mayoría de los problemas reales se describirán mediante ecuaciones mucho más complejas. Debe quedar claro ahora que:

  1. las anotaciones físicas son sintéticas, lo cual es bueno dado que los físicos todavía usan papel para dibujar ecuaciones y resolver problemas
  2. ni las ecuaciones legibles por humanos ni las de tipo matemático tienen sentido a menos que se sepa lo que significan

Por lo tanto, la preocupación de los físicos (y especialmente de los profesores de física) no es hacer que las ecuaciones sean más fáciles de leer, sino hacer que la física se entienda. Si lee artículos científicos, encontrará que la mayoría de las veces una ecuación corta es seguida o anticipada por un comentario largo que describe todos los símbolos que aparecen en la ecuación. Espero que tenga más sentido ahora!

PD: un giro diferente a la respuesta sería convertirse en una pregunta: ¿por qué el programador escribe como usted en la pregunta? Debido a que la mayoría de las veces está resolviendo un problema único (su ecuación y, por lo tanto, los símbolos no estarán dentro de 400 años a partir de ahora) y las ecuaciones son normalmente cortas o pueden dividirse en múltiples líneas de código.

Creo que es bastante simple: porque una ecuación física generalmente tiene un puñado de variables, mientras que un programa tiene miles.

El número de fórmulas físicas es bastante pequeño; probablemente podría escribir toda la física en una hoja de papel estándar, con espacio para garabatear en los márgenes. Cada dominio solo tiene una pequeña cantidad de conceptos con los que trata; algunas variables están duplicadas entre dominios, pero entre los alfabetos latino y griego puedes cubrir casi todas las nociones que necesitas con una misma letra.

Dentro de cualquier fórmula, tiende a necesitar solo un par de conceptos. Si necesita más de uno, puede decir cuál es cuál con un subíndice (como [math] m_1 [/ math] y [math] m_2 [/ math]). Si necesita mucho de eso (más de tres), lo más probable es que exista alguna estructura a la que pertenezcan (como una matriz o un tensor), lo que le permite referirse a todo con un solo nombre.

Escribir “masa” cada vez sería engorroso y difícil de leer. Usar una sola letra, cuando todos están de acuerdo, es mucho menos voluminoso.

Los programadores también lo hacen. Las variables de bucle local son casi siempre i o j (una práctica que se remonta a Fortran). Los argumentos de una sola función son comúnmente x ; es probable que las funciones sin nombre sean f . Estas son siempre variables locales : su significado completo puede entenderse a partir del contexto que lo rodea. Y tienen un conjunto limitado de significados.

Los programas son más complicados que la física. La física es, en última instancia, un conjunto muy simple de leyes (al menos, el tipo de física en el que estás pensando). Solo hay unas pocas piezas móviles fundamentales en el universo. El código real implica muchas, muchas piezas móviles, por lo que necesitan nombres más precisos y más informativos.

Hay muchas buenas respuestas aquí. Una cosa que no he visto mencionado es que el código también se escribía así . Hubo un tiempo, no hace mucho tiempo, cuando guardar cada byte posible en un programa realmente importaba, por lo que los nombres de variables de un solo carácter eran comunes. Verá este estilo en los libros más antiguos de ciencias de la computación, incluidos algunos clásicos que todavía se usan hoy en día como K&R. Así que “como lo hacen los desarrolladores” representa una forma claramente moderna de ver las cosas, sin mucha consideración por la historia del campo, y las matemáticas y la física, obviamente, tienen una historia mucho más larga y tradiciones mucho más arraigadas que la programación.

Lo hacemos, somos humanos un poco más conscientes de la eficiencia.

Uno de mis matemáticos / maestros favoritos siempre me dijo que ‘nosotros los matemáticos somos perezosos y nos gusta usar la menor cantidad de símbolos posible’, mientras que esto es palpablemente cierto, las disciplinas pesadas de matemáticas, física y simbología relacionada ya están gravando el viejo mental facultades sin tener que detallar laboriosamente cada noción, no es toda la historia.

Las palabras superfluas en una explicación de una cosa a menudo están bien, las imágenes floridas a menudo son incluso útiles para ayudar a las personas a visualizar lo que estás tratando de describir. Matemáticas sin embargo es una bestia diferente; los símbolos representan cantidades y cantidades u operadores extraños en los lados equivocados de las ecuaciones a menudo complican excesivamente los problemas. Por esta razón, las teorías, expresiones e ideas expresadas por los físicos operan con extrema parsimonia para hacer su trabajo lo más conciso posible.

(no debe confundirse con la parsimonia máxima)

También pensar en palabras es más difícil y más una inversión mental que pensar en términos de relaciones entre las cosas que a menudo se hace más ordenado en notación matemática.

Aquí hay un ejemplo de la vida cotidiana:

Problema :

Mi familia está formada por gatos, cada uno con cuatro patas y dieciocho uñas, y humanos, cada uno con dos patas y veinte uñas. En total, mi familia contiene ciento cincuenta y dos clavos y veinticuatro patas. ¿Cuántos de cada uno hay?

Solución 1 :

[Sugerencia: ni siquiera pude escribir la Solución 1 hasta que hice la Solución 2 , así que no te desanimes si te pierdes en la Solución 1; simplemente salte a la Solución 2 cuando eso suceda.]

Supongamos que consideramos nueve veces más patas. Eso implicaría que treinta y seis veces el número de gatos sumado a dieciocho veces el número de humanos suma doscientos dieciseis patas.

Ahora supongamos que consideramos dos veces más uñas. Eso implicaría que treinta y seis veces el número de gatos sumado a cuarenta veces el número de humanos suma trescientos cuatro clavos.

Ahora consideremos la diferencia en las implicaciones de esos dos párrafos anteriores. Dos párrafos atrás consideramos treinta y seis gatos, y un párrafo atrás consideramos treinta y seis gatos, por lo que la diferencia en el número de gatos en esos dos párrafos es cero. Para el número de humanos, tenemos veintidós humanos más en el segundo párrafo que en el primero. La diferencia que marca el número total de artículos es ochenta y ocho. Eso nos dice que veintidós veces el número de humanos es ochenta y ocho. (No puedo entender el razonamiento que conduce a esa oración anterior; solo estoy traduciendo al lenguaje humano la declaración equivalente en la Solución 2, que puedo entender).

Si consideramos la diferencia entre la conclusión del párrafo anterior y la declaración original sobre las patas, es una declaración sobre cuatro veces el número de gatos más cero veces el número de humanos, y la diferencia en el número de artículos es de dieciséis.

Si dividimos los números en la conclusión de dos párrafos por dos, encontramos que el número de humanos es cuatro.

Si dividimos los números en la conclusión de dos párrafos por cuatro, encontramos que el número de gatos es cuatro.

Solución 2 :

Defina los siguientes símbolos:

C = Número de gatos en mi familia
H = Número de humanos en mi familia
L = Número de patas en mi familia
N = Número de uñas en mi familia

La declaración del problema es

L = 4 C + 2 H = 24
N = 18 C + 20 H = 152

¿Qué son C y H?

El enunciado del problema forma la matriz aumentada.

[matemática] \ left [\ begin {array} {cc | c} 4, & 2 & 24 \\ 18, & 20 & 152 \\ \ end {array} \ right] [/ math].

Multiplique la primera fila por 9 y la segunda fila por 2:

[matemática] \ left [\ begin {array} {cc | c} 36, & 18 & 216 \\ 36, & 40 & 304 \\ \ end {array} \ right] [/ math].

Resta la primera fila de la segunda:

[matemática] \ left [\ begin {array} {cc | c} 36, & 18 & 216 \\ 0, & 22 & 88 \\ \ end {array} \ right] [/ math].

Restaura la primera fila original y divide la segunda fila por 11:

[matemática] \ left [\ begin {array} {cc | c} 4, & 2 & 24 \\ 0, & 2 & 8 \\ \ end {array} \ right] [/ math].

Resta la segunda fila de la primera fila:

[matemática] \ left [\ begin {array} {cc | c} 4, & 0 & 16 \\ 0, & 2 & 8 \\ \ end {array} \ right] [/ math].

Divida la primera fila por 4 y la segunda fila por 2:

[matemática] \ left [\ begin {array} {cc | c} 1, & 0 & 4 \\ 0, & 1 & 4 \\ \ end {array} \ right] [/ math].

El lado izquierdo es una matriz de identidad. Por lo tanto,

C = 4,
H = 4.

¿Cuál te resulta más fácil de entender?

¡Se supone que uno debe comenzar a usar una fórmula de forma corta solo después de dominar la parte de teoría detrás de ella!

Use formas cortas cuando usted:

  • Ya conozco la ecuación y es ciencia, y son flojos para escribir demasiadas palabras.
  • ¡Estás escribiendo una ecuación engorrosa y quieres que se vea más corta y bonita!

¡Tomemos una fórmula simple, Voltaje = Corriente * Resistencia que se escribe como V = IR, por ejemplo! ¡Esta ecuación puede ser confusa tanto en forma corta como en forma completa, para alguien que no sabe cómo funciona esta ecuación en la vida real!

Así es como se enmarca la ecuación anterior:

-> Observa que el voltaje aumenta a medida que aumenta el flujo de corriente, en un circuito

-> Haces una tabla con columnas de voltaje, corriente

-> Usted observa cuánto es el aumento en el voltaje, por el aumento dado en la corriente. Agrega una tercera columna, que es la relación voltaje / corriente

-> Usted encuentra que la tercera columna obtiene casi el mismo valor para cualquier valor de corriente y voltaje, por lo que lo llama Resistencia , y una forma corta R por conveniencia

-> Encuadras la ecuación Voltaje = Corriente * Resistencia y escribe V = IR por conveniencia

¡Espero eso ayude!

¡Gracias!

Porque los físicos hacen muchas matemáticas.

Si está escribiendo una cadena de varios cientos de ecuaciones secuenciales que implican alguna variación de C, E o M, ¿qué preferiría hacer cada vez? Escriba “c”, o escriba “velocidad de la luz en metros por segundo”.

Digamos que tienen su diccionario (mental) para que sepan que [matemática] E [/ matemática] es energía, [matemática] m [/ matemática] es masa y [matemática] c [/ matemática] es velocidad de la luz. Por lo tanto, puede que no sea legible por el desarrollador, sino que sea legible por el físico.

Pero, de nuevo, ¡así es el caso para todos los idiomas! Los códigos no son legibles por humanos sino que los desarrolladores pueden leerlos porque conocen el idioma. Del mismo modo, esta respuesta no es legible en turco sino legible en inglés.

Francamente, somos inteligentes y tenemos mucho que hacer. Raramente escribimos una sola ecuación; Combinamos múltiples ecuaciones en expresiones largas para derivar la respuesta a ecuaciones y escenarios particulares.

En algún momento, las derivaciones pueden tomar diez o veinte o más combinaciones y manipulaciones de ecuaciones que escribimos para documentar nuestro trabajo.

Usamos símbolos para ahorrar tiempo y espacio; Es un código que tenemos.

Si escribimos derivaciones usando 10 o 15 caracteres cuando uno lo hará, tomará muchas páginas y 10 a 15 veces más tiempo y será más propenso a errores.

Porque cuando la fórmula es complicada, nombres como ese serían realmente engorrosos.

Por la misma razón, escribe 2 + 2 = 4 en lugar de Dos más dos iguales cuatro. Usar letras y símbolos en lugar de palabras ahorra tiempo. Estas ecuaciones no están escritas para aquellos que no entienden lo que significan las letras variables, o tal vez ni siquiera entienden el significado de la palabra por la cual la letra ha sido sustituida.

Tal intento se hizo en la programación. El lenguaje se llama Cobol. Y es realmente un desastre. Y en cuanto a su sugerencia: omita todos los atajos y obtendrá algo como: “la energía es un producto de la masa y el cuadrado de la velocidad de la luz”. Ahora intenta escribir una docena de tales construcciones y maldecirás a quien las inventó.

Tomaría demasiado espacio. Muchas de las físicas de nivel superior son sistemas de ecuaciones diferenciales. Los matemáticos y físicos necesitan conservar tanto el espacio como el tiempo y ser elegantes. Hacer un seguimiento de todos los símbolos a veces es difícil, pero escribirlo en inglés cambiaría algo que es una página larga en un libro. Si estás haciendo álgebra, ¿quieres mirar páginas o solo algunas letras? De esta forma podemos formar soluciones. Puede ser incomprensible para ti, pero no lo crearon para ti. Lo hicieron para comunicarse entre sí.

Por la misma razón, los matemáticos escriben 2 + 3 = 5 en lugar de “dos más tres es igual a cinco”: el primero es más fácil de escribir y leer.

Además: los desarrolladores no usan inglés. Acabo de escribir lo siguiente:

field (COL_STATUS) .in (Arrays.asList (status) .stream (). map (stat -> stat.name ()). collect (Collectors.toList ()). toArray ())

En realidad lo hacen, los símbolos utilizados en estas fórmulas físicas son bien conocidos, y puede buscarlos, solo como un desarrollador comenta su código para que sea comprensible.

¿Cuál crees que es más fácil de leer?

int swap (int * primer_número, int * segundo_número)
{int número_temporal;
temporay_number = * segundo número;
* segundo_número = * primer_número;
* primer_número = número_temporal;
devuelve 0;
}

¿o esto?

int swap (int * a, int * b) / * intercambia los valores de a y b * /
{int temp;
temp = * b;
* b = * a;
* a = temp;
devuelve 0;
}

Si escribimos ecuaciones así, sería mucho más largo, esta es solo una ecuación con 3 variables, por lo que no hay problema, pero hay ecuaciones de más de cuatro a cinco líneas. Se crea un símbolo para evitar que sea similar al concepto por qué escribimos H para hidrógeno y Otros símbolos de elementos y compuestos.

Cuando tienes muchas variables en una ecuación, escribir una ecuación sería una pesadilla. Los nombres abreviados permiten la colaboración entre científicos e ingenieros que ni siquiera hablan el mismo idioma. Estas abreviaturas son acordadas por la comunidad internacional.