这是对俄罗斯斯卡拉运动进行调查的最后一部分。 在
第一部分中,我从
Roman Grebennikov了解了Voronezh beau monde,C ++和Erlang,并从
Roman Timushev了解了第一次Akka和莫斯科会议的诞生。 在
第二部分中,我与
Alexander Podkhaluzin和
Mikhail Mutsyanko进行了交谈 :了解Scala,2007年,Scala Days,Scala Native,搬到Kotlin,这比Scala对银行有利,圣彼得堡,Eclipse,Jason Zaugg,IDE和Scala的第一场活动。插件。

在准备第二部分时,
弗拉基米尔·乌斯本 斯基 (
Vuspenskiy )指导我去了
亚历山大·波德卡柳赞 (
Alexander Podkhalyuzin) ,我们与他进行了广泛的访谈。 第二天,我收到了弗拉基米尔·弗拉基米尔(Vladimir)的一封信,但现在有了他的个人历史:Qiwi,Tinkoff的Scala,首次会议,旧博客的链接(为此特别感谢)以及Rúnar自2008年起以Java运行的功能主义,-这
仍然是眼睛的鲜血,至少是不寻常的。 此外,还有
罗马 ·埃利扎罗夫 ,
阿列克谢·福姆金和 尼古拉 ·塔塔里诺夫的故事。 雇用Scala开发人员,Coursera课程,“完美代码”,“ Demonic”编译,Kotlin设计,10,000行代码,Tinkoff互联网银行,Tinkoff,Play Framework,逝世的Flash,“ Sunrise”和圣彼得堡会议的功能-关于这一切,在削减三部曲的最后一部分。
弗拉基米尔·乌斯本斯基(Vladimir Uspensky):Scala的Coursera,Tinkoff和招聘功能
弗拉基米尔(Vladimir) :当时我在Qiwi工作,重构了许多Java代码,但仍然有很多水和样板。 我遭受了折磨,但以某种方式谦卑了自己。
一段时间后,我去了
Alexander Temerev和
Vlad Patryshev的博客。 据我了解,Vlad在Java实施方面处于最前沿。 我和他们一起阅读了有关Scala的文章,然后开始注意到对我来说很奇怪的构造,例如
Java中的options 。 我什至在生产中的某个地方启动了此选项。 RúnarBjarnason提出了更多的
Java奇特的
惰性错误处理和
更高阶Java并行性 。 所有这一切都令人发自内心地炸毁了大脑,并且想知道如何将其全部应用。
当我研究特定的示例时,例如从
Daniel Spiewak :
Scala for Java Refugees那里,这正是我所缺少的。 Java代码中的所有水和奇怪的不一致之处,例如
`_` vs `*` vs `?`
,都
`_` vs `*` vs `?`
,本质仍然存在。
它是Scala 2.7,并且说得通一点,它并不稳定。 许多项目已经尝试将其用于单元测试或案例类。 要将Scala添加到Java项目中,您必须
在Maven中配置
联合编译 。 但是我决定尝试为Qiwi的一个非关键项目增加支持。 一切正常-我很高兴,但这就是结局。
在Tinkoff和Scala实施中工作
突然,我被邀请到Tinkoff领导新的互联网银行的开发,该银行已在公司内部完全开发。 最初,我弄清楚了当前的任务,但是当我到达后端时,我意识到是时候实施Scala了。
当时刚发布的Scala 2.9具有现代语法。 如果细节不重要,那么时髦的并行集合非常适合快速并行运行。 Groovy的创建者
James Strachan表示 :“老实说,如果有人在2003年给我看过Martin Odersky,Lex Spoon和Bill Venners编写的《 Programming Scala》一书,我可能永远不会创建Groovy。”
选择Scala的另一个因素是,所有从事工具,语言,库或有关Scala编写工作的人都非常聪明和充满活力。 因此,有信心这是未来的正确选择。
在银行工作的时候,我开始去参加外国会议。 2012年的第一个
Scala日,奥斯陆令人讨厌的flatMap。 那时我遇到了
振亚布尔马科 。 现在我们有时在加利福尼亚已经在这里的海洋中漫步。
雇用Scala开发人员
逐渐写了一个网上银行。 根据《
全球金融》杂志 ,他在2012年成为俄罗斯最好的人。 对我而言,这是对“正常执行,这将是正常的”这一说法的确认,而不是非同寻常的事情。
奥列格·廷科夫(Oleg Tinkov)提出了银行的话题,这很有趣。 也许这有助于我们雇用优秀的开发人员-团队中有人,但我想扩大规模。 首先,我们在空缺中写了“ Java程序员Scala-plus”。 但是,为Scala开发人员在工作中提到Java可以切断那些不想与Java产生任何关系的人。 因此,我们将空缺更改为Scala高级开发人员。 这使我可以雇用一些我非常希望与之合作的人。
Facebook群组
我想了解总体上,谁在俄罗斯和莫斯科对Scala也有独立的兴趣,以及社区对此有什么想法。 没有会议或聊天,其主意是召集所有人。 他
在Facebook上建立了一个
小组 ,我们在其中计划了前几次会议。 没有聚会的聚会是什么会议? 我去创建,但是该组已经存在
-Roman Timushev已创建。 我们决定联合起来,并增加了
Misha Aksarin 。

第一次会议是
在Coursera上的Scala
反应式编程课程的借口下召开的。 许多人凝视着,但大约有20个人来了:他们见面,告诉他们正在做的事情和感兴趣的事情,讨论了课程中的练习并同意再次见面。
就这样开始了。
Roman Elizarov:关于Scala,完美主义和无情汇编的10,000行
JetBrains小组的负责人Roman Elizarov( elizarov )参与了Kotlin协程和图书馆的工作。作者注 。 在记录采访之前,我认为如果只从参与Scala的人员那里带走他们将是一场灾难。 持续的“崇拜”,或更糟糕的是,“幸存者的错误”。 因此,我决定绝对要在药膏中加一点苍蝇。
这更加困难-具有真正经验的人(由于某种原因而没有使用该语言)比在Scala中拥有零经验的仇恨者小一个数量级。 但是后来我想起了JetBrains小组的负责人
Roman Elizarov (
elizarov )的
职位 ,他在案子之间在Scala上乱涂乱画,这引起了包括我的在内的多次倦怠。 尽管存在负面影响,罗曼不太可能撰写有关该语言的传言。 一定有一个原因,即使用中的某种负面体验-事实就是这样。 与他的访谈下面就是这个,以及有关协程与Scala CPS插件的设计和连接的一些讨论。
2010年的案例
Roman Elizarov :在2000年左右,我用Java编写了各种企业。 因此,我遵循了包括Scala在内的JVM语言。 似乎我是在2005-2006年左右第一次阅读该语言。
当您抽象地阅读时,语法非常酷。 我记得阅读说明,玩转,我真的很喜欢一切。 在Java中,许多详细且难以使用的事情都可以在Scala中轻松完成。 那时,所有这些使我感兴趣,而不是从FP的角度来看,而是从务实的角度-在编写代码时。 但是,由于Java代码库已经很大,是一堆当前类,因此直到2010年这个故事发生时才可以在实践中使用。
2010年,我们来自美国,来自企业的合作伙伴感到无聊。 他们想要新颖,并且完全在Scala上编写了一个新的子系统。 他有某种Web界面,正在做一些简单的事情。 同时,这不是Play框架-只是一个Web服务接收到来自用户的请求,称为Java API。 一个普通的网站,用于执行某种内部交互功能。 合作伙伴加油,它成功运行,一切都很好。
当时我们是他们的承包商。 子系统的开发人员已经玩够了,并决定做其他事情。 我们的客户来找我们说:“伙计们,请问这个东西能为您提供支持吗? 她仍然使用您的API。” 太好了,这是-使用Scala的真正方法。 因此,没有人会允许我们在Scala中进行编程,因为一切都很艰巨,但是既然已经有一个项目,那就是原因。 实际上,这是Scala的首次生产经验。
Scala给人的第一印象是代码比Java更紧凑 。 Scala使您可以紧凑地编写复杂的东西。 该子系统大约需要10,000行代码,但是在Java中,由于类的原因,它将花费两倍的代码。 语法,用于数据传输的所有内部对象,甚至Java API的整个改编都非常紧凑。
Scala上的第一和最后10,000行
当开发人员离开时,他们将代码保留为未编译的形式-
只是代码而已。 我们尝试将其用作支持,但存在一个问题-编译。
编译Scala代码是一项追求。 该代码仅使用特定版本的Scala编译器进行编译-精确到点版本,补丁版本。
不再编辑较大或较小的版本 。
这对我来说决定了2010年Scala在企业中的命运,那里有数百万行代码。 很难想象如果您更改了次要版本的编译器而又不打算如何生活。
“你不记得为什么吗?”Roman Elizarov :我不记得为什么会崩溃了。 版本之间不断发生变化。 也许我们在错误的时间?
但是我继续监视Scala的发展,尽管事实是仅在企业中我们并未实现这一点。 结果,该功能已转移到其他Java应用程序。 在这家公司的Scala中不复存在。
这10,000条线是第一条也是唯一一条。 该代码在生产中使用了很长时间,但随后被其他服务解析并消除了。
特别是对于我的专业活动,这种经历留下了不可磨灭的印记,尽管如此,在某种意义上说,所有这些都需要兼容。 现在我正在做Kotlin。 仅仅花费不切实际的时间和额外的力量来确保所有内容和所有内容的兼容性就不足为奇了。 有时,大量时间不会投入功能,只是为了使所有内容兼容。 特别是,我过去的经验影响了这一点。
仍然不断记住Python。 关于兼容性,我们有两个错误:Scala和Python。 在兼容性方面,没有人愿意重复从2到3的Python过渡,也没有人希望像Scala这样。
“完美的代码”
-您通常想重做一些东西,以便所有内容都是“巧克力”吗?Roman Elizarov :我从事设计,
我一直想重做所有事情 。 我从不喜欢自己的所作所为。 在准备发布时,我发现了一些我想更改的内容。 一旦我发布了一些东西,我已经看到了其中的缺陷:它还没有完成,在这里我们必须从头开始重写它。 但这是通往无处可去的道路。 只有两种方法:要么我将无限地改进代码,然后再不发布该版本,要么我将发布该版本,它将成为Legacy。
您无法发布完美的代码 。
然后,我将一半的时间花在改进产品上,第二次花在与我已经发布的产品的兼容性上。 经验有助于提前“吸管”。 我发现我将必须尽快重做,并在发布安全网时花费大量时间以期待将来的变化。 当然,从头开始做一些事情而不必担心兼容性会容易得多。 但折衷方案是您要么做得完美,要么他们使用您的产品。 一个排除另一个。
Kotlin设计
Roman Elizarov :我一直关注Scala,因为当我们在Kotlin中进行设计时,我们会研究其他语言,包括Scala。 大约两年前,我们设计了Kotlin协程。 当然,主要的“灵感”是C#。 一切都是从他开始的,从那已经诞生了。 然后我们开始学习围棋。
当设计开始偏离C#并出现“延续”,然后出现“定界延续”时,我们再次开始研究其他语言。 在Google,我偶然发现了Scala-事实证明,其中已经有“
定界的延续 ”。
-您在谈论编译器插件吗?罗曼·伊利扎罗夫(Roman Elizarov) :是的。 同时,该设计与现在Kotlin中的设计极为相似。 当然,在语法上有区别:在Kotlin中,我们在开头写了suspend修饰符,在Scala中,您在返回值上写了
csp注释。 但是,将修饰符放在何处有什么区别:返回值的类型还是开头?
Scala中的设计与Kotlin中的设计非常相似。 我开始感兴趣-既然如此酷的设计,为什么它不飞起来呢? 为什么没有人在现代Scala中这样写? 他们向我展示了如何在Play框架中编写代码-那里没有插件。
每个人都写期货,我们有个很好的主意摆脱期货,因为这种设计更方便。 在科特林发生了这样的事情:不需要期货,有协程。 在斯卡拉,他们放弃了“续航”,没有飞。 怎么了
汇编的无意义和无情
在搜索过程中,我找到了最原始的
公告 。 那一年,“分隔延续”出现在Scala中。 在Scala中,所有操作都与现在在Kotlin中相同。
从这个意义上说,公告是指示性的。 它说:“我们做了“定界的延续”,看,我们可以写出和Lisp一样酷的东西。” 例如,我们以80-90年代的作品中的Lisp为例,并在Scala上重写了它:列表已停靠,这里是“ shift / reset”。 在Lisp和类似语言中,有一种用于
分隔连续的构造,称为“移位/重置”。 这个名字炸开了大脑-没有人知道什么是移位/重置。 既没有研究过Lisp的人,也没有从未见过他的人。
本公告的主要内容是这样的评论:“这意味着零。 我只是花了一些时间在Wikipedia以及其他一些地方来尝试理解这一点。 从我的角度来看,这些是令人费解的加数方式,我不知道正在获得或完成什么。” 他们解释了帖子的本质。
因此,这样宣布一项重要功能绝对是没有用的。 如果编写该应用程序代码的人阅读了此内容,那么他将不会收到以下问题的答案:“为什么我完全需要它? 它会解决什么问题?”作者没有提出这样的问题。
因此,该功能不会运行-不是因为它很糟糕,而是因为没有任务可以运行 。
“她误用了吗?”Roman Elizarov :是的,他们认为错误。 好像已经宣布了,但是他们没有解释为什么需要它以及可以解决什么问题。 但问题不在于“正义”或美丽。 顺便说一句,我们Kotlin也不知道如何撰写精美的博客文章,但是撰写适当的文章不足以撰写精美的公告。
正确的表达方式并不仅仅是对原因的解释,而是从API的角度进行的解释 。
我阅读了代码,并使用了shift / reset方法。 为什么在70年代称为移位/重置? 我试图找到过去的名字的作者,但找不到。 只是有人想出了这个名字。 对于现代程序员来说,这些话根本没有说什么。 他们什么都不是。
我对协程的处理如此之多,以至于我似乎应该了解它们的一切,因为我读了许多科学论文。 但是,当我看到一个使用“移位/重置”的代码时,我每次都会花时间去理解那里发生的事情以及根本为什么需要它。 似乎有些黑魔法,但毫无意义。
阿列克谢·弗金(Alexey Fomkin):已故的Flash,Voskhod和第一次莫斯科会议
Alexey Fomkin( yelbota )-程序员,演讲者,播客,开源贡献者,Scala发烧友。作者注 。 在退出
季穆舍夫和
乌斯 别斯基的事务后,莫斯科的整个运动
都由阿列克谢•福金 (
Alexey Fomkin)负责 。 此外,他还启动了
Scalalaz播客,并查看了其他播客:
DevZen ,
Debriefing和
Remote Talk 。 跳过本系列文章将是一个大错误。
从您的企业到Scala开发人员
Alexey Fomkin :我可能会很无聊-没有什么有趣的。 我有我的个人故事。 这对我来说很有趣,但是对读者来说可能很无聊。
实际上,我参与了动作脚本,后来我经营了自己的小企业。 生意倒闭时,我一无所有,因为那时Flash已经死了。 因此,我的简历中没有其他内容。 我一直在找工作,因为失去了一切而在情绪上感到沮丧。
我不认为自己是技术主管,甚至也不是团队负责人。 在他的公司失败之后,对于普通程序员来说只有野心。 我试图在Yandex中获得JS开发人员。 但是他们拒绝了我,因为我不太了解他-当然,这是事实。
然后我想到了Scala。 从2010年开始,我尝试了很多次-我喜欢这种语言。 我之所以尝试这样做是因为在我2010年工作的办公室里有Oaml。 我希望像OCaml一样仅拥有一个JVM-我喜欢它。 一边,我在Scala上写了几个项目,并在2014年开始在我的公司中申请。
有一个向Scala迈进的想法:有很多报价,很多项目,并且开发商供不应求。 然后我紧张起来,几个月后又拉起并更新了我所有的知识。 我很幸运-我找到了一名技术总监,并输入了Scala团队。
Voskhod,Skype聊天和第一次会议的组织
同时,我认为我们应该尝试煽动一些事情,直到这个话题在俄罗斯不是很发达。 他与
乌斯 别 斯基 ,
蒂莫舍夫和
阿斯卡林进行了交谈 。 原来,阿斯卡林是一个人呆着-乌斯别斯基在“行李箱上”。 我说过要不要聚会。 “是的,我们是。” 这是旧团队安排的最后一击。 当时在某个国家机构“ Voskhod研究所”,我去了那里,讲了Scala JS之类的东西,然后这个话题彻底消失了。 由于一切都非常糟糕,而且没有活动,因此我决定自己整理一切-我开始在Skype聊天中变得活跃起来,其中的洛矶山脉很闲逛。
-那里有几个人?阿列克谢·福金(Alexey Fomkin) :我不记得了-在现代聊天中他们并不多。 主要骨干是10-50个人,他们经常说话。 剩下的来吧,去问问题-就像现在一样。
那是2015年:Skype聊天,Scala.js,与他工作的公司的第一次会议。 我们强大地使用了Scala,并推广了Scala.js。 我在播客中访问了各种JS开发人员,谈论了Scala.js,并拜访了Meetup。
2016年,我们开始播客。 我哭了一声,回应了很多人。 原则上,除了
塔拉年科(Taranenko)之外,几乎所有人都还剩下。 然后
Grigory Pomadchin和
Olya Makhasoeva参加了 。
-有没有人帮助过这些手套? 当你离开时,我很沮丧-好像一切都消失了。Alexey Fomkin :Max Pavlov在公司内部提供了帮助。 他会编程,但会更多经理。 我参与了演讲,Scala部分,Max在组织方面提供了帮助:场所,设备,注册。
一切都是由
Data Monsters ,aka Flexis,aka Adi Sait赞助的–在不同时间使用不同的名称。 那时我在那工作。 我在2018年度过的另一个聚会。 他一个人。
尼古拉·塔塔里诺夫(Nikolai Tatarinov):游戏框架,第一门课程和mitaps的圣彼得堡分公司
Nikolai Tatarinov是SPb Scala Meetup的前组织者SoundCloud的开发人员。作者注 。 现在介绍一下mitaps的
圣彼得堡分支 。 尽管它们开始不久,但已经发生了9个事件。 就表演的质量而言,他们大大提高了标准:他们的
YouTube频道 ,现场直播。
组织者之一是
尼古拉·塔塔里诺夫 (
Nikolai Tatarinov) 。 尽管现在他已经因搬迁而退休,但我向他提出了标准问题。 尼古拉(Nikolay)谈到了语言的进入,运动的发展,对2.0版之前的Play框架的状态和
Actor Messaging的命运产生了轻微的影响。
播放框架
Nikolai Tatarinov :在2012年的第一份工作中,我们使用了第一个Play框架。 它是按照Rails的样式制作的。 这很有趣,因为我们有一个易于更改的应用程序。 但是它处于原型状态-并没有发展成某种生产系统。 那里的一切都混合了-并且发展了。
第一个Play框架是Java和Groovy。 , - — - Python-. , Maven Sbt. —
Play Framework Play Framework .
, Play Framework , . — , « ».
Play Framework, , Scala, , — . - Play — . , — , . , . Play Framework , . , .
C Play Framework . , - , Scala . .
2013 — «
Secon »,
. , — , - . , Scala. - , Scala Coursera.
Coursera
«
Scala ». , , . , — , , . , , Scala .
Guava 7- Java. : . . , , , .
Scala
: 2014 . , , - Scala. 2015 ,
Actor . ,
Dialog , .
— Dialog Actor?: . , Actor, Dialog. , Actor. , , .
, Actor, . Scala — . , Scala, - , — .
- Scala , —
, . - , . , , .
, , . , , Java . — , . , - , . Scala.
, , Scala. SoundCloud. Scala.
: .
IT Global Meetup — IT-, 2-3 . . —
FProg Spb . : , , , , Coq.
. , Clojure, , — , Coq, , . .
, Scala. IT Global Meetup . , «Java Scala». , . , . , eLama, - , , Scala.
, Scala-, 50. Scala, .
2016 . , , . Slick, ,
Vodka .
Scala- 2017.
, , , . , . . eLama" — .

Meetup DINS. , . — . , Meetup . , , 60-70 — . - .
. . , - . , -
Excelsior JET, .
, , .
PartialFunction .« » —
eax.me , , Scala 2013 . , ,
.
ScalaConf 2019 — (15 ) . Scala 26 . , « Hskell», — , Scala. ScalaConf 2019. .