/ design patterns

¿Para que sirve la ciencia de la computación a un programador?

Veamos en que puede ayudarnos conocer algunos temas de ciencias de la computación en nuestras tareas de desarrollo

Vayamos desde las bases..

utilizar estructuras de datos

Ya sé, ya sé, casi todos los lenguajes de programación tienen estructuras de datos ya implementadas, y efectivamente, no es necesario saber como se implementa un árbol balanceado para utilizarlo, pero ese es mi primer punto, hay que conocer las estructuras para utilizarlas!

Algunas reglas pre definidas para usar cada estructura podrían ser:

  • se requieren hacer búsquedas?
  • se requiere ordenar los resultados?
  • se conoce algún posible límite para la información que se va a contener?
  • el acceso a los datos será aleatorio u ordenado? Por ejemplo: LIFO

Son este tipo de preguntas que nos ayudan a seleccionar la estructura de datos adecuada para nuestro problema. Así es muchachos, no todo en la vida son ArrayList

hablar de distintos temas, sin conocer de ellos

Y no, esto no es fingir ni ser un impostor
impostorpowerpuffgirls

Al conocer distintas estrategias para solucionar problemas, hablamos de una forma agnóstica, sin depender de un lenguaje de programación específico o de alguna herramienta, esto nos ayudará a poder expresarnos de una mejor forma con los demás equipos:

  • estructuras de datos
  • patrones de diseño
  • configuraciones: de índices para bases de datos, reglas de balanceo, reglas de optimización
  • protocolos de comunicación. Por ejemplo: aunque no seas un frontend developer, conoces HTTP y puedes aportar tus puntos de vista en algún problema de comunicación
  • algoritmos para solucionar ciertos tipos de problemas

Sólo no olvides reconocer tus límites

yep

resolver más tipos de problemas

Para un ingeniero (en cualquier campo), la ciencia es un toolkit y lo utilizamos para construir soluciones

Supongamos un conjunto de información como: optimización permutacional, algoritmos evolutivos, machine learning

Si bien no vas a hacer un breakthrough en la ciencia escribiendo un algoritmo mejor que el recocido simulado, podrás utilizar estos algoritmos para escribir las primeras versiones de la solución, plantear los siguientes pasos para mejorar la arquitectura de la solución, ó (más realisticamente) poder evaluar de mejor forma las soluciones libres o de paga que hay en el mercado para que tu departamento no tenga que contratarse medio equipo de científicos sólo para su app de Uber de los licores

código más limpio

Ya en el blog hemos discutido previamente la importancia de un código limpio

Todo el conocimiento sobre los puntos anteriores nos dará una ventaja sobre cualquier problema y una ventaja en el diseño de la solución ya que precisamente sabemos como fueron diseñados los componentes que utilizamos, conocemos el valor de un buen API para el manejo de una colección, lo útil que puede ser el desacoplamiento, lo necesario de los protocolos claros entre los componentes

identificar problemas no resolvibles

A veces creemos que podemos resolver cualquier cosa, pero será nuestro algoritmo capaz de terminar de procesar en el tiempo requerido? Es aquí cuando temas como complejidad computacional y notación de O grande son de gran utilidad, a veces podemos incluso tener una medición constante, pero simplemente por la cantidad de peticiones esperadas podemos darnos cuenta que el sistema no se sostendrá
bigonotationmotherfucker
Existen también una serie de problemas conocidos como P y NP los cuales nos sirve conocer para saber si estamos ante una bestia indomable (aún) por la ciencia
dz-8

conclusión

Conocer más formas de solucionar problemas, distintos protocolos de comunicación, conociendo tus estructuras de datos, eligiendo un paradigma de programación (ya sea orientado a objetos, funcional, chile mole y pozole) y una pisquita de sentido común

sugar-flowers-and-colors

obtenemos a un ingeniero listo para afrontar cualquier tipo de problemas

ricksanchez