微信号:infoqchina

介绍:有内容的技术社区媒体

软件产品&工程团队5个变革理论;为什么应该学习Kotlin

2015-10-03 08:47 Q新闻

1
唯有变是永远不变
软件产品&工程团队5个变革理论


经过5年的任期后,Kellan Elliott-McCrea离开了Etsy。过去的4年,Elliott-McCrea是Etsy的首席技术官,在那之前,他是工程部的副总裁。在过去的5年内,软件产品和工程团队都经历了翻天覆地的变革。这篇文章宣布着他的离职,同时,Elliott-McCrea在文中详细阐述了指导他完成那些变革的五个理论。


早在2009年,Etsy作为一个大型的手工艺成品在线市场平台,正在奋力向外扩展。但是,Etsy网站的可靠性比它应该表现的要糟糕的多,其原因主要跟它的架构有关,该架构起源于DevOps之前的文化。开发人员,DBAs和系统管理人员都专注于他们自己的筒仓。由此而引发的部署既大型又罕见。并且开发人员无法接触产品。这就是DevOps之前的时代——第一场DevOpsDays会议于2009年在Ghent举行——所以在当时,这就是开发和运营web网站最常见的方式。


当Elliott-McCrea加入时,变革就已经悄无声息地酝酿着了,所以这也给他提供了一个测试他的理论的机会。


理论1:我们对软件开发的“一无所知”,应该被认为是一种事实。


构建软件是一个团队努力工作的成果,但是软件开发的大部分工具、流程和思维模式通常是个人开发者完成的。


理论2:技术是构建它的文化的产物。


文化是构建一切事物的基础。文化允许你以一种松散耦合的方式进行伸缩。并且,文化是你如何行动,而不是如何谈论。


文化并不意味着单一。正如Elliott-McCrea所说:“五年前,现实情况表明,更好的软件通常是由那种多元性的团队完成的,这种团队是由彼此互相关心的一类人组成,但是这跟该行业的自我形象却是对立的。”


理论3:软件开发应该被看作是不断学习和提升的循环,而不是从开始到结束的过程,或者是对正确性的搜寻。


Etsy每天要进行数十次的部署,这样有利于他们从中学习和提升。有趣的是,Elliott-McCrea说,“成熟是你懂得什么时候该做出权衡,什么时候不该。”


理论4:你可以通过全球范围内的优化而不是本地优化建立学习的文化。


通过共享的信念、工具和思维模式,使整个团队同时提升。依赖一些摇滚明星式的程序员,既不是高生产力的最佳解决方案,也不如整体提升一样令人满意。


理论5:如果你想进行长期的构建,唯一的保证是改变。


你当前的答案要么目前就是错误的,要么很快就会被证明是错误的。所以团队必须不断的提问,假设理论并测试直到找出新的答案。


工程团队变化最明显的方面是,它如何向世界展示自己。这种开放的文化带来了许多开源工具。其中有一些相当出名,比如StatsD,一个指标聚合器,Logster,从日志文件中生成指标。Etsy的展示也成为世界各地许多会议共同的特征, 在展示中,它的工程师从技术和文化方面论及了软件工程的方方面面。


2
新语言Kotlin
为什么应该好好学习它 ?


Mark Platvoet是一名热衷于研究新的编程语言、技术和方法的Java和.NET开发者。最近,他为JetBrains推出的新语言Kotlin所吸引,并于近日撰文介绍了这门颇具生产力的语言。


许多语言似乎都是源于对某种其它语言的厌倦。在Mark看来,Kotlin应该也属于这种情况。不过他觉得,JetBrains的工程师仍然将Java视为一门优秀的语言。只是,Java太成熟了,改进和增加特性比较困难,因为要保持向后兼容。Kotlin所做的工作就是吸取Java和其它语言的经验和教训,并以此为基础进行改进。


Kotlin处理null的方式是Mark最喜欢的特性之一。以下面的Java方法为例:

public void foo(Bar bar) { /*…*/ }


对于这样一个典型的方法,如果传入的参数为null,那么通常的处理方式是检查输入:

public void foo(Bar bar) { if (bar == null) 
throw IllegalArgumentException();
/*…*/}


如果调用该方法时传入了null,那么它会抛出异常,并提供有用的信息。但这要到运行的时候才能看到。如果方法定义本身就能明确表达不接受null参数的意图就好了。于是,上述代码可以进一步改进为:

public void foo(@NotNull Bar bar) 
{ if (bar == null) throw IllegalArgumentException()
/*…*/}


如此一来,像IntelliJ IDEA这样的工具在检测到调用者可能传入null时就会提醒开发者。这样的代码没错,但就是有点啰嗦。


Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如*Bar?*,而*Bar*类型的变量则不可为空。于是,在Kotlin中,上述Java代码就变成了下面这样:

public fun foo(bar : Bar) { /*…*/ }


Mark认为,Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。Mark还特别指出,他所说的表现力是指代码可以明确的表达开发者的意图,而且有良好的可读性。


Kotlin的互操作性是Mark提到的另一特性。Kotlin与Java的互操作性非常好。开发者可以直接从Kotlin中调用Java代码,而且不需要任何外观模式或其它中间逻辑;从Java调用Kotlin同样简单。Kotlin文件和Java文件可以自由混合。即使是现有的Java项目,也可以利用Kotlin,而那些经过严格测试的核心代码可以保持不变。Kotlin运行在JDK 6上,这将使Android开发者可以利用Java近几年的发展成果,比如Lambda表达式。


无独有偶。开发者Mike Hearn近日也在Medium上发表了一篇赞美Kotlin的文章,题为《为什么Kotlin是我的下一门编程语言》。Mike非常喜欢Kotlin,在未来5到10年中,他可能都会使用这门语言。Mike根据自己的经验将Kotlin的优势总结为如下几点:


  • Kotlin编译成JVM字节码或JavaScript——这不仅会吸引Java开发人员,还会吸引所有使用垃圾收集运行时的开发人员,比如使用Scala、Go、Python、Ruby和JavaScript的开发人员。

  • Kotlin来自业界,而非学术界——它解决了程序员现如今在工作中面临的问题。

  • 采用成本低——JetBrains提供了高质量的转换工具(可以实现Java到Kotlin代码的一键转换),而且特别注重Java二进制兼容性。开发者可以一次仅转换现有Java项目中的一个文件,整个项目仍然可以正常编译。

  • Kotlin程序可以使用所有现有的Java框架和库,并可以集成Maven、Gradle和其它构建系统。

  • 易于学习——Kotlin语法简洁直观,看上去非常像Scala,但更简单。 它不遵循特定的编程哲学,如函数式风格或面向对象风格。

  • 不增加运行时开销——Kotlin标准库非常紧凑,主要包含Java标准库的扩展。

  • 适合Android开发——借助像Anko和Kovenant这样的框架,Kotlin将在Android开人员中流行。


IntelliJ对Kotlin提供了良好的支持。


版权归属InfoQ,禁止私自抄袭转载。

回复关键词React | 架构师 | 运维 | 云 | 开源 | 物联网 | Kubernetes | 架构 | 人工智能 | Kafka | Docker | Netty | CoreOS | QCon | Github | Swift | 敏捷 | 语言 | 程序员


今日文章推荐


Twitter如何构建高性能分布式日志的

荐文|九月十篇精选干货技术文章

我为何不在生产项目中转向Go?

当当开源elastic-job 分布式作业调度框架

写代码这事儿,架构师你可以说不么?

投稿可勾搭:

邮箱:editors@cn.infoq.com

合作QQ:1073600161

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 规划还是演化?我对架构影响的思考 Power8极限算法挑战赛圆满落幕 多家国产品牌手机被经销商预装间谍应用,小米、华为、联想等上榜 PostgreSQL中BRIN索引的存储结构 提供给Android和iOS开发人员的UWP移植向导