-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1ad3727
commit f8fbca4
Showing
1 changed file
with
99 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
--- | ||
title: Presentación y primeros conceptos | ||
date: "2024-04-27" | ||
description: "Primera clase de PdeP, presentación y primeros conceptos" | ||
tags: [expresividad, declaratividad, paradigmas] | ||
--- | ||
|
||
## Qué hacer para la clase que viene: | ||
- Unirse a [discord](https://discord.gg/p4bKxGDE) siguiendo este [instructivo](https://docs.google.com/document/d/1KhlCwxp0c6gOC2plRDMJvgiBwU7-z7uBRcO-fa4HIyY/edit). | ||
- Intentar [instalarse Haskell](https://www.pdep.com.ar/software/haskell). No lo vamos a estar usando hasta después del 8/4 pero pueden ir probando cositas y preguntarnos cosas por Discord. | ||
- Armar grupo. Podés buscar integrantes en el canal `#buscando-grupo` de Discord. Una vez que ya lo tengas armado, anunciarlo en el canal `#grupos` indicando quiénes lo integran (etiquetando a las personas). | ||
|
||
## Primero un poco de burocracia… | ||
|
||
La materia tiene 3️⃣ parciales. | ||
|
||
¿Cómo los promociono? | ||
8 o más en los 3 parciales (con la posibilidad de recuperar 1 si te sacaste menos de 8). | ||
TPs aprobados. | ||
|
||
¿Cómo simplemente los apruebo? | ||
6 o más en los 3 parciales (hay 2 recuperatorios por cada parcial). | ||
TPs aprobados. | ||
|
||
## ¿Qué es un paradigma de programación? | ||
|
||
Un paradigma es una forma en especial de pensar la solución a un problema, en este caso, un problema de programación 👩💻👨💻. Para ello, vamos a necesitar herramientas 🔧 y conceptos 📖 que cambiarán de paradigma en paradigma. | ||
|
||
Los que veremos en la cursada serán los paradigmas **funcional**, **lógico** y **de objetos** 😮. ¡Empecemos! | ||
|
||
## Expresividad y declaratividad | ||
Dos conceptos muy pero muy importantes que nos van a acompañar tooodoo este año. Son transversales a los 3 paradigmas. | ||
|
||
La **expresividad** viene de la mano de cuán *entendible* es nuestro código. De cómo nombramos a las variables, funciones, métodos… Tiene que estar escrito de tal forma de que lo entiendas vos, tu colega o alguien que no sepa programación tanto hoy como dentro de unos años. | ||
|
||
La **declaratividad** tiene que ver con ocultar los detalles algorítmicos de nuestro código. Enfocarnos en el *qué y no en el cómo*. | ||
|
||
|
||
Estos dos conceptos son complementarios y vamos a buscar que nuestras soluciones sean lo más declarativas y expresivas que podamos. No existe EL código expresivo y declarativo, sino que existen códigos más declarativos y expresivos que otros. | ||
|
||
¡Veamos unos ejemplos! | ||
|
||
``` | ||
-- Solución A | ||
| ||
int d(int c[]) { | ||
int a = 0; | ||
for (int b = 0; c[b] != NULL; b++) { | ||
if (c[b] % 2 == 0) { | ||
a++; | ||
} | ||
} | ||
return a; | ||
} | ||
| ||
-- Solución B | ||
| ||
int cantidadDeNumerosPares(int* unosNumeros) { | ||
int cantidadDePares = 0; | ||
for (int indice = 0; != NULL; indice++) { | ||
if (unosNumeros[indice] % 2 == 0) { | ||
cantidadDePares++; | ||
} | ||
} | ||
return cantidadDePares; | ||
} | ||
| ||
-- Solución C | ||
| ||
int cantidadDeNumerosPares(int* unosNumeros) { | ||
int cantidadDePares = 0; | ||
for (int indice = 0; != NULL; indice++) { | ||
if (esNumeroPar(unosNumeros[indice])) { | ||
cantidadDePares++; | ||
} | ||
} | ||
return cantidadDePares; | ||
} | ||
``` | ||
|
||
Dadas esas soluciones, ¡comparémoslas! | ||
|
||
La solución A es menos expresiva que las otras dos, pero igual de declarativa que la B, aunque menos declarativa que la C. | ||
La solución B es más expresiva que la A, e igual que la C, pero menos declarativa que la C, aunque igual de declarativa que la A. | ||
La solución C es la más expresiva junto con la B y es la más declarativa. | ||
|
||
Sin embargo, todas estas soluciones tienen algo en común: están escritas en el mismo lenguaje de programación. Hay otros lenguajes que facilitan que nuestras soluciones sean más declarativas. Por ejemplo, este mismo problema se podría solucionar utilizando el lenguaje Haskell, haciendo: | ||
|
||
``` | ||
cantidadDeNumerosPares numeros = (length.filter even) numeros | ||
``` | ||
|
||
No te asustes si no pudiste darte cuenta tan fácilmente qué solución era más expresiva o declarativa que la otra 😨. Es una habilidad que se va adquiriendo con la experiencia, así que ¡a hacer muchos ejercicios! 💪💻 | ||
|
||
## Links útiles | ||
|
||
- [Video de esta clase en 2021](https://drive.google.com/file/d/1gcybc5zNBqQ7vu6Ku7NGeUWhlLGwnbqf/view?usp=sharing) | ||
- [PPT de presentación](https://docs.google.com/presentation/d/1VnfRbibC9Z4kWK0iOUDi-3KMNEzGw5bPFUzBw95o6IU/edit?usp=sharing) | ||
|