
我們在編寫代碼的時候,如果發(fā)現(xiàn)某個處理過程已經(jīng)在別處寫好了,想拿過來用,就會有所考量。不能復(fù)制過來,因為修改起來費(fèi)時費(fèi)力;也不能輕易建立依賴,因為修改可能會產(chǎn)生意外影響。是的,重復(fù)會增加冗余,但是復(fù)用會增加依賴。
為此,聰明的人們想到很多辦法,指出了“軟件設(shè)計原則”,還有人提到了“代碼壞味”,代碼質(zhì)量被重視起來了。擴(kuò)展性,高性能,穩(wěn)定性,可維護(hù)性,都是人們追求的目標(biāo)。丑陋的設(shè)計和骯臟的代碼,是不可容忍的。人們當(dāng)然知道“適用”才是最好的,當(dāng)然不想“過度設(shè)計”,當(dāng)然知道“模式”只是前人總結(jié)的一些可選經(jīng)驗。然而,某些代碼我們就是不能容忍。
后來,我們從這個層面跳出來了,看到了代碼要解決的問題,看到了“方案”和“需求”,看到了軟件怎樣被人使用,看到了代碼在工程中的作用。于是,我們學(xué)會了如何根據(jù)問題的結(jié)構(gòu)來組織代碼,根據(jù)業(yè)務(wù)的發(fā)展來促進(jìn)代碼的演進(jìn),學(xué)會了推動別人來使用軟件,為生態(tài)做出貢獻(xiàn)。然而,這并沒有什么卵用。我們?nèi)匀粫龅叫聽顩r,仍然有不能用已有經(jīng)驗去解決的問題,我們可能會遇到溝通問題,遇到協(xié)作問題,遇到工程問題。
這不是一個人的事情,我們不得不讓大家都知道哪里出問題了,才有可能解決它。我們發(fā)現(xiàn)了人的重要性,我們必須營造良好的“氛圍”,優(yōu)秀的人們才會被吸引過來。我們不得不主動溝通,統(tǒng)一方向,不得不擴(kuò)大影響力,促成某件事情落地執(zhí)行。

我們總有事情要做,沒有通用的解決方案,沒有“銀彈”。很多事情與代碼無關(guān),與編程也無關(guān),工程師們到底應(yīng)該做什么呢?有人會說,快速寫出可用的代碼去實現(xiàn)業(yè)務(wù)目標(biāo)就夠了。我承認(rèn)這是應(yīng)該做的,但是還有價值更大的事情。
這件事情就是,“想辦法”。有的人總是沒想法,而有的人總是會想辦法。這些,經(jīng)驗、原則、模式、方案、工程、文化,不都是別人想出來的嗎?關(guān)鍵不在于做什么,而在于誰去做它,不同的人會想出不同的辦法。
所以,我認(rèn)為軟件工程師并不僅僅是寫代碼的人。而是發(fā)現(xiàn)問題,并思考如何解決的人。能發(fā)現(xiàn)多大價值的問題并解決它,工程師就能創(chuàng)造多大的價值。這里提到的問題,并不局限于業(yè)務(wù)功能,也不局限于代碼本身,不局限于軟件工程,更不局限于團(tuán)隊文化。它們都是問題,都需要想辦法。我們想到的辦法如果可以用代碼解決,就實現(xiàn)它,如果不能,那就用別的辦法解決它。
我覺得,到了這一步,才能從容的面對丑陋的代碼,面對混亂的項目工程,面對水土不服的文化。為什么?因為這些問題,本來就應(yīng)該是工程師們,想辦法去解決的呀。
發(fā)現(xiàn)問題,讓我們想個辦法,然后解決它。
陳皓:我給大約40多家公司做過相應(yīng)的技術(shù)咨詢和解決過很多技術(shù)問題,絕大多數(shù)公司都是因為性能和穩(wěn)定性的問題來找我的,我給這些公司解決問題的時候,基本都是這樣的Pattern:一開始,發(fā)現(xiàn)都是一些技術(shù)知識點(diǎn)的問題;然后,馬上進(jìn)入到系統(tǒng)架構(gòu)方面方面的問題;當(dāng)再解決架構(gòu)問題的時候,我發(fā)現(xiàn),已經(jīng)是軟件工程的問題;而軟件工程問題的后面,又是公司管理上的問題;而公司管理的問題,結(jié)果又到了人的問題上;而人的問題,又到了公司文化的問題……
我能做的是,觀察這個公司的業(yè)務(wù)形態(tài)、和相關(guān)的思維方式,以及現(xiàn)有的資源和相應(yīng)的技術(shù)實力,幫助他們從技術(shù)到管理上緩解或改善現(xiàn)有的問題。