Commit cf13340a authored by Autopawn's avatar Autopawn

Updated so that works in the Marp VS Code plugin.

parent c4fdca63
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![55% center](figures/present_day_present_time.png)
# ![center h:250px](figures/present_day_present_time.png)
## 00 - Reglas del juego
......@@ -25,7 +33,7 @@ Lenguajes de Programación
* Aprender a programar bien. :heart:
![center 30%](./humor/hackerman.png)
![center](./humor/hackerman.png)
<!-- Imagen de un tipo en una pose graciosa tras un texto que dice "HACERMAN", en un fondo retro. -->
<!-- Esto significa: manejar la complejidad -->
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![](figures/ohh_wee.png)
# ![center h:250px](figures/ohh_wee.png)
## 01 - Motivación
......@@ -39,7 +47,7 @@ Ejemplos:
---
![center 20%](./portraits/edijkstra.jpg)
![center w:200px](./portraits/edijkstra.jpg)
> The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.
-- Edsger W. Dijkstra
......@@ -108,7 +116,7 @@ Los lenguajes de programación son **transversales** a toda la labor de un infor
- Gestión.
---
![center 95%](figures/tech_network_2019.png)
![center h:650px](figures/tech_network_2019.png)
Fuente: [Stackoverflow](https://insights.stackoverflow.com/survey/2019#technology)
......@@ -146,27 +154,13 @@ Y eso puede tener **consecuencias desastrosas** :skull_and_crossbones:.
---
![center](./humor/sin_conocer_conceptos.jpg)
![center h:700px](./humor/sin_conocer_conceptos.jpg)
<!-- Imagen con el título "Cuando comienzas a programar un nuevo lenguaje sin conocer los conceptos en que se fundamenta", en la imagen aparecen dos marineros, uno sosteniendo en un hombro una munición de artillería y, tras el, un compañero dispuesto a darle un martillazo a esta bala para dispararla; ejemplificando el mal uso de una herramienta.
-->
---
![center 20%](./portraits/edijkstra.jpg)
![center w:200px](./portraits/edijkstra.jpg)
> It is not only the violin that shapes the violinist, we are all shaped by the tools we train ourselves to use, and in this respect programming languages have a devious influence: they shape our thinking habits.
-- Edsger W. Dijkstra
<!-- Nota: tengo aquí comentadas unas quotes porque, aunque estoy de acuerdo, son armas de doble filo, pueden interpretarse de manera incorrecta. -->
<!--
![center](./portraits/aperlis.jpg)
> A language that doesn't affect the way you think about programming, is not worth knowing.
-- Alan J. Perlis
-->
<!--
![center](./portraits/aperlis.jpg)
> Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
-- Alan J. Perlis
-->
\ No newline at end of file
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
......@@ -22,7 +30,7 @@ Problemas:
* Falta la capacidad de **abstracción** de la matemática convencional (una mera suma se debía expresar como varias operaciones de máquina).
---
![center 80%](humor/programming_language_levels.jpg)
![center h:600](humor/programming_language_levels.jpg)
(mejor hacia arriba :arrow_up:)
......@@ -93,7 +101,7 @@ END.
---
![center 28%](figures/pl_through_years_crop.png)
![center h:700](figures/pl_through_years_crop.png)
---
# Definición del lenguaje
......@@ -192,7 +200,7 @@ Ver por ejemplo:
## Parse Tree
![80%](figures/parse_tree_alt.png) $\,$ ![130%](figures/parse_tree.gif)
![w:380](figures/parse_tree_alt.png) ![w:380](figures/parse_tree.gif)
---
......@@ -227,12 +235,12 @@ Reconocer: `if (C1) then if (C2) then S1 else S2`
### Linters
![center 140%](humor/linter_angry_03.png)
![center h:300px](humor/linter_angry_03.png)
<!-- Pantallazo de un linter indicando errores en código, como falta de punto y coma. -->
---
![center 70%](humor/linter_angry_01.png)
![center h:500px](humor/linter_angry_01.png)
<!-- Meme de Pikachu sorprendido, el texto dice:
"""
Me: Is in the middle of writing an if
......@@ -242,7 +250,7 @@ Compiler, shocked and angry that I haven't finished writing the statement in 3 m
---
![center 70%](humor/linter_angry_02.png)
![center h:500px](humor/linter_angry_02.png)
<!--
mismo meme anterior pero corregí "Compiler" por "Linter"
-->
......@@ -339,7 +347,7 @@ Paradigmas principales:
:arrow_right: En el extremo de los más declarativos tenemos **programación lógica** y [**constraint programming**](https://en.wikipedia.org/wiki/Constraint_programming).
---
![center 45%](figures/paradigms_diagram.jpg)
![center h:650px](figures/paradigms_diagram.jpg)
Fuente: [www.info.ucl.ac.be/~pvr](https://www.info.ucl.ac.be/~pvr/paradigms.html)
......@@ -370,7 +378,7 @@ Fuente: [www.info.ucl.ac.be/~pvr](https://www.info.ucl.ac.be/~pvr/paradigms.html
---
* Todas las abstracciones son útiles:question:
![center 100%](./humor/layers_of_abstraction.png)
![center](./humor/layers_of_abstraction.png)
<!-- Diálogo entre dos personajes, el primero tiene el logo de Java:
- how many layers of abstraction are you on?
- like, maybe 5, or 6 right now my dude
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center 70%](figures/expressions.png)
# ![center h:250px](figures/expressions.png)
## 03 - Expresiones regulares
......@@ -94,7 +102,7 @@ Las **ER** se pueden calzar en *strings*, para encontrar:
* `\Z` calza sólo al final de la string (no de la línea).
* `\b` bordes de palabra. De largo 0, sólo matchea al principio o final de una palabra, e.g.: `"\bbegin\b"`.
* `\` se usa para **escapar** el siguiente metacaracter, para que se considere literalmente.
![center 80%](./humor/batmath.jpg)
![center](./humor/batmath.jpg)
---
......@@ -195,10 +203,10 @@ Por ejemplo:
# Probar expresiones regulares
![center 70%](figures/regex101.png)
![center](figures/regex101.png)
<!-- Ejemplo de uso de regex101.com -->
[regex101.com](https://regex101.com/) permite probar expresiones regulares. [:egg:](https://www.youtube.com/watch?v=41U78QP8nBk&loop=1)
:star: [regex101.com](https://regex101.com/) permite probar expresiones regulares. [:egg:](https://www.youtube.com/watch?v=41U78QP8nBk&loop=1)
---
# Notas adicionales
......@@ -251,7 +259,7 @@ Por ejemplo:
:arrow_right: La primera parte `(//.*\n)` es para comentarios de una línea.
![150% center](figures/regex_act0.png)
![h:250 center](figures/regex_act0.png)
:warning: Más de un comentario hace match:bangbang:
:arrow_right: Esto es porque `*`, `+`, y `?` *regex* son **greedy**:
......@@ -261,7 +269,7 @@ Por ejemplo:
### Segunda regex:
![150% center](figures/regex_act2.png)
![h:250 center](figures/regex_act2.png)
:arrow_right: Para evitar esto, esta *regex* no admite un `*` *literal* al interior del comentario, si no está seguido por algo diferente a un `/` *literal*.
:warning: Pero nuestra *regex* falla si se termina con `**/`:bangbang:
......@@ -270,7 +278,7 @@ Por ejemplo:
### Tercera regex:
![150% center](figures/regex_act3.png)
![h:250 center](figures/regex_act3.png)
:arrow_right: Esta *regex* mejorada considera la posibilidad de terminar con varios `*` literales.
:arrow_right: Pero existe una forma más fácil!
......@@ -285,13 +293,13 @@ Por ejemplo:
> Adding ? after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched.
![125%](figures/regex_nong1.png) ![125%](figures/regex_nong2.png)
![h:250](figures/regex_nong1.png) ![h:250](figures/regex_nong2.png)
---
### Cuarta regex:
![150% center](figures/regex_act4.png)
![h:250 center](figures/regex_act4.png)
:arrow_right: La parte `(/\*.*?\*/)` ahora hace *match* de los comentarios multi-línea correctamente.
......@@ -312,7 +320,7 @@ Por ejemplo, el [README.md](https://github.com/keras-team/keras/blob/master/READ
# Advertencia
![center 55%](./humor/parse_html_using_regex.png)
![center h:500](./humor/parse_html_using_regex.png)
No abusar de las expresiones regulares! :biohazard:
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Programming Languages
===
# ![center 70%](figures/labeled_boxes.jpg)
# ![center h:250px](figures/labeled_boxes.jpg)
## 04 - Names, bindings, and scopes
*(nombres, ligado y ámbito)*
......@@ -189,7 +197,7 @@ When the space reserved for the *stack* is overrun we got a **stack buffer overf
---
![center 80%](figures/stack_overflow.gif)
![center h:650](figures/stack_overflow.gif)
---
......@@ -332,7 +340,7 @@ Popular dynamic typing languages:
---
![center 55%](./humor/dynamic_static_2.png)
![center h:600](./humor/dynamic_static_2.png)
---
......@@ -474,8 +482,8 @@ outside i= 10
# Padding
![center 50%](./figures/padding.jpg)
![center h:350](./figures/padding.jpg)
* Processor can read 1 word (32bit) from memory at a time.
* The processor can read 1 word (32bit) from memory at a time.
* To make use of this advantage, data is aligned in 4 byte packs.
* This leads to insert empty spaces between member’s address.
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Programming Languages
===
# ![center 125%](figures/compiler.png)
# ![center h:250px](figures/compiler.png)
## 05 - Compilation
......@@ -209,7 +217,9 @@ objdump -d test.o # view assembly from object file.
bless test.o # open with bless editor
```
![center 35%](figures/bless.png)
---
![center h:700](figures/bless.png)
---
......@@ -224,7 +234,7 @@ bless test.o # open with bless editor
:arrow_right: Parts of several **object files** and **libraries** should be *linked* together.
![center 80%](figures/object_file.png)
![center h:300](figures/object_file.png)
---
......@@ -245,6 +255,7 @@ To compile an **object file** that uses identifiers defined on other **object fi
:arrow_right: That's why definitions are place on the **header** (the `.h` file).
---
`delta.h`
```c
int delta(int x, int y);
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Programming Languages
===
# ![center](figures/cant_sleep_overflow.png)
# ![center h:250px](figures/cant_sleep_overflow.png)
## 06 - Types
###### *(and garbage collection)*
## 06 - Types (+ garbage collection)
###### Francisco Casas Barrientos
......@@ -38,7 +45,6 @@ using namespace std;
void fun(int x){
x += 20;
}
int main(){
int a = 10;
fun(a);
......@@ -78,11 +84,13 @@ Value of a: 30
---
![bg opacity:.5](humor/doom.jpg)
## Pass by reference
:arrow_right: Available in `C++`.
:arrow_right: Argument is equivalent to variable at call.
:arrow_right: Function can **modify** the value.
:arrow_right: The function can **modify** the value, and is not **explicit** for the caller! :angry:
```c++
#include <iostream>
......@@ -91,7 +99,6 @@ using namespace std;
void fun(int &x){
x += 20;
}
int main(){
int a = 10;
fun(a);
......@@ -103,10 +110,6 @@ int main(){
Value of a: 30
```
:angry: Possible **modification** is not longer explicit for the **caller**.
![bg](humor/doom.jpg)
---
## Pass by result
......@@ -218,14 +221,14 @@ void fun(const bigstruct *x){
---
![center](humor/pointers.png)
![center h:700px](humor/pointers.png)
---
## Example: [qsort](http://www.cplusplus.com/reference/cstdlib/qsort/)
**--or--** "How to have a sort function for any type in `C`".
![center](figures/qsort_doc.png)
![center h:500](figures/qsort_doc.png)
---
......@@ -317,17 +320,17 @@ amet dolor ipsum lorem sit
---
![center 1225%](figures/type_axis.png)
![center h:600](figures/type_axis.png)
---
![center 70%](figures/dynamicvsstatic.png)
![center 70%](figures/strongvsweak.png)
![center h:250](figures/dynamicvsstatic.png)
![center h:250](figures/strongvsweak.png)
Source: [Dynamic Typing is NOT Weak Typing](https://blogs.agilefaqs.com/2011/07/11/dynamic-typing-is-not-weak-typing/).
---
![center 150%](humor/weakly_typed_undefined_sin.jpg)
![center](humor/weakly_typed_undefined_sin.jpg)
---
......@@ -340,11 +343,11 @@ Source: [Dynamic Typing is NOT Weak Typing](https://blogs.agilefaqs.com/2011/07/
---
![center](humor/thanks_javascript.jpg)
![center h:700](humor/thanks_javascript.jpg)
---
![center 140%](humor/js_scroll_of_truth.jpg)
![center h:500](humor/js_scroll_of_truth.jpg)
---
......@@ -521,7 +524,7 @@ The function `fact` has type:
---
![center](humor/type_checking.png)
![center h:700](humor/type_checking.png)
---
......@@ -600,7 +603,8 @@ while True:
b.friend = a
```
:fire: **This causes a memory leak: Will freeze your computer** :fire:
:fire: **This causes a memory leak** :fire:
:fire: **It will freeze your computer** :fire:
:arrow_right: Python usually detects circular references, but no if we overwrite the `__del__` method.
......@@ -644,7 +648,7 @@ error[E0597]: `x` does not live long enough
---
![center 120%](humor/bytes_for_you.jpg)
![center](humor/bytes_for_you.jpg)
---
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center](figures/cool_code.jpg)
# ![center h:250px](figures/cool_code.jpg)
## 07 - Expresiones y Asignaciones
......@@ -81,10 +89,10 @@ False
:arrow_right: Puede ser **izquierda-a-derecha** o **derecha-a-izquierda**
---
![center 130%](figures/operator_precedence_2.png)
![center h:700](figures/operator_precedence_2.png)
---
![center](figures/operator_precedence.png)
![center h:700](figures/operator_precedence.png)
---
......@@ -154,7 +162,6 @@ a: 20
```c
#include <stdio.h>
int give_a(){
printf("called a!\n");
return 1;
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Programming Languages
===
# ![center](figures/cant_sleep_overflow.png)
# ![center h:250px](figures/cant_sleep_overflow.png)
## 07 - Modularización y encapsulamiento
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center 45%](figures/object_oriented_cat.jpeg)
# ![center h:250px](figures/object_oriented_cat.jpeg)
## 08 - Programación Orientada a Objetos
......@@ -83,10 +91,10 @@ En Java (y en general) se tienen los siguientes modificadores de acceso:
* Tiene un **estado** particular $\Rightarrow$ Ocupa **memoria**.
---
![center 27.4%](figures/stark_blueprint.jpeg)
![center h:350](figures/stark_blueprint.jpeg)
![center](figures/iron-man-3-movie-suit.jpg)
![center h:350](figures/iron-man-3-movie-suit.jpg)
---
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center](figures/turtle_and_hippo.jpg)
# ![center h:250px](figures/turtle_and_hippo.jpg)
## 09 - Herencia y Polimorfismo
......@@ -305,7 +313,7 @@ user@pc:~/poo$ java Poly
---
![center 120%](humor/c_is_this_polymorphism.jpg)
![center](humor/c_is_this_polymorphism.jpg)
:skull: **NOTA**: Es posible tener polimorfismo en C++, usando [*virtual functions*](https://www.geeksforgeeks.org/virtual-function-cpp/).
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center](figures/java_logo.png)
# ![center h:250px](figures/java_logo.png)
## 10 - Más sobre Java
......@@ -21,7 +29,7 @@ Lenguajes de Programación
:arrow_right: La API Java incluye los tipos `Reader` y `Writer` que son abstracciones sobre los streams de bytes.
:arrow_right: De estas cuatro clases abstractas Java deriva las demás clases para E/S.
![center 40%](figures/datastream.jpeg)
![center h:150](figures/datastream.jpeg)
---
......@@ -139,6 +147,8 @@ Object obj = new Bike();
Bike castedMyBike = obj; // Compile-time error
```
---
:arrow_right: Para esto debemos usar *casting* **explícito**:
```java
Bike castedMyBike = (Bike) obj;
......@@ -186,7 +196,7 @@ public class BackupBox<T> {
---
Una `BackupBox<T>` almacena 2 atributos de un tipo `T` cualquiera.
:arrow_forward: Una `BackupBox<T>` almacena 2 atributos de un tipo `T` cualquiera.
```java
import java.util.*;
......@@ -334,7 +344,7 @@ List<Integer> intList = new ArrayList<Integer>();
Java proveé un [*framework*](https://www.javatpoint.com/collections-in-java) con una arquitectura para manipular grupos de objetos.
![center 60%](figures/java_collection_hierarchy_2.png)
![center h:400](figures/java_collection_hierarchy_2.png)
:arrow_right: Estas colecciones se pueden encontrar en el paquete `java.util`
......@@ -390,7 +400,7 @@ Gamma
---
![center 55%](figures/java_hierarchy.png)
![center h:600](figures/java_hierarchy.png)
:link: Fuente: [www.falkhausen.de](http://www.falkhausen.de/Java-8/java.util/Collection-Hierarchy.html)
......@@ -425,13 +435,13 @@ Map Elements
---
![center 150%](figures/java_map_interface_and_concrete.jpg)
![center](figures/java_map_interface_and_concrete.jpg)
:link: Ver la [Documentación](https://docs.oracle.com/javase/7/docs/api/java/util/Map.html).
---
![center 150%](figures/kovalchuk_rule_of_thumb.gif)
![center](figures/kovalchuk_rule_of_thumb.gif)
---
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Lenguajes de Programación
===
# ![center 60%](figures/missile_exception.png)
# ![center h:250px](figures/missile_exception.png)
## 11 - Excepciones
......@@ -79,11 +87,11 @@ Exception in thread "main"
---
![center 120%](humor/pooh_exceptions.png)
![center](humor/pooh_exceptions.png)
---
![center 120%](humor/pooh_exceptions_2.png)
![center](humor/pooh_exceptions_2.png)
---
......@@ -134,7 +142,7 @@ min: 1
---
![center 35%](humor/java_try_catch.jpg)
![center](humor/java_try_catch.jpg)
---
......@@ -237,7 +245,7 @@ Empty String!
---
![center 140%](humor/exceptions_the_very_thing.jpeg)
![center](humor/exceptions_the_very_thing.jpeg)
---
......
<!-- page_number: true -->
---
marp: true
size: 4:3
number: true
paginate: true
theme: default
style: |
img[alt~="center"]{display:block;margin: 0 auto;}
---
Programming Languages
===
# [![center 120%](figures/combinator.png)](https://csvoss.com/projects/2015/11/08/lambda-circuitry.html)
# [![center h:250px](figures/combinator.png)](https://csvoss.com/projects/2015/11/08/lambda-circuitry.html)
## 12 - Functional Programming
......@@ -26,7 +34,7 @@ Programming Languages
:arrow_right: In 1940 Alonso Church designed **lambda calculus** as a formal system for expressing computation by functions.
:arrow_right: A year after, Alan Turing (his student) designed **Turing machine** and then he demonstrated its equivallence.
![center 50%](figures/two_paradigms.png)
![center h:300](figures/two_paradigms.png)
:arrow_right: Lisp (1058) was based on **lambda calculus**.