領導才能的教訓—如何為團隊選擇正確的編程語言?


領導才能的教訓—如何為團隊選擇正確的編程語言?

本系列文章將使我與您分享一些歷史和經驗。 我從事開發工作已有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)


分享到:


相關文章: