Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
teaching:cc5111 [2013/05/15 16:21] etanterteaching:cc5111 [2015/12/10 15:43] etanter
Line 10: Line 10:
 <tr> <tr>
 <td><b>Profesor de cátedra</b>: Éric Tanter</td> <td><b>Profesor de cátedra</b>: Éric Tanter</td>
-<td><b>Estreno:</b> 2013/2</td>+<td><b>Semestre:</b> 2016/1</td>
 </tr> </tr>
 <tr> <tr>
-<td><b>Profesor auxiliar</b>: Ismael Figueroa</td> +<td><b>Profesor auxiliar</b>: Matías Toro</td> 
-<td><b>Horario:</b> 1.4-3.4 (tentativo)</td>+<td><b>Horario:</b> 1.4-5.3 </td>
 </tr> </tr>
 </table> </table>
Line 24: Line 24:
 Scala se puede ver como el fruto del **matrimonio de Java y Haskell**, con unos toques de Racket, Erlang, y Clojure, con múltiples mejoras. Java, por la programación con objetos, el ambiente de ejecución (JVM), y la interoperabilidad. Haskell, por la programación funcional, la sintaxis elegante, el pattern matching, el sistema de tipos muy expresivo con inferencia, y el soporte ligero para evaluación perezosa y estructuras infinitas. Racket, por las continuaciones y las macros. Erlang y Clojure, por la simplicidad del paralelismo y de la concurrencia. Las mejoras más notables incluyen //traits// para mejor reuso y modularidad, el uso del mismo concepto de objeto desde la granularidad más fina hasta modulos enteros, y un extenso soporte para reflexión. Scala se puede ver como el fruto del **matrimonio de Java y Haskell**, con unos toques de Racket, Erlang, y Clojure, con múltiples mejoras. Java, por la programación con objetos, el ambiente de ejecución (JVM), y la interoperabilidad. Haskell, por la programación funcional, la sintaxis elegante, el pattern matching, el sistema de tipos muy expresivo con inferencia, y el soporte ligero para evaluación perezosa y estructuras infinitas. Racket, por las continuaciones y las macros. Erlang y Clojure, por la simplicidad del paralelismo y de la concurrencia. Las mejoras más notables incluyen //traits// para mejor reuso y modularidad, el uso del mismo concepto de objeto desde la granularidad más fina hasta modulos enteros, y un extenso soporte para reflexión.
  
-El resultado es una alta productividad, con programas de tamaño generalmente muy reducido en comparación con aplicaciones Java equivalentes, y una gran robustez debido al sistema de tipos. Muchas empresas que dependen de Java por su negocio han adoptado Scala progresivamente para aumentar su productividad, escalabilidad y confiabilidad, y esta tendencia se está [[http://redmonk.com/sogrady/2013/02/28/language-rankings-1-13/|reforzando]]. Grandes actores industriales---**empresas tecnológicas emergentes (Twitter, LinkedIn, VMWare) y tradicionales (Siemens, Novell, Sony), empresas del sector financiero (Morgan Stanley, Credit Suisse, UBS, HSBC), etc.**---han adoptado Scala para soluciones de concurrencia y mensajería, manejo de bases de datos, aplicaciones web y cloud, entre otros. Notablemente, Twitter contribuye directamente a la comunidad Scala con varios [[http://twitter.github.io/scala_school/|documentos]] [[http://twitter.github.io/effectivescala/|pedagógicos]]. +El resultado es una alta productividad, con programas de tamaño generalmente muy reducido en comparación con aplicaciones Java equivalentes, y una gran robustez debido al sistema de tipos. Muchas empresas que dependen de Java por su negocio han adoptado Scala progresivamente para aumentar su productividad, escalabilidad y confiabilidad, y esta tendencia se está [[http://redmonk.com/sogrady/2015/07/01/language-rankings-6-15/|reforzando]]. Grandes actores industriales---**empresas tecnológicas emergentes (Twitter, LinkedIn, VMWare) y tradicionales (Siemens, Novell, Sony), empresas del sector financiero (Morgan Stanley, Credit Suisse, UBS, HSBC), etc.**---han adoptado Scala para soluciones de concurrencia y mensajería, manejo de bases de datos, aplicaciones web y cloud, entre otros. Notablemente, Twitter contribuye directamente a la comunidad Scala con varios [[http://twitter.github.io/scala_school/|documentos]] [[http://twitter.github.io/effectivescala/|pedagógicos]]. 
  
 **Al combinar lo mejor de la programación orientada a objetos y de la programación funcional con un sistema de tipos avanzado, Scala es un lenguaje altamente expresivo y flexible.** Permite que desarrolladores de bibliotecas usen abstracciones muy sofisticadas, para que los usuarios de estas bibliotecas puedan expresarse en forma simple e intuitiva. En consecuencia, programas escritos en Scala pueden parecer muy simples o muy complejos, según el tipo de código que se considera.  **Al combinar lo mejor de la programación orientada a objetos y de la programación funcional con un sistema de tipos avanzado, Scala es un lenguaje altamente expresivo y flexible.** Permite que desarrolladores de bibliotecas usen abstracciones muy sofisticadas, para que los usuarios de estas bibliotecas puedan expresarse en forma simple e intuitiva. En consecuencia, programas escritos en Scala pueden parecer muy simples o muy complejos, según el tipo de código que se considera. 
  
 **El curso entrega las herramientas necesarias para ser efectivo en el desarrollo de software en Scala, tanto para desarrollar aplicaciones como para desarrollar bibliotecas robustas.** Esto implica el estudio de varios conceptos y mecanismos avanzados de programación, poniéndolos en su contexto científico y práctico. Así mismo, el curso expone ciertos mecanismos de Scala en relación con sus realizaciones en otros lenguajes. **El curso entrega las herramientas necesarias para ser efectivo en el desarrollo de software en Scala, tanto para desarrollar aplicaciones como para desarrollar bibliotecas robustas.** Esto implica el estudio de varios conceptos y mecanismos avanzados de programación, poniéndolos en su contexto científico y práctico. Así mismo, el curso expone ciertos mecanismos de Scala en relación con sus realizaciones en otros lenguajes.
 +
 +** Se alternarán clases expositivas orientadas a los conceptos de programación en Scala, y clases tutoriales enfocadas al uso de las herramientas más usadas en la industria** (Play para programación Web, Akka para programación reactiva, Scala.js para clientes Web, Slick para bases de datos, specs2 para testing).
 +
 +
  
 **Tópicos:** **Tópicos:**
-  * clases, objetostipos y operaciones básicas +  * programación funcional: //funciones de primera clase, pattern matching, clases de casosTCOpereza, monadas// 
-  * funciones y abstracciones de control +  * programación por objetos: //objetos, clases y traits// 
-  * herencia y traits +  * colecciones: //colecciones mutables e inmutables, iteradores, streams//
-  * clases de casos, pattern matching y extensibilidad +
-  * colecciones: //colecciones mutables e immutables, iteradores, streams y vistas perezosas//+
   * tipos básicos: //generics, inferencia, conversiones implícitas//   * tipos básicos: //generics, inferencia, conversiones implícitas//
   * tipos avanzados: //miembros de tipo abstracto, tipos estructurales, tipos self, polimorfismo de familia, etc.//   * tipos avanzados: //miembros de tipo abstracto, tipos estructurales, tipos self, polimorfismo de familia, etc.//
-  * programación genérica: //parámetros implícitos, clases implícitas// +  * programación genérica: //parámetros implícitos, clases implícitas, clases de tipos// 
-  * programación modular: //componentes, modulos, inyección de dependencias// +  * programación modular: //componentes, módulos, inyección de dependencias// 
-  * concurrencia y paralelismo: //actores, colecciones sincronizadas, colecciones paralelas// +  * concurrencia y paralelismo: //colecciones sincronizadas, colecciones paralelas, actores//
-  * mecanismos avanzados: //continuacionesmacros y reflexión//+
  
-**Evaluación:** Mini-controles regulares (15-30 min en horario de clases) tareas. Se exime de examen con 5.0.+**Evaluación:**  
 + 
 +  * Mini-controles regulares (15-30 min en horario de clases)
 +  * Mini-tareas (esencialmente en las clases tutoriales). 
 +  * Proyecto final en grupo. 
 + 
 +Se exime de examen con 5.0.
  
 {{teaching:cc5111:scala.pdf|Programa del Curso (CC5111)}} {{teaching:cc5111:scala.pdf|Programa del Curso (CC5111)}}
 +
 +**Nota para alumnos de doctorado**
 +
 +Se puede inscribir el curso con código CC74A, en cual caso la evaluación incluirá el estudio de unos aspectos formales de Scala (mediante artículos de investigación)