¿Por qué debería un ingeniero de software saber cálculo?

Mira a este chico. Es una pequeña red neuronal, apenas capaz de aprender a realizar una operación XOR. A diferencia de sus primos más grandes, no puede conducirse ni ganar campeonatos mundiales de Go. Pero sus “genes” son los mismos que los de sus parientes más reconocidos: se dedica a las matemáticas.

Las redes neuronales se han convertido en la “próxima gran cosa” en informática, integral para el desarrollo de automóviles autónomos, visión por computadora y traducción automática. Como ingeniero de software, es probable que tenga que trabajar con estas tecnologías emergentes a medida que se vuelven convencionales.

Una gran pregunta es “¿por qué ahora?” Hace décadas que conocemos las redes neuronales artificiales, pero solo ahora podemos aprovechar todo su potencial. Una razón es que la potencia informática ha avanzado muchos órdenes de magnitud desde su inicio, pero un desarrollo clave fue la invención de un algoritmo eficiente de retropropagación para calcular el gradiente de la función de costo de una red neuronal.

Este algoritmo de retropropagación se deriva de la regla de la cadena para funciones multivariables, que solo se cubre en el cálculo del tercer semestre. Los diversos algoritmos de optimización convexa desarrollados por investigadores informáticos y matemáticos requieren cálculo para su comprensión.

El aprendizaje automático también requiere un amplio álgebra lineal para comprender la teoría detrás de la implementación eficiente de varios algoritmos en clústeres de computación en paralelo. Sin paralelización con las GPU, nuestra otra tecnología informática sería completamente ineficaz en el aprendizaje profundo; software como AlphaGo llevaría décadas entrenarse de manera efectiva en procesadores convencionales.

Este es solo un ejemplo del nivel en que las matemáticas penetran la informática. Como ingeniero, se espera que conozca las compensaciones entre diferentes algoritmos, incluso si no tiene que implementarlos. Y una buena comprensión del cálculo ayudará mucho en esa comprensión.

Atrapado entre hacer de esto una respuesta o un comentario sobre una respuesta:

Varios han hablado extensamente sobre las cosas que le da el cálculo de conocimiento, o incluso qué contribuciones específicas ha hecho (por ejemplo, la respuesta de James Wang), mientras que otros han defecado la idea de que los ingenieros de software deberían saber cualquier cosa menos ingeniería de software, pero realmente me gustó el espíritu de la respuesta de Alan Tracey Wootton que se plasma en esta línea: “A menudo es suficiente entender, o esperar, que existen fórmulas incluso si uno ha olvidado cómo derivarlas personalmente”.

Es por eso que estudiamos muchas cosas, como desarrolladores de software y de otra manera. No es que creamos que siempre estaremos al tanto de la respuesta, sino que tenemos a mano un tamiz significativo para resolver nuestras preguntas.

Cuando éramos pequeños, probablemente todos recordamos haber preguntado a un maestro cómo deletrear algo y haber sido alentados a “buscarlo”, mientras estábamos sentados desconcertados sobre cómo podíamos buscar la ortografía de algo para lo que no sabíamos la ortografía. … La explicación es que debemos tener en cuenta algunas variaciones probables, y solo necesitamos consultar una referencia para determinar cuál es la correcta.

Es por eso que fácilmente pasé cien horas en los últimos seis meses estudiando algoritmos de aprendizaje automático, y otros cien en otros temas que también están fuera del ámbito de lo que * típicamente * necesito. Es por eso que el año pasado actualicé mi educación en cálculo trabajando a través de los cursos del MIT en momentos libres en el espacio de unos pocos meses y por qué he hecho lo mismo con varias otras disciplinas interrelacionadas.

No es para que siempre sepamos cuáles son las fórmulas, si son problemas resueltos, generalmente son fáciles de encontrar, pero al igual que al buscar la palabra en el diccionario, tenemos que tener alguna idea de cómo deletrearlo. Tenemos que saber que existe una solución y con qué está relacionada, entonces podemos buscarla e implementarla si es apropiado.

Para las personas que creen que han sido un ingeniero de software durante décadas y que nunca necesitaron Cálculo, esto me parece una absoluta tontería. Podría usar mi argumento contrario de que casi no he trabajado en ningún lugar que * no * pero me indicaron que trabajé principalmente en efectos aeroespaciales y visuales, y que los sistemas de guía de misiles, simulaciones y programación de gráficos son excepciones obvias … Excepto que lo aplicaría a cosas como la carga del servidor (degradación del rendimiento del sistema por número de usuarios), o incluso la optimización de la señalización a nivel de paquete. Siempre está ahí, y no siempre estás elaborando las fórmulas. La ciencia de esto también tiene lecciones, y esas son valiosas para todos nosotros.

Él no es. Tampoco debería saber álgebra lineal, ecuaciones diferenciales, teoría de grafos, teoría de la complejidad, teoría de autómatas finitos, teoría de conmutación, teoría de la información, matemática discreta, probabilidad, etc. La mayoría de los ingenieros de software trabajan como programadores y no diseñan nuevos algoritmos. Deben poder escribir código sólido utilizando las mejores prácticas de la industria de la época (arquitectura, pruebas, herramientas, etc.). Dada cierta experiencia, deberían poder hacer diseño y arquitectura por sí mismos. Luego, hágalo por otros, lidere equipos y asigne trabajo a juniors. Aún así, no hay algoritmos.

La minoría absoluta de SE utiliza todo ese conocimiento teórico en la práctica, PERO, a menudo las mejores compañías prefieren candidatos que lo tengan.

Usé cálculo dos veces, quizás tres veces en 23 años de programación. Teoría de grafos – nunca. Probabilidad: probable, ni una sola vez.

Tengo el libro de Corman en mi estante, y también me encantó el “libro de dinosaurios”, y en general, disfruté mi BSc en CS, pero casi no tiene un uso práctico.

Por lo tanto, si puede aceptar que algunas empresas nunca lo contratarán, y nunca trabajará en las áreas que lo necesitan (~ 1% de los trabajos o menos), puede saltear el cálculo y, de hecho, la universidad y la universidad también. Todo lo que uso en mi trabajo lo aprendí yo mismo (y fue antes de la abundancia de cursos en línea de hoy), antes o después de mis estudios formales.

Uno de los mejores líderes de equipo en nuestra empresa fue un tipo sin educación formal. No estoy seguro de que él supiera lo que es “seno”. ¿Y qué? Obtuvo un proyecto de misión crítica muy complejo trabajando en un tiempo récord, dirigió un equipo de ~ 20 programadores, estableció un flujo de trabajo sólido, educó a los miembros más jóvenes del equipo y se preocupó por todos (y odiaba a los tontos). Pero nunca había conocido a Cauchy & Weierstraß.

Esta pregunta se hace en todo tipo de otros campos, desde Finanzas hasta Biología. Todos deberían conocer el cálculo, es una matemática fundamental que establece un marco para interpretar todos los sistemas con los que interactúa. Al igual que el álgebra, es un conjunto de herramientas en las que no puede ver el valor hasta que tenga una comprensión (y aún mejor una comprensión intuitiva ). A menudo, si no está viendo el uso de la herramienta, es porque nunca la aprendió lo suficientemente bien como para ponerla en uso.

Para obtener beneficios más tangibles en SE:

  1. Intenta explicar la complejidad computacional sin cálculo. No se puede, se basa fundamentalmente en límites asintóticos por definición. Si cree que no necesita comprender la complejidad incluso en un nivel mínimo, entonces ha estado creando sistemas no optimizados. Si te saltas el cálculo aquí, en el mejor de los casos decides que nunca quieres un papel de arquitecto.
  2. Intente hacer algo en informática científica, simulación o informática financiera. No sé qué es un derivado al intentar calcular el flujo de efectivo, la velocidad o los eventos continuos. Supongo que tu SOL. Omitiendo cálculo aquí, en el mejor de los casos decide que no desea trabajar en estas áreas.
  3. Intente revisar los datos a nivel de sistema sobre operaciones desde el lado de la administración. Notarás que estás discutiendo cosas como “con qué frecuencia se golpea un punto final API, cuánto cuesta cada golpe, nuestro sistema escala”. Muchos de estos tipos de preguntas son preguntas fundamentalmente orientadas al cálculo. A menudo se pueden responder sin un fondo formal de cálculo y, en cambio, solo una pequeña intuición. Aun así, te estás restringiendo al no proporcionarte los antecedentes formales para tener una mejor intuición de cómo estas variables interactúan con el cambio. Puede convertirlo en administración, y puede ser bueno en eso. Aún estarías mejor conociendo Cálculo.

Puedes seguir siendo un pragmático y aprender lo que sientes que necesitas saber, ya que sientes que necesitas saberlo, pero no notarás los problemas que Calculus puede entrenarte para ver y que ni siquiera sabrás cuando llegue el momento en que Necesito aprenderlo. Puedes escaparte sin Calculus por completo como un script kiddy que envuelve las API que crean los ingenieros más impresionantes y mejor pagados. Puedes hacer cualquiera de estos durante toda una carrera si salir de tu camino para no aprender Cálculo es una prioridad. La mejor pregunta es “¿por qué un ingeniero de software no debería saber cálculo?”

Por la misma razón que el cálculo es parte de un plan de estudios de medicina previa. ¡Porque todo el mundo necesita saber cálculo, ya que proporciona las matemáticas básicas que sostienen gran parte de la física y la física también es necesaria para la premedicación! Lo mismo para la química.

Sin cálculo, uno estaría siempre condenado a calcular el interés compuesto escribiendo un ciclo para sumar el interés en el interés día a día, o hora por hora, sin darse cuenta de que hay una fórmula para eso y por qué. Las matemáticas proporcionan una visión y una comprensión que no se pueden obtener de otra manera.

Si un escritor de juegos escribiera una simulación de algo cayendo (hecho fácilmente) y luego lo estudió buscando alguna forma de adivinar el futuro sin resumirlo cuadro por cuadro, seguramente tropezaría con una relación y, por lo tanto, descubriría el cálculo. La información proporcionada por algunos estudios de matemáticas de antemano le ahorraría mucho tiempo.

Hay innumerables más ejemplos. A menudo es suficiente entender, o esperar, que existen fórmulas incluso si uno ha olvidado cómo derivarlas personalmente.

Creo que todos deberían saberlo, pero es bastante difícil describirlo a aquellos que no han experimentado una comprensión de cómo las matemáticas básicas describen el mundo de una manera básica (es por eso que todos aprendemos matemáticas básicas), pero las matemáticas un poco más avanzadas describen mucho Mucho más del mundo.

Todos queremos entender el mundo, ¿sí? De lo contrario, nos quedamos atrapados dejando que otros ‘hagan las matemáticas’ y tengan que decidir a quién creer.

Debería saber cálculo si está trabajando con algo que requiere cálculo. Cosas como robótica, redes neuronales, visión artificial, aprendizaje automático, gráficos 3D, etc.

Ahora, la mayoría de los trabajos como ingeniero de software no requieren mucho más que un control básico de álgebra. Creo que muchos de nosotros no somos lo suficientemente buenos para distinguir las diferencias entre la informática y la ingeniería de software. Puedo convertir binario a hexadecimal y hexadecimal a binario en segundos. Puedo dibujar un circuito lógico de toda la estructura del LC-3. Puedo escribir código en lenguaje de máquina y ensamblaje.

Ahora, a menos que consiga un trabajo trabajando directamente con estas cosas, ¿cómo me ayudarán directamente a crear un sitio web o crear una aplicación móvil? ¿Qué ventajas me dan esas cosas específicas sobre un candidato por el que compitieron autodidacta para hacer el trabajo específico? Para la mayoría de los empleadores, mi habilidad para hacer una ecuación de cálculo significa tanto como mi habilidad para dibujar un circuito lógico, casi nada. Les importa si puedo construir el software que necesitan , si necesitan un software que requiere conocimientos de cálculo para construir, les importará, si están construyendo cosas de bajo nivel como controladores, sistemas operativos, etc., se preocuparán por mi lenguaje de máquina y conocimiento de ensamblaje, si están creando aplicaciones web, querrán asegurarse de que sepa cómo construir aplicaciones web.

Pensé lo mismo. Trabajé durante un año como aprendiz en actividades de administración de bases de datos antes de decidir hacer mi licenciatura. Entonces, después de 3 años de no aprender matemática, de repente fui empujado a un mundo lleno de ecuaciones y modelos y curvas gaussianas y demás. No hace falta decir que también reprobé eso con demasiada realeza. Fallé los primeros dos semestres antes de darme cuenta de que necesitaba ayuda. Me puse en contacto con una joya de profesor de matemáticas que me enseñó bien. Y lo encontré bastante fácil y borré todos mis papeles de matemáticas. Todavía pensaba que no necesitaba Maths y vaya si estaba equivocado.

Me uní a otra empresa especializada en aplicaciones de ingeniería, incluida la visión por computadora, el aprendizaje automático y otras cosas. Me uní a un pequeño equipo responsable del desarrollo de algoritmos. Entonces entendí por qué enseñaban todas esas matemáticas en la universidad. Todo tenía un uso, ya sea una ecuación gaussiana, un método de normalización. FFT, expresiones regulares, máquinas de estado. Todo tenía su propósito y lugar. Poco a poco comencé a aprender matemáticas a través de los proyectos en los que estaba vinculado y fue divertido. Y sí les digo a mis amigos que estaba equivocado, pero me miran sorprendidos porque están trabajando en diferentes compañías donde les preocupa la interfaz de usuario o el desarrollo web o la base de datos o algunas otras corrientes de desarrollo de aplicaciones.

En pocas palabras: si desea ser un científico de la computación o un ingeniero de software que trabaje con investigación, visión por computadora, desarrollo de juegos o actividades similares, es una gran ventaja aprenderlo y comprenderlo. Todavía me arrepiento de no haber aprendido las matemáticas correctamente en mis días de soltero.

Espero abordar el álgebra lineal a continuación.

Espero que esto ayude.

Leí las respuestas y algunas respondieron la pregunta desde un punto de vista de programador, no de ingeniería de software. Es como comparar un ingeniero con un técnico o un arquitecto con un constructor. Uno crea las otras marcas. Un ingeniero de software crea los diseños que implementa el programador. Como tal, un verdadero ingeniero de software con licencia será educado en todos los aspectos de la producción de software y no solo en la programación. Se especializarán en un campo muy similar a cuando un estudiante de medicina se convierte en médico y se dedica a la cardiología. Como programador, es posible que no necesite conocer el cálculo, pero como ingeniero de software debe comprender el campo que está apoyando, incluidas las matemáticas (como el cálculo) detrás del desarrollo del software. Debido al conocimiento más amplio y la educación requerida, usted también es recompensado financieramente mucho mejor que un programador.

Mi esposa trabaja en el campo de inversión financiera apoyando el desarrollo de software. Ella no es una programadora. Ella no puede codificar; Sin embargo, es una contadora que prueba el software y es intrínseca al proceso. Ella conoce las matemáticas, cómo necesita calcular, de qué y de dónde deben venir los datos. Su información se envía a los programadores para obtener un producto terminado. ¿La persona que maneja todo esto? El ingeniero de software. Tome esta explicación combinada con las otras excelentes respuestas en profundidad sobre la importancia de las ciencias matemáticas para comprender por qué debe saberlo.

  1. Te uniste a Suber (Self Driving Uber) como ingeniero de software.
  2. Se le ha informado acerca de dos Sars (autos sin conductor) que se mueven perpendiculares entre sí (hacia la intersección de sus caminos).
  3. Su trabajo es descubrir cuán peligrosamente cercanos pueden estar entre sí, dadas sus velocidades estándar y puntos de partida.
  4. Su solución eventualmente debería funcionar para miles de Sars con direcciones cambiantes.

¿Cómo aborda estos problemas sin conocer las matemáticas (cálculo, en particular)? Hay infinitos puntos en las rutas para hacer algo útil utilizando solo estructuras de datos y algoritmos.

Tal vez no todos los programadores, pero si quieres ser un SE o un analista, entonces será útil algún conocimiento de cálculo (y estadística, trigonometría, geometría, álgebra lineal, topología e historia de las matemáticas). Cualquier campo STEM (además de finanzas, contabilidad, programación, se entiende) puede beneficiarse del conocimiento matemático: no necesita ser una PYME, pero debe saber lo suficiente para comunicarse con los usuarios de negocios.

Si eres un ingeniero de software que ha pasado 23 años y solo usaste cálculo un par de veces, te lloro Alex.

El cálculo es uno de los conceptos más poderosos que realmente puedo imaginar. No es una herramienta abstracta para resolver problemas abstractos sobre problemas simplificados, es un martillo de destrucción multipropósito.


Dicho esto, una educación formal no es lo que hace que todo esto sea valioso. No estamos diciendo de la manera más leve que se nos debe exigir que tomemos un curso de cálculo, o matemáticas discretas, o cualquiera de esas tonterías.

Los conceptos inherentes a los “cursos sobre formalizados y simplificados” son los que hacen que las clases sean valiosas, mucho menos que el crédito del curso. Lamento que el sistema educativo nos tenga tan lejos de disfrutar del conocimiento por su propio bien y beneficios. Tanto que podemos decir “¿Por qué deberíamos saber cálculo?” Indignado y casi orgulloso de la perspicacia y la profunda comprensión que se necesitó para darse cuenta de que estamos por encima de cosas tan ridículas como “matemáticas”.

Resultados de la Encuesta de desarrolladores de desbordamiento de pila 2016

Quizás sea útil entenderlo, pero es probable que nunca lo usen. Aprendizaje automático y matemáticas, los estudiantes representan la única área donde cualquiera lo sabría. 50k respuestas y aproximadamente 1k conocen el cálculo y lo usan tal vez.

Tal vez solo para demostrar que es lo suficientemente brillante como para aprender cálculo.

Pero dependiendo de en qué ámbito de la ingeniería de software ingrese, podría ser útil.

Por ejemplo: me pidieron que construyera una tabla y un algoritmo para recorrerlo, para determinar un valor, basado en su coeficiente. Pude encontrar una fórmula que describía adecuadamente la tabla para que la tabla nunca más necesitara ser mantenida.

El cliente aceptó eso como una gran victoria.

Y si está programando simuladores de sistemas complejos, imagino que no lo conseguirá sin él.

Y, por supuesto, un ingeniero de software tiene que comunicarse con el cliente. SI el cliente comienza a elaborar sus algoritmos en términos de cálculo, y usted no habla cálculo, entonces se encontrará mal.

Finalmente, si el “ingeniero de software” es simplemente un codificador, que toma las especificaciones funcionales de otra persona y luego lo convierte en código listo para máquina, estará en la parte más competitiva del mercado: la parte inferior de la escalera con pocas posibilidades de moverse arriba.

El cálculo es importante.

Si alguna vez tiene que hacer un análisis de datos, tendrá que hacer estadísticas para hacerlo. El cálculo se usa en estadística.

Si alguna vez programa juegos, parte de la física usa cálculo.

Además, el cálculo es una herramienta útil en sí misma.

Trabajo con varios ingenieros que no fueron a la universidad. Son sus proyectos reales y utilizables los que les dieron trabajo, no su capacidad para calcular el área de una forma extraña. Lo que los empleadores quieren ver es si conoce o no su programación. Los proyectos hablan por sí mismos.

Yo uso el cálculo para determinar la eficiencia del algoritmo. En mi línea de trabajo, el almacenamiento de datos / big data, poder procesar la información de la manera más eficiente posible es extremadamente importante.

Por lo que sea que valga, he estado en TI durante 26 años y en el almacenamiento de datos durante 19 años.

More Interesting

¿Qué harán los ingenieros de software cuando todos puedan programar? ¿La ingeniería de software está destinada a morir?

¿Qué piensan los ingenieros de software de Google sobre la declaración de Peter Norvig de que ganar concursos de programación se correlaciona negativamente con ser bueno en el trabajo?

¿Cuál es el salario promedio de un SDE II en Flipkart con 7 años de experiencia?

Vivo y trabajo en SF como ingeniero de software. Debido a mi perspicacia social y comercial, quiero pasar a la ingeniería de ventas. ¿Cómo puedo hacer eso?

¿Qué tan difícil es para un ingeniero de software cambiar al comercio algorítmico?

¿Qué esperarías de 3 años de experiencia en ingeniería de software, si ha trabajado en C, C ++ y Python?

Como ingeniero de software que deja la industria para seguir su pasión en las finanzas como analista (banca de inversión / capital privado), ¿qué último consejo le daría?

¿Es común en los contratos de trabajo que el empleador pueda obligarlo a trabajar los sábados y domingos?

¿Por qué me maltratan como empleado de ingeniería de software pero me respetan como contratista de ingeniería de software?

¿Cuál es el día típico de una hermosa y ardiente chica del sur de la India que trabaja como ingeniera de software?

¿Qué piensan los estadounidenses de los ingenieros de software indios?

Ingenieros de software: ¿Su trabajo le proporciona teclados deficientes o tiene un buen teclado mecánico?

¿Cuáles son las buenas pautas de construcción de software? ¿Algún libro sobre este tema?

Durante el desarrollo de un nuevo sistema, ¿qué función se espera que realice el modelado de datos y también prepare el diccionario de datos?

¿Es socialmente inaceptable conducir un Porsche en Silicon Valley como ingeniero de software?