Computer Science vs Software Engineer

Cuando comencé en el mundo de la programación fue llegar a un mundo con una cantidad de conocimientos por aprender que parecían infinitos, decidí comenzar jugando con Arduino, me gustaba ver que lo que escribía en la computadora hacía algo en el mundo físico, nunca se olvida el primer led que prendiste, tampoco el primero que quemaste.

Desde ese momento me deje ir con muchos proyectos que ahora ya son como un clásico que te dejan si estudias mecatrónica o una carrera relacionada, pero la primera vez que lo haces te sientes Iron Man, haciendo un brazo robótico, un sistema de riego automatizado, etc. Aprender esto a una edad "temprana" me dejo dar clases de Robótica en mi preparatoria, fui alumno y profesor al mismo tiempo, eso me llevó a hacer muchos proyectos con mis alumnos, y me cuestione muchísimas cosas, simultáneamente llevaba proyectos de investigación científica con mis profesores de física, uno fue una mesa sísmica, que ayuda a entender cómo la tierra se mueve en tres ejes (X, Y, Z), fue creciendo y te enseñaba las gráficas para que fuera más ilustrativo, después decidí escalarlo a un software que mezclaba Arquitectura, Ingeniería Civil, Sismicidad, Urbanismo, etc. Era un proyecto más maduro lo desarrolle hasta toparme con una barrera que fue las matemáticas.

Esta barrera me freno un tiempo pero la curiosidad me llevó a hacerme muchas preguntas, hoy te quiero contar sobre unas:

  • ¿Se necesitan matemáticas para programar?
  • ¿Qué es programar?

Me fui en búsqueda de una respuesta con muchos amigos y expertos pero, en la facultad de ciencias de la UNAM me encontré con un profesor que me dio la mejor respuesta. La conversación fue algo así:

-Yo 👦🏽: Profesor para usted ¿Qué es programar?

-Profesor 👨🏽: Esa pregunta me la hacen mucho mis alumnos, yo siempre empiezo mis clases con los de primer semestre con una pregunta ¿Saben programar?, inmediatamente me responden cosas como:

Si, yo programo en JavaScript.

Si, yo programo en Python.

Ahí me doy cuenta que no saben programar, porque programar es saber resolver problemas, poder delimitar un problema a una serie de pasos lógicos que te van a llevar a una solución para tu problema, el lenguaje en que lo escribes no importa, importa que resuelves problemas.

Ahí no terminó la conversación pero después de platicar con él yo lo resumí en 2 analogías que hizo que me quedará muy claro, hoy te las quiero compartir.

Saber programar es cómo saber transmitir una idea efectivamente, alguien que sabe dar un mensaje efectivo, va a conectar con su público, lo hará en pocas palabras y al receptor le queda claro. Poder transmitir una idea es una cosa muy diferente a saber hablar, el idioma en que lo digas es lo de menos, lo difícil es conectar con el público.

Seguro te ha pasado que vas por la calle y alguien te pregunta ¿Cómo llegó a X lugar? tú le vas a dar una serie de pasos lógicos para que esa persona llegue a su destino, pero ¿Qué pasaría si sabes su idioma, y no sabes cómo llegar? Estamos perdidos! Lo importante es saber cómo llegar, porque en un escenario donde no sabes el idioma lo puedes acompañar, enseñarle el camino, y listo! pero sí sabes el idioma pero no el camino probablemente no puedas ayudarlo.

Desde ese día me quedaron dos cosas marcadas, responder un simple Sí, cuando me pregunten ¿Sabes programar? y que la programación es saber resolver problemas, las herramientas que uses ya son una cosa aparte.

Hablando de herramientas quiero llegar a la pregunta ¿Se necesitan las matemáticas para programar?

gif de Iron Man

Te voy a contar otra plática con ese profesor, un día discutimos este punto y me contó que es algo curioso de explicar porque tomando en cuenta que programar es resolver problemas, las matemáticas son una herramienta más del programador, y uno de sus mayores usos es para hacer abstracciones, llevar el problema a un contexto donde sea más fácil de comprender y resolver para ti.

Decidimos preguntar a más programadores entonces empezamos a ver patrones en los programadores, muchos decían no necesitas las matemáticas para programar, hasta darnos cuenta que varios entendían las matemáticas como solo la materia de cálculo, pero buscando un poco más descubrimos que hay gente que usa álgebra para hacer las abstracciones de sus problemas, otras personas usan geometría, la gran mayoría no usa cálculo, y esto no es porque cálculo no sirva para abstraer problemas, entra el factor de que cálculo a mucha gente le resulta difícil, y si no ven una solución a un problema, mucho menos van a querer plantearlo en una diferencial o una integral o cosas más complejas, lo van a llevar en un contexto amigable para ellos, así que desde este punto de vista puede que no necesites las matemáticas para resolver problemas, si tu logras abstraer los problemas de otra forma y encontrar una solución, solo que las matemáticas son una de las formas más utilizadas, porque son lógicas.(Hasta cierta dimensión son lógicas, cuando te hablan de ecuaciones diferenciales en n dimensiones puede empezar a parecer que pierden la lógica 🤯)

Eso me dejó conforme pero no satisfecho, así que eso me llevó a una pregunta ¿Hasta qué nivel de matemáticas necesito saber? Es aquí donde entra la diferencia entre Software Engineer vs Computer Science.

Hay científicos de la computación que no tocan código, y aunque suena raro es real.

Esto te lo quiero explicar cómo quién crea la herramienta 🛠 y quien crea cosas con esa herramienta 👨🏻‍🔧.

Los científicos de la computación se pueden dedicar a crear lenguajes de programación, optimizar o crear nuevos algoritmos, investigación, etc.

Los ingenieros de Software crean programas con esos lenguajes o usan esos algoritmos para crear productos. Es aquí donde entra el nivel de matemáticas que necesitas para programar y eso está directamente relacionado con el área a la que te vas a dedicar, por eso suena mucho con los científicos de computación "Esas son matemáticas de Ingenieros" y las matemáticas de ingenieros pueden ser aplicar fórmulas, fórmulas que aplicas con seguridad, porque existe o existió un matemático ó un científico que demostró que eso es cierto y por uso tu puedes afirmar tus resultados confiando en esa fórmula, de igual manera existen científicos de la computación que de lenguajes de bajo nivel, construyeron lenguajes de alto nivel que resultan más amigables.

Esta relación se da en muchas áreas te daré unos ejemplos, un coche primero lo diseñan, se crean las piezas y luego llega a las plantas donde los ensamblan, eso requiere ingenieros, científicos, diseñadores, etc. Otro ejemplo no hay un paciente sano sin un doctor que lo opere, y un enfermero que lo cuide en su recuperación. No hay Batman sin Robin, y no hay Robin sin Batman, uno no es mejor que otro, solo son funciones diferentes, si no existieran científicos, no habría ingenieros creando genialidades con lo que los científicos probaron teóricamente, es una mezcla que tiene resultados increíbles.

Esto no quiere decir que te limites a un área, pero esto a mi me ayudo a decidir, qué área escoger para delimitar los temas a estudiar y decidir cúal era el camino a seguir, espero te ayude en tu crecimiento!.

Si quieres seguir la conversación puedes encontrarme en Twitter como @HumbertMLL y en Instagram como @HumbertoMLL.

Te espero en un próximo blog!