Kotlin在做什么:采访Andrei Breslav



关于Kotlin的技术材料并不缺乏,您可以学到很多有关协程或可为性的知识。 但是另一方面,仍然缺乏说明:开发语言的过程是什么样的? 如何做出决定? “最重要人物”的任务是什么? 他一生中还有时间做其他事情吗?

现在,当Kotlin 1.3即将发布时,我们问“最重要”的Andrei Breslav不是关于协程,而是关于完全不同的东西:从他对Kotlin所做的事情到心理治疗有用的事情。

-您是编程语言的开发人员。 你以前做过这样的事吗?

-在那之前,我教过很多编程知识,并且从事学术工作。 这是一项有关领域特定语言(DSL)的研究活动,本质上纯粹是推测性的,没有用户。 现在一切都不同了:通用语言,大量用户和与实际开发相关的任务。

“你为什么需要所有这些?”

-这是一个非常有趣的工程活动。 这是不寻常的,具有丰厚的回报-如果您成功地做点好事,就会收到很大的效果。 一次-在全球范围内,人们写的东西已经改变。 当我开始研究Kotlin时,很明显,这可能是具有大量用户的产品。 风险当然很高,但是动机也很高。 这很有趣,因为系统很复杂,涉及许多不同的知识。 也许这些是最重要的事情:产生巨大影响以及复杂而有趣的任务。

-这是技术人员的全部动机。 一般来说,在生活中-您为什么要这样做? 例如,您可能会成为政客或其他任何人。

-问题很复杂。 我足够早地选择了职业。 然后我做了什么,然后我喜欢什么,我为此花了很多时间。 我喜欢在学校编程,我编程很多,然后去大学学习。 然后他迅速转向教学,大约在八年的时间里,第一次全职从事此工作-与编程工作同时进行,然后最终转向Kotlin的开发。 我也尝试过科学,计算机科学,但是在学术界我不喜欢它。

-在公众看来,编程语言的发展就是计算机科学。

-好吧,在公众心目中,概念经常被混淆。 开发编程语言是工程,计算机科学是研究新事物,它需要某种科学的新颖性。 为了获得科学结果,必须至少以某种方式可以测量或证明结果。 对于编程语言,通常难以度量。 有人从事学术语言的开发-用Haskell语言撰写了大量的科学论文,并且它是专门构建的,以便可以从中证明定理。 用像Kotlin这样的语言来证明定理是极其困难的,因为这根本不是为了证明这一点。 从数学的角度来看,主流语言非常肮脏,很难将某些东西形式化。 人们尝试过,为此目的制作了这些语言的小版本。 事实证明,为这些小型版本编写的证据可能不再适用于大型版本。 不久前,Ross Tate和Nada Amin发表了一篇粗鲁的文章,内容涉及Scala和Java类型系统不健全的事实。 正是由于这样一个事实,即以前考虑的小模型没有考虑到真实语言的一个重要属性。

-你怎么看?

-没关系 主流语言很脏,因为这无关紧要。 没有纯粹的主流语言这一事实​​使很少有人受苦。 这没有明显的效果;尽管有这篇文章,人们都使用过Java,并将继续使用它。 与岩石相似。 例如,很长一段时间以来,人们都不知道Java类型系统是否可解决,是否有可能编写正确的编译器-后来证明这是不可能的。 那又怎样 实际程序仍然可以编译。 最初,使用Rock类型系统无法解决。 但这并不重要,因为我们仍需手动编写程序,并且不会编写任何现代编译器都无法编译的奇怪程序。

-什么重要?

-这是一个非常有趣的心理和哲学问题。 显然,不要惹恼人们很重要。 例如,根据Java的经验:我们知道,如果需要重复很多单词,就会很生气。 可以看出,现代Java在减少激怒方面是极好的。 Kotlin的发明主要是因为有些事情非常激怒,而Java没有开发。 您需要感觉到该系统并没有真正抵抗您表达思想的方式。 所以我脑子里有些东西,我想写点东西,如果为此我需要突破编程语言,那很痛苦。 也就是说,如果必须不断进行此操作,则很难(如果很少)那么正常。 我认为这是重要的情感因素之一。

我们现在看到一些民意测验表明,科特林是“地球上最受欢迎的语言之一,使用科特林的人非常爱他”。 很好 为什么会发生很难说。 首先,当然会有炒作的效果,因为语言是新的,当“新玩具”出现时,它本身就是这样。 但是看来,确实,科特林并不十分生气,也就是说,当您意识到他出生在脑海中时,与其他语言相比,他的抵抗力较小。 人们清楚地在乎他们表达想法的时间是短还是长。 对于他们来说,重要的是不要重复多次相同的事情。 编写程序后读取程序有多方便,这一点很重要。

在一段时间以来,人们一直在思考代码可读性的想法。 有几代人难以理解的编程语言。 后面的示例中最引人注目的可能是Perl。 例如,在过去,某些APL就是一个非常聪明的代表。 现在,或多或少,每个人都同意阅读程序比编写程序重要得多。 顺便说一下,程序比以前变得更大,更复杂,这也推动了这一想法。 我想以某种方式解决这种复杂性,以某种方式抑制它。 因此,例如,许多人讨厌样板代码-“明显的”代码,其中没有实质性内容,我想在阅读时跳过它,但仍然可以将错误隐藏在那里。

对于人们来说,重用程序中的某些结构很重要。 我不想写同样的东西一千遍。 我想给图书馆带来一些常规的结构。 而且,编程语言中的抽象始终不足以重用世界上的所有内容。 这是存在的法则。 世界上的一切都永远无法重用。 但是您可以选择一类常见的事物,并学习如何重用这些事物。 因此,例如,在Kotlin中,出现了一些抽象,在其他主流语言中,例如作为语言结构的委托属性或内联函数之前,这些抽象就不存在了。 其他语言尝试其他抽象。 例如,Scala有大量的抽象,Haskell具有很多其他地方都没有的抽象,等等。 所有这些都是为了确保可以重用某些东西,以便我曾经做过的事情以后对我有用。

这些事情显然很重要。 当然,周围的文化对人们仍然很重要。 如果有一个生态系统,一个社区,就有一个与某人交流,获取您的问题答案的机会,正在开发的图书馆,一些其他基础设施非常有帮助,人们觉得该系统是实时的,那么融入其中真是太好了。

-您是否以某种方式支持文化?

-我们非常努力地与社区合作,对我们非常友好,人们喜欢回答问题,向初学者提出建议,并讨论一些复杂的事情。 社区还活着,我们使用闲暇,那里有一些令人难以置信的人数-数以万计。 自然地,并非所有人都活跃,但仍然如此。 有许多活跃的用户可以互相通信。 我们与他们合作-我们自己回答问题,并努力确保一切都文明化。 我们还帮助组织用户组,如果我没记错的话,他们似乎已经不到200个。 这也是一个非常令人愉快的故事,看看用户组的地图很酷,这里有很多地方-从最大的技术中心到非洲我通常都不认识的国家/地区。 我们尝试支持社区中的积极分子。 如果有人写很多文章,做一些教程,写一些库,我们会努力突出,支持并给他们表达自己的机会。 我们举行KotlinConf会议,人们将报告发送到那里,我们选择最有趣的报告。 因此,我们正在与社区积极合作。

“我是否正确理解您自己也回答过?”

-我不是经常回答,我也不总是有足够的时间来关注这个问题,但是碰巧我会回答。 有时我们安排一些有目的的事件。 一旦有了视频驱动器 ,当我们在Twitter上收集问题并流式传输答案时,我就坐下来回答了问题。 在Reddit上问我任何事情也很成功。

-当我们寻找可以谈论编程语言,库等的人员时,事实证明,该技能“擅长编程”而该技能“善于讲述”-这些并不是那么常见。 您如何找到并选择自己的人? 一个必须同时考虑用户和代码的人应该怎么出来?

-幸运的是,这样的人需要数量有限。 显然,每个开发人员都应在某种程度上考虑用户。 从这个意义上说,如果一个人编程很好,但是却从用户那里提取了一些抽象的东西,那么我们不太可能找到与他共同的语言。 在某种程度上,每个人都应该照顾用户。 很少有人与用户打交道,即有这种倾向的人。 这与告诉长报告燃烧的能力不是很相关,这是一个略有不同的活动。 通常,说和写是非常不同的技能,有些人很高兴写出详细,清晰,可理解的文本,但同时又不喜欢讲话,因为这是一种不同的交互形式。 有些人会两者都爱。 这只是我的情况,但与参加某种现场对话相比,我更喜欢用幻灯片讲话。 幸运的是,我在TechTrain上有问答形式 :人们问我问题,然后我回答了。 因为每次演讲时,我都会感觉到我事先发明的幻灯片结构有某种错误,所以在这里,按照这种逻辑,故事应该有所不同,但是幻灯片在路上您不会改变,并且会干扰。

-通常的问题:是什么促使您做出第一份报告?

-现在,我要记住它的状态。 很简单地说,什么时候有第一份关于Kotlin的报告-我们在2011年的JVM语言峰会上宣布了Kotlin,并且有一项任务是尽可能大声地宣布该项目。 我们希望收集专家的反馈。 就在那一年,我去参加了前几场大型公开演讲,这是我第一次用英语演讲。 也就是说,我完全被市场需求所吸引。

-报告中有什么惊人的发现吗? 您对人一无所知?

-尤其不足为奇。 不过,在那之前,我教了很多东西,总的来说,基本的事情很清楚。 例如,并非所有人都来报告中找出一些东西。 我怀疑甚至没有一半的听众真的知道一些东西。 许多来演讲的人。 例如,当某人因某种原因而认识时,例如我(“ Kotlin的创建者之一”),人们之所以来到我的报告中并不是因为他们想了解有关Kotlin的知识,我需要提出一个问题,而仅仅是因为这是他们以前听说过的人的报告。 有些人展示自己,这既有建设性,也没有建设性。 有时来展示自己的人会提出非常有趣的问题。 我不确定他们是否意识到这一点,但是他们的任务是-他们想发表讲话,提出有趣的问题,因为他们有一些想法。 有时我想展示自己,但我无法提出一个有趣的问题,然后出现一些奇怪的问题。 好吧,仍然有些人想向演讲者或在场的每个人教一些东西。 有时候,一个人来时很有趣,而不是问问题,只需提出自己的见解,然后发表演讲。

-还有这样的人还在教你些什么?

-关于“授课”很难说。 也许是,但我只是不记得了。 但是很显然,当人们发表意见时,通常是具有代表性的-一群人是这样认为的。 从这个意义上说,这样的观点总是有价值的。 另一件事是,以这种格式表示它是否有价值-当您在报告中提出问题时-已经很难说了。 但是总的来说,任何观点,尤其是对我来说似乎不正确的观点都是重要的,因为重要的不仅是真实的事实,而且是人们的想法。 如果一连串的争论出现在某个人的头脑中,甚至是我可以反驳的争论,那么对我来说很重要的一点就是要知道它产生了,然后我才能与之互动。 原则上,这都是有用的。 另一件事是,这总是以不同的方式呈现。

在早期,即使Kotlin没有开始,我们也进行了各种有趣的对话。 一旦我们与斯蒂芬·科尔本(Stephen Colborne)进行了交谈,并且他与我们进行了很多争论,那就是在结肠很糟糕之后在右边写类型,您需要在左边写类型。 对于至少一定要沉迷于语言的每个人来说,很明显,这是生殖器与直率的人之间的争执-没什么,这并不重要。 Pascal,Scala已经很流行-它有什么区别,类型是写在哪一边。 从其他语言的结构来看,在更方便的地方,有必要写在这里。 但是有些人认为这确实非常重要,并且愿意花很多精力来讨论这一点。 这可能很奇怪,但是您仍然必须提出一些论点,因为这样的人并不孤单,它不仅仅是出现。 史蒂夫不只是坚持下去,其他人也不在乎-不,有足够多的人认为这很重要。 关于语法,这经常发生。 编程语言是一件相当复杂的事情,并且从这个领域来看并不太容易理解。 而且语法很清楚,语法很简单。 首先,许多人被教会了这一切的形成方式,而大学经常开设一门形式语法课程。 是的,即使您没有学习,也不难理解,因此对于语法有很多意见。 而且,进一步(运行时语义,类型系统等)的意见较少,因为难以理解。 遗憾的是,这里实际上有很多有趣的事情要讨论,但是基本上所有讨论的精力都花在了语法区域中的某个地方,无论多么遗憾。

-每个人都讨论他们了解的内容。 好吧,继续前进。 您不是一个人工作,而是一个团队。 团队还组成某种代表小组吗?

-当然了 当然,我们在团队中的人的意见对语言的发展起着重要作用。 并且选择团队以使意见相关。 通常,JetBrains是一家非常依赖狗粮的公司。 我们所有人都积极生产我们的产品(这是英文表达“吃自己的狗粮” -如果我们做某事,我们自己使用它)。 我们自己在Kotlin团队及其他团队中都使​​用Kotlin。 内部反馈最快。 您需要了解我们有一个特定的用户案例。 例如,在编译器中,没有其他人需要的某些语言功能非常有用。

-能举个例子吗?

-关于模式匹配的全球讨论。 在函数式编程语言中,习惯上有模式匹配,但在Kotlin中则没有。 只有一个相当有限的选择。 在某些时候,我们故意没有做全部。 它曾经被设计过,但是我们没有实现它。 对于一个相当脏的面向对象的编程语言,该功能足够大,复杂。 我们研究了实现此功能要花费多少的复杂性,并决定尝试不这样做,看看会发生什么。 已经尝试过了。 当然,事实证明,可以更方便地编写编译器。 以及其他所有内容-似乎大多数用户都不在乎。 当然,总会有一部分人知道存在模式匹配,并且他们真的想在相关的罕见情况下使用它。 但是,似乎像往常一样,超过80%的用例不需要此功能。这都是非常有趣的事情,因为现在Java试图将其视为模式匹配,而Brian Goetz和我已经不止一次地谈到了这一点。我试图激怒他,没有必要让Java变得如此复杂,因此在许多地方,一切都不容易。但是Brian说人们需要模式匹配,他有自己的观点。我不太了解他的论点有多强烈。但是现在我们有机会他们添加此功能,我们将看到他们成功了,然后在那里解决。

-如果添加。

好吧,那很有可能。从布莱恩的乐观程度来看,我认为他们迟早会增加。但是,尚需多长时间。应该注意的是,在Kotlin中根本就没有图案匹配的痕迹,而是有一些非常相似的东西。由于我们有智能广播,因此有表达的时候,就有了解构分配。通常,该语言涵盖了模式匹配用法中的很大一部分。我们不能只对他做复杂的事情。看来他们可能做不到。但是如果事实证明它仍然非常必要,那么对我们来说编写编译器将变得更加容易。

-您能告诉我们一些有关团队的信息吗?-您的生活如何?

— . . , full time-, , 8 . . 50 , . , , , , . - . . , , , JVM- . , Kotlin/Native, , , IDE , build- , . , , : , , , - .

— ? , , — « , , , »?

— , , , . -, . - . , - , , - . - , : ( ) , , -. , . , . : , — , , Q/A, , , , , — support Q/A. , . , , , , . , , . , , - . .

— - . , , , , , . ? , , — ? YouTrack , — .

— — . JetBrains . , - , JetBrains , - , - , : , , . . IDE , , IDE . , , - , - , . , - , - . , , . , , , — - 50 ad hoc . , , , , , - , , .

我们有以下方案:有子命令,子命令有团队负责人,信息通过他们。同时,在内部,很多事情都是独立,集体决定的。我们主要通过协商一致做出重要决定。通常,只有在不需要非常紧急的情况下,我们才会进行交谈,直到每个人或多或少地达成共识。在这种情况下,您可以快速,突然地做出决定:“我们做,我们不做,我们稍后再讨论。”但这是非常罕见的。用科学术语来说,这可能称为“同步组织”。

-工作会影响生活方式吗?

-非常有影响力。工作需要大量时间。

“事实证明您是24小时工作并且在办公室睡觉吗?”

-我不能24小时工作。曾几何时,我有一年的时间,每周要工作80个小时。第二年,我决定不再从事那样的工作,因为这在身体上非常困难。我必须非常注意工作时间和个人时间的分配,因为否则我会变得非常疲倦,停止思考并陷入悲伤状态。我每天工作固定的小时数,有意识地尝试在周末和晚上不工作。通常,我会尝试将时间用于办公室以外的其他问题。同时,我还有另一个项目,一个关于寻找心理学家和心理治疗师创业公司。这也是可行的,但又是另一种工作,我需要分配一定的时间。

-下班后上班吗?

— , : , — . , . - , — .

— : , ?

— , ? , . , — , , - — - , - , -. «», . , .

, . , , ( - , , , -) ( - , , , , -, ).

: . , - , . , — . , , , , . , , — , - , , , - . , , , , . , , , . , - .

曾经以为我会做些广告,但我的良心不知所措,因为现在我将开始做广告,他们会问我在哪里可以找到可以与我们合作的专家。当时我没有这个问题的答案,所以我去做一个可以帮助我找到这样专家的项目。事实证明,我并不是唯一想到这种事情的人。我找到了志趣相投的人,我们正在与他们一起做这个项目。

- , - . -: , . . , , , , , . , , , . , , . , , , - . , , , , . , , - . , , . , .

总的来说,我相信心理治疗是有用的,因此我尝试使其更容易获得。

-哪个触发器?我什么时候应该去心理治疗?

— . — , - : , , , -, — , .. , , -, , , -, , , , — 100%, . , , , , : «» — , , .

. , — , - , . , , , . , , , , , , - , , , , -, ( - ) — . , , -, , -, . , - , , - , . , .

— .

— , , , .

, — - , - , - . — ( , ), , - , . -, , , , . , , , , , . , -, .

— ? , - .

— . «» . mindfulness, — , . — , .. , , . , , , , . . — , . — , , .

, . , - , - . , , . : — -, , , - . , , , , , . , , .

. . , , . ? , , , , , . - , , , : « , . . , , , «», , ». . , . , . .

— , , , , , , - ?

— , , . , , , . - , , , « » « », « 1» « 2». , , . , . , , - , - , . , , , , . , , - . . , , , , , , . . , , , . — , , , , , - : , , , , , . , , . - , , , - , , - , . , — «».

— ?

— , ? , , , - . , , , . «»? , , ? , - , , , , , , . , «» , , , . , , , .

- , , , , — , . , , . . , , , , , , . , , , , . , . , , / , , . , , , , , , 25 , , . 21 , 18 — , , .

— , , . , . , .

— , . , , . , — , . - , - , , . - , - , , , , , . . , , — . , .

关于家庭有很多成见。例如,一个非常棘手的问题:与父母同住是好是坏?重要的是,要让很多人在“好或坏”类别中进行思考,但实际上,它是“有用或无用”的,您需要考虑一下。或者,例如,据我所知,您可以与我讨论我们的关系是一夫一妻制还是非一夫一妻制。对于任何人来说,没有普遍的答案,但是在文化中,确实存在,这是一个矛盾。在文化中,人们认为必须存在一种关系,并且它们必须是一夫一妻制。人们还认为他们应该是异性恋,这通常很奇怪。但是没有任何地方显示和证明它确实应该成为。关系可能不存在,它们可能不是异性恋,也不是一夫一妻制,如果人们有意识地选择这种关系并且互不伤害,则它们可能以任何方式进行一般的安排。另一件事是,其中某些功能很方便,某些功能不方便,某些功能是否有用。问题是如何选择。不是选择什么,而是如何。

-顺便说一句,您也正在科特林(Kotlin)建立文化。您是否对所有问题都有一个统一的答案?

-不了解我们想要什么样的文化,我们没有做太多的事情,我们需要做更多的事情。文化正在隐性地建立。起初,我们很少,而且我们以某种方式交谈,喜欢,一切都很好。然后我们变得越来越多,我们开始更快地成长,变得越来越明显,不同的人之间的沟通方式有所不同,有些事情行不通,我想改善某些事情。我们最近开始尝试培训:与一些外部人员一起,培训师可以锻炼从沟通到决策的各种人文技能。 Kotlin团队仅对团队领导进行了一次培训,这很有趣,我很喜欢结果。即使是团队合作,这也是很好的聊天机会。此外,沟通方式也有所不同:您可以喝啤酒,在生活中摩擦啤酒,但是有一种有效沟通的方法。我更喜欢第二种选择。这不代表您不必为任何事情而烦恼,但是您可以从富有成效的交流中获得一些成果,需要考虑一些事情-有后效应。这是一个很好的经验,我们不久前就做了,我想我们会再做一次。文化不是按照某种模式来构建的(“您需要那样”),它是从内部产生的。我们对自己的舒适度和效率有一个想法,我们互相交谈,逐渐使其同步,因此建立了某种文化。同时,一些现成解决方案的元素是从外部引入,处理,考虑和体现的。它是从内部产生的。我们对自己的舒适度和效率有一个想法,我们互相交谈,逐渐使其同步,因此建立了某种文化。同时,一些现成解决方案的元素是从外部引入,处理,考虑和体现的。它是从内部产生的。我们对自己的舒适度和效率有一个想法,我们互相交谈,逐渐使其同步,因此建立了某种文化。同时,一些现成解决方案的元素是从外部引入,处理,考虑和体现的。

-有一种文化,在这种文化中,明智的决策是这种文化的重要组成部分。

-老实说,与我交谈强调了这一点,因为当我看到一个人坚持某些东西而无法解释原因时,我会感到非常紧张。我开始担心一个人,基于这些难以理解的考虑,会继续做出决定,突然他会随风把他带到一个陌生的地方-那我们该怎么办?因此,当我与某人争论时,我常常会问“你为什么这么认为?解释!”

-大脑非常聪明,即使处于当前状态,它也可以完成“为什么会这样”的描述。

-是的,有合理化之类的东西。我有一种直觉的感觉,那就是这是怎么做的,我可以继续非常巧妙地解释原因,使论据适合答案。

-例如,左侧写的内容类型。

-是的这就是将“我喜欢”和“有这样的客观理由”分开的很好的情况。

. : , , . . : « , », - : «, , - », , , , . . - , , , , , , , .

, . , , , . , , , , — . , , . , . , , , , , , , — , : « , , ». , , - - , , , .

— - . .

— , , . . , , -, , , , . , , , . , , . , , — , . , , , , , , , , , , — . .

-特别是在某种形式的集会上,有15个人向您展示。

-是的,展示的人越多,越不愉快。不赞成的社会质量越大,越不愉快。因此,当我们进行交流时,正确做到这一点非常重要。

-您希望/建议我们的读者在哈布雷吗?

-我真的希望所有人在工作和生活中都能自由地做出决定。我认为,“自由”通常是有意识的。

-非常感谢!

, « », 19 Joker. , « » .

Source: https://habr.com/ru/post/zh-CN424033/


All Articles