| track |
|---|
web-dev |
Los Paradigmas de Programación (Programming Paradigms) son formas diferentes de pensar en cómo se organiza un programa basado en una serie de principios, los cuales resultan en estilos muy distintos y lenguajes muy diversos.
JavaScript es un leguage híbrido, por decirlo de alguna forma, y contiene elementos propios de lenguajes funcionales (por ejemplo funciones como objetos de primera clase, lambdas, ...) pero no estamos limitados al paradigma funcional, si no que en su dinamismo y rareza, JavaScript nos permite programar de forma funcional, orientado a objetos, orientado a eventos, por procedimientos, ...
Como desarrolladora Full Stack JS es esencial entender los distintos paradigmas de programación y cómo se traducen al mundo real en proyectos de JavaScript.
Históricamente, el paradigma orientado a objetos (OOP) ha sido el predominante, pero recientemente, y en particular en la comunidad de JavaScript, hay un resurgir del paradigma funcional y sus bondades. JavaScript es un lenguaje de corazón funcional, así que conocer el paradigma, y cómo se compara a la programación orientada a objetos, no sólo te hará una mejor coder, si no que podrás entender cómo se pueden enfrentar los mismos problemas con enfoques distintos, e identificar y adaptarse a bases de código existentes.
Este curso está pensado para estudiantes que ya se han familiarizado con la programación en JavaScript y quieren llevar su conocimiento sobre el lenguaje a otro nivel, entendiendo diferentes formas de "pensar" en cómo se estructura un programa.
Se asume que las estudiantes ya han trabajado con variables, valores (tipos de datos), arreglos, objetos y funciones así como estructuras de control de flujo (bucles, condicionales, ...).
Durante este curso se hará uso de algunas características de ES2015, así que
un mínimo de familiaridad con const, let, arrow-functions,
deconstrucción de objetos y la notación shorthand de objetos son un plus.
- Qué son los paradigmas de programación
- Qué son FP, OOP, EOP y PP y cómo se comparan
- A entender las diferencias entre el estilo imperativo vs declarativo
- Las diferencias entre constructores y factories
- Cómo implementar herencia prototipal
- Los principios básicos de la programación funcional
- A usar composición como alternativa a la herencia
Unidad 01: Introducción a Paradigmas de Programación
En esta lección aprenderás las características y diferencias entre los paradigmas más relevantes para JavaScript, que es un lenguaje multi-paradigma y nos permite programar en varios estilos: imperativo, por procedimientos, orientado a objetos (OOP), funcional (FP), ...
| # | Tipo | Formato | Duración | Descripción |
|---|---|---|---|---|
| 00 | lectura | self-paced | 5min | Apertura |
| 01 | lectura | self-paced | 5min | ¿Qué son los paradigmas de programación? |
| 02 | lectura | self-paced | 5min | Historia |
| 03 | lectura | self-paced | 15min | Declarativo vs Imperativo |
| 04 | práctica | self-paced | 5min | Ejercicio Imperativo |
| 05 | lectura | self-paced | 6min | Por procedimientos |
| 06 | lectura | self-paced | 6min | Modularidad |
| 07 | práctica | self-paced | 10min | Ejercicio por procedimientos |
| 08 | lectura | self-paced | 15min | Orientado a objetos |
| 09 | práctica | self-paced | 10min | Ejercicio OOP |
| 10 | lectura | self-paced | 10min | Funcional |
| 11 | práctica | self-paced | 10min | Ejercicio funcional |
| 13 | lectura | self-paced | 5min | Cierre |
Unidad 02: OOP y herencia prototipal
Después de haber completado la introducción a paradigmas, te introdicirás en los detalles de cómo usar contructores y prototipos para crear jerarquías de herencia.
| # | Tipo | Formato | Duración | Descripción |
|---|---|---|---|---|
| 00 | lectura | self-paced | 5min | Apertura |
| 01 | lectura | self-paced | 10min | this y bind |
| 02 | lectura | self-paced | 10min | Object.create |
| 03 | lectura | self-paced | 12min | Herencia prototipal |
| 04 | práctica | self-paced | 60min | Ejercicios planetproto |
| 06 | lectura | self-paced | 5min | Cierre |
Unidad 03: Object factories and composition
En esta lección veremos en detalle cómo usar composición como una alternativa a las jerarquías de herencia, y así poder comparar el enfoque funcional frente al orientado a objetos en un ámbito concreto de arquitectura y reuso de código.
| # | Tipo | Formato | Duración | Descripción |
|---|---|---|---|---|
| 00 | lectura | self-paced | 5min | Apertura |
| 01 | lectura | self-paced | 3min | Closures |
| 02 | lectura | self-paced | 5min | Factories |
| 03 | lectura | self-paced | 5min | Object.assign |
| 04 | lectura | self-paced | 10min | Composition over inheritance |
| 05 | práctica | self-paced | 60min | Ejercicios |
| 07 | lectura | self-paced | 5min | Cierre |
- Lupo Montero (autor)
- Mariano Crowe (technical review)
- Object-Oriented vs. Functional Programming, Richard Warburton, O'Reilly Media
- Eloquent JavaScript, Marijn Haverbeke, 2014
- You Don't Know JS Yet: Objects & Classes - 2nd Edition, Chapter 4: This Works, Kyle Simpson, O'Reilly Media, Jul 2014
- Programming Paradigms for Dummies: What Every Programmer Should Know, Peter Van Roy, Université Catholique de Louvain, Bélgica, circa 2010.
Cursos similares que sirven como referencia:
- Fundamentos de la programación: Paradigmas de programación, José Dimas Luján Castillo, video2brain, 8 Mar 2017
- Object-Oriented JavaScript, Hack Reactor en Udacity
- Ejercicio de ejemplo del curso de Hack Reactor
- Overview of the four main programming paradigms, Kurt Nørmarks, Aalborg University, Dinamarca.
Capítulos de libros:
- Eloquent JavaScript - Chapter 3: Functions
- Eloquent JavaScript - Chapter 5: Higher-Order Functions
- Eloquent JavaScript - Chapter 6: The Secret Life of Objects
Blog posts:
- Six programming paradigms that will change how you think about coding, Yevgeniy Brikman, Apr 09 2014
- Understanding JavaScript Constructors, Faraz Kelhini, CSS Tricks, Sep 24 2015
- ECMAScript 6 modules: the final syntax, Axel Rauschmayer, 07 Sep 2014
- JavaScript Modules: A Beginner’s Guide, Preethi Kasireddy (FreeCodeCamp), Jan 22 2016
- Why Learn Functional Programming in JavaScript? (Composing Software), Eric Elliott en Medium, Feb 20 2017
- JavaScript and Functional Programming, Beth Allchurch, 29 of June, 2016
- An introduction to functional programming, Mary Rose Cook
- Introducción a programación funcional en JavaScript — Parte 1, Lupo Montero en Medium, Feb 15 2017
Videos:
- Programming Paradigms,
10:43, Computerphile, 30 Aug 2013 - HTML IS a Programming Language (Imperative vs Declarative),
8:27, Computerphile, Jun 28 2016 - Qué es un paradigma de programación,
5:15, José Dimas Luján Castillo, video2brain, 8 Mar 2017 - Prototypal Inheritance,
8:52, Justin Meyer, Frontend Masters - Playlist: Object Creation in JavaScript,
aprox. 3h, funfunfunction, 2016 - Prototypes in JavaScript - FunFunFunction #16,
11:55, funfunfunction, 25 Jan 2016 - Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46,
19:19, funfunfunction, 22 ago. 2016 - Learning Functional Programming with JavaScript- JSUnconf,
29:56, Anjana Vakil, JSConf 2016
Otros recursos:
- Definición de Programming_paradigm en Wikipedia
- Comparativa de paradigmas de programación en Wikipedia
- History of programming languages
- Declarative programming
- Procedural programming
- Object-oriented programming
- MDN - instanceof
- MDN - this
- MDN - Function.bind
- MDN - Function.call
- MDN - Arrow functions
- MDN - Array.prototype.map
- MDN - Closures