领导才能的教训—如何为团队选择正确的编程语言?


领导才能的教训—如何为团队选择正确的编程语言?

本系列文章将使我与您分享一些历史和经验。 我从事开发工作已有20多年了。 在我目前担任Capital One的杰出工程师的过程中,我可以在动手战术开发和策略工作之间逐步提升自己的水平。 我的知识是新鲜的,而且用途广泛,我想与您分享一些想法和看法,以帮助您从一个见多识广的平台上做出决策。

今天,我想撰写有关技术领导力的文章,并帮助您的团队针对给定的问题选择正确的编程语言。 在一个假想的场景中,假设我们必须构建一个新的RESTful API来管理对关系数据库的访问。 我们几乎可以使用任何现代编程语言来编写此应用程序。 有些团队可能会选择Java,有些团队可能会选择Go,其他一些团队可能会喜欢Python,而一些顽固的团队可能希望使用C语言(为了提高性能!)。 让我们逐步说明如何合理选择选择。

完全自由vs规定用法

在过去的20年中,软件开发发生了许多变化。 软件开发的难易程度不是其中之一。 如今,我们的工具带中提供了大量工具。 然而…

"拥有权利的同时也被赋予了重大的责任。" - 本叔叔

那么,为新的Web应用选择正确的编程语言时,从哪里开始呢? 只需在Google中搜索"开源Web应用程序框架",您就会看到数十种每种语言的内容。 那么,您如何决定使用哪个呢? 尤其是当您使用一个您知道的和可以学习的决定时,会产生如此高的风险吗?

假设您使用Python Flask应用程序的API,太棒了! 您是否认为现在您的团队将需要Python后端开发人员和JavaScript前端开发人员? 这不是很糟糕,因为这是一个非常传统的团队设置,但是您会考虑在JavaScript / Node.JS中构建后端吗?

"回到我的时代,我在堆栈的每一层都有一种可行的语言……我对此感到满意!" —许多智商高昂的老开发商都认同这种观点

我曾在多个组织工作过。 每种方法都有不同的方法来选择要用于项目的编程语言。 我在本文中的目标是帮助您(组织中的领导者)在有机会指导您的团队使用哪种语言时采取立场。 让我们来看一些选择正确的编程语言的示例。 我们将研究各种学习曲线和高效语言(例如C),并将其与学习曲线较低但可能效率不高的语言(例如Python)进行比较。

在考虑这一范围时,领导者应考虑到工作的各个方面,争取平衡。

标准开发语言

让我们从程序员可能会使用的语言开始。如果您是一家小商店,则很可能只有一个开发人员或一个由专门人员组成的团队来构建您的应用程序。 您得到的越大,您越有可能拥有大量开发团队来解决大量问题。

"杰夫,什么是过多的东西? "-El Guapo,三个朋友

本文的其余部分,将从企业开发或大型软件商店的角度进行讨论。 我的总体流程是假设您的公司环境看起来像我20年从事技术工作的大多数大型公司一样-有很多开发团队,团队拥有技术主管,并且为团队分配了一个或两个功能来进行开发 。

让我举一个真实的例子:我在Capital One支持的小组通过数字渠道为我们的客户发送消息。 我们每年发送数十亿条消息。 可以想象,这是一个庞大的数据处理微服务管道。 我们有法规要遵守,客户的喜好要尊重,并且要进行其他注重卫生的活动,以便发送信息。 管道的简化版本如下所示:

领导才能的教训—如何为团队选择正确的编程语言?

借助此管道,无论是通过Kafka / RabbitMQ(消息总线上的无状态和哑微服务)提供一系列微服务,还是一系列链接的API,在此过程中都必须执行许多组件才能交付 一个消息。

以典型的企业方式,我们有很多团队在此过程中工作,还有我们平台支持的其他团队。 当然,团队将"拥有"某些组件,但我们会全力支持并鼓励采用开源/内部采购模式进行开发。 而且,任何人都可以使用适当的代码审查来处理任何事情,并提出请求以跟踪/隔离更改。

BYOL! (用自己的语言)

现在,让我使用一个假想的例子。 我的团队已经建立了一个新平台,该平台遵循类似的数据管道,但是在开发人员围绕编程语言和框架的自由度方面进行操作。 在这个平台上,工程师可以选择Scala而不是Java或Go而不是Python。 每个团队都将发挥自己的优势,并决定使用哪种语言或框架来编写其应用程序。外观如下图所示。

领导才能的教训—如何为团队选择正确的编程语言?

看那个! 它是专业工具和代码的完美结合,使魔术得以实现。 这很棒!

…直到那天。

就像Team Brothers那天一样,在我们想象中的场景中,团队在"卫生"步骤中清理数据,都赢得了彩票,发出了通知,并提早退休。 没事 这只是管道的另一个组成部分,对吧? 他们使用Scala,Spark和Kafka建立了自己的脚步,但是我敢肯定其他四个团队的Java工程师可以在一夜之间将其拾起。 哎呀,Scala不会那么不同吧? JVM语言是JVM语言。 它们都可以编译!

错误。 在这种情况下,我们将开始看到生产力大打折扣。 Scala应用程序的性能将开始受到影响。 我们将无法像以前那样迅速地集成新功能。 最后,除非我们雇用一些Scala工程师,否则我们将需要完全重写它。

在这个虚构的例子中,Scala是适合该工作的语言吗?

…直到..不是。

数据管道设计很好,Scala非常适合工作负载,Spark Streaming能够通过庞大的参考文件处理吞吐量。 实施是现场的,但由于会影响可维护性,因此出现了专用语言的问题。

在我们的虚构示例中,数据清理团队赢得了彩票并退出了,其余团队中没有人知道Scala。 如果该功能有任何问题,则有人必须学习足够的Scala才能更新应用程序。 如果那不可行-如果您不熟悉Scala / Spark的工作方式,则由于较大的更新风险较大,因此您将不得不完全重写它。 您可能会认为您可以雇用更多的工程师来涵盖您需要支持的特定语言,但是正如我将在下面显示的那样,如果您不使用主流/标准开发语言,这可能会比您预期的难。

那么我们如何选择正确的语言呢?

环顾您的组织,问自己一些问题:

"如果您是团队的一员,整个团队都可以支持该语言吗?"

· 如果不是,那可能不是正确的答案。 我总是担心球队中奖并决定明天不参加比赛。

"如果您是大型计划的一部分,该计划中的其他团队可以支持该语言吗?"

· 如果这是适合工作的语言,则需要进行何种投资来培训其他团队如何维护应用程序。

"您为什么要使用"新"语言?"

· 如果您使用它来学习,那就太好了! 但是找到合适大小的任务来尝试一种新语言,并放弃将其用于任务关键型组件,直到团队充分掌握速度为止。

"用例是否倾向于特定的语言结构(功能,过程,面向对象)?"

· 流数据可能倾向于程序化,而诸如Web应用之类的"业务"应用则可能受益于面向对象的语言。

"聘请新开发人员使用这种语言将有多容易?"

· 当您的明星开发商中奖时,是否容易在公开市场上将其替换为某人?

请看下面的图表。 TIOBE每年汇总最流行的编程语言列表。

领导才能的教训—如何为团队选择正确的编程语言?

> Top 10 languages from the TIOBE Index, Feb 2019

要使一种语言成为此列表的顶部,可以假设有很多开发人员正在使用该语言,这很公平。 这将使开发人员可以跨任务灵活地工作,并且使您的团队成长或替换人员时可以雇用新的开发人员。 流行度是可以用来选择编程语言的一种度量,但是哪种度量最适合哪种项目? 绝不是所有人都必须遵守以下规定,但这是考虑语言选择的起点。

网络应用

Java — Spring Boot

Python — Django

Javascript — Node.js

REST API

Java — Spring Boot

Python — Flask

Javascript — Node.js

流数据微服务

Python — pySpark

Scala — Spark

数据分析

Python-SciPy,Pandas

Java-MLlib,H20

桌面应用

C#— UWP,WPF

Swift

移动

Swift-iOS

Kotlin-Android

结论

现代软件开发非常复杂,尤其是在开源开发和开发人员自由的时代。 软件开发人员容易遭受"闪亮对象综合症"的折磨,在构建新项目时,我们想尝试一些新的前沿技术。 有时,这些动机是好的(正确的工具,正确的工作),有时它们可能是由更多短期的感知利益驱动的。 由我们(组织的负责人)来帮助我们的团队平衡决策。

我绝不主张您在团队中采用一种千篇一律的技术解决方案或编程语言。 相反,我希望本文能帮助您认识到在构建软件时需要考虑利弊; 特别是希望将具有非常长的生产生命周期的软件。

公开声明:©2020 Capital One。 观点是个别作者的观点。 除非在本帖子中另有说明,否则Capital One不与任何提及的公司有附属关系或认可。 使用或显示的所有商标和其他知识产权均为其各自所有者的财产。

(本文翻译自Chris Fauerbach的文章《Lessons from the Leadership Trenches — How Do I Choose the Right Programming Language for My Team?》,参考:https://medium.com/capital-one-tech/lessons-from-the-leadership-trenches-how-do-i-choose-the-right-programming-language-for-my-team-36222aa78b38)


分享到:


相關文章: