鞠強(qiáng)
這是一篇關(guān)于成長的心得。仁者見仁、智者見智,如果諸位讀者能夠從此文中看出一點(diǎn)東西來,有所感悟,我就滿足了。
我是數(shù)學(xué)系畢業(yè)的,大二開始搗鼓計(jì)算機(jī)(94年),最大的興趣就是寫程序。改游戲、改病毒,這些小東西讓人很有成就感。工作后的興趣經(jīng)歷了一個(gè)很大的轉(zhuǎn)變(當(dāng)然,這個(gè)時(shí)間相對(duì)于多數(shù)人而言,遲了些),2000年的時(shí)候,我突然發(fā)現(xiàn)了我寫的程序的價(jià)值。當(dāng)我看到我修改了短短的幾行代碼的時(shí)候,給客戶帶來了很大的效率提升,降低了成本,那種成就感,遠(yuǎn)非6年前的認(rèn)識(shí)可比了。
本文并非專門面對(duì)計(jì)算機(jī)入門者,所以內(nèi)容比較雜。
此段權(quán)作前言,現(xiàn)在進(jìn)入正題。
知識(shí)點(diǎn)要連貫,知識(shí)面要廣
國內(nèi)的大部分軟件企業(yè),從來沒有像國外那樣,在技術(shù)上保持連續(xù)性。從微軟這條路線來看,從最早的DOS->Win16->Win32->OLE->DCOM,到COM+->.NET,我們很難找到能夠完整走完這個(gè)歷程的人。這種現(xiàn)狀,導(dǎo)致大部分的技術(shù)人員,對(duì)于開發(fā)技能,有一個(gè)很大的斷層:知其然,不知其所以然;碰到非source code的錯(cuò)誤,就手足無措;或者代碼質(zhì)量低劣,或者性能有很大瓶頸。
上面的路線演進(jìn),可以認(rèn)為是“工程”方面的,而非我們大學(xué)教育中的“科學(xué)”。操作系統(tǒng)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué),這些內(nèi)容非常重要。但是我們要注意的是,你學(xué)習(xí)了這些,不代表就能寫好一個(gè)程序,能夠解決客戶的問題。工程方面的東西,我們多加掌握,熟練應(yīng)用,配合上述“科學(xué)”的內(nèi)容,才能真正保證程序價(jià)值的發(fā)揮。
而如何讓兩者有機(jī)的結(jié)合起來?我想,不外乎就是興趣+經(jīng)驗(yàn)。
在微軟平臺(tái)上開發(fā),很重要的一個(gè)資源就是MSDN(Microsoft Software Development Network),里面有how to,有concepts,有topics,可以讓我們更好更快的上手。當(dāng)我們碰到某個(gè)代碼錯(cuò)誤,想找某種解決方案的時(shí)候,MSDN是一個(gè)非常好的助手。對(duì)于初學(xué)者,我們可以看里面的how to,step by step的進(jìn)行學(xué)習(xí)。
還有一個(gè)笨辦法,我剛工作時(shí)候采用的,就是找一個(gè)老版本的SDK說明文檔(borland開發(fā)工具的幫助里面就有,那個(gè)短小精悍,沒有msdn的那么復(fù)雜),從字母A開始,到字母Z,我當(dāng)時(shí)花了一年半的時(shí)間,基本把所有的API都試驗(yàn)了一遍。這么做有個(gè)好處,能讓你快速的對(duì)整個(gè)開發(fā)有一個(gè)概覽。以后在學(xué)習(xí)或者工作中碰到了問題,能讓你有一個(gè)大概的印象,知道應(yīng)該怎么做,知道應(yīng)該用哪個(gè)API
對(duì)于現(xiàn)在的應(yīng)用而言,如果是基于.NET的企業(yè)級(jí)應(yīng)用開發(fā),我的經(jīng)驗(yàn)是,Win32 API了解即可(當(dāng)然,如果對(duì)某一方面很熟練的話,還是非常有好處的。如socket、GDI等。);COM/COM+要知道一些,至少要清楚Add/Release Reference的含義;.NET Framework要深入一些。比如可以拿那本《.NET 高級(jí)編程》來做練習(xí)。這本書1000多頁,雖然名之為“高級(jí)”,但你可以拿它當(dāng)字典來用。有興趣的,可以按照我說的那個(gè)笨辦法,從第一章開始到最后一章,讀一遍之后,自己一個(gè)字母一個(gè)字母的,把所有的代碼寫上、調(diào)試通過、運(yùn)行,并反復(fù)debug,從中了解語法、語義、一些編程技巧。
對(duì)于高質(zhì)量的代碼而言,仔細(xì)研讀《Essential .NET》這本書是很有必要的。
對(duì)于企業(yè)級(jí)應(yīng)用開發(fā),還有一點(diǎn)很重要,就是數(shù)據(jù)庫知識(shí)。數(shù)據(jù)庫本身的語法很簡(jiǎn)單,關(guān)鍵是我們寫出來的sql要成本低,成本低一般就會(huì)帶來效率的提升(并非絕對(duì)如此)。這部分內(nèi)容,一需要經(jīng)驗(yàn),二需要思想意識(shí)的轉(zhuǎn)變。什么思想意識(shí)呢?就是要有數(shù)字化的觀點(diǎn)!
舉個(gè)例子,客戶讓你出一份能夠適應(yīng)未來三年需求的存儲(chǔ)方案,你該如何考慮?如果沒有數(shù)字的觀點(diǎn),很可能的結(jié)果就是瞎蒙出來的數(shù)字。如果有了數(shù)字觀點(diǎn),我們很容易提供此方案。
對(duì)于存儲(chǔ)空間,我們可以仔細(xì)分析客戶最近2-3年的數(shù)據(jù)庫結(jié)構(gòu)、內(nèi)容,加以咨詢客戶,未來3年的應(yīng)用變化趨勢(shì),最終我們能得到這樣一份提綱:
|
帳務(wù)管理
|
發(fā)票管理
|
訂單管理
|
用戶個(gè)數(shù)
|
50
|
20
|
100
|
高峰時(shí)間段
|
月底3天
|
每日
|
每日
|
每行記錄大小(kb)
|
20
|
10
|
200
|
業(yè)務(wù)發(fā)生筆數(shù)(每天)
|
30
|
50
|
50
|
高峰期業(yè)務(wù)發(fā)生筆數(shù)(每天)
|
100
|
50
|
50
|
假設(shè)每個(gè)月工作日是22天,那么計(jì)算每個(gè)月的高峰期業(yè)務(wù)量、平時(shí)業(yè)務(wù)量,得到一個(gè)總數(shù),乘以36個(gè)月,就能得到一個(gè)統(tǒng)計(jì)意義上的3年業(yè)務(wù)量。再考慮到tempdb、日志、索引,以及raid,我們就能很容易的得到存儲(chǔ)空間數(shù)字。再通過TPC等要求,得到服務(wù)器的其他配置要求。
當(dāng)你寫的代碼被別人應(yīng)用的時(shí)候,總會(huì)有這樣、那樣的問題。硬件,可能會(huì)和程序不兼容;軟件,新操作系統(tǒng)你可能不支持;木馬可能讓你的B/S代碼發(fā)生莫名其妙的故障;病毒會(huì)導(dǎo)致你的.NET runtime頻繁重啟;BT/emule讓你的應(yīng)用沒有帶寬用、socket無法連接,等等……
諸如此類的問題,絕對(duì)不是我們?cè)陔娔X旁邊寫程序時(shí),就能想到的。那怎么辦呢?我們雖然做不到全才,但是要利用好你所處的團(tuán)隊(duì),利用好網(wǎng)絡(luò)資源。這兩點(diǎn)做到了,當(dāng)你積累了相當(dāng)?shù)慕?jīng)驗(yàn),再考慮新的程序的時(shí)候,就能有所警覺,讓新程序的架構(gòu)更為合理。(對(duì)于架構(gòu),牢牢記住這些:伸縮性、擴(kuò)展性、可靠性,以及安全、性能。)
當(dāng)你對(duì)架構(gòu)有所了解的時(shí)候,你又會(huì)發(fā)現(xiàn),細(xì)節(jié)決定了一切。細(xì)節(jié)的處理,來自于你的知識(shí)面、項(xiàng)目經(jīng)驗(yàn),以及大量的思考。無論.NET還是J2EE,無論是C#還是C++,平時(shí)多了解一些,總會(huì)對(duì)你思考整個(gè)軟件,帶來益處的。
軟件開發(fā)是一項(xiàng)事業(yè)
軟件是一個(gè)非常累的行業(yè),如果想拿高薪、每天八小時(shí)工作、周六周日有自己的私人空間,那么在這個(gè)行業(yè)你幾乎找不到合適的切入點(diǎn)。
對(duì)于許多新人而言,這個(gè)行業(yè)充滿了誘惑,也有很多挑戰(zhàn)。興趣,也許是選擇這個(gè)行業(yè)的第一前提。當(dāng)我發(fā)現(xiàn)我寫的程序能夠控制企業(yè)的生產(chǎn)設(shè)備時(shí),無疑是很興奮的;當(dāng)我發(fā)現(xiàn)我的代碼總是會(huì)莫名其妙的crash,無疑又是很沮喪的。很快,我們的興趣就容易被這些抽風(fēng)似的問題,磨滅殆盡。
也許可以這么說,興趣是領(lǐng)我們進(jìn)門的老師,你能讓它跟你越久,你就越能保持前進(jìn)的動(dòng)力。如果沒有了,這也是一個(gè)好事。我在工作后的第三年,突然對(duì)所做的一切失去了興趣。后來想,這說明我已經(jīng)度過了那個(gè)純粹感性認(rèn)識(shí)的階段,“可以”朝理性階段邁進(jìn)了。
就這個(gè)行業(yè)本身而言,我們更多的接觸客戶、更多的接觸實(shí)際需求,這些帶來的沖擊,遠(yuǎn)比一種新技術(shù)對(duì)我們的影響,要猛烈的多。客戶那里有各式各樣的硬件環(huán)境、網(wǎng)絡(luò)環(huán)境、軟件環(huán)境,有各種管理模式的應(yīng)用。接觸的久了,我們自然就會(huì)思考:
l 我寫的代碼,該如何改進(jìn),才能適應(yīng)各種環(huán)境?
l 應(yīng)用上采用什么架構(gòu),可以滿足可預(yù)見到的未來的需求?
l 怎么做,能讓程序在sqlserver和oracle、db2上都跑的很好?
l 安全上,代碼中的sql injection,真是那么容易解決的嗎?
l 我的程序能夠無縫的在客戶那里的.NET Frame1.1/2.0上切換嗎?
l 我的程序,如何能在windows 2000上跑的更快?
當(dāng)我們有了這些思考,實(shí)際上,興趣就又回來了。這些問題毫無疑問,都不簡(jiǎn)單,但都很有意思。我相信,這是一個(gè)良性的循環(huán)。興趣、事業(yè),交替引導(dǎo)著我們前行。
不要急于為自己定位
工作了2、3年之后,我們都會(huì)有這個(gè)困惑:我以后做什么?繼續(xù)作程序員?作管理?想的再遠(yuǎn)一些,30歲之后,我們應(yīng)該做什么?
這個(gè)問題,我曾經(jīng)問過我的老板,他和我說,你把自己當(dāng)前的工作做好,好的要做的更好。今后的發(fā)展,是和你目前所做的工作、你的視野、你的經(jīng)驗(yàn),息息相關(guān)的。
功到自然成。
如何看待IT這個(gè)行業(yè)
我認(rèn)為IT行業(yè),現(xiàn)在剛剛是起步階段,這個(gè)階段也許持續(xù)20年或者更長。IT的最終目標(biāo),應(yīng)該是作為一種基礎(chǔ)服務(wù),沉淀在經(jīng)濟(jì)發(fā)展大潮下面。如同水、電、煤氣一樣,我們?nèi)粘8惺懿坏剿鼈兊拇嬖凇R坏┩k姟⑼K⑼猓覀儾艜?huì)感覺到不便,才會(huì)發(fā)現(xiàn),整個(gè)經(jīng)濟(jì)的運(yùn)轉(zhuǎn),都離不開這些基礎(chǔ)設(shè)施。
軟件方面,最終也會(huì)發(fā)展到這么一個(gè)階段。黑客帝國二里面,議會(huì)老大和NEO在談?wù)搈atrix和“真實(shí)”世界,透過繁榮,背后是巨大的能量供應(yīng)基地、星羅棋布的管道,這一切看起來丑陋的東西,被深深地印藏在背后了。
從目前來看,軟件還是在盡量的模擬世界,盡量的從數(shù)據(jù)中發(fā)現(xiàn)我們所生存的這個(gè)世界的真相。這首先需要我們把所有能發(fā)現(xiàn)的現(xiàn)象,都抽象出來,需要龐雜的數(shù)學(xué)理論支持,需要硬件的革命性地變化支撐。
但這是一個(gè)非常困難的工作,也許幾代人的時(shí)間我們才能做到。我們目前所做的,正是這偉大變革的第一步。
做好選擇:進(jìn)大公司?進(jìn)小公司?
每個(gè)臨近畢業(yè)的,致力于搞軟件的人都會(huì)有這個(gè)抉擇:進(jìn)大公司?進(jìn)小公司?
大公司門檻高,組織結(jié)構(gòu)復(fù)雜,層級(jí)很多,待遇也許不會(huì)太好,高手眾多。Freshman也許要適應(yīng)幾年的時(shí)間,才能展露頭角。
小公司門檻低,結(jié)構(gòu)單一,待遇相對(duì)會(huì)好。新手很容易抓住機(jī)會(huì),在項(xiàng)目中成長起來。
眾多走過來的人都有這個(gè)經(jīng)驗(yàn),大公司里面你會(huì)學(xué)到很多東西,各方面會(huì)正規(guī)一些;小公司的生存壓力比較大,也許你會(huì)成為一個(gè)多面手,但成為一個(gè)高手,會(huì)很困難。道理很簡(jiǎn)單,一個(gè)是發(fā)展階段,一個(gè)是生存期,這兩種狀態(tài)決定了公司的運(yùn)營狀態(tài),決定了軟件研發(fā)的思路,決定了市場(chǎng)思路。
我個(gè)人的體會(huì)是,開始進(jìn)入大公司,應(yīng)該是一個(gè)不錯(cuò)的抉擇。如果進(jìn)了小公司,就要考慮如何踏實(shí)的把工作做好先,如何能夠全面、快速的成長。
作者鞠強(qiáng),10年的企業(yè)管理軟件開發(fā)經(jīng)驗(yàn),目前致力于產(chǎn)品性能、安全方面的研究。我的聯(lián)系方式是:濟(jì)南市山大路224號(hào),浪潮通軟,郵編250103。聯(lián)系電話:138 5310 1310,MSN是:juqiang1975@msn.com