¿Recuerdas cuando alguna vez fue muy popular y se consideraba una broma muy divertida que un programador es una persona que arregla televisores y cría ratones? Han pasado muchos años desde entonces, y ahora esta broma ya no es divertida, porque todos saben que esto es lo que hace un ingeniero de sistemas.
Este es otro chiste, pero hablando en serio, hoy más y más personas entienden que la programación es un campo de aplicación muy amplio y que los desarrolladores tienen muchas especializaciones. Por ejemplo, desarrollador backend, desarrollador frontend y otras áreas.
Vamos a empezar.
Desarrollo Front-end: ¿Qué es?
El desarrollo front-end es el desarrollo de la interfaz de un sitio web, programa, juego, sistema CRM, cualquier producto digital. En pocas palabras, todo lo que vemos cuando navegamos por Internet o abrimos un programa en nuestra computadora: el encabezado, la imagen, el protector de pantalla, el texto, los botones, las tablas, etc.
En consecuencia, un desarrollador front-end o desarrollador frontend es un especialista que desarrolla la interfaz del producto digital. ¿Cómo hace esto? Consideremos un ejemplo de cualquier sitio web abierto en cualquier navegador.
Si hacemos clic derecho con el mouse de la computadora y seleccionamos la línea «Ver código
» en el menú contextual, veremos «muchas letras» y algunas palabras familiares que ya vimos cuando ingresamos al sitio. Todo esto se diseña utilizando HTML, CSS y JavaScript.
Expliquemos brevemente qué es:
- HTML es el lenguaje de marcado de hipertexto, con el que se marca la estructura de una página web, se establece la ubicación de encabezados, subtítulos, texto, imágenes, etc.
- CSS son tablas de estilo en cascada, que se encargan del estilo de los elementos HTML.
- JavaScript es un lenguaje de programación que proporciona interactividad a la página web y su interacción con el usuario.
Esto es lo que todo desarrollador front-end principiante o junior debe saber y lo que enseñan todos los cursos de desarrollo front-end para principiantes. Aquellos que deseen mejorar pueden dominar jQuery, un conjunto de funciones JavaScript que se «especializa» en la interacción entre JavaScript y HTML.
Hoy no profundizaremos en cosas más complejas, porque nuestra tarea principal es comprender qué tipos de desarrollo existen, en qué se diferencian entre sí y qué hace este o aquel especialista.
Responsabilidades
Responsabilidades del desarrollador front-end:
- Desarrollo de la interfaz del producto digital desde cero.
- Modernización de la interfaz del producto digital terminado.
- Diseño multiplataforma, generalmente en HTML5/CSS3.
- Diseño receptivo.
- Escribir scripts.
- Configurar la funcionalidad del producto digital (botones, controles deslizantes, formularios de comentarios, etc.).
- Desarrollo de elementos reactivos.
- Trabajar con la arquitectura existente de sitios web y aplicaciones basadas en widgets.
- Programación de módulos para aplicaciones en funcionamiento.
Para referencia: - El diseño multiplataforma es la capacidad de un sitio para mostrarse correctamente en todos los navegadores principales.
- El diseño adaptable es la capacidad del producto digital para adaptarse automáticamente al tamaño y la orientación de la pantalla del dispositivo.
- Un script es un pequeño programa o secuencia de comandos, que contiene una secuencia de acciones para la ejecución automática de una tarea.
Esto es lo que todo desarrollador front-end debe poder hacer. Dependiendo de los matices del proyecto, las responsabilidades de un desarrollador front-end pueden incluir la creación de pruebas automáticas, la corrección de errores, la interacción con diseñadores y desarrolladores back-end en formato Agile, el trabajo con Angular (plataforma para el desarrollo de aplicaciones web) y Vue ( marco para crear interfaces de usuario).
Para tener una idea de lo que tendrá que hacer específicamente en este o aquel proyecto, es necesario estudiar vacantes específicas de front-end o ponerse en contacto directamente con el empleador.
Los lectores más avanzados saben que en el contexto de la apariencia de un producto digital se utiliza a menudo un concepto como «diseño UX / UI», donde UI es la interfaz de usuario o el diseño del sitio, y UX es la funcionalidad de la interfaz. En pocas palabras, la interfaz de usuario «se encarga» de la apariencia del botón en el sitio y la experiencia de usuario, de lo que sucederá al hacer clic en él.
Un diseñador de UX/UI se ocupa de todo esto y, como ya se desprende del nombre de la profesión, esto no es desarrollo. Será más correcto decir que un diseñador de UX/UI es un diseñador que diseña la apariencia y funcionalidad de un producto digital. Y hacer que todo esto funcione correctamente es una tarea del desarrollador front-end.
Idealmente, un desarrollador front-end debería tener alguna comprensión del diseño de UX/UI para comprender qué esperar de un diseñador de UX/UI, «no perder» las ideas de diseño aparentemente locas e implementar al máximo las ideas útiles.
Por otro lado, el nivel actual de desarrollo de la profesión de diseñador de UX/UI y el software especial Figma para dibujar un prototipo de sitio y crear un diseño interactivo nos permiten hablar en serio sobre cómo ahorrar en desarrollo front-end.
En general, el tema de la división de responsabilidades entre el diseñador de UX/UI y el desarrollador front-end ha sido relevante durante bastante tiempo.
¿Qué es el Desarrollo Back-end?
El desarrollo back-end es el desarrollo de la parte interna del producto digital, que se encuentra en el servidor y está oculta a los ojos del usuario. Gracias a esta parte del servidor, podemos ver la interfaz y, en principio, utilizar el producto digital.
En otras palabras, el backend es responsable de la interacción del usuario con los datos internos, que luego muestra el front-end. La diferencia entre back-end y front-end a menudo se presenta como un automóvil, donde hay una parte visible y unidades y partes ocultas a la vista externa.
Y son precisamente estas unidades y partes (motor, carburador, tren de rodaje, etc.) los que garantizan el movimiento del automóvil tal como lo vemos y la capacidad de conducir el automóvil, presionando los pedales y girando el volante. Y también abra las puertas, ventanas y maletero, encienda las luces de giro y los limpiaparabrisas, baje el respaldo del asiento, etc.
También hay otras opciones para presentar la diferencia entre front-end y back-end. Por ejemplo, al mirar el bordado, admiramos la belleza del patrón, pero si le damos la vuelta a la tela, veremos muchos cruces caóticos de hilos, bucles y nudos:
Así es como cualquier sitio o aplicación no es solo una imagen hermosa en la pantalla. También es un servidor que procesa nuestras solicitudes y las envía a nuestros dispositivos en un formato comprensible para nosotros, y muchos datos internos que se almacenan allí y proporcionan este flujo de información. En general, la interacción entre front-end y back-end tiene un carácter cíclico:
- La parte cliente (front-end) envía información del usuario al servidor (back-end).
- El programa en el servidor procesa la información del usuario recibida.
- La información de respuesta se devuelve al lado del cliente en una forma que el usuario pueda entender.
Por lo tanto, un desarrollador back-end o desarrollador back-end es un especialista que desarrolla y programa la parte interna del producto digital. ¿Cómo lo hace? Para ello, es necesario conocer lenguajes de programación, poder trabajar con sistemas de gestión de bases de datos y herramientas de carga. ¿Qué son estos lenguajes, sistemas y herramientas? Enumeremos los componentes más básicos del desarrollo back-end.
Lenguajes de programación para desarrollo back-end:
De los lenguajes enumerados, Python es muy popular para el back-end. El uso de C, C++ y C# para el back-end es un tema aparte. La elección de un lenguaje de programación específico depende del proyecto y las tareas planteadas. Ahora no consideraremos los matices del uso de lenguajes de programación para diferentes tareas, porque para ello será necesario escribir un artículo aparte para cada uno de los lenguajes enumerados.
La lista de lenguajes de programación para el desarrollo back-end se proporciona aquí únicamente para orientar a los lectores sobre las peculiaridades del trabajo del desarrollador back-end y transmitir la idea de que el desarrollador back-end necesita conocer uno de los principales lenguajes de programación.
Basándonos en el mismo principio, te familiarizaremos con otros componentes de desarrollo back-end: enumeraremos las opciones que se pueden utilizar y tú podrás familiarizarte de forma independiente con cada una de ellas y elegir una o dos opciones con las que quieras seguir trabajando.
Sistemas de gestión de bases de datos para desarrollo back-end:
- MySQL.
- PostgreSQL.
- SQLite.
- MongoDB.
Herramientas de carga (implementación) para desarrollo back-end:
- CI/CD.
- Kubernetes (K8s).
- Docker.
Responsabilidades
¿Por qué el desarrollador back-end necesita saber todo esto y qué hará exactamente con estos conocimientos? Veamos.
Responsabilidades del desarrollador back-end:
- Creación de arquitectura de código.
- Creación de bases de datos.
- Gestión de bases de datos.
- Configurar actualizaciones automáticas.
- Desarrollo de API.
- Optimizar la funcionalidad del recurso web para reducir los tiempos de carga.
- Optimizar algoritmos.
- Creación de núcleos semánticos desde cero.
- Finalizar el núcleo semántico.
- Configurar copias de seguridad.
- Control de la funcionalidad de la parte interna del producto digital.
- Controlar el funcionamiento de los servidores.
De todos los términos utilizados, prestemos atención al desarrollo de API. En palabras sencillas, una API es un conjunto de métodos y reglas mediante los cuales varios programas «se comunican» entre sí e intercambian datos.
Anteriormente descubrimos que se utilizan varios lenguajes diferentes para el desarrollo back-end. Y, en términos generales, la API es necesaria para que un sitio en PHP «comprenda» una solicitud proveniente de un sitio en Python, de modo que pueda ir a un sitio web de pedido de pizza o boletos de avión desde un teléfono inteligente Android y un iPhone.
En general, el desarrollo back-end es un área bastante popular de aplicación de esfuerzo entre los jóvenes que consideran una carrera en el campo de las TI.
Volviendo a nuestro tema, supongamos que has entendido en general en qué se diferencian el desarrollo back-end y front-end. Y los lectores más perspicaces probablemente se preguntarán: ¿es posible entregar todo el proceso de desarrollo de un producto digital en unas pocas manos, sin dividirlo en back-end y front-end? ¡Vamos a debatir esto también!
Desarrollo Full Stack: ¿Qué Significa?
De hecho, existen programadores que pueden hacer desarrollo tanto de front-end como de back-end. Este especialista se llama desarrollador full-stack. No discutiremos sus funciones por separado porque ya lo hemos contado todo anteriormente. En pocas palabras, un desarrollador full stack debe saber todo lo que sabe un desarrollador back-end y un desarrollador front-end.
Esto se puede representar mediante la siguiente fórmula:
Backend + Front-end = Full Stack
Parece atractivo, ¿no? Entonces, ¿por qué existe una división entre backend y front-end? Primero, para dominar cada una de las especializaciones a un alto nivel, es necesario reciclar bastante información. Y un especialista estrecho en este sentido ganará a un especialista de perfil universal que sabe un poco de todo.
En segundo lugar, no es posible combinar físicamente estas funciones en su totalidad en todas partes. Es como preguntarse por qué se necesita un controlador en el transporte público y por qué no asignar estas funciones al conductor.
En principio, el conductor de la ruta se ocupa bastante bien del trabajo de control de la tarifa. Pero si se le encomienda esto al conductor de un tren eléctrico suburbano, es poco probable que algo funcione. Necesitará la ayuda de un controlador o automatización como los torniquetes en el metro, cuando a los pasajeros sin boleto simplemente no se les permite ingresar a la estación de metro.
Por eso, el desarrollo full-stack se utiliza con más frecuencia para aplicaciones móviles y sitios de una sola página que para proyectos a gran escala. Por cierto, hay sutilezas en el desarrollo de aplicaciones móviles. Comencemos con el hecho de que se distingue entre desarrollo nativo y multiplataforma.
Tipos de desarrollo móvil:
- Desarrollo nativo: cuando una aplicación se desarrolla por separado para Android y por separado para iOS/iPhone.
- Desarrollo multiplataforma: cuando se desarrolla una aplicación que luego se adapta a Android e iOS mediante un compilador.
Ahora veamos qué herramientas implementan estas áreas.
Lenguajes de desarrollo nativos:
- Aplicaciones para Android: lenguajes Java y Kotlin.
- Aplicaciones para iOS/iPhone: Objective-C y Swift.
Se utilizan marcos React Native, Flutter o Xamarin para el desarrollo multiplataforma.
Lenguajes de desarrollo multiplataforma:
- Para React Native: JavaScript
- Para Flutter: lenguaje Dart.
- Para Xamarin: lenguaje C#.
Este es el esquema más general de desarrollo móvil en su forma más simplificada:
Claro que dependiendo del proyecto específico, puede que se necesiten otras herramientas de desarrollo.
Entonces, hemos analizado el full stack, el backend y el frontend en relación con las áreas más fáciles de entender para el usuario masivo: la programación web y el desarrollo móvil. Sin embargo, existen otros ámbitos de aplicación de los esfuerzos de los programadores.
Áreas de Desarrollo
Además de la programación web y el desarrollo móvil, también existe el desarrollo de escritorio (Desktop) y el desarrollo de software de servidor.
El escritorio es lo que puede funcionar sin conexión a Internet. Primero descargas el juego, el programa de edición de video, el programa de procesamiento de sonido o cualquier otro en tu computadora, y luego puedes ejecutarlo en cualquier momento, independientemente de si tienes Internet o no.
El software del servidor es justo lo que se encuentra en el servidor y que es necesario para garantizar el funcionamiento de la parte interna del producto digital. Los tipos de servidores y los tipos de software de servidor son un tema aparte.
Y finalmente, cuando se habla de tipos de desarrollo y opciones de aplicación de esfuerzos, también hay que hablar de desarrollo de encargo y desarrollo de productos:
- El desarrollo personalizado es el desarrollo de un sitio web, una aplicación o un sistema crm personalizado según los deseos del cliente.
- El desarrollo de productos es el desarrollo de software «masivo».
En términos generales, si diseñas sitios web para tiendas, estaciones de servicio y restaurantes, se trata de desarrollo personalizado. Si trabajas en la empresa Microsoft, se trata de desarrollo de productos.
¿Qué es mejor y a qué aspirar? En principio, es un asunto personal de cada uno, y en todas partes tiene sus ventajas y desventajas. Para empezar, hay que dominar la profesión de programador a un nivel adecuado.
¿Dónde Estudiar para ser Desarrollador?
Y ahora la pregunta que seguro se le ha ocurrido a muchos lectores: ¿dónde obtener la profesión de desarrollador para afrontar con éxito todas las tareas que le esperan al desarrollador? ¿Es obligatorio terminar la universidad o son suficientes los cursos?
Digamos: una buena educación básica hasta ahora no ha molestado a nadie. Para la carrera de programador es preferible una formación técnica superior.
Si no tienes ni tiempo, ni dinero, ni ganas de dedicar cinco años a estudiar, y ya has definido alguna dirección de desarrollo limitada a la que te gustaría dedicarte, te pueden bastar cursos en la dirección elegida.
Los conocimientos que se imparten en los cursos de corta duración, por supuesto, no son tan profundos como en la universidad. Sin embargo, sincerándonos, ¿a quién de nosotros nos fue útil absolutamente todo lo que aprendimos en cinco largos años? De una forma u otra, el diploma dejó de ser un requisito obligatorio para trabajar como programador, y la posibilidad de dominar la profesión en cursos en un tiempo relativamente corto abrió las puertas de oportunidades para muchos de los que sueñan con un gran salario.
Y, finalmente, puedes encontrar muchos ejemplos de personas que comenzaron a aprender programación por sí mismas, probaron cada paso aprendido en la práctica, corrigieron de inmediato los errores cometidos y después de un tiempo llegaron a emplearse en una empresa de tecnologías de la información con un portafolio listo y experiencia acumulada, aunque todavía no sea muy grande, pero sí aplicable en la práctica.
¿Qué opción es mejor? Para empezar, digamos que el trabajo independiente es la base de cualquier opción de desarrollo en el ámbito de las tecnologías de la información, independientemente de que vayas a estudiar completamente por tu cuenta, en la universidad o en cursos. Por cierto, vale la pena recordar que la universidad brinda educación básica y un enfoque sistemático para la obtención de conocimientos, pero de ninguna manera un paquete listo de conocimientos y habilidades para el trabajo. Simplemente porque en cada empresa y en cada proyecto siempre hay matices propios, que ningún centro educativo del mundo puede tener en cuenta por completo físicamente.
¿Qué Sigue?
A continuación, crecerás (o no) en el ámbito profesional. Se distinguen tres niveles de profesionalismo del desarrollador:
La diferencia entre Junior, Middle y Senior no es solo en el conjunto de conocimientos y habilidades. Senior se diferencia de todos los demás por un tipo especial de pensamiento y una visión especial de la tarea, que muchos no pueden alcanzar a lo largo de toda su carrera en el sector de las tecnologías de la información.
Se trata de ajustes tan sutiles que difícilmente se pueden describir con palabras, y mucho menos brevemente.
De una forma u otra, no todos lograrán comprender una profesión tan, francamente, difícil como programador o desarrollador de software, y más aún ascender al nivel Senior. Quienes saben abordar sistemáticamente la obtención de conocimientos y organizar de forma independiente su proceso de aprendizaje tienen más posibilidades.
Les deseamos éxito en todos sus emprendimientos. Los esperamos en todos nuestros cursos y programas que les «atraigan», y les proponemos responder este artículo contándonos alguna experiencia o reflexión del artículo.