En este curso exploraremos el paradigma funcional en JavaScript así como varios patrones, técnicas y convenciones asociadas a este paradigma, haciendo uso de las nuevas características de ES2015.
La programación funcional es un paradigma de programación de suma relevancia hoy
en día, ya que se presta a resolver problemas de paralelización, asincronía y
programación reactiva entre otros. La programación funcional (Functional
Programming o FP por sus siglas en inglés) no es realmente un paradigma nuevo,
existe desde hace medio siglo, pero recientemente, y en particular en el mundo
de JavaScript, se ha convertido en tanto una moda como una necesidad. Poco a
poco, desde la proliferación de librerías como underscore y lodash,
después la adición de map()
, filter()
, reduce()
y compañía, y ahora con
frameworks como React y Redux, conocer el paradigma funcional y estilo
declarativo se han convertido en una necesidad para cualquier desarrollador de
JavaScript.
Familiarizarnos con la programción funcional en JavaScript y ES2015 nos permitirá más adelante desenvolvernos con naturalidad en React.
Tags: functional
, es6
, ...
Este curso está dirigido a desarrolladoras tanto front-end como back-end. JavaScript es un lenguaje de naturaleza funcional. En este curso aprenderás sobre los principios de la programación funcional y cómo se reflejan en JavaScript moderno.
Para poder llevar adelante este curso sin frustración, es recomendable los siguientes conocimientos previos:
- Manejo de línea de comandos (*nix) y
git
- Manejo básico de
npm
- Debes haber completado el curso de paradigmas de programación.
- ES2015
- Funciones puras
- Inmutabilidad
- Recursión
- Higher Order Functions
- Composición de funciones
- Refactorización
- Trabajo en equipo
- Revisión en pares o Peer-review
- Github issues, branches, pull requests, entre otros.
- Refactorizar juego usado en lección 9 usando principios de programación funcional, ES6 y añadiendo un conjunto de pruebas.
- El "proyecto" está basado en iterar una aplicación existente y llevar a cabo su siguiente release usando metodología ágil.
Unidad 01: Evitando el estado compartido y cambiante
En esta unidad veremos dos de los principios fundamentales de la programación funcional: cómo evitar el estado compartido usando funciones puras y el concepto de inmutabilidad. La duración estimada de esta unidad es de 3h.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | lectura | self-paced | 30min | Funciones puras |
02 | practice | self-paced | 10min | Ejercicios de funciones puras |
03 | lectura | self-paced | 30min | Inmutabilidad |
04 | practice | self-paced | 10min | Ejercicios de inmutabilidad |
05 | quiz | self-paced | 10min | Cuestionario |
06 | seminario | guiado | 45min | Solucionarios y ejercicios guiados |
07 | quiz | self-paced | 10min | Cuestionario |
08 | seminario | guiado | 15min | Cierre |
Unidad 02: Hacking: refactoring
Esta unidad es básicamente una sesión de programación por pares. La tarea a realizar será refactorizar varias funciones de un videojuego existente haciendo uso de funciones puras y estructuras inmutables. La duración estimada de esta unidad es de 2h.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | taller | self-paced | 90min | Implementación por pares |
02 | seminario | guiado | 15min | Cierre |
Unidad 03: Higher Order Functions
Las funciones de orden superior (Higher Order Functions en inglés), no son más que funciones que reciben otras funciones como argumentos o que retornan una función. En esta unidad veremos este tipo de funciones en acción, incluyendo usos más avanzados como aplicación parcial y currying.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | lectura | self-paced | 30min | Higher Order Functions |
02 | practice | self-paced | 10min | Ejercicios de HOF |
03 | lectura | self-paced | 10min | Aplicación parcial |
04 | practice | self-paced | 10min | Ejercicios de aplicación parcial |
05 | lectura | self-paced | 30min | Currying |
06 | practice | self-paced | 10min | Ejercicios de currying |
07 | quiz | self-paced | 10min | Cuestionario |
08 | seminario | guiado | 45min | Solucionarios y ejercicios guiados |
09 | quiz | self-paced | 10min | Cuestionario |
10 | seminario | guiado | 15min | Cierre |
Unidad 04: Hacking: refactoring
La duración estimada de esta unidad es de 2h.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | taller | self-paced | 90min | Implementación por pares |
02 | seminario | guiado | 15min | Cierre |
Unidad 05: Control de flujo
Como paradigma declarativo, la programación funcional se caracteriza, entre otras cosas, por expresar "repetición" usando recursión en vez de iteración. En esta unidad veremos cómo reemplazar iteración con recursión o higher order functions, así como las ventajas que ofrece el enfoque funcional para manejar asincronía, que es una característica fundamental de JavaScript.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | lectura | self-paced | 50min | Recursión |
02 | practice | self-paced | 10min | Ejercicios de recursión |
03 | lectura | self-paced | 30min | Asincronía |
04 | practice | self-paced | 10min | Ejercicios de asincronía |
05 | quiz | self-paced | 10min | Cuestionario |
06 | seminario | guiado | 45min | Solucionarios y ejercicios guiados |
07 | quiz | self-paced | 10min | Cuestionario |
08 | seminario | guiado | 15min | Cierre |
Unidad 06: Hacking: refactoring
La duración estimada de esta unidad es de 2h.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | seminario | guiado | 15min | Apertura |
01 | taller | self-paced | 90min | Implementación por pares |
02 | seminario | guiado | 15min | Cierre |
Unidad 07: Code review + Demos de proyectos
Cada equipo (dos alumnas) tendrá 5 minutos para presentar su demo. La duración estimada de esta unidad es de 2h.
- Ejercicios: Durante el curso completarás varios ejercicios en el LMS. Estos ejercicios incluyen tests automatizados con la intención de dar feedback immediato, pero los ejercicios en sí no serán calificados. Se elegirá uno o dos ejercicios junto con el proyecto para la sesión de code review, que sí será calificada.
- Cuestionarios: Al igual que los ejercicios, a lo largo del curso responderás varios cuestionarios con feedback immediato, y éstos no cuentan para la nota final.
- Proyecto: Antes de la sesión de code review y las demos, cada alumna debe entregar (via pull request) el código de su proyecto. El proyecto incluye refactorizar varios módulos de una base de código existente.
- Code review: (50%) La última semana del curso tendrás una sesión de code review con uno de lxs instructorxs. En esta sesión se revisará el código del proyecto así como uno o dos ejercicios realizados durante el curso.
- Demo: (50%) El curso cerrará con una demo en la que tendrás que presentar al resto de la clase el trabajo realizado y lo aprendido en el proyecto.
- Milton Mazzarri (autor)
- Lupo Montero (coordinador)
- Ana Rangel (colaboradora)
- Functional JavaScript de Michael Fogus
- Eloquent JavaScript
Cursos similares que sirven como referencia:
- Introduction to Functional Programming, How to Think Functionally in (Almost) Any Language, Barry Burd, November 2016, O'Reilly Media
Capítulos de libros:
Blog posts:
- Why Learn Functional Programming in JavaScript? (Composing Software), Eric Elliott en Medium, Feb 20 2017
- Master the JavaScript Interview: What is Functional Programming?, Eric Elliott en Medium, Jan 3 2017
- Functional Programming In JavaScript — With Practical Examples (Part 1), Free Code Camp, @rajaraodv, Nov 14 2016
- JavaScript and Functional Programming, Beth Allchurch, 29 of June, 2016
- An introduction to functional programming, Mary Rose Cook
- Functional Programming in Javascript (Part 2) @yyyk, Apr 16 2017 (needs review)
- One webpack config to rule them all — environments that is, Ryan Johnson, Feb 12 2017
- What are NPM, Yarn, Babel, and Webpack; and how to properly use them?, Gasim Gasimzada, May 9 2017 (needs review)
Videos:
- Functional programming in JavaScript, Mattias Petter Johansson.
- Learning Functional Programming with JavaScript, Anjana Vakil, JSUnconf 2016
- Functional programming and curry cooking in JS, Stefanie Schirmer, JSConf EU 2015
- Practical functional programming: pick two, James Coglan, JSConf EU 2014
- Pure JavaScript, Christian Johansen (@cjno), Sep 13 2012
Otros recursos:
- Glosario de términos de programación funcional, @hemanth en GitHub.