從制造到創造
          軟件工程師成長之路
          posts - 292,  comments - 96,  trackbacks - 0
          可能是有些自負的因素吧,我常常覺得《程序員》雜志上的很多觀點和我不謀而合。我一般喜歡看的是人物介紹、產品的底層實現方法等文章;對其它的新名詞倒不是很感興趣;最不喜歡的欄目反而是幾個人不斷的在說各家產品的有什么新技術、新趨勢的文章。

          在接觸《程序員》雜志的這七年,也是我從迷茫走向成熟的七年,至少我能明白我現在在做什么,也能夠承擔因此而引起的后果,不論是苦還是甜。

          這幾年來,我也發生了很大的變化,各種生活也逐漸定型,雖然開發不是一個很好的工作,但對我個人來說,技術(特別是開發)仍然是能最發揮我的特點的一個職業。隨著年齡的增長,我也能坦然接受自己對這個工作的喜愛,并感受到其中的一點樂趣。

          粗粗算來,已經工作快十八年了,接觸計算機也有二十年的時間,其中用于編程的時間大概也有十年,在這里將我的幾點體會和大家分享一下。如果您是一個程序員、或者打算做一個程序員,或者打算開一個公司從事軟件開發方面的工作,希望這些觀點能夠對您有所幫助。

          1、開發規模問題
             
          對于目前業內的一些觀點,我并不認同。例如在各種報刊雜志上,經常有專家教授嘮嘮叨叨在說現在的軟件開發已經進入工業化時代,要多少多少人團隊開發,才能如何如何。但是,基于國內的實際情況,其實許多1000萬元以下的項目完全是幾個人的小團隊開發模式,即使大到規模上市的軟件公司,具體到每個定制開發的項目,實際項目組的開發人員,也經常只有不到十個人的規模,三、五個人的情況更是多如牛毛。

          再看看國際上,我們所使用的一些著名的產品,如unix系統、C語言、notes系統、java語言、甚至最早的windows、dos很多都是幾個人的小組所完成的開發。

          至于這些產品的推廣完善,所需要的巨大人力資源和開發之初的人力投入完全是兩回事。在開發階段,人多不一定就是好事,甚至肯定要壞事。

          這就像生小孩一樣,只要一男一女兩個人就完全足夠,但是,將這個孩子養大成人,除了他的父母,整個家庭、學校、社會等其它各色人等也直接或間接付出了很多。但這個孩子仍然只是他父母開發出來的,其它人只是起一個推波助瀾的作用。

          2、技術與思想問題

          綜合分析目前國內的軟件開發方法(甚至包括其它IT技術),不難發現,我們總是熱衷于技術,而不注重標準。從Basic、C、C++、一直到java、 C#等語言,再到.Net、J2EE等架構,多少技術在我們眼前晃來晃去,有些人也以掌握這些技術為目的,甚至洋洋得意。

          其實,冷靜下來分析一下其中的核心技術內容,現在的Web開發和早期的CGI方式的Web開發,只有方法上的不同,沒有實質上的區別,所遵循的數據標準也沒有任何變化。

          整天只沉迷于片面的技術,使我們離核心技術越來越遠,根本談不上什么創造性。現在國內很多電子政務的項目在投標時均要求必須基于J2EE或.Net技術,完全拒絕LAMP和其它技術,估計很多美國公司老板做夢都要笑出聲來。

          重要的是思想而不是工具,就象毛澤東打敗蔣介石是依靠思想而不是武器一樣,技術并不起決定作用。

          3、技術沉淀的重要性

          由于不注重核心技術(其實那怕是一個小小的strcpy都是核心技術的一部分),很多公司沒有任何技術積累,也沒有可重復使用的底層開發庫,更談不上編程方法和思想上的積累。

          因為工作的關系,我曾經接觸過不少項目,這些項目都是號稱采用了何等先進的技術云云,但實際上很多項目即使一個簡單的按鈕修改都需要在每個JSP文件中逐個修改。看了這樣的代碼,你真的不能不相信,語言是一個項目中最不重要的技術。


          4、面向對象的是與非

          我始終認為翻譯“面向對象”的那個人是一個典型的老光棍,整天想著找對象,所以就想當然的這么翻譯,其實我覺得“面向對象”應該是“面向目的”才對。所謂面向目的,說白了就是黑貓白貓的一句話。

          其實“面向目的”(而不是“面向對象”)更多的是一種思想,而不是一個所謂的編程方法。所謂的抽象,固然有其必要性,但到處都是對象的說法,往往只是一些外行說出的內行話。難怪Torvalds對C++批的一無是處。

          真正的“面向目的”,就是對一個項目的各個部分采用最適合的方法以達成目的。

          5、大道至簡

          我越來越相信“大道至簡”這個哲學觀點,從設計產品、系統分析、模塊劃分,一直到做飯洗菜、吃飯睡覺,甚至到人際交往,這個道理都是相通的。從程序的角度也是如此,一段好的代碼大多都是一個簡潔的代碼。

          就像做人一樣,簡單做人,自己不辛苦,別人也不辛苦。同樣一種開發語言、一種技術、一種開發工具、一種框架平臺也是如此。

          我個人認為C語言幾十年不倒的主要原因,主要就是因為其結構簡單,擴充方便。n年前玩音響的時候,很多發燒友也一致認為,在價格相當的情況下,一個旋鈕最少的音響基本上就是最好的音響,也是同樣的道理。

          6、責任心和細節

          其實大家都知道這一點,但是實際操作起來往往又根本不在乎。做項目需求時,有些人往往只是考慮實現客戶要求的功能,而不是從客戶要求的內容去思考和分析,甚至因為工作量的關系,故意避開一些問題。但是這些問題仍然存在,最后仍然會逐漸暴露出來,反而自討苦吃。

          其實,對客戶而言,能有更好更完善的方案一般都會樂意接受,如果能本著對客戶負責的精神,客戶才能真正信任你;你和客戶談起價格時也才能有理有據。

          很多時候只要負起責任,就會有助于發現所有的問題,并提出一個妥善的解決方法,注意到每一個細小的問題。其實大到衛星上天,小到刷鍋洗碗,最根本的關鍵不是什么技術,而是在高度責任心的基礎上對細節的把握。

          我曾經在跳蚤市場買過一個七十年代的收音機,是春雷703,一個很古老的上海牌子,其信噪比和靈敏度比現在的集成電路的高出很多,原因無它,每一件細小的功能都做到最好而已。其實看一個程序員只要看他對程序跳格的處理,就可以決定90%的情況。

          7、堅持熬下去

          前幾天看一個關于抗戰的記錄片,老毛對抗戰相持階段的說法是熬下去,當然是積極的熬法。其實不僅是做程序,做其它事情又何嘗不是這樣。

          如果一天寫100行代碼,10年下來就是30多萬行,記得好像unix最早的代碼也不到40萬行,30多萬行代碼,可以做多少事情呀。

          有一天和一個朋友談起代碼量,他說最近在招人,要求曾經獨立寫過1萬行代碼,我后來仔細算了我開發的MCIS中間件系統,在代碼最多時也才5萬多行,后來不斷調整優化,現在只有4萬行不到。再統計一下數據庫接口部分,每個數據庫接口只有可憐的400行代碼不到,但就這簡單的400行已經可以完成一個數據庫接口應具備的完整功能。

          這幾天剛好趕上亞洲杯,中國隊0-3負于烏茲別克斯坦,又一次在打平即可出線的時候情況下完蛋。看看中國足球隊的窩囊,其實就是沒有認真對待場上的每一分鐘,姑且不論技術和意識,只要場上每個人都能堅持90分鐘不停的奔跑攔截,估計在亞洲也可以獨立獨行。最根本而又最簡單的沒有做到,又何談勝利。

          總想寫一些東西,但因時間的關系,一直拖了下來,這幾天剛好朋友約稿,就寫一點自己的想法。從職業的角度而言,每個職業都有不同的酸甜苦辣,相比而言,選擇一個自己比較喜歡的職業,也確實是一個不錯的選擇。可能是年齡的關系,我反而覺得生活才是最重要的,當然最好能在工作中保持樂趣,在生活中享受樂趣。在《程序員》雜志7年之際,寫下這點東西,希望《程序員》雜志能夠成為更多程序員的朋友。
          posted on 2007-11-27 15:15 CoderDream 閱讀(515) 評論(0)  編輯  收藏 所屬分類: 美文共賞

          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(9)

          我參與的團隊

          隨筆分類(245)

          隨筆檔案(239)

          文章分類(3)

          文章檔案(3)

          收藏夾(576)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 458376
          • 排名 - 114

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁远县| 高淳县| 漳浦县| 瓮安县| 邵武市| 邮箱| 瑞金市| 林周县| 安龙县| 神农架林区| 宜兰市| 汉中市| 武穴市| 正蓝旗| 延庆县| 肇庆市| 濮阳市| 贡山| 孟州市| 阜新市| 香格里拉县| 伊春市| 隆安县| 阳城县| 炉霍县| 深泽县| 普陀区| 揭西县| 临泽县| 霍林郭勒市| 华蓥市| 屏山县| 青河县| 竹北市| 镇巴县| 万盛区| 徐闻县| 济阳县| 临汾市| 罗甸县| 临澧县|