FAQ
Scala levels: beginner to expert, application programmer to library designer

我看到很多刚开始学Scala的同学说很难, 其实他们说的一点没错!
问题是Scala是一个非常庞大的库,不该在一开始的时候就试图去学习它所有的东西。

Scala创始人odersky 把Scala程序员分为应用开发和类库设计两个层级,每个层级有三个进阶水平以及对应需要掌握的Scala技能


Level A1: Beginning application programmer 初级应用开发

    - Java-like statements and expressions: standard operators, method
    calls, conditionals, loops, try/catch
    - class, object, def, val, var, import, package
    - Infix notation for method calls
    - Simple closures
    - Collections with map, filter, etc
    - for-expressions

Level A2: Intermediate application programmer 中级应用开发

    - Pattern matching
    - Trait composition
    - Recursion, in particular tail recursion
    - XML literals

Level A3: Expert application programmer 高级应用开发

    - Folds, i.e. methods such as *foldLeft, foldRight*
    - Streams and other lazy data structures
    - Actors
    - Combinator parsers

掌握初中级应用开发的Scala技能一点都不难, 甚至比学Java对于的技能更简单。
高级应用开发的Scala技能有点难度。
Fold, Stream,Actors,Combintor parser这些概念在Java里都没有。

如果你都是谢谢应用程序,建议见学好应用级技能再进阶到类库设计级技能。

Level L1: Junior library designer

    - Type parameters
    - Traits
    - Lazy vals
    - Control abstraction, currying
    - By-name parameters

初级类库设计所需的技能能是你的类库API更加简洁和调用更类型安全。

Level L2: Senior library designer

    - Variance annotations
    - Existential types (e.g., to interface with Java wildcards)
    - Self type annotations and the cake pattern for dependency injection
    - Structural types (*aka* static duck typing)
    - Defining map/flatmap/withFilter for new kinds of for-expressions
    - Extractors

掌握高级类库设计技能,能使你的类库看上去跟Scala原生类库一致,给使用者更一致系统的感觉。

Level L3: Expert library designer

    - Early initializers
    - Abstract types
    - Implicit definitions
    - Higher-kinded types

*Implicit是专家级类库设计所需掌握的技能,新手最好不要用这个特性,滥用此特性会使程序可读性很差!

http://www.scala-lang.org/node/8610

--

吴雪峰/ Alan 敬上

--
您收到此邮件是因为您订阅了 Google 网上论坛的“Scala中文社区”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 scalacn+unsubscribe@googlegroups.com
要向此网上论坛发帖,请发送电子邮件至 scalacn@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。

Search Discussions

  • Fff at May 17, 2013 at 3:23 pm
    这种框架很好,便于初学者自己定位,赞一个
    On Wednesday, May 15, 2013, Xuefeng Wu wrote:

    Scala levels: beginner to expert, application programmer to library
    designer

    我看到很多刚开始学Scala的同学说很难, 其实他们说的一点没错!
    问题是Scala是一个非常庞大的库,不该在一开始的时候就试图去学习它所有的东西。

    Scala创始人odersky 把Scala程序员分为应用开发和类库设计两个层级,每个层级有三个进阶水平以及对应需要掌握的Scala技能


    Level A1: Beginning application programmer 初级应用开发

    - Java-like statements and expressions: standard operators, method
    calls, conditionals, loops, try/catch
    - class, object, def, val, var, import, package
    - Infix notation for method calls
    - Simple closures
    - Collections with map, filter, etc
    - for-expressions

    Level A2: Intermediate application programmer 中级应用开发

    - Pattern matching
    - Trait composition
    - Recursion, in particular tail recursion
    - XML literals

    Level A3: Expert application programmer 高级应用开发

    - Folds, i.e. methods such as *foldLeft, foldRight*
    - Streams and other lazy data structures
    - Actors
    - Combinator parsers

    掌握初中级应用开发的Scala技能一点都不难, 甚至比学Java对于的技能更简单。
    高级应用开发的Scala技能有点难度。
    Fold, Stream,Actors,Combintor parser这些概念在Java里都没有。

    如果你都是谢谢应用程序,建议见学好应用级技能再进阶到类库设计级技能。

    Level L1: Junior library designer

    - Type parameters
    - Traits
    - Lazy vals
    - Control abstraction, currying
    - By-name parameters

    初级类库设计所需的技能能是你的类库API更加简洁和调用更类型安全。

    Level L2: Senior library designer

    - Variance annotations
    - Existential types (e.g., to interface with Java wildcards)
    - Self type annotations and the cake pattern for dependency injection
    - Structural types (*aka* static duck typing)
    - Defining map/flatmap/withFilter for new kinds of for-expressions
    - Extractors

    掌握高级类库设计技能,能使你的类库看上去跟Scala原生类库一致,给使用者更一致系统的感觉。

    Level L3: Expert library designer

    - Early initializers
    - Abstract types
    - Implicit definitions
    - Higher-kinded types

    *Implicit是专家级类库设计所需掌握的技能,新手最好不要用这个特性,滥用此特性会使程序可读性很差!

    http://www.scala-lang.org/node/8610

    --

    吴雪峰/ Alan 敬上

    --
    您收到此邮件是因为您订阅了 Google 网上论坛的“Scala中文社区”论坛。
    要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 scalacn+unsubscribe@googlegroups.com<javascript:_e({}, 'cvml', 'scalacn%2bunsubscribe@googlegroups.com');>

    要向此网上论坛发帖,请发送电子邮件至 scalacn@googlegroups.com <javascript:_e({}, 'cvml',
    'scalacn@googlegroups.com');>。
    要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


    --
    L.F.
    --
    您收到此邮件是因为您订阅了 Google 网上论坛的“Scala中文社区”论坛。
    要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 scalacn+unsubscribe@googlegroups.com
    要向此网上论坛发帖,请发送电子邮件至 scalacn@googlegroups.com
    要查看更多选项,请访问 https://groups.google.com/groups/opt_out。

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupscalacn @
postedMay 15, '13 at 2:30a
activeMay 17, '13 at 3:23p
posts2
users2

2 users in discussion

Fff: 1 post Xuefeng Wu: 1 post

People

Translate

site design / logo © 2019 Grokbase