Articles about basic programming
@ -1,16 +1,16 @@
|
|||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from 'astro/config';
|
||||||
|
|
||||||
import tailwind from "@astrojs/tailwind";
|
import tailwind from "@astrojs/tailwind";
|
||||||
|
import mdx from "@astrojs/mdx";
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
integrations: [tailwind()],
|
integrations: [tailwind(), mdx()],
|
||||||
markdown: {
|
markdown: {
|
||||||
shikiConfig: {
|
shikiConfig: {
|
||||||
themes: {
|
themes: {
|
||||||
light: "catppuccin-latte",
|
light: "catppuccin-latte",
|
||||||
dark: "github-dark"
|
dark: "github-dark"
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
@ -11,12 +11,13 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.5.10",
|
"@astrojs/check": "^0.5.10",
|
||||||
|
"@astrojs/mdx": "^3.1.2",
|
||||||
"@astrojs/tailwind": "^5.1.0",
|
"@astrojs/tailwind": "^5.1.0",
|
||||||
"astro": "^4.6.1",
|
"astro": "^4.11.5",
|
||||||
"tailwindcss": "^3.4.3",
|
"tailwindcss": "^3.4.5",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.5.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@shikijs/transformers": "^1.6.0"
|
"@shikijs/transformers": "^1.10.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3062
pnpm-lock.yaml
@ -9,7 +9,7 @@ pre.astro-code {
|
|||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
border: solid 1px var(--c-border-1);
|
border: solid 1px var(--c-border-1);
|
||||||
font-size: 0.9rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.astro-code>code {
|
pre.astro-code>code {
|
||||||
@ -49,6 +49,17 @@ pre.astro-code>code .line::before {
|
|||||||
color: #3b82f6;
|
color: #3b82f6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#blog img {
|
||||||
|
max-height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#blog blockquote {
|
||||||
|
border-left: 5px solid var(--c-border-1);
|
||||||
|
padding-left: 1rem;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
.astro-code,
|
.astro-code,
|
||||||
|
BIN
public/img/blog/es/tutorial/001-iphone.jpg
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
public/img/blog/es/tutorial/002-calculadora.jpg
Normal file
After Width: | Height: | Size: 433 KiB |
BIN
public/img/blog/es/tutorial/003-chef.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
public/img/blog/es/tutorial/004-analogia1.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
public/img/blog/es/tutorial/005-analogia2.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
public/img/blog/es/tutorial/006-codigo.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
public/img/blog/es/tutorial/007-zig1.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
public/img/blog/es/tutorial/008-zig.png
Normal file
After Width: | Height: | Size: 56 KiB |
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
layout: ../../../layouts/BlogLayout.astro
|
|
||||||
title: Primera pagina
|
|
||||||
description: Hola mundo :D
|
|
||||||
pubDate: "2024-07-15"
|
|
||||||
tags: ["programming"]
|
|
||||||
image:
|
|
||||||
url: ""
|
|
||||||
alt: ""
|
|
||||||
caption: ""
|
|
||||||
---
|
|
||||||
|
|
||||||
(carita feliz)
|
|
94
src/pages/blog/es/programacion-01.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
layout: ../../../layouts/BlogLayout.astro
|
||||||
|
title: "01: Programación desde cero absoluto con Zig"
|
||||||
|
description: |
|
||||||
|
Aprendé a programar desde completamente cero, utilizando el lenguaje
|
||||||
|
de programación Zig.
|
||||||
|
pubDate: "2024-07-15"
|
||||||
|
tags: ["tech", "zig", "lenguajes", "intro", "tutorial"]
|
||||||
|
image:
|
||||||
|
url: ""
|
||||||
|
alt: ""
|
||||||
|
caption: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```zig
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
std.debug.print("Hola {}!", .{"mundo"});
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Dicen por ahi que la mejor forma de aprender es enseñar, y llevo un tiempo con
|
||||||
|
la idea de consolidar lo que he aprendido a lo largo de los años, así que
|
||||||
|
decidí escribir un tutorial para aprender programación, desde completamente cero.
|
||||||
|
|
||||||
|
## Público objetivo
|
||||||
|
|
||||||
|
Esta serie de artículos están dirigidos a personas que no saben absolutamente
|
||||||
|
nada de programación. Nada de nada. Han utilizado un computador/laptop/celular,
|
||||||
|
saben utilizar mouse y teclado, y han escuchado por ahi de la programación
|
||||||
|
(probablemente en tiktok) y les dió curiosidad. Pero lo más friki que hicieron
|
||||||
|
en su vida es descargar música en mp3 de youtube o instalar programas/juegos
|
||||||
|
piratas.
|
||||||
|
|
||||||
|
Y a esas personas les digo: bienvenidos a bordo.
|
||||||
|
|
||||||
|
|
||||||
|
## Expectativas
|
||||||
|
|
||||||
|
Esto no es un tutorial rápido para leer en media hora, escribir un programa,
|
||||||
|
ir a trabajar a Netflix y ganar 400_000 dolares al año. Las ciencias
|
||||||
|
de la computación son amplias, y programar es solo el inicio.
|
||||||
|
|
||||||
|
En esta serie explico conceptos fundamentales, desde abajo, lento pero seguro,
|
||||||
|
de forma interactiva y teórica. Aprender a programar no es fácil, pero
|
||||||
|
tampoco es imposible. Y en mi opinión, es fundamental que lo que vas a ir
|
||||||
|
descubriendo te llame la atención, te dé curiosidad, te den ganas de aprender.
|
||||||
|
Porque sino, será como los cursos aburridos del colegio: una obligación,
|
||||||
|
un aburrimiento, una molestia, que al acabar el colegio olvidarás de inmediato.
|
||||||
|
|
||||||
|
|
||||||
|
## Este tutorial sirve para hacer páginas web?
|
||||||
|
|
||||||
|
Depende.
|
||||||
|
|
||||||
|
En este tutorial no enseño nada específico a la creación de páginas web.
|
||||||
|
Pero todo lo que aprendas te servirá para crear páginas web en el
|
||||||
|
futuro.
|
||||||
|
|
||||||
|
Si tu objetivo es únicamente crear páginas web sencillas, pequeñas,
|
||||||
|
hay mejores tutoriales allá afuera.
|
||||||
|
|
||||||
|
## Empezar
|
||||||
|
|
||||||
|
|
||||||
|
Para empezar el tutorial [usa este link](./programacion-02).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Público no objetivo
|
||||||
|
|
||||||
|
Aquellos que ya saben programar en algún otro lenguaje y quieren aprender Zig:
|
||||||
|
esta serie no es para ustedes. Hay un monton de información súmamente básica que
|
||||||
|
les va aburrir.
|
||||||
|
|
||||||
|
Si quieren aprender Zig vayan a [https://ziglang.org](https://ziglang.org),
|
||||||
|
[https://zig.guide/](https://zig.guide/),
|
||||||
|
[https://github.com/zigtools/zls](https://github.com/zigtools/zls),
|
||||||
|
[https://saidvandeklundert.net/fortheloveofzig/](https://saidvandeklundert.net/fortheloveofzig/),
|
||||||
|
[https://www.openmymind.net/learning_zig/](https://www.openmymind.net/learning_zig/),
|
||||||
|
lean la documentación, instalen el compilador y LSP y pónganse a programar cualquier cosa.
|
||||||
|
|
||||||
|
Más adelante planeo escribir un compilador basado en
|
||||||
|
[Crafting Interpreters](https://craftinginterpreters.com/) pero en Zig, que puede
|
||||||
|
servir como guía.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
135
src/pages/blog/es/programacion-02.md
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
---
|
||||||
|
layout: ../../../layouts/BlogLayout.astro
|
||||||
|
title: "02: Programación desde cero absoluto con Zig: Fundamentos"
|
||||||
|
description: |
|
||||||
|
Fundamentos de la computación, programas, componentes
|
||||||
|
pubDate: "2024-07-16"
|
||||||
|
tags: ["tech", "lenguajes", "intro", "tutorial"]
|
||||||
|
image:
|
||||||
|
url: ""
|
||||||
|
alt: ""
|
||||||
|
caption: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
En este artículo explico conceptos fundamentales de los computadores,
|
||||||
|
programas y computación.
|
||||||
|
|
||||||
|
## Qué es un computador?
|
||||||
|
|
||||||
|
Un computador es cualquier dispositivo que se puede **"configurar"**
|
||||||
|
para que realize tareas que nosotros querramos.
|
||||||
|
|
||||||
|
Por ejemplo, los celulares son computadores con los que podemos
|
||||||
|
usar apps, escribir mensajes, tomar fotos y videos, jugar juegos,
|
||||||
|
etc.
|
||||||
|
|
||||||
|
![Imagen de un iPhone](/img/blog/es/tutorial/001-iphone.jpg)
|
||||||
|
|
||||||
|
Una calculadora también es un computador, nos permite realizar operaciones
|
||||||
|
matemáticas simples. Solo que en cierto sentido, una calculadora solo es
|
||||||
|
capaz de ejecutar un programa.
|
||||||
|
|
||||||
|
![Imagen de una calculadora](/img/blog/es/tutorial/002-calculadora.jpg)
|
||||||
|
|
||||||
|
Para hacer cada una de estas acciones utilizamos "apps" o "programas".
|
||||||
|
|
||||||
|
Por ejemplo, utilizamos el **programa** "WhatsApp" para enviar y recibir
|
||||||
|
mensajes de texto, voz o video, el **programa** "Photoshop" para editar
|
||||||
|
fotos, o el **programa** "Word" para escribir documentos.
|
||||||
|
|
||||||
|
|
||||||
|
## Qué es un programa
|
||||||
|
|
||||||
|
Al nivel más fundamental, un programa es una lista de instrucciones
|
||||||
|
que ejecuta un computador. Me gusta hacer la analogía de un Chef
|
||||||
|
preparando una Pizza:
|
||||||
|
|
||||||
|
|
||||||
|
![Imagen de un chef](/img/blog/es/tutorial/003-chef.jpg)
|
||||||
|
|
||||||
|
Un Chef realiza una operacion: transforma ingredientes en un plato.
|
||||||
|
Para esto necesita 2 cosas:
|
||||||
|
|
||||||
|
- los ingredientes (obviamente)
|
||||||
|
- una receta
|
||||||
|
|
||||||
|
El Chef toma la receta y sigue los pasos en ella. La receta indica qué
|
||||||
|
tiene que hacer con cada ingrediente, cuándo y cómo.
|
||||||
|
|
||||||
|
![Analogía 1](/img/blog/es/tutorial/004-analogia1.jpg)
|
||||||
|
|
||||||
|
En esta analogía la receta es el programa, y el chef es el computador.
|
||||||
|
|
||||||
|
|
||||||
|
![Analogía 2](/img/blog/es/tutorial/005-analogia2.jpg)
|
||||||
|
|
||||||
|
El programa (por ejemplo, Photoshop) es una lista de instrucciones
|
||||||
|
que, cuando el computador ejecuta, edita una foto.
|
||||||
|
|
||||||
|
Aunque a nosotros nos parece que Photoshop tiene botones y figuras
|
||||||
|
y paneles y demás, en realidad Photoshop no es más que un monton
|
||||||
|
de instrucciones (**código**) debajo del capó.
|
||||||
|
|
||||||
|
![Analogía 3](/img/blog/es/tutorial/006-codigo.jpg)
|
||||||
|
|
||||||
|
|
||||||
|
## Qué es el código?
|
||||||
|
|
||||||
|
```zig
|
||||||
|
const std = @import("std");
|
||||||
|
const parseInt = std.fmt.parseInt;
|
||||||
|
|
||||||
|
test "parse integers" {
|
||||||
|
const input = "123 67 89,99";
|
||||||
|
const ally = std.testing.allocator;
|
||||||
|
|
||||||
|
var list = std.ArrayList(u32).init(ally);
|
||||||
|
// Ensure the list is freed at scope exit.
|
||||||
|
// Try commenting out this line!
|
||||||
|
defer list.deinit();
|
||||||
|
|
||||||
|
var it = std.mem.tokenizeAny(u8, input, " ,");
|
||||||
|
while (it.next()) |num| {
|
||||||
|
const n = try parseInt(u32, num, 10);
|
||||||
|
try list.append(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
const expected = [_]u32{ 123, 67, 89, 99 };
|
||||||
|
|
||||||
|
for (expected, list.items) |exp, actual| {
|
||||||
|
try std.testing.expectEqual(exp, actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Siguiendo la analogía del Chef, el código es lo que compone la "receta"
|
||||||
|
(el programa). Se puede decir que son los "pasos" que la computadora realizará.
|
||||||
|
|
||||||
|
Si la receta dice: `Amasar la masa durante 5 minutos`
|
||||||
|
|
||||||
|
El código sería: `std.ArrayList(u32).init(ally)`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Qué es la programación?
|
||||||
|
|
||||||
|
En la analogía, programar es **escribir la receta** que el Chef seguirá.
|
||||||
|
|
||||||
|
Programar es escribir el **programa** que la **computadora** seguirá. Es
|
||||||
|
escribir todas esas palabras raras con colores que estan en la imagen de arriba.
|
||||||
|
|
||||||
|
Y así como hay recetas de pizzas en español, inglés o chino; los programas
|
||||||
|
se escriben en **lenguajes de programación**, por ejemplo
|
||||||
|
[Python](https://www.python.org/), [Java](https://dev.java/) o
|
||||||
|
[Zig](https://ziglang.org/).
|
||||||
|
|
||||||
|
|
||||||
|
## Siguiente artículo
|
||||||
|
|
||||||
|
En el siguiente artículo pondremos manos a la obra escribiendo y ejecutando
|
||||||
|
un programa.
|
||||||
|
|
||||||
|
[Link al siguiente artículo](./programacion-03)
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/pages/blog/es/programacion-03.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
layout: ../../../layouts/BlogLayout.astro
|
||||||
|
title: "03: Programación desde cero: Hola mundo"
|
||||||
|
description: |
|
||||||
|
Escribí el tradicional programa "Hola mundo" por tí mismo!
|
||||||
|
pubDate: "2024-07-17"
|
||||||
|
tags: ["tech", "lenguajes", "intro", "tutorial", "zig"]
|
||||||
|
image:
|
||||||
|
url: ""
|
||||||
|
alt: ""
|
||||||
|
caption: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
En este artículo vamos a escribir nuestro primer programa: Hola mundo. Vamos a
|
||||||
|
modificarlo y entender algunos otros conceptos.
|
||||||
|
|
||||||
|
## Hola mundo
|
||||||
|
|
||||||
|
Hola mundo es tradicionalmente el [primer programa](https://es.wikipedia.org/wiki/Hola_mundo)
|
||||||
|
que se escribe cuando se aprende a programar.
|
||||||
|
|
||||||
|
Vamos a empezar con este programa. Entra a la siguiente página web:
|
||||||
|
[https://zig.fly.dev/p/xNluereqmgW](https://zig.fly.dev/p/xNluereqmgW)
|
||||||
|
|
||||||
|
Veras lo siguiente:
|
||||||
|
|
||||||
|
![Zig online 1](/img/blog/es/tutorial/007-zig1.jpg)
|
||||||
|
|
||||||
|
Arriba está el nombre de la página: "Zig Playground". A su derecha hay 3 botones en inglés:
|
||||||
|
|
||||||
|
- "Run" ejecuta el programa.
|
||||||
|
- "Format" hace algo llamado 'formatear' el código. No lo usaremos aún.
|
||||||
|
- "Share" comparte el código que escribimos. No lo usaremos.
|
||||||
|
|
||||||
|
Dentro del recuadro plomo está escrito el código **Zig**. No lo modifiques aún.
|
||||||
|
|
||||||
|
Si lo modificaste y quieres volver al código original, cierra la página y vuelve a
|
||||||
|
abrirla con el link de arriba.
|
||||||
|
|
||||||
|
## Ejecutando el código
|
||||||
|
|
||||||
|
Presiona el boton "Run". Aparecerá texto debajo del recuadro del código:
|
||||||
|
|
||||||
|
![Zig online 2](/img/blog/es/tutorial/008-zig.png)
|
||||||
|
|
||||||
|
Este texto es el resultado de ejecutar el programa. Se lee:
|
||||||
|
|
||||||
|
- `Hola mundo!` : Este es el resultado del programa.
|
||||||
|
- `Program exited.` : Significa "El programa terminó" en ingles. Nos
|
||||||
|
indica que el programa terminó de ejecutarse. Puedes ignorarlo.
|
||||||
|
|
||||||
|
Felicidades! Has ejecutado tu primer programa.
|
||||||
|
|
||||||
|
> Desafio: Borra todo el código y vuelve a escribirlo, exactamente igual.
|
||||||
|
Utiliza la imágen como guía.
|
||||||
|
|
||||||
|
|
||||||
|
## Inglés
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|