造“運載火箭”和造“太空梭”
吳旻
泰岩網路工作室
故事的來源有兩個:一是討論“編寫代碼時要不要考慮跨平台”引發的爭論;二是平時項目設計時有些兄弟拿出來的方案實在是讓我覺得有必要聊一聊。
今年春季的時候,我和我的老大談到我們的代碼是跨平台的,可移值性很好,結果遭到老大一頓痛罵。我當時當然覺得很委屈,但老大的出發點是覺得業務上就不應該使用於多平台,所以跨平台反而對我們不利。
以上的例子就足以說明,代碼要不要跨平台其實就是預期定位的問題。定位或者定義不清,或者前提假設不一致,是我們產生誤會的根源。定位它可移植,那它就應該可移植!但沒說要可移植,開發人員卻非要做成可移植的,就太自以為是了。
小時候家裡窮,所以常常老大穿完的衣服老二穿,老二穿完老三穿,依次類推。那時候家長買衣服必須考慮到要多穿幾年這個現實,所以選擇不外乎中性、寬大和結實耐用。而今天我們買衣服更強調的是個人化,強調的是越適合自己越好,根本與別人無關,所以買的衣服也大不相同。
這雷根本不存在什麼誰對誰錯的問題,而是要不要和適不適合的問題。實際開發應用中,我們發現有大量的項目是不太存在移植的可能性的,比如說應用程式層的開發;而某些代碼、模組確實有重用的可能,比如演算法開發。業務會不會導致項目移植,要不要跨平台,是公司上層決定的。今天覺得不需要跨平台,而市場機會稍縱即逝,那就趕緊抓住機會開發出客戶想要的程式;明天覺得有必要跨平台了,那就再重構出一套跨平台的商務邏輯來。項目開發不是真理,也不可能是真理,一旦決定,永遠不變!指望一次開發,終生受用的可能性已經幾乎不存在了!XP開發模式這麼多年來這麼流行,其實也就是這個意思。要考慮到業務速度,要考慮到代碼和模組的重用性,但不會憑空為跨不跨平台這類事情爭論不休,當然如果確實需要跨平台,那就不需要爭論。
前段時間,一個同事的設計被老大給否掉了。不是那位同事的設計在技術上有什麼不好,是他想的不是公司的目標,而是要“成就自我”。程式員要成就自我沒什麼錯,但前提必須是“融入團隊”。按自己的想法與興趣,去設計並主持開發項目,是技術人員的理想。但這一定要符合公司的利益才行,而不能只是為了實現個人的理想,這樣肯定是不會得到公司高層的支援的。
中國有句老話,叫“不合時宜”。它不是說對不對,而是說恰不恰當。比如,運載火箭和太空梭的功能差不多,但相比較而言,前者非常便宜,打一顆上天,用完就不要了;後者要可重複使用,光每次發射的費用就快夠造一顆運載火箭了。懂點常識的人都明白,太空梭比運載火箭技術上要高一個層次,要想掌握更先進的技術,要想成就自我,玩太空梭更合適。但現在連美國人都想用運載火箭了,就是因為實用、省錢;後者不是不好,但目前來講,太不合算了。
技術人員給自己錯誤的定位,導致了目標的偏離。一般來說,我們是工程技術人員,或者叫軟體工程師;但我們好多人心中的目標卻是技術研究人員,是教授、研究員或者院士。前者更關心利益和實用性,後者更關心科研成果和技術的先進性。