Serie: Convertirse en Desarrollador
Tags: spanish, javascript, programming, beginners
Published: 2021-11-04 17:54:04

_Esta serie originalmente iba a estar publicada en Medium y aún están disponibles los primeros capítulos en una publicación [DevEnEspañol](https://medium.com/devenespañol)_

Crédito a [@patmcmanaman](https://unsplash.com/@patmcmanaman) en unsplash por la foto de portada

**Parte de la serie: Convertirse en Desarrollador**

Capítulo 1: Clases en JavaScript (Classes)

Capítulo 2: Estructuras de datos: Stacks y Queues (pronto…)

Capítulo 3:Estructuras de datos Linked lists (pronto…)

Capítulo 4: Árboles binarios (pronto…)

Capítulo 5: Algoritmos de búsqueda y ordenamiento (pronto…)

…


# Motivación

Esta serie está dedicada a mis presentes y futuros alumnos (y a todos los alumnos a los que les pueda servir).

Durante el tiempo que llevo aprendiendo y enseñando programación, aprendiendo alrededor de 5 años y enseñando 1 año y poco más, que no ha sido tanto, me he dado cuenta de que la barrera de entrada para aquellos que no estudiamos ciencias de la computación (CS en inglés) es siempre alta. Sea esto por un diseño a propósito o simplemente por la naturaleza compleja de los tópicos que integran el mundo de las ciencias computacionales, es claro que donde es fácil empezar no es tan fácil adentrarse en ciertos temas.

Con esto no quiero decir que el contenido disponible sea poco, al contrario, es abrumadora la cantidad de respuestas en Stack Overflow, los posts, los tweets y demás recursos en línea dirigidos a estos temas, sin tomar en cuenta su calidad (la calidad varía mucho y es difícil determinarla dentro de un contenido sin tener conocimiento previo, pero existe muchísimo contenido de excelente calidad), sin embargo, encuentro tres desventajas significativas para el desarrollador latinoamericano que inicia:


1. Prácticamente todo el contenido está en inglés, y el contenido en español es, muchas veces, una simple traducción no contextualizada, dejando espacio para brechas del lenguaje, aplicación y semántica. Esto crea preguntas que vale la pena plantearse: ¿Se deberían traducir directa y simplemente todos los términos? Con esta línea de pensamiento me no puedo evitar pensar en el articulo de Wikipedia sobre la Cola (estructura de datos), que en comparación con su contraparte en inglés, el artículo de Queue, el primero (en español) termina siendo más completo, pero eso es solo una excepción y no la regla. Y de ninguna manera lo abordo como criticismo, sino, como una observación sobre el contenido disponible. Quizá está desactualizado en términos de lenguaje sobre todo. 

2. Es difícil encontrar analogías gráficas sin pasar horas en plataformas de video y diferentes cursos, curando el contenido encontrado para obtener analogías más amables con los principiantes, y de nuevo todo en inglés.
Una vez que uno empieza a recorrer algún tema complejo las ramificaciones son extensas. Un término se compone o explica con otros términos complejos. Esto vuelve a la logística de empezar un tema como algo difícil por sí mismo, más allá de la dificultad propia técnica del tema.

3. Teniendo claras estas desventajas, nos damos cuenta que no representan barreras que no permitan el aprendizaje. Muchos simplemente nos sobreponemos a esto, pero esta serie tiene la intención de eliminar en la medida de lo posible esas brechas. Entiendo que esto plantea un desafío con una promesa muy alta, pero para cumplir con este objetivo las explicaciones en este sentido serán de lo más diversas, alegóricas incluso. La intención final es la comprensión objetiva de cada tema tocado, no tanto la calidad técnica (de la cual hay suficiente contenido tanto en inglés como en español) sino conceptual. Para esto, el uso de analogías tanto visuales (por medio de ilustraciones, animaciones, gifs, etc) como textuales será extenso.


Es importante notar que las explicaciones están ligadas a modelos mentales de como yo veo que los conceptos funcionan y se entrelazan entre ellos. No podría (ni lo haré) llamarme un experto en ciencias de la computación o en lenguajes de programación, pero soy un desarrollador con algunos años de experiencia, un senior developer de una startup, y consulto para otras empresas, sobre todo en USA. 

Soy tan solo entusiasta que intenta facilitar y acompañar a sus alumnos con contenido escrito que a mi me hubiera ayudado durante mi proceso de aprendizaje. Aún no estoy seguro sobre si esta serie funcionará por sí misma o como material de apoyo / acompañamiento para algún otro curso.

# Metodología

Con la intención de mantener un trabajo secuencial y comprehensivo he decidido hacer una serie, y en cada capítulo o parte de la serie pretendo vincular o citar el trabajo del cual he tomado inspiración. Además de capitular y separar en partes cada artículo, considero que la manera más natural de vincular cada parte con el todo es con la siguiente estructura:

**Concepto:**
- **Glosario** (de términos vinculado en su caso a su capítulo correspondiente).
- **Contexto histórico** (de dónde viene).
- **Contexto funcional **(para qué se usa).
- **Explicación** (con ejemplos, analogías, gráficos, código en donde tenga sentido incluirlo entrelineado, etc) 
- **Implementación** (código escrito en JavaScript y TypeScript en donde se vean claramente los conceptos y un ejemplo práctico donde aplique)


En todos los casos la cobertura del tema será lo más importante, las vinculaciones con contenido adicional donde sea preciso serán contemplados, sin embargo, la intención no es que esta serie y sus capítulos funcionen meramente como un índice de recursos adicionales. Es decir que la practicidad en ocasiones será sacrificada para dar paso a una mayor cobertura de un tema.


# Alcance
Si bien esta serie tiene el objetivo de ser muy completa y de funcionar no tanto como un acordeón (apuntes) sino como una guía de estudio rica y completa, con el fin de tratar temas complejos de manera amable y natural. No está pensada como un material de estudio avanzado, sino como una puerta de entrada. En todo momento se sugiere a quien la lee que se adentre mucho más en los conceptos aquí tratados, que se acerque a las fuentes citadas y que expanda sus horizontes en el fascinante (y a veces atemorizante, hay que reconocer) mundo de la Tecnología.

Respecto del lenguaje (español-inglés), haré mi mejor esfuerzo por explicar y vincular correctamente los términos, sin embargo, la idea detrás de esta serie es la de funcionar como un puente, como un intermedio, para aquel alumno que batalla un poco con el idioma rey de la tecnología, el inglés, y que además aprovecha explicaciones visuales y analogías. En todo momento las fuentes originales son recomendadas sobre este material, todas ellas o casi todas en inglés. 

Hago hincapié en consumir contenido en inglés simplemente porque ofrece un abanico más grande de posibilidades a aquellos que lo dominan, al menos en un nivel técnico. Es por esto que habrá mucha mescolanza de términos en inglés, sin embargo trataré de hacer los apuntes necesarios para reducir la fricción. 

El código siempre estará hecho en inglés, tanto para nombres de variables como para métodos, en ninguna medida se trata de complicar el aprendizaje, sino que es necesario que el desarrollador exitoso del día de hoy lea y ejecute código en inglés con naturalidad.

Para ir generando las diferentes partes de la serie no estoy siguiendo una estructura o hilamiento secuencial, bueno sí y no, la estoy empezando en el módulo de javascript que coincide con el master en coding, en el cual doy clases, sin embargo no empieza desde el principio de JS porque la idea es ir de Clases en JS hacia adelante hasta cubrir el temario y luego regresar a tocar algunos temas puntuales y de interés como tal vez seguridad o historia del lenguaje, como apéndices de la serie. Como sea este es el punto de partida, índice y servirá como repositorio de ideas que estén relacionadas con la serie en mayor y menor medida.

Los artículos los voy generando como un trabajo en progreso en donde voy añadiendo mis notas en forma narrativa, después pretendo agregar más y más analogías, ilustraciones, animaciones etc hasta volverlos un apunte o una referencia lo más completa posible, trataré de marcar los artículos que yo considere satisfactoriamente terminados con algún tipo de identificador, estoy trabajando sobre la estructura y la metodología misma de la publicación y ordenación.

Mi intención no es nada más traducir material que existe y que es posible visitar sino tratar de añadir mis propias explicaciones, verter mi mente y mis modelos mentales en esta serie, puedo estar equivocado para cuyo caso con mucho gusto revisaré y redactaré aquellas partes que no sean correctas.

# Límites

Esta nota podría ser una nota personal en la que me recuerdo que a la intención es ser lo más completo y no lo más práctico. Que cada término nuevo que aparezca tendrá una más o menos completa descripción, al menos lo suficiente para poder continuar con el propio artículo y una descripción más detallada en la forma de los recursos externos o su propio capítulo.

A pesar del nombre de la serie, no se trata de que esta serie convierta a un individuo en desarrollador por sí misma, ser desarrollador implica horas de vuelo y esas están siempre en los simuladores, es decir proyectos personales o ejercicios para mejorar la destreza de programación como en los ejercicios reales, es decir proyectos para alguien, pagados o no, open source o de cualquier índole.

La otra obvia para mí pero no está de más ponerla aquí es que si alguien encontrara este trabajo y lo considerar útil para su desarrollo, está a su disposición, también niego saberlo todo o siquiera un poco, acepto todo tipo de criticismo o consejo en mi twitter o aquí mismo como un comentario.