Si soy mediocre en matemáticas, ¿significa esto que seré un ingeniero de software mediocre?

En 2012 y 2013, enseñé un gran curso (más de 300 estudiantes) en estructuras de datos y algoritmos, donde la parte más difícil fue la programación de tareas. Los mejores estudiantes suelen tener puntajes altos o son más fuertes en matemáticas que el promedio. Nuestros proyectos no utilizaron ningún cálculo, pero uno de los proyectos tenía un componente de geometría plana. Además, el rendimiento promedio en este curso se evaluó con una calificación B, no C.

Aunque generalmente estoy de acuerdo con las respuestas “no necesariamente” dadas por otros, las estadísticas que veo no son favorables para los estudiantes con bajos puntajes en matemáticas. No porque las matemáticas sean muy utilizadas, sino solo como un indicador general de las habilidades analíticas y de resolución de problemas. Su mejor opción es convertirse en un experto en algún tipo de software especializado, donde su experiencia en el dominio prevalecería sobre todo lo demás.
Espero que esto ayude.

Igor Markov ha dado una excelente explicación estadística de por qué las matemáticas parecen tener una fuerte correlación con la programación.

Quiero anotar algunas observaciones que hice. Hice este análisis para comprender por qué me costaba entender Matemáticas abstractas y creo que algunos de los puntos son relevantes para esta pregunta.

1] Las matemáticas que se enseñan en la escuela son de naturaleza algorítmica
No sé cómo se hace en otros países, pero en India, las matemáticas en la escuela se enseñan de una manera muy algorítmica. Por ejemplo, la adición se nos enseñó como una secuencia de pasos a seguir: agregue el dígito de la unidad, luego agregue el dígito de las decenas con cualquier arrastre, luego agregue el dígito del centésimo lugar, etc. Mientras más los resolvamos, nos damos cuenta de que El algoritmo es el mismo independientemente de los dos números que se nos dan. Los más inteligentes entre nosotros incluso nos damos cuenta de que el algoritmo se puede extender para agregar n números, etc. Parece que obtenemos el concepto clave de algoritmos y cómo interactúan con las variables sin siquiera saber qué algoritmos y variables son.

2] Mapear un nuevo problema a un problema previamente conocido
Todavía recuerdo un incidente en la escuela. Nos enseñaron ecuaciones cuadráticas y cómo resolverlas. La mayoría de los estudiantes memorizaron la fórmula cuadrática, descubrieron el valor a, byc, los sustituyeron en la fórmula y obtuvieron los resultados. Hasta aquí todo bien. Ahora, en el examen, tenemos la siguiente pregunta:

Resolver para [matemáticas] \ theta [/ matemáticas], [matemáticas] \ sin ^ 2 \ theta – 2 \ sin \ theta + 1 = 0 [/ matemáticas]

Ahora, es fácil ver que esto es solo ecuaciones cuadráticas. Si bien pocos de nosotros nos dimos cuenta bastante rápido, varios otros tardaron en darse cuenta y hubo algunos que no se dieron cuenta en absoluto. Muchas veces, los problemas que enfrentamos en matemáticas pueden no ser sencillos, pero pueden mapearse a un problema previamente resuelto.

3] Reúna muchas herramientas para resolver un problema
Esto no es tanto en la escuela, sino a medida que avanzamos a la universidad y a los primeros programas de ingeniería. Nos encontramos con problemas que requieren que usemos varias herramientas matemáticas juntas. Daré un ejemplo un poco no tan satisfactorio:

Suponga que un paralelepípedo rectangular está inscrito en una esfera de radio R. Demuestre que el paralelepípedo inscrito con el volumen más grande es un cubo.

Para resolver este problema, reunimos varios conceptos. Primero, tenemos que conocer la ecuación del volumen de un paralelepípedo. Representa el volumen en términos de variables. Tenga en cuenta que podemos eliminar una variable porque está inscrita en una esfera. Utiliza la diferenciación parcial. Luego date cuenta de que tenemos un sistema de ecuaciones en dos incógnitas y resuélvelo para encontrar las longitudes laterales del paralelepípedo. Este problema no es excepcionalmente difícil, pero nos damos cuenta de que cuando lo resolvemos, mágicamente estamos reuniendo cosas que hemos aprendido durante varios años.

Como vemos, las matemáticas requieren varias habilidades cognitivas que utilizamos incluso en la programación. Esto podría explicar por qué ser bueno en matemáticas podría incluso perfeccionar la habilidad de uno para programar. Por supuesto, eso no significa que no puedas ser bueno en programación si no eres bueno en matemáticas.

Existen varias facetas de la creación de software.

1) Habilidad matemática abstracta
2) informática
3) razonamiento
4) creatividad
5) Conocimiento específico del dominio: API, arquitecturas, lenguajes, marcos

Los números a continuación son hipotéticos, solo estoy hablando por experiencia.

Alrededor del 90% de las necesidades de programación (5) y (3), desde mensajería instantánea hasta sitios web, es como una persona que conduce un automóvil y puede cambiar el aceite y los neumáticos.

Otro 5% necesita (3) (4) y (5): cosas como juegos, aplicaciones para teléfonos inteligentes, sitios web de redes sociales, cualquier cosa en la que la presentación y el flujo sean más importantes que la respuesta: esto es como un mecánico que puede arreglar un automóvil con partes dadas y herramientas y un manual de usuario.

Otro 3% necesita (2) a (5) – Bibliotecas, simulaciones gráficas, software de compresión de datos, bases de datos, software de nivel de sistema operativo, aplicaciones de video y audio – Aquí simplemente está implementando algoritmos conocidos, puede hacerlo con un nivel razonable de matemática conocimiento – decir nivel universitario. Puede conocer las métricas de rendimiento de los algoritmos sin necesidad de derivarlos: es como un constructor que puede comprar y construir varias partes de un automóvil y soldarlas y unirlas en un vehículo personalizado.

El 2% restante necesita un nivel maestro de habilidades matemáticas: diseñar nuevos algoritmos, razonar sobre paradigmas de programación matemáticamente, escribir cosas como Wolfram Alpha y Mathematica, ganar concursos de programación de nivel mundial: estas personas son como diseñadores de motores que trabajan principalmente en una supercomputadora y Es posible que nunca hayan tenido una llave dinamométrica en sus manos.

Me ha ido perfectamente bien en mi exitosa carrera con un nivel universitario de habilidades matemáticas, y he hecho de todo, desde sitios web hasta cosas de aprendizaje automático.

Los conceptos son más importantes que las fórmulas, puede obtener una concepción matemática de alto nivel sin revolcarse en los símbolos a menos que sea necesario.

Cuando lo necesitaba, estudiaba las matemáticas requeridas: no tienes que llegar al nivel en el que puedas derivar todo por ti mismo desde cero … Siempre puedes referirte a cosas.

Si te encuentras con un problema realmente difícil, ¡pregúntale a un matemático profesional! 🙂

En mi opinión (5) (4) y (3) + las matemáticas básicas de la escuela secundaria son suficientes para casi cualquier cosa relacionada con la programación: redescubrí un algoritmo sofisticado simplemente razonando sobre el problema durante aproximadamente 2 minutos: no todo es ciencia espacial como lo habrían hecho. tu crees.

si y no

No, para la gran mayoría de los trabajos de ingeniería de software, no necesitará nada más que matemáticas de primaria.

Sí, porque las habilidades matemáticas son un proxy de su habilidad para resolver problemas, disciplina y determinación (porque las habilidades matemáticas, para ser buenas, deben perfeccionarse continuamente durante muchos años). Del mismo modo, para ser un buen ingeniero de software, necesita una buena habilidad para resolver problemas, y esa habilidad debe desarrollarse continuamente durante muchos años (por lo tanto, requiere disciplina y determinación). Recuerde que los buenos ingenieros de software no son necesariamente los que conocen muchas teclas vim, que conocen muchos comandos unix, que pueden escribir un programa fizz buzz usando lenguajes de programación arcanos (aunque eso ciertamente lo hace ver hábil). Esas habilidades se pueden aprender en pocas semanas. Pero la resolución de problemas es más abstracta, y eso lleva muchos años en desarrollarse.

No estoy de acuerdo con todos los que están sí o no o simplemente no.

La respuesta tiene que ser sí y solo sí. ¿Por qué? Aquí están las razones:
1. La habilidad más importante de un ingeniero de software es la capacidad de aprender. ¿Cuáles son sus calificaciones en estructuras de datos y algoritmos? Sospecho que son muy similares a tus calificaciones en matemáticas.
2. Las habilidades matemáticas se traducen en habilidades de codificación muy fácilmente y si no tienes habilidades matemáticas en un calibre superior al mediocre, entonces tendrás que trabajar más para obtener esas habilidades.
3. La razón menos importante, pero aún relevante, es la idea de que Matemáticas (Cal, Lineal Al, Discrete) deberían ser herramientas duraderas y afiladas del conjunto de herramientas de resolución de problemas de un Ingeniero de Software.
La métrica de si eres o no mediocre depende de tus competidores y te aseguro que tus competidores que también se postularán a Google, Microsoft y Amazon, etc., no tendrán esa debilidad. Tener una debilidad en las matemáticas es una pierna floja en la selva a medida que te gradúas y comienzas a aprender sobre la industria. El aprendizaje automático, la ciencia de datos y las entrevistas hacen que las matemáticas sean aún más relevantes que hace unos años.

Si un ingeniero de software fuera solo un codificador, entonces no sería ingeniero de software. ¿Contrataría a un ingeniero eléctrico que fuera débil en matemáticas? ¿Contrataría a un ingeniero civil que fuera débil en matemáticas?

Dicho esto, sin embargo, la pregunta más importante es si eres realmente mediocre en matemáticas. Sí, obtienes C y algunas B, pero ¿aprendiste y puedes aplicar lo que aprendiste en esas clases también o mejor que aquellos que obtuvieron A?

Respuesta corta: no necesariamente, como dice la respuesta de Anónimo.

Respuesta más larga: Hay muchos otros aspectos para construir software. Es posible que tenga una ventaja compensatoria en alguna otra área. O, lo más probable es que simplemente seas mucho mejor en matemáticas de lo que piensas (esto es muy común, en realidad, una vez que las presiones artificiales de la escuela están apagadas).

Enfoque todo con una mente fresca después de graduarse. Nunca descarte un tema porque “cree” que “no es bueno en matemáticas”. Usualmente este no es el caso.

Como dije en los comentarios: nunca dejes que tus calificaciones te definan.

FWIW tomar exámenes en la escuela tiene muy poco que ver con el mundo real. Es sobre todo memorización. Las C en matemáticas podrían deberse a cometer pequeños errores en el momento del examen. En la programación, esto es análogo a los errores de sintaxis, que tendrá un IDE para ayudarlo. La programación tiene que ver con la planificación y la resolución de problemas. Como todos declararon, hay ciertas disciplinas que requieren más matemáticas que otras, pero no mencionó qué disciplina le gusta. La verdad es que la mayoría de los programadores mediocres son flojos y resistentes al cambio. Recuerde, cuando entre al campo no estará en un pequeño escritorio con solo un lápiz número 2, tendrá Internet, compañeros de trabajo, documentación, marcos, etc. La frase que se destaca en su publicación es “I trabajar muy duro”. Estas son las personas que tienen éxito por lo que he visto.

Soy un programador que no tiene mucha inclinación matemática. Encantada de conocerte. No soy completamente horrible con las matemáticas, pero tuve un bajo rendimiento constante en mi carrera académica. Por lo general, apunté a B en lugar de A y recogí un par de C en el camino.

Excelentes habilidades de razonamiento lógico y resolución de problemas son imprescindibles para todos los que escriben código. En un nivel fundamental, esto es lo que hacemos. Si piensas que la lógica es una forma de matemática, entonces sí, debes ser bueno en eso.

Pero eso no es lo que la mayoría de la gente entiende por “matemáticas”. Significan cosas como trigonometría y cálculo. Estos realmente solo tienen un valor práctico para las personas que escriben software en dominios específicos.

Básicamente, no todas las partes de las matemáticas son generalmente aplicables a todos los ingenieros de software. Sin embargo, algunos dominios de ingeniería de software dependerán en gran medida de tipos específicos de matemáticas:

Si va a hacer programación de gráficos, debe ser sólido en trigonometría y prácticamente todo lo que tenga que ver con los vectores.

Si trabajará con ingenieros o físicos, entonces realmente necesita todo ese cálculo y ecuaciones diferenciales.

Si va a trabajar en la industria financiera, probablemente necesite una buena comprensión de las estadísticas.

Si va a desarrollar bases de datos, debe repasar la teoría de conjuntos.

Las matemáticas que he encontrado generalmente aplicables a mi carrera han sido un curso de matemáticas discretas y un curso de álgebra lineal. Ambos eran tipos de matemáticas bastante no tradicionales que se centraron en gran medida en la lógica. Me fue bien en ambas clases también.

En los últimos años, los estudios en el campo de la neurología han demostrado que el cerebro es altamente especializado. Entrenarlo extensamente para hacer una tarea, por ejemplo, resolver ecuaciones de álgebra mejorará principalmente la resolución de ecuaciones de álgebra y tendrá poco efecto en otras habilidades.

Cuando los estudiantes se quejan “¿Por qué necesito saber esto?!?” los maestros a menudo les dicen que aprender a resolver problemas en un área les ayudará a resolver problemas en otras, pero hay poca evidencia de que esto sea cierto. Si bien aprecio el hecho de que ser obligado a tomar numerosos cursos de matemáticas en la escuela secundaria y la universidad me expuso a muchas ideas diferentes, dudo que muchas de las habilidades que aprendí más allá del álgebra fueran transferibles a mi carrera diaria.

La única forma real de responder si será bueno como ingeniero de software es trabajar en su propio dominio. En otras palabras, necesitas ESCRIBIR CÓDIGO. Esa es la única manera de saber realmente si esto es algo en lo que serás bueno o no.

Hay muchas personas exitosas en esta industria con poca o ninguna educación formal. La experiencia es el rey. Si realmente quieres hacerlo, ¡adelante! Y no permita que una C en trigonometría lo detenga.

Diría que a la gran mayoría de los desarrolladores de aplicaciones nunca se les pedirá que usen matemáticas más avanzadas que las que aprenden en álgebra 2 en la escuela secundaria. Las habilidades avanzadas de diseño de algoritmos probablemente abren algunas puertas interesantes a nivel profesional, pero para la gran mayoría de las puertas, es excesivo.

Dicho esto, hay muchas personas que abordan las matemáticas totalmente de la manera incorrecta. ¿Estás memorizando cosas para evitar fallar o estás tratando de entender cómo funciona todo y cómo puede ser útil? Si crees que podría ser más de lo primero, concéntrate más en lo último y si tienes algún éxito al hacerlo, serás un excelente desarrollador, ya sea que tu aptitud innata en matemáticas apesta o no.

Y para lo que vale, si no está obteniendo algo de la manera que se le explica, busque otras explicaciones. Los conceptos de programación se explican horriblemente todo el tiempo y estoy seguro de que los conceptos matemáticos también. O tal vez solo en formas que no entiendo. En cualquier caso, cuando esto sucede, busco un ángulo diferente. A veces, hacer algo tan tonto como buscar la entrada de wikipedia sobre un tema puede ser útil.

Sí, debes ser bueno en matemáticas para ser un buen ingeniero de software. No hay escapatoria de esto. Todos los mejores desarrolladores con los que he trabajado en mis últimos 15 años son muy buenos en matemáticas, independientemente de si el trabajo requirió alguna matemática. Pero creo que en el fondo ya lo sabes, hay una pregunta aún más importante para ti y es “¿Cómo puedo mejorar mis habilidades matemáticas?”.

Honestamente, en la escuela secundaria y la universidad mis habilidades matemáticas eran abismales. Apenas aprobé la mayoría de mis cursos de matemáticas. Comencé a mejorar cuando terminé la universidad y tuve más tiempo para dedicarme a proyectos personales y luego lo necesité. Tenía interés en hacer juegos y quería probar y hacer cosas desde cero para poder construir mis propias bibliotecas 2D y 3D solo por diversión. Esto realmente mejoró mis habilidades matemáticas porque luego encontré usos del mundo real para las matemáticas, ya no era solo un tema abstracto para mí.

Mi recomendación para usted es desafiarse a sí mismo con proyectos personales en los que construya todos los componentes usted mismo. Cuando se trata de proyectos de trabajo remunerado, nunca reconstruya la rueda. Cuando se trata de proyectos personales para los cuales el único resultado es aprender, diría que reconstruir la rueda proverbial solo para entenderlo mejor. Si eres como yo, una vez que comiences a ver cómo las matemáticas se relacionan con el mundo físico, te resultará mucho más fácil entender los conceptos abstractos que introduce, lo que significa que a su vez mejorarás en la comprensión.

Espero que no te rindas con mejorar tus matemáticas. Mi mayor decepción como empleador de ingenieros de software es la degradación en los últimos 10 a 15 años de las habilidades matemáticas de los graduados que entrevisto.

No descartes tu habilidad todavía. ¿Eres bueno en el reconocimiento de patrones? Creo que eso supera la habilidad con el cálculo, las ecuaciones lineales y las matemáticas discretas (ninguna de las cuales he tenido que usar en el trabajo).

También he visto código creado por doctores en ciencias de la compilación o maestros en matemáticas, que fue uno de los peores códigos que he visto. A estas personas a veces les gusta hacer algo complicado solo porque pueden . Como tomar una lógica simple de si-entonces y expresarla usando una máquina de estados que solo se usa en un solo lugar.

Una de las consideraciones más importantes de una buena arquitectura de software es que el problema se divide adecuadamente en los componentes correctos para mantener el código SECO (no se repita, es decir, cada pieza de lógica o datos solo existe en un lugar en el código) y las interfaces entre entidades lo más simple posible. Esto requiere que uno pueda ver cómo las diferentes piezas de información en un sistema se relacionan entre sí y cómo podrían interactuar en el futuro.

Encontré que las matemáticas eran tediosas porque eran puramente teóricas y, bueno, aburridas para hacer un simple cálculo numérico. Hice lo mínimo necesario para terminar la escuela en general porque era aburrido y no se aplicaba directamente al tipo de problemas que quería resolver.

Pero a pesar de mi disgusto por las matemáticas, he podido deleitar a muchos usuarios y otros ingenieros con un código optimizado, rápido, flexible y fácil de mantener.

También ser un buen ingeniero de software requiere empatía . Si le importan los demás, intentará que su código sea legible y fácil de cambiar, y que sus interfaces de usuario sean fáciles de usar para las personas.

Hay pruebas que puede realizar para la capacidad de reconocimiento de patrones. Te sugiero que pruebes uno.

No estoy necesariamente de acuerdo con muchas de las respuestas aquí. En primer lugar, creo que las C en Matemáticas suelen ser D y F en realidad, porque el profesor no puede reprobar a un alto porcentaje de estudiantes. En una nota relacionada, que es una tangente, las bajas calificaciones en los cursos de matemáticas superiores no son necesariamente culpa del estudiante, sino la culpa de la base subyacente de las habilidades matemáticas sobre las que se basan los cursos superiores. Por ejemplo, probablemente odiabas la trigonometría, por lo tanto, tenías dificultades con el cálculo.

Volviendo a la pregunta en cuestión, las matemáticas tienen que ver con la memorización y la aplicación de patrones. Sabes que 1 + 1 = 2 solo porque alguien te hizo memorizar que 1 + 1 siempre es igual a 2. Aplicar eso a 2 + 2, te permitió postule que la respuesta sería 4. La programación es de la misma manera. memorizamos patrones y algoritmos y los aplicamos a problemas únicos para probar una hipótesis.

Lo que lleva a otro aspecto de la programación, la ciencia. Algunos sostienen que la programación es una profesión de ingeniería (ingeniero de software). Algunos sostienen que la programación es una ciencia (informático). Realmente, es una combinación de ambos y los dos atributos que hacen que un gran programador individual sea la capacidad de aplicar algoritmos a los problemas y la capacidad de demostrar metódicamente que una solución hipotética a un problema es realmente sólida y repetible. Un tercer elemento menos tangible es el arte o la creatividad, pero que difiere de la respuesta. Notará que Ingeniería y Ciencia dependen en gran medida de las matemáticas, debido a la naturaleza de poder aplicar algoritmos a problemas nuevos y únicos.
Ahora sí hablo de talentos de programación de primer nivel, pero una gran parte de los programadores están compuestos por talentos de nivel medio, lo suficiente como para hacer el trabajo. Y mucho de lo que hacen los programadores hoy en día (excluyendo al informático puro) es codificar soluciones en un equipo donde cualquier dificultad en las habilidades se compensa fácilmente por la dinámica del equipo (lo que implica la necesidad de buenas habilidades de comunicación).

Entonces, toda esa larga redacción fue simplemente para darle una idea de la profesión de la programación. Pero como muchos han dicho, la programación es una profesión muy aburrida y puedo decirlo con seguridad, si no te gustan las matemáticas (específicamente la repetición de memoria y la resolución de desafíos matemáticos), probablemente tampoco te gustará programar.

Creo que aún más relevante que tus calificaciones es la alegría que las matemáticas te traen. ¿Qué sientes después de resolver un problema matemático (o algorítmico) difícil?
Puede ser que no encuentres esas toneladas de problemas que resuelves para la clase lo suficientemente interesantes, o aún no ves una aplicación práctica para ellos. Tal vez podrías intentar estudiar por tu cuenta algo que te interese, aparte de lo que se estudia en la escuela.

Haga un experimento, pregunte a los desarrolladores de software cómo comenzaron. Apuesto a que muchos de ellos comenzaron implementando sus propios juegos, aplicaciones que, sin embargo, les son útiles en lugar de aprenderlo en la escuela.
No me malinterpretes, la escuela / universidad es excelente para su propósito y te ayuda a adquirir muchos conocimientos, pero no se dirige al estudiante en general de forma individual . Es su responsabilidad encontrar sus intereses y fortalezas individuales y beneficiarse del conocimiento general proveniente del entorno académico al mismo tiempo. Una vez que domines las áreas que te gustan, las otras también serán más fáciles. No espere para terminar los cursos para ser un desarrollador de software mejor que el promedio.

He visto personas de CS con fuertes habilidades de programación pero que no están dispuestas a desarrollar sus habilidades matemáticas (¡pero al revés también!) Con sus debilidades reflejadas en su trabajo. Creo que ambos conjuntos de habilidades son importantes y, si es posible, debes tratar de mejorar ambos en paralelo. Incluso con pasos pequeños pero consistentes en el tiempo, verá algunos resultados. ¡Y tienes toda una vida por delante!

Ya que recién estás empezando la universidad, te recomendaría “Concrete Mathematics: Foundation for Computer Science” de Donald Knuth. Es un poco difícil de leer, pero cubre mucho, y sus libros siempre tienen ese “algo” que normalmente no se encuentra en los libros de matemáticas y CS.

Como conclusión, si te gustan las matemáticas, no las tires, incluso si otros te consideran promedio. En el peor de los casos, no lo usará con frecuencia en su trabajo, pero seguramente lo ayudará en la vida. Si no le gustan las matemáticas, como puede ver en las otras publicaciones, muchos argumentan que puede tener éxito incluso sin ellas (y yo sí las creo), por lo que la situación no es tan dramática de ninguna manera.

Inevitable. Tus habilidades matemáticas son principalmente tus armas para manejar problemas no resueltos con ingenio. Aparte del lado ingenioso, hay un lado más difícil.

Ahora, como ingeniero de software, debe realizar el trabajo. Si está dispuesto a esforzarse más y alargar su código, es posible que tenga alguna negligencia con las matemáticas.

Por ejemplo:

  suma = 0;
 para (i = 0; i <10; i ++)
 {
  suma = suma + a [i] [i];
 }

Arriba está la forma inteligente de encontrar la suma de los elementos diagonales de una matriz, mientras que abajo está el método más difícil de lograr lo mismo.

  suma = a [0] [0] + a [1] [1] + a [2] [2] + a [3] [3] + a [4] [4] + a [5] [5] + a [6] [6] + a [7] [7] + a [8] [8] + a [9] [9];

El método de trabajo duro funciona aparentemente bien cuando se trata de trabajar a nivel de aprendizaje. A medida que avanza hacia el trabajo generalizado a nivel de proyecto, la complejidad del tiempo y la complejidad del espacio lo atrapan hasta que renuncia.

Recuerde que en el mundo competitivo de hoy, es más el trabajo inteligente lo que importa, no el difícil . Tal vez pueda convencerte de que el software y las matemáticas son los lados opuestos de la misma moneda.

En el campo de la Ingeniería del Software (a diferencia de la disciplina académica de la informática), ser un genio matemático no te va a distinguir, y la falta de ella no te va a detener.

Definitivamente hay una fuerte correlación entre la habilidad matemática y la habilidad de programación. Sin embargo, la habilidad matemática es solo una parte del buen desempeño en matemáticas como materia académica, y la habilidad de programación es solo una parte de la práctica de la ingeniería de software.

He trabajado con grandes programadores que son ingenieros de software mediocres y he trabajado con grandes ingenieros de software que son matemáticos mediocres. Las habilidades que hacen que los ingenieros de software sean excepcionales incluyen la creatividad, el carisma y la comunicación, quizás cosas que algunas personas no asocian con la ingeniería.

La comunicación con los clientes es obviamente importante para cualquier proyecto. A medida que un proyecto se vuelve más complejo, necesitará más personas para trabajar en él, y las líneas de comunicación interna requeridas aumentan exponencialmente. Un gran ingeniero de software crea y comunica metáforas de sistemas fuertes que permiten que un equipo y el software que producen se cohesionen. Crean una visión que motiva e inspira al equipo a desempeñarse. Se comunican bien sobre el progreso y los problemas para que los colegas y los clientes aprecien y valoren el trabajo incluso mientras se realiza,

Por último, considere el software producido. Un buen software es relevante, utilizable y probado bien. Satisface las necesidades de los clientes porque alguien entendió esas necesidades. Está diseñado para comunicar al cliente cómo usarlo y qué está haciendo. Hace lo correcto, de manera confiable y dentro del tiempo y los recursos disponibles. Se comporta adecuadamente cuando falla, no se cuelga ni se cuelga, pero produce buenos mensajes de error y diagnósticos útiles. Los diagnósticos y el código fuente se comunican bien con los ingenieros de mantenimiento y los ayudan a localizar y corregir errores. El código fuente comunica el diseño para que otros ingenieros puedan escribir la próxima versión o software relacionado de manera efectiva.

Entonces, si quieres ser un gran ingeniero de software, anímate y cúmplelo. Sigue preguntándote a ti mismo y a otros estas preguntas. Aprenda sus propias fortalezas y aprenda a confiar en las fortalezas de los demás. Crea, comunica y cautiva.

Sí, significa exactamente eso. Pero , las personas que piensan que son “malas para las matemáticas” suelen ser “malas” en ciertas disciplinas, como el análisis (derivaciones, integraciones, etc.)

Es frecuente que quienes estén interesados ​​en el desarrollo de software también sean, sin saberlo, buenos en Geometría, Lógica y Álgebra Abstracta.

Entonces, creo que deberías reevaluar tu postura de ser mediocre en matemáticas. Si realmente eres mediocre en todo lo que es matemática, entonces, sí, no hay esperanza para ti, en ingeniería de software. Pero dudo que ese sea el caso.

¿Escribes código? Alguien dijo una vez que “cuanto más codifique, más podrá codificar”. Así que acostúmbrate a escribir código. Grandes o pequeños, desde problemas universitarios hasta proyectos de código abierto, escriba código. Escribe un código que te haga sentir mejor contigo mismo al resolver ese problema.

Aprenderá en poco tiempo que, como maravilloso efecto secundario, terminará aprendiendo cosas aparte de la informática. Por ejemplo, si está escribiendo el próximo motor de gráficos AAA, tendrá que aprender: álgebra lineal, análisis numérico y, por supuesto, diseño OO, código de optimización y buenos principios de ingeniería. La codificación es una actividad que puede ser multidisciplinaria en el buen sentido.

No. La ingeniería de software no se trata realmente de crear nuevos algoritmos. La mayoría de los ingenieros de software solo usan muchas herramientas como cajas negras como parte del sistema. Usted es responsable de la arquitectura del sistema, pero siempre puede contratar o colaborar con matemáticos para construir las cajas en la visión de su gran sistema.

Dicho esto, siempre tiene sentido tratar de mejorar las matemáticas como persona de CS para que seas más autónomo. Algunos de los trabajos más interesantes están en la investigación que definitivamente requiere más habilidades de este tipo. No tiene que probar P! = NP, pero algunos cálculos básicos y estadísticas no podrían hacer daño en estos días, ¡así que tenga paciencia!

No necesariamente. Realmente depende de qué tan temprano comenzó su exposición a los temas informáticos. Algunos conceptos tardan más en entenderse para algunos individuos que para otros. Es posible que deba trabajar más duro que aquellos que tuvieron una exposición anterior a los conceptos informáticos si no ha tenido una exposición temprana. Sin embargo, hay muchos factores a considerar, incluyendo su ingenio personal y creatividad. Además, la ingeniería de software de alta calidad no es completamente un tema en blanco y negro.

A veces soy programador y tuve problemas con las matemáticas durante años. A medida que mi mente maduró, comenzó a aceptar las matemáticas con mayor facilidad, y cuando tenía 35 años, estaba obteniendo A y B en matemáticas. Sigue así, porque la habilidad principal que necesitas programar es la resolución de problemas. Si bien es cierto que mientras más matemáticas conozca, mejor podrá usar una computadora para resolver problemas, el hecho es que no toda la programación involucra una gran cantidad de matemáticas. Por ejemplo, si desea diseñar un osciloscopio virtual, utilizará muchas funciones matemáticas complejas, pero si desea hacer una base de datos o programación de Internet, no habrá tanta necesidad de matemáticas más altas. Creo que deberías encontrar el tipo de programación que sea más interesante y agradable para ti, y hacerlo, porque si necesitas saber algo de matemáticas para hacer algo que amas, te será más fácil hacerlo. : o) Buena suerte, y no te desanimes: hice una F en Cálculo la primera vez, una C la segunda y una A la tercera. El último trabajo de programación que tuve, estaba ganando $ 40 por hora. Encontrarás tu nicho.