Scala => SCAlable
LAnguage
Освободившись
от бестолковой работы на банкиров,
первым делом прошел курс
Functional
Programming Principles in Scala
Что замечательно,
курс ведет Мартин Одерски (Martin Odersky),
автор Scala.
Поскольку в
этом курсе по теме ФП для меня нового
ничего нет (монады и лямбда-калькулюс
в курсе не проходили), я основное внимание
уделял не фишкам ФП а особенностям
Scala.
Мне язык очень
понравился, с потребительской точки
зрения. Лаконичный, выразительный, с
богатой стандартной библиотекой. Есть
REPL! И это при том, что внутре у него Java.
По ощущениям,
писать почти так же просто как и на
Python. Только статическая типизация портит
эти ощущения. Но, с другой стороны, зачем
нам еще один Python? Или так: пусть будет
как-бы-Питон со стат. типизацией.
Что напрягало:
задачки и упражнения Мартин составил
так, чтобы жизнь медом не казалась.
Часто, чтобы найти правильный ответ,
надо изрядно поскрипеть мозгами. А
учитывая, что рекурсию сложнее обхода
дерева я сто лет не применял, тем более
не решал задач на комбинаторику, пришлось
попотеть. Зато я знаю теперь, где у меня
пробелы в образовании.
Но вот когда
сообразишь, как решается задачка, код
на Scala получается настолько лаконичный,
что диву даешься. Правда, у лаконичного
кода есть негативный эффект – если
забыл, что там о чем, приходится долго
в голове «раззиповывать» код в описание
алгоритма.
Кстати, что
характерно: все задачи и упражнения в
курсе реализуются без мутабельных
переменных. Ни разу не возникло потребности
применить мутатор к переменной какой.
Красота.
Мне Scala
понравилась, буду дальше учить и
использовать.
Getting Started
-- Course Introduction (2:44)
-- Tools Setup for Linux (12:24)
-- Tools Setup for Mac OS X (12:17)
-- Tools Setup for Windows (10:37)
-- Tutorial: Working on the Programming Assignments (8:47)
-- IntelliJ IDEA (optional alternative IDE)
Week 1: Functions & Evaluations
-- Lecture 1.1 - Programming Paradigms (14:32);
-- Lecture 1.2 - Elements of Programming (14:25);
-- Lecture 1.3 - Evaluation Strategies and Termination (4:22);
-- Lecture 1.4 - Conditionals and Value Definitions (8:49);
-- Lecture 1.5 - Example: square roots with Newton's method (11:25);
-- Lecture 1.6 - Blocks and Lexical Scope (8:00);
-- Lecture 1.7 - Tail Recursion (12:32)
Week 2: Higher Order Functions
-- Lecture 2.1 - Higher-Order Functions (10:18);
-- Lecture 2.2 - Currying (14:58);
-- Lecture 2.3 - Example: Finding Fixed Points (10:46);
-- Lecture 2.4 - Scala Syntax Summary (4:13);
-- Lecture 2.5 - Functions and Data (11:50);
-- Lecture 2.6 - More Fun With Rationals (15:08);
-- Lecture 2.7 - Evaluation and Operators (16:25);
Week 3: Data and Abstraction
-- Lecture 3.1 - Class Hierarchies (25:50);
-- Lecture 3.2 - How Classes Are Organized (20:30);
-- Lecture 3.3 - Polymorphism (21:09);
Week 4: Types and Pattern Matching
-- Lecture 4.1 - Functions as Objects (8:04);
-- Lecture 4.3 - Subtyping and Generics (15:02);
-- Lecture 4.2 - Objects Everywhere (19:07);
-- Lecture 4.4 - Variance (Optional) (21:33);
-- Lecture 4.5 - Decomposition (16:57);
-- Lecture 4.6 - Pattern Matching (19:36);
-- Lecture 4.7 - Lists (16:20);
Week 5: Lists
-- Lecture 5.1 - More Functions on Lists (13:04);
-- Lecture 5.2 - Pairs and Tuples (10:45);
-- Lecture 5.3 - Implicit Parameters (11:08);
-- Lecture 5.4 - Higher-Order List Functions (14:53);
-- Lecture 5.5 - Reduction of Lists (15:35);
-- Lecture 5.6 - Reasoning About Concat (13:00);
-- Lecture 5.7 - A Larger Equational Proof on Lists (9:53);
Week 6: Collections
-- Lecture 6.1 - Other Collections (20:45);
-- Lecture 6.2 - Combinatorial Search and For-Expressions (13:12);
-- Lecture 6.3 - Combinatorial Search Example (16:54);
-- Lecture 6.4 - Queries with For (7:50);
-- Lecture 6.5 - Translation of For (11:23);
-- Lecture 6.6 - Maps (22:39);
-- Lecture 6.7 - Putting the Pieces Together (20:35);
Week 7: Lazy Evaluation
-- Lecture 7.1 - Structural Induction on Trees (15:10);
-- Lecture 7.2 - Streams (12:12);
-- Lecture 7.3 - Lazy Evaluation (11:38);
-- Lecture 7.4 - Computing with Infinite Sequences (9:01);
-- Lecture 7.5 - Case Study: the Water Pouring Problem (31:45);
-- Lecture 7.6 - Course Conclusion (5:34);
original post http://vasnake.blogspot.com/2015/11/scala.html
Комментариев нет:
Отправить комментарий