自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

張逸:代碼的體格

開發(fā) 開發(fā)工具 后端
我常常說程序員要懶,例如要把重復(fù)的過程變成自動化,例如不要重復(fù)制造輪子,例如竭力少寫代碼完成更多的事??上?,我們多數(shù)時候把這種懶,用錯了地方。懶于打掃,懶于行動,卻又不計后果的吃,代碼的體格怎么能夠減得下來?就看著代碼的體格一天天膨脹下去,然后嗚呼哀哉吧。

[[124622]]

圖片選自俄羅斯畫家、美術(shù)理論家瓦西里·康定斯基作品。

Steve Yegge 在他特立獨行的作品《程序員的吶喊》中寫道:“我堅信代碼***的敵人就是體格”。不過他過于自大了,以為這只是像他那樣牛逼的程序員才擁有的少數(shù)派觀點;又或者說他過于悲觀,以為程序員的世界還在拼代碼的肌肉男臆想中。殊不知只要是曾經(jīng)掙扎在龐大代碼庫泥潭中的程序員,就不會盲目崇拜代碼的大塊頭。

可惜,“知行合一”非圣人不可以做到,夢想的光芒常常難以照進(jìn)現(xiàn)實的陰影。要縮小代碼的體格,似乎比減肥還要艱難。軟件系統(tǒng)像一條貪吃蛇,吃掉一切功能,***越變越長,在局限的空間里再也無法做到從容的轉(zhuǎn)折騰挪,***活活困死。偏偏還有人以能掌控***代碼的軟件系統(tǒng)為榮。——“兄弟不才,做過一系統(tǒng),代碼達(dá)到了兩千萬行,真是一場噩夢?。?rdquo;,程序君一邊搖頭作痛苦狀,噓聲嘆氣,但察其眼角眉間,藏不住的卻是得意和炫耀。

因而,我們一邊在憤慨代碼日益膨脹的體格,一邊又在做著堆代碼的增肥工作。軟件從來都不是一個人寫完的,需求也從來不會穩(wěn)定不變,于是乎出現(xiàn)了超過數(shù)個屏幕的分支語句,出現(xiàn)了大量注釋過的代碼殘骸,于是乎有了拷貝粘貼,程序員漸漸開始降低壞代碼的容忍度,開始得過且過。

面對日益膨脹的代碼體格,Steve 的吶喊是換語言,因為他是 Ruby 粉和 Python 粉的緣故,恨不得把所有系統(tǒng)都換成 Ruby 或者 Python,要么就是 Lisp。作為 Scala 粉的我,當(dāng)然也恨不得所有 Java 項目都換成 Scala。讓我再寫啰嗦的 Java 代碼,真是痛不欲生,生不如死啊。支持了 lambda 的 Java 8 也許還能挽救我,但我還是鐘情 Scala。

太天真了!首先是換不了,其次是換了也沒用。你真以為換語言如換刀,寶刀在手,就能割去那些臃腫的代碼,還代碼一個苗條身材?——你以為是抽脂啊!Ruby 也可以寫出爛代碼,Java 也能寫出漂亮的程序,關(guān)鍵不在于語言。正如武林高手比武并不在于刀劍的利鈍,要分出武功高低,根本還是功力和招式。只有同等高手之間的廝殺,手握一柄利器才能成為制勝法寶。

代碼的臃腫關(guān)鍵還在于分解與去重。Unix 大嗎?大,而且必須大。但它又很小,因為它以內(nèi)核形式確立了系統(tǒng)的邊界,同時遵循 KISS 原則,將大功能分解為小程序,每個小程序只能完成一個功能,任何復(fù)雜的操作都必須分解成一些基本步驟,由這些小程序逐一完成,再組合起來得到最終結(jié)果。分解的一個難題是如何定邊界,換言之就是如何做到“高內(nèi)聚、松耦合”。另一個難題在于組合,即該如何把這些分解的細(xì)小功能再糅合起來,形成一個整體。這也是為何 Micro Service 被鼓吹了多少遍,仍然有人保持觀望態(tài)度的原因。

若說掌握分解這門技藝的高手中高手,還得數(shù)庖丁這哥們,“彼節(jié)者有閑,而刀刃者無厚,以無厚入有閑,恢恢乎其于游刃必有余地矣,是以十九年而刀刃若新發(fā)于硎。”眼睛都修煉成了X光,能夠透過牛皮看清骨肉經(jīng)絡(luò),以至于能夠無厚入有閑,像舞蹈一般變屠牛為行為藝術(shù),舉手投足間,瀟瀟灑灑地把牛給宰了,還揮揮衣袖,不帶走一點血。對軟件系統(tǒng)的分解,我們能做到像庖丁那般識破依賴,判斷“有閑”之節(jié)者,進(jìn)而做到合理解耦嗎?

去重的根本其實還是分解,粒度可以是函數(shù)、類、模塊、子系統(tǒng)。程序員需要有潔癖,重復(fù)就是***的 dirty,可惜打掃衛(wèi)生需要付出。寫代碼是件勞心勞力的事兒,總會有人偷懶的。Deadline 又是一把懸在程序員頭上的達(dá)摩克利斯之劍,在急迫的催促聲中,程序員尋找到了心里安慰,因為時間是允許降低質(zhì)量的最***借口。——當(dāng)然,時間也是最殘忍的。程序員干的是刀口舔血的生活,出來混,遲早是要還的。程序世界,就是佛家所謂的“因果世界”啊。

去重的關(guān)鍵并不在于技巧(程序員都不是***,只要愿意學(xué),什么技巧不能學(xué)會?),而在于勇氣和決心。重復(fù)是敵人,而且是大塊頭的敵人,它就這般隨意地站著,勾起小指頭,傲慢地挑釁著你。而你,卻未必有戰(zhàn)風(fēng)車的勇氣。是明知必敗嗎?還是不可戰(zhàn)勝?未戰(zhàn)先怯,這場戰(zhàn)爭你已經(jīng)敗了。我見到的諸多遺留系統(tǒng),重復(fù)代碼都是這樣開始蔓延的。——時間,見鬼的時間,其實大多數(shù)時候它都是你舉白旗時找來貼臉的遮羞布。

我常常說程序員要懶,例如要把重復(fù)的過程變成自動化,例如不要重復(fù)制造輪子,例如竭力少寫代碼完成更多的事。可惜,我們多數(shù)時候把這種懶,用錯了地方。懶于打掃,懶于行動,卻又不計后果的吃,代碼的體格怎么能夠減得下來?就看著代碼的體格一天天膨脹下去,然后嗚呼哀哉吧。

本文出自:http://agiledon.github.io/blog/2014/12/16/the-figure-of-code/

責(zé)任編輯:林師授 來源: 張逸的博客
相關(guān)推薦

2010-07-29 11:12:30

Flex日期格式化

2011-04-29 15:52:30

方正心逸T330

2013-01-31 16:22:56

2021-03-07 08:30:17

Github報錯下載資源庫

2017-08-14 15:27:23

安卓單元測試代碼測試

2018-04-08 09:07:58

2010-05-25 17:26:55

IT服務(wù)

2012-06-11 17:17:53

大數(shù)據(jù)

2009-12-03 09:00:18

PHP分頁函數(shù)

2023-10-12 10:22:14

JavaScripThis

2012-06-29 10:52:48

聯(lián)想激光打印機(jī)

2011-05-04 14:35:48

方正心逸T330-52一體電腦

2018-08-28 17:54:07

逸云

2023-12-28 08:30:42

媒體協(xié)議媒體格式Android

2011-05-07 10:20:22

方正心逸T330-52一體電腦

2011-05-06 14:41:36

方正心逸T330一體電腦

2019-04-12 09:24:09

代碼開發(fā)AI

2023-05-04 10:48:35

ChatGPT軟件研發(fā)

2011-05-04 14:35:41

方正心逸T330-52一體機(jī)

2012-12-25 11:12:42

博通NFCWi-Fi
點贊
收藏

51CTO技術(shù)棧公眾號