「譯」追趕時髦的技術

在 Web 開發領域,咱們會常常看到有人討論當前最好的框架或編程語言。Scribd 的聯合創始人 Jared Friedman 在 2015 年的時候專門寫了一篇文章推薦創業公司使用 Node.js 代替 Rails。html

他有如下觀點:前端

  • Rails 很慢。node

  • Hack academy 的畢業生都在用 Rails,讓高級工程師貶值,並減小了它們的將來前景。git

  • 一個創業公司應該使用工程師想用的技術,這樣能保證應用程序的質量。程序員

  • 在 Scribd,他們這幾年已經把技術棧從 Prototype 過渡到 jQuery,再到 CoffeeScript,再到 Angular,再到 React。github

Node.js 對於創業公司來講是一個很好的選擇,但他提到的兩點讓我很困惑。
首先,一個創業公司的工程師要明白哪一個技術會在幾年內流行而且讓技術棧不會過期。
而後,優秀的軟件工程師會被一個創業公司的技術棧吸引,而不是它們要解決的技術難題。
在過去,我據說過一些很差的傳聞:web

  • 創業公司裏的開發者不會接受用 ES5 的 Offer(那時候 CoffeeScript 剛出來)。面試

  • 在 Mongo 發佈不久,工程師傾向在生產環境下用 Mongo 代替 Postgres。算法

  • 工程師們都渴望用最新的前端框架來不斷重構他們的項目。編程

我擔憂有些程序員(和他們的僱主)有這種傾向,也就是把注意力都放在遷移技術棧上。他們選擇公司的時候會基於框架,想在工做中用上最早的技術,而不是最適合的工具。他們把時間都花在新的庫和框架上,而不是用來提高本身的核心技術能力。我把他們稱爲「技術棧追逐者」—— 那些把新技術(或者他們最喜歡的技術)都用在創業公司的技術棧上,但對核心輸出(用戶體驗,團隊生產力)提高有限的人。

「現代化」的 Web 開發

很同情在 Hacker News 上現代的 Web 或者移動開發者。做爲一個全棧工程師,在 2012 年大家開發網站時後端用 Ruby/Rails ,前端用 Backbone/CoffeeScript/Underscore,部署時用 Capistrano (或者是和 Python 的 analog 相關的工具)。到了 2013 年,大家後端遷移到 Node/Express/Mongo,前端遷移到 Grunt/Ember。到了 2014 年,大家已經把全站切換到 MEAN 技術棧了,但要試驗 Koa 和 Go(在 Express 的核心開發者跑路)。在 2015 年,大家在前端開始用 Gulp/ES2015/React,後端用 Express/Go,用 React Native 來替代原生開發語言,而且用 Docker 慢慢地把系統遷移到微服務架構。不久以後,你將會遷移到 Phoenix,若是 Angular 2 更好的話,大家會遷移過去。或許之後 Go 能用來開發安卓,Swift 可能會適合大家的技術棧(雖然我顯然是誇張了,但在 Hacker News 的頭條上討論什麼更流行是很正常的表現)。

若是考慮下面提到的這些緣由,那麼這種行爲是能夠被理解的,現代的 Web 開發工程師要得到一份更好的工做,他們要更加「時尚」。僱主用框架或者編程語言來篩選僱員,而不是測試他們的思考方式和技能。然而,僱主並無意識到,優秀的開發者能夠在幾周,甚至幾天就能掌握不少語言或者框架。有時候趨勢是沒法阻止的:Swift 正在替代 Objective C,世界向着輕量的方向發展,後端須要變得更輕量,前端要更多的響應式。一般,這種變化都會帶來巨大的好處:生產力有本質上的提高,用戶功能更加容易實現。另外,對於中小型企業來講,這些改變會關係到企業的存亡。

咱們能夠用在創業公司裏的現代的 Web 或移動開發者與咱們的計算機科學家做爲對比。我有一個朋友在一家頂級的科技公司作計算機神經系統科學家,跟大部分技術人同樣,他的世界幾個月就會發生變化 —— 得益於計算能力,腦成像和深度學習算法的快速發展。但他的編程工具幾乎沒發生什麼變化。公平來說,只有 C++ 從 11 遷移到 14 引發了一點擔憂。其餘的變化還有分佈式系統,鍵值存儲和其餘外部服務,但這些用的都是穩定的 API。他大部分的時間都花在架構和算法上,不會花時間去重寫功能類似的代碼或學習類庫。

選擇工具

人們可能會建議創業公司去選擇現代化的技術棧,由於這是招聘優秀工程師的一個很關鍵的工具。根據我本身的觀察,優秀的工程師關注的是其餘方面,他們最關注的是解決感興趣的問題,和有趣的同事一塊兒解決問題。吸引優秀的人(工程師或者其餘崗位)的附加條件是要引領時代發展和肩負偉大的使命。

我並非在抱怨技術發展太快,也不是說咱們都應該用匯編語言或者 C++ 或者 Ruby。軟件工程師們清楚他們的目標 —— 領域發展太快,他們得花精力在上面,由於那會影響線上的數十億人。但我想說的是,大家須要挑選新框架,編程語言,或者類庫的能力,而後和大家周圍那些經驗豐富的工程師一塊兒,提升大家的生產力。除此以外,大家要深入理解編程語言的多樣性,瞭解各類語言間的差別,不要只關注當前流行的那個(一樣,不要盲目地選擇框架)。

對於創業公司,Paul Graham 在 2013 年的時候被問到關於理想的編程語言:「咱們有些創業公司用 PHP 來寫他們的產品 —— 那讓我有點擔心。但這並不像其餘事情那麼值得我擔心。」
Github 的技術人員 Sam Lambert 在一次的採訪中說第一次面試時,CTO 對他說 Github 大量使用 Rails,C,和 Bash 腳本,他很是驚訝:「隨着面試進行,他向我透露那其實是一羣很是務實的黑客在 hack Ruby,hack C,把他們的時間都花在感興趣的事情上,使用一個穩定的技術棧,好過追逐最新最酷炫的技術。」
Github 的方式在我看來是 Web 和移動開發者的一個合理的平衡:普遍地探索工具,但按照實際需求來選擇工具來解決大家要面臨的問題。

我擔憂的是某些開發者,特別是在他們早期的職業生涯當中,有這麼一種想法:一個創業公司的工程師並非專門解決問題的,也不是計算機科學家,只是一個榮譽查找表 —— 他們的任務是每幾個月就去研究新的類庫/框架/編程語言,來獲取有限的提高。這使咱們這些早期的工程師貶值,由於咱們的工做是創造人們想要的東西,關注感興趣的技術難題,快速的用代碼實現。

所以,務必在你的業餘時間中才去實驗新技術。只有當切換技術棧有很是巨大的提高的狀況下,纔在生產環境下切換編程語言/框架,同時要好好想一想切換得到了什麼優點。警戒那些不考慮新技術對團隊的影響,卻不斷爲新技術歡呼的人。你應該把時間花在學習概念,解決技術難題或用戶反饋上。若是你有合適的應用程序,而你如今又在選擇框架來實現它,那麼你的技術選型會有必定的靈活性,但要通過持久的努力才能適應市場。

任何一天打開 Hacker News,你都能看到有帖子誘惑你去用某個框架、語言、類庫或者服務來構建應用程序。有些工具擁有改變遊戲規則的能力,其餘的卻只有細微的差別,但要精通它們都是須要時間的。有些工具會大力宣傳它們的特色,並嘲笑你所學的技能 —— 但他們卻須要你的技能和注意力,這樣才能與如今有的技術競爭。你會怎麼選擇?

雖然本文是用 MacVim 7.4 寫的,但我以爲應該用 Atom,或者至少是 Neovim。

出處

http://scarletsky.github.io/2...

參考鏈接

Chasing the Shiny and New in Software

相關文章
相關標籤/搜索