Conceptos básicos de programación
Una de las preguntas más comunes que nos hacemos cuando queremos empezar es ¿Cómo hago para ser programador? con ciertas variantes como ¿Qué curso puedo hacer? o ¿Dónde puedo aprender? o inclusive ¿Qué carrera debo estudiar para ser programador?. Respondiendo esa última pregunta algunos se sorprenden al saber que en realidad no es necesario estudiar ninguna carrera para ser programador, de hecho, yo aprendí de manera autodidacta, eso sí, requirió tiempo y esfuerzo.
Ahora, en el caso de las otras preguntas yo te respondería con otras. ¿Por qué quieres programar?, ¿En qué lenguaje deseas programar? ¿Quieres ser Backend o Frontend? La primera es más sencilla de responder: Oportunidades laborales, salarios y beneficios de las empresas son algunas de las respuestas que recibo comúnmente, lo cual me parece genial, pero a la pregunta de en qué lenguaje deseas programar, las respuesta se vuelven más dudosas, y claro tiene sentido, si lo están preguntando es porque no saben por dónde empezar y es por esto que creo que sacar esta información es muy importante antes de siquiera decidirte por algún lenguaje en concreto.
Empecemos desde cero, ¿Qué es un programador?
Parece haber una idea errónea o un misterio respecto a lo que hace un programador, si, la mayoría asume que se trata de una persona que se sienta frente a una computadora con una pantalla negra y letras verdes y empieza a escribir cosas en ella y luego puf!, aparece el programa. Las películas e internet en general, a veces no contribuyen a aclarar esta idea, las personas entran en este mundo pensando que un programador es un hacker, o que pueden hacer una aplicación móvil con solo ver un par de tutoriales de youtube, cuando la realidad es mucho más simple pero a la vez menos emocionante que eso.
Una definición simple de lo que es un programador, es que es una persona que se encarga de tomar una necesidad y convertirla en un software que la solucione, codificando en un lenguaje que conocemos como lenguaje de programación que una computadora puede compilar (traducir) a una serie de instrucciones que esta debe ejecutar en un orden específico. En resumen el programador se encarga de decirle a la computadora que tiene que hacer y en qué orden para satisfacer la necesidad que se plantea. La computadora en cuestión no entiende lenguaje humano, entiende lenguaje binario que es una composición de solo ceros y unos. Entonces ahí es cuando entra el lenguaje de programación que no es más que una interfaz intermedia que permite al programador comunicarse con la máquina.
¿Backend, Frontend o ambos?
Algo crucial al momento de decidir convertirte en programador es saber en qué área específica del software te vas a desarrollar, la mayoría de los software tiene una interfaz con el usuario, donde éste interactúa y realiza las acciones que le corresponden, esta interfaz que ve el usuario se le conoce como Frontend. Existe también otra cara de la moneda y es el Backend que se trata de la parte del software que no ve el usuario, que interactúa con la base de datos o con lo que sea que haya detrás del software.
Frontend
El programador Frontend se encarga de desarrollar la parte visual de un software, la parte que interactúa con el usuario final, entonces, es de asumir que esta parte tiene que verse lo mejor posible y tiene que ser lo más fácil de usar o en su defecto lo más acorde a usar para el usuario final de modo que este tenga una experiencia agradable interactuando con tu programa. El desarrollador frontend es el responsable de usar sus conocimientos para convertir una necesidad visual en realidad. Las principales herramientas que utiliza son HTML, CSS y la más importante de todas Javascript. Javascript en sí mismo es un mundo aparte y es algo que todo desarrollador frontend debe conocer en menor o mayor medida.
Backend
El programador Backend se encarga de desarrollar la parte del software que toma las interacciones del usuario (captadas a través del frontend) y realizar una acción en el servidor en función de estas interacciones, bien sea guardar un dato, procesarlo, convertirlo, transformarlo, estudiarlo, etc. Tiene la particularidad de que no interactúa con el usuario en ningún momento, salvo por algún que otro mensaje de error o éxito.Las principales herramientas de un programador backend se basan en el lenguaje de programación elegido que se ajuste más al software que se quiere realizar, la realidad es que existen muchísimos lenguajes de programación y muchas variantes de los mismos gracias a las constantes actualizaciones que existen, pero entre los más conocidos te menciono algunos: Java, Python, Ruby, PHP, Apex, Go pero hay muchos otros.
Full stack
El programador full stack es una combinación de ambos mundos, se encarga tanto de la parte visual como de la parte no visual del programa, tienen la particularidad que dominan todas las áreas pero requiere muchos años y mucho entrenamiento dominar ambos mundos a la vez que requiere mucho tiempo invertido en mantenerse actualizado en estos dos aspectos, normalmente tienen una clara definición o preferencia por alguno de los dos frentes y se dedican al otro para complementar sus habilidades. Si estás comenzando a programar no te recomiendo que intentes aprender las 2 cosas al mismo tiempo ya que duplicarían la dificultad de aprender los conceptos relacionados con cada uno
Cliente – Servidor – Base de datos
Llamamos cliente a una aplicación (software) que se ejecuta en el dispositivo del usuario, es decir consume recursos del teléfono o computadora del usuario que la tiene instalada. Creo que es más fácil entender esto con un ejemplo. Los navegadores como Firefox o Chrome son los clientes por excelencia, ya que ejecutan una serie de procesos en tu dispositivo que les permite funcionar. Esto se evidencia fácilmente si ves los procesos que están corriendo en tu computadora viendo el administrador de tareas de Windows o el Monitor de actividad en Mac y buscas el nombre del navegador en el que estés viendo esto te encontrarás con que consumen parte de la memoria de tu dispositivo y hacen trabajar al procesador.
Ahora, el servidor o aplicación de servidor es una aplicación que se instala en el dispositivo del proveedor del servicio y que por lo tanto consume recurso de este. Un buen ejemplo de esto es este blog, las imágenes y textos que lees, están guardados en un servidor que se le conoce como hosting, el hosting no es más que un servidor donde se guardan y ejecutan las páginas web. Los servidores existen porque normalmente tienen la capacidad de almacenar y procesar muchas más información de la que podría una computadora normal a la vez que habilita la conexión de distintos clientes para que estos puedan acceder a su información.
Finalmente la base de datos es un software que está en el servidor que se encarga de almacenar todos los datos relacionados a la aplicación, usuarios, contraseñas, correos, datos de producto, etc. Las bases de datos son esenciales en cualquier aplicación ya que nos permiten guardar o consultar cualquier pieza de información que nos pueda resultar útil para ejecutar nuestra aplicación.
Una aplicación puede tener componentes de cliente y servidor al mismo tiempo pero normalmente se ejecutan en dispositivos distintos que separan su propósito, por ejemplo el correo electrónico tiene un componente de cliente, que es el que nos permite ver los correos en nuestros dispositivos y tienen un componente de servidor que es el que nos permite almacenar los correo de todas las personas registradas en nuestra plataforma.
Bug
Cuando programamos somos los responsables de decirle a la computadora exactamente qué hacer en ciertas instancias del funcionamiento de nuestra aplicación. ¿Pero qué pasa si algo no funciona como lo planeamos o si nunca programamos un caso particular del funcionamiento de la aplicación? En esos casos la aplicación puede comportarse de maneras inesperadas o directamente fallar y mostrar uno de esos molestos mensajes de error que nos sorprenden siempre en los peores momentos.Bueno un bug es un fallo en el comportamiento que debería tener la aplicación dado un comportamiento determinado. Digamos que por ejemplo hacemos click en un botón y se supone que debería aparecernos una nueva página confirmando que la acción que hicimos fue correcta, pero en lugar de hacer eso, nos envía a una página completamente distinta y deja al usuario sin saber que hacer luego teniendo que volver atrás y dañando la experiencia del mismo, este caso es uno de los ejemplos más comunes de bug pero existen otros que inclusive pueden ser mucho más perjudiciales para la experiencia del usuario. Es por esto que siempre se requiere una persona extra que no sea el que programó la aplicación para probar el funcionamiento teniendo en mente lo que se supone que debería ocurrir. a estos se les conoce como Quality Assurance y hablaré de ellos en otro post.
Conceptos de POO (Programación orientada a objetos)
Clase
Creo que la mejor manera de explicar lo que es una clase sin meterme en conceptos demasiado técnicos es plantear un ejemplo de algo común y hacer la analogía, así que pensemos en una fábrica de galletas, en esta fábrica los moldes que se usan para darle forma a las galletas son las Clases. Entonces ¿Qué es una clase? es una representación abstracta de cómo debe verse el producto final que estamos produciendo (las galletas en este caso) al cual llamamos objeto, las clases tienen una serie de características que el programador crea de manera predefinida para poder utilizarlas luego en su aplicación.
Objeto
Un objeto es la representación de una clase, en el ejemplo de la fábrica estaríamos hablando de la galleta, a los objetos los llamamos instancias de una clase. El objeto que surge como producto de una clase, tiene las mismas características y funciones que definimos en la clase.
Atributo
Son las características que tiene que tiene la clase es decir todo lo que ayuda a definir la clase, por ejemplo si usamos un molde (Clase) que llamamos MoldeEstrella podríamos decir que una de sus características es la forma y otra la cantidad de puntas de la estrella, y la galleta tendrá estas características que definimos previamente.
Método
Son las funciones o acciones que puede realizar esa clase. El ejemplo de la fábrica de galletas no es muy bueno en este caso, porque una galleta no puede hacer nada realmente, pero pensemos por ejemplo un auto, un método podría ser encenderLuces o acelerar.
Existen infinidad de conceptos distintos por lo que planeo ir actualizando este artículo cuando veo que se vaya requiriendo, pero el objetivo principal es tener una idea de los conceptos que hablaremos luego en el blog y en mis redes. ¿Crees que hace falta algún concepto importante? Házmelo saber en los comentarios.