讀後感:走鋼索的人---走出軟件作坊:三五個人十來條槍 如何成爲開發正規軍(十七)

走鋼索的人---走出軟件作坊:三五個人十來條槍 如何成爲開發正規軍(十七)

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萬塊的小單,

做一個賠一個。所以一個公司的出身就決定了它的競爭地位和它的目標羣。我們要爲這個目標羣服務,所以

我們就不要做一個百變金剛的架構。公司有公司的目標,公司招了你給你付工資,就是爲了讓你爲目標客戶

羣服務。如何更快更好更有質量的服務,就是公司的目標。我們就是爲了幫助公司實現這個目標。

我一般都是把我們這個產業的競爭格局現狀瞭解清楚,我們的過去現在,競爭對手的過去現在都瞭解清楚。 然後我去研究我們的客戶行業的競爭格局、層次現狀。看看這個客戶行業盤子,三教九流到底多大多複雜,

我們現在是佔了多大,我們還能佔領哪些客戶羣。

然後我就研究客戶行業目前的挑戰、機遇、困境。能解決其中一兩個問題,就是咱們的競爭亮點。如果作爲

軟件一點都解決不了這些業務困境,我就思考如何讓產品做的更易用。微軟不就靠着易用發家的麼?

最後我會去研究我們公司現有的研發優勢和弱勢、實施服務銷售的優勢和弱勢,找到適合我們突破的地方,

具體歸研發能承擔能起作用的事情,我就會去動員做。脫離現實資源現實矛盾現實包袱的改良,是無法做到

改良的。

我還關心各種新的技術應用。可能這項技術很久了,但大家都沒有想過還能這樣用。所以,我常常在媒體上

關注這些、思考這些、在論壇上和業界交流這些。對於新的技術,要研究原理,要嘗試,但不要衝動引入到

商品生產中。我們不是自己在創業在玩在實現自己的夢想。我們承擔的是公司所有人都要喫飯的產品。如果

有閃失,這麼多人以及他們的家庭都要受到影響。這不是鬧着玩。

當我研究完業務領域的這些大的框框以後,每逢有業務同事跟我交流客戶需求,我總能把這個需求和我的業

務框架聯繫在一起,把這個需求歸好類。並且能判斷出這個需求是個反趨勢的需求,還是個短期眼光的需求

,還是個長遠發展的需求。

很多人都在抱怨說需求老變化。其實,不是客戶需求在變,而是你對客戶的需求老是不同思路去理解。我心

中有業務框架,有過去,現在,未來,所以能識別出一個需求是穩定的還是臨時拍腦門想出來的。有時候,

有人向我提一個需求,我會眼睛一亮,對,這個需求符合未來發展,我就會很快加入。所以,我曾經在做實

施經理的時候,老是能很容易說服客戶,讓客戶聽從我的意見,就是由於我想的比他們還要遠還要周全。好

多程序員說客戶非要某個功能不做不行,就說明這個程序員並沒有理解客戶。客戶並不是那個非要和你作對

的人,他只想解決他的問題。可能你不理解他的真正根源問題而且你又提不出更好的方案,所以他要跟你急

,要讓你必須實現某個功能。

只有你不斷遊走在業務過去現狀未來與技術過去現狀未來,你做的架構纔是真正的實用、彈性、易用,而且

最小成本,不走彎路,不多花開發精力。

我們需要架構,不就是爲了達到這個目的麼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章