程式員最主要的一個作業就是編碼,編碼只是個程序而已,最終編碼的目的就是產生一個能提供服務的有價值的軟體,
不管你負責的是后端編碼, 產生的是可部署運行的服務,或是移動端構建了一個App,也許是前端,撰寫了頁面等,也許可能是類別庫或框架等,所有這些產物,如果我們用一個詞來歸納它們,那就是軟體
那做為程式員,你有沒有思考過,軟體究竟有什么價值?
本周,繼續就編碼之道闡述我的思考與分析,這是第二篇,本系列其它文章為:
- 編碼之道(一):程式員的"圣經"
為什么要談價值
可能有些人覺得談論軟體的價值是有點多余,因為軟體一定是有價值的,客戶需要一個軟體,肯定它能滿足客戶一定的需求,
所以這個點并無太多談論的必要,
這也正是我想要寫這篇文章的原因,這正是因為軟體的利益方,包括客戶,程式員,管理人員,公司等各方角色,在識別軟體價值上都存在誤差,
而這種誤差,正在造成現在軟體行業困境的一個很重要的原因,
我們軟體行業的最大困境就是難以產生高質量易于維護的軟體
所以我們程式員,是否能清晰的理解軟體的價值,這是我們能寫好代碼的一個基礎,
因為:
軟體有看得見的價值與看不見的價值
而在編碼中,很多問題的頻繁出現的關鍵就在于:
對于軟體看不見的價值,各方缺少可度量的共識

如上圖所示,軟體的價值顯而易見的分兩部分,一部分是各方角色可見的有共識的價值,這部分在水面上,我將其稱為業務價值,而另一部分幾乎是各方角色難以看見并缺少共識的價值,我將其稱為技術價值
業務價值
看的見并且各方能有共識的價值
軟體一定是在業務上有價值的,它一定為某些人群提供了一些服務,這些服務就會帶來價值,
業務價值就是軟體在水面上的價值,任何一個軟體都通常會有自己在業務上的功能,比如電商軟體是支撐網上購物的軟體,股票交易軟體能讓人進行股票交易,這種明面上可見并且軟體利益各方有共識的價值,就是可見價值,
幾乎軟體利益的方方面面,對于業務價值沒有沖突與不一致,產品需求書會詳盡的描述需求的細節,測驗用例檔案會描述如何在業務上進行測驗,而專案管理的幾乎所有管理的重心都是在如期實作這些業務價值及保障這些業務價值的質量上面,并且從開發到產品,客戶等,對業務價值是有共識的,不存在理解上的差異,
業務價值也是可度量的,比如從Bug數,或是否完全滿足需求,操作體驗如何,以及功能在什么時間開發完成,這些都是可度量的,
保障業務價值如期實作及其質量當然是非常必要的,這一塊的作業并無問題,問題在于軟體的另一個價值,就是技術價值,這是看不見并且難以達成共識的價值,大多數編碼的問題也多出現在這個上面,
技術價值
看不見并且各方難以達成共識的價值
仔細探究軟體,會明白它背后有一些隱藏的不易被查覺的特性:
- 業務價值的質量,并不反饋出實作業務價值后面的實作,也就是代碼的質量
- 軟體大多是需要持續迭代或維護的,但這種特性難以直觀的感受且各方缺少共識
這些特性背后反應的實質就是:軟體是有技術價值的,
但在實際的程序中,軟體的技術價值難以被重視,并且非常難以度量,導致幾乎這個價值是被忽視的,而且處于被業務價值的壓制,也就是決策方通常會為了看的見的業務價值去犧牲他們理解或不理解的技術價值,導致短期內看起來業務上的價值得到保障,但實際時間稍微拉長一點,就發現完全是害人害已的行為,
想必很多程式員陷入一些有困境的編碼中,這些代碼難以繼續下去,代碼的質量極差,修改一個BUG極易引發一堆新的BUG,添加一個新的功能需要的時間越來越難以評估及穩定下來,業務價值越來越沒有保障,整個團隊陷入一種惡性回圈,
這就是軟體技術價值出現問題的表現,這種情況在軟體開發中非常普遍,
技術價值的普遍出現問題的點在于:
- 非技術人員對所謂的代碼質量,可維護性缺少概念與理解,由于他們并不是直接編碼的人員,但通常掌握決策權,要求這樣的人群重視技術價值,實在有點強人所難了,
- 技術人員雖然明白技術價值,他們本身知道代碼實作的是好還是壞,但通常他們不是決策者,并且普遍受進度壓制,在很多情況下,他們別無選擇,會選擇犧牲技術價值,
- 技術價值幾乎是難以度量的,很難用某種標準來判定技術價值的優劣,雖然有類似的性能測驗或代碼掃碼等,但這些也幾乎只能反應一個方面而已,
基于上述的原因,技術人員很多時候雖然有心,但實質對保障技術價值是無力的,

如上圖所示,我通常會用Sonar去評估分析代碼,這是衡量技術價值的少有的手段之一,但它的能力也非常有限,能完整的并且可度量的評估技術價值的方式似乎難以找到,
一個可以想像的事實是,如果技術人員向決策者建議說:“給我兩個月時間,我去重構下這份代碼,讓它更好,但在業務功能上完全沒有任何改變”,很難想像那些決策者,也就是大多非常技術出身的人群,會如何去理解與同意這種事情,
也許一個他們可能的想像是:讓整個團隊浪費兩個月時間,然后啥東西都沒有?
軟體價值
因此,我對于軟體價值的定義是:
軟體的價值是由業務價值與技術價值兩部分組成的,它們相互合作與依賴,缺一不可
沒有業務價值,再好的技術價值也是白搭,甚至變成技術人員的孤芳自賞,而沒有技術價值,業務價值則完全是空中閣樓,不可能穩固與長久,
業務價值與技術價值,如同太極的兩儀一樣,它們理當同等重要,
因此,做為一個程式員,你必須得知道軟體的價值,也明白自己對軟體的價值擔負何等的責任,特別是在技術價值這個方面,程式員是幾乎唯一有能力保障這一塊價值的群體,不可能期望產品或客戶來保障這一塊的價值,
這也是我這篇文章的目的所在,
編碼的困境
如我在上面所總結的,軟體的兩種價值,即業務價值與技術價值是相互依賴與合作,才構成了軟體真正的價值,
而在現實中,一個突出的表現是業務價值更被重視,因為它是可見的,可度量的,是各方都能理解,存在共識的價值,而與之完全相反的則是技術價值普遍受到輕視,因為它是不可見的,不可度量的,非技術人員不理解的,沒有共識的價值,
而對技術價值的輕視成為軟體各種問題頻繁出現的一個很重要的原因,
下一篇,繼續談論編碼之道,編碼之道(三):編碼之困,對技術價值的輕視
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/298173.html
標籤:區塊鏈
上一篇:PTrade量化交易系統
下一篇:體驗篇 - 部署IOTA私鏈
