【敵後武功團紀念文章】20140618 老顧:國內一些IT人對新技術應用在死搬硬套

【求職招聘敵後武工團】群微信 - 「生活那些事」

20140618【技術版】老顧:國內一些IT人對新技術應用在死搬硬套

本版責編:Jacky Bill

作者是誰?

老顧(Rafael Gu),擁有12年IT行業技術研發經驗以及8年技術團隊管理經驗;參與過20+的項目研發和10+的項目系統架構設計;管理過8+的敏捷團隊;有2+次創業經歷;意外獲得過Access Leading Self certificated 和 SCRUM Master certificated。致力於傳播IT技能和思想的非理論派IT男。

原標題:說說我所見的國內一些IT技術人員中的一些問題

工作已經7年了,作為一個IT技術人員,從剛畢業的初級程序員,做到現在創辦自己的公司,這期間經歷了各式各樣的項目,遇到了不少的各種個這樣的技術人員,自己也有不少的長進和體悟。

就技術領域而言,我所涉及的面相對廣泛,因為畢業前3年所從事的都是用C/C++做比較底層的工作,比如支持多用戶、多線程對一個DLL的調用的並發,寫過COM和ActiveX,封裝過線程庫、Socket庫,各種協議棧的通信處理等,基礎的的C/C++代碼超過10萬~15萬行(第二年負責的一個核心模塊就有6萬多行代碼),所以很幸運自己能夠在一開始就能打下這麼紮實的基礎,使以後對技術的把握可以更加得心應手,最讓我自豪的是這期間我創造了 SCS。後來我逐漸偏向上層應用,經歷了各種Web網站,基於J2EE的銀行系統,VoIP,3~3.5G的流媒體等一系列項目的歷練,使用了一些現在流行的ACE,Xerces,Web Service,EJB3,Spring,Asterisk,Flex,J2ME等框架和平台,除了積累了很多項目經驗,在管理團隊上也逐漸得心應手——可以說,現在年近30的我,已經逐步找到了一個技術人員的定位。

這7年下來,在我身上,或者在我接觸的技術人員或者自稱為技術人員的身上,不斷發現了各種各樣的問題,最近正好不忙,本著有則改之的態度,做一些總結,希望對自己,對大家都有所幫助。我說的這些問題,不包括所謂程序員孤僻寡言的性格之類的。

*******************************************

一、技術功底不紮實

當時我在學校的時候,自己對很多技術就有了初步的研究,買過過一些軟體的書籍,看過其中大部分,也做過一些實際有外快的項目,在省級軟體競賽上也獲得過獎。記得當時大三,我每天堅持到圖書館看《Windows核心編程》,那時候看起來比較吃力,但還是做了筆記,現在筆記還在我的書架里,而且這本書對我以後在Windows上的開發幫助很大,對我理解其他操作系統的幫助也很大。另外在學校也學習了C++,很早就學會了VS 6這個IDE,可惜沒有太大的項目給我練手。畢業很順利,老師介紹我去了一家美國軟體公司,後來在那裡也比較閑,本職工作只是用Windows SDK和MFC開發一些界面,就先後按照當時Web的項目組的項目的原型,構造了一個PHP+XSLT+XML的網站,然後是一些JSP、Servlet 和Java Applet例子,後來自己找事情,開始學習COM,AtiveX和ATL,買了一些書,這些書讓我對C++有了更加本質的認識,可以說已經開始有了對 C++內力的基礎。

後來離開這家公司,我有過用VB和VC寫一個電視點播自助系統的開發,讓我體會到了開發的痛苦。

而後轉入到移動中間設備的開發——這是我代碼量產最多,也是我對計算機編程受益最大的時期,這期間,我主要負責核心交換模塊的開發,在我離開這裡之前,我總結過,從核心交換等模塊,幾個AcitveX,還有一些基於XML的智能流量測試工具等輔助模塊,大大小小,我用C++寫過10多個模塊,還用 J2SE寫過一個底層交換的模塊。在空閑,我還閱讀過設計模式,分散式處理系統等書籍,讓我對編程,對架構,對設計模式等很多東西都有了很深的認識。

之後我構思SCS(那時候叫軟體活化技術),通過對非常底層的編譯到上層的應用的開發,實現了SCS,讓我對IT技術有了更加宏觀的認識,那時候對SOA、Middleware等各種新的概念都理解的很快。(最近,我用重啟了SCS的開發。)

之後我就逐漸轉向上層的實際應用,很多項目都開始直接使用開源的庫或者工具來是實現,先後進行了VoIP的一系列開發,一個3~3.5G手機視頻系統的開發,一個基於SOA和EJB3,Spring(EJB3和Spring分別應用在兩個獨立的模塊,用Web Service進行整合)銀行項目的開發等。這期間,看書少了,主要是通過搜索引擎來學習,很好的利用搜索引擎可以很快放大一個技術人員的知識和能力。主要學習的方向也從具體的某個技術轉向更高的框架和平台、以及管理和商務上的一些知識。

經過以上所描述的7年,我有了現在比較紮實的技術功底。反觀這7年我所遇到的同事和同行,以及我現在和別人合作,或者招聘時遇到的一些人,我覺得國內的IT技術圈在技術上,大多數人的技術功底都不可靠,當然這只是我的一己之見,下面說說為什麼我會這麼認為。

首先,我遇到很多搞技術的,擋在一起工作的時候,他們很少和別人溝通技術,比如現在的新技術,新方法等,也很少去留意這些技術,他們只關注本職工作,比如他們剛畢業,就需要跟著項目組用Stucts+Spring+Hibernate實現項目,他們就會去學習,然後用這些技術工作,對其他技術也不 再關心,以後就算換了工作,他們也會找StuctsSpringHibernate的工作,你要問他們所掌握的技術在宏觀上看,處於什麼位置、那一 層,他們不知道;要問他們對這些技術的由來、底層的原理,他們也不知道。他們只是會用這些技術。我試圖過分析他們,我是這麼想的,他們對技術本身並沒有什麼熱愛,他們只是需要一個工資比較高,聽上去比較好聽的工作——比如做IT、做軟體的,然後他們就死抱著自己的一技之長,在漫長的職業生涯中貸款買房、等待退休……我覺得大多數IT技術人員都在這個範疇,要求他們要有紮實的技術基礎,從而可以進行更高一個層次的工作,那是不現實的。

其次,是一個比較宏觀的原因,聯繫到我們國內的實際情況,每年有大量的IT或者非IT行業的畢業生湧入IT技術開發這個行業,對於這些新手的需求,永遠是供大於求,這些新手的成本也就很低,那麼前幾年畢業的師兄不可避免的就要往上走,去當這些師弟師妹的師傅,逐漸走向領導崗位。我在2004年的接觸過上海的一家相當規模的門戶網站,他們那時候招收了一個畢業才一年多的小夥子,做技術。2005年我再去他們那裡,這個小夥子已經是一個團隊的經理了。還有一次是2006年,我遇到一個從上海交大畢業1年多的同行,我當時是Leader,他問我當Leader要不要寫代碼,他怎麼才能當上Leader不寫代碼,和他持有相同觀念的人我接觸到的不是一個兩個。從我的角度,對於Leader的職責,不是在於他寫不寫代碼,而是他能不能很好的帶領團隊去完成技術任務,滿足客戶需求,但是當他的技術都不紮實,他所帶領團隊的技術又怎麼讓人信服呢?所以,當我們國內普遍有一些2~3年經驗的人就當了技術部門的領導,而且都不想寫代碼了,那麼試問,我們的技術怎麼會紮實呢?現在我們用的很多技術都是從國外舶來的,這些技術也都是國外那些在技術上紮實的大師,在不斷的編寫代碼中提煉出來的,如果我們沒有一個紮實,可持續的技術環境,我們怎麼去提煉我們的創新技術?

以上我所說的讓我想起一個例子,在2006年~2007年的候,一個美國的工程師和我一起做項目,我下面還有一個9人的團隊,這個美國工程師的敬業讓我非常敬佩,除了團隊的管理方式,就很多代碼、架構等基本的技術性細節他都自己親自和我一起探討,在我們這個團隊遇到疑難問題時,他也都協助大家一起解決;他還負責和美國客戶的溝通。他在微軟、賽門鐵克等大公司都工作過……反觀我所接觸的國內所謂的中、高層技術人員,其實大都不寫代碼,甚至不接觸技術很久了,和他們談話只感覺到一種空洞,這種人在國內技術中高層的充斥讓人寒心。

最後,我想說的是一個更宏觀的大環境,這個環境里,大學的高級教授不在做學問,而是利用國家、學校給予的資源帶著弟子用J2EE、.NET等所謂國外技術給企業開發應用賺錢,並且美其名曰:XX國家級實驗室或者XX國家級研究中心……在這麼一種浮躁的、金本位的環境里,有多少人可以踏踏實實的做技術、做學問呢?我遇到一些剛畢業的技術人員,不能踏踏實實做事情,一開始寫代碼就叫苦不迭,給別人訴苦說自己不適合做技術,適合做銷售,後來就做銷售,也做不好——最後不說一事無成,就連基本的一技之長也都沒有。前年遇到合作的一個老總,他給我推薦一個技術高手,和這個高手一溝通下來,這位高手也老實告訴我,他連一年技術都沒有做滿,現在只知道一些技術辭彙,忽悠這些老總足夠了,哈哈,這位老兄的坦率讓人敬佩,但是這樣的人多了,難免會對國內的整個技術圈有很壞的影響!我想,這也不光是IT技術圈才有的情況。

二、對技術關注過於片面和過激,忽略人和實際需求

所謂「存在即合理」是一個很正確的哲學觀念,所以技術的存在有其必定的合理性,其合理性就在於能夠為人們提供各種有價值的應用。魯迅諷刺孔乙己會4 個回字的寫法,就是因為文字書寫形式存在的合理性是為了方便人之間的溝通;而會寫4種回字存在的合理性在於炫耀,一點也不實用,還招致別人反感。我見過一些對技術有熱情的同行,就陷入了種種技術上的不實際中。

我見過一些同行,對技術是非常投入的,但往往忽略了技術存在的本意是為應用而生。當他執著於一個技術時,就會偏激的反對一切,就算Team Leader已經都規劃好了,他也會反對,並且表示如果不用某個技術,就不工作——哈哈,我在2004年的幾個月,也有這麼一股子走火入魔的境界,還好當時我的Leader不錯。

其實一個合格Team Leader在規劃項目各個細節的時候,是從全局考慮的,會從資源、客戶、團隊的組成、時間等一系列因素去考慮,技術只在被考慮的因素中排在的第二梯隊,那些敏捷方法的大師們也是這麼認為的。而一個過度的技術愛好者,因為處於對已有技術的熱愛,或者對新技術的追捧而舍本求末。我認為,不光是Team Leader,任何IT技術人員都應該從實際應用角度選擇適合全局的技術。我在想,那些脫離實際應用的技術狂人,一定很累,因為每天早上起來,就有一些技術淘汰了,還有一些技術又誕生了,他們頗有一種在潮起潮落嬉戲的精神。

我覺得正確的方式,應該注重人和實際需求等大的環境,再考慮技術,而不是盲目的追求新的、高的技術。如果真的喜歡技術,那麼就把技術用在適當的應用上;在某些應用上因為片面和過激去使用一些不合適的技術,本身就是對這些技術的褻瀆,就好像有個人很擅長打老虎,但是現在這個人卻被派去殺豬——這是對這個人的才能的褻瀆。

三、對新技術應用的死搬硬套

前幾年,看到網上一篇文章,說是使用XP編程(也就是極限編程,敏捷方法的一種,不是Windows XP),導致他們項目的失敗,然後就一一羅列失敗的原因,最後結論是:不是每個團隊都適合XP編程云云,似乎挺有道理。

當我們在學習別人的思想的時候,我想最起碼,也是最重要的就是要去了解別人的立意,別人到底想讓你學習到什麼。然而在這點上,我們很多人都有不足,我前幾年也是如此。就說這個XP編程,那些敏捷方法的大師們列出了XP編程的很多注意點,很多方式和流程,正確的學習和使用方式就是以人為本,靈活的取捨,然後再加以應用。我自己就在2006年開始用XP編程(美國同事的指導下),效果都很好,我根據自己團隊的情況,有選擇的加入了很多XP編程的方式,比如每兩周一個Iteration;對於Acceptance Tests我們不是寫的自動化測試工具,而是廣義的使用了Excel,客戶和我們的測試人員每天都在根據這個Excel測試,因為到底不是所有東西都能方便的用測試工具,而且有些實現測試工具的成本本來就很高;對於結對編程,沒有完全採納……(有時間大家可以和我交流),結果項目進展是比較順利的。反觀寫前面我說的那篇文章的老兄,未免就有點死搬硬套了,敏捷方法不是流水線的規定流程,而是一系列方法的參考,更是一種對實事求是、應時而變的思想的貫徹。

說道具體的技術,這樣的例子更多了,比如我剛畢業的時候,Web項目組把整個網站都用PHP+XSLT+XML+面向對象的資料庫(那時候是 2002年前後,XSLT+XML的網站方式在國外提出也還不久,主要是能分離UI、業務邏輯和數據的開發)來實現,技術上非常好,而且是個很好的MVC 教學模型(比現在的Stucts都好),但是結果這個網站使用起來非常慢,而且開發周期也脫的非常長,網站維護也很麻煩,最後十幾個月後,這個網站宣告失敗。類似這種的大大小小的例子,我相信你們還可以舉出更多。

任何技術都有其定位和適合應用的領域,所以我們學習技術,更要學習如何的把這個技術用在合適的地方。網上有很多爭論,比如C++還是Java好,真是可笑,他們的產生有其各自的歷史背景,不同的目的,這種比較就好像比較殺豬刀好還是水果刀好,準確的答案是殺豬的時候,殺豬刀好;削水果的時候,水果刀好。但是很多人還是像真有那麼一回事一般的列舉自己的經驗,引用國外或者台灣技術大師的語錄來爭論這個問題……哈哈,真是可笑,可笑之一在於,這個問題本身的立意就有問題,還爭先恐後的去回答;可笑之二在於,死搬硬套技術就行了,還死搬硬套技術大師的思想來證明自己的正確;可笑之三在於,當我們在爭論的時候,C++和Java兩位老兄可能都在一起苦笑——苦笑他們怎麼一直被誤解,被傷害,被死搬硬套。當然,很現實的是,如果沒有一定的經驗和對C++和 Java的理解,是無法真正了解他們各自的真正擅長領域的,而且對於他們的選擇,主要還是取決於項目、人、需求等客觀因素,也就是判斷你現在在殺豬還是在削水果,怎麼判斷就看你自己的功力了。

四、只會使用,不會靈活創造

現在國內Java圈子越來越大,以前帶團隊的時候,一個成員進來就告訴我說,如果不能學習J2EE,就離開團隊。而且隨著這個圈子的擴大,越來越多的應用都轉移到了Java上面,而且越來越多的技術人員都以自己學習Java為榮,很多公司都用高薪來招攬Java開發人員……在這些現象背後的實質是什麼呢?其實是越來越多的開發人員加入到流水線,成為流水線的工人,為什麼,試想,無論這些Java人員自認為多牛,他們都在使用別人搭建好的框架和平台,比如Spring,Stucts,Hibernate,EJB3等,就算他們在學習這些框架和平台的時候,知道了很多設計模式的東西,但是在使用這些框架和平台的時候,他們又有多少空間去實踐這些設計模式呢?他們無非是在國外大師們用各種方法和模式積累搭建的框架和平台上做填充的流水線工人,他們已經很滿足了,還能指望他們去積累創造自己的東西嗎?

其實國內很多公司都有自己的技術積累的,我認識是很好的積累,但是對於這些公司的人來說,他們看到的只是表面的市場收入。我接觸過一個國內頂級的公司,看過他們的源代碼,涉及對多線程、原子操作、通信、協議棧等的各種封裝,也都是這個公司的很多技術人員在開發項目的時候不斷積累的,當逐漸的他們轉向 Java的時候,這些積累就被放棄。當時我在想,為什麼他們或他們的技術人員有針對性的拿出這些資源,成立國內的開源團體,為大家提供類似Boost、 ACE之類的框架和平台呢?而國外就有這麼多開源項目和團隊,特別是像Apache、Eclipse這種團體,得到各個公司的支持,有些公司還貢獻出自己的項目。我仔細想過,這裡從上倒下,需要一系列產業環境的配套才行,我們都不具備,或者我們都還沒有意識去向那個方向去走,對於這種情況,我們技術人員和很多企業有很大責任,我們技術人員也需要一些動力。但我也很樂觀的認為,5年以後,我們的情況會有很大的改觀,我也看到國內有一些團體和個人正在向那個方向努力。

現在網上習慣說大蝦,大牛,所以我們有很多Java大蝦、C++大蝦、.NET大牛等,不一而足。大蝦、大牛的叫法,非常風趣,被叫的人也很開心,但是我這裡想討論的是,我們國內既然有這麼多大蝦、大牛的,但是怎麼並沒有多少諸如國外寫出ACE、Sping、Linux內核、Lucene等框架和平台的人?我想這是我們很多同行在問的問題,對於我自己而言,到不慚愧了,我有了自己寫的SCS(也許要到2010年大家才會熟悉);對於國內的少數同行來說,也不慚愧了,比如灰狐團隊就有寫了一些自己的給予Java的框架,還有一些PHP的開源的MVC框架等。但是問題在於,如果我們的同行沒有普遍的把積累轉變為創造的意識,我們整個技術的大環境就不會好,相關的配套也就不會好,所以就算有少部分人有了自己的創造,也沒有很好的支撐環境,履行艱難。我會在後面逐步推進SCS的時候儘力做一些有利於我們大環境的事情,也希望大家都來推動,我也覺得我們的同行都有推動改善我們圈子環境的潛意識和動力,把這些大牛、大蝦的都組織起來做一下對大家、對國家、對世界都有益的事情,而不是內耗。

五、技術圈內的人?技術圈外的人?

經常一些圈外人找我聊,經常會興奮的告訴我,說在什麼地方發現一個技術高手,就好像說在什麼地方發現了一個絕世恐龍那樣。聽到這些,我一般都會覺得心裡好笑,笑什麼呢?不是笑這個圈外人受騙(見我後面的分析),而是笑,既然是圈外人,不了解技術,又是如何斷定他發現了技術高手。當然圈外人是可以斷定技術高手的,這個唯一的判斷準則是:這個圈外人熟悉這個做技術的人,而且確切知道這個技術人真正實現了有用的應用。但是這裡,這些圈外人剛認識,或者只有一面之緣就說別人是一個技術高手,無非兩個原因:一是通過被人介紹說這個人多牛;二是這個人自己自吹自擂說自己多牛,但這些能作為這個圈外人斷定這個人是高手的依據嗎?

上面只是一個例子,一個圈外人去評價圈內人的例子。其實類似的例子很多。很多圈外人找技術人合作,這些圈外人往往會從自己的角度去看這個項目、去看這個過程、甚至是妄下斷言去評判這個技術人。比如,他們會希望一個月就拿出一個很複雜的系統;他們會對開發進程指手畫腳;他們甚至會對正在寫代碼的程序員說你該怎麼怎麼做……

為什麼會發生上面說的情況?難道都是圈外人的錯?不是!兩方都有錯,這裡的唯一問題在於溝通。而我們技術人員的一個弱項就是溝通。我們技術人員在工作中,會遇到很多非技術人員,面對這些圈外人,我們可能會合作、會談判、會發生買賣關係等,圈內和圈外的人是很難找到共同的語言去溝通的。我的搭檔有次告訴我,我們剛合作的時候,我說的很多內容都有IT的專業術語在裡面,他覺得我很專業,他也似乎能聽懂,但是後來等把網站做出來,他發現和他原來和我溝通的有很多出入。後來我們怎麼解決這個問題的?就是通過溝通。溝通是個很深的學問,我現在能做到的就是從他的談話去了解他說這句話的出發點,從而真正了解他的想法,而且和非技術人員談話,盡量用大家都能明確意思的、平常的語句;而不是動不動就說覺得這個人很笨,都聽不懂我的話。

溝通的本質其實就是協助對方了解自己的意思,從這點出發,我們技術人員還有很大的改進空間。歸根到底,如果溝通問題解決了,大家都會集中在做事情上,也就無所謂圈內和圈外了。

六、高手?低誰來定義?怎麼來定義?

高手是什麼?高手其實是虛名,是虛幻,是根本不存在的。好笑的是,很多人,甚至不是計算機專業的人,都因為高手二字,而進入IT圈。我在買電腦的時候,年輕的攢機高手不屑於我的提問;我在教導剛畢業的年輕人時,這些年輕的軟體編程高手不屑於我的教導……哈哈,我自己在年輕時也很在意高手二字。如果說高手存在,那麼只存在在年輕人的虛幻中。

高手既然是虛名,那麼就不能自稱,自稱高手的人絕對不是高手,只是狂妄之徒,狂妄之徒一般都是初出茅廬的小子,我自己剛畢業1年多的時候,也覺得自己是不容置疑的高手。如果年紀大了,還覺得自己是高手,那麼事實上不是偏執狂,就是神經病。

如果高手存在,那麼高手也是其他人對一個有天賦、刻苦、掌握技巧的人的尊稱,而其他人看不到這些,只看到這個人一下子就很專業的結果,而這個人自己才明白長時間努力的艱辛和理所當然的收穫,就好像任何高深的科技,如果把原理公布出來,眾人都會說原來是這樣,或者說原來要經過這幾十年的鍛煉……被別人成為高手的人,是要付出之前長時間努力代價的。世界就是這樣,誰都喜歡看表面的風光,能看到別人背後艱苦奮鬥的就鳳毛麟角。

但是,現實是,我們在工作生活中,撇去商業炒作的高手不算,不難發現還有很多高手的存在。雖然我們高手只是我們在追求其他主要目的的時候,附帶想實現的一個目的,但為了這麼一個附帶的目的,我們付出了一些不可察覺而且不低的代價,這是值得我們IT技術人員去思考。為什麼不能踏踏實實,自然而然的做事情呢?為什麼圈內人和圈外人都不能更重視一下實際的過程和結果呢,而去在乎高手、低手呢?我自己的體悟就是,沒有高手、低手,只有會做事情的人和不會做事情的人,把事情做出來才是最實際的。

七、誰來幫有創新技術的技術人員實現夢想?

我在2005年第一次去給別人說SCS(那時候是軟體活化技術和ComEgg)的時候,我還是一個單純的技術人員,然後就經歷了一些所謂技術牛人的嘲諷和陷害,也看到了一些國家重點試驗室在掛羊頭賣狗肉……讓我不得不得出結論,如果我想成功的推進SCS並且有所成果,比如同時具備以下條件:我既要懂技術,也要懂商務,還要懂人情世故,還要提防不能被騙,然後還要會忽悠,最後如果真的想做點事情,還要自己寫一些代碼……其實我也是開個玩笑,我想真正說的是,我們技術人員走出去,除了自己的膽識和能力,還需要大環境的配套,比如企業家的意識、國家的支持、我們技術人員的團結等。

其實就這個問題而言,我自己也在摸索,也在前行。這裡我只提出這個問題,讓大家一起來思考。

*******************************************

就此停筆,寫了也有許多,雖然發現問題若干,又在這裡羅列了其中問題若幾,但是我一直是一個樂觀主義者,我樂於看到事情都是有節奏的一步一步向前改進和發展的,我有理由相信我們國內的IT技術圈正在日趨合理,我們的大環境也日趨合理。

小編有話:

《生活那些事》的小編大都是技術盲,雖然對技術內容不明覺厲,但深感老顧是個愛思考、很認真的職場精英,我們一起為老顧點贊~

如果您希望跟老顧交流和探討,也歡迎與我們聯繫!~《生活那些事》,願意幫大家拉!皮!條!~

《生活那些事》微信君,帶你創造優質生活!

掃描以下二維碼就可以直接關注我們哦:

如有小夥伴希望跟《生活那些事》分享或吐槽,歡迎回復微信聯繫我們,等你呀親~

舉報


推薦閱讀:

TEXT函數:Excel文本格式的終結者
【敵後武功團紀念文章】20141109 李善友:一切不以用戶為中心的產品,都是耍流氓!
那些正確而無用的廢話

TAG:經驗分享 | 紀念 |