來自:
http://blog.csdn.net/david_lv/archive/2008/06/15/2548210.aspx
架構師是個很神圣的詞。蓋茨,世界首富。微軟,世界最大最富有的軟件公司。蓋茨是微軟的首席架構師。
好多程序員流口水,一聽某人是架構師,就兩眼發亮,比技術總監的頭銜還要厲害。
一想起架構師,大家就想起那些UML設計工具、類圖、時序圖,想起那些水泥大樓的框架和地基,想起了那些
如百變金剛的開發平臺,想起了那些讓人眩目的反射、元數據、FrameWork、設計模式、面向對象、重構。
很多人想當架構師,感覺架構師是技術職業發展的最高境界,在往上走就有管理職能了,如技術總監和CTO或
研發總裁之類的頭銜。
李維先生曾經有過一次演講,講到了一個架構師應該具備的特性:
1核心軟件技術。要攻克數據庫設計問題,必須深入了解數據庫的工作原理,而不是會寫復雜的SQL會管理個
備份會設計個表結構就算精通數據庫。有人甚至把會用hibernate\structs\spring當作自己會核心軟件技術
。
2產品特性。你學了那么多核心技術,到底要干嗎?我一直在商業軟件公司工作,沒有在研究所工作過。我各
種技術要做到的就是幫助企業軟件生產,如何更快更省力氣質量更好市場競爭力更強。我總是以這個原則來
驗證一項技術是否對于我的工作來說而實用。現在技術多如牛毛,在各個層次各個領域解決著各個環節的問
題。如果不以解決自己工作中的問題為圓心,很容易陷于到大量學習卻越來越茫然找不到出路的境地。
3軟件趨勢。在企業管理軟件開發領域,往往會見到這樣的現象:不少開發人員精通客戶業務需求,深入第一
線做客戶實施。他們學習技術也是為了解決現有手頭的問題。尤其企業管理軟件開發領域,技術要求并不高
,而如果不了解客戶需求,開發的軟件實用性就不強,即使你的功能開發的又性能好又安全性好也沒實用意
義。所以,不少在企業管理軟件開發領域工作多年的開發人員,形成了技術輕視觀,甚至有種核心技術學習
無用論的思想。但企業管理軟件開發領域,經過十多年的發展,已經面臨了不少挑戰。但是很多人覺得那是
大環境的事情,大環境不是一個人一個公司能改變能影響的。大環境變,咱們就跟著變。大環境不變,咱也
照舊。但是,我已經經歷過了很多時代,見證了很多遺憾,大環境發生改變了,自己卻跟不上了。
DOS\WINDOWS時代、單機\局域網時代、互聯網時代、移動增值時代。每一個時代都出了黑馬,賺取的金錢突
然高出傳統模式數倍,而傳統模式者還是在繼續走傳統模式,辛苦的賺錢,而且隨著價格戰的加劇,越來越
辛苦,但還不思改變者并且還認為不可改變者大有人在。
4創新技巧。我們往往會遇到這樣的情況:要解決手頭的問題,擺在面前的有N種技術方案。選擇哪個都有缺
點,綜合來用又感覺牛刀殺雞了。有時候,我們還會遇到另一種技術選擇,未來的軟件趨勢一定是那樣那樣
的,但現在還沒有達到,現在的技術方案都是過渡期的,所以我們還要等。否則利用現在的過渡期技術,開
發出來就被淘汰了。如果是這種以現狀看技術的思路,不管技術發展到什么階段,都有遺憾,都在向未來的
未來過渡。所以,作為一個架構師,比別人厲害就厲害在,總是能把手里這些技術巧妙的利用,以解決自己
的問題。當然,你想把你手中的技術能用活,你必然是理解這項技術的來龍去脈和這項技術的適用領域,還
要深入理解這項技術的工作原理,還要清楚的認識到你要解決的問題領域,否則,你無法把你的技術和你要
解決的問題結合在一起。
我對李維先生的這四點講述頗為贊許。架構師總是游走在技術和業務之間,既要兼容軟件歷史不能割裂又要
面向未來發展,所以我老把架構師稱為走鋼索的人。
很多人也想成為具有這樣特性的架構師,但就是不知道該怎么走這條路。我就講講我的經歷。
我剛出道的時候,很快成為公司技術出眾的程序員。有人跟蹤調試了一下午也找不到錯誤的,找我;有人不
知道這個錯誤是怎么引起的,找我;有人不知道某個需求怎么實現代碼方便,找我;有人要優化數據庫性能
,但怎么都速度提不上去,找我;有人要修改一段超復雜的代碼,怎么也理不出來,N多判斷和函數嵌套,腦
袋思考不過來了,對代碼的復雜度掌控不了了,找我;
我就跟一個活雷鋒一樣,大家也好像覺得我就是個活字典,有技術問題找我總沒有錯。就這樣,我在研發部
有了很好的技術信任,也有了很好的人緣。
而架構師要做的工作,是許多人工作的基礎。如果沒有很好的技術信任,大家怎么敢把他們的工作搭建在你
的基礎之上。如果沒有很好的人緣,大家怎么愿意把他們的工作搭建在你的基礎之上。
就是由于我解決了很多業務開發的問題,我了解了很多業務開發的現實狀況,并且還能提出簡潔有效的解決
方法,而且解決方法不死板不鐵板一塊能保持獨立靈活通用性,給其他人的工作帶來了很好的工作效率,所
以領導才信任我能做好這一塊,并且適合做這一職位。不是隨隨便便一個人深刻學習了核心技術,然后申請
領導要當架構師。
其實,我開始做的也僅僅是公共代碼員。但是,很快面臨了一個尷尬。
簡單的,雖然可能每個開發組都重復寫同樣類似的代碼,但是由于簡單,所以每個業務開發組都自己寫了。
復雜的,往往業務開發組組長都認為這個功能是自己這個組的個性功能,所以還是自己寫。
所以,只有人們解決不了來找我時,我才能上場。
這干坐著不是回事。我得自己想轍。
于是,我在忙“公益事務”做活雷鋒之余,看到他們在扎堆開會我就主動去旁聽。每次我都能提出很獨到的
見解。并且能幫助他們寫公共抽象代碼,能幫助他們提高不少工作效率。所以他們非常愿意讓我旁聽,并且
聽取我的意見。我也能很快寫完讓他們用。他們一用,發現果然好用,而且不用他們自己寫代碼了,功能實
現的還非常巧妙公用,性能也好穩定性也好擴展性也好。到后來,每次開會都主動叫我。這樣,我的工作就
越來越多了。
隨著各個業務組不同差異的需求都希望我來幫他們抽象出公共的,我就在思考我手里的這部分代碼。我不能
今天他們提一個我寫一個。他們倒是輕松了,但我手里就好似一盤散沙一樣。于是,我不斷重構我的公共代
碼,架構體系框架就這樣慢慢成型了。各種各樣公共工具,調試工具、優化工具、動態設計工具,凡是能幫
助業務開發組人員加快效率的,我都做了工具或寫了公共函數DLL。盡量簡單易用,不讓他們覺得麻煩或不順
手。
過去,各個業務開發組過去是開發人員素質不齊,有人責任心強,有人隨意;有人細心,有人粗心;有人理
解客戶業務深刻,有人理解不深刻。所以開發出來的質量良莠不齊。自從這樣做了以后,各個組寫的代碼少
,很多都是我寫的公共代碼。我的技術好,寫的代碼質量高,而且是公共的,有錯誤,一改,大家都沒有問
題了。所以我們整體的軟件產品的產品質量、生產速度都提高了不少。
我發現,大家越找我,各種需求交織在一起,越復雜,我就越需要更深入的學習技術,深刻理解各種技術的
差異性和適用領域,去思考各項技術的發展歷史、未來趨勢,并且自己做DEMO,看能不能更好的解決大家的
問題。因此,我的技術能力也越來越高。如果我不去解決這些不去第一線想也想不到的客戶需求,我根本就
想像不出我某項技術還能這樣用。
這就是我的螺旋上升之路。
我那天重翻上個月的《程序員》雜志,看到了我朋友周愛民寫的一篇《做人、做事、做架構師-架構師能力模
型解析》,他也提到四點,技術能力、業務能力、人際關系、個人內在素質。和我的情況很類似。
有一部分所謂的架構師,技術超深厚,框架堪比Spring之類,但自己一個人悶頭寫框架不斷優化,力竭使用
最先進的技術思想,希望把最豪華的設計模式融進去,希望把OSGi融進去,希望把AOP融進去,全無視那些想
利用框架減輕自己工作量提高自己工作效率的應用功能開發同事。這是在用公司工資玩技術呢,還是在滿足
個人技術幻想呢,還是在實驗呢?到底在干嗎?價值在哪里?
還有的人不會推廣自己的框架。不善言辭,就幻想著技術總監能夠通過行政命令讓大家必須用框架,能不自
己寫代碼就不自己寫代碼,能交給框架做的就交給框架做。但技術總監號召完了,大家仍然我行我素,各自
開發為政,讓框架開發者很孤單。
還有的人也不會推廣自己的框架,沉迷在自己的理想世界。好不容易技術總監召集大家讓大家來聽聽框架如
何應用,但自說自話,滿口自己最得意的詞匯,聽得業務功能開發人員云山霧罩。大家問些問題,如這樣的
業務開發難題,框架怎么解決?于是,框架開發員就和業務開發員爭論了起來。框架開發員覺得這根本就不
能答應客戶這種變態的需求,而業務開發員說這就是現狀。框架開發員說你可以這樣這樣,業務開發員說這
樣太麻煩,框架開發員立刻還口這還麻煩?于是雙方各執一詞,框架也沒推廣成功。
我手底下有個框架開發員。他的技術渴望很強烈,為了技術難題攻克,可以不吃不睡。并且技術敏感度很強
,學習也快。所以當時我感覺他是個程序員的料,就把他拉到我的手下。
但是有個問題,他寫出的框架代碼,在平時開發業務功能的時候挺麻煩。大家可能需要的是一把鐵鍬,但是
他卻給大家N根不同長度不同粗細不同材質的木棍,N個不同形狀不同用途的鐵鍬頭。大家會有N種組合。不僅
導致他寫代碼老超任務期,而且也讓使用人感覺沒多大幫助。使用起來復雜,而且還得配置這個配置哪個,
需要注意的地方太多。業務開發組的同事就不愿意用,還不如把代碼自己直接寫死了得了。
超期還會影響業務功能開發組的使用。本來人家是為了想加快自己的工作效率。你答應好這個星期給業務開
發組提供一個功能,但你沒有拿出來。就耽誤人家進度。你多次拿不出來,人家業務開發組還不如自己開發
一個呢,求人不如求己。
我最后警告他:如果你認為自己技術夠牛,那么你必須證明你能很快做出來。如果你認為自己技術夠牛,最
好能牛到,只提供一個函數就解決了他們的問題。別這個代理類,那個聚合類,這個唯一實例類。最好連參
數也沒有,大家調用一下寫一句代碼就OK。甚至你做的好,大家都不用調用你的代碼,你可以包含在基礎框
架中,你自己去判斷什么時候什么應用需要執行這個動作。如果你認為自己技術夠牛,那么在業務功能需求
發生變化的時候,你能夠保證接口不變的情況下還能適合變化,這才你夠牛。別讓業務開發組的人跟著你也
得改他們自己的代碼,那樣的設計就很爛了。
小伙聽了我的話。進度保證,代碼接口簡潔。
他說,你真高。我感覺現在我的技術比過去進展飛快。看來人不逼,是不會自己創新更好更快的方法的,老
認為自己現有的方法已經不能優化了。我現在發現,很多我過去寫的東西還可以做的更好,我準備在開發任
務之余優化代碼,但肯定保證不影響大家,接口還跟過去一樣,我要重構一下。
我對小伙的成長感到欣慰。
但是,小伙還有一個沒有逾越的鴻溝。這個問題不解決,我知道,他不會成為一個真正的獨立的架構師。
我復查過他的代碼,由于他對業務沒有深刻理解,所以考慮了N多種情況,給自己以后的修改留下了后路。但
也因此代碼量大,開發周期長無法適應越來越短的客戶需求響應時間,可閱讀性不強,功能復雜,穩定性困
難。但我從客戶行業出發,很多情況他其實都是自己假想的,而且想錯了。
我指出了他的問題。他問我該怎么學習業務,他又沒有機會到客戶一線去實施,也不接聽客戶電話,客戶需
求都是業務開發組的人跟他說的。
最了解客戶業務的,是在一線做客戶咨詢、做客戶實施的人員。其次是做客戶定制化、客戶服務支持的人員
。最不了解客戶的,就是架構組的人員。但恰恰要命的是,架構組的人員做的功能是大家的工作基礎,如果
基礎設計錯誤,那傳遞的“牛鞭效應”破壞力就很大。所以,架構必須了解業務。
我了解業務的思路,和我了解技術是一個思路,都是來龍去脈法,研究一項事情的過去、現在、未來,以及
和這件事情關聯的其他事情,研究方法也如法炮制。
你要制造的是卡車還是轎車,你得明確好。你是要造100萬的轎車,還是5萬塊錢的轎車,也得定好。你是要
制造一輛可以自由改裝的轎車呢,還是一輛只可以大致改裝一些的轎車的,也得定好。這些疑問,都是和咱
們面臨的客戶有關。而我們能面臨什么層次的客戶,和咱們公司的實力、品牌、組織規模、盈利要求有關。
你如果是一個小公司,想做百萬大單只能做的一蹋糊涂。你如果是個大公司,你老去競爭那些5萬塊的小單,
做一個賠一個。所以一個公司的出身就決定了它的競爭地位和它的目標群。我們要為這個目標群服務,所以
我們就不要做一個百變金剛的架構。公司有公司的目標,公司招了你給你付工資,就是為了讓你為目標客戶
群服務。如何更快更好更有質量的服務,就是公司的目標。我們就是為了幫助公司實現這個目標。
我一般都是把我們這個產業的競爭格局現狀了解清楚,我們的過去現在,競爭對手的過去現在都了解清楚。然后我去研究我們的客戶行業的競爭格局、層次現狀。看看這個客戶行業盤子,三教九流到底多大多復雜,
我們現在是占了多大,我們還能占領哪些客戶群。
然后我就研究客戶行業目前的挑戰、機遇、困境。能解決其中一兩個問題,就是咱們的競爭亮點。如果作為
軟件一點都解決不了這些業務困境,我就思考如何讓產品做的更易用。微軟不就靠著易用發家的么?
最后我會去研究我們公司現有的研發優勢和弱勢、實施服務銷售的優勢和弱勢,找到適合我們突破的地方,
具體歸研發能承擔能起作用的事情,我就會去動員做。脫離現實資源現實矛盾現實包袱的改良,是無法做到
改良的。
我還關心各種新的技術應用。可能這項技術很久了,但大家都沒有想過還能這樣用。所以,我常常在媒體上
關注這些、思考這些、在論壇上和業界交流這些。對于新的技術,要研究原理,要嘗試,但不要沖動引入到
商品生產中。我們不是自己在創業在玩在實現自己的夢想。我們承擔的是公司所有人都要吃飯的產品。如果
有閃失,這么多人以及他們的家庭都要受到影響。這不是鬧著玩。
當我研究完業務領域的這些大的框框以后,每逢有業務同事跟我交流客戶需求,我總能把這個需求和我的業
務框架聯系在一起,把這個需求歸好類。并且能判斷出這個需求是個反趨勢的需求,還是個短期眼光的需求
,還是個長遠發展的需求。
很多人都在抱怨說需求老變化。其實,不是客戶需求在變,而是你對客戶的需求老是不同思路去理解。我心
中有業務框架,有過去,現在,未來,所以能識別出一個需求是穩定的還是臨時拍腦門想出來的。有時候,
有人向我提一個需求,我會眼睛一亮,對,這個需求符合未來發展,我就會很快加入。所以,我曾經在做實
施經理的時候,老是能很容易說服客戶,讓客戶聽從我的意見,就是由于我想的比他們還要遠還要周全。好
多程序員說客戶非要某個功能不做不行,就說明這個程序員并沒有理解客戶。客戶并不是那個非要和你作對
的人,他只想解決他的問題。可能你不理解他的真正根源問題而且你又提不出更好的方案,所以他要跟你急
,要讓你必須實現某個功能。
只有你不斷游走在業務過去現狀未來與技術過去現狀未來,你做的架構才是真正的實用、彈性、易用,而且
最小成本,不走彎路,不多花開發精力。
我們需要架構,不就是為了達到這個目的么。

架構師是個很神圣的詞。蓋茨,世界首富。微軟,世界最大最富有的軟件公司。蓋茨是微軟的首席架構師。
好多程序員流口水,一聽某人是架構師,就兩眼發亮,比技術總監的頭銜還要厲害。
一想起架構師,大家就想起那些UML設計工具、類圖、時序圖,想起那些水泥大樓的框架和地基,想起了那些
如百變金剛的開發平臺,想起了那些讓人眩目的反射、元數據、FrameWork、設計模式、面向對象、重構。
很多人想當架構師,感覺架構師是技術職業發展的最高境界,在往上走就有管理職能了,如技術總監和CTO或
研發總裁之類的頭銜。
李維先生曾經有過一次演講,講到了一個架構師應該具備的特性:
1核心軟件技術。要攻克數據庫設計問題,必須深入了解數據庫的工作原理,而不是會寫復雜的SQL會管理個
備份會設計個表結構就算精通數據庫。有人甚至把會用hibernate\structs\spring當作自己會核心軟件技術
。
2產品特性。你學了那么多核心技術,到底要干嗎?我一直在商業軟件公司工作,沒有在研究所工作過。我各
種技術要做到的就是幫助企業軟件生產,如何更快更省力氣質量更好市場競爭力更強。我總是以這個原則來
驗證一項技術是否對于我的工作來說而實用。現在技術多如牛毛,在各個層次各個領域解決著各個環節的問
題。如果不以解決自己工作中的問題為圓心,很容易陷于到大量學習卻越來越茫然找不到出路的境地。
3軟件趨勢。在企業管理軟件開發領域,往往會見到這樣的現象:不少開發人員精通客戶業務需求,深入第一
線做客戶實施。他們學習技術也是為了解決現有手頭的問題。尤其企業管理軟件開發領域,技術要求并不高
,而如果不了解客戶需求,開發的軟件實用性就不強,即使你的功能開發的又性能好又安全性好也沒實用意
義。所以,不少在企業管理軟件開發領域工作多年的開發人員,形成了技術輕視觀,甚至有種核心技術學習
無用論的思想。但企業管理軟件開發領域,經過十多年的發展,已經面臨了不少挑戰。但是很多人覺得那是
大環境的事情,大環境不是一個人一個公司能改變能影響的。大環境變,咱們就跟著變。大環境不變,咱也
照舊。但是,我已經經歷過了很多時代,見證了很多遺憾,大環境發生改變了,自己卻跟不上了。
DOS\WINDOWS時代、單機\局域網時代、互聯網時代、移動增值時代。每一個時代都出了黑馬,賺取的金錢突
然高出傳統模式數倍,而傳統模式者還是在繼續走傳統模式,辛苦的賺錢,而且隨著價格戰的加劇,越來越
辛苦,但還不思改變者并且還認為不可改變者大有人在。
4創新技巧。我們往往會遇到這樣的情況:要解決手頭的問題,擺在面前的有N種技術方案。選擇哪個都有缺
點,綜合來用又感覺牛刀殺雞了。有時候,我們還會遇到另一種技術選擇,未來的軟件趨勢一定是那樣那樣
的,但現在還沒有達到,現在的技術方案都是過渡期的,所以我們還要等。否則利用現在的過渡期技術,開
發出來就被淘汰了。如果是這種以現狀看技術的思路,不管技術發展到什么階段,都有遺憾,都在向未來的
未來過渡。所以,作為一個架構師,比別人厲害就厲害在,總是能把手里這些技術巧妙的利用,以解決自己
的問題。當然,你想把你手中的技術能用活,你必然是理解這項技術的來龍去脈和這項技術的適用領域,還
要深入理解這項技術的工作原理,還要清楚的認識到你要解決的問題領域,否則,你無法把你的技術和你要
解決的問題結合在一起。
我對李維先生的這四點講述頗為贊許。架構師總是游走在技術和業務之間,既要兼容軟件歷史不能割裂又要
面向未來發展,所以我老把架構師稱為走鋼索的人。
很多人也想成為具有這樣特性的架構師,但就是不知道該怎么走這條路。我就講講我的經歷。
我剛出道的時候,很快成為公司技術出眾的程序員。有人跟蹤調試了一下午也找不到錯誤的,找我;有人不
知道這個錯誤是怎么引起的,找我;有人不知道某個需求怎么實現代碼方便,找我;有人要優化數據庫性能
,但怎么都速度提不上去,找我;有人要修改一段超復雜的代碼,怎么也理不出來,N多判斷和函數嵌套,腦
袋思考不過來了,對代碼的復雜度掌控不了了,找我;
我就跟一個活雷鋒一樣,大家也好像覺得我就是個活字典,有技術問題找我總沒有錯。就這樣,我在研發部
有了很好的技術信任,也有了很好的人緣。
而架構師要做的工作,是許多人工作的基礎。如果沒有很好的技術信任,大家怎么敢把他們的工作搭建在你
的基礎之上。如果沒有很好的人緣,大家怎么愿意把他們的工作搭建在你的基礎之上。
就是由于我解決了很多業務開發的問題,我了解了很多業務開發的現實狀況,并且還能提出簡潔有效的解決
方法,而且解決方法不死板不鐵板一塊能保持獨立靈活通用性,給其他人的工作帶來了很好的工作效率,所
以領導才信任我能做好這一塊,并且適合做這一職位。不是隨隨便便一個人深刻學習了核心技術,然后申請
領導要當架構師。
其實,我開始做的也僅僅是公共代碼員。但是,很快面臨了一個尷尬。
簡單的,雖然可能每個開發組都重復寫同樣類似的代碼,但是由于簡單,所以每個業務開發組都自己寫了。
復雜的,往往業務開發組組長都認為這個功能是自己這個組的個性功能,所以還是自己寫。
所以,只有人們解決不了來找我時,我才能上場。
這干坐著不是回事。我得自己想轍。
于是,我在忙“公益事務”做活雷鋒之余,看到他們在扎堆開會我就主動去旁聽。每次我都能提出很獨到的
見解。并且能幫助他們寫公共抽象代碼,能幫助他們提高不少工作效率。所以他們非常愿意讓我旁聽,并且
聽取我的意見。我也能很快寫完讓他們用。他們一用,發現果然好用,而且不用他們自己寫代碼了,功能實
現的還非常巧妙公用,性能也好穩定性也好擴展性也好。到后來,每次開會都主動叫我。這樣,我的工作就
越來越多了。
隨著各個業務組不同差異的需求都希望我來幫他們抽象出公共的,我就在思考我手里的這部分代碼。我不能
今天他們提一個我寫一個。他們倒是輕松了,但我手里就好似一盤散沙一樣。于是,我不斷重構我的公共代
碼,架構體系框架就這樣慢慢成型了。各種各樣公共工具,調試工具、優化工具、動態設計工具,凡是能幫
助業務開發組人員加快效率的,我都做了工具或寫了公共函數DLL。盡量簡單易用,不讓他們覺得麻煩或不順
手。
過去,各個業務開發組過去是開發人員素質不齊,有人責任心強,有人隨意;有人細心,有人粗心;有人理
解客戶業務深刻,有人理解不深刻。所以開發出來的質量良莠不齊。自從這樣做了以后,各個組寫的代碼少
,很多都是我寫的公共代碼。我的技術好,寫的代碼質量高,而且是公共的,有錯誤,一改,大家都沒有問
題了。所以我們整體的軟件產品的產品質量、生產速度都提高了不少。
我發現,大家越找我,各種需求交織在一起,越復雜,我就越需要更深入的學習技術,深刻理解各種技術的
差異性和適用領域,去思考各項技術的發展歷史、未來趨勢,并且自己做DEMO,看能不能更好的解決大家的
問題。因此,我的技術能力也越來越高。如果我不去解決這些不去第一線想也想不到的客戶需求,我根本就
想像不出我某項技術還能這樣用。
這就是我的螺旋上升之路。
我那天重翻上個月的《程序員》雜志,看到了我朋友周愛民寫的一篇《做人、做事、做架構師-架構師能力模
型解析》,他也提到四點,技術能力、業務能力、人際關系、個人內在素質。和我的情況很類似。
有一部分所謂的架構師,技術超深厚,框架堪比Spring之類,但自己一個人悶頭寫框架不斷優化,力竭使用
最先進的技術思想,希望把最豪華的設計模式融進去,希望把OSGi融進去,希望把AOP融進去,全無視那些想
利用框架減輕自己工作量提高自己工作效率的應用功能開發同事。這是在用公司工資玩技術呢,還是在滿足
個人技術幻想呢,還是在實驗呢?到底在干嗎?價值在哪里?
還有的人不會推廣自己的框架。不善言辭,就幻想著技術總監能夠通過行政命令讓大家必須用框架,能不自
己寫代碼就不自己寫代碼,能交給框架做的就交給框架做。但技術總監號召完了,大家仍然我行我素,各自
開發為政,讓框架開發者很孤單。
還有的人也不會推廣自己的框架,沉迷在自己的理想世界。好不容易技術總監召集大家讓大家來聽聽框架如
何應用,但自說自話,滿口自己最得意的詞匯,聽得業務功能開發人員云山霧罩。大家問些問題,如這樣的
業務開發難題,框架怎么解決?于是,框架開發員就和業務開發員爭論了起來。框架開發員覺得這根本就不
能答應客戶這種變態的需求,而業務開發員說這就是現狀。框架開發員說你可以這樣這樣,業務開發員說這
樣太麻煩,框架開發員立刻還口這還麻煩?于是雙方各執一詞,框架也沒推廣成功。
我手底下有個框架開發員。他的技術渴望很強烈,為了技術難題攻克,可以不吃不睡。并且技術敏感度很強
,學習也快。所以當時我感覺他是個程序員的料,就把他拉到我的手下。
但是有個問題,他寫出的框架代碼,在平時開發業務功能的時候挺麻煩。大家可能需要的是一把鐵鍬,但是
他卻給大家N根不同長度不同粗細不同材質的木棍,N個不同形狀不同用途的鐵鍬頭。大家會有N種組合。不僅
導致他寫代碼老超任務期,而且也讓使用人感覺沒多大幫助。使用起來復雜,而且還得配置這個配置哪個,
需要注意的地方太多。業務開發組的同事就不愿意用,還不如把代碼自己直接寫死了得了。
超期還會影響業務功能開發組的使用。本來人家是為了想加快自己的工作效率。你答應好這個星期給業務開
發組提供一個功能,但你沒有拿出來。就耽誤人家進度。你多次拿不出來,人家業務開發組還不如自己開發
一個呢,求人不如求己。
我最后警告他:如果你認為自己技術夠牛,那么你必須證明你能很快做出來。如果你認為自己技術夠牛,最
好能牛到,只提供一個函數就解決了他們的問題。別這個代理類,那個聚合類,這個唯一實例類。最好連參
數也沒有,大家調用一下寫一句代碼就OK。甚至你做的好,大家都不用調用你的代碼,你可以包含在基礎框
架中,你自己去判斷什么時候什么應用需要執行這個動作。如果你認為自己技術夠牛,那么在業務功能需求
發生變化的時候,你能夠保證接口不變的情況下還能適合變化,這才你夠牛。別讓業務開發組的人跟著你也
得改他們自己的代碼,那樣的設計就很爛了。
小伙聽了我的話。進度保證,代碼接口簡潔。
他說,你真高。我感覺現在我的技術比過去進展飛快。看來人不逼,是不會自己創新更好更快的方法的,老
認為自己現有的方法已經不能優化了。我現在發現,很多我過去寫的東西還可以做的更好,我準備在開發任
務之余優化代碼,但肯定保證不影響大家,接口還跟過去一樣,我要重構一下。
我對小伙的成長感到欣慰。
但是,小伙還有一個沒有逾越的鴻溝。這個問題不解決,我知道,他不會成為一個真正的獨立的架構師。
我復查過他的代碼,由于他對業務沒有深刻理解,所以考慮了N多種情況,給自己以后的修改留下了后路。但
也因此代碼量大,開發周期長無法適應越來越短的客戶需求響應時間,可閱讀性不強,功能復雜,穩定性困
難。但我從客戶行業出發,很多情況他其實都是自己假想的,而且想錯了。
我指出了他的問題。他問我該怎么學習業務,他又沒有機會到客戶一線去實施,也不接聽客戶電話,客戶需
求都是業務開發組的人跟他說的。
最了解客戶業務的,是在一線做客戶咨詢、做客戶實施的人員。其次是做客戶定制化、客戶服務支持的人員
。最不了解客戶的,就是架構組的人員。但恰恰要命的是,架構組的人員做的功能是大家的工作基礎,如果
基礎設計錯誤,那傳遞的“牛鞭效應”破壞力就很大。所以,架構必須了解業務。
我了解業務的思路,和我了解技術是一個思路,都是來龍去脈法,研究一項事情的過去、現在、未來,以及
和這件事情關聯的其他事情,研究方法也如法炮制。
你要制造的是卡車還是轎車,你得明確好。你是要造100萬的轎車,還是5萬塊錢的轎車,也得定好。你是要
制造一輛可以自由改裝的轎車呢,還是一輛只可以大致改裝一些的轎車的,也得定好。這些疑問,都是和咱
們面臨的客戶有關。而我們能面臨什么層次的客戶,和咱們公司的實力、品牌、組織規模、盈利要求有關。
你如果是一個小公司,想做百萬大單只能做的一蹋糊涂。你如果是個大公司,你老去競爭那些5萬塊的小單,
做一個賠一個。所以一個公司的出身就決定了它的競爭地位和它的目標群。我們要為這個目標群服務,所以
我們就不要做一個百變金剛的架構。公司有公司的目標,公司招了你給你付工資,就是為了讓你為目標客戶
群服務。如何更快更好更有質量的服務,就是公司的目標。我們就是為了幫助公司實現這個目標。
我一般都是把我們這個產業的競爭格局現狀了解清楚,我們的過去現在,競爭對手的過去現在都了解清楚。然后我去研究我們的客戶行業的競爭格局、層次現狀。看看這個客戶行業盤子,三教九流到底多大多復雜,
我們現在是占了多大,我們還能占領哪些客戶群。
然后我就研究客戶行業目前的挑戰、機遇、困境。能解決其中一兩個問題,就是咱們的競爭亮點。如果作為
軟件一點都解決不了這些業務困境,我就思考如何讓產品做的更易用。微軟不就靠著易用發家的么?
最后我會去研究我們公司現有的研發優勢和弱勢、實施服務銷售的優勢和弱勢,找到適合我們突破的地方,
具體歸研發能承擔能起作用的事情,我就會去動員做。脫離現實資源現實矛盾現實包袱的改良,是無法做到
改良的。
我還關心各種新的技術應用。可能這項技術很久了,但大家都沒有想過還能這樣用。所以,我常常在媒體上
關注這些、思考這些、在論壇上和業界交流這些。對于新的技術,要研究原理,要嘗試,但不要沖動引入到
商品生產中。我們不是自己在創業在玩在實現自己的夢想。我們承擔的是公司所有人都要吃飯的產品。如果
有閃失,這么多人以及他們的家庭都要受到影響。這不是鬧著玩。
當我研究完業務領域的這些大的框框以后,每逢有業務同事跟我交流客戶需求,我總能把這個需求和我的業
務框架聯系在一起,把這個需求歸好類。并且能判斷出這個需求是個反趨勢的需求,還是個短期眼光的需求
,還是個長遠發展的需求。
很多人都在抱怨說需求老變化。其實,不是客戶需求在變,而是你對客戶的需求老是不同思路去理解。我心
中有業務框架,有過去,現在,未來,所以能識別出一個需求是穩定的還是臨時拍腦門想出來的。有時候,
有人向我提一個需求,我會眼睛一亮,對,這個需求符合未來發展,我就會很快加入。所以,我曾經在做實
施經理的時候,老是能很容易說服客戶,讓客戶聽從我的意見,就是由于我想的比他們還要遠還要周全。好
多程序員說客戶非要某個功能不做不行,就說明這個程序員并沒有理解客戶。客戶并不是那個非要和你作對
的人,他只想解決他的問題。可能你不理解他的真正根源問題而且你又提不出更好的方案,所以他要跟你急
,要讓你必須實現某個功能。
只有你不斷游走在業務過去現狀未來與技術過去現狀未來,你做的架構才是真正的實用、彈性、易用,而且
最小成本,不走彎路,不多花開發精力。
我們需要架構,不就是為了達到這個目的么。