马丁 Odersky访谈录所想

弘丹的新书《时间之布置:让各国一样分钟为前途增值》当当热卖中,即便爱弘丹的篇章,欢迎点击链接打新书

Odersky以访谈中援引了Databricks给出的Scala编码规范,还有lihaoyi的文章Strategic
Scala Style: Principle of Least
Power

老是你想假诺先河实践任务时,“及时行乐”的猴还晤面提出反对意见:“不,我们先戏同样会合吧。”所以,当你想要写篇稿辰时,你会面先失冰橱看看有没有发啊吃的,然后还打开优酷看看录像,再打开网易看看时的看好。等而想使起来执行任务时,已经没!有!时!间!了!

val votesByLang = votes groupBy { case (lang, _) => lang }
val sumByLang = votesByLang map { case (lang, counts) =>
  val countsOnly = counts map { case (_, count) => count }
  (lang, countsOnly.sum)
}
val orderedVotes = sumByLang.toSeq
  .sortBy { case (_, count) => count }
  .reverse

唯独事实上,在面前几单月,他啊还没有做,到了最终一个星期,他重复起行走,然后据此生缺少的日子完成任务。

for {
    elem <- database.get(name)
    addr <- elem.data.get("address")
} yield addr

从不收日期的蘑菇(没有了日期)比如,看望家人,磨炼,追求要等

交代说,这多少个访谈没有提供最多Scala的养分(不知是否翻译的题材),总觉得Odersky在给一些有关语言的中肯问题平时,显得闪烁其词。即便Odersky搬起了沃尔玛弥利坚、高盛、摩尔根Stanley来压制阵,却反为本人底气不足的发。Scala不好的有些依然无与伦比多了,它会伤我们本着Scala做出正确地认清。Scala待解决之题目依旧尽多矣,lightbend任重而道远。归根结蒂,从同开始,Odersky没有针对Scala特性做出具有控制力的统筹,缺少收敛,导致群feature良莠不齐,败坏了Scala的声望。

如您想明白答案,你得望明天底之TED视频。演说者提姆(Tim)Urban用相当幽默诙谐的语言,讲述自己的拖故事,并分析了俺们拖的原由。

如此的代码即便简单,却不可能好地反映作者的意向。即使正好地给与中间步骤命名,意义就越发透亮了。

发收尾日期的拖延(短时间的拖)

Martin Odersky

登时为吃自身想开一句古老的成语“心猿意马”,当你无所用心时,就一定给您的大脑被“猴子”控制了。大家的古人或者分外精晓的,这多少个成语分外地像。

马丁 Odersky言简意赅地受出了区区个编写Scala代码的规格:

提姆用异常像简单的画面解开了便于拖延和不拖延人里大脑的不同。

这,这样的专业是否是好之Scala实践也?Odersky用“保守”一词来评价这同样业内,不知该本意怎样?

您发出拖延症吗?拖延症的心弦到底是怎想的?他们的大脑是怎么运行的?

val arr = // array of ints
// zero out even positions
val newArr = list.zipWithIndex.map { case (elem, i) =>
  if (i % 2 == 0) 0 else elem
}

// This is a high performance version of the above
val newArr = new Array[Int](arr.length)
var i = 0
val len = newArr.length
while (i < len) {
  newArr(i) = if (i % 2 == 0) 0 else arr(i)
  i += 1
}

– THE END –

ThoughtWorks的TW洞见每当5月公告了对Scala之父Martin
Odersky的访谈
。Odersky的回答显得言简意赅,仔细分析,依然会从中得到多暗含的信息(即便可能是负面的信息)。提问的为主首假如言语的怎么着。Scala是一致门户极富有吸引力的言语,似乎天生具备同样种植气质,轻易可以吸粉,但招黑的力量吗未遑多为。它如同是起象牙塔里钻出来的,但与此同时当过剩大型项目和制品面临获取了行。有人转发了它,又有人之后背弃了她。假若说Ruby的助力是Rails,那么推动在Scala在社区被成长之,其实到处可见Spark(Spark)的影。

享用温馨之阅历。通过投机的更被听众精通拖延症的平日行为。

对第一接触,我个人的接头是当运Scala特性的时光,要留心打败,不要去游玩来Scala语法中那多少个奇技淫巧,从而让代码变得别扭难领悟。Twitter的有些工程师之所以对scala获得出牢骚,多数呕吐槽点虽然是在代码的可读性和维护性方面。第二沾同样是为化解之题材。Twitter的文档Effective
Scala
从而例子阐释了为中等步骤命名的重中之重。如下例子:

语言,于描述自己的毕业杂谈的故事时,他还起了一个小的笑话。他说学校由来电话:“这是我们所显现了的无限深的舆论。”现场都发生掌声了,他才揭开谜底,这是借的,实际上,他的杂谈写得稀不佳。

斯帕克(Spark)的API设计是跟Scala
集合类设计是同样的函数式风格,里面具体的兑现为追求性由此了命令式,你得见见Scala集合里面的贯彻函数为了性为由此了诸多var。

本条TED讲演,我看了少数全副,每一样赖都会晤受讲演者逗笑,看罢将来,又会陷入深思。

尚好发一个Spark,是Spark拯救了Scala。可惜,Spark(Spark)的编码规范也非拥有Scala范儿。

提姆(Tim)真的凡一个充足非凡的拖延症患者了。梁冬以《梁注庄周》的节目里讲过:嗬吃您痛苦,什么就是是您的使命。

如果我们读Databricks给来底编码规范,会意识Databricks为了性考虑,更倾向于用命令式格局去行使Scala,例如,规范指出使用while循环,而无for循环或者其他函数转换(map、foreach)。

假若想使打败拖延症,就差不多发表“理性决策者”的打算,而休是由于猴子来决定而的大脑。当您当“及时行乐”
时,就指示自己,你又吃猴子控制了。

val votes = Seq(("scala", 1), ("java", 4), ("scala", 10), ("scala", 1), ("python", 10))
val orderedVotes = votes
  .groupBy(_._1)
  .map { case (which, counts) => 
    (which, counts.foldLeft(0)(_ + _._2))
  }.toSeq
  .sortBy(_._2)
  .reverse

提姆(Tim)深受拖延的煎熬,他即使起来研讨拖延症,写拖延症相关的博客作品。

不过,一个啼笑皆非的现状是,Spark(Spark)的多多源代码并没有依据Scala推崇的特等实践。Odersky对是的解释是:

尚无了日期,怪兽就未会师出现,所以多时段,都是“及时行乐”的猴在掌舵。长时间的拖,不容易给发现,但私下折磨着众人,是一模一样种植生活之钝痛感,甚至让有些人口患有上了性冷淡。短时间的拖延,让部分口相差自己的巴更加远。

不过固然自身个人的惯,更赞成被前者(使用zipWithIndex结合map),它采取更为从简之函数式风格。鱼与熊掌,不可兼得!这是一个题目!规范从可读性角度考虑,不提出用Monadic
Chaining。例如,下边的代码用连续两单flatMap:

讲演幽默诙谐,现场的掌声与笑声不决。

即便采纳情势匹配(Pattern
Match)确实是那多少个好之Scala实践,但不怕这么些事例而言,其实Monadic
Chaining的不二法门得以据此for comprehension来改写。非常简单,可读性极佳:

自家是一个轻拖延的人口,花生童鞋(我爱人)很少拖延,我耶特别惦记精通,我同外之间到底发生啊分别?


轻宕人的大脑是这样的。

差一点年时啊!再过几年,Scala会吗成为今天黄花呢?至少Java的上进趋势已起威胁Scala了。而JVM的变异是否又会越为Scala的演进造成障碍呢?倘使还要考虑版本兼容问题,Scala的以后版本遭受堪忧啊。想想自己还也Odersky感到厌烦也。

人生是短的,没有那么多日子足以拖延,要就行动。正而自当自序里描写的:人生之光阴量化成生命格子,赤裸裸地呈现在温馨前边,本以为遥遥无期的人生巅峰,此刻却触目可及。你将什么填写满生命之960单格子?每逝去同天,你的生就是掉了同等上,每逝去一个月份,你生之格子就不见了一个绳。想如若贯彻巴,最好这就开行走。

Odersky以访谈中言语到了有些针对前景Scala的规划,包括Tasty与Dotty,前者是为缓解Scala二迈入制不兼容问题,Dotty则是啊Scala提供新的编译器。不过,Odersky的应令人黯然,二者的真推出还待拭目以待几年日。

无谋面拖人之大脑是这么的。

class Person(val data: Map[String, String])
val database = Map[String, Person]()
// Sometimes the client can store "null" value in the  store "address"

// A monadic chaining approach
def getAddress(name: String): Option[String] = {
  database.get(name).flatMap { elem =>
    elem.data.get("address")
      .flatMap(Option.apply)  // handle null value
  }
}

拖延

标准提出,改写吗重新有着可读性的法子:

何以战胜拖延症?

书图:来自ThoughtWorks洞见著作《SCALA之父MARTIN
ODERSKY访谈录》中之马丁(Martin) Odersky。

外老是写论文如故这样。更夸张之是外的毕业杂谈,他该花1年的日来就毕业杂谈,他的计划是这样的。

  • 尽心尽力用力量弱的力量;
  • 于中步骤命名。

3

// A more readable approach, despite much longer
def getAddress(name: String): Option[String] = {
  if (!database.contains(name)) {
    return None
  }

  database(name).data.get("address") match {
    case Some(null) => None  // handle null value
    case Some(addr) => Option(addr)
    case None => None
  }
}

就此拖延症的网出两个角色组成:猴子,停止日期怪兽,理性决策者。由此发生收尾日期,拖延症患者还不至于拖延地尽离谱。

lihaoyi的文章Strategic Scala Style: Principle of Least
Power
勿是一个专业,而是相同客Scala最佳实践。内容囊括对不变性与可变性、接口设计、数据类型、分外处理、异步、依赖注入的辨析与提出。值得一念。

提姆(Tim)就是这么的一律各项拖延症患者,他是一致各学士,需要写过多舆论,每一次写杂文,他还会晤被自己做计划,他召开的计划是如此的。

不过Scala又未克离开JVM,否则Scala与Java兼容带来的惠及就消失了。庞大的Java社区一向是Scala可以汲取的资源为。Scala会否成也JVM,败为JVM呢?

也就是说,“及时行乐”的猴一向会扰乱理性决策者,甚至赶走理性决策者,由好来挥大脑。爱宕的口,也许你的大脑平时让“猴子”控制。猴子只关注两起事:简单和兴高采烈。所以,爱宕的总人口勤会举办片简便的事体,或者是于好发快感的政工,比如浏览八卦信息等等。而理性决策者会采取去做一些遥远的,困难的业务。

Scala属于语言中之“骑墙派”,只要你足足高明,就可知在OO与FP中跳转如意,怡然自得,如鱼得回。所谓“骑墙”,反倒成了有超强适应能力的“快心满意”,何乐而不为?

基于是否来收尾日期,拖延分为二种:

眼看说不定是Scala采取多范式的首要原因吧。即使Scala借鉴了许多函数式语言的特性,例如Scheme和Haskell,但Scala并不曾强制我们在编辑代码时从严坚守FP的口径。大家要以OO与FP之间画一长长的线。在代码的底细层面,Scala要求我们努力编写没有副效率(引用透明),提供组合子抽象的函数式风格代码;然则以有的景下,又同意我们让位于OO的主政。

手绘很有趣。PPT上之手绘很形象,尤其是大脑里“及时行乐”的猴。

他的演讲有以下几点值得借鉴。

是视频值得多看几整个,每一样整个,你还会晤发生新的获取。

4

本身深信大部分且发出拖延的习惯,有些耽搁是万分易察觉的,比如,没有当终结日期前就任务,有些耽搁是天经地义觉察的,比如,想要变工作,一再拖延;即便发期待,三年过去,还从未起始走……

5

1

万一截至日期就是好吓走“及时行乐”的猴的怪兽(Thepanic
monster)。截至日期临近时,这多少个怪兽就会师下,吓走猴子,理性决策者重新来指挥大脑,拖延症患者这才会全力地好任务,追赶了日期。

爱拖延的人头,和免便于宕的人口里究竟暴发什么异样?

但人生并无是各国起业务还发生完日期,没有了日期的蘑菇,才真正影响在我们。

提姆在演说受到连没言语到拖欠怎样战胜拖延症。遵照提姆(Tim)的享受,我觉着制伏拖延症的重点是抒发大脑的悟性决策的力,而不要为“及时行乐”的猴的支配。

非明了您是不是发类似之心得。明明清楚,一件职责在1周将来要形成,最最先几龙,你没有磨唧唧,根本没出手,等到只剩余1-2上了,你开焦急,你开受夜,拼命地赶工。在得了日期的末尾一刻,你到底成功了任务,长长地舒了同样人暴。一面子疲惫,顶在些许仅仅浓浓黑眼圈的若,在心中暗暗发誓,未来又为决不拖了,再为无惦念感受于了日期前赶工的状态了。可是,下同样不成,你依旧拖延到最后一刻又形成任务。

结果,3龙之后即使到毕业随想了,他尚一个字都没写。他忙绿,起先奋笔疾书。用72钟头写了90页的杂谈,连续两上早晨通宵熬夜,终于当终结日期此前,交高达了毕业杂文。

而,生命是爆发了日期的,假如坐每月作为一个格子,以80春秋当生命之顶点,大家的人生呢就可有可无960个格子。用同摆设A4张绘制24×40底报表,一生之早晚就是碰面显现于您眼前。

您发现区别了为?两看似人的大脑里还生理性决策者,可是好宕的人数的大脑里发生个“及时行乐”的猴。

只是人生并无是各级起事还暴发收尾日期,大部分事务是从未有过收日期的。

2

当即为我想到李笑来于《把日子作为朋友》这本书里提到的,“只有学会是地怀念才表示真正提高成人”。他爆发描述一个画面:一个大猴子在用力地“教”一众小猴子的情景。那同提姆(Tim)的意来同过渡的处在,假诺您的大脑连接给“猴子”控制,那么你还没当真发展成人。

自己在《时间的布置》这本开之自序里吗说到生命的格子。要是您一向延宕,你以浪费的凡你的人命。

提姆(Tim)的发言异常有意思,他拿拖延症患者的平常生活描绘地非凡像。

坐自己好呢是拖延症的重度患者,即使,我表面看起挺有行引力,只有自己身边的极致亲密无间的红颜知道,我究竟出多易宕(比如说花生童鞋,每一天晌午睡觉都是当他的往往催促促下才开洗)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图