可能是有些自負(fù)的因素吧,我常常覺(jué)得《程序員》雜志上的很多觀點(diǎn)和我不謀而合。我一般喜歡看的是人物介紹、產(chǎn)品的底層實(shí)現(xiàn)方法等文章;對(duì)其它的新名詞倒不是很感興趣;最不喜歡的欄目反而是幾個(gè)人不斷的在說(shuō)各家產(chǎn)品的有什么新技術(shù)、新趨勢(shì)的文章。
在接觸《程序員》雜志的這七年,也是我從迷茫走向成熟的七年,至少我能明白我現(xiàn)在在做什么,也能夠承擔(dān)因此而引起的后果,不論是苦還是甜。
這幾年來(lái),我也發(fā)生了很大的變化,各種生活也逐漸定型,雖然開(kāi)發(fā)不是一個(gè)很好的工作,但對(duì)我個(gè)人來(lái)說(shuō),技術(shù)(特別是開(kāi)發(fā))仍然是能最發(fā)揮我的特點(diǎn)的一個(gè)職業(yè)。隨著年齡的增長(zhǎng),我也能坦然接受自己對(duì)這個(gè)工作的喜愛(ài),并感受到其中的一點(diǎn)樂(lè)趣。
粗粗算來(lái),已經(jīng)工作快十八年了,接觸計(jì)算機(jī)也有二十年的時(shí)間,其中用于編程的時(shí)間大概也有十年,在這里將我的幾點(diǎn)體會(huì)和大家分享一下。如果您是一個(gè)程序員、或者打算做一個(gè)程序員,或者打算開(kāi)一個(gè)公司從事軟件開(kāi)發(fā)方面的工作,希望這些觀點(diǎn)能夠?qū)δ兴鶐椭?br />
1、開(kāi)發(fā)規(guī)模問(wèn)題
對(duì)于目前業(yè)內(nèi)的一些觀點(diǎn),我并不認(rèn)同。例如在各種報(bào)刊雜志上,經(jīng)常有專家教授嘮嘮叨叨在說(shuō)現(xiàn)在的軟件開(kāi)發(fā)已經(jīng)進(jìn)入工業(yè)化時(shí)代,要多少多少人團(tuán)隊(duì)開(kāi)發(fā),才能如何如何。但是,基于國(guó)內(nèi)的實(shí)際情況,其實(shí)許多1000萬(wàn)元以下的項(xiàng)目完全是幾個(gè)人的小團(tuán)隊(duì)開(kāi)發(fā)模式,即使大到規(guī)模上市的軟件公司,具體到每個(gè)定制開(kāi)發(fā)的項(xiàng)目,實(shí)際項(xiàng)目組的開(kāi)發(fā)人員,也經(jīng)常只有不到十個(gè)人的規(guī)模,三、五個(gè)人的情況更是多如牛毛。
再看看國(guó)際上,我們所使用的一些著名的產(chǎn)品,如unix系統(tǒng)、C語(yǔ)言、notes系統(tǒng)、java語(yǔ)言、甚至最早的windows、dos很多都是幾個(gè)人的小組所完成的開(kāi)發(fā)。
至于這些產(chǎn)品的推廣完善,所需要的巨大人力資源和開(kāi)發(fā)之初的人力投入完全是兩回事。在開(kāi)發(fā)階段,人多不一定就是好事,甚至肯定要壞事。
這就像生小孩一樣,只要一男一女兩個(gè)人就完全足夠,但是,將這個(gè)孩子養(yǎng)大成人,除了他的父母,整個(gè)家庭、學(xué)校、社會(huì)等其它各色人等也直接或間接付出了很多。但這個(gè)孩子仍然只是他父母開(kāi)發(fā)出來(lái)的,其它人只是起一個(gè)推波助瀾的作用。
2、技術(shù)與思想問(wèn)題
綜合分析目前國(guó)內(nèi)的軟件開(kāi)發(fā)方法(甚至包括其它IT技術(shù)),不難發(fā)現(xiàn),我們總是熱衷于技術(shù),而不注重標(biāo)準(zhǔn)。從Basic、C、C++、一直到j(luò)ava、 C#等語(yǔ)言,再到.Net、J2EE等架構(gòu),多少技術(shù)在我們眼前晃來(lái)晃去,有些人也以掌握這些技術(shù)為目的,甚至洋洋得意。
其實(shí),冷靜下來(lái)分析一下其中的核心技術(shù)內(nèi)容,現(xiàn)在的Web開(kāi)發(fā)和早期的CGI方式的Web開(kāi)發(fā),只有方法上的不同,沒(méi)有實(shí)質(zhì)上的區(qū)別,所遵循的數(shù)據(jù)標(biāo)準(zhǔn)也沒(méi)有任何變化。
整天只沉迷于片面的技術(shù),使我們離核心技術(shù)越來(lái)越遠(yuǎn),根本談不上什么創(chuàng)造性。現(xiàn)在國(guó)內(nèi)很多電子政務(wù)的項(xiàng)目在投標(biāo)時(shí)均要求必須基于J2EE或.Net技術(shù),完全拒絕LAMP和其它技術(shù),估計(jì)很多美國(guó)公司老板做夢(mèng)都要笑出聲來(lái)。
重要的是思想而不是工具,就象毛澤東打敗蔣介石是依靠思想而不是武器一樣,技術(shù)并不起決定作用。
3、技術(shù)沉淀的重要性
由于不注重核心技術(shù)(其實(shí)那怕是一個(gè)小小的strcpy都是核心技術(shù)的一部分),很多公司沒(méi)有任何技術(shù)積累,也沒(méi)有可重復(fù)使用的底層開(kāi)發(fā)庫(kù),更談不上編程方法和思想上的積累。
因?yàn)楣ぷ鞯年P(guān)系,我曾經(jīng)接觸過(guò)不少項(xiàng)目,這些項(xiàng)目都是號(hào)稱采用了何等先進(jìn)的技術(shù)云云,但實(shí)際上很多項(xiàng)目即使一個(gè)簡(jiǎn)單的按鈕修改都需要在每個(gè)JSP文件中逐個(gè)修改。看了這樣的代碼,你真的不能不相信,語(yǔ)言是一個(gè)項(xiàng)目中最不重要的技術(shù)。
4、面向?qū)ο蟮氖桥c非
我始終認(rèn)為翻譯“面向?qū)ο?#8221;的那個(gè)人是一個(gè)典型的老光棍,整天想著找對(duì)象,所以就想當(dāng)然的這么翻譯,其實(shí)我覺(jué)得“面向?qū)ο?#8221;應(yīng)該是“面向目的”才對(duì)。所謂面向目的,說(shuō)白了就是黑貓白貓的一句話。
其實(shí)“面向目的”(而不是“面向?qū)ο?#8221;)更多的是一種思想,而不是一個(gè)所謂的編程方法。所謂的抽象,固然有其必要性,但到處都是對(duì)象的說(shuō)法,往往只是一些外行說(shuō)出的內(nèi)行話。難怪Torvalds對(duì)C++批的一無(wú)是處。
真正的“面向目的”,就是對(duì)一個(gè)項(xiàng)目的各個(gè)部分采用最適合的方法以達(dá)成目的。
5、大道至簡(jiǎn)
我越來(lái)越相信“大道至簡(jiǎn)”這個(gè)哲學(xué)觀點(diǎn),從設(shè)計(jì)產(chǎn)品、系統(tǒng)分析、模塊劃分,一直到做飯洗菜、吃飯睡覺(jué),甚至到人際交往,這個(gè)道理都是相通的。從程序的角度也是如此,一段好的代碼大多都是一個(gè)簡(jiǎn)潔的代碼。
就像做人一樣,簡(jiǎn)單做人,自己不辛苦,別人也不辛苦。同樣一種開(kāi)發(fā)語(yǔ)言、一種技術(shù)、一種開(kāi)發(fā)工具、一種框架平臺(tái)也是如此。
我個(gè)人認(rèn)為C語(yǔ)言幾十年不倒的主要原因,主要就是因?yàn)槠浣Y(jié)構(gòu)簡(jiǎn)單,擴(kuò)充方便。n年前玩音響的時(shí)候,很多發(fā)燒友也一致認(rèn)為,在價(jià)格相當(dāng)?shù)那闆r下,一個(gè)旋鈕最少的音響基本上就是最好的音響,也是同樣的道理。
6、責(zé)任心和細(xì)節(jié)
其實(shí)大家都知道這一點(diǎn),但是實(shí)際操作起來(lái)往往又根本不在乎。做項(xiàng)目需求時(shí),有些人往往只是考慮實(shí)現(xiàn)客戶要求的功能,而不是從客戶要求的內(nèi)容去思考和分析,甚至因?yàn)楣ぷ髁康年P(guān)系,故意避開(kāi)一些問(wèn)題。但是這些問(wèn)題仍然存在,最后仍然會(huì)逐漸暴露出來(lái),反而自討苦吃。
其實(shí),對(duì)客戶而言,能有更好更完善的方案一般都會(huì)樂(lè)意接受,如果能本著對(duì)客戶負(fù)責(zé)的精神,客戶才能真正信任你;你和客戶談起價(jià)格時(shí)也才能有理有據(jù)。
很多時(shí)候只要負(fù)起責(zé)任,就會(huì)有助于發(fā)現(xiàn)所有的問(wèn)題,并提出一個(gè)妥善的解決方法,注意到每一個(gè)細(xì)小的問(wèn)題。其實(shí)大到衛(wèi)星上天,小到刷鍋洗碗,最根本的關(guān)鍵不是什么技術(shù),而是在高度責(zé)任心的基礎(chǔ)上對(duì)細(xì)節(jié)的把握。
我曾經(jīng)在跳蚤市場(chǎng)買過(guò)一個(gè)七十年代的收音機(jī),是春雷703,一個(gè)很古老的上海牌子,其信噪比和靈敏度比現(xiàn)在的集成電路的高出很多,原因無(wú)它,每一件細(xì)小的功能都做到最好而已。其實(shí)看一個(gè)程序員只要看他對(duì)程序跳格的處理,就可以決定90%的情況。
7、堅(jiān)持熬下去
前幾天看一個(gè)關(guān)于抗戰(zhàn)的記錄片,老毛對(duì)抗戰(zhàn)相持階段的說(shuō)法是熬下去,當(dāng)然是積極的熬法。其實(shí)不僅是做程序,做其它事情又何嘗不是這樣。
如果一天寫(xiě)100行代碼,10年下來(lái)就是30多萬(wàn)行,記得好像unix最早的代碼也不到40萬(wàn)行,30多萬(wàn)行代碼,可以做多少事情呀。
有一天和一個(gè)朋友談起代碼量,他說(shuō)最近在招人,要求曾經(jīng)獨(dú)立寫(xiě)過(guò)1萬(wàn)行代碼,我后來(lái)仔細(xì)算了我開(kāi)發(fā)的MCIS中間件系統(tǒng),在代碼最多時(shí)也才5萬(wàn)多行,后來(lái)不斷調(diào)整優(yōu)化,現(xiàn)在只有4萬(wàn)行不到。再統(tǒng)計(jì)一下數(shù)據(jù)庫(kù)接口部分,每個(gè)數(shù)據(jù)庫(kù)接口只有可憐的400行代碼不到,但就這簡(jiǎn)單的400行已經(jīng)可以完成一個(gè)數(shù)據(jù)庫(kù)接口應(yīng)具備的完整功能。
這幾天剛好趕上亞洲杯,中國(guó)隊(duì)0-3負(fù)于烏茲別克斯坦,又一次在打平即可出線的時(shí)候情況下完蛋。看看中國(guó)足球隊(duì)的窩囊,其實(shí)就是沒(méi)有認(rèn)真對(duì)待場(chǎng)上的每一分鐘,姑且不論技術(shù)和意識(shí),只要場(chǎng)上每個(gè)人都能堅(jiān)持90分鐘不停的奔跑攔截,估計(jì)在亞洲也可以獨(dú)立獨(dú)行。最根本而又最簡(jiǎn)單的沒(méi)有做到,又何談勝利。
總想寫(xiě)一些東西,但因時(shí)間的關(guān)系,一直拖了下來(lái),這幾天剛好朋友約稿,就寫(xiě)一點(diǎn)自己的想法。從職業(yè)的角度而言,每個(gè)職業(yè)都有不同的酸甜苦辣,相比而言,選擇一個(gè)自己比較喜歡的職業(yè),也確實(shí)是一個(gè)不錯(cuò)的選擇。可能是年齡的關(guān)系,我反而覺(jué)得生活才是最重要的,當(dāng)然最好能在工作中保持樂(lè)趣,在生活中享受樂(lè)趣。在《程序員》雜志7年之際,寫(xiě)下這點(diǎn)東西,希望《程序員》雜志能夠成為更多程序員的朋友。