Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2015-11-26

Scala

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

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)