原创分享 Go 是编程语言世界的 “特斯拉”

bigwhite-github · 2020年12月01日 · 最后由 cch123 回复于 2020年12月03日 · 239 次阅读

img{512x368}

Go 技术专栏 “改善 Go 语⾔编程质量的 50 个有效实践” 正在慕课网火热热销中!本专栏主要满足广大 gopher 关于 Go 语言进阶的需求,围绕如何写出地道且高质量 Go 代码给出 50 条有效实践建议,上线后收到一致好评!78 元简直就是白菜价,简直就是白 piao! 欢迎大家订阅!

img{512x368}

本文翻译自《GO — The TESLA Of Programming World》 - https://medium.com/globant/go-the-tesla-of-programming-world-a3ad8584723e。** 内容有改编 **。

免责声明:本文的内容仅用于娱乐和提供信息。我强烈建议读者不要基于这篇文章来进行专业领域的决策。这里表达的观点仅是作者本人的观点,绝不代表作者所属任何组织的观点,思想或意识形态。

缘起

img{512x368}

回味着晨起后的五谷豆浆在口中的余香,反思着二闺女四个月来的成长情况,一篇关于Go 终于拥抱泛型的文章映入眼帘,紧接着就是 3000 多辆中国制造的出口欧洲的特斯拉 Model 3 汽车抵达比利时泽布吕赫港的消息。一个奇怪的想法油然而生并钻入了我的大脑:如果说 Go 和 Tesla 是通过 “如何不陷入困境并对未来进行超前思考” 而收到回报的新典范,那么保留了父母物种复杂的身体解剖结构的新生婴儿如何成长和发展自己的性格和态度呢。这就是让我感觉到Go 确实是编程语言中的 TESLA的原因和驱动力。

TESLA 在汽车世界和 Go 在编程世界中的崛起和成长有着惊人的相似:

  • 两者的诞生都打破了他们各自领域中已约定俗成的做事方式的束缚,并提出了一种新的高效方法来完成相同的事情;
  • 两者都取得了惊人的成绩,并按照各自的增长计划前进,并似乎正在赢得这场战斗;
  • 两者已完成的和目标都是保留各自领域的优秀部分,并在硬性方面有所改进;
  • 两者都将成为各自领域帝国的未来。

开端

与普遍的看法相反,是通用汽车而不是特斯拉生产了世界上第一批量产的电动汽车,名为EV1。这辆车仅租赁而不出售,在生产了几年后,通用汽车召回了所有 EV1 汽车并销毁了它们!这促使马丁·埃伯哈德( Martin Eberhard)和马克·塔彭宁( Marc Tarpenning)启动 TESLA(最初是 TESLA 汽车公司)来挑战大型汽车制造商,并引领世界进入零排放的出行方式。

在使用 Go 之前,Google 的开发人员面临着编译时间,代码可维护性等问题,这些问题直接影响了生产力。另外,他们需要一种具有更好的并发支持的编程语言,以更好地利用多核处理器的特性。同时更易于学习,易于实现,编写更少的程序代码。Google 当时主要使用 C++,并且对代码中的任何问题或较小的修改都将花费一天多的时间。C++ 的另一个缺点与它的内存管理模型有关:内存的分配和释放不是动态的,并且如果程序员没处理好内存分配与释放事宜,就会导致内存泄露,导致应用程序运行变慢并最终崩溃。

在 Go 之前的时代,在项目开始时,需要选择要使用的编程语言:使用 Python 可简化操作,但也放弃了内存,CPU 管理和可移植性;使用 Java 可利用其垃圾回收、自动内存管理和可移植性,但却以放弃简单为代价;选择其他诸如 C++ 之类的语言则具有复杂的内存管理模型,并且没有内置的垃圾回收器。走进 Go:一种简单易学的编程语言,由 Rob Pike 等设计的一种带有内置垃圾收集器(比 Java 中的垃圾收集器简单得多)的语言,支持静态编译并支持并发编程。

经过上面仔细剖析,可以注意到 TESLA 和 Go 的成立都是由于出现了机会。一个触发了他们各自的创造者开发出一种方法,试图解决各自领域中 “当时” 缺点的机会。

自持 (自举)

电动汽车最重要的组件是电池,而对于编程语言来说,其最重要的组件则是被称为编译器的软件。TESLA 的埃隆·马斯克(Elon Musk)最近宣布,他们将开发一种 “tabless” 电池,这将有助于为其车辆提供更好的续驶里程。重要消息,TESLA 将自行生产这些电池。

为什么特斯拉一开始就没有自己的电池制造部门?没有具体的原因,但特斯拉优先考虑在汽车制造方面获得他们需要的专业知识,然后冒险为他们的汽车制定内部电池生产计划。

Go 编译器是 “语言实现自身” 的一个典型案例。在Go 1.4 版本之前,Go 语言的编译器是用 C 编写的,后来被用 Go 编写的代码取代了

这样的自举变化提供了诸多好处,比如:可以更好地控制编译器,因为 Go 更简单,这使得调试编译器问题更快更容易。此外,Go 还对单元测试和性能分析提供了出色的内置支持。

进一步阅读:对于你们当中好奇心重的人,在下面的资源链接中提供了一些资料,这些资料解释了对 Go 编译器进行更改的动机。https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8/edit

创新

在当今竞争激烈的世界中,创新一直是成功的关键所需。TESLA 和 Go 都采用了颠覆性创新的方法。具有破坏性并不意味着新进入者必须挑战/修改/改变已经建立的完成任务方式的方方面面,而是在当前趋势下采取一种不同,更好,更简单,通常更有效的方式来完成任务。

根据维基百科,颠覆性创新是指一种创建新的市场和价值网络并最终破坏现有的市场和价值网络,取代当前已建立的市场的领先的公司,产品和联盟的创新。

TESLA 通过几乎不存在的电动汽车制造提案进入了以燃油动力汽车为主的汽车制造市场。TESLA 保留了久经考验的车辆空气动力学设计,但彻底改变了这些车辆自我推进的方式。自从他们的第一款汽车问世以来,大约 12 年之久,TESLA 便将这场斗争推向了传统汽车制造商的家门口,而这些传统汽车制造商的生存受到了威胁,除非他们也通过创新。TESLA 引领着交通的未来:零排放,可再生能源驱动的车辆。

Go 是建立在现有编程语言,例如 C,Pascal 和 Oberon 的久经考验的优势之上的编程语言。摆在 Go 面前的最大、最复杂的难题就是:如何实现简单和最小化。C 语言已经很简单,但是 Go 将简单性提高到了更高的水平。Go 以其在学习和实现方面的简单性以及遵循一种简单的方法来实现复杂的编程概念(如并发性)而广受赞赏。最初,Go 旨在解决 Google 的内部编程障碍。尽管技术进步意味着多核处理器从 2006 年开始成为标准,但没有一种编程语言可以充分利用这种处理能力,从而导致更快,更好的代码执行时间以及对运行代码的基础硬件和软件基础设施的有效利用。

颠覆性创新方法从 Go 如何处理某些编程范例得以反映出来。Go 允许使用 OOP 样式的语法,但实际上它并不是面向对象的语言!与其他 OO 语言一样,它具有类型和方法,但是缺少类型层次结构。Go 对继承概念的理解与 JAVA 等其他 OO 语言所追求的完全不同。与 Java 中需要两个关联类进行显式声明不同,Go 根据某些合理的条件隐式计算类型关联关系。

尽管进入了已经很拥挤的编程语言世界,Go在短短的十二年间就引起了巨大轰动,可以说是最受喜爱,使用最多和增长最快的编程语言之一。根据当前的市场报告,Go 威胁着编程语言中的巨擘 Java,并且被广泛视为未来的(头部)编程语言。

成长

TESLA 成立于 2003 年,当时不为人知。2008 年,其首款产品发布,到 2020 年截至 7 月,TESLA 已超越丰田,成为全球最具价值的汽车制造商。这就是创新的 TESLA 造成的破坏,它很可能取代 APPLE 成为全球市值最高的公司(按市值计算)。TESLA 被公认为领先于其他汽车制造商至少十年的公司!

跨平台 Go 语言与 Google 自己的 DART 一起,是 Github 上增长最快的编程语言之一。截至 2020 年第三季度,它是GitHub 上第四大最受欢迎的语言

根据2020 年 StackOverflow 开发人员调查,它是 StackOverflow 上最受欢迎的语言第 5 名。Go 的发展绝非偶然,也不是炒作,尤其是当您考虑到 Docker,Kubernetes,Terraform 之类的应用程序完全是用 Go 编写的。Go 也是在职专业人员希望在 2020 年学习的编程语言之首。借助 Go 2.0,Go 有望成为企业软件开发的首选语言,以取代长期以来的王者 JAVA。

img{512x368}

观念模式

大多数 TESLA 的用户都是从汽油动力汽车迁移而来,为了熟悉自己的新汽车,用户需要进行重大的观念转变。用户需要了解,他们需要跟踪的不是油位和冷却液位,而是电池电量。用户还需要了解充电周期以及不正确的充电技术对车辆的影响。

对于 Go,此处的用户既是开发人员,又是推进 Go 项目实施工作的用户。开发人员需要特别了解项目需求,优势以及与 Go 相关的局限性。开发人员经常会从 Go 入手,这是对这门当前时代编程语言的一种狂热,从而常常忽略了它的局限性。诸如泛型和类型层次结构之类的简单概念也可以成为使用或不使用 Go 进行项目开发的成败之举。

支持

对于 TESLA,售后支持的挑战来自于(充电)基础设施,特别是对基础设施的收费。这可能不是其母国 (即美国) 的最大障碍,但如果 TESLA 要扩展到中国等国家,则需要与当地政府机构合作开发必要的基础设施,以维持电动汽车的机动性。

关于 Go,最大的障碍是拥有一个支持用户的技术社区。在这一领域,JAVA 胜过其他已创立的语言,变得非常有说服力。JAVA 得到了来自最大社区的支持。像 Go 这样发展壮大的语言肯定需要建立强大的,熟练的技术社区,这不仅将有助于 Go 成长为一种语言,而且还有助于其改进。

可持续性

TESLA 建立了自己的品牌之后,要在销售和服务过程中提供最佳的客户支持来维持它,这是一项具有挑战性的工作。此外,由于其雄心勃勃的计划是通过提供新产品来迎合大众,因此需要观察他们在生产过程中是否能够维持同样高水平的质量控制。

与此处的 TESLA 相比,Go 具有更大的可持续性关注。即使基于最小化和简单的原则构建,Go v2.0 仍有望引入泛型。展望未来,它的创造者需要确保永不包含任何功能,概念和改进,不要偏离他们的愿景,并且最终不要成为像 JAVA 那样概念繁多的语言。早期采用 JAVA 的人也可能会告诉它,它起初只是很小的,但随着时间的流逝,它变得很沉重。Go 应该避免走那条路

总结

考虑到上面所有观点,现在应该很清楚:TESLA 取得成功的创新但艰难的道路同样适用于 Go。它们各自领域中的困难本质上可能有所不同,但会以相似的原则影响着它们。


我的网课 “Kubernetes 实战:高可用集群搭建、配置、运维与应用” 在慕课网热卖中,欢迎小伙伴们订阅学习!

“Gopher 部落” 知识星球开球了!高品质首发 Go 技术文章,“三天” 首发阅读权,每年两期 Go 语言发展现状分析,每天提前 1 小时阅读到新鲜的 Gopher 日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于 Go 语言生态的所有需求!星球首开,福利自然是少不了的!2020 年年底之前,8.8 折 (很吉利吧^_^) 加入星球,下方图片扫起来吧!

Gopher Daily(Gopher 每日新闻) 归档仓库 - https://github.com/bigwhite/gopherdaily

我的联系方式:

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

特斯拉恰好也是主要使用 golang 做开发语言? 楼主你是故意的吧, 把二者扯在一起...

特斯拉被做空了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册