<dl id="3wz6h"></dl><li id="3wz6h"></li>

      1. <dl id="3wz6h"></dl>

      2. <dl id="3wz6h"><ins id="3wz6h"></ins></dl>

            <dl id="3wz6h"></dl>

            <dl id="3wz6h"><ins id="3wz6h"></ins></dl>
            1. 
              
              <output id="3wz6h"><ins id="3wz6h"><nobr id="3wz6h"></nobr></ins></output>

              <li id="3wz6h"><ins id="3wz6h"></ins></li>
              
              

            2. <output id="3wz6h"><ins id="3wz6h"><nobr id="3wz6h"></nobr></ins></output>
              首頁»程序人生»彼之蜜糖,吾之砒霜——聊聊軟件開發中的最佳實踐

              彼之蜜糖,吾之砒霜——聊聊軟件開發中的最佳實踐

              來源:sherrywasp 發布時間:2018-08-14 閱讀次數:

                “描述一個事物,唯有一個名詞定義它的概念,唯有一個動詞揭露它的行為,唯有一個形容詞表現它的特征。要做的,就是用心去尋找那個名詞、那個動詞、那個形容詞……”

                —— 福樓拜 (Gustave Flaubert)

                我想講個故事。

                很久很久以前(一般講故事都是這樣開頭吧), 兩個老工程師在一起聊天,談各自生涯中最自豪的工程。其中一個先講述了他的杰作:

                “ 我們建造的橋,橫跨一個峽谷,峽谷很寬很深。我們花了兩年時間研究地質,選擇材料。聘請了最好的工程師團隊來設計方案,而這又花了五年時間。 我們簽下了最大的工程隊,委托他們建造基礎結構、塔墩、收費亭,以及用于連接橋梁和高速公路的道路。橋面下層是鐵路,我們甚至還修了自行車道。 那座橋花費了我數年的心血。”

                另外一個聽完之后,陷入了沉思,過了一會兒,說到:

                “ 有一天晚上,我和一個朋友喝了點伏特加,然后我倆扔了一根繩子,越過一個河谷。呃…… 就是一根繩子,兩頭系在兩顆樹上。 河谷兩邊各有一個村莊,起初,有人加了個滑輪,用來傳遞包裹。然后,有人拉起了第二根繩子,勉強可以走走,雖然很危險,但小伙子們很喜歡。 后來,一群人重新修建了一下,使得更牢固。于是,女人們也開始從上面走,每天帶著她們的農產品過橋。 就這樣,在橋的另一邊形成了一個市場。因為地方開闊,造了很多房子,慢慢地發展成了一個鎮子。 繩索橋被木橋替代,這樣就可以走馬車了。 后來,鎮上的人們修了一座真正的石橋。再然后,人們又把石料改成了鋼材。 如今,那座鋼構懸索橋依然佇立在那里。”

                前一個工程師沉默良久,說到:“ 有意思。我那座橋建成大約十年后,被拆除了。事實證明我們選錯了地點,建好的橋沒人用。據說有幾個野路子的家伙,在下游幾英里處,拉了一根繩子,所有人都從那走。”

              金門大橋(舊金山)

                我很喜歡這個故事。故事的出處,在一款消息隊列產品—— ZeroMQ 的官方指南第6章里。

                說完故事,我想聊聊軟件開發中,常常可以聽到的一個概念 —— Best Practice :最佳實踐。Wikipedia 上對其解釋為:

              A best practice is a method or technique that has been generally accepted as superior to any alternatives because it produces results that are superior to those achieved by other means or because it has become a standard way of doing things. 

                (最佳實踐是一種:因其產生的結果優于其它選擇下的結果,或其已經成為一種做事的標準,從而被普遍認可優于任何替代方案的方法或技術。) 

                這個概念源于管理學,然后在 IT 界泛濫。簡而言之,就是所謂“正確的做法”。

                最佳實踐本身是美好的存在,猶如夜空中的一輪明月,照亮黑暗中的方向,指引著摸索前行的凡人。

                但凡事有度,子曰:“過猶不及。”

                我今天想說的,就是這月亮的背面。(傳說中,月球背面隱藏著…… 噓~)

                潮汐鎖定導致月球永遠以同一面朝向地球

                首先,最佳實踐容易帶來思想包袱,讓人無法專注于解決問題本身。

                總是希望采用最好的技術方法,不愿意在不正確的做法上浪費時間,導致瞻前顧后,甚至裹足不前。此時的最佳實踐,已然成為了一種毒藥,一旦偏離了問題本身這個出發點,就會不知不覺走進“宏大構想”的思維陷阱。把簡單的問題復雜化,阻礙了邁出第一步,直到能規劃出“包羅萬象”的解決方案后才肯動手,拖延癥就這樣來了,時間卻走了。

                你想好了未來每一天怎么過嗎…… 沒想好? 那……不活了?  

                其次,對最佳實踐的執念容易讓人鉆牛角尖,將目標的重心帶偏。

                過度關注實施過程是否符合標準化,忽視了項目中其它重要的東西,比如用戶體驗,比如實際需求。就像故事里講的那樣:第一座大橋,幾乎是教科書般的標準化路數,可產品落地后和客戶需求卻差了好幾英里;第二個看上去很野路子,但精準地解決了痛點,從始自終都是緊緊圍繞實際需求迭代,每一次的進步都可以產生效用,這才叫殺手級應用。

                這讓我想起了 Plan-9 的傳說。

                你聽說過 Plan-9 OS 嗎? 一款由貝爾實驗室的極客們打造的用于完善 UNIX 不足的操作系統。什么不足?在 UNIX 的哲學中,有一條叫做 “一切皆文件” ,但實際上UNIX本身并沒有嚴格遵從這一條。于是,Plan-9 OS 完美實現了這一點。然后呢……? 沒有然后了。它從沒進過市場,所以如果你沒聽說過它,一點也不奇怪。Plan-9 OS 沒有解決任何現實問題,沒人在乎 “一切皆不皆文件”。

                這種執念的另一種表現就是工程師思維,沉迷于奇技淫巧中無法自拔,程序員尤其容易中招。

                比如性能優化。“優秀的程序員應該榨干每一字節內存”,聽起來很熟悉,不是嗎?但經濟學上來講,邊際效應決定了一次項目中,越優化性價比越低。有一個很容易被忽略的事實:硬件其實比程序員要便宜。

                再比如對設計模式的崇拜。設計模式當然是好東西,但如果像強迫癥一樣使用它們,堅持用上它們才是正確的編程,就會導致按圖索驥,強行讓問題去適應設計模式,而不是讓解決方案針對問題,這就本末倒置了。

                我有個基友,C++ 極客。畢業后入了騰訊,積累了巨額財富后,自己創業了。當然,當老板可比寫 C++ 難多了,于是現在又去積累巨額財富了。想當年和那廝聊天,言必出設計模式,沒事侃正則,再沒事就研究 GC 策略 (好像玩 C++ 的普遍這德性) 。前不久看他代碼,差點沒認出來,這家伙畫風一轉,現在連接口都懶得多用(估計看到這,某些狂熱分子肯定在破口大罵:你什么意思,你說你沒用面向接口編程?)那位兄臺甚至都懶得多聊,輕描淡寫來一句,“沒心思,以后有需要再加。”

                順便扯一句,那哥們最近負責開發一款手游,他跟老板匯報的時候,預估的研發周期要12個月,然后老板跟他說:“好,12月出公測。” (哈~ 估計他肯定舌頭打結把“12個月”說成了“12月”)。看到這的你,是否回憶起了你的老板?

                這也是我接下來想說的關于最佳實踐的另一個問題:項目實施。

                工作數年,大小項目經歷若干,慢慢體會到,一個項目的開發順利與否,并不在于技術選型是否為最佳實踐,更多的時候,取決于開發方案和技術儲備之間的平衡。做項目畢竟是要講方案落地的,如果最佳實踐中的技術成本,超出了開發者的落實能力,那就是坑,這時盲從最佳實踐無異于挖墳。如果是一個人的項目,抽時間惡補一通,興許能填填坑,這取決于IQ。但要是一個團隊,那就不是什么 IQ,EQ,QQ 的問題了,這中間產生的學習成本,集體培訓成本,反復溝通成本,大量的初級錯誤,千奇百怪的代碼,互相沖突引發的焦躁情緒,等等。這些負面的東西如果不能妥善的處理,足以抵消掉最佳實踐帶來的好處。別忘了,deadline 正在迫近。

                我自己曾經在一個項目組里,強行推行 Git 做源代碼管理,當時組里共9人,有7人只會 SVN,但我堅持 Git 是 “最佳實踐”。要不說年少無知少不更事呢,罷了,后來的事情我不想回憶了…… 那次項目之后,我再也不在一群只會 SVN 的隊伍里提 Git 了。

                一個人做軟件已經很難,比這更難的,是一群人做軟件。

                當塵埃落定,驀然回首,最佳實踐很可能沒你想象中那么重要。它更多的是一種精神層面的求道,并非物質世界的必要。

                扎克伯格 ( Mark Zuckerberg ) 于2004年在哈佛柯克蘭公寓 ( Kirkland House ) 里寫出 TheFacebook 的時候 ( 次年更名為Facebook ) ,用的是 “世界上最好的編程語言” PHP。這門可能是業界被吐槽次數最多的語言一直支撐著FB帝國的誕生,直到席卷全球。Stack Overflow 的聯合創始人 Jeff Atwood 曾公開揶揄 Facebook 是一家 “召集全球頂級程序員在 Windows XP 上寫 PHP ” 的公司。但這無所謂,24年前的馬克也不糾結。一直等到需要的時候 (2010年),Facebook自己動手研發了一個編程語言 —— Hack,來解決 PHP 帶來的危機。

              《社交網絡》

                最佳實踐,關鍵在時機(Timing)。

                如果說用 Facebook 這個 “根本不存在” 的網站來舉例,純屬虛構的話,那我們來說點真實的例子,Web 技術的基石——HTML。由20世紀最重要的100人之一的 Tim Berners-Lee 創造的 HTML,其發明之偉大,足以單獨開篇博文來贊美了,這里就不贅述了。

                這樣一個造福全人類的神作,本身的設計結構絕非完美,甚至可以用混亂不堪來形容。沒有嚴格統一的約束,形同虛設的規范,標準化進程的難產。以至于在很長一段時間內,連自身元素的定義,都可以向瀏覽器廠商妥協。但是,種種被人詬病的存在,絲毫不影響 HTML 改變世界的腳步。你我今天能相會于園,皆仰賴它的誕生。

                同樣的例子還發生在 Web 世界另一個巨擎上——JavaScript。當今世界,Web 前端技術已經水銀瀉地般肆虐整個開發界,前端框架百花齊放、JS 衍生品鱗次櫛比。所有這一切的背后,全都源于上世紀90年代橫空出世的 JavaScript。

                那么,JavaScript是最佳實踐嗎?

                別逗了,如果有什么語言可以和剛才說到的 PHP 競爭一下誰被罵的次數更多,那非 JavaScript 莫屬。這個僅花了十天設計出來的語言,打一出身就被貼上了怪胎的標簽。混亂的標準,多樣的實現,安全漏洞,語法隨意,反人類…… 總之,JavaScript 和最佳實踐半毛錢關系都扯不上,但它卻是撐起當今互聯網半壁江山的擎天柱。

                所以,用最接地氣地話來說,不管黑貓白貓,逮著耗子就是最佳實踐貓。

                彼之蜜糖,吾之砒霜。所謂最佳實踐,其定義本身往往也是分歧的源頭。什么是最佳?這個最佳是獨一無二的嗎?世界上有很多很多現實問題,可能根本就沒有所謂的最佳實踐。

                請聽題,世界上最好的編程語言是哪個?

                第二題,世界上最好的文本編輯器是哪個?

                朋友,這天還聊得下去嗎……

                最后,說一個我自己的故事。

                很久很久以前,為了找一款滿意的文本編輯器,我干了一件可能是前無古人,后不知道有沒有來者的蠢事 —— 我打開 Wikipedia,搜索 “ text editor ” ,然后轉到一個叫做 “ List of text editors ” 的頁面,接下來的一個月,我幾乎把當時那個頁面上,所有我能下載安裝的文本編輯器,全部試用了一遍……

                嗯?你問我為什么這么做?呵呵,不把全世界的文本編輯器遍歷一遍,我怎么知道哪個是最好的?

                這事細節我不想再提了,我也不想回憶了。要不說年少無知少不更事呢,時至今日,我想不出比這更愚蠢的事了。WTF~~

              這個頁面上的表格行數逐年增多

                如今,再有人問我最好的編程語言或者最好的文本編輯器的問題的話,我會說: 

                “朋友,要打架嗎?”  

                這兩個問題的最佳實踐,唯有暴力。

              QQ群:WEB開發者官方群(515171538),驗證消息:10000
              微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
              提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
              網友評論(共0條評論) 正在載入評論......
              理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
              登錄會員中心
              云南十一选往期