La programación de computadoras es un trabajo que require conocimiento de múltiples disciplinas y mucho se escribe sobre lo que es necesario que sepa o lo que es inútil para un programador. En este artículo intentaré describir lo que desde mi perspectiva como programador con 20 años de experiencia es importante que deba estar entre los conocimientos de un buen programador.
Al iniciar a programar, es indispensable que un programador aprenda un lenguaje de programación y todas las estructuras de control, el concepto de variable, objeto, alcance de variables, etc.
Más adelante entre los conocimientos fundamentales de todo buen programador están las estructuras de datos, matemáticas discretas, base de datos relacionales y teoría de sistemas cliente-servidor.
Por otro lado deberían conocer la arquitectura SOA y su implementación más extendida que son los WebServices
ESTRUCTURAS DE CONTROL
. Preparan al estudiante en el conocimiento de los elementos esenciales de un lenguaje de programación y si se trata de un lenguaje moderno debería ser orientado a objetos.
MATEMATICAS DISCRETAS
. La teoría de conjuntos es uno de los temas dentro de las matemáticas discretas; permitirá en un futuro programar fácilmente código que incluye manejo de conjuntos de cualquier tipo, además que facilitará la comprensión y creación de consultas en lenguaje SQL. Por otro lado la lógica que se ve en este tema, ademas de ser un buen ejercicio mental, apoyará en la resolución de problemas lógicos durante la codificación.
Los árboles de decisiones, grafos y autómatas son algunos de los temas que proporcionan conocimientos esenciales a un buen programador con lo cual crear software innovador y le permite tener las bases para crear nueva tecnología. En general las matemáticas discretas es un tema fundamental en la formación de todo futuro programador.
ESTRUCTURA DE DATOS
. El tema de estructura de datos es un pilar de la programación de computadoras, ya que permitirá programar con solidez muchas soluciones para problemas comunes. Las estructuras de datos también son la base de tecnologías conocidas ampliamente, por ejemplo los árboles B, que son la base de la implementación de la mayoría de las bases de datos relacionales. En manejadores de bases de datos como SQL Server y Access, los conceptos de páginas de datos, llave clustered y/o primaria corresponden o tienen una similitud muy cercana a urnas y estructuras de árbol B.
https://sites.google.com/site/clasearbolesb/arboles-b
BASES DE DATOS
La teoría relacional es esencial cuando se trata de crear una solución con datos empresariales o de cualquier tipo que contiene entidades que se relacionan. La arquitectura cliente-servidor va de la mano de este tema, pues hoy en día se manejan grandes cantidades de datos que serían imposibles de administrar con un sistema basado en archivos. Por otro lado la arquitectura cliente-servidor provee el conocimiento que permite entender mejor el funcionamiento de servidores Web, FTP, etc.
Los conocimientos de Arboles B y otras estructuras de datos apoyan en gran manera en la implementación de las bases de datos relacionales. Un buen diseñador de bases de datos relacionales realizará un mejor trabajo si comprende exactamente conceptos y técnicas como Urnas, Llave Primaria, Llave secundaria, Normalización, etc.
SOA / WEBSERVICES
Hoy en día no se concibe un programador que no conoce SOA y su implementación mas conocida: WebServices; en un mundo conectado es muy frecuente que los sistemas intercambien información e interactúen de manera automática. Con la arquitectura SOA se adquieren la capacidad de conectar sistemas localizados en
cualquier parte del mundo o crear una aplicación distribuida.
DESARROLLO WEB Y MOVILES
Un vocero de Microsoft declaró recientemente que al menos el 80% de sus programadores estaban trabajando en algún producto relacionado con la nube; esto indica que la tendencia del mercado es el modelo de software como servicio (SAAS). Es por esto que actualmente es importante desarrollar para la web y los móviles, ademas de poder desarrollar servicios web (webservices).
En definitiva el conocimiento de estructuras de datos, matemáticas discretas y arquitectura SOA entre otros resulta fundamental en la formación de un buen programador, el carecer de una buena formación en cualquiera de ellas podría resultar en serias deficiencias como programador.
He escuchado en repetidas ocasiones frases como: "Los mejores programadores que conozco son contadores, administradores..." y definitivamente tienen razón, pero estas personas tendrán que aprender todos estos temas si desean programar software de mayor complejidad. Mi respuesta a estos comentarios es: "Conozco muy buenos albañiles que hacen casas igual o mejor que un arquitecto, pero no conozco un albañil que construya edificios de 10 pisos o plazas comerciales".
En definitiva ser buen programador va mas allá de aprender un lenguaje de programación. Se requiere como ya mencioné de matemJticas discretas, estructuras de datos, modelo relacional, arquitectura SOA y otras técnicas y conocimientos importantes.