¿Cómo pueden ser útiles el cálculo y el álgebra lineal para un programador de sistemas? [cerrado]

10

Encontré un sitio web que decía que el cálculo y el álgebra lineal son necesarios para la programación del sistema.

La programación del sistema, hasta donde yo sé, se trata de osdev, controladores, utilidades, etc. Simplemente no puedo entender cómo el cálculo y el álgebra lineal pueden ser útiles en eso. Sé que el cálculo tiene varias aplicaciones en la ciencia, pero en este campo particular de programación no puedo imaginar cómo el cálculo puede ser tan importante.

La información estaba en este sitio: http://www.wikihow.com/Become-a-Programmer

Editar: Algunas respuestas aquí explican la complejidad y optimización del algoritmo. Cuando hice esta pregunta, estaba tratando de ser más específico sobre el área de programación del sistema. La complejidad y la optimización del algoritmo se pueden aplicar a cualquier área de programación, no solo a la Programación del sistema. Esa puede ser la razón por la que no pude pensar de esa manera en el momento de la pregunta.

Víctor
fuente
66
No es tanto una aplicación directa como cambiar tu proceso de pensamiento.
SomeKittens
3
No hago mucha programación del sistema (ok, no hago ninguna), pero me imagino que si está ejecutando una serie de pruebas de rendimiento y desea hacer un análisis estadístico de los resultados, el cálculo y el álgebra lineal podrían ven a jugar. También pueden ser necesarios al hacer análisis de complejidad de algoritmos.
FrustratedWithFormsDesigner
2
@Telastyn: ¿En serio? Eso es interesante. ¿Cómo funciona?
FrustratedWithFormsDesigner
2
¿Puede proporcionar un enlace al sitio web? Puede agregar algo de contexto que lo ayudará a obtener una respuesta más específica.
Caleb
2
@FrustratedWithFormsDesigner: la analogía es de un valor a un puntero es como derivación. Comienza con una función y la deriva para obtener una nueva función que significa algo más (un int que se refiere a una dirección de memoria en lugar de un número). Incluso puede obtener la segunda derivada (un puntero a un puntero) que significa lo mismo pero es diferente. Luego, para deshacer eso, debe integrar (desreferenciar el puntero), que tiene algunas advertencias (la constante perdida al derivar una función frente a la división de objetos). Espero que tenga sentido, han pasado años ...
Telastyn

Respuestas:

6

Me imagino que no es muy importante si está escribiendo utilidades que no son GUI sobre un sistema operativo moderno sin trabajar en sus componentes internos. Probablemente sea una historia diferente si está trabajando para cambiar un sistema operativo moderno o desarrollar uno nuevo.

Si está trabajando con hardware de video o un sistema de ventanas de metal desnudo, necesitará conocimientos de álgebra lineal para actualizar gráficos de manera eficiente. No me he mirado, pero apuesto a que podrías encontrar ejemplos en el código fuente de X, KDE y Gnome.

Si está trabajando con hardware con respecto al procesamiento de señal digital, entonces el cálculo será muy importante. Me imagino que hay algunos dispositivos que hacen su trabajo pesado con la CPU del sistema en lugar de un microprocesador local y estos a menudo se conectan a sistemas eléctricos analógicos.

Además, el cálculo juega un papel importante en el análisis de rendimiento además del álgebra lineal cuando se intenta ajustar la curva a los datos.

Peter Smith
fuente
Incluso solo hacer programación directx u opengl requerirá algo de comprensión de álgebra lineal.
Plataforma
@Rig: Aprende sobre la marcha, así es como lo hice. Aprender del lado de las matemáticas, en mi humilde opinión, es bajo-ackwards.
Codificador
8

El comentario de SomeKittens es correcto sobre el dinero: necesitas cálculo y álgebra lineal porque esos cursos cambian la forma en que piensas y la manera en que entiendes el mundo. El álgebra lineal se trata de mapear de un dominio a otro; el cálculo cubre la forma en que se comportan las funciones. Son herramientas poderosas en sí mismas, pero las técnicas que aprendes al estudiar esos campos también se vuelven parte de tu imagen mental del mundo.

También necesita esos cursos porque la gente esperará que pueda pensar en esos términos. A menudo no veo a mis colegas tomando la derivada de un polinomio en sus pizarras blancas, pero a menudo veo bocetos de funciones con la tangente dibujada en algún punto interesante, o el área debajo de la curva sombreada. No nos importan lo suficiente los valores reales para molestarnos en calcularlos, pero comprender cómo cambian los valores es esencial, y es parte de las conversaciones cotidianas.

Cualquier título universitario de informática requerirá cálculo, álgebra lineal, estadística, lógica y otros cursos de matemática no porque los programadores necesiten aplicar las técnicas directamente de manera regular (aunque podrían, dependiendo de lo que hagan), sino porque usted necesita eso conocimiento para comprender el material que viene después.

Caleb
fuente
2
Si pudiera votar esto más de una vez, lo haría.
Mr.Mindor
Aunque es una respuesta útil, pero no responde la pregunta. Por ejemplo, vine aquí porque recientemente estaba hackeando el controlador r600g por diversión y también estoy interesado en mejorar el fondo matemático, que es débil. Sería realmente agradable encontrar una idea para implementar en el controlador que requiera ampliar mi conocimiento matemático, preferiblemente algo fuera de álgebra abstracta, topología, pero no necesariamente limitado a. Un montón de consultas como "matemáticas de desarrollo de controladores" no llegaron a un solo documento, esta página es lo más cerca que pude obtener.
Hola Ángel,
@ Hola, Angel, no estoy de acuerdo. Es posible que no responda la pregunta de la manera que esperaba, y puede que no responda a su pregunta separada "en qué puedo trabajar para mejorar mis habilidades matemáticas", pero afirmo que las matemáticas avanzadas son útiles para un programador de sistemas principalmente porque cambian Su perspectiva y proporciona una comprensión más profunda. Los programadores de gráficos en realidad usan el cálculo y el álgebra lineal de manera regular, los programadores de sistemas no tanto. Pero comprender esos temas sigue siendo importante.
Caleb
6

Seguiré y diré que no creo que el cálculo o el álgebra lineal sean importantes para la programación de sistemas.

Ciertamente creo que el cálculo y el álgebra lineal valen la pena aprender en general: ¡soy un tipo de matemáticas! Y, como señalan otras respuestas, hay cierta relevancia indirecta, ya que el análisis de rendimiento y el diseño de algoritmos pueden usar matemáticas avanzadas. Sin embargo, no creo que la programación de sistemas dependa más de ese tipo de matemáticas que la mayoría de los otros campos que generalmente no se consideran matemáticos.

tormenta
fuente
¿Alguna vez has visto una GPU? :) Es un poco matemático, especialmente. escribir controladores para él ... pero es cierto: si estás atascado, siempre puedes usar math.stackexchange.com :))
Aadaam
Yo también soy un chico de gráficos por computadora; Me parezco a ese comentario! Y tiene razón: cualquiera que quiera escribir un controlador de tarjeta gráfica debe comprender los gráficos de computadora (y el álgebra lineal y el cálculo básico que conlleva), así como la programación de sistemas.
tormenta el
Hasta donde puedo ver, uno necesita saber trigonometría y álgebra lineal para hacer algo útil fuera de la API de gráficos, pero no para implementar esta API en un controlador de gráficos. Allí se trata principalmente de cambiar un montón de registros según las solicitudes de la aplicación. El único lugar para aplicar las matemáticas en el controlador de gráficos que puedo imaginar son las optimizaciones para su compilador. Corrígeme si me equivoco, quiero serlo. De hecho, vine aquí porque quiero mejorar mi formación matemática y también estoy hackeando poco el r600g, y sería bueno combinar ambos.
Hola Ángel,
4

Sospecho que es cierto en los bordes. Los programadores de sistemas deben estar mucho más preocupados por el rendimiento y la confiabilidad, por lo que el análisis de algoritmos puede ser importante, y el cálculo a veces es necesario para las pruebas de análisis Big-Oh. Temas como la teoría de colas y la optimización discreta (es decir, optimización matemática, no optimización de código) también pueden desempeñar un papel. Sin embargo, creo que eso se aplicaría principalmente a las personas que trabajan en la vanguardia de los sistemas operativos y los protocolos de red, no tanto a la persona que trabaja en el controlador USB 3.0.

Charles E. Grant
fuente
⁺¹ para la optimización discreta, parece ser interesante y relacionado.
Hola Ángel,
1

Su definición de programación de sistemas se alinea bastante bien con la respuesta en Wikipedia.

Si piensa en lo que está proporcionando, es decir. una interfaz de software en hardware, entonces comienza a tener sentido por qué el cálculo y el álgebra lineal son habilidades útiles para tener.

Resumir esa interfaz de bajo nivel requiere que comprenda cómo funciona el dispositivo. Los dispositivos electrónicos todavía están sujetos a las leyes de la física. El cálculo y el álgebra lineal proporcionan un medio para modelar el comportamiento del dispositivo. Modelar el dispositivo le permite proporcionar un servicio en su funcionalidad.

Dicho esto, esos dos campos no son el final de la programación de sistemas. Conozco algunos EE que no lo hicieron tan bien con el cálculo y el álgebra lineal, pero aún pueden explicar lo que el dispositivo está haciendo de manera bastante sucinta.


fuente
¿Es correcta o incorrecta esa definición de programación de sistemas?
Victor
2
Eso no es muy exacto. La interfaz con una CPU requiere solo el conocimiento de las instrucciones proporcionadas.
DeadMG
@DeadMG: no puedo discutir en el caso de una CPU. Había estado pensando más en términos de hardware sin formato, como un acelerómetro o una interfaz de E / S directa. Dicho esto, la mayoría de ellos cuentan con algún tipo de chip para proporcionar la interfaz. Creo que mis comentarios son más apropiados para la lógica dentro del chip que quizás para la capa de controlador del dispositivo.
1

La aplicación web general y / o la programación administrativa no implican mucha aplicación de álgebra lineal o cálculo, pero muchos campos especializados sí. Si trata con geometría, seguramente se encontrará con álgebra lineal. La mayoría de la programación física también se ocupa tanto del álgebra como del cálculo. Además de casi cualquier cosa que tenga que ver con la manipulación de formas de onda, como la programación de sonido y radio. En general, es más importante comprender las matemáticas discretas que, entre otras cosas, se ocupan de la teoría de conjuntos, la teoría de grafos y la lógica formal (booleana) que es útil en muchas aplicaciones, como la gestión de la información, las bases de datos y otros lugares donde se combinan datos y / o lógica. . En el caso de la programación de sistemas, no veo tantas aplicaciones.

En ningún
fuente
2
Creo que puede "sobrevivir" sin usar cálculo o álgebra lineal en la mayoría de los dominios de programación. Sin embargo, si se siente cómodo con los conceptos, se sorprenderá de cuántos problemas diferentes puede aplicar. Midiendo y prediciendo la deriva del reloj, el tiempo de carga de la batería me viene a la mente cosas que acabo de usar para el cálculo recientemente. La triangulación y la predicción de la ruta involucraron álgebra lineal para un problema en el que trabajé el año pasado. Ninguno de los problemas requirió el uso de esos temas como los métodos de aproximación extremadamente complicados y pobres que otros utilizaron demostraron ...
Dunk
2
(cont.) ... pero el uso de las matemáticas más avanzadas hizo implementaciones mucho más concisas y precisas que funcionaron como se suponía que debían hacerlo. IOW, el cálculo y el álgebra lineal son herramientas poderosas una vez que aprendes cómo aplicarlos y te ayudarán a llegar a la cima en comparación con la mayoría de los demás programadores, ya que a la mayoría no le importó aprender las matemáticas lo suficiente mientras estaba en la escuela. Para mí, ha significado trabajar en proyectos realmente geniales versus lo mundano.
Dunk
0

Como otros han mencionado, cualquier curso de matemáticas en la universidad puede agudizar sus habilidades de resolución de problemas y razonamiento deductivo. Estos son importantes para casi cualquier persona.

Pero a veces conocer algo de álgebra lineal puede ser útil, especialmente para algunas ideas de negocios bastante buenas .

joshin4colours
fuente
0

La programación del sistema, hasta donde yo sé, se trata de osdev, controladores, utilidades, etc. Simplemente no puedo entender cómo el cálculo y el álgebra lineal pueden ser útiles en eso.

Con el cálculo es bastante fácil, tan pronto como uno mira más de cerca el contenido del curso . Está estrechamente relacionado con la complejidad del algoritmo, la notación Big-O , cosas así, bastante fundamentales en la programación.

Las ecuaciones son lo que obtienes al estimar la complejidad del algoritmo. Los bucles anidados de tres niveles de 0a Nson N 3 , los bucles anidados de dos niveles son N 2 , uno es N. La evaluación que puede obtener podría ser (N 3 + 2 * N 2 + N): es una ecuación.

Ahora, si desea comprender mejor qué tan rápido crecerá el tiempo de ejecución cuando N aumente, esto está estrechamente relacionado con los derivados / diferenciación. Otras partes del cálculo que pueden resultarle útiles son los límites y el análisis asintótico: esto lo llevará a comprender la notación Big-O, a obtener una mejor puntuación en las entrevistas de programación y, posiblemente, a una mejor programación de sistemas.

  • Está asignado a la tabla de asignación de archivos de diseño, ¿qué estructura de datos va a utilizar? Suponiendo que hay muchos archivos pequeños que rara vez se modifican, ¿qué sería preferible? Suponiendo una cantidad relativamente pequeña de archivos grandes que siempre se agregan al final, ¿va a utilizar la misma estructura? ¿Cómo lo decidirías?

En cuanto al álgebra lineal , aquí las aplicaciones de programación te disparan desde la primera imagen.

http://pad1.whstatic.com/images/thumb/c/c4/LaTeX-2m.jpg/251px-LaTeX-2m.jpg

Si alguna vez tendrá que lidiar con gráficos de trama (por ejemplo, en controladores de video), las imágenes como las anteriores le llegarán en sus peores pesadillas.

  • ¿Cómo es que la prueba # 12345 muestra píxeles faltantes? ¿Hice algo mal implementando Bresenham ? ¿podría ser solo un error en el diseño de la prueba que no explica adecuadamente los errores de redondeo?
mosquito
fuente
Hay una tendencia en la que CS en cada universidad que conozco se está separando de los departamentos de matemáticas. Creo que es un movimiento muy inteligente. Además, se piensa que los estudiantes de CS encuentran soluciones a partir del uso de soluciones existentes. Un buen estudiante de CS leería un documento en el contenedor, vería una O (algo), abriría la wikipedia, vería el gráfico y decidiría si el contenedor es apropiado. Eso tomaría 2 minutos, al igual que verificar los requisitos de reentrada y parámetros para algunas llamadas de función API. Y, en mi humilde opinión, un perfilador es casi siempre una mejor solución que las matemáticas teóricas.
Codificador
2
@Coder, por supuesto, algunos estudiantes de informática terminan siendo los que tienen que diseñar los contenedores y algoritmos en primer lugar. Para ellos, las matemáticas y el generador de perfiles son herramientas complementarias: las matemáticas no ofrecerán una implementación funcional, y el generador de perfiles no le advertirá que sus datos de prueba son simplemente una casualidad.
Charles E. Grant