Original article: How to Learn Programming – The Guide I Wish I Had When I Started Learning to Code

Solo el pensamiento de aprender a programar puede ser muy intimidante. La palabra programar es misteriosa por definición. Eso implica una forma técnica comunicación que las computadoras, y no los humanos, deben entender.

Una forma en que muchas personas empiezan a programar es eligiendo un lenguaje de programación popular y saltando de cabeza sin dirección. Esto podría ser haciendo un curso de programación en línea, un proyecto de tutorial, o una compra aleatoria de un libro sobre un tema en específico.

Rara vez los posibles desarrolladores comienzan con una ruta de aprendizaje -una vista panorámica del mundo de la codificación que describe un conjunto de conceptos, lenguajes y herramientas de programación relevantes que casi el 100% de los desarrolladores usan todos los días.

En este artículo, propongo una de esas rutas de aprendizaje. Hago esto describiendo 14 pasos, cada uno de los cuales analiza un concepto, lenguaje o herramienta esencial, que los desarrolladores profesionales usan para escribir código, colaborar y crear proyectos profesionales.

Elegí meticulosamente estos 14 pasos en función de mi propio viaje personal aprendiendo a programar, que abarca casi 20 años.

Parte de la razón por la que me tomó tanto tiempo sentirme cómodo como desarrollador es que aprendía sobre temas específicos sin un contexto más amplio del mundo de la programación.

Cada uno de los pasos de este artículo analiza un "esenciales  de programación", algo que creo que es fundamental para al menos saber que existe al comienzo de tu viaje de aprendizaje de programación.

Una nota final antes de enumerar los pasos en la hoja de ruta: por supuesto, leer este artículo no te convertirá en unprogramador o programadora experto(a).

No está destinado a ser así. El propósito de este artículo es informarte que cada uno de estos temas existe y, con suerte, darte una idea básica de cómo funciona cada uno para que puedas desarrollarlos de manera inteligente en el futuro.

14 Pasos en la ruta de aprendizaje  para Desarrolladores principiantes

  1. Familiarízate con Computer Architecture y Básicos de  Base de Datos
  2. Aprende como trabajan los lenguajes de Programación
  3. Comprende como funciona el Internet
  4. Practica básica de la Línea de Comandos
  5. Incrementa tus habilidades en el Editor de Texto con VIM
  6. Aprende algo de  HTML
  7. Abordar algo de CSS
  8. Empieza a Programar con JavaScript
  9. Continua Programando con Python
  10. Amplia  tu conocimiento con Java
  11. Rastrea tu Código usando Git
  12. Guarda Datos usando Base de Datos  y SQL
  13. Leer sobre Web Frameworks y MVC
  14. Jugando con Administradores de Paquetes

Sin más preámbulo, empecemos por lo primero.

1) Familiarízate con Arquitectura Computacional y Básicos de Datos

Una de las cosas más maravillosas de los lenguajes de programación modernos es que nos permiten crear aplicaciones sofisticadas sin preocuparnos sobre los detalles medulares del hardware detrás de las escenas (en su mayor parte).

Esto es llamado Abstracción – La habilidad de trabajar con herramientas de niveles altos (en este caso los lenguajes de programación) que simplifican y disminuyen el ámbito requerido de nuestra comprensión y habilidades.

Sin embargo, eso no significa que no sea de utilidad saber los básicos de la estructura que tu código está ejecutando. Y al final, estar consciente de algunas cosas que te ayudan a navegar en tus conversaciones en el lugar de trabajo sobre el elevado uso de la CPU y memoria.

Así que aquí hay un mínimo de arquitectura computacional para que empieces.

La parte más importante de tu computadora son los microchips (también conocidos como circuitos integrados).

Los microchips dependen para funcionar de un componente eléctrico llamado transistor. Los transistores son pequeños interruptores eléctricos que están apagados (0) o encendidos (1) en un momento dado. Un solo microchip puede contener millones o miles de millones de diminutos transistores incrustados en él.

Las computadoras más modernas tienen un procesador llamado Unidad Central de Procesamiento (CPU, Central Processing Unit ). Puedes comparar a la computadora con un cerebro. Maneja la mayoría de las tareas lógicas y de procesamiento de números que realiza la computadora.

Cada CPU tiene algo llamado conjunto de instrucciones, que es una colección de comandos binarios (ceros y unos) que la CPU entiende. Afortunadamente, ¡No es realmente necesario preocuparnos por esto como desarrolladores de software! Ese es el poder de la abstracción.

Si la CPU es el centro lógico del cerebro, es útil tener una memoria para guardar la información temporalmente o a largo plazo.

Las computadoras tienen Random Access Memory (RAM) como "memoria de trabajo" (o memoria de corto plazo) para guardar información que se usa de forma activa por programas abiertos.

La RAM se compone de una colección de direcciones de memoria, que se pueden utilizar para almacenar bits de datos. En lenguajes más antiguos como C, los programadores tienen acceso para trabajar directamente con direcciones de memoria usando una característica llamada punteros, pero esto es raro en lenguajes más modernos.

Finalmente, hablaremos de un componente con el que seguramente está familiarizado: el disco duro. En nuestra analogía del cerebro, esto representa la memoria a largo plazo. Un disco duro es un dispositivo interno o externo que almacena datos que deberían persistir incluso después de apagar la computadora.

Antes de pasar a más detalles sobre los lenguajes de programación, dediquemos un segundo a hablar sobre los datos. Pero, ¿qué queremos decir exactamente con la palabra datos?

En un nivel alto, pensamos en cosas como documentos de texto, imágenes, videos, correos electrónicos, archivos y carpetas. Todas estas son estructuras de datos de alto nivel que creamos y guardamos en nuestras computadoras todos los días.

Pero debajo de la cubierta, un chip de computadora (como un chip de CPU o RAM) no tiene idea de qué es una "imágen" o un "video".

Desde la perspectiva de un chip, todas estas estructuras se almacenan como largas secuencias de unos y ceros. Estos unos y ceros se llaman bits.

Los bits se almacenan comúnmente en un conjunto de ocho a la vez, conocido como byte. Un byte es simplemente una secuencia de ocho bits, como 00000001, 01100110, o 00001111. Representar la información de esta manera se llama representación binaria.

2)Aprende cómo funcionan los Lenguajes de Programación

En la sección anterior, mencionamos que la mayoría de las computadoras dependen de una CPU, y una CPU puede comprender un conjunto específico de instrucciones en forma de unos y ceros.

Por lo tanto, teóricamente podríamos escribir código que le diga a la CPU qué hacer al unir largas secuencias de unos y ceros en una forma que la CPU entienda. Las instrucciones escritas en forma binaria como esta se llaman código de máquina.

Suena horrible trabajar con él, ¿no? Bueno, probablemente lo sea, pero no lo sabría ya que principalmente uso lenguajes de programación de alto nivel como JavaScript, Python y Java.

Un lenguaje de programación de alto nivel proporciona un conjunto de palabras clave, declaraciones, y reglas de sintaxis legibles por humanos que son mucho más simples para que las personas aprendan, depuren y trabajen.

Los lenguajes de programación proporcionan un medio para cerrar la brecha entre la forma en que nuestros cerebros humanos entienden el mundo y la forma en que los cerebros de las computadoras (CPU) entienden el mundo.

En última instancia, el código que escribimos debe traducirse a las instrucciones binarias (código de máquina) que comprende la CPU.

Según el lenguaje que elijas, decimos que su código se compila o se interpreta en un código de máquina capaz de ser ejecutado por su CPU. La mayoría de los lenguajes de programación incluyen un programa llamado compilador o intérprete que realiza este paso de traducción.

Solo para dar algunos ejemplos: JavaScript y Python son lenguajes interpretados, mientras que Java es un lenguaje compilado. El hecho de que un lenguaje sea compilado o interpretado (o alguna combinación de ambos) tiene implicaciones para la conveniencia del desarrollador, el manejo de errores, el rendimiento y otras áreas, pero no entraremos en esos detalles aquí.

3)Comprende cómo funciona el Internet

Cualquiera que sea el tipo de programación que te gustaría hacer, te encontrarás con situaciones en las que será útil saber cómo interactúan las computadoras entre sí. Esto suele ocurrir a través de Internet.

Internet no es más que una colección global de computadoras conectadas. En otras palabras, es una red global. Cada computadora en la red acuerda un conjunto de reglas que les permiten comunicarse entre sí. Para una computadora, "hablar" significa transferir datos.

Como discutimos en la sección anterior, todos los tipos de datos (páginas web, imágenes, videos, correos electrónicos, etc.) se pueden representar como unos y ceros.

Por lo tanto, podemos pensar en el Internet como un conjunto muy grande de computadoras que pueden transferir unos y ceros entre sí, de una manera que preserva el significado de esos datos. Internet no es más que un medio de conversación digital.

Si Internet es solo un gran escenario de conversación, definamos a los participantes de la conversación.

Primero, una analogía: la mayoría de las conversaciones humanas requieren al menos dos participantes. En la mayoría de los casos, una persona inicia la conversación y la otra responde, asumiendo que ambos están presentes y disponibles.

En la jerga de Internet, la computadora que inicia la conversación se llama cliente. La computadora que responde o contesta se llama servidor.

Por ejemplo, supongamos que abres un navegador web y accede a "www.google.com". En este escenario, tu navegador web es el cliente. Por extensión, también puedes pensar en la computadora en la que está trabajando como el cliente.

En un sentido más abstracto, TÚ eres el cliente porque es quien inicia la conversación. Al escribir "www.google.com" en la barra de búsqueda y hacer clic en <ENTER>, tu navegador solicita iniciar una conversación con una de las computadoras de Google.

La computadora de Google se llama el servidor. Responde enviando los datos necesarios para mostrar la página web de Google en tu navegador. ¡Y voilá! La página web de Google aparece frente a sus ojos. Todas las transferencias de datos por Internet utilizan este tipo de relación cliente/servidor.

4) Practica básica de la Línea de Comandos

La Línea de Comandos puede resultar intimidante a primera vista. A menudo aparece en las películas como una pantalla negra críptica con texto, números y símbolos incomprensibles que se desplazan. Por lo general, se asocia con un pirata informático malvado o un compañero genio de la tecnología.

La verdad es que no hace falta ser un genio para usar o entender la línea de comandos. De hecho, nos permite realizar muchas de las mismas tareas con las que nos sentimos cómodos mediante un ratón de apuntar y hacer clic.

La principal diferencia es que acepta principalmente entradas a través del teclado, lo que puede acelerar las entradas significativamente una vez que lo domines.

Puedes utilizar la línea de comandos para navegar por las carpetas, enumerar el contenido de una carpeta, crear nuevas carpetas, copiar y mover archivos, eliminar archivos, ejecutar programas y mucho más. La ventana en la que puedes escribir comandos en la línea de comandos se llama terminal.

Veamos un breve tutorial de comandos básicos de navegación que te dará una idea de cómo trabajar en la línea de comandos.

Una vez que abres tu terminal, una primera pregunta típica es "¿Dónde estoy?". Para averiguarlo podemos usar el comando  pwd  (que significa, "print working directory" o en español sería "Imprimir directorio de trabajo"). Muestra nuestra ubicación actual en el sistema de archivos que nos dice en qué carpeta nos encontramos actualmente.

Ahora te recomiendo intentarlo tú:

Como usar la Terminal de Línea de Comandos

Si estás en una Mac, abre la aplicación de la Terminal, que es esencialmente una terminal de línea de comandos de Unix.

Si está ejecutando un sistema operativo sin una GUI (interfaz gráfica de usuario), como Linux o Unix, debería estar en la línea de comandos de forma predeterminada cuando inicie la computadora. Si su sabor de Linux o Unix tiene una GUI, deberá abrir la terminal manualmente.

En el prompt, escribe pwd y presiona <ENTER>. La línea de comandos imprimirá la ruta a la carpeta en la que se encuentra actualmente.

De forma predeterminada, la carpeta activa al abrir la línea de comandos es el directorio de inicio del usuario que ha iniciado sesión. Esto se puede personalizar en caso de que desees la comodidad de comenzar en una ubicación diferente.

Para mayor comodidad, se puede hacer referencia al directorio de inicio utilizando el carácter de tilde ~. Usaremos esto en algunos ejemplos en el futuro.

Ahora que sabemos en cuál carpeta estamos, podemos usar el comando  ls  para enlistar el contenido del directorio actual. El comando ls viene de la palabra "List".

Escribe ls y presiona<ENTER>. Los contenidos (archivos y sub carpetas) que residen en el directorio actual se imprimen en la pantalla.

Vuelve a ejecutar los comandos anteriores así ls -al y presiona enter <ENTER>. Ahora obtendremos más detalles sobre el contenido del directorio, incluidos los tamaños de los archivos, las fechas de modificación y los permisos de los archivos.

El guion en el comando anterior nos permite establecer ciertos etiquetas que modifican el comportamiento del comando. En este caso, agregamos el indicador -a que enumerará todos los contenidos del directorio (incluidos los archivos ocultos), así como el indicador -l que muestra los detalles adicionales del archivo.

A continuación, podemos crear una nueva carpeta con el comando mkdir, que significa "Crear directorio". A continuación creamos una nueva carpeta llamada "testdir".

Escribe mkdir testdir y presiona<ENTER>. Después escribe ls  y presiona <ENTER>. Deberías ver tu nuevo directorio en la lista.

Para crear varios directorios anidados a la vez, utiliza la etiqueta -p f para crear una cadena completa de directorios  así: mkdir -p directory1/directory2/directory3

La línea de comandos no es tan útil si solo podemos permanecer en una ubicación, así que aprendamos cómo navegar a través de diferentes directorios en el sistema de archivos. Podemos hacer esto mediante el comando cd, que significa "Cambiar directorio".

Primero, escribe  cd testdir y presiona <ENTER>.  Después escribe  pwd y presiona <ENTER>. Ten en cuenta que el resultado ahora muestra que estamos dentro del directorio "testdir" especificado en el comando cd. ¡Lo buscamos!

Escribe cd .. y presiona <ENTER>. Los dos puntos .. le indica a la Línea de Comandos para navegar hacia atrás al directorio principal.

Después escribe pwd  y presiona <ENTER>.  Nota como el resultado ahora muestra que está de vuelta en el directorio original. ¡Navegamos atrás!

A continuación, aprenderemos como crear un nuevo archivo vacío en el directorio actual.

Escribe touch newfile1.txt y presiona<ENTER>. Puedes usar el comando ls para ver que el nuevo archivo se creó en el directorio actual.

Ahora copiaremos ese archivo de una carpeta a otra usando el comando cp.

Escribe cp newfile1.txt testdir y presiona <ENTER>. Ahora usa los comandos ls y  ls testdir para ver que el nuevo archivo aún existe en el directorio actual y se copió en el directorio "testdir".

También podemos mover archivos en lugar de copiarlos usando el comando mv .

Escribe touch newfile2.txt y presiona<ENTER> para crear un nuevo archivo.
A continuación, escribe mv newfile2.txt testdir y presiona <ENTER> para mover el archivo a la carpeta "testdir" .

Usa los comandos ls y ls testdir  para confirmar que el archivo se ha movido a la carpeta "testdir" (ya no debería aparecer en la ubicación original en la que lo creó, ya que se movió, no se copió).

El comando mv también lo puedes usar para renombrar archivos.

Para hacer eso, escribe touch newfile3.txt y presionar <ENTER> para crear un nuevo archivo. Después escribe  mv newfile3.txt cheese.txt  y presiona <ENTER> para actualizar el nombre del archivo. Usa el comando ls para confirmar que el archivo fue renombrado.

Finalmente, podemos eliminar archivos y carpetas usando el comando rm .

Escribe rm cheese.txt y presiona<ENTER> para remover el archivo. Usa el comando ls  para confirmar que el archivo fue removido.

Escribe rm -rf testdir y presiona <ENTER> para remover el directorio "testdir" y sus contenidos. Usa ls  para confirmar que el directorio fue removido.

Toma en cuenta que debemos usar las etiquetas  -rf al eliminar directorios. Eso fuerza la eliminación de la carpeta y todo su contenido.

5.Incrementa tus Habilidades en el Editor de Texto con Vim

En este punto, hemos cubierto los conceptos básicos de la línea de comandos y hemos visto algunos ejemplos de cómo podemos trabajar con archivos sin un ratón.

Aunque ahora sabemos cómo crear, copiar, mover, renombrar y eliminar archivos desde la línea de comandos, no hemos visto cómo editamos el contenido de los archivos de texto en la terminal.

Trabajar con archivos de texto en la terminal es importante porque el código de computadora no es más que texto guardado en un conjunto organizado de archivos.

Seguro que podríamos usar un editor de texto elegante como Microsoft Word (o probablemente editores de código especializados como Sublime o Atom) para escribir y editar nuestro código, pero esto no es obligatorio. La terminal suele ser el lugar más conveniente para escribir y editar código, ya que normalmente  lo tenemos abierto para ejecutar comandos.

Hay varios editores de texto excelentes creados específicamente para este propósito, y recomiendo aprender los conceptos básicos de uno llamado Vim.

Vim es uno de los editores de texto más antiguos y es una joya probada en el tiempo. Vim viene de "VI iMproved" que significa  "VI mejorado", ya que es el sucesor de una herramienta llamada Vi.

Como se mencionó anteriormente, Vim es un editor de texto que se creó para ejecutarse directamente en la terminal, por lo que no necesitamos abrir una ventana separada para trabajar o usar un ratón. Vim cuenta con un conjunto de comandos y modos que nos permiten crear y editar contenido de texto de manera conveniente usando solo el teclado.

Vim tiene una pequeña curva de aprendizaje, pero con un poco de práctica, las habilidades que aprendas te darán dividendos a lo largo de su carrera de tu carrera en programación.

Vim está instalado de forma predeterminada en muchos sistemas operativos. Para verificar si está instalado en tu computadora, abre la Línea de comandos y escribe  vim -v.

Si Vim se abre en tu terminal y muestra la versión, ¡está listo! De lo contrario, deberás instalarlo en tu sistema. (Ten en cuenta que puedes salir de Vim escribiendo :!q y presionando ). Para obtener más información sobre la instalación de Vim, consulta https://vim.org.

En mi opinión, la forma más rápida y fácil de aprender a usar Vim es usar su tutorial integrado, el VimTutor. Para ejecutarlo, asegúrate de que Vim esté instalado en tu sistema, abre la Línea de Comandos, escribe vimtutor , y presiona <ENTER> .

Es un tutorial tan bueno que no hay motivo para que pierda el tiempo tratando de explicarlo aquí. Así que te recomiendo revisar el VimTutor, ¡ahora! Nos vemos en la siguiente sección.

Si aún tienes energía después de haber completado VimTutor, consulta estos 7 comandos de Vim que mejorarán drásticamente tu productividad a medida que comiences a usar Vim.

6) Aprende algo de HTML

Puedes pensar en HTML, abreviatura de HyperText Markup Language, como los huesos de una página web. Determina la estructura de la página especificando los elementos que deben mostrarse y el orden en que deben mostrarse.

Cada página web que has visitado alguna vez en tu navegador tiene algo de HTML asociado. Cuando visitas una página web, el servidor web que aloja la página web envía algo de HTML a tu navegador, y tu navegador luego lo lee y lo muestra para ti.

La mayoría de las páginas web contienen un conjunto de contenido bastante estandarizado, que incluye un título, contenido de texto, enlaces a imágenes, enlaces de navegación, encabezados y pies de página, y más. Toda esta información se almacena como HTML que define la estructura de la página.

Una cosa a tener en cuenta es que HTML no es técnicamente un lenguaje de programación, aunque a menudo se le conoce como "código HTML".

Como veremos más adelante, otros lenguajes de programación nos permiten escribir código que hace cosas, como ejecutar un conjunto de instrucciones en secuencia. HTML no hace nada. No ejecutamos ni ejecutamos HTML. HTML simplemente se encuentra allí en un archivo y espera a ser enviado a un navegador web que se lo mostrará al usuario final.

De hecho, HTML es básicamente solo datos. Son datos que definen cómo debe verse una página web, nada más.

Entonces, ¿cómo se escribe HTML? HTML utiliza un conjunto estándar de etiquetas (básicamente solo etiquetas) para identificar los elementos disponibles que componen una página web. Cada etiqueta se define mediante corchetes angulares.

Por ejemplo, la etiqueta de título se define así <title>Título de mi Página </title> y la etiqueta de  párrafo se define así <p>Un montón de contenido de texto aleatorio.</p>.

Cada elemento HTML se compone de una etiqueta inicial y una etiqueta final. La etiqueta de inicio es solo la etiqueta de la etiqueta entre paréntesis angulares, como esta

<tagname>

Esto abre la nueva etiqueta HTML. La etiqueta final es esencialmente la misma, pero usa una barra diagonal después del primer paréntesis angular, para marcarlo como una etiqueta final:

</tagname>

Cualquier texto entre las dos etiquetas es el contenido real que mostrará la página.

Veamos un par de las etiquetas más comunes en uso. La primera es la etiqueta <html> .  Esto define el inicio de una página HTML. Una correspondiente etiqueta </html>  (ten en cuenta la barra inclinada) define el final de la página HTML. Cualquier contenido entre estas etiquetas será parte de la página.

La segunda es la etiqueta <head> .  Esto define información adicional que el navegador utilizará para comprender la página. La mayor parte del contenido de esta etiqueta no se muestra al usuario. La etiqueta correspondiente  </head> tag define el final de la sección HEAD.

Previamente, vimos la etiqueta <title> . t define el título de la página web, que el navegador mostrará en la pestaña del navegador. Esta etiqueta debe colocarse dentro de la sección <head>...</head> .

La etiqueta siguiente es <body>.  Todo el contenido dentro de esta etiqueta constituye el contenido principal de la página web. Poner estas cuatro etiquetas juntas se parece a esto:

<html>
    
    <head>
        <title>Título de mi Página</title>
    </head>
        
    <body>
        <p>Un montón de contenido de texto aleatorio</p>
    </body>

</html>

El fragmento HTML simple anterior representa una página web simple con un título y un solo párrafo como contenido del cuerpo.

Este ejemplo trae a colación un punto que no mencionamos en la última sección. Las etiquetas HTML se pueden anidar unas dentro de otras. Esto solo significa que las etiquetas HTML se pueden colocar dentro de otras etiquetas HTML.

HTML proporciona muchas otras etiquetas para brindar un rico conjunto de contenido a los usuarios de la web. No los cubriremos en detalle aquí, pero a continuación hay una breve lista de referencia:

  • <p>: Un párrafo de texto que comienza en una nueva línea.A
  • <h1>: Un encabezado de página generalmente utilizado para títulos de página.
  • <h2>:Un encabezado de sección generalmente utilizado para títulos de sección.
  • <hx>: Donde x es un número entre 3 y 6, para encabezados más pequeños.
  • <img>: Una imagen.
  • <a>: Un enlace.
  • <form>: Un formulario que contiene campos o entradas para que un usuario complete y envíe.
  • <input>: Un campo de entrada para que los usuarios ingresen información, generalmente dentro de un formulario.
  • <div>: Una división de contenido, utilizada para agrupar varios otros elementos con fines de espaciado.
  • <span>: Otro elemento de agrupación, pero que se usa para envolver frases de texto dentro de otro elemento, generalmente para aplicar un formato específico solo a una parte específica del contenido del texto.

7) Abordar algo de CSS

Una página web sin CSS (Cascading Style Sheets), u hojas de estilo en cascada, en español, es como un pastel sin glaseado. Un pastel sin glaseado cumple su propósito, ¡pero no parece apetitoso!

CSS nos permite asociar propiedades de estilo como color de fondo, tamaño de fuente, ancho, alto y más con nuestros elementos HTML.

Cada propiedad de estilo le dice al navegador que represente el efecto deseado en la pantalla. Al igual que HTML, CSS no es técnicamente un lenguaje de programación. No nos permite realizar acciones, simplemente nos permite agregar estilos al HTML básico.

Veamos cómo asociar estilos CSS con nuestros elementos HTML. Hay tres piezas en este rompecabezas:

El Selector de CSS: Se utiliza para identificar el elemento o elementos HTML a los que queremos que se aplique el estilo.

el nombre de la propiedad de CSS: El nombre de la propiedad de estilo específica que queremos agregar a los elementos HTML coincidentes.

El nombre de la propiedad de CSS: El valor de la propiedad de estilo que queremos aplicar.

Aquí hay un ejemplo de cómo estas piezas se unen para establecer el color y el tamaño de fuente de un párrafo:

p {
  color: red;
  font-size: 12px;
}

Comencemos por el principio, antes de las llaves. Aquí es donde va el selector de CSS. En este caso, es la letra p la que indica la etiqueta de HTML  <p> (párrafo) . Esto significa que los estilos dentro de las llaves se aplicarán a todas las etiquetas <p> en la página web.

Pasemos a lo que va dentro de las llaves: los estilos que queremos aplicar a los elementos de destino.

Aquí encontramos pares de propiedades y valores CSS, separados por dos puntos. La propiedad (en este caso "color" y "font-size") están en la izquierda. Los valores de estas propiedades (en este caso "red" "12px") están del lado derecho. Un punto y coma termina cada par propiedad/valor.

Probablemente puedas ver cómo funciona esto. Los fragmentos de código CSS anteriores le indican al navegador que use letras rojas de tamaño 12px para todo el texto colocado dentro de las etiquetas  <p> .

Entonces, ¿cómo sabe una página HTML que debe incluir estos estilos CSS? Ingresa la etiqueta de HTML <link> . Por lo general, los estilos CSS se crean en archivos separados (archivos .css) del HTML. Esto significa que necesitamos alguna forma de importarlos a nuestros archivos HTML para que el navegador sepa que los estilos existen.

El elemento <link> existe con este propósito. Incluimos los elementos <link> en la sección <head>  de los archivos que nos permiten especificar los archivos CSS externos para importar:

<head>

    <title>Título de mi Páginaga</title>

    <link rel="stylesheet" type="text/css" href="/home/style.css">

</head>

En este ejemplo, estamos importando los estilos CSS especificados por el atributo href, en este caso el archivo /home/style.css.

¡En las próximas 3 secciones, (finalmente) nos sumergiremos en algunos lenguajes de programación más técnicos!

Repasaremos una descripción general de JavaScript, Python y Java, así como algunos de los conceptos de codificación esenciales comunes a los 3 lenguajes. Compararemos y contrastaremos las características del lenguaje y el código de ejemplo para que pueda obtener una comprensión completa de los conceptos básicos de los tres.

8) Empezar a Programar con JavaScript

Comencemos respondiendo la siguiente pregunta: si podemos usar HTML para construir la estructura de una página web y CSS para que se vea bonita, ¿por qué necesitamos JavaScript?

La respuesta es que técnicamente no lo hacemos. Si estamos contentos con un sitio estático que se sienta allí y se ve bonito, estamos listos para usar solo HTML y CSS.

La palabra clave aquí es "estático". Sin embargo, si queremos agregar funciones dinámicas a nuestras páginas web, como cambiar el contenido e interacciones de usuario más complejas, necesitamos usar JavaScript.

¿Qué es JavaScript?

Entonces, ¿qué es exactamente JavaScript? JavaScript es un lenguaje de programación creado específicamente para sitios web e Internet. Como mencionamos en la sección 2, la mayoría de los lenguajes de programación se compilan o interpretan, y los programas generalmente se ejecutan de manera independiente.

JavaScript es algo único a este respecto, ya que fue diseñado para ejecutarse directamente dentro de los navegadores web. Nos permite escribir código que representa conjuntos de acciones que se ejecutarán en nuestras páginas web para hacer que nuestros sitios sean mucho más dinámicos.

Puedes escribir código JavaScript en archivos de texto nombrados con una extensión .js o dentro de la etiqueta <script> directamente en el HTML.

Durante muchos años, el código JavaScript estuvo principalmente relegado a ejecutarse dentro de los navegadores web. Pero el proyecto Node.js cambió este paradigma al crear un entorno de JavaScript independiente que podía ejecutarse en cualquier lugar.

En lugar de quedar atrapado en un navegador (es decir, del lado del cliente), Node.js se puede instalar localmente en cualquier computadora para permitir el desarrollo y la ejecución de código JavaScript. También puedes instalar Node en servidores web, lo que permite usar JavaScript como código de back-end para aplicaciones en lugar de simplemente como código de front-end del navegador web.

Ahora que hemos cubierto algunos antecedentes, profundicemos en algunos conceptos básicos del lenguaje JavaScript.

Variables y Asignación en JavaScript

Las variables posiblemente representan el concepto más fundamental en la programación. Una variable es simplemente un nombre o marcador de posición que se utiliza para hacer referencia a un valor particular.

La palabra variable implica que el valor almacenado puede cambiar a lo largo de la ejecución del programa.

Puedes usar variables para almacenar números, cadenas de caracteres de texto, listas y otras estructuras de datos de las que hablaremos más en un minuto.

Todos los lenguajes de programación usan variables, pero la sintaxis varía entre diferentes lenguajes.

Las variables son útiles ya que podemos hacer referencia a sus valores a lo largo de nuestro código. Esto nos permite verificar sus valores según sea necesario y realizar diferentes acciones dependiendo de cómo cambie el valor de la variable.

En JavaScript, declaramos variables usando la palabra reservada let , así: let x;.

Esto declara x como una variable que podemos usar en nuestro código. Ten en cuenta que agregamos un punto y coma al final de la línea. En JavaScript (y muchos otros lenguajes) se utilizan puntos y comas para especificar el final de cada instrucción de código.

Ahora que hemos creado la variable x, podemos asignarle un valor usando el signo igual, también llamado el operador de asignación: x = 10;

Aquí asignamos el número 10 a la variable llamada x. Ahora, cada vez que usemos x en nuestro código, se sustituirá el valor 10..

Tanto la declaración como la asignación de variables se pueden hacer en una línea de la siguiente manera:

let x = 10;

Tipos de Datos en JavaScript

En la última sección, almacenamos un valor entero (número entero) en la variable llamada x. También puede almacenar números decimales, o números de punto flotante como son conocidos. Por ejemplo, podríamos escribir: let x = 6.6;.

Los diferentes tipos de valores que podemos almacenar en las variables se denominan tipos de datos. Hasta ahora solo hemos visto tipos de datos numéricos (enteros y números de punto flotante), pero solo estamos arañando la superficie. También podemos almacenar datos de texto en variables..

En la terminología de programación, un fragmento de texto se denomina cadena o string. Podemos almacenar un valor de cadena en nuestra variable x rodeándolo con comillas simples o dobles:s:

let x = 'Hola!';

let y = "Hola Amigo!";

El siguiente tipo de datos que discutiremos es el booleano. Un booleano solo puede contener uno de dos valores, true or false – y deben estar todos en minúsculas. En JavaScript, verdadero y falso son dos palabras clave que se usan específicamente como valores para variables booleanas:

let x = true;

let y = false;

Nota que estos valores  true y false no aparecen entre comillas como lo hacen las cadenas. Si los encerramos entre comillas, los valores serían cadenas, no booleanos.
A menudo usamos booleanos para controlar el flujo de programas en sentencias condicionales (if/else) sobre las que aprenderemos a continuación.

Declaraciones de Control de flujo de programa en JavaScript

Ahora que comprendemos las variables y los tipos de datos básicos de JavaScript, echemos un vistazo a algunas cosas que podemos hacer con ellas..

Las variables no son tan útiles sin poder decirle a nuestro código que haga algo con ellas. Podemos hacer que nuestras variables hagan cosas usando declaraciones.

Las declaraciones son palabras clave especiales que nos permiten realizar alguna acción en nuestro código, a menudo en función del valor de una variable que hemos definido. Las declaraciones nos permiten definir el flujo lógico de nuestros programas, así como realizar muchas acciones útiles que dictarán cómo funcionan nuestros programas.

Declaraciones If / Else

La primera declaración que discutiremos es la declaración if. La declaración if nos permite realizar alguna acción solo cuando una condición deseada es verdadera. Así es como funciona:

let x = 10;

if ( x > 5 ) {
    console.log('X es MAYOR que 5!');
} else {
    console.log('X NO es MAYOR que 5!');
}

Definimos una variable llamada x y fijamos su valor en 10. Luego viene nuestra sentencia if .  Después de la palabra reservada if, tenemos un conjunto de paréntesis que contiene la condición a evaluar, en este caso, x > 5. Acabamos de definir x igual a 10, por lo que sabemos que esta condición es verdadera en este ejemplo.

Dado que la condición entre paréntesis es verdadera, el código entre las llaves se ejecutará y veremos la cadena "¡X es MAYOR que 5!" impreso en la pantalla. (No hemos discutido el significado de console.log(), así que por ahora imprime el valor entre paréntesis en la pantalla).

En el mismo ejemplo, también incluimos una declaración else . Esto nos permite ejecutar código específico en caso de que la condición sea false.

Bucles While

El siguiente tipo de declaración que discutiremos es el  ciclo while.  Los bucles nos permiten repetir un bloque de código tantas veces como queramos, sin tener que copiar y pegar el código una y otra vez.

Por ejemplo, supongamos que necesitamos imprimir una oración en la pantalla 5 veces. Podríamos hacerlo así:

console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');

Esto funciona bien para solo 5 mensajes, pero ¿qué pasa con 100 o 1000? Necesitamos una mejor manera de repetir fragmentos de código varias veces, y los bucles nos permiten hacer esto. En la terminología de codificación, la repetición de un fragmento de código varias veces se denomina iteración.

Este siguiente bucle while  continuará ejecutando el bloque de código dentro de él mientras la condición especificada permanezca  true  :

let x = 1;

while ( x <= 100 ) {
    
    console.log('Este es un mensaje muy importante!');
    
    x = x + 1;
    
}

En este ejemplo, we initialize x to the value of 1. Luego escribimos un bucle while. Similar a a una declaración if , agregue una condición entre paréntesis. En este caso la condición es x <= 100. Esta condición será true siempre que x sea menor o igual a 100.

A continuación especificamos el bloque de código a ejecutar entre llaves. Primero, imprimimos nuestro mensaje a la consola. Luego incrementamos x en 1.

En este punto, el búcle intenta volver a evaluar la condición para ver si todavía está true. La variable x ahora tiene un valor de 2 ya que se incrementó en la primera ejecución del ciclo. La condición sigue siendo true ya que 2 es menor que 100.

El código en el bucle se repite hasta que x se incrementa al valor de 101. En este punto, x es mayor que 100, por lo que la condición ahora es false, y el código en el bucle deja de ejecutarse.

La etiqueta   <script> de  HTML

Ahora que hemos introducido JavaScript, analicemos cómo agregar archivos de código JavaScript en una página HTML. Podemos hacer esto usando una etiqueta HTML que aún no hemos discutido: la etiqueta <script> .

Esto es similar al elemento <link> elemento que usamos para agregar archivos CSS a nuestro HTML, excepto que el elemento<script> específico para  JavaScript.

Digamos que guardamos uno de los ejemplos anteriores de JavaScript que discutimos en un archivo llamado customscript.js en la misma carpeta que nuestro archivo HTML. Podemos agregar este archivo JavaScript a nuestro HTML agregando la siguiente etiqueta HTML en dentro de la sección  <head>...</head> de nuestro HTML:

<script type="text/javascript" src="customscript.js"></script>

Esto cargará el código JavaScript del archivo, que se ejecutará cuando la página web se muestre en el navegador.

Una vez que sientas más confianza con con tus habilidades de JavaScript, puedes intentar construir algunos de estos divertidos proyectos para principiantes para practicar.

9)Continua Programando con Python

Ahora que has aprendido algo de JavaScript básico, será útil saltar a otro lenguaje de programación: Python

Muchos lenguajes de programación proporcionan un conjunto similar de funciones, incluidas variables, operadores aritméticos, declaraciones if/else, bucles y funciones.

Es útil ver cómo diferentes lenguajes de programación implementan funciones similares. Los conceptos suelen ser muy similares, pero la sintaxis (la forma en que se escribe el código) varía de un idioma a otro.

Qué es Python?

Primero cubriremos un poco de información básica sobre Python. Al igual que JavaScript, Python es un lenguaje de programación de alto nivel que prioriza la facilidad de desarrollo sobre la velocidad de ejecución.

En mi opinión, Python es uno de los mejores lenguajes para principiantes. La sintaxis es limpia e intuitiva y es un lenguaje muy popular en las esferas empresarial y de código abierto.

Anteriormente hablamos de lenguajes compilados versus lenguajes interpretados. Python es un lenguaje interpretado. Cada vez que queremos ejecutar un programa en Python, el interpretador de Python  procesa activamente su código y lo ejecuta línea por línea en su máquina.

Esto es diferente a los lenguajes compilados, en los que primero usaríamos un compilador para procesar el código en una forma más optimizada (un ejecutable) y luego lo ejecutaríamos más tarde.

A diferencia de JavaScript, Python no se creó para ejecutarse directamente dentro de los navegadores web. Python fue creado para ser un lenguaje de secuencias de comandos conveniente, un lenguaje que se puede usar para escribir código para tareas arbitrarias que generalmente se ejecutan en la computadora local de un usuario.

El código de Python se puede ejecutar en cualquier computadora que tenga instalado el intérprete de Python. Todavía es un lenguaje de secuencias de comandos de uso común, pero también se usa ampliamente para la ciencia de datos y las aplicaciones del lado del servidor.

Variables y Asignación en Python

Like JavaScript, Python allows us to define variables. In Python we can simply use the equals sign to create and assign variables as needed:

x = 10
y = "cheese"

Hay dos diferencias entre la sintaxis para definir variables en Python y JavaScript. En Python, no necesitamos la palabra reservada let y tampoco necesitamos un punto y coma al final de cada línea.

Python usa un conjunto de reglas de sintaxis basadas en espacios en blanco y sangría. Esto elimina la necesidad de caracteres de terminación de línea, como el punto y coma, y el alcance del bloque mediante llaves.

Tipos de Datos en Python

Python también tiene un conjunto de tipos de datos que podemos asignar a nuestras variables. Estos incluyen números enteros, números de punto flotante (decimales), cadenas, listas y diccionarios.

Los números enteros, los números de punto flotante y las cadenas son esencialmente iguales a sus contrapartes de JavaScript, por lo que no repetiremos esa información aquí.

En Python, los booleanos son muy similares a los de JavaScript, excepto que las palabras clave True y False deben estar en mayúsculas:

x = True

y = False

Declaraciones de Flujo de Control

Al igual que en JavaScript, Python tiene un conjunto similar de declaraciones de control de flujo, pero con una sintaxis ligeramente diferente.

Declaraciones if / Else

Este es el equivalente en Python del ejemplo if/else que vimos en la sección de JavaScript:

x = 10

if ( x > 5 ):
    print('X es MAYOR que 5!')
    
else:
    print('X NO es MAYOR que 5!')

Definimos una variable llamada x y establecimos su valor en 10, seguido de nuestra declaración if t. Dado que la condición entre paréntesis se evalúa cómo True,  se ejecutará el código indentado después de la declaración if ,  y veremos la cadena de texto  'X es MAYOR que 5!' impreso en la pantalla.

En Python, usamos la función  print()  para imprimir información en la pantalla.

También ten en cuenta que la declaración  else  de arriba, que imprimirá una cadena alternativa a la pantalla si x si la condición es False.

Hay dos diferencias principales entre el código Python anterior y el código JavaScript que vimos anteriormente. Python usa dos puntos en lugar de llaves para indicar el comienzo del bloque de declaración de if .

Además, la indentación de la función print() es muy importante en Python . En JavaScript, la indentación  o el espacio en blanco entre las declaraciones no importa, ya que JavaScript identifica bloques de código usando llaves e identifica el final de una declaración usando un punto y coma. ¡Pero en este ejemplo de Python, no hay punto y coma ni llaves!

Esto se debe a qué Python en realidad usa el espacio en blanco y los caracteres de nueva línea para identificar el final de las declaraciones y los bloques de código.

Los dos puntos le dicen al intérprete de Python que el bloque  if está empezando. El código que conforma el bloque if debe estar indentado (1 tab = 4 espacios es la convención) para que el intérprete de Python sepa que es parte del bloque if . La siguiente línea sin indentación señalará el final del bloque  if.

Ciclos While

A continuación, analizaremos los bucles en Python. El ciclo  while en Python es esencialmente el mismo que vimos en JavaScript, pero con la sintaxis de Python:

x = 1

while ( x <= 100 ):
    print('Este es un mensaje muy importante!')
    x = x + 1

print('Esto no está en el ciclo!')

Las diferencias entre este ciclo while y la versión de JavaScript son las siguientes:

  • Eliminamos  let al definir nuestras variables.
  • Eliminamos los puntos y comas al final de línea.
  • Reemplazamos las llaves con dos puntos.
  • Nos aseguramos de que el código en el ciclo esté indentado con una tabulación.

Imprimimos un mensaje adicional fuera del ciclo para mostrar que las líneas de código sin indentación no son parte del ciclo y no se repetirán.

Para Pythonistas principiantes, recomiendo echar un vistazo a Zen of Python, que es una lista de 20 reglas generales para escribir código Pythonic.

Y cuando sientas más familiaridad con los conceptos básicos, intenta crear algunos de estos divertidos proyectos de Python para principiantes.

10)Amplia tu conocimiento con Java

Ahora que hemos trabajado con un par de lenguajes de programación de alto nivel, demos un paso más abajo con Java.

A diferencia de JavaScript y Python, que ejecutan el código fuente en tiempo real mediante un intérprete, Java es un lenguaje compilado. Esto significa que se usa un compilador (en lugar de un intérprete) para convertir el código fuente de Java en una forma que la computadora pueda entender.

La mayoría de los compiladores generan uno o más archivos ejecutables compuestos por código de máquina que están listos para ejecutarse en el sistema operativo y la plataforma de hardware específicos para los que fueron compilados.

Pero Java es algo especial porque compila el código fuente de Java en una forma intermedia llamada bytecode. Esto es diferente al código de máquina que producen la mayoría de los otros lenguajes compilados. El código de bytes de Java está destinado a ser ejecutado por algo llamado  Java Virtual Machine (JVM).

You can think of the JVM as a program that you install on your computer, which allows you to run Java programs by executing Java bytecode.

Puede pensar en la JVM como un programa que instala en su computadora, que le permite ejecutar programas Java ejecutando bytecode. Cuando las personas hablan de "si Java está instalado o no en una computadora", generalmente preguntan si la JVM está instalada o no en la computadora.

La JVM cumple una función similar a la de los intérpretes que discutimos en capítulos anteriores. Pero en lugar de tomar el código fuente (que se almacena en archivos .java) como entrada, toma el código de bytes compilado.

El beneficio de esta configuración es que permite que el código de bytes compilado en sistemas operativos y plataformas particulares sea ejecutado por una JVM en cualquier otra plataforma.

Por ejemplo, imagine que tenemos un archivo de código Java que fue escrito y compilado en código de bytes en una computadora que ejecuta el sistema operativo Windows. Este código de bytes se puede ejecutar (es decir, el programa se puede ejecutar) mediante una JVM en cualquier plataforma, incluidos Windows, Mac OS, Linux, etc.

Este no es el caso con la mayoría de los ejecutables compilados en otros lenguajes de programación, que solo pueden ejecutarse en el entorno para el que fueron compilados.

Variables y asignación en Java

Una gran diferencia entre Java y los lenguajes que hemos visto hasta ahora (Python y JavaScript) es que Java es un lenguaje de tipo estático.

Esto significa que los tipos de datos de nuestras variables deben conocerse y establecerse en el momento de compilar el programa.

Cada vez que creamos una variable en código Java, debemos especificar explícitamente el tipo de datos de esa variable, como un número entero, una cadena, etc. Esto se llama declaración de variables.

Una vez que declaramos el tipo de datos de una variable, solo puede contener ese tipo de datos durante la ejecución del programa.

Esto es muy diferente de JavaScript y Python, donde los tipos de datos variables se establecen durante la ejecución del programa, también conocido como tiempo de ejecución.

Por lo tanto, los lenguajes como JavaScript y Python se conocen como lenguajes de tipado dinámico: no establecemos explícitamente los tipos de datos variables en nuestro código fuente y podemos reasignar fácilmente una variable a cualquier tipo sobre la marcha.

En Java, creamos variables usando esta sintaxis:

Datatype name = value;

Aquí Datatype es el tipo de datos que almacenará la variable, como Integer, String, etc. Luego, name representa el nombre de la variable que estamos definiendo para que podamos usarla en nuestro código. Y value  es el valor real que estamos asignando a la variable. Ten en cuenta que, al igual que JavaScript, todas las declaraciones de Java terminan en punto y coma.

Tipos de Datos en Java

En Java, los tipos de datos integrados básicos se denominan tipos de datos primitivos y se verán muy familiares según lo que hemos visto en lenguajes de nivel superior como Python y JavaScript. Los principales tipos primitivos son:

  • Integer int: Almacena números enteros entre −2,147,483,648 y 2,147,483,647.
  • Float float: Almacena números enteros entre 3.4x10^−038 a 3.4x10^038.
  • Boolean bool: Almacena números enteros entre true o  false.

Ten en cuenta que hay algunos otros tipos primitivos (corto, largo, byte y doble) que no cubriremos aquí, ya que no se usan con tanta frecuencia como los demás. Así es como inicializamos estos tipos de datos:

Integer: int x = 100;

Float: float pi = 3.14;

Char: char middleInitial = 'T';

Boolean: bool isHuman = true;

Quiero reiterar que una vez que se declara el tipo de datos de una variable, esa variable solo puede contener valores del tipo de datos especificado.

Por ejemplo, se generaría un error si nuestro programa intentara almacenar un valor de carácter dentro de una variable que se declaró como un número entero. No podemos asignar el carácter 'S' a la variable entera x en el ejemplo anterior.

El siguiente tipo de datos que analizaremos es la cadena: una secuencia de caracteres, números o símbolos representados como datos textuales.

Las cadenas en Java son un tipo de datos no primitivo, lo que significa que se construyen a partir de partes más pequeñas. Para declarar una variable de cadena usamos el tipo de datos Cadena y colocamos el valor asignado entre comillas dobles:

String name = "Harry Potter";

Declaraciones de control de flujo de programa en Java

Al igual que JavaScript, Java usa llaves para definir bloques de código if para declaraciones, bucles y funciones. Examinaremos las mismas declaraciones de control de programa que en los capítulos anteriores y actualizaremos los ejemplos para usar la sintaxis de Java.

Declaraciones If / Else

Aquí está la instrucción if/else de Java que refleja los ejemplos de las secciones anteriores:

int x = 10;

if ( x > 5 ) {
    System.out.println("X es MAYOR que 5!");
} else {
    System.out.println("X NO es MAYOR 5!");
}

Este ejemplo básico de declaración  if   es casi idéntico a la versión de JavaScript.  Las únicas diferencias son que declaramos que el tipo de datos de x es int y usamos System.out.println()  en lugar de console.log()  para imprimir nuestro mensaje.

A continuación, pasaremos a los bucles en Java. Dado que la sintaxis de Java y JavaScript son bastante similares, el ciclo  while en Java es esencialmente el mismo que vimos en JavaScript:

int x = 1;

while ( x <= 100 ) {

    System.out.println("Este mensaje es muy importante!");
    
    x = x + 1;
    
}

Este ciclo while imprimirá el mensaje 100 veces.

Esto concluye nuestras secciones sobre lenguajes de programación específicos. Puede haber sido un poco repetitivo ya que cubrimos el mismo conjunto de conceptos en 3 idiomas, pero esperamos que esto haya ayudado a consolidar estas ideas básicas pero fundamentales.

Ahora completaremos este artículo con algunos temas intermedios que, de otro modo, no podría comenzar a aprender de inmediato.

Hablaremos de una herramienta de colaboración esencial llamada Git. Luego aprenderemos a almacenar y acceder a datos en una base de datos. A continuación, abordaremos brevemente los marcos de trabajo de desarrollo web y, por último, arrojaremos algo de luz sobre los administradores de paquetes.

11) Rastrea tu Código usando Git

Git es el sistema de control de versiones (VCS) más popular en uso hoy en día. Permite que varios desarrolladores colaboren juntos en el software. En esta sección, aprenderemos qué es Git, como funciona y como usar sus comandos básicos.

Antes de saltar directamente a Git, desarrollemos algunos conceptos comunes a la mayoría de los proyectos de programación.

El conjunto completo de directorios y archivos que componen un proyecto de software se denomina codebase. El project root es la carpeta de más alto nivel en el árbol de directorios del proyecto. Los archivos de código se pueden incluir directamente en la raíz del proyecto o se pueden organizar en varios niveles de carpetas.

Cuando el código base esté listo para la prueba o la implementación, se puede compilar en el programa que se ejecutará en su computadora. El proceso de compilación puede incluir uno o más pasos que convierten el código escrito por humanos en un ejecutable que se puede ejecutar en los chips de procesamiento de su computadora.

Una vez que se crea el código, el programa está listo para ejecutarse en tú sistema operativo específico, como Linux, Mac OS o Windows.

Con el tiempo, los desarrolladores actualizan el código del proyecto para agregar nuevas funciones, corregir errores, implementar actualizaciones de seguridad y más. En general, hay tres formas en que los desarrolladores pueden realizar estos cambios en un proyecto de software:

  1. Agregar nuevos archivos y carpetas al proyecto
  2. Edite el código en archivos y carpetas existentes
  3. Eliminar archivos y carpetas existentes

A medida que crecen los proyectos y se agregan nuevas características, aumenta la cantidad de archivos y carpetas (así como la cantidad de código dentro de ellos). Los proyectos grandes pueden crecer hasta cientos de miles de archivos que contienen millones de líneas de código.

Para respaldar este crecimiento, la cantidad de desarrolladores en equipos de proyectos grandes generalmente aumenta. Los grandes proyectos de software pueden tener cientos o incluso miles de desarrolladores trabajando en conjunto.

Esto plantea la pregunta: "¿Cómo es posible que todos estos desarrolladores, que pueden estar dispersos geográficamente por todo el mundo realizan un seguimiento del código de su proyecto de software de tal manera que puedan trabajar juntos en un solo proyecto?"

Los equipos de desarrollo necesitan una forma de realizar un seguimiento exacto de los cambios que se realizaron en el código, qué archivos o carpetas se vieron afectados y quién realizó cada cambio. Cada desarrollador también debe poder obtener actualizaciones de todos los demás desarrolladores.

Este proceso se denomina versionado o control de versiones. Los desarrolladores usan herramientas especiales llamadas Sistemas de control de versiones (VCS) para rastrear, administrar y compartir las versiones de los proyectos de software. Aquí hay algunos sistemas de control de versiones populares que se utilizan activamente en estos días:

  • Git
  • Subversion (SVN)
  • Mercurial (Hg)

Sin embargo, Git ha ganado la corona como el VCS de referencia del día. Es, con diferencia, el VCS más popular que utilizan las comunidades gubernamentales, comerciales y de código abierto de todo el mundo.

Git forma el núcleo de las populares plataformas VCS basadas en la web como GitHub y Bitbucket. Git es una herramienta esencial para cualquier desarrollador completo para agregar a su conjunto de habilidades.

Comandos básicos de Git

Git crea y almacena información sobre nuestros proyectos de software en algo llamado repositorio de Git. Un repositorio de Git es solo una carpeta oculta en su computadora que Git usa para almacenar datos sobre los archivos de código en un proyecto de software.

Cada proyecto de software en el que trabajamos normalmente tiene su propio repositorio Git para almacenar información relacionada con ese proyecto. De esta manera, el código relacionado con diferentes proyectos en una sola computadora se puede rastrear por separado.

Hay dos formas principales de crear un repositorio Git en su computadora. El primero es crear un repositorio Git completamente nuevo en una carpeta existente en su sistema de archivos.

Para hacer esto, simplemente abra la línea de comando, cree una nueva carpeta en algún lugar conveniente como en su escritorio y navegue hasta ella:

cd ~/Desktop

mkdir testgit
 
cd testgit/

Ahora que creamos una nueva carpeta y navegamos en ella, podemos inicializar un nuevo repositorio de Git usando el comando:

git init

Deberías ver un resultado similar al siguiente:

Initialized empty Git repository in /Users/me/Desktop/testgit/.git/

Todos los comandos de Git que ejecutaremos comienzan con la palabra git seguida de un espacio y luego el comando específico de Git que nos gustaría ejecutar. A veces también agregaremos banderas y argumentos después de los comandos de Git.

El comando git init crea un folder escondido que se llama .git ien el directorio actual.  Esta carpeta es el repositorio de Git que mencionamos anteriormente. Puedes ver esto ejecutando el comando  ls -al.

La segunda forma de obtener un repositorio de Git en su computadora es descargar uno de otro lugar, como Bitbucket o GitHub.

Bitbucket y Github son sitios web que permiten a las personas alojar proyectos de código abierto que se pueden descargar a su computadora.

Si buscas un proyecto que te parezca interesante en Bitbucket o GitHub, verás un botón llamado Clone. Este botón te proporcionará un comando y una URL que puedes copiar y pegar en la terminal de línea de comandos. Se verá algo como esto:

git clone https://jacobstopak@bitbucket.org/jacobstopak/baby-git.git

El comando git clone  descarga el repositorio desde la URL especificada a una nueva carpeta en tu computadora. La URL puede ser una URL web como en el ejemplo anterior o una URL SSH de la siguiente manera:

git clone git@bitbucket.org:jacobstopak/baby-git.git

Después de ejecutar el comando git clone, deberías ver una nueva carpeta creada. Si navegas en el, verás todos los archivos y subcarpetas que componen el proyecto que descargaste.

El siguiente comando que mencionaremos es git add <filename.ext>. El comando git add se usa para decirle a Git qué archivos queremos que rastree y para agregar cambios en los archivos ya rastreados a Git. staging area.

Una vez que los archivos nuevos o modificados se han preparado, se pueden confirmar en el repositorio mediante el comando git commit -m "Commit message". Esto almacenará los cambios en todos los archivos preparados en el repositorio de Git.

Los comandos git status  y git log son útiles para revisar el estado actual del directorio de trabajo y el historial de confirmación de su proyecto.

Apenas arañamos la superficie aquí. Git tiene muchos más comandos esenciales con los que definitivamente vale la pena familiarizarse.

12) Almacenar datos usando Bases de Datos y SQL

Una base de datos es un programa diseñado específicamente para almacenar, actualizar, recuperar y eliminar de manera eficiente grandes cantidades de datos. En pocas palabras, podemos pensar en una base de datos como un contenedor para un conjunto de tablas.

Probablemente hayas trabajado con tablas en Microsoft Excel. Una tabla es solo un conjunto de columnas y filas que contienen datos. Podemos configurar tablas en una base de datos para almacenar la información que nuestros programas necesitan para funcionar correctamente.

Ya sea que estemos escribiendo programas en JavaScript, Python, Java o algún otro lenguaje, podemos decirles a nuestros programas que interactúen con las bases de datos según sea necesario.

Podemos recuperar datos de la base de datos para mostrarlos a nuestros usuarios en una página web. Podemos aceptar un formulario de registro web de un usuario y almacenar la información de ese usuario en una base de datos para su uso posterior.

Nuestros programas pueden interactuar con bases de datos en tiempo real a medida que ocurren eventos en nuestra aplicación. Para ello, la mayoría de las bases de datos hablan un lenguaje llamado SQL, abreviatura de Structured Query Language.

SQL es un lenguaje de programación creado específicamente para bases de datos. Nos permite decirle a las bases de datos qué hacer.

Un fragmento de código SQL se denomina query. Podemos escribir consultas SQL para obtener los datos que necesitamos en un momento determinado o para insertar nuevos datos en una tabla específica. En términos generales, hay dos tipos principales de consultas SQL: read-SQL y write-SQL.

Una consulta de lectura SQL es aquella que simplemente obtiene datos de la base de datos para que los veamos o los usemos. No cambia los datos en la base de datos en absoluto.

Por otro lado, una consulta de escritura SQL inserta datos nuevos en una tabla, actualiza datos existentes o elimina datos existentes. Aprenderemos cómo escribir algunas consultas básicas de lectura SQL en esta sección.

Antes de escribir una consulta, ¡es útil saber qué estamos consultando! Las bases de datos tradicionales contienen tablas formadas por columnas y filas. Cuando escribimos una consulta de lectura SQL, nuestro objetivo suele ser recuperar un subconjunto de esas filas y columnas.

Por ejemplo, digamos que tenemos una tabla llamada PERSON con 4 columnas, FIRST_NAME y LAST_NAME. Podemos usar la siguiente consulta para seleccionar todos los datos de la columna FIRST_NAME :

SELECT FIRST_NAME FROM PERSON;

La palabra clave SELECT le dice a la base de datos que queremos recuperar datos. Le sigue el nombre de la columna, FIRST_NAME, que queremos obtener.

Luego usamos la palabra clave FROM para decirle a la base de datos de qué tabla queremos obtener los datos, en este caso, la tabla PERSONA. Además, tenga en cuenta que todos los comandos SQL terminan con un punto y coma.

Uno de los requisitos más comunes que tenemos con los datos es filtrarlos. Filtrar significa restringir el conjunto de resultados en función de una condición específica.

Por ejemplo, es posible que solo queramos seleccionar filas de la tabla  PERSON para personas que se llamen "PHIL". Podemos aplicar filtros en consultas SQL usando la palabra clave WHERE  :

SELECT * FROM PERSON WHERE FIRST_NAME = 'PHIL';

Esta consulta devolvería todas las columnas en la tabla PERSON  ya que usamos un asterisco en  *  en la cláusula  SELECT en lugar de enumerar nombres de columna específicos.  Solo se recuperarán las filas de la tabla   PERSON  en las que  FIRST_NAME  esté establecido en "PHIL".

Por último, hablaremos sobre la clasificación. Hay muchas ocasiones en las que nos gustaría ver los resultados de nuestra consulta ordenados en un orden particular. Podemos usar la cláusula  ORDER BY para esto:

SELECT *
FROM PERSON
ORDER BY LAST_NAME;

Esto devolverá todas las columnas de la tabla  PERSON ordenadas alfabéticamente por apellido.

Esto devolverá todas las columnas de la tabla ordenadas alfabéticamente por apellido.

De forma predeterminada, los resultados se ordenarán en orden ascendente, de la A a la Z. Podemos agregar la palabra clave opcional ASC o DESC, para especificar si ordenar en orden ascendente o descendente:

SELECT *
FROM PERSON
ORDER BY LAST_NAME DESC;

13) Leer sobre Frameworks y MVC

A menudo, nos encontraremos escribiendo código para tipos de aplicaciones muy comunes. Las aplicaciones web (o web apps) son aplicaciones que dependen de Internet para funcionar. Las aplicaciones web son algunos de los tipos de aplicaciones de software creados con mayor frecuencia.

Una aplicación web es esencialmente una versión más funcional y robusta de un sitio web. La mayoría de las aplicaciones web implementan algún código de backend que reside en un servidor web y ejecuta la lógica en segundo plano para respaldar la funcionalidad de la aplicación.

Los lenguajes de programación comunes que se usan para el código de backend de una aplicación web incluyen Python, Java y JavaScript, entre otros.

Algunas funcionalidades comunes a la mayoría de las aplicaciones web incluyen:

  • Proporcionar una forma conveniente de modificar dinámicamente el contenido de las páginas web
  • Realización de una autenticación de usuario segura a través de una página de inicio de sesión
  • Proporcionar características de seguridad de aplicaciones robustas
  • Lectura y escritura de datos en una base de datos.

Un framework es un conjunto de bibliotecas de código que contienen las funcionalidades comunes que todas las aplicaciones web usan de manera inmediata. Los frameworks web brindan un sistema para que los desarrolladores construyan sus aplicaciones sin tener que preocuparse por escribir el código para muchas de las tareas detrás de escena comunes a todas las aplicaciones web.

Solo necesitamos utilizar las partes del marco que satisfagan las necesidades de nuestra aplicación web.

Por ejemplo, si no necesitamos conectarnos a una base de datos en una aplicación web en particular, podemos ignorar las funciones de la base de datos y usar las otras funciones que necesitamos.

Todavía tenemos la capacidad total de personalizar las páginas web que componen nuestra aplicación, el flujo de usuarios y la lógica comercial. Puede pensar en un framework como un conjunto de herramientas de programación que podemos usar para crear aplicaciones web.

Cada lenguaje de programación que cubrimos en este artículo tiene uno o más frameworks populares actualmente en uso. Esto es excelente porque brinda a los equipos de desarrollo la flexibilidad de usar el marco del lenguaje en el que son más competentes.

Java tiene Spring Framework que se hace especialmente conveniente a través de Spring Boot. Python tiene Django Framework. JavaScript tiene Node.js un entorno de tiempo de ejecución con las múltiples opciones de frameworks que incluyen Express.js y Meteor.js. Estos frameworks son todos gratuitos y de código abierto (open source).

14) Jugando con Administrador de Paquetes

El tema final que cubriremos en esta guía es el administrador de paquetes. Según el contexto, un paquete puede representar un programa independiente que está listo para instalar en una computadora o una biblioteca de código externa que queremos aprovechar en uno de nuestros proyectos de software.

Dado que nuestras aplicaciones a menudo dependen de estas bibliotecas de códigos externas, también nos referimos a ellas como dependencias.

Un administrador de paquetes es un programa que nos ayuda a mantener las dependencias de un sistema o proyecto de software. Por "mantener" nos referimos a instalar, actualizar, enumerar y desinstalar las dependencias según sea necesario.

Dependiendo del contexto, los administradores de paquetes que discutiremos pueden usarse para mantener los programas que hemos instalado en nuestros sistemas operativos o para mantener las dependencias de un proyecto de software.

Mac OS X: Homebrew

Homebrew es el administrador de paquetes más popular para el sistema operativo Mac OS X. Ofrece una forma conveniente de instalar, actualizar, rastrear, enumerar y desinstalar paquetes y aplicaciones en su Mac.

Muchas aplicaciones que se pueden instalar a través de archivos .dmg descargados también se pueden descargar e instalar usando Homebrew.

Aquí hay un ejemplo de instalación del paquete wget  via Homebrew:

brew install wget

Linux: Apt y Yum

Dado que Linux se creó en torno a la línea de comandos, no sorprende que los administradores de paquetes sean la forma predeterminada de instalar programas.

La mayoría de las versiones principales de Linux vienen con un administrador de paquetes integrado. Advanced Package Tool (APT) es el administrador de paquetes nativo para las distribuciones de Linux basadas en Debian y Ubuntu. Yellowdog Updater, Modified (YUM) es el administrador de paquetes nativo para la distribución RedHat Linux.

Aquí hay un ejemplo de instalación de Vim usando APT:

sudo apt-get install vim

Y usando Yum:

sudo yum install vim

JavaScript: Node Package Manager (NPM)

Ahora que hemos visto cómo funcionan algunos administradores de paquetes a nivel del sistema operativo, echemos un vistazo a algunos administradores de paquetes específicos del lenguaje de programación. Estos pueden ayudarnos a administrar las bibliotecas de software de las que dependen muchos de nuestros proyectos de codificación. Node Package Manager (NPM) se instala de forma predeterminada con Node.js.

Una diferencia entre NPM y los administradores de paquetes anteriores que hemos visto es que NPM se puede ejecutar en modo local o global. El modo local se usa para instalar un paquete solo dentro de un proyecto/directorio en particular en el que estamos trabajando, mientras que el modo global se usa para instalar el paquete en el sistema.

De manera predeterminada, los paquetes se instalan localmente, pero puede usar el indicador -g para instalar un paquete globalmente:

npm install request -g

Python: Pip

Python también tiene un administrador de paquetes llamado Pip. Es posible que Pip ya esté instalado en su sistema, ya que viene preempaquetado con versiones recientes de Python. Pip nos permite instalar fácilmente paquetes desde Python Package Index usando el comando   pip install <package-name>:

pip install requests

Java: Apache Maven

Apache Maven (generalmente denominado simplemente Maven) es un conjunto de herramientas gratuito y de código abierto que incluye administración de dependencias.

Maven se usa principalmente para proyectos Java, aunque también es compatible con otros lenguajes. El uso de Maven es un poco más complicado y puede hacer muchas cosas, por lo que no entraremos en detalles aquí.

Resumen

En este artículo, presenté un conjunto de conceptos y herramientas de codificación esenciales con la intención de presentar una vista panorámica del desarrollo de software que desearía haber tenido cuando comencé a aprender a programar.

Cubrí temas que incluyen Internet, varios lenguajes de programación, sistemas de control de versiones y bases de datos con el objetivo de describir cómo encajan estas piezas del rompecabezas.

Próximos Pasos

Si disfrutaste de este artículo, escribí un libro llamado Coding Essentials Guide for Developers (Guía Básica de Programación para Desarrolladores) que tiene 14 capítulos, cada uno de los cuales cubre uno de los temas discutidos en esta publicación.

En el libro profundizo aún más en estos 14 temas, por lo que podría ser un buen recurso para que podrías revisar si obtuviste valor de este artículo.

Después de leer esto, es posible que sientas atracción  por un lenguaje, una herramienta o un concepto en particular. Si este es el caso, te animo a profundizar en esa área para avanzar en su aprendizaje.

Si tienes alguna pregunta, sugerencia o inquietud sobre este libro, me encantaría saber de tí en jacob@initialcommit.io.