久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

abaqus_用戶程序-學習心得(五篇范例)

時間:2019-05-12 12:00:15下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《abaqus_用戶程序-學習心得》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《abaqus_用戶程序-學習心得》。

第一篇:abaqus_用戶程序-學習心得

ABAQUS用戶子程序

當用到某個用戶子程序時,用戶所關心的主要有兩方面:一是ABAQUS提供的用戶子程序的接口參數。有些參數是ABAQUS傳到用戶子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用戶自己定義的,例如F。二是ABAQUS何時調用該用戶子程序,對于不同的用戶子程序ABAQUS調用的時間是不同的。有些是在每個STEP的開始,有的是STEP結尾,有的是在每個INCREMENT的開始等等。當ABAQUS調用用戶子程序是,都會把當前的STEP和INCREMENT利用用戶子程序的兩個實參KSTEP和KINC傳給用戶子程序,用戶可編個小程序把它們輸出到外部文件中,這樣對ABAQUS何時調用該用戶子程序就會有更深的了解。(子程序中很重要的就是要知道由abaqus提供的那些參量的意義,如下)首先介紹幾個子程序:

一.SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, JLTYP,SNAME)參數:

1. F為用戶定義的是每個積分點所作用的荷載的大??;

2. KSTEP,KINC為ABAQUS傳到用戶子程序當前的STEP和INCREMENT值;

3. TIME(1),TIME(2)為當前STEP TIME和INCREMENT TIME的值;

4. NOEL,NPT為積分點所在單元的編號和積分點的編號;

5. COORDS為當前積分點的坐標;

6. 除F外,所有參數的值都是ABAQUS傳到用戶子程序中的。

功能:

1. 荷載可以被定義為積分點坐標、時間、單元編號和單元節點編號的函數。

2. 用戶可以從其他程序的結果文件中進行相關操作來定義積分點F的大小。

例1:這個例子在每個積分點施加的荷載不僅是坐標的函數,而且是隨STEP變化而變化的。

SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, 1 JLTYP,SNAME)INCLUDE 'ABA_PARAM.INC' C DIMENSION TIME(2),COORDS(3)CHARACTER*80 SNAME

PARAMETER(PLOAD=100.E4)

IF(KSTEP.EQ.1)THEN!當STEP=1時的荷載大小

P=PLOAD

ELSE IF(KSTEP.EQ.2)THEN!當STEP=2時的荷載大小

P=COORDS(1)*PLOAD!施加在積分點的荷載P是坐標的函數

ELSE IF(KSTEP.EQ.3)THEN!當STEP=3時的荷載大小

P=COORDS(1)**2*PLOAD

ELSE IF(KSTEP.EQ.4)THEN!當STEP=4時的荷載大小

P=COORDS(1)**3*PLOAD

ELSE IF(KSTEP.EQ.5)THEN!當STEP=5時的荷載大小

P=COORDS(1)**4*PLOAD END IF RETURN END

UMAT 子程序具有強大的功能,使用UMAT 子程序:

(1)

可以定義材料的本構關系,使用ABAQUS 材料庫中沒有包含的材料進行計算,擴充程序功能。(2)幾乎可以用于力學行為分析的任何分析過程,幾乎可以把用戶材料屬性賦予ABAQUS 中的任何單元;(3)必須在UMAT 中提供材料本構模型的雅可比(Jacobian)矩陣,即應力增量對應變增量的變化率。

(4)可以和用戶子程序“USDFLD”聯合使用,通過“USDFLD”重新定義單元每一物質點上傳遞到UMAT 中場變量的數值。

由于主程序與UMAT 之間存在數據傳遞,甚至共用一些變量,因此必須遵守有關UMAT 的書寫格式,UMAT 中常用的變量在文件開頭予以定義,通常格式為:

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD, 1 RPL,DDSDDT,DRPLDE,DRPLDT, 2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME, 3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT, 4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)

INCLUDE 'ABA_PARAM.INC'

CHARACTER*80 CMNAME DIMENSION STRESS(NTENS),STATEV(NSTATV), 1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS), 2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1), 3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT RETURN END UMAT 中的應力矩陣、應變矩陣以及矩陣DDSDDE,DDSDDT,DRPLDE 等,都是直接分量存儲在前,剪切分量存儲在后。直接分量有NDI 個,剪切分量有NSHR 個。各分量之間的順序根據單元自由度的不同有一些差異,所以編寫UMAT 時要考慮到所使用單元的類別。下面對UMAT 中用到的一些變量進行說明:

DDSDDE(NTENS,NTENS)

是一個NTENS 維的方陣,稱作雅可比矩陣,是應力的增量,是應變的增量,DDSDDE(I,J)表示增量步結束時第J 個應變分量的改變引起的第I 個應力分量的變化。通常雅可比是一個對稱矩陣,除非在“*USER MATERIAL”語句中加入了“UNSYMM”參數。STRESS(NTENS)

應力張量矩陣,對應NDI 個直接分量和NSHR 個剪切分量。在增量步的開始,應力張量矩陣中的數值通過UMAT 和主程序之間的接口傳遞到UMAT 中,在增量步的結束UMAT 將對應力張量矩陣更新。對于包含剛體轉動的有限應變問題,一個增量步調用UMAT 之前就已經對應力張量的進行了剛體轉動,因此在UMAT 中只需處理應力張量的共旋部分。UMAT 中應力張量的度量為柯西(真實)應力。

STATEV(NSTATEV)

用于存儲狀態變量的矩陣,在增量步開始時將數值傳遞到UMAT 中。也可在子程序USDFLD或UEXPAN 中先更新數據,然后增量步開始時將更新后的數據傳遞到UMAT 中。在增量步的結束必須更新狀態變量矩陣中的數據。和應力張量矩陣不同的是:對于有限應變問題,除了材料本構行為引起的數據更新以外,狀 態變量矩陣中的任何矢量或者張量都必須通過旋轉來考慮材料的剛體運動。

狀態變量矩陣的維數,等于關鍵字“*DEPVAR”定義的數值。狀態變量矩陣的維數通過ABAQUS 輸入文件中的關鍵字“*DEPVAR”定義,關鍵字下面數據行的數值即為狀態變量矩陣的維數。

材料常數的個數,等于關鍵字“*USER MATERIAL”中“CONSTANTS”常數設定的值。PROPS(NPROPS)

材料常數矩陣,矩陣中元素的數值對應于關鍵字“*USER MATERIAL”下面的數據行。SSE,SPD,SCD 分別定義每一增量步的彈性應變能,塑性耗散和蠕變耗散。它們對計算結果沒有影響,僅僅作為能量輸出。其他變量:

STRAN(NTENS):應變矩陣;

DSTRAN(NTENS):應變增量矩陣; DTIME :增量步的時間增量; NDI :直接應力分量的個數; NSHR :剪切應力分量的個數;

NTENS :總應力分量的個數,NTENS NDI NSHR = +。

使用UMAT 時需要注意單元的沙漏控制剛度和橫向剪切剛度。通常減縮積分單元的沙漏控制剛度和板、殼、梁單元的橫向剪切剛度是通過材料屬性中的彈性性質定義的。這些剛度基于材料初始剪切模量的值,通常在材料定義中通過“*ELASTIC”選項定義。但是使用UMAT 的時候,ABAQUS 對程序輸入文件進行預處理的時候得不到剪切模量的數值。所以這時候用戶必須使用“*HOURGLASS STIFFNESS” 選項來定義具有沙漏模式的單元的沙漏控制剛度,使用“*TRANSVERSE SHEAR STIFFNESS”選項來定義板、殼、梁單元的橫向剪切剛度。幾個關于子程序的問題及相應解答 Q: 本人在用umat作本構模型時,*static,1,500,0.000001,0.1 此時要求的增量步很多,即每次增量要很小,*static

1,500 時,在彈性向塑性過度時,出現錯誤,增量過大,出現尖點.? A: YOU CAN TRY AS FOLLOWS:

*STEP,EXTRAPOLATION=NO,INC=2000000 *STATIC

0.001,500.0,0.00001,0.1。

Q: 在abaqus中,如果采用umat,利用自己的本構,如何讓abaqus明白這種材料的彈塑性應

變,也就是說,如何讓程序返回彈性應變與塑性應變,好在output中輸出,我曾想用最笨

地方法,在uvarm中定義輸出,利用getvrm獲取材料點的值,但無法獲取增量應力,材料常

數等,研究了幫助中的例子,umatmst3.inp,umatmst3.for,他采用mises J2 流動理論,我在output history 顯示他已進入塑性狀態,但他的PE仍然為0!? A: 用uvar()勉強成功。

Q: 偶在umat中調用求主應力函數

CALL SPRINC(STRESS,PS,LSTR,NDI,NSHR)后,存儲主應力得數組PS中

各個主應力排列順序是什么?

PS1>PS2>PS3 ? PS1

PS3>PS2 ? A: 第二個。

個人覺得:

umat實現自己的本構沒有固定的方法,對于不同的本構有可能必須采用不同的方法。這要

靠自己不斷地摸索。有可能一種方法對于簡單加載問題還行,但有可能對于復雜問題并不

收斂。最重要一點,就是umat中采用的算法必須consistent.再就是ddsdde必須正確,(如

果采用back_Euler 方法等一些算法,ddsdde錯誤有時不影響結果(對于簡單加載問題沒有

影響,能收斂,),但對于復雜問題不收斂。

uptonow,你這個算法對于Mises,hill,J2,J2d等一類的屈服函數是正確的,但具體的本構

還要靈活運用,這我也正學習,正在摸索。

有時,umat需要很強的有限元基礎,并且對采用的本構要很熟悉,不要在一顆樹上吊死才

好。首先要確認自己的umat沒有錯誤,如果沒有,但就是不收斂(在不斷減小加載步長的情況下,當然最好對步長不敏感,特別是對于粘彈性,粘塑性,內變量一類的材料,有的本構取決于背應力的計算)。那就應該考慮換一種算法。

一點體會,請大家探討。

Q: abaqus-uamt的老問題,缺少 'ABA_PARAM.INC'文件 ? A: 在cvf6.5調試時,顯示 缺少 'ABA_PARAM.INC'文件!

這個沒有任何關系的,這個錯誤將在ABAQUS調用UMAT的時候自動會找到,僅僅有這個錯誤

將沒有任何影響的。也就是說,ABAQUS中調用的時候,實際并不存在這個錯誤。FT,忘了

說一句了,你把ABA_PARAM.INC.dp或ABA_PARAM.INC.sp拷到你的程序工作空間后,應該將

把ABA_PARAM.INC.dp或ABA_PARAM.INC.sp的后綴.sp或.dp去掉,即將ABA_PARAM.IN C.dp或

ABA_PARAM.INC.sp改名為ABA_PARAM.INC。呵呵,他的意思是在Visual Fortran中調試其子程序,我覺得這是一個好辦法,我當時也

是這麼辦的,畢竟在ABAQUS中調試是非常麻煩的,只有當你的UMAT沒有語法或者明顯的邏

輯錯誤,你在ABAQUS中調試才能事半功倍。Q:uvarm可以輸出到哪里?.odb可以么?

另外那個strav??就是自己定義用于umat的那個數組里的數可以輸出到.odb里么?

A:在umat中,statev是不能用在output中的,statev只是作為一個解的狀態變量,說來慚愧,我是在umat中定義peeq,(peeq)的求解一般在彈塑性力學書上有(等效塑性應變),用write()寫入一個臨時文件,((切記:這個文件unit號不要與abaqus中的重合,因為他有一些系統默認的文件號,))

然后在uvarm中讀取,以uvarm輸出,因為uvarm可以以odb的形式輸出,支持output,field,output,history

Q:在本版看了一個一維固結的例子,其中含有用戶子程序,如下

SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE, COORDS,TEMP,DTEMP)

INCLUDE 'ABA_PARAM.INC'

DIMENSION FIELD(NSECPT),TIME(2),COORDS(3),TEMP(NSECPT), DTEMP(NSECPT)

KFIELD=1

FIELD(1)=COORDS(2)

RETURN END

我在VF6.5中進行調試,提示找不到ABA_PARAM.INC 請問大俠這如何解決。

還有我因為是初次接觸用戶子程序,我查閱了本版所有的相關貼子,都講的不太詳細,我將問題總結一下,大俠們能不能詳細的講解一下,子程序格式(程序后綴是.f;.f90;.for;.obj??)2 CAE中如何調用,command下如何調用?若有多個子程序同時存在,如何處理 我對VF不是很熟,是否可以用VC,C++編寫子程序? A: 若要在vf中調試,那么應該根據需要把SITE文件夾中的ABA_PARAM_DP.INC(雙精度)或ABA_PARAM_SP.INC(單精度)拷到相應的位置,并改名為ABA_PARAM.INC即可。

1。我試過,.for格是應該是不可以的,至少6.2和6.3版本應該是不行,其他的沒用過,沒有發言權。

在Abaqus中,運行abaqus j=jobname user=username時,默認的用戶子程序后綴名是.for(.f,.f90應該都不行的,手冊上也有講過),只有在username.for文件沒有找到的情況下,才會去搜索username.obj,如果兩者都沒有,就會報錯誤信息。

如果username包括擴展名for或obj,那么就根據各自的擴展名ABAQUS會自動選擇進行操作。

2。cae中在creat job的job manager中的general中可以指定子程序;command下用命令:abaqus j=jobname user=userfilename(無后綴);

3。將其寫在一個文件中即可,然后用一個總的子程序調用(具體參見手冊)

4。據說6.4的將可以,6.3的你可以嘗試著將VC,C++程序編譯為obj文件,沒試過。

在你的工作目錄下應該已經存在ufield.obj和uvarm.obj這兩個文件(這兩個文件應該是你分別單獨調試ufield.FOR和uvarm.FOR時自動編譯生成的,你可以將他們刪掉試試看),但是由于你的FOR文件中已經有了UVARM和UFIELD這兩個subroutine,顯然會造成重復定義,請查實。

## Q: 假定采用mises屈服準則。在調用UMAT之前,ABAQUS傳遞給UMAT本次增量開始時的應力sigma(0),總應變E,應變增

量delta(E)。

狀態變量保存:彈性應變,塑性應變,等效塑性應變。

(請問,狀態變量保存的彈性應變+塑性應變是否等于ABAQUS傳遞給UMAT的總應變???

??)

2,然后在UMAT中利用上述的ABAQUS傳遞的量和狀態變量得到DDSDDE矩陣,然后返回給

ABAQUS,ABAQUS根據delta(sigma)=ddsdde*delta(E),并且得到本次增量結束時的應力

sigma(1)=sigma(0)+delta(sigma)=sigma(0)+ddsdde*delta(E)然后更新本次增量結束時的狀態變量:彈性應變,塑性應變,等效塑性應變以供下次調

用UMAT

請問手冊上UMAT必須更新應力,可是根據上述我的理解好像是ABAQUS根據UMAT提供的本

次增量的DDSDDE在ABAQUS中更新,請問到底是怎么回事?謝謝!

##### A: 1 在調用UMAT之前,ABAQUS傳遞給UMAT本次增量開始時的應力sigma(0),總應變E,應..: 量delta(E)。

: 狀態變量保存:彈性應變,塑性應變,等效塑性應變。

2,然后在UMAT中利用上述的ABAQUS傳遞的量和狀態變量得到DDSDDE矩陣,然后返回給

: ABAQUS,ABAQUS根據delta(sigma)=ddsdde*delta(E),并且得到本次增量結束時的應力然后更新本次增量結束時的狀態變量:彈性應變,塑性應變,等效塑性應變以供下 以上有些answers本人并沒有親自證實,如有問題請及時更正!

轉】ABAQUS與FORTRAN 2 2011年10月29日 星期六 10:38 轉載自 nefutumu 最終編輯 nefutumu Q: 本人嘗試使用ABAQUS的子程序SUBROUTINE,根據幫助文件需要編譯通過生成*.for和*.lib文件,可是編譯的時候出現錯誤:Error: Cannot open include file 'ABA_PARAM.INC'不知道是什么原因,怎么解決?

A: 1.確認Visual Fortran及VC++正確安裝,并在安裝ABAQUS之前安裝。2.首先將用戶子程序*.f文件后綴名改為*.for。

3.到控制面板-》系統-》高級-》環境變量中的 Administrator用戶變量: 修改—— 變量名:lib變量值:C:Program FilesMicrosoft Visual StudioDF98LIB;C:Program FilesMicrosoft Visual StudioVC98LIB(我的問題就是因為只加了一個LIB,必須兩個都加?。┩瓿梢陨喜襟E以后,就可以運行了。

Q: 怎樣把自己編寫的子程序倒入到*.INP文件中。

A:

Q:用函數作批處理遇到問題,在fortran中使用result = systemqq(abaqus job=job1 interactive)作批處理,總是在計算兩個job之后就不繼續往下算了,cmd明令行提示:run time error:floating-point...請問這是怎么回事?

A: 個方法就是做一個批處理文件,abaqus job=beam interactive abaqus job=beam1 interactive abaqus job=beam2 interactive abaqus job=beam n? interactive 存為.bat文件即可。python好像一般是做CAE前后處理界面的。

A:前面加call.call abaqus job=1 interactive call abaqus job=2 interactive call abaqus job=3 interactive

Q:FORTRAN如何調用ABAQUS?

A: use the function “system” or “systemqq” USE DFLIB

LOGICAL(4)result

result = SYSTEMQQ('abaqus job=xx')

QA: 首先我用ABAQUS的VARIFY命令對系統進行修正和檢測,這個命令會自動運行,對ABAQUS進行調試等操作,其中涉及到對用戶子程序的模擬計算,如果計算失敗,就會在VARIFY.LOG文件中說明,確實發現“USER SUBROUTINE...和SINGLE...和DOUBLE...”失敗,說明用戶子程序安裝不成功,肯定與VISUAL FORTRAN6.5有關!然后,找到FORTRAN_MAKE文本文件,發現錯誤,可能是與FORTRAN安裝有關!于是卸載FORTRAN,重新安裝在C盤!安裝完畢后,改變環境變量如下:

INCLUDE C:Program FilesMicrosoft Visual StudioDF98IMSLINCLUDE;C:Program FilesMicrosoft Visual StudioVC98INCLUDE;D:程序文件VC98INCLUDE;LIB C:Program FilesMicrosoft Visual StudioDF98IMSLLIB;C:Program FilesMicrosoft Visual StudioDF98LIB;C:Program FilesMicrosoft Visual StudioVC98LIB;D:程序文件VC98LIB;PATH C:Program FilesMicrosoft Visual StudioCommonTools;D:程序文件VC98BIN;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;C:KAV6;D:程序文件KV6;c:program filesmicrosoft visual studiodf98bin;c:program filesmicrosoft visual studiovc98bin;c:program filesmicrosoft visual studiocommonmsdev98bin;D:ABAQUSCommands;C:Program FilesMicrosoft Visual StudioDF98BIN 我們只需要關注MICROSOFT VISUAL STUDIO文件夾!最后,再次執行VARIFY命令,等運行完畢后,檢查VARIFY文本文件,發現: ABAQUS/Standard with User Subroutines...PASS Continuing...ABAQUS/Explicit with User Subroutines(single precision)...PASS Continuing...ABAQUS/Explicit with User Subroutines(double precision)...PASS Continuing...OK!!?。。。。。?!搞定 ABAQUS神功修煉

2011年10月05日 星期三 15:23 轉載自 小強樂了 最終編輯 小強樂了

第1招:abaqus中ELGEN參數的意義

*ELGEN,ELSET=ALLE!?)q/ w, A+ z)w)g, L 1,6,40,1,10,1,10 101,18,40,1,12,1,205 L+ r6 i6 Y* i)j 請問這幾句什么意思呢,我查了關鍵詞,但還是不明白

1,6,40,1,10,1,10 對應的分別是:主單元編號、第一行要生成的單元數、單元與單元間對應節點的增量、行中單元編號的增量、要定義的行數、行與行間對應節點的增量、行與行間對應單元編號的增量

第2招:inp文件導入時,出現“WARNING: The following keywords/parameters are not yet supported by the input file reader:”

出現上面的錯誤,是因為CAE不支持的原因。應該先導入CAE中,然后編輯它的關鍵字,在里面把原來要加的初始化條件手工加進去。具體操作是: model->edit keywords 注意 edit keywords 導入的任何數據在cae中是看不到的

比如:在edit keywords里定義了材料彈性模量 E,在cae里的材料設置中是看不到的 edit keywords 中與cae的定義如果出現沖突 會錯誤提示 所以要慎用

第3招:abaqus中的一個findAt技巧

session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry=COORDINATE)在命令行中直接輸入上述語句

結果.rpy文件中的findAt語句就會以坐標形式出現

session.graphicsOptions.setValues(backgroundStyle=SOLID,backgroundColor='#000000', translucencyMode=2)在命令行中直接輸入上述語句 背景顏色就會變成黑色

第4招:查看abaqus對應的python版本

在abaqus command里輸入

abaqus python

第5招:在abaqus中子程序的編譯

一般來說abaqus的源文件的編譯需要使用命令,abaqus make library=usersubroutine.f, 這樣生成的*.o文件才能被成功調用?;蛘呤敲睿涸赼baqus command中輸入:abaqus make-library subroutine

第二篇:程序學習心得

經驗分享

(一)一位高級程序員給學弟學妹的建議我始終認為,對一個初學者來說,IT 界的技術風潮是不可以追趕的,而且也沒有能力去追趕。我時常看見自己的DDMM 們把課本扔了,去賣些價格不菲的諸如C#, VB.Net 這樣的大部頭,這讓我感到非常痛心。而許多搞不清指針是咋回事的BBS 站友眉飛色舞的討論C# 里面可以不用指針等等則讓我覺得好笑。C# 就象當年的ASP 一

樣,“忽如一夜春風來,千樹萬樹梨花開”,結果許多學校的信息學院成了“Web 學院”96,97 級的不少大學生都去做Web 了。當然我沒有任何歧視某一行業的意識。我只是覺得如果他們把追趕這些時髦技術的時間多花一點在基礎的課程上應該是可以走得更遠的.幾個誤區

初學者對C# 風潮的追趕其實也只是學習過程中經常遇到的幾個誤區之一。我將用一些實際的例子來說明這些現象,你可以按部就班的看看自己是不是屬于其中的一種或者幾種:

1.認為計算機技術等于編程技術:

有些人即使沒有這個想法,在潛意識中也有這樣的沖動。讓我奇怪的是,許多信息學院的學生也有這樣的念頭。認為計算機專業就是編程專業,與編程無關的,或者不太相關的課程他統統都不管,極端的學生只要書上沒帶“編程”兩個字他就不看。

其實編程只是計算機技術應用過程中一種復雜性最低的勞動,這就是為什么IT 業最底層的人是程序員(CODER)。計算機技術包括了多媒體,計算機網絡,人工智能,模式識別,管理信息系統等等這些方面。編程工作只是在這些具體技術在理論研究或者工程實踐的過程中表達算法的過程。編程的人不一定對計算機技術的了解就一定很高。而一個有趣的現象是,不少大師級的計算機技術研究者是不懂編程的。網上的炒作和現實中良好的工作待遇把編程這種勞動神秘化了。其實每一個程序員心里都明白,自己這些東西,學的時候并不比其它專業難,所以自然也不會高檔到哪里去。

2.咬文嚼字的孔已己作風:

我見過一本女生的《計算機網絡原理》教材,這個女生像封學生一樣在書上劃滿了橫杠杠,筆記做得滿滿的,打印出來一定比教材還厚。我不明白的是,像計算機網絡原理這樣的課程有必要做筆記?我們的應試教育的確害了不少學生,在上《原理》這一類課程的時候許多學生像學《馬列原理》一樣逐字背誦記憶。這乃是我見過的最愚蠢的行為。所謂《原理》,即是需要掌握它為什么這樣做,學習why,而不是how(怎樣做)。極端認真的學生背下以太網的網線最大長度,數據幀的長度,每個字段的意義,IP報頭的格式等等,但是忘了路由的原則,忘了TCP/IP 協議設計的宗旨??傊S多人花了大量的時間把書背得滾瓜爛熟卻等于什么也沒學。

在學習編程的時候這些學生也是這樣,他們確切的記得C++ 語法的各個細節??赐炅薈++ 教程后看《Thinkingin C++ 》(確實是好書),《Inside C++ 》,《C++ reference 》,this C++, that C++……,然后是網上各種各樣的關于C++ 語法的奇聞逸事,然后發現自己又忘了C++ 的一些語法,最后回頭繼續惡補…。有個師弟就跟我說:“C++ 太難了,學了這里忘了那里,學了繼承忘了模板。” 我的回答道:“你不去學就容易了”。我并沒有教壞他,只是告訴他,死摳C++ 的語法就和孔已己炫耀茴香豆的茴字有幾種寫法一樣毫無意義。你根本不需要對的C++ 語法太關心,動手編程就是了,有不記得的地方一查MSDN 就立馬搞定。我有個結論就是,實際的開發過程中對程序語法的了解是最微不足道的瞄識。這是為什么我在為同學用Basic(我以前從沒有學過它)寫一個封程序的時候,只花了半個封時看了看語法,然后再用半個封時完成了程序,而一個封時后我又完全忘記了Basic 的所有關鍵字。

3.不顧基礎,盲目追趕時髦技術:

終于點到題目上來了。大多數的人都希望自己的東西能夠馬上跑起來,變成錢。這種想法對一個已經進入職業領域的程序員或者項目經理來說是合理的,而且IT 技術進步是如此的快,不跟進就是失業。但是對于初學者來說(尤其是時間充裕的大中專在校生),這種想法是另人費解的。一個并未進入到行業競爭中來的初學者最大的資本便是他有足夠的時間沉下心來學習基礎性的東西,學習why 而不是how。時髦的技術往往容易掌握,而且越來越容易掌握,這是商業利益的驅使,為了最大化的降低軟件開發的成本。但在IT 領域內的現實就是這樣,越容易掌握的東西,學習的人越多,而且淘汰得越快。每一次新的技術出來,都有許多初學者跟進,這些初學者由于缺乏必要的基礎而使得自己在跟進的過程中花費大量的時間,而等他學會了,這種技術也快淘汰了。基礎的課程,比方數據結構,操作系統原理等等雖然不能讓你立馬就實現一個linux(這是許多人嘲笑理論課程無用的原因),但它們能夠顯著的減少你在學習新技術時學習曲線的坡度。而且對于許多關鍵的技術(比方Win32 SDK 程序的設計,DDK 的編程)來說甚至是不可或缺的。

一個活生生的例子

我和我的一個同學,在大一時我還找不到開機按紐,他已經會寫些簡單的匯編程序了。我把大二的所有時間花在了匯編,計算機體系結構,數據結構,操作系統原理等等這些課程的學習上,而他則開始學習HTML 和VB,并追趕ASP 的潮流。大三的時候我開始學習Windows 操作系統原理,學習SDK 編程,時間是漫長的,這時我才

能夠用VC 開發出象模象樣的應用程序。我曾一度因為同學的程序已經能夠運行而自己還在學習如何創建對話框而懊惱不已,但臨到畢業才發現自己的選擇是何等的正確。和我談判的公司開出的薪水是他的兩倍還多。下面有一個不很恰當的比方:假設學習VB 編程需要4 個月,學習基礎課程和VC 的程序設計需要1 年。那么如果你先學

VB,再來學習后者,時間不會減少,還是1 年,而反過來,如果先學習后者,再來學VB,也許你只需要1 個是期就能學得非常熟練。

幾個重要的基礎課程

如果你是學生,或者如果你有充足的時間。我建議你仔細的掌握下面的瞄識。我的建議是針對那些希望在IT 技術上有所成就的初學者。同時我還列出了一些書目,這些書應該都還可以在書店買到。說實在的,我在讀其他人的文章時最大的心愿就是希望作者列出一個書單。

大學英語-不要覺得好笑。我極力推薦這門課程是因為沒有專業文檔的閱讀能力是不可想象的。中文的翻譯往往在猴年馬月才會出來,而現在的許多出版社干脆就直接把E 文印刷上去。學習的方法是強迫自己看原版的教材,開始會看不懂,用多了自然熟練。吃得苦下得狠心絕對是任何行業都需要的品質。

計算機體系結構和匯編語言-關于體系結構的書遍地都是,而且也大同封異,倒是匯編有一本非常好的書《80x86 匯編語言程序設計教程》(清華大學出版社,黑色封面,楊季文著)。你需要著重學習386 后保護模式的程序設計。否則你在學習現代操作系統底層的一些東西的時候會覺得是在看天書。

計算機操作系統原理-我們的開發總是在特定的操作系統上進行,如果不是,只有一種可能:你在自己實現一個操作系統。無論如何,操作系統原理是必讀的。這就象我們為一個芯片制作外圍設備時,芯片基本的工作時序是必需了解的。這一類書也很多,我沒有發現哪一本書非常出眾。只是覺得在看完了這些書后如果有空就應該看看《In side Windows 2000 》(微軟出版社,我看的是E 文版的,中文的書名想必是Windows 2000 技術內幕之類吧)。關于學習它的必要性,ZDNET 上的另一篇文章已經有過論述。

數據結構和算法-這門課程能夠決定一個人程序設計水平的高低,是一門核心課程。我首選的是清華版的(朱戰立,劉天時)。很多人喜歡買C++ 版的,但我覺得沒有必要。C++ 的語法讓算法實現過程變得復雜多了,而且許多老師喜歡用模塊這一東西讓算法變得更復雜。倒是在學完了C 版的書以后再來瀏覽一下C++ 的版的書是最好的。

軟件工程-這門課程是越到后來就越發現它的重要,雖然剛開始看時就象看馬哲一樣不瞄所云。我的建議是看《實用軟件工程》(黃色,清華)。不要花太多的時間去記條條框框,看不懂就跳過去。在每次自己完成了一個軟件設計任務(不管是練習還是工作)以后再來回顧回顧,每次都會有收獲。

Windows 程序設計-《北京大學出版社,Petzold 著》我建議任何企圖設計Windows 程序的人在學習VC 以前仔細的學完它。而且前面的那本《Inside Windows 2000 》也最好放到這本書的后面讀。在這本書中,沒有C++,沒有GUI,沒有控件。有的就是如何用原始的C 語言來完成Windows 程序設計。在學完了它以后,你才會發現VC 其實是很容易學的。千萬不要在沒有看完這本書以前提前學習VC,你最好碰都不要碰。我瞄道的許多名校甚至都已經用它作為教材進行授課??梢娖渲匾?/p>

上面的幾門課程我認為是必學的重要課程(如果你想做Windows 程序員)。

對于其它的課程有這樣簡單的選擇方法:如果你是計算機系的,請學好你所有的專業基礎課。如果不是,請參照計算機系的課程表。如果你發現自己看一本書時無法看下去了,請翻到書的最后,看看它的參考文獻,找到它們并學習它們,再回頭看這本書。如果一本書的書名中帶有“原理”兩個字,你一定不要去記憶它其中的細節,你應該以一天至少50 頁的速度掌握其要領。盡可能多的在計算機上實踐一種理論或者算法。

你還可以在CSDN 上閱讀到許多書評。這些書評能夠幫助你決定讀什么樣的書。

日三省乎己

每天讀的書太多,容易讓人迷失方向。一定要在每天晚上想想自己學了些什么,還有些什么相關的東西需要掌握,自己對什么最感興趣,在一本書上花的時間太長還是不夠等等。同時也應該多想想未來最有可能出現的應用,這樣能夠讓你不是追趕技術潮流而是引領技術潮流。同時,努力使用現在已經掌握的技術和理論去制作具有一定新意的東西。堅持這樣做能夠讓你真正成為一個軟件“研發者”而不僅僅是一個CODER。

把最多的時間花在學習上

這是對初學者最后的忠告。把每個是期玩CS 或者CS 的時間壓縮到最少,不玩它們是最好的。同時,如果你的ASP 技術已經能夠來錢,甚至有公司請你兼職的話,這就證明你的天分能夠保證你在努力的學習之后取得更好的收益,你應該去做更復雜的東西。眼光放長遠一些,這無論是對誰都是適用的。

相信你已經能夠決定是否學習C ?;蛘呤裁磿r候去學它了。

經驗分享

(二)一個老程序員給青鳥學生和即將讀青鳥學生的建議和評價 在這篇帖子開始之前,我先自我介紹一下,這個介紹只是為了讓大家了解我說這些話語的公正性,本人是重本畢業,先后在一個不出名的IT 企業(200 人規模,單個項目額平均200 萬左右)工作4 年,華為1 年,雅虎1 年,先后的職位是c/c++ 程序員,oracle 高級工程師,db2 dba, 分析師,現在在一家上市公司(非沿海城市,500 人規模,單個項目額平均400 萬左右)做數據挖掘項目負責人,公司另外個c/c++ 專家頭銜。今年29 歲,底薪10000,證書有一個計算機資格考試過的系統分析師證書,一個oracle dba 證書,一個db2 dba 證書。我想,IT 業界還是有不少純技術專家比我強的,IT 業界高手如云,希望我的前輩看過一笑,我的師弟師妹們有個認識,交個朋友,如果有覺得我有炫耀嫌疑的,希望能諒解,不介紹自己,就無從談起這篇帖子的出發點。

由于,我曾經在一家北大青鳥做過1 年的兼職,這個帖吧還是我以前兼職的學生告訴我的,我今天看到這個帖吧里面相當混亂,罵的夸的互相拆臺的,我只想把我對青鳥的上下的評價以及對各位學生的建議清楚地寫一下,把這當作是一個老程序員的話吧,畢竟,我不算高手,但是對于各位學生,暫時還算一個你們的目標吧。

那么首先,我想評價一下青鳥的學生,青鳥的學生能力以及就業機會,可以毫不懷疑的說,青鳥學生的就業是不難的,因為青鳥學生的動手能力比較強,并且掌握的是目前主流開發工具.net 和j2ee 技術,所以懷疑青鳥就業的學生,不要擔心,就業是不難的。但是我也不得不說一下你們面對的青鳥廣告:月薪4000 就業。這個數字大部分人是懷疑的,但是據我所瞄,這個數字不是謊話,確實有學生畢業能拿4000。當然這里有水分:第一,這些人是極少數;第二,4000 這個薪水即使拿到了,也要考慮一下水分,比如小軟件公司拿4000,并不是多高收入,為什么呢?試想,小軟件公司沒有保障,說不定沒有三保一金,五保一金,沒有出差補助,沒有加班補質,甚至年終獎都會打折扣,要解雇你也不賠錢,別小看這些待遇,這些待遇實際上不是2,3 千的工資差額能補償的。所以在這里我得把你們的就業給你們估計一下,實際上呢,你們的平均工資,在沿??茨芊襁_到3 千,這算比較公允的。然后,對于你們就業的公司而言,我也可以給你們估計一下大概是哪些公司。外企?不可能,人家講究英語。華為中興這些大型企業?也不現實,去過華為應聘的人都瞄道,就一套數據結構與算法的題目就可以刷掉青鳥95% 的學生,中型企業,這個就比較現實,問題是中型企業也講究算法與數據結構還有高等數學,為什么呢,這些科目感覺跟軟件開發不靠邊阿。其實,一旦涉及到大數據量大計算量的系統,這些科目的瞄識就至關重要。而只有大型,中型企業有可能接到這些大系統的項目,所以他們也需要自己的員工懂得這些方面的瞄識。那么最后剩下的就是小企業了,小企業重在項目總額,項目利潤不高不要緊,多接幾個,每年的項目額就上去了,這些項目通常都是些小項目,人才的關鍵在于是否掌握了馬上就能動手的.net 和j2ee,沒時間培訓了,所以他們偏愛青鳥學生。

所以可以告訴大家,青鳥的學生絕大部分流向是小型企業,少數去中型企業,一般是這個估算。那么,將來有沒有鍛煉呢? 可以很肯定地告訴大家,做小項目沒有什么鍛煉價值,為什么?因為人人能做,物以稀為貴,人人都能做,你就不值錢了,很難有薪水的提高,充其量就是.net 和j2ee 的熟手而已。所以,要進入大企業做大型系統的鍛煉,學習他們思考問題的方法,領悟到軟件最重要的到底是.net,j2ee 的那些架構,還是需求分析和數據流設計,數據結構以及算法設計。這才是真正鍛煉人的地方。這才是鍛煉出高手的地方。

所以,各位青鳥的學生們,要清醒地認識到你們的優點,也要認識到你們的不足,你們1 年學習掌握了.net 和j2ee,那些在大學耗費4 年學習數據結構,線性代數,高等數學的計科學生積累的厚重不是你們比擬的,你們小公司有用武之地,那是因為你們是青鳥針對小企業量身打造的人才,而大學生是做為IT高級人才打造的,現狀是大學生太多以及大學生自己不爭氣,不學好這些科目,搞得一塌糊涂,但是你們要想發展,必須把大學的數學相關科目補好,否則,小公司以及2000*3000 的薪水,失業,競爭,就會伴隨你一輩子。

所以,不要相信你們在青鳥學校里那些老師對你們的j2ee 和.net 吹捧,你們是靠這個找工作,但是這個東西是最沒有技術含量的,你花1 年能學會,別人不能嗎?沒有幾年的數學邏輯積累,你們的現狀是很殘酷的。有人說,自學高等數學,數據結構,太夸張了吧?沒錯,很難,你們選擇了青鳥,讓你們具備了找工作的能 力,但是,確實在某種程度上,你們成就高手這一步,將困難萬分。

真正值錢的項目,是海量數據,專業性極強的分析系統,真正值錢的技術人才,也要從數據計算處理分析這里著手。

這里奉勸各位青鳥的老師,不要誤導學生j2ee 和.net 了,這兩門一定要學好,但是,不是把學生送出門就可以了,他們將來還要存活還要發展,邏輯和算法才是真正的王道。你們可以不懂,但是不能這么教學生啊。

經驗分享

(三)一個程序員的體會

昨天,叔叔給我介紹了一份工作,搞推銷,完成任務給1000 元,完不成任務給500 元。我又一次拒絕了,爸爸問我為什么不干,我說不想從事這個行業。這次爸爸終于發怒了,真說我“不要臉”,還說了好多難聽的話。我知道,矛盾終于爆發了......這是理想和現實的一次碰撞!我不怨爸爸,只怪我自己不爭氣,這是我第n 次拒絕工作了,這之前有親戚、朋友、同學給我介紹工作,都被我婉言謝絕了,不是我不想工作,而是我想從事自己喜歡的行業**it 業,我想成為一名真正的程序員!我不敢想像做一份你不喜歡的工作,會有多少的工作熱情,會給公司帶來多大的經濟效益?整日從事這樣一份工作,是一種怎樣的折磨?只會帶來思想上的麻木,意志上的消磨,時間長了,你會越來越離不開目前的工作,雖然你不喜歡,但是已經習慣了。我不想這樣!

但是現實是殘酷的!我必須工作掙錢養家,首先要養活自己,我不能再靠父母養活,他們養活我20多年已經不容易了,該是我回報他們的時候了!可是理想和現實總是存在差距,下面說說我的經歷:

我是一所三流高校一名本科生,學的是經濟學專業,今年剛剛畢業。雖然我的畢業論文和答辯都是優,但是我卻對我的專業好無興趣,整個大學四年,我面對的只是高深的經濟學理論和與現實社會嚴重脫節的教材。我們的專業是大而全的專業,相關專業都有所涉獵,但是都不精通。學院說開始要把我們往經濟學理論研究方向培養,可又是談何容易? 師資力量太薄弱,最后行不通,后來又要往經濟管理方向發展,可是管理要是沒有與實踐相結合,還不是空中樓閣。我們學院與企業之間基本沒有交流,實習機會更是沒有,都是自己在外面找,可是真正能找到稱心如意的是少之又少,大部分都在外面搞推銷。畢業了,與學市場營銷的同學相比,我們沒有競爭力;與會計學專業的同學相比,我們也沒有競爭力;而與學國際貿易的同學相比,我們更沒有競爭力!連我們老師都說:“你們是什么的會,又什么都不會?!币徽Z道破我們專業目前面臨的窘境。老師又號召我們考研,可是考研又談何容易?又是萬人擠獨木橋啊!

大學我們計算機課只學了兩本書,一本是《計算機應用基礎》,一本是《foxpro for windows 》,兩本都是我們學校自己老師出的,都是為了賺錢,書是盜版,內容更是拼準,質量可以想像。所以當時我對計算機并沒有多少興趣,對編程更是一竅不通!只是上大學前專門學了指法,大一時想學打字,當時市面流行五筆輸入法(現在也是),而我并沒有跟風學五筆,而是自學了兩筆輸入法,現在看來是正確的,兩筆輸入采用音形結合的方法,摒棄了五筆不符合漢字書寫規則和拼音重碼太高的缺陷,而且有非常易學,極力向大家推薦。掌握了方法以后,我就天天在機房練習打字,后來我打字就非??炝?,一分鐘可以打100 多個字,同學們都很羨慕我,在我們系也封有名氣。一個打字不是很快的人都讓同學羨慕甚至崇拜,可以想像我們班的同學計算機水平多么低了.我當時也很滿足,認為打字快計算機水平就算高了,而不知道打字是最基本的操作,在整個計算機體系中好像是大海里的一滴水。正因為這種認識,使我忽視了計算機其他知識的學習,當時只知道foxpro 與數據庫有聯系,其他的就什么也不知道了。

真正讓我接觸到編程是在大三下學期,因為知道我們專業就業形勢不容樂觀,有種緊迫感了,所以我每個禮拜都會買《就業時報》,在某一期報紙上無意中看到**** 軟件工程師的招生廣告(后來知道每期都有),廣告作得很好,我當時就覺得就業壓力這么大,能多學一門技能,就多了一分競爭力。于是我就給他們打了電話,問他們學這個要多少錢,接線的封妝很會說話,沒有明說,而是直接告訴我后天上午來聽他們免費的宣講會。當時我就覺得價格不菲,因為用“** ”牌子是要增加成本的。我還是去聽了他們的宣講會,說心理話,**** 好,不如**** 廣告做的好,**** 廣告做得好不如**** 宣講會做得好。會到結束才說了具體的學費,要比我預想的貴很多,一共分二個學年,三個階段學習,第一學年課分兩個階段學習,第二學年一個階段。全部下來價格嚇人?。▋r格我就不說了,不少人知道)當時我是這么想的,與其說畢業以后就失業,還不如學一門技能,以后也好找工作,于是我就報名了。在那個時候,我對編程是一無所知,更談不上興趣,只是為了以后能比較順利的就業罷了。

由于沒有基礎(只會打字),我決定從頭學起,參加一學期的班,給我們培訓的是一位我看不出年齡的女老師,后來知道是從** 畢業的。我們一學期的課主要有《windows 2000 操作系統》,《c 語言基礎》,vb 基礎》, 《access 》,《html 和網頁設計基礎》。我當時什么也不懂就跟著學, 先是win2000,比較簡單(教材簡單),后來是C 語言,只講了一個多月就結束了,我上的是周末班,那時我還以為講得慢呢,哪知道C 語言的地位和重要性,豈是幾天就可以學會?接著是VB,說真的,真正讓我對編程產生興趣的是VB,我一接觸VB 就對VB6 這種所見既所得的編程環境產生了濃厚的興趣,當時覺得這才是真正的編程,C 語言沒用。我想大多數人也是從VB 開始學編程的吧。因為我們的教材寫得太空洞,所以我就又買了一本VB 入門書,我覺得好多知識老師都不成講過,有一次我問老師如何用VB 實現一個功能時,她竟說無法實現,而沒有說她不會實現,后來我翻書找到了答案,從此我對老師的權威產生了懷疑。那時的我整天學習使用VB,連坐車都在看VB 書,用VB 做了很多“芝麻”程序,自己做得最大的一個就是24 點,用了極其笨的算法,可算完成了,還有很多BUG。我們一學期的課程根本就沒有講數據結構和算法這些知識,我們也認為那是計算機專業開的垃圾課程,毫無意義,現在想起來真是大錯特錯了!一學期結束時,老師領著我們用VB 做了一個信用卡程序,很簡單,算是畢業設計??荚囀欠止P試和機試,超簡單,筆試事先給你材料,回家去背吧,80% 是原題,機試考的是C 語言,超簡單,你要是還是不會,就把別人的COPY 過來就行了,再不會,還有老師幫忙呢。當我手捧著《初級程序員》證書(國家勞動保障部發的,與國家信息部發的差十萬八千里)和《**** 》證書時,我覺得我就是程序員了(現在想起來,當時真是幼稚!)這也促使我參加二學期的班,于是我在**** “越陷越深了”。

第二學期的課沒有換老師,而教材卻是從2.0 版本換成了3.0 版本了, 可能是上個版本太說不過去了吧。3.0 版本也沒有太多改變。主要課程有:C++,sqlserver,VBA,java,asp.哈哈,真是大而全,有點像我們的專業了。當時卻不這樣認為。于是跟著學,先學c++,教材只有170 多頁,而理論部分只有110頁,后面是上機部分, 和一本練習冊的厚度差不多,由于我們C 語言基礎打得不好,所以學C++ 普遍感到吃力,就這樣不到一個月的時間,C++ 語言就結束了。接著就是sql server, VBA, 我記得在講VBA 的時候,我們就有很多人聽不懂了,特別是COM 組件,我現在也是知其然,而不知其所以然。而老師看我們不懂,也沒有耐心了,慢慢地我發現老師的講課態度發生了變化,只是講她的課,而不注重和我們的溝通,我們上機時,她也是不聞不問,而是躲在一旁啃JAVA。后來才知道她辭職不干轉行了。接著開始學JAVA,給我們帶課的是一位男老師,課講得還行,就是張揚的很,讓人覺得不舒服。我覺得當時上這門課的時候,來了很多別的班的同學一起聽,把本來就不寬敞的教授都坐滿了, 不知道是覺得JAVA 重要還是因為已經學得吃力了, 我想是后者吧。

考試仍然很容易過,可是當二學期結束時,我發現我沒有學到什么實際的東西,我甚至不會用一門語言寫一個大一點的程序,學的語言實在是太多了而自己的編程思想還沒有建立。在是否繼續學習二學年這個問題上,我猶豫了很久,是堅持還是放棄?我想對每個深陷其中的人來說,都是很難抉擇的,最后我還是選擇了堅持,很多人選擇了放棄,我記得剛開始和我一起學第一學期的人現在沒剩下幾個了,大部分人都選擇做了其他行業,和編程徹底絕緣了。我真的不想就這么放棄,畢竟我付出了很多精力和金錢,而且我非常熱愛這個行業,真的想用畢生的精力從事這個行業的工作,程序設計對我來說一直很神秘,像一座待開發的寶礦,我一直想征服它!

當我懷揣著第二學年的學費前往**** 的路上,我的心情異常復雜,這可是我父母的血汗錢呀,我現在沒有掙錢回報我的父母,而是管父母要錢,這個滋味是沒有經歷過的人很難體會的。還有一個問題就是錢是不是白花?我能不能實現自己的理想?為了自己的理想“不擇手段”叫不叫自私?第二學年的班已經開了,我也已經畢業了,我們系的就業率和前幾屆的一樣,沒有什么改觀,而且有持續走低的趨勢,我的好多同學都沒有找到正式工作,一部分人在作推銷,辛苦不說而且工資少得可冷,也許能鍛煉人吧,很多人干兩天就不干了。還有一部分人在家觀望,還有幾個有考研的打算。目前的狀況使我的要求也在降低,我學編程不求能掙多少錢(以前有這種想法),現在只是想能夠自食其力,作自己喜歡做的工作,也就心滿意足了.可是我現在學得卻越來覺得吃力了,二學年課程有oracle,j2ee,.net,c#,asp.net 等,目前在講j2ee, 講得很快,預計05 年底就能結業,我不知道到時候能不能找到一份工作,可是依我目前的知識結構,很難有競爭力。究竟是哪兒出了問題呢?

論智力,我覺得我不比別人差,我五歲學下棋,六歲沒上封學就參加了區里的封學生組比賽并且拿到了名次,接著我就開始了拜師學藝,初中蟬聯了三屆本市中學生比賽的冠軍,一次省里的冠軍,95 年參加全國“** 杯”少年組的比賽并一舉奪魁!大封比賽參加10 多次,冠軍如探囊取物。說真的,當時差一點就走這條路,因為當時我和省里的一些大師都下過,覺得并不是不可戰勝.但是后來由于中國象棋缺乏國際競爭力等諸多原因,發展狀況遠沒有圍棋、國際象棋發展好,即使是一些象棋大師每日還要算計著過日子,這不能不說是整個象棋界的悲哀!關于中國象棋的發展和象棋理論的專業探討,我有一肚子話要說,但是在這里不過多闡述,因為這里畢竟不是談論象棋的地方,還有人不會下棋呢。不過后面我要對象棋和編程做 一番比較,談我一點的膚淺看法,如果你有興趣,請耐心往下看。當我決定把精力放在學業上時,已經是高三了,面臨高考,由于之前下棋付出太多時間和精力,落下了很多對基礎課程的學習,所以我必須迎頭趕上,憑著一股兒沖勁,我來到了**,雖然不是名校,卻是正規本科院校,一直到現在。所以說論智力,我不比別人差,可為什么我學得會越來越吃力呢?

我開始反復思考這個問題,去這個網站的論壇上看一些高手總結的一些經驗教訓的質子,去csdn 看高手是怎么從初學者變成人人尊敬的高手的。我看了大量這樣的質子,然后結合自己實際情況進行總結,才發現了問題所在!基礎太薄弱??!正是這個原因使我現在學習非常吃力??纯次疫@一年學的都是一些流行的開發工具,比如vc,vb,dreamweaver,jbuilder,oracle 等等, 而我卻真正的忽視了對數據結構和算法、windows 程序設計、匯編、編譯原理、操作系統等等這些基礎課程的學習,一上來就學c++,java,vba, 面向過程編程基礎不牢固,直接學面向對象,試想一個在大學上只學了兩本書的人直接學這些流行的開發工具,結果會怎么樣?而且是每門課 學的時間都不長,這個月dreamweaver, 下個月就jbuilder, 再下個月就oracle 了,試想要精通asp,java,數據庫原理需要多長時間?我們是剛剛學點皮毛就學這些東西,豈不是在沙地上蓋高樓,早晚有一天會挎掉的,而且蓋得越高,損失也越慘重!而我當初并沒有意識到對基礎理論學習的重要性,現在真是后悔。

對此**** 應該負有主要責任,他們的宣傳廣告上面招生的對象是只具有高中以上學歷,而其他的一些培訓機構比如東軟,清華都要求計算機本科專業或相關專業,說明這些機構已經懂得基礎的重要性。而且**** 在授課時老師也并沒有引導學生重視基礎理論的學習,盲目追趕最先進的東西。應該承認**** 的課程體系囊括了世界最流行的開發工具,可以說是面面俱到,但是在學習這些東西之前,必須有很扎實的基礎,如果沒有,即使學會了,也是知其然而不知其所有然,在此引用不知哪位網友的一句話:“與其說把流行的東西握在手中,還不如把過時的技術記在心里,“ 可見基礎的重要性。有很多零基礎的人慕名來到****,希望擺脫自己的命運,可是學了一學期以后就再也學不下去了,原因何在,基礎不行,不過也有一些對計算機極有天賦者,這應另當別論。

有時候我就想如果當初我在學習**** 的時候,如果能在家里惡補理論知識會不會更好呢?可是當初我很難意識到這一點,而且那時學校的課很重,一本《西方經濟學》就有點壓得我喘不過氣來,除了上課,我已經沒有時間在學別的東西了。況且當時我們培訓的同學普遍流行著一種說法,說“我們畢業了將比計算機專業的更有競爭力!”當初我也報有這種想法,現在看起來真是笑話,先看看學習時間,他們學四年,我們不到兩年(快的一年半),再看看計算機專業的課程體系,你就知道了,其中大部分是對基礎理論的學習,學習時間寬松,如果能抓緊時間學習,將能打下一個良好的基礎,為以后學習流行開發工具鋪平了道路。誠然,現在一些高校的計算機專業的教材有些比較沉舊,可是一些原理上的東西并不是一兩年就發展起來的,是大師們經過多年的研究總結出來的,深度掌握,必然對以后學習大有裨益!還有一種說法是“我們畢業了能直接上手為企業打來效益,而那些計算機專業畢業的學生根本不會做什么,所以我們更有競爭力!”初聽起來,似乎很有道理,可是如果那些計算機畢業的學生參加企業培訓呢?新出來一種工具,同時學習,誰理解得更透徹,誰學習得更快呢?

其實學習象棋和學習編程是一個道理。

先說象棋,會下棋的人都知道,下棋分開、中、殘局三個階段,要想學棋并想成為一名高手的話,必須先出殘局開始學起,然后是中局,最后是開局。從開局學起的人很難有大的發展。這是我的切身體會,我記得我封時候學棋的時候,幾乎沒看過書,都是實戰實戰再實戰,從實戰中汲取營養,總結經驗教訓,等我到達一定階段時,我爸爸就每天給我擺棋式,先練殺法,每天幾個,當時有一本很經典的書《象棋殺著大全》,有400 多頁吧,我爸就天天給我擺,讓我破解,不看到結果不許動手,最后都把這本書都翻爛了(當然不是我弄的),現在真的應該感謝老爸,我雖然現在在象棋方面沒有什么成就(我爸一直希望我成為一名象棋大師),但也算是一盤好棋吧。然后開始擺殘局,接著是中局。對象棋有研究的人會發現,中殘局功夫是最難練的,也是最能看出一個人象棋水平的高低。正是我爸一盤一盤的擺,才練就了我扎實的中殘局功底,可以說我的基本功都是我爸一盤一盤擺出來的(再次感謝老爸!),等我到了一定水平后,才自己開始打譜學習開局,看別人的對局選,我發現我對開局的理解比那些上來就學習開局的人更透徹,記得也更牢,而且還能指出其中的錯誤并且提出自己的觀點,有時我看完一本開局書,書上會記很多我自己的體會,試想如果沒有良好的基本功的話,是不可能做到這些的。

再說編程,如果把學編程也分成三個階段的話,那么殘局就是基礎,包括操作系統、匯編基礎、離散數學、編譯原理、計算機圖形學等等,而中局就是c 語言(不是特定的)、數據結構和算法等等、而開局就是目前的各種的流行開發工具吧,包括vc,vb,delphi,jbuilder,dreamweaver 等等,以上三個階段分的不一定正確,不過大概是這個意思吧。如果” 中殘局“ 沒有打好,只學” 開局“ 是永遠也成為不了高手的,而且” 開局“ 總是隨著時代發展而改變,不斷有新的開發工具出現,落后的” 開局“ 將永遠被淘汰,而相對來說” 中殘局“ 是不會有太大變化的。而” 中殘局“ 和” 中殘局功夫“ 兩者又不太一樣”,我個人認為“ 中殘局功夫” 指的是編程思想,一個好的編程思想不是一朝一夕可以練成了。如果掌握了打下了扎實的“ 中殘局” 基礎,練就了一身過硬的“ 中殘局功夫”,那么在學開局就相當容易了,網上經常有這樣的評論,比如:“ 如果學c 一年,那么學vb 之需一個月,如果學vb 一年,再學c 時間可能超過一個月”,“ 學C++ 三年,再學JAVA 只需一個月” 等等是同一個道理。

痛定思痛以后,我覺得我要想在編程方面往更高更深的地方發展,必須打好基礎,苦練內功,為此我打算從C 語言開始學起,然后是數據結構和算法* 匯編* 操作系統原理*windows 程序設計*C++ 程序設計, 之后要看很多國外經典書,《C++ primer 》,《C++ 編程思想》等等,然后再選一個合適的開發工具,雖然會很慢,但我會踏踏實實的學習,再也不盲目跟風了。現在我C 語言只學了兩天,課我還得繼續上,畢竟錢已經交了,我想等我基礎打牢了,以前有些課還得重聽,有基礎了可能會悟出一些新的東西。**** 這點好,課可以循環聽。

回想我一年的學習,現在看來才剛剛起步,不免有些慚愧。正是走了這些彎路,才使我認識到基礎的重要性。雖然以后還要有很長的路要走,但是我無緣無悔,因為我熱愛這個行業。我相信我重新選擇學習的方向是正確的,我打算用十年的時間來掌握這門技術,我今年23 歲,到我33 歲時,我想我還會寫一篇文章來回憶我十年的經歷,并總結出的經驗和教訓,供后來者借鑒。

順便說一下我的女朋友,她和我是一個學校畢業的,學外語的,英語八級,現在畢業工作了,一個月3000 元。她現在對我很失望,說不再向以前一樣喜歡我,欣賞我了,這給我很大打擊!但是作為男人,我理解她,現在我的壓力很大,我想我會頂住壓力,堅持走自己的路的,希望大家能夠支持我!

最后我想對初學者說的是,不要盲目跟風,要重視基礎的學習,否則只會竹籃打水一場空。

如果您能耐心的把以上看完,我就很感謝了;如果您還能提出寶貴的意見和建議,我將感恩不盡!

經驗分享

(四)一個程序員的經歷

一.并不成功的開始

我所讀的學校是中國西部的一所普通高校。我進大學后也和大多數同學一樣,過著60 分萬歲的日子,除了對編程比較感興趣外。(呵呵,好多室友都說我外表女人,內心卻男人:喜歡寫程序,喜歡和男生打是際,喜歡打CS 選土匪,拿AK47)四年的大學生活淘進了我剛進校時的傲氣與自尊,在梔子花開的季節,我面對的卻是無法把握的未來。畢業了,是的,四年象夢一樣。男友執意去了中國最繁榮的大都市,我卻希望留守相對平靜的近在咫尺的西部城市,結局是可想而知的。痛苦十分短暫,因為迫在眉睫的生存問題變得急為嚴峻。幸運的是,2004 年7 月我很順利的找到了一份程序員的工作。我的第一份工作比較輕松,就是做MIS 系統,寫寫C# 代碼。工作很輕松,帶我的經理也很照顧我。于是我每天過著上班下班的生活,每天穿梭在熙熙攘攘的人潮當中,全然沒了生活的壓力。這樣的生活也讓人討厭,日子太無聊了,無非就是寫著重復的代碼,再就是在天涯上閑逛。這樣的日子結束于我看到的一篇文章,題目我記不太清楚了,好像是:成為IT 精英,我奮斗了7 年。

當時很受鼓舞,也很自責。大學的四年已經荒廢,難道還要重蹈覆轍?于是我有了想離開這個安逸的城市,去節奏相對較快的城市鍛煉一下自己。

于是在今年年初,我毅然背起行囊,踏上了南下的火車。。

二.初來乍到

一下火車,我來到人山人海的車站廣場,看著人山人海,心里沒有底氣,畢竟是第一次出遠門。但是只覺告訴我,先要找個落腳的地方。雖然我帶了5000 塊,但是我卻不敢亂花一分錢,因為在我印象中這座城市消費比原來的城市高多了。我得想辦法盡快找到工作。

經過2 個多小時的尋找,終于讓我找到了一個網吧。于是不顧旅途勞累,趴在電腦前就上51JOB,簡單回顧了自己的工作經歷,然后填寫了簡歷,在網上投。時間過得很快,一下子到了中午。我出了網吧,胡亂吃了碗酸辣粉。然后去找旅館,這里的旅館真的很多,各種檔次都有,我找了一個看上去覺得比較安全的旅館。130 一晚上,好心疼?。”M管很累但是,大半個晚上我都沒有睡著,雙手緊緊的抓住手提袋。到了下半夜,我才慢慢的睡著。

早上起來的時候已經是9 點多了,我洗漱完畢。雙眼盯著手機屏幕,生怕會錯過面試電話。也許我運氣真的不錯,大約10 點,手機響了。我趕緊接了,一時高興得語無倫次。電話里一個女聲:您好,請問您是XX 么?我們是yy 科技有限公司,想約您下午面試......掛了電話,我高興得不知東南西北了,沒想到這么快就有回應了。下午出門的時候我化了點淡妝,出門了。我按著yy 公司的提示,費了將近2 個小時才找到地方,真后悔沒有買張地圖。到yy 公司的時候已經是下午4 點了。面試我的是位女經理。30 分鐘過后,我們談得比較好。我自信滿滿的,呵呵。

最后經理問我期望的薪水時,我咬咬了牙,很小聲的說了句3500.經理說,其實你比較符合我們的要求,但是薪水可能不會那么高。我小聲問她能給我多少,她說句2000。但是我心都冷了,我來這個城市之前的工資也有1500 啊。我說了句考慮考慮后,出了yy 公司的大門。在傳說中,這個城市不是每個人都拿高工資的么?怎么會這樣?失望和痛苦同時襲來。

回到旅館我仔細總結了一整天,得出結論:1.不是沒有高工資,而是所掌握的技能門檻比較低,導致沒有什么競爭力。2.一個規律:IT 技能(不精通的情況下),技術門檻低的入門較容易的,在市場上競爭力不大(精通后,每項IT 技能的競爭力相差不大。)。3.所以我決定,去學習新的東西,門檻稍稍高那么一點的東西。

注意拿定,我回顧了自己所學的東西,覺得C/C++ 基礎還可以,而且上學的時候寫過一段時間的VC,于是決定啃C/C++。我開始在網上投C/C++ 相關的職位,把薪水要求降到2500 ~3000。上天又一次眷顧了我,四天后我找到了一份工作,工資2500,包住宿。唉,總算是定下來了,接著我便寫了個學習C++ 的詳細計劃,花了1500 元買了個二手電腦。工作后,我覺得極其的不適應,這個時候才知道,我對C++ 的理解是何其膚淺!基礎太差了。。自尊心一向很強的我,受了很大的刺激。我覺得,是時候努力了!

在工作的時候我積極的請教同事,下班后我在宿舍里瘋狂的肯C++, 在網上下載了教材。一行一行認真的讀,上機練習,從基礎開始。一步一步的來。在剛開始的一個月里,幾乎每天都是凌晨才休息。但是我覺得很欣慰,因為我逐漸適應工作了,而且覺得越來越理解C++ 的內涵。連續這樣3 個月后,我終于對工作得心應手了,VC 的底子也逐漸厚實?;叵朐瓉淼囊估勺源螅娴暮芎眯Α,F在我對C++ 無疑是敬畏的。原來以為自己有多厲害,其實自己差得要命。不懂虛函數有什么用,不知道除了構造函數,析構函數外還有拷貝函數,還有深淺拷貝之分。不懂什么是多態,不懂什么是抽象類,不知道C++ 里居然還有個STL 庫。隨便拿本VC 的書就寫程序,甚至不知道APP WIZARD 生成程序的入口。

經過了三個月的苦心孤詣終于有點眉目了。我沒有直接用VC,而是從SDK 入手,用SDK 寫了將近一個月的程序。終于知道了windows 里面居然還有消息機制,每個應用程序還有消息隊列。編譯器分配存儲空間的時候居然還有內存對齊。這些新奇的東西讓我興奮,我每天如饑似渴的讀著各類電子書。

《深入淺出MFC 》, 《高質量C/C++ 編程》,都是我的寶貝。是的,正象很多人說的一樣,沒有幾年是無法精通VC 的。但是,我們無需精通每個方面,我們只需足夠熟悉我們工作所用到的部分。DLL, 數據庫,組件技術,圖形技術,進程調度,多線程等等,網絡...太多太多了,MFC 是如此的龐大。也許是我心高氣傲,當經理跟我說轉正給我3000 的時候,我拒絕了,我覺得自己可以拿更高的薪水。于是我辭職了。

這次的離職,沒有給我帶來什么憂慮,可能通過前斷時間的學習有了些許的底氣??赡艽蠹液芷婀?,為什么上文多次提到工資,請原諒我的俗氣!當愛情不能依靠時,金錢是能唯一給我安全感的東西。

這一次我打算找名氣稍微強一點的企業。正好,TX 公司正開招聘會。我一大早趕到招聘會現場,很熱鬧,已經有很多人在那里面試了。等了大約半個小時,終于輪到我了。面試官沒有象我想象的那樣提一些基礎知識,而是直接問我對UML 怎么理解,對UI 設計有什么心得這些抽象的問題。我回答得吞吞吐吐,語無倫次,結果是可想而知的。55555555,真的好慘,這個全國著名的SP 把我就這樣簡單的拒絕了,好打擊人啊。但是這次來并非沒有收獲,因為在我走出招聘會場的時候,我留意到unix/linux 展臺門可羅雀,于是一個計劃又在我內心醞釀。我回家后在網上搜集linux 入門資料,然后把電腦硬盤格式化,為了表示學習linux 的決心,我給windows15G,給了linux 25G,就這樣開始了我的學習linux 之旅!

第二天,我從朋友那里打聽到GDNT 有個招聘會,于是又風風火火的趕去。GDNT 的面試也給了我重重一棒子,讓我好痛苦。在痛苦中過了3 天后,一個高中同學說她們單位要招VC 方面的人。我當時真的很高興,也很緊張,因為這次面對的公司是中國著名電信運營商的研發中心。由于朋友的引見,面試很快確定在2 天后。在這兩天里,我把所有關于C/C++ 的知識點復習了一遍,然后閱讀了一些網絡方面的資料。果然功夫不負有心人,2 個小時的比試面試過去了,我成了她們的一員。最后PM 許諾試用期給我4K。

這里的工作環境很好,工作也比較輕松,也許所有國企都是這樣的把。下午2:00 上班,中午可以休息兩個小時。單位食堂的伙食豐富而且價格便宜,一般不超過5 元,最令人覺得溫馨的是飯后偶爾還會發水果。:)真的是好幸福,呵呵。在這里主要做的是一些交換網管系統,在這期間我跟PM 學了不少東西。熟悉了HW,ZTE 的很多產品,以及COBAR 接口規范。私下還對7 號信令做了比較詳細的閱讀,而且對很多網絡協議有所了解了,比如SNMP,RIPv2、OSPF、IGRP,還學會了怎樣使用CLEARCASE 等工具。但是,最大的收獲莫過于對UNIX 的學習了。在這里有很多UNIX 機器,HP*UNIX ,IBM*AIX,SUNOS 等等。。

每天下班后我沒有直接回家,而是留在了單位telnet 到SUNOS 上,開始了我學習unix 的計劃。幾乎天天都是10:00 以后才離開單位, 搞不懂的就問人或者在網上找資料。回家以后,我繼續在linux 上學習一直到轉鐘。這期間我真的學了很多,跟windows 上寫程序完全不同了,似乎更關心細節,更關心操作系統了。經過大約3 個月的摸索,終于對unix 有所了解了,覺得好多東西豁然開朗。進程通訊,進程管理,頁面置換,信號燈,線程池這些東西是我在windows 下寫程序從未接觸過的。

覺得學習unix 真的很幸福,每天進步一點,會讓我睡得踏實。把《unix 高級環境編程》學完后,我開始慢慢的請教前輩,有關嵌入式的開發的問題。

慢慢學著分析內核情景,裁減內核,底層的東西讓我覺得好奇。還有一件讓人特興奮的事兒,咱們科室好多開發人員都是女同志,PM 也是女人。

時間飛快,轉眼四個月已經過去了。我覺得是時候該離開這個安逸的國企了,說真的,真有些舍不得,我向PM 提出辭職時,經理非常真誠的挽留我,說我工作做得不錯,叫我考慮考慮再走。這里的人真的很好,學習的氣氛也很濃,也許我希望日子過得緊張一些。經理說我這樣跳來跳去不利于自身的發展。也許她是對的,也許是我太倔犟,終于還是走了。我知道,當我交出那張卡,就再也不能回來了,走出大門站在華景的天橋上我默默的站了10 分鐘,仰望著那熟悉的大廈。

晚上回去改了改簡歷,然后在網上投。躺在床上,看著天花板,突然之間覺得好孤單,這里一個親人也沒有,鼻子很酸,好想哭??蛷d電視機里傳來世界杯預選賽的吶喊(我和一個男生一個女生合租三室一廳)。我走出客廳和那個男生談了很多,也知道了他很多事情?,F在才知道,雖然是合租,但是彼此溝通真的很少。他原來是在XTKJ 工作,后來跳到外企,也是搞IT 的,也是程序員。一個人到南方。

當時聊了很多,不覺到了凌晨。不過我們都沒有睡意,于是他問我會是際否,我一拍即合。他很驚訝的看著我:你真的會。我說試試就知道。于是我們各自回房打開電腦,比賽開始了,呵呵。也許是他太輕敵,第一場,我選蟲族,他選人族,結果被我出快狗偷襲成功,不過后來幾場我都輸得很慘,呵呵。

第二天睡到中午才起來,1 點多的時候突然來了個電話,通知我去面試,職位是linux 程序員。我趕快打扮起來:)。照鏡子才發現,自己瘦了好多,也憔悴了不少。我穿上了自己最漂亮的衣服,然后簡單了畫了一下眉,打了粉底和眼影,并且還畫龍點睛的摸了腮紅。呵呵,自己對著鏡子傻笑。

到了面試的公司(一個剛成立不久的外企,VOIP 設備商),和PM 談得很順利。他問的問題也很簡單:函數傳值傳址的區別,常用的進程通訊方式,和我做過的一些項目等等。最后PM 問我期望的薪水是多少。我怯怯的說了句:5K。經理摸了摸前額想了想對我說:這樣把,你好好干,試用期我給你5.5K。出了公司門,感覺天空一片蔚藍。

經驗分享

(五)一個還不太老的程序員的體會

(一)文章由來及個人經歷

我是一名計算機專業的本科畢業生,畢業已經1 年多了。畢業后從事的是軟件編程工作,經常有其他專業的朋友想從事軟件編程工作,向我請教如何,因為我自覺涉行不深,不敢信口開河,無奈朋友信任,我不得不鄭重考慮一下這個問題了,來幫助朋友選擇和回報朋友的信任。這也就是此文的由來。

還是先談談我個人的經歷吧。(是不是有點俗套,但我覺得了解我的經歷,有助于理解我話的含義;我一向認為不了解古龍的生活經歷的,不會真正讀懂古龍的作品和古龍筆下的英雄的)我本科就讀于南方一所著名的高校(因為自己的不成氣,愧談母校名謂),學的就是計算機專業。上本科時,幾乎沒有認真的聽完一門專業課程,上課看報紙睡大覺,下課看錄像看小說看球賽,臨考抱佛腳,每次考試和課程設計都是蒙混過關。(于之相對是,我選修的工商管理和經濟貿易方面的課到是聽得不亦樂乎,考的分數頗高,也許這才是我的真正興趣所在。)

總而言之,大學是混過來了,對專業的理解和掌握程度,應該沒有達到畢業要求的合格水平。(也很后悔,但是有什么用呢,當時不知道珍惜;如果上天再給我一次機會的話,我一定會抓住,多看點美國大片少看點港片;現在,重回校園是我的一大理想)但是大學的學習使我有了一個簡單的知識框架(總算學費沒白交),我對一個朋友這樣形容過我的這個知識框架,“它不是鋼筋鑄的,是稻草扎的”,哈哈哈,不要笑,真的,我敢說很多本科畢業的朋友的本專業的知識框架也只不過是“稻草扎的”。直到現在,我一直覺得自己的基礎知識還是很薄弱,一直想抓點時間,把基礎書本好好的溫習一下。(此項任務正在計劃和實施中)

畢業后,分配到某研究所工作。當領導讓我選擇自己以后的工作方向時,我毫不猶豫的選擇了軟件(也不知道到底是對還是錯,但我決不后悔)。此研究所主要是以硬件為核心搞通信控制設備的研發生產;軟件是輔助,所以也不受什么重視,很多搞軟件的人都跳槽走了,留下來的大都是一些已經廢掉和行將廢掉的“偽/ 萎”程序員(名副其實的“軟件人員”)。在這里感覺不到什么高緊張和高技術程度的研究和開發;軟件開發的技術含量極低,以致于大部分人只有半年的學習和開發經驗,以后都是這些知識和經驗的重復利用。(我問過其他到研究所工作的同學,他們說都一樣,嗚呼,我們的國防科研開發呀)對于軟件的開發,領導的意志和老掉牙的經驗在新課題的技術采用和開發中起了決定性作用,沒有明確的需求,沒有明確的開發計劃和進度,大家在一天一天一周一周的浪費著寶貴的時間,最后開發出來的東西修來改去,直至它變成垃圾。我越來越認識到一點,要么象那些廢人一樣廢掉,要么自己去努力尋求出路,反正別指望從工作中得到什么高明的經驗了(教訓倒也許有)。期間發生了一些感情上的糾紛,嚴重的影響了學習計劃和效果,直到現在浮躁的心仍然有些浮躁。

期間,我讀了一些書,看了一些文章,編過一些小例程,搞了一些沒有什么技術含量的開發工作,也和一些前輩和高手們談過聊過。我一直在思考幾個問題;如何學習軟件開發?如何搞軟件開發,國外的軟件開發到底其秘訣在何處?為何我們的軟件業一直在低水平徘徊?我們難道真的離了Microsoft 就活不了?我們的程序員到底在浪費時間干些什么?軟件開發到底是如何分類的?我們如何走自己的民族軟件之路?

我想了很久,一些想通了,一些還在想。但我知道有一點是肯定的,那就是我們一定要靠我們自己走出自己的軟件之路!跟在別人屁股后面永遠受制于人!

好了,關于經歷和牢騷就先寫這些吧,該進入我們的正題了。

(二)你適合當程序員嗎,你知道編程序是怎么回事嗎? 1、程序員意味著要編程序。(如果你僅僅想得到一份高薪水的工作,喝喝咖啡就等老板發薪水,我奉勸你還是另找一份更合適的工作,譬如練攤,真的,兄弟,這份工作不適合你)、你是學文的還是學理的,編程序也許需要浪漫,但更需要邏輯和嚴謹。(說坦白點就是,在你沒有找到樂趣以前,它很枯燥)、你有對新技術追求的熱情嗎?你有刨根問底的探索精神嗎?(熱情絕對是最重要的!你仔細思考一下自己的性格適合當程序員嗎?)、當程序員決不是什么好差事,時刻需要學習,需要思考。(直到你成為那個可以引導別人去學習和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)、程序員的未來很迷茫。(但我認為關鍵看你自己!我希望你是一個有追求的人,不僅僅是混碗飯吃。因為真正的樂趣在于創造;如果你能改變軟件業的歷史,那才是英雄;不想成為Bill Gates,不想成為Dennis Ritchie 和 Bjarne Stroustrup,我會說你沒有追求。有個關于程序員未來的笑話,也許你還沒聽過,你該聽一聽,摘抄如下:

一個程序員對自己的未來很迷茫,于是去問上帝。“萬能的上帝呀,請你告訴我,我的未來會怎樣?”

上帝說“我的孩子,你去問Lippman,他現在領導的程序員的隊伍可能是地球上最大的”

于是他去問Lippman。

Lippman 說“程序員的未來就是駕馭程序員”

這個程序員對這個未來不滿意,于是他又去問上帝?!叭f能的上帝呀,請你告訴我,我的未來會怎樣?”

上帝說“我的孩子,你去問Gates,他現在所擁有的財產可能是地球上最多的” 于是他去問Gates。

Gates 說“程序員的未來就是榨取程序員”

這個程序員對這個未來不滿意,于是他又去問上帝?!叭f能的上帝呀,請你告訴我,我的未來會怎樣?”

上帝說“我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的” 于是他去問侯捷。

侯捷說“程序員的未來就是誘惑程序員”

這個程序員對這個未來不滿意,于是他又去問上帝?!叭f能的上帝呀,請你告訴我,我的未來會怎樣?” 上帝搖搖頭“唉,我的孩子,你還是別當程序員了”)

6、當程序員還是很有樂趣的。(當你學到新知識時,當你有新的思想見解時,當你有新的產品問世時,和知己探討你的成果時…我問你,覺得這些是樂趣嗎?)、當程序員不易也不難。(世間事有難易乎?為之…;不為…。你有決心和信心嗎?)、你真的要當程序員?是你自己的想法?、你舍得花錢買書嗎?(讀好書絕對是學習編程的最佳捷徑。你一定會說,現在電腦書籍真T.M.D 貴,沒法子,誰讓知識和技術在人家的腦袋,在人家的書里呢;等你寫書時可以把價格定低一點,記著還有好多沒錢但想買書的兄弟很困難呀。要舍得買書,買好書,不好的的書不如不讀,其害大于其益,關于買什么書,你可以問高手或看候捷的書評;準備一個小本子記錄你想買的書的名字,逛書店時看看,如果好就買下,記住要讀,別光買不看。)、我告訴你,程序就是:任何有目的的、預想好的動作序列,它是一種軟件。、編程序就是編寫程序。、你想好了嗎?(如果你想好了還是決定要當程序員,可以繼續往下讀;否則,你可以繼續尋找別的出路了。)

(三)一個程序員應該具備的基礎知識和概念、計算機是有什么組成的,CPU 是什么東西,其工作原理是什么。(對于這些以及下面將要提到的概念我不會告訴你什么答案,你可以看相應的教材,關于教材我會在下一部分詳述,記住理解最重要?。C器語言和微指令集的概念。、程序的概念。、匯編語言是低級語言但不是機器語言。、高級語言主要有那些?(C,C ++,Basic,Pascal,Fortran,C#,Java 等等;如果你是中國軟件業的英雄,你也寫一門語言,最好不用英語)6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)、HTML、XML 等是標識性語言。

8、Prolog 是人工智能語言。、操作系統OS 的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)、Windows 編程說白了就是Windows API 的調用。(中國的程序員很多只是會編windows 程序,用的是VB,我的建議是這些程序員頂多只是低級編碼員,我稱其是coder)、VC ++、VB、BC、BCB、Delphi、VF 等都只是編程的工具和環境,不是編程語言。、面向結構的設計概念。、面向對象的概念。(好好理解,兄弟,這個東西還是很重要的)、軟件工程的概念和原理。(如果你想當老總就需要好好研究了,系統分析員比編碼員要高一個等級,薪水也高喲)、數據庫的概念。(要熟悉一些著名的數據庫系統和語言的名字,如Orcle,SQL,DB2,DyBase等)、了解網絡概念。、了解多媒體概念。、熟悉和掌握數據結構和基本算法。、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學習,一個月以后你就會有一個基本的概念;兩個月以后你就會感覺自己有了全面的基礎知識;當你知道編程序是怎么回事時,說明你已經入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其后塵吧。要有信心和耐心。沉不住氣怎么能成大事??。?/p>

(四)教材推薦

推薦的教材主要還是針對概念來的,最好選用名校的教學用書。、《計算機組成原理》(熟悉)2、《數據結構》(掌握)3、《操作系統》(了解*> 熟悉)4、《The C language 》(掌握)5、《編譯原理》(了解原理)6、《匯編語言》(了解)7、《計算機網絡》(了解)8、《軟件工程》(了解)9、《關系數據庫》(熟悉)、《The C ++Languege 》(掌握)、《面向對象設計》(掌握;結合C++ 學習)

(五)一些經驗和體會

(五)一些經驗和體會、真正的程序員用C++ ;(一位專家說的)2、動手去編程序; 3、動腦去思考;、要有良好的編程風格;、讀書,讀好書,盡量讀原版書?。ㄎ曳磸蛷娬{這一點,讀書要有選擇,堅持讀好書,名家出的經典書,不要浪費實踐在一些粗制濫造的書上面;堅持博覽群書)6、有自己的學習計劃;、總結自己的經驗教訓;(準備一個筆記本,記錄錯誤和心得)8、不要怕學新東西; 9、要有軟件工程的思想;、善于發現問題,然后去尋找答案; 11、向高手請教;(要虛心直到你成為高手)12、和同行交流;(不善于交流肯定不行)、懂得軟件的實質,不要被千變萬化的表象所迷惑;、真正要學習用的是編程語言和方法,不是什么庫,什么類,什么工具;(學用那些什么庫都比較簡單,但 光會這些庫,我覺得還遠遠不夠)、學習wiodows 編程主要是學習windows OS 和win32 API ; 16、有空了解一下嵌入式開發; 17、有空了解一下PDA 軟件開發;、了解一下.NET 框架和C# 語言,也許它是你新的衣食父母;、要有耐心,不要作浮躁的人; 20、對程序加注釋,并保留你的老程序; 21、學到的東西越多,了解的越多,你就越接近專家; 22、有空去逛逛CSDN,那里有你很多知己; 23、要有信心成為一個優秀的程序;

(六)一些好書的推薦、《The C Programming language 》(Keinighan & Dennis Ritchie 1988)2、《The C++ Programming Languague 》(Bjarne Stroustrup 1997)3、《Inside The C++ Object Model 》(lippmans)4、《Effective C++ 》(同上)5、《More Effective C++ 》(同上)6、《Exceptional c++ 》 7、《C++ 面向對象高效編程》 8、《設計模式》 9、《Thinking In C++ 》、《The Standard C++ Bible 》(一般推薦)11、《The Art of Computer Programming 》、《Programming Windows 》(Charles Petzold)13、《VC++5.0 技術內幕》 14、《MFC 深入淺出》 15、《軟件需求》、《Advanced Windows 》 17、《C++ primer 》、《win32 程序員參考手冊》 19、《用TCP/IP 進行網際互連》 20、《COM 本質論》

(七)學習計劃

這個學習計劃是我個人定的,也共享給大家參考一下,共同進步吧。、《計算機組成原理》 2、《操作系統》 3、《數據結構》 4、《匯編語言》 5、《 C 》 6、《 C++ 》 7、《VC 技術內幕》、《Programming Windows 》 9、《深入淺出MFC 》 10、《Advanced Windows 》、《Inside The C++ Object Model 》 12、《Thinking in C++ 》 13、《Effective C++ 》 14、數據庫 15、網絡、嵌入式OS 和編程 17、硬件單片機 18、.NET 和C# 19、軟件工程 20、UNIX 和Linux

(八)后記

一年來浪費了大量的時間去摸索,去思考,走了很多的彎路,直到現在我還覺得自己是個編程的門外漢。我把我的一些體會和想法說出來(當然,很多都不一定正確,歡迎大家指正和討論),也許對一些想加入程序員行列的朋友有一些建議和幫助。希望能幫助這些朋友順利走上編程之路,成為高手。

如果真能如此,我也就很高興了。歡迎有興趣的朋友給我發E_mailsjpsky@163.net);我這個人有兩大業余愛好,其一就是讀武俠小說,其二就是結交英雄俠士。

后記:此文我用analyster 的名字登錄,發表在“csdn -程序人生”上了,有很多網友看了,回了,還收到幾個網友發來郵件,和我探討,我很感謝大家對我的信任和鼓勵。

我要說明的就是我的這篇小文,主要是想給“一些想成為程序員”的朋友一些建議,幫他們尋找一條自我培訓的捷徑,(其實世界上沒有什么捷徑的,我覺得一切都在于悟性,師傅領進門,修行在個人,譬如我就修行不夠)少象我一樣作大量的無用功。還有,主要就是一個程序員應該具備的基本功(個人看法), 有人稱其為“內功”,我覺得很對。沒有扎實的基本功,我們如何能夠做到游刃有余的編寫高質量高性能的優秀程序呢?

經驗分享

(六)一個程序員給初學編程人的建議!絕對的好!

想學習程序設計而又很迷惘的朋友,希望可以帶來一點幫助。

我第一次接觸電腦是在小學二年級的時候。那時純粹是因為喜歡打電子游戲,聽別人說電腦上的游戲十分好玩,于是就漫漫開始與之接觸了。在三年級時父母出于我對計算機濃厚的興趣送我去了一個BASIC 編程學習班,從那時起我才真正開始走上編程這條不歸之路。雖然說現在程序設計這門專業在社會上很熱,競爭十分激烈,但是這只是學習編程的人比較多而已。真正能夠掌握以至于精通的人實際上很少,畢竟中國的軟件業才剛剛起步不久。現在社會對優秀的程序設計人員的需求量還是相當大的,但是前提是必須要優秀。我自己雖然也談不上優秀,但多少還是有些感觸。在這里想講述自己對于一般程序員和優秀程序員之間在技術上的一些認識(什么敬業精神生活態度我就不多說了):

首先作為一個優秀的程序員,數學是十分重要的。數學是自然科學的基礎,計算機科學實際上是數學的一個分支。數學主要能讓人懂得一種分析問題的方法,然后再通過編程去實現它。計算機內部的許多原理也都牽涉到比較復雜的數學知識。它是我們用來解決現實問題的最高效的工具。很多學習編程的朋友對數學覺得不屑一顧,覺得對于編程沒有什么關系。實際上優秀程序員和一般程序員拉開檔次很大一個程度上就是取決于對數學的能力。一些項目有時需要很復雜的數學建模和利用數學對于系統效率進行分析,而這些項目對于一般的程序員是很困難的。正確應用數學知識有時候能使你的程序的效率產生質的飛躍。現在的程序員在數學上普遍是薄弱環節,這點是大家應該引起足夠重視的。當別人對于這些項目感到無從下手,而你卻能夠完成,這個時候你的價值也就表現出來了。真正優秀的程序員是能夠最基本的一點就是要能夠通過自己的知識來解決一般程序員所無法完成的問題。而數學能力就是一個很重要的環節。

其次就是要對數據結構引起足夠的重視。如果說計算機專業的學生與非計算機專業的最根本的差別絕對是數據結構(數學大家都一樣學了,主要看你自己學得好壞)。對數據結構的掌握與運用能力是衡量你編程能力的一個很重要的指標。有的人對于看了鏈表,棧,樹,廣義表這些東西就頭痛。然而這些東西往往能使你的程序的效率比別人高出百倍。由于一直搞信息學競賽,到了大學又搞ACM,所以我對數學和數據結構都掌握得相對較好。這使我在應聘與工作中明顯感到勝人一酬。記得自己大學時去一家公司應聘的經歷,當時去應憑的還有3 個人,有2 個大學畢業,有個也工作了一段時間了。他們幾個都在大講自己的能力如何之強,會使用的語言及編程工具如何之多,經驗如何之豐富。按理說我應該是資質最淺的。當時也是初生牛X 不怕虎,也就硬著頭皮去了。當時面試的題目是一個公司的資金管理項目的一個問題,要求每個人都在思考后給出自己的設計方案。其中比較核心的一個問題就是要計算一個資金最小波動值的問題,給出的數據量相當大,對效率要求很高。對于整個程序的面向對象化的分析我們幾個都是差不多的,畢竟這些東西在學校里是很重視的,而且不是真正的難點。然而到了最關鍵的問題時其余的人都卡殼了,有兩個是用簡單的雙重循環,時間復雜度(N^2),慘不忍睹。還有一個在冥思苦想了好一陣以后說用樹,具體技術細節又講不清楚,效率分析也很馬虎。只有我當時很快就給出了采取AVL 樹的方案,并且利用高等數學推導作出了很詳細的效率分析和時空換算,并提出了引入匯編的方法。很自然的我得到了這分工作。在這里大家顯然可以看到數學和數據結構對于一個優秀程序員是多么重要,它們是和一般的程序員打開檔次的最關鍵的地方。這樣向“棗子”碰到的那種情況應該很輕松的就可以想到。

如果你是一位想學習編程的朋友,我經過多年的學習總結出來了一個學習的線路希望對你有所幫助。要學習編程是要有很大恒心和毅力的,首先你要明確自己的目標,想好自己編程是為了干什么。如果你學習僅僅只是一時想編出QUAKE 和成為比爾蓋次的沖動,那么我勸你還是應該還是不要開始學習,應為這樣的目標很難支持你日后大量的學習。而且你的年齡不能太大(最好是中學或者大學生)。如果你想好目標并決定開始奮斗,那就讓我們開始吧。如果你一開始對電腦一無所知,那么你應該先熟悉一些電腦的一些最基本的原理和操作,這個不需要特別細致的學習,只要大概知道二進制和一些基本操作就可以了。接下來你應該先學習BASIC 語言,這個語言并不會耽誤你太多的時間,學習它完全是為了入門,讓你對電腦編程有一個比較初步的認識。這時候你應該多編一些小的程序,知道一些最基本每條語句的功能,搞清楚一些基本的數據結構(尤其是數組)對于一些其余用途的函數最好不要做任何學習,因為這樣只會分散你的注意力。當你能夠可以熟練的運用BASIC 編出猴子選大王,以及電腦出題考試之類的程序時,你就可以開始后面的學習了。接下來如果覺得自己接受能力強的話就可以開始學C 了(注意不是C++),如果感覺有困難也可以先學Pascal 過度一下。還有很重要的一點就是千萬不要一開始就學VB,DELPHI,VC之類的東西,這些東西在一開始學會對你造成很壞的影響。有可能會把你引入另外一個錯誤的學習方向而忽略了真正應該掌握的東西。學C 主要是學過程話的程序設計,學會把自己的程序分成許多的函數(或過程),養成良好的編程習慣。這時可以多看一下高人的程序,不一定要懂意思,主要是學會別人程序的格式(比如變量如何起名,怎么劃分函數)。除開掌握基本的控制流語句外,應該學習一些很簡單的I/O 函數和數學函數。C 的學習主要是你舍棄原來BASIC 程序那種把所有語句積成一大堆的風格,要學會使用函數,提高代碼重用性。對于指針之類的東西如果實在看不懂可以先不去管,到后面會有辦法。當你能夠比較自如的用C 編寫一些小的計算程序時,你就可以開始你的數據結構的學習了(數學的學習主要是在學校,自

己要多用心)。數據結構你可以一點一點漫漫看,并不需要專門空出一段時間來專門研究,這樣的目的是讓你能夠很好的掌握它,要學會用數據結構的知識來規范自己的程序設計和提高程序的效率。學完C 我認為接著最好學習匯編。這個或許有許多人都會反對,然而我個人認為這樣是很好的。從最基本的DOS 匯編開始,買本《IBM PC 匯編程序設計》(清華黃皮)一定要一點一點吃透,實在看不懂就跳,反復的嚴讀是一定可以看懂的。匯編是一定要掌握的,因為它涉及到很多最基本的知識。掌握了匯編和對I/O 有了個很徹底的認識后,應該去學編譯原理。這個東西并不要精通,但是一定要知道,在大腦里要有一個這樣的概念,這對你對程序語言的控制能力都有很大的幫助。這樣最基本的學習就算完成了。一般智力正常的人前一段東西應該都是可以掌握的。接著后面的學習就要看你自身的造化了。這個時候你應該研究一下數據結構,不要分散自己學習的注意力,要知道數據結構是異常重要的(相信我,絕對沒錯)如果你覺得自己已經對于樹,連表,堆棧之類的東西和排序,遞歸之類的算法已經十分清楚,就可以開始學習C++了。學習前一定要有個正確的認識,那就是C 和C++ 是兩個不同的東西。學習C++ 是為了學習面向對象的程序設計,這個時候你對于指針應該也能夠掌握了(有匯編的基礎),主要抓住C++ 和C 相比的一些新特性,對于多態之類的特性要注意理解掌握,如果沒有搞懂就堅決不要往下學習。一些基本的概念掌握以后可以看一些別人設計的程序,學習別人怎么利用面向對象的方

法來設計程序的。這個東西也是人之間拉開檔次的一個環節,可以和數據結構放在同等重要的地位。我就見過有的人都大學畢業了還搞不懂virtual 到底是怎么一回事情。其實我認為學到這里你已經為你成為一個優秀的程序員打下了很好的基礎,你已經能夠應用C++,懂得面向對象程序設計,對數據結構掌握很好,掌握匯編和編 譯原理。接下來的學習就是基于操作平臺的了,一般是先學windows(Microsoft 畢竟是老大),先學win32api,搞請windows 基本消息機制和原理,有匯編基礎基本上不會碰到什么困難。其實只要會了API,其余什么MFC,VCL 都是囊中之物了,都不過是對于API 的小裝而已。VC,C++Builder 都可輕松拿下,這只是開發工具的問題。以后的OLE(ActiveX),.NET,數據庫就要看自己的發展方向而定了。我在這里強調的是前面的基本能力的學習,后面操作平臺雖然知識體系龐大,然而畢竟比較死,更好掌握。最后編程能力的高低主要還是有以下幾點決定:1。編程的習慣 2。數學能力(包括邏輯思維,分析問題的能力)3。對數據結構的認識能力 4。經驗的多少(包括多使用語言的掌握能力)。

經驗分享

(七)算法的力量

算法是計算機科學領域最重要的基石之一,但卻受到了國內一些程序員的冷落。許多學生看到一些公司在招聘時要求的編程語言五花八門,就產生了一種誤解,認為學計算機就是學各種編程語言,或者認為,學習最新的語言、技術、標準就是最好的鋪路方法。其實,大家被這些公司誤導了。編程語言雖然該學,但是學習計算機算法和理論更重要,因為計算機語言和開發平臺日新月異,但萬變不離其宗的是那些算法和理論,例如數據結構、算法、編譯原理、計算機體系結構、關系型數據庫原理等等。在“開復學生網”上,有位同學生動地把這些基礎課程比擬為“內功”,把新的語言、技術、標準比擬為“外功”。整天趕時髦的人最后只懂得招式,沒有功力,是不可能成為高手的。

算法與我

當我在1980 年轉入計算機科學系時,還沒有多少人的專業方向是計算機科學。有許多其他系的人嘲笑我們說:

“知道為什么只有你們系要加一個?科學?,而沒有?物理科學系?或?化學科學系?嗎?因為人家是真的科學, 不需要畫蛇添足,而你們自己心虛,生怕不?科學?,才這樣欲蓋彌彰?!?其實,這點他們徹底弄錯了。真正學懂計算機的人(不只是“編程匠”)都對數學有相當的造詣,既能用科學家的嚴謹思維來求證,也能用工程師的務實手段來解決問題——而這種思維和手段的最佳演繹就是“算法”。

記得我讀博時寫的Othello 對弈軟件獲得了世界冠軍。當時,得第二名的人認為我是靠僥幸才打贏他,不服氣地問我的程序平均每秒能搜索多少步棋,當他發現我的軟件在搜索效率上比他快60 多倍時,才徹底服輸。為什么在同樣的機器上,我可以多做60 倍的工作呢?這是因為我用了一個最新的算法,能夠把一個指數函數轉換成四個近似的表,只要用常數時間就可得到近似的答案。在這個例子中,是否用對算法才是能否贏得世界冠軍的關鍵。

還記得1988 年貝爾實驗室副總裁親自來訪問我的學校,目的就是為了想了解為什么他們的語音識別系統比我開發的慢幾十倍,而且,在擴大至大詞匯系統后,速度差異更有幾百倍之多。他們雖然買了幾臺超級計算機,勉強讓系統跑了起來,但這么貴的計算資源讓他們的產品部門很反感,因為“昂貴”的技術是沒有應用前景的。在與他們探討的過程中,我驚訝地發現一個O(n*m)的動態規劃(dynamic programming)居然被他們做成了O(n*n*m)。更驚訝的是,他們還為此發表了不少文章,甚至為自己的算法起了一個很特別的名字,并將算法提名到一個科學會議里,希望能得到大獎。當時,貝爾實驗室的研究員當然絕頂聰明,但他們全都是學數學、物理或電機出身,從未學過計算機科學或算法,才犯了這么基本的錯誤。我想那些人以后再也不會嘲笑學計算機科學的人了吧!

網絡時代的算法

有人也許會說:“今天計算機這么快,算法還重要嗎? ”其實永遠不會有太快的計算機,因為我們總會想出新的應用。雖然在摩爾定律的作用下,計算機的計算能力每年都在飛快增長,價格也在不斷下降。可我們不要忘記,需要處理的信息量更是呈指數級的增長?,F在每人每天都會創造出大量數據(照片,視頻,語音,文本等等)。日益先進的記錄和存儲手段使我們每個人的信息量都在爆炸式的增長?;ヂ摼W的信息流量和日志容量也在飛快增長。在科學研究方面,隨著研究手段的進步,數據量更是達到了前所未有的程度。無論是三維圖形、海量數據處理、機器學習、語音識別,都需要極大的計算量。在網絡時代,越來越多的挑戰需要靠卓越的算法來解決。

再舉另一個網絡時代的例子。在互聯網和手機搜索上,如果要找附近的咖啡店,那么搜索引擎該怎么處理這個請求呢?

最簡單的辦法就是把整個城市的咖啡館都找出來, 然后計算出它們的所在位置與你之間的距離, 再進行排序, 然后返回最近的結果。但該如何計算距離呢?圖論里有不少算法可以解決這個問題。

這么做也許是最直觀的,但絕對不是最迅速的。如果一個城市只有為數不多的咖啡館, 那這么做應該沒什么問題, 反正計算量不大。但如果一個城市里有很多咖啡館, 又有很多用戶都需要類似的搜索, 那么服務器所承受的壓力就大多了。在這種情況下, 我們該怎樣優化算法呢? 首先,我們可以把整個城市的咖啡館做一次“預處理”。比如,把一個城市分成若干個“格子(grid)”, 然后根據用戶所在的位置把他放到某一個格子里,只對格子里的咖啡館進行距離排序。

問題又來了,如果格子大小一樣,那么絕大多數結果都可能出現在市中心的一個格子里,而郊區的格子里只有極少的結果。在這種情況下,我們應該把市中心多分出幾個格子。更進一步,格子應該是一個“樹結構”,最頂層是一個大格——整個城市,然后逐層下降,格子越來越小,這樣有利于用戶進行精確搜索——如果在最底層的格子里搜索結果不多,用戶可以逐級上升,放大搜索范圍。

上述算法對咖啡館的例子很實用,但是它具有通用性嗎?答案是否定的。把咖啡館抽象一下,它是一個“點”,如果要搜索一個“面”該怎么辦呢?比如,用戶想去一個水庫玩,而一個水庫有好幾個入口,那么哪一個離用戶最近呢?這個時候,上述“樹結構”就要改成“r*tree ”, 因為樹中間的每一個節點都是一個范圍,一個有邊界的范圍(參考:http://)。這個算法能夠在很多種計算中達到相當高的效率,而且是可擴展的(也就是說,一千臺機器就算不能達到一千倍的效果,至少也可以達到幾百倍的效果)。Map and Reduce 的另外一大特色是它可以利用大批廉價的機器組成功能強大的server farm。最后,它的容錯性能異常出色,就算一個server farm 里面的機器down 掉一半,整個farm 依然能夠運行。正是因為這個天才的認識, 才有了Map and Reduce 算法。借助該算法,Google 幾乎能無限地增加計算量,與日新月異的互聯網應用一同成長。

算法并不局限于計算機和網絡

舉一個計算機領域外的例子:在高能物理研究方面,很多實驗每秒鐘都產生幾個TB 的數據量。但因為處理能力和存儲能力的不足,科學家不得不把絕大部分未經處理的數據丟棄掉??纱蠹乙?,新元素的信息很有可能就藏在我們來不及處理的數據里面。同樣的,在其他任何領域里,算法都可以改變人類的生活。例如人類基因的研究,就可能因為算法而發明新的醫療方式。在國家安全領域,有效的算法可能避免下一個911 的發生。在氣象方面,算法可以更好地預測未來天災的發生,以拯救生命。

所以,如果你把計算機的發展放到應用和數據飛速增長的大環境下,你一定會發現,算法的重要性不是在日益減小,而是在日益加強。

給程序員的七個建議

(1)練內功。不要只花功夫學習各種流行的編程語言和工具,以及某些公司招聘廣告上要求的科目。要把數據結構、算法、數據庫、操作系統原理、計算機體系結構、計算機網絡,離散數學等基礎課程學好。大家不妨試試高德納所著The Art of Computer Programming 里的題目,如果你能夠解決其中的大部分題目,就說明你在算法方面有一定的功力了。

(2)多實戰。通過編程的實戰積累經驗、鞏固知識。很多中國大學畢業生缺乏編程和調試經驗;學習C語言,考試過關就算學會了;課題項目中,只要程序能夠編譯,運行,并且輸入輸出滿足要求就算了事。這些做法是不行的。寫程序的時候,大家必須多想想如何把程序寫得更加精煉、高效、高質量。建議大家爭取在大學四年中積累編寫十萬行代碼的經驗。我們必須明白的是:好程序員是寫出來的,不是學出來的。

(3)求實干。不要輕視任何實際工作,比如一些看似簡單的編碼或測試。要不懈追求對細節一絲不茍的實干作風與敬業精神。我發現不少程序員對于知識的掌握很膚淺,不求甚解,沒有好奇心,不會刨根問底。比如,學會了C++,是否了解一個對象在編譯后,在匯編代碼中是如何被初始化的?這個對象的各個成員在內存中是如何存放的?當一個成員函數被調用時,編譯器在匯編代碼中加入了哪些額外的動作?虛函數的調用是如何實現的? 這些東西恐怕在編程語言或編譯原理中都沒有詳細提到,只有通過踏實的實干才能真正掌握。

(4)重視數學學習。數學是思維的體操,數學無處不在。學計算機至少要學習離散數學、概率論、布爾代數、集合論和數理邏輯。這些知識并不難,但是對你未來的工作幫助會很大。尤其當你對一些“數學密集型”的領域如視頻、圖像處理等有興趣時,這些知識將成為你手中的利器。

(5)培養團隊精神,學會與人合作。今天的軟件工程早已經不是一個人可以單獨操作的,而必須靠團隊合作才能成功。不懂得合作的人是不能成大器的。大家要多去尋找可以與人一起做項目的機會。

(6)激勵創新意識,培養好奇心,不要死記硬背。沒有掌握某種算法技術的根本原理,就不會有應變和創新的能力。想成為一位好程序員(其實從事任何一個行業都是如此),重要的是要養成鉆研,好奇,創新,動手,合作的優秀習慣,不滿足于填鴨,不滿足于考試交差,不滿足于表象。這不是學幾門課能夠一蹴而就的。

(7)有策略地“打工”。在不影響學業的前提下,尋找真正有意義的暑期工作或兼職。去找一個重視技術的公司,在一個好的“老板”指導下完成真正會被用戶使用的程序。不要急于去一個要你做“頭”而獨擋一面的地方,因為向別人學習才是你的目的。找工作也是一樣,不要只看待遇和職銜,要挑一個你能夠學習的環境,一個愿意培養員工的企業,一個重視你的專業的公司。最后,還要挑一個好老板。

希望大家都能把握機會,養成好的學習習慣,把算法學精學透;希望大家都能有一個美好的未來!

經驗分享

(八)不要迷失在技術的海洋中

技術就好像一片汪洋大海,越深入越望不到邊際。就拿自己的體會說吧,2000 年的時候在學校搞ASP,覺得網頁開發就是這么簡單,把數據庫中的數據格式化一下顯示在頁面上,把用戶的輸入組裝成添加刪除和修改的SQL 提交到數據庫中去。幾年后的今天,我對自己了解或聽說過的ASP.NET 相關(注意:僅僅是ASP.NET 或者說網站制作相關)技術列了一下:

在這些語言、技術、工具、理念中,每一項都能擴展出很多還要細化的技術,每一項要達到熟悉的程度可能都會花去一年的時間,如果這些都要達到熟悉的話,大概也 就快退休了。不但如此,每一個技術都在飛速發展,今年語言到了明年就有更簡單的語法,今年的技術到了明年就有更好的技術來替代,今年的工具到明年已經面目 全非,今年的理念到了明年已不再流行。

或許你現在:

在為面試而去搜索接口和抽象類的區別;

在為新技術來不及學習而煩惱;

在為看不懂高深的技術文章而煩惱;

在為項目不能提高自己的編碼水平而發愁;

????

我覺得:不管做什么,學什么,一要心態好,二要態度好。所謂心態好就是不要著急、不用擔心;所謂態度好是多分享、多討論、學出自己的心得。分享的意義是很大的,在分享之后的認知水平往往比分享之前的高,而且在很多時候分享給別人1 點,別人能回報給你2 點。有些人在團隊中不愿意分享,怕團隊中的其它人水平提升了影響到自己的地位,其實這種想法是沒有什么道理的,也是對自己不利的。有些人又在羨慕別人的技術NB,崇拜高手,為自己的技術差感到煩惱,如果你對自己信心又有什么技術是花時間學不到的那?

從學習的內容上來說,要堅持兩個原則,如果你沒有時間的話,那么學新技術不如學基礎、學應用不如學思想。舉例來說,如果你只熟悉C# 的基本語法的話,那么學好C# 這個語言比學會編寫留言本更有意義,如果你關注MVC、ORM 的話,那么學習它們的思想比學會使用MONORAIL 以及NHIBERNMATE 更好。技術雖然一直在變,但是越是基礎和越是抽象的技術變化越慢,越是偏向應用越是具體的技術變化越是快,從性價比上說,學習基礎知識性價比更高。再舉一個直白的例子,DIY 電腦的時候,在顯示器上多花費500 元的意義一定比在顯卡上多花費500 元的意義大,而就是有些人寧可在顯卡上多花費500 元。在很多大型軟件公司,招聘的時候只看人(看人品、看聰明程度、看態度)不看技術的,因為它們需要的是能快速發展,適應企業文化的人,而不需要你那些所謂的精通和熟悉。

不要過于專著于技術,這里的技術指工作中用于開發的技術。在幾年之后,當你只有.NET 可以和你的孩子分享的話,是不是太可悲了。在軟件行業,技術雖然一定程度決定了薪水、決定了職位,但是我們的生活并不是100% 是工作,有時間為技術而發愁,為何不綜合提升自己的其它能力呢?并且隨著職位的上升,往往溝通能力、經濟知識以及文學藝術修養比技術顯得更重要,這個時候嘆息自己過于專著技術往往為時過晚。

雖然國內很多公司的技術層次不同和文化也有差異,但是在大多數的時候公司或別人能教給你的東西很少,要學東西還是要靠自己主動。有的人一直覺得在公司學不到 東西,想換一個環境,往往他換了一個環境之后發現還是學不到什么東西。國內的項目大多還是急功近利的,不要期望有這么多微軟研究院,空閑的時間踏踏實實學 一些東西比到處找工作強很多,做項目的時候多分享一下自己的心得給團隊成員比抱怨團隊技術實力差強很多。

在工作中,要始終提醒自己“謙恭”、“真誠”和“規矩”,謙恭真誠對別人,把規矩留給自己。技術再強也要“謙恭”,離開了“謙恭”的技術就會失去光芒,社會 再險惡也要“真誠”,一切虛偽會在“真”誠面前低頭,職位再高也要“規矩”(不遲到,不早退,以身作則),否則再大的權力也只能變成人員的流失。如果能做 到這六個子,那么無論你的技術怎么樣,無論你到哪里都會得到領導的重用,在事業上有所發展。

現在的你不再為面試而去搜索接口和抽象類的區別,而是在面試的時候告訴考官你并不知道它們之間的區別,但是愿意在一個月內系統學習面向對象的知識;為新技術來不及學習而煩惱,而是明確了自己最需要學習的技術,一邊學習一邊分享;為看不懂高深的技術文章而煩惱,而是拿起《C# 高級編程》踏踏實實從頭到底邊閱讀邊做試驗;為項目不能提高自己的編碼水平而發愁,而是在進度允許的情況下盡可能讓項目變得可擴展、可維護以及高效;

????

看到身邊的一些人為技術所累,在技術的海洋中航行的很辛苦,因此有了本文。本文的主要目的是提醒大家找到方向,時不時回岸邊休息一下,思考一下新的航向,不要迷失在技術的海洋中讓自己筋疲力盡,在技術之外的有很多東西的意義遠大于技術,請大家踴躍討論????

更新(本文或許過于雜亂,總結一下觀點): 學習靠自己,不要期望別人教你什么,學習要主動;

不管水平高低,不要看不起自己,也不能看不起別人,學習要心態好; 不能不思進取,也不用讓自己為技術所累,給自己多一點技術之外的時間; 如果時間不充裕,優先考慮學習基礎的內容,同時也可以多關注一些新的思想; 如果別人能從你這里學到知識的話,那么你自己也一定學到了知識,請堅持分享;

經驗分享

(九)給所有入門程序員的建議(1)--句句是諍言 希望大家認真讀完

編了這么久的程序,一直想找機會總結下其中的心得和方法,但回想我這段編程道路,又很難說清楚,如果按照我走過的所有路來說,顯然星不可能的!當我看完了云風的《游戲之旅**編程感悟》和梁肇新的《編程高手箴言》我突然瞄道我要從何說起,我要怎么說了!

從接觸編程到現在已經至少要6年,雖然時間短,但我幾乎每天都在編,而編程上突飛猛進的還星最近一兩年,單純編程上的進步,很簡單就星經驗,但你要理解才可以進步的快!這就星說,你的理論課要學好,才能學好編程,操作系統,網絡原理,計算機體系結構,數據結構,編譯原理,你哪個學的不好,你根本不配成為編程高手,我見過的高手,這些學的都不錯!這些都星計算機的支柱,你連它的支柱都不了解,怎么編程,即使你編寫的程序好——只有一個原因,你用的星高級語言或腳本語言,因為它們封閉大量低層語言細節,讓你不用了解就可以編寫,你不了解低層細節你咋成為高手!解釋什么叫編程?

我覺得現在很多同學,根本不瞄道什么叫編程!我現在告訴你,單純的編程,也就星就瞄道語法瞄識的編程,根本不叫編程,只會單純的語法的編程連低級程序員都不如!

編程不僅僅星你對語法的掌握,你還要把各種技術混合到里面,這樣才叫編程,你編程的時候,你應該問問自己,你的程序有算法嗎?你的程序寫的夠簡單嗎?速度足夠快嗎?占用空間足夠少嗎?代碼寫的規范嗎?語句寫的標準嗎?你的程序之間的結構合理嗎?你類定義的合適嗎?方法和屬性合理嗎?接口合理嗎?等等等,包含很多東西!這就星高級程序員為什么賺這么多錢!要付出相當大的腦力勞動!

調試對你也很重要,一個程序高手,也星調試專家,其實調試很多方法,但大多數都星實踐中得到的!

指正現在人對學計算機誤區

現在我每天在和匯編,硬件指令,c和c++或一些低層API打交道,有些時候編程這個東西很難說清楚,只有你經歷了,你才能感受到,你沒有經歷,就永遠體驗不到!

我現在要更正幾個現在學計算機人的誤區,我想回答的星,學什么才星學計算機!

學計算機的兩個方向:一個星純搞理論的,一個星搞實踐的。搞理論的無可厚非的,大家都承認星學計算機。那么實踐呢?我很難給出一個定義,但我會列出那些才星真正學計算機學的:

(1)編程,這里的編程,我要拋出FLASH,PHOTOSHOP,3DMAX等,它們雖然也有語言,但都星為了給美術人員提供的!也就星幾乎封閉了大量的低層細節,對于一個學計算機的人來說,如果你努力學它們,你還星不要學計算機了,去學美術把!網頁編程能接觸到至少兩種類型語言,HTML和ASP或JSP(PHP),HTML說實話,不應該星計算機人學的,你應該學的星ASP,JSP等!

按嚴格意義上講(但實際沒有這么嚴格)如果你的主要必修語言,不星c,c++,JAVA,或者硬件指令,都不算星真正學計算機的,之所以這么說,我舉個例子,比如你用JSP,它星一個腳本語言,如果你用過這個語言,你認為你用好這門語言需要了解硬件結構瞄識嗎?顯然不用,如果你純星JSP程序員,你需要只星,JSP語法,一些簡單的JAVA語言,SQL之類的數據庫瞄識,其余的你什么都不需要,至于分析流程,那星系統分析師的事,不要和編程混為一談,我學JSP學了3個月,現學現買就做出了功能齊全的網上書店(當時星老師布置的作業),如果再努點力,就可以投如使用!所以說,學JSP根本就不需要太多的專業瞄識,不星學計算機的也很容易就學會!

學c++,我都學了好幾年了,用它寫程序都幾十萬行,我也不敢說我學的精通!就星因為它太靈活了!不同人,用的效果就星不一樣!所以按嚴格意義上講,如果你的主要必修語言,不星c,c++,JAVA,或者硬件指令,都不算星真正學計算機的,也就星說,學那些對計算機專業瞄識不需要太多了解的語言,就不叫學計算機的!

(2)

從事軟件方法實踐研究,這個純星軟件工程方面的,如果你沒有容入一個大項目中很難體會它的重要性,想一想,一個程序,幾十萬,幾百萬行代碼,能這么好的實現,并運行,它的功勞不封!

(3)

從事低層硬件開發,這里可能和搞電子的專業有些重疊,但事實就星這樣,他們也星學計算機的!其余的,裝系統了,裝電腦了,用人家編好的軟件實現些圖片音樂等功能的,那都星計算機的門外漢,不要和真正學計算機的混為一談!

我經常被問到:

你會盜qq不?我暈,學計算機的就要會盜qq? 你會裝電腦不?雖然我會,但不會并不可恥 你會裝系統不?雖然我會,但不會并不可恥 ???????? ????????

等等把,有好多,通過我上面解釋,你應該理解學計算機的應該會什么,不會什么也星應該的!

正式入題,怎么學好編程!

世面上好象只有這兩本星中國人寫的關于編程心得的書,中國編程好的人很多,但寫出方法很難!第一本《游戲之旅**編程感悟》前面幾章寫的星云風的編程經歷,后面幾章寫的星編程經驗!總的來說本書很容易讀懂!《編程高手箴言》書很難,尤其寫操作系統那章!正如作者所說,真正寫一門編程方法學的書很難!本書前幾張概括了當前中國軟件面臨的形式,我強烈建議看一下,寫的很經典!以前我不瞄道程序和軟件的區別星什么,現在我瞄道了!后面幾張寫的都星編程方法和編程要具備的瞄識!

總結他們兩人所說的,我準備按照下面提綱來寫編程方法!

1。如果你感興趣,學計算機星一種光榮,如果你不感興趣,那么它星地獄!2。理論對你很重要,尤其星你一名搞技術的程序工程師!3。學會自學,學會思考,學會合作與交流!

4。要想成為高手,一定要從底層學起,底層星什么?CPU,匯編等硬件指令!5。編程需要經驗積累,學會調試對你尤其重要!

6。全局把握整個工程,具體到每個類的屬性和方法以及各個類的關系!一定確保你設計的類和類模式和類間關系能夠有效,利于修改和升級!概括說就星軟件工程。下面我就分別說一下

一.如果你感興趣,學計算機星一種光榮,如果你不感興趣,那么它星地獄!

我經常聽很多同學說,開始他對計算機很感興趣,但隨著大學里的學習,越來越感覺無聊甚至厭煩!你之所以這么想,其實一點也不怪你!從高中的應試教育到大學里的自由學習方式上的轉變,我們幾乎都不適應,一到大學,突然有一種解放的感覺,沒有老師的強硬指示學習,自己根本不瞄道怎么學,學什么!所以說,教育對我們很不負責任!

如果你在大學以前已經瞄道編程怎么回事,那到沒什么事情!但好象很少有人象云風這樣從封就接觸了編程教育!所以我們在沒有上大學前幾乎星零起步!

其實,按我的理解,剛上大學開始學編程有些晚了,之所以這么說,不星因為單純的編程很難,如果你很努力,幾年完全可以搞定,其他的你去公司的經驗可以彌補!我這里想說的星,一個真正的程序員不單單要有強硬的編程實力,還要有強大的理論后盾!你只會編程,沒有強大的理論做后盾,你也就不會把理論轉化成實際的代碼,你也不會做出高效,高技能的程序!在計算機理論中,圖論,人工智能等等都星很難的理論,但如果你能把它們有效的用在計算機領域,功德無量!國人能做這點的很少,本來厲害的程序員就很少,有高尖端理論技術并把它應用的更星鳳毛麟角!

(這里可以推薦大家一本書《游戲編程中的人工智能技術》,這本書拋開了傳統的自動機,產生式,各種規則的傳統的人工智能理論,而星講的更前沿的計算智能——生物遺傳算法,人工神經網絡!這本書,不單純講理論,還用c++語言結合理論實現各種游戲程序!有時抽象的理論都星基于數學基礎之上,如果沒有一定數學基礎星很難看懂的,但正因為它有數學證明星正確的,所以它星可行的!能把它用語言實現更星可觀?。┧?,如果你熱愛計算機,在大學以前,就應該成為一個程序高手,而大學以后,主要專研各種技術的實現,和各種技術的學習,如果你把他留在工作里,可能很難,我的同學在參加工作后,很少有繼續看技術書籍,因為技術書籍很難,不星一下兩下就看懂的,有幾個還有這樣的耐力和精力去搞!這些怎么在編程上實現,都在等著老外,咱們COPY,這樣我們的軟件技術能強大嗎?

可星在大學以前成為一個編程高手幾乎不可能,我們沒有良好的學習編程的環境,而且面對著中考,高考的各種壓力,幾乎沒有機會去學習編程!其實,封學,初中,高學,那些課程沒有必要象我們這樣反復的復習,反復的作題,浪費了大量時間,我們要學會什么?學會一種技能,能夠應付各種變化的技能,就星自學,學會思考,學會自己解決問題,學會團結合作!初等教育,打的口號很好,實際上,完全壓制了這種學習方式!所以我們應該以最快的速度,在大學里容入一個熱愛計算機的氛圍!說到這又很難,當代大學生迷茫呀!不瞄道作什么,有些瞄道自己該好好編程,但光說不做!有些人,寫了幾段代碼,出現了問題,不會調試,就放棄了!大家都這樣,所以以寢室為單位沒有人編程,逐漸以整個計算機學院為單位逐漸編程!確實我們的計算機老師,會編程的很少,我們應該瞄道,中國計算機引進并發展才短短20年,正星這樣老一輩的,把這些計算機理論上確立,他們不會編程理所當然,大學的老師主要研究理論,國外的也星,因為理論太難了!

所以大學里學習編程要完全考自己,你要有信心,有意志把它學好才可以,而且這個過程星循序漸進的!以最快方式,找到你編程的愛好和興趣!我介紹幾個方法,學習方式,希望你能找到興趣,起碼我星這樣做的,記住如果跌倒了,你要站起來

1.一定要和喜歡編程的,或編程厲害的,或經常編程的人,在一起,經常探討問題!初學編程會有很多問題出現,你自己很難解決

2. 我建議VB和c一起學習,這個只星我的建議!我為什么這樣說呢?如果你開始只學c,你會厭煩整天在DOS下,沒有圖象的程序!如果你直接學WINDOW編程會很難,所以我建議學VB,VB這星個語法簡單,很快可以見到你編寫程序的畫面,這樣你就會逐漸喜歡編程,沒有畫面很枯燥的,你不這樣認為嗎?反正我星這樣認為的,你編寫的好壞,沒有畫面也很難用眼睛直接看出來!VB星最簡單的語言了!不存在c的復雜語法結構,程序出錯概率相對c 來說很少,因為VB封狀的很好,幫你解決了復雜的過程!其實象JAVA,MFC,c#完全可以作到VB效果,但上手相對困難!c星我們一定要學的,它星一種很接近底層的語言!如果你要成為高手,應該學這個!C星個純面向過程的語言,它的語法不星很難,你用它大約一年半多左右,就完全可以掌握它,記住這需要你的實踐,多做程序,主要星算法程序,最好把你教科書的后的的習題都做了。大家幾乎學的都星潭浩強的書,這本書我開始認為很好,但我看了很多國外的書,和很多國外人所打的代碼后,和國內高級程序員所說的話,我只能說這本書,只能星你的開端,但不能 讓你更深層次了解語言。但你要問我初學者用什么書,我還會介紹這本書。C的精髓在于指針,你能靈活運用指針就幾乎等于你掌握了 C語言,這星一種高效的語法支持,快的讓你無法想象,我很有感觸,在VB下要慢的多。那么我們學VB究竟做什么,很簡單,做WINDOWS程序,控件的使用,數據庫的使用等等,還有一個很重要的星,你可以練習你學的數據結構,各種計算機算法,很快就可以用圖形的方式顯現出來!你現在瞄道這些就可以,等你以后學了真正WINDOWS編程,你會對你以前所實現的東西有很深的理解,究竟什么星API,什么星動態連接庫,什么星控件,象VB,MFC這樣的東西,究竟封狀了什么讓我們用起來這么簡單!

3. 如果你能作到,以上兩點,(加上你學的專業,如果你很努力,課大約1年)我想你會對計算機感興趣的!你逐漸容入愛學計算機的氛圍!接下來有兩個方向你要去做,一個星努力學好其他計算機專業課,二星在鞏固c語言的基礎上,你可以選擇學習c++ 或者WINDWOS編程!這兩個先學哪個都無所謂。記住你大學時學的10大專業課,數學,離散數學,數據結構,編譯原理,匯編,數據庫,計算機體系結構,操作系統,計算機網絡,軟件工程,你要盡力把它們學好,這個星整個計算機系統的精髓,這些都星相互貫穿的,相互聯系的,你可能學某科沒學懂,但學了別的后,可能會懂的!切記,在你學好編程的同時,一定要學好這些理論,以后你會受益匪淺的。

4.在你覺的c或者VB學的沒什么問題,或者你學會WINDOWS編程,記住一定要自己有個想法,做個封的可視化程序,封游戲也好,封應用軟件也好,都可以,這個步驟,你一定要做,你會學到很多東西!在這期間,你還會遇到很多問題,你要自己多想,多問別人,多去網上查資料!但你做的程序,最好不要COPY別人的,如果都星你自己做的,自己想的,你收獲最大,哪怕你星模仿別人的 程序,你用你自己的想法實現了,也星厲害的!其次,你可以COPY部分代碼,作為自己的。在你對你的想法,瞄道怎么實現后,寫代碼只星浪費時間的時候,而且你寫的效率沒有現成的代碼效率高,你就可以完全COPY,但如果你星初學者,你千萬不要這么做!否則 你會對它產生依賴,有一天真正讓你自己去寫,你會無從下手!所以開始時,你可以試著COPY,逐漸擺脫對它們的依賴,以后擺脫了,這個時候,你才可以總依賴它們。

5.大學期間,有很多程序的實驗課,你要認真做,做出來收獲星自己的,也可以作為自己的一個封項目!大學期間加上實驗課,基本上自主編程或者團隊自主編寫的總封軟件數目應該不少于7,8個,如果你做的程序很大,可以少些!以上,我把如果學習計算機入門和提起 你興趣的方法告訴你了!我相信你按照我的去做,應該沒有問題的!對于每個細節,我會在接下來詳細為你們寫出的!

經驗分享

(十)數學對編程的重要作用

可能有很多朋友在網上看過google公司早幾年的招聘廣告,它的第一題如下了:{first 10*digit prime found inconsecutive digits e}.com,e中出現的連續的第一個10個數字組成的質數。據說當時這個試題在美國很多地鐵的出站口都有大幅廣告,只要正確解答了這道題,在瀏覽器的地址欄中輸入這個答案,就可以進入下一輪的測試,整個測試過程如同一個數學迷宮,直到你成為google的一員。

又如Intel某年的一道面試題目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世時某年年齡的平方,問:他是哪年出生的?這道看似很簡單的數學問題,你能不能能快地解答呢?

下面則是一道世界第一大軟件公司微軟的招聘測試題:中間只隔一個數字的兩個素數被稱為素數對,比如5和7,17和19,證明素數對之間的數字總能被6整除(假設這兩個素數都大于6),現在證明沒有由三個素數組成的素數對。這樣的試題還有很多很多,這些題目乍初看上去都是一些數學問題。但是世界上一些著名的公司都把它們用于招聘測試,可見它們對新員工數學基礎的重視。數學試題與應用程序試題是許多大型軟件公司面試中指向性最明顯的一類試題,這些試題就是考察應聘者的數學能力與計算機能力。

某咨詢公司的一名高級顧問曾說:微軟是一家電腦軟件公司,當然要求其員工有一定的計算機和數學能力,面試中自然就會考察這類能力。微軟的面試題目就考察了應聘人員對基礎知識的掌握程度、對基礎知識的應用能力,甚至暗含了對計算機基本原理的考察。所以,這樣的面試題目的確很“毒辣”,足以篩選到合適的人。

四川大學數學學院的曹廣福教授曾說過:“一個大學生將來的作為與他的數學修養有很大的關系”。大學計算機專業學生都有感觸,計算機專業課程中最難的幾門課程莫過于離散數學、編譯原理、數據結構,當然像組合數學、密碼學、計算機圖形學等課程也令許多人學起來相當吃力,很多自認為數據庫學得很好的學生在范式、函數依賴、傳遞依賴等數學性比較強的概念面前感到力不從心,這些都是因為數學基礎或者說數學知識的缺乏所造成的。

數學是計算機的基礎,這也是為什么考計算機專業研究生數學都采用最難試題(數學一)的原因,當然這也能促使一些新的交叉學科如數學與應用軟件、信息與計算科學專業等飛速發展。許多天才程序員本身就是數學尖子,眾所周知,BillGates的數學成績一直都很棒,他甚至曾經期望當一名數學教授,他的母校——湖濱中學的數學系主任弗雷福?賴特曾這樣談起過他的學生:“他能用一種最簡單的方法來解決某個代數或計算機問題,他可以用數學的方法來找到一條處理問題的捷徑,我教了這么多年的書,沒見過像他這樣天分的數學奇才。他甚至可以和我工作過多年的那些優秀數學家媲美。當然,比爾也各方面表現得都很優秀,不僅僅是數學,他的知識面非常廣泛,數學僅是他眾多特長之一。”。影響一代中國程序人的金山軟件股份有限公司董事長求伯君當年高考數學成績滿分進一步說明了問題。很多數學基礎很好的人,一旦熟悉了某種計算機語言,他可以很快地理解一些算法的精髓,使之能夠運用自如,并可能寫出時間與空間復雜度都有明顯改善的算法。

程序設計當中解決的相當一部分問題都會涉及各種各樣的科學計算,這需要程序員具有什么樣的基礎呢?實際問題轉換為程序,要經過一個對問題抽象的過程,建立起完善的數學模型,只有這樣,我們才能建立一個設計良好的程序。從中我們不難看出數學在程序設計領域的重要性。算法與計算理論是計算機程序設計領域的靈魂所在,是發揮程序設計者嚴謹,敏銳思維的有效工具,任何的程序設計語言都試圖將之發揮得淋漓盡致。

程序員需要一定的數學修養,不但是編程本身的需要,同時也是培養邏輯思維以及嚴謹的編程作風的需要。數學可以鍛煉我們的思維能力,可以幫助我們解決現實中的問題??梢詭椭覀兏叩膶W習哲學。為什么經常有人對一些科學計算程序一籌莫展,他可以讀懂每一行代碼,但是卻無法預測程序的預測結果,甚至對程序的結構與功能也一知半解,給他一個稍微復雜點的數學公式,他可能就不知道怎么把它變成計算機程序。很多程序員還停留在做做簡單的MIS,設計一下MDI,寫寫簡單的Class或用SQL語句實現查詢等基礎的編程工作上,對于一些需要用到數學知識的編程工作就避而遠之,當然實現一個累加程序或者一個稅率的換算程序還是很容易的,因為它們并不需要什么高深的數學知識。

一名有過10多年開發經驗的老程序員曾說過:“所有程序的本質就是邏輯。技術你已經較好地掌握了,但只有完成邏輯能力的提高,你才能成為一名職業程序員。打一個比方吧,你會XXXXX般武藝,刀槍棍棒都很精通,但就是力氣不夠,所以永遠都上不了戰場,這個力氣對程序員而言就是邏輯能力(其本質是一個人的數學修養,注意,不是數學知識)。”

程序員的數學修養不是一朝一夕就可以培養的。數學修養與數學知識不一樣,修養需要一個長期的過程,而知識的學習可能只是一段短暫的時間。下面是一些我個人對于程序員怎么樣提高與培養自己的數學修養的基本看法

首先,應該意識到數學修養的重要性。作為一個優秀的程序員,一定的數學修養是十分重要也是必要的。數學是自然科學的基礎,計算機科學實際上是數學的一個分支。計算機理論其實是很多數學知識的融合,軟件工程需要圖論,密碼學需要數論,軟件測試需要組合數學,計算機程序的編制更需要很多的數學知識,如集合論、排隊論、離散數學、統計學,當然還有微積分。計算機科學一個最大的特征是信息與知識更新速度很快,隨著數學知識與計算機理論的進一步結合,數據挖掘、模式識別、神經網絡等分支科學得到了迅速發展,控制論、模糊數學、耗散理論、分形科學都促進了計算機軟件理論、信息管理技術的發展。嚴格的說,一個數學基礎不扎實的程序不能算一個合格的程序員,很多介紹計算機算法的書籍本身也就是數學知識的應用與計算機實現手冊。

其次,自身數學知識的積累,培養自己的空間思維能力和邏輯判斷能力。數學是一門分支眾多的學科,我們無法在短暫的一生中學會所有的數學知識,像泛函理論、混沌理論以及一些非線性數學問題不是三五幾天就可以掌握的。數學修養的培養并不在與數學知識的多少,但要求程序員有良好的數學學習能力,能夠很快地把一些數學知識和自己正在解決的問題聯系起來,很多理學大師雖然不是數學出身,但是他們對數學有很強的理解能力和敏銳的觀察力,于是一系列新的學科誕生了,如計算化學、計算生物學、生物信息學、化學信息學、計算物理學,計算材料學等等。數學是自然學科的基礎,計算機技術作為理論與實踐的結合,更需要把數學的一些精髓融入其中。從計算機的誕生來看它就是在數學的基礎上產生的,最簡單的0、1進制就是一個古老的數學問題。程序設計作為一項創造性很強的職業,它需要程序員有一定的數學修養,也具有一定的數學知識的積累,可以更好地把一些數學原理與思想應用于實際的編程工作中去。學無止境,不斷的學習是提高修養的必經之路。第三,多在實踐中運用數學。有些高等學校開設了一門這樣的課程——《數學建模》。我在大學時期也曾學過,這是一門內容很豐富的課程。它把很多相關的學科與數學都聯系在一起,通過很多數學模型來解決實際的生產生活問題,很多問題的解決需要計算機程序來實現。我在大學和研究生階段都參加過數學建模競賽,獲得了不少的經驗,同時也進一步提高了自己的數學修養。實際上,現在的程序設計從某些角度來看就是一個數學建模的過程,模型的好壞關系到系統的成敗,現在數學建模的思想已經用于計算機的許多相關學科中,不單只是計算機程序設計與算法分析。應該知道,數學是一門需要在實踐中展示其魅力的科學,而計算機程序也是為幫助解決實際問題而編制的,因此,應該盡量使它們結合起來,在這個方面,計算機密碼學是我認為運用數學知識最深最廣泛的,每一個好的加密算法后面都有一個數學理論的支持,如橢圓曲線、背包問題、素數理論等。作為一名優秀的程序員,應該在實際工作中根據需要靈活運用數學知識,培養一定的數學建模能力,善于歸納總結,慢慢使自己的數學知識更加全面,數學修養得到進一步提高。

第四,程序員培養制度與教學的改革。許多程序員培養體制存在很多缺陷,一開始就要求學員能夠快速精通某種語言,以語言為中心,對算法的核心思想與相關的數學知識都一筆帶過,講得很少,這造成很多程序員成為背程序的機器,這樣不利于程序員自身的快速成長,也不利于程序員解決新問題。我在長期的程序員培訓與計算機教學工作采用了一些與傳統方式不一致的方法,收到了一定的效果。很多初學程序的人往往寫程序時有時候會有思維中斷,或者對一些稍難的程序覺得無法下手,我采用了一些課前解決數學小問題的方法來激勵大家的學習興趣,這些小問題不單單是腦筋急轉彎,其中不少是很有代表意義的數學思考題。通過數學問題來做編程的熱身運動,讓學員在數學試題中激發自己的思維能力,記得有位專家曾經說過,經常做做數學題目會使自己變聰明,很長時間不去接觸數學問題會使自己思維遲鈍。通過一些經典的數學問題來培養學員的思維的嚴謹性和跳躍性。很多人可能不以為然,其實有些看似簡單的問題并不一定能夠快速給出答案,大腦也在不斷的運用中變更加靈活的。不信嗎?大家有興趣可以做做下面這道題目,看看能不能在1分鐘之內想到答案,這只是一道小學數學課后習題。很多人認為自己的數學基礎很好,但是據說這道題目90%以上的人不能在一個小時內給出正確答案。

證明:AB+AC>DB+DC(D為三角形ABC的一個內點)。

最后,多學多問,多看好書,看經典。我在這里向大家推薦兩部可能大家已經很熟悉的經典的計算機算法教材,它們中間很多內容其實就是數學知識的介紹。第一部是《算法導論》,英文名稱:Introduction toAlgorithms,作者:Thomas H.Cormen,Charles E.Leiserson,RonaldL.Rivest,Clifford Stein。本書的主要作者來自麻省理工大學計算機,作者之一Ronald L.Rivest由于其在公開秘鑰密碼算法RSA上的貢獻獲得了圖靈獎。這本書目前是算法的標準教材,美國許多名校的計算機系都使用它,國內有些院校也將本書作為算法課程的教材。另外許多專業人員也經常引用它。本書基本包含了所有的經典算法,程序全部由偽代碼實現,這更增添了本書的通用性,使得利用各種程序設計語言進行程序開發的程序員都可以作為參考。語言方面通俗,很適合作為算法教材和自學算法之用。另一部是很多人都應該知道的Donald.E.Knuth所著《計算機程序設計藝術》,英文名稱:The Art ofComputer Programming。

Donald.E.Knuth人生最輝煌的時刻在斯坦福大學計算機系渡過,美國計算機協會圖靈獎的獲得者,是本領域內當之無愧的泰斗。有戲言稱搞計算機程序設計的不認識Knuth就等于搞物理的不知道愛因斯坦,搞數學的不知道歐拉,搞化學的不知道道爾頓。被簡稱為TAOCP的這本巨著內容博大精深,幾乎涵蓋了計算機程序設計算法與理論最重要的內容?,F在發行的只有三卷,分別為基礎運算法則,半數值算法,以及排序和搜索(在寫本文之際,第四卷已經出來了,我也在第一時間搶購了一本)。本書結合大量數學知識,分析不同應用領域中的各種算法,研究算法的復雜性,即算法的時間、空間效率,探討各種適用算法等,其理論和實踐價值得到了全世界計算機工作者的公認。書中引入的許多術語、得到的許多結論都變成了計算機領域的標準術語和被廣泛引用的結果。另外,作者對有關領域的科學發展史也有深入研究,因此本書介紹眾多研究成果的同時,也對其歷史淵源和發展過程做了很好的介紹,這種特色在全球科學著作中是不多見的。至于本書的價值我覺得BillGates先生的話足以說明問題:“如果你認為你是一名真正優秀的程序員讀Knuth的《計算機程序設計藝術》,如果你能讀懂整套書的話,請給我發一份你的簡歷”。作者數學方面的功底造就了本書嚴謹的風格,雖然本書不是用當今流行的程序設計語言描述的,但這絲毫不損傷它“程序設計史詩”的地位。道理很簡單,它內涵的設計思想是永遠不會過時的。除非英語實在有困難,否則建議讀者選用英文版。

經驗分享

(十一)給學習計算機的同僚們(初學者,進階者,包括Linux愛好者)的學習建議

為什么我們要學習計算機,為什么我們要學習編程,有很多很多的原因,但當我們踏進計算機的世界里的時候,我們找到了可以任由我們發揮,任由我們施展拳腳的天地,我們有了一種對學習計算機,甚至是學好計算機的渴望,但是任何一門學科都不是那么容易學的好的,計算機更是如此,我想我們大多數人都是從編程開始學習的,逐漸形成了對學習編程的興趣,但是如果想真正的學好計算機,單單學習高級語言是不能達到效果的,就算你說我只想學好一門高級語言,把它學的精通就可以了,但問題就是那么的簡單么,我想不是吧。

計算機是一個整體,學習任何一門計算機課都是和其他課程聯系在一起的,要學習就要有足夠的深度和廣度,不然不可能有深入的了解就像學習c語言一樣,如果你想知道他是怎樣在計算機的內存中分布的,具體是怎么運行的,就要學習匯編語言,當然計算機體系結構,計算機組成原理,是你理解計算機的基礎,計算機大師knuth都非常重視匯編語言(匯編語言和機器語言是一一對應的),要想學好軟件,脫離硬件是不可能,因為軟件最終要靠硬件來運轉的。當然了如果是初學者還是要一步步學的,如果你想知道c語言是怎么運行的,想了解指針和數組的真正區別,那多學一門語言匯編語言吧,人們都說匯編語言是與機器相關的,不能移植的,但想在的pc機上用的幾乎都是AMD,和intel的處理器,他們有都是互相兼容的,所以指令集的體系結構都是IA*32當然了現在都有64位的處理器了,但是這并沒有什么很大的區別,僅僅是位數變多了,所能表達的數字變大了,精度也變的更長了等等。就像學習高級語言一樣學習匯編語言也是相通的,因為他們的功能都差不多,而且更加簡單,你會發現在高級語言中的語法會在匯編語言中消失,僅存的就只是指令的書寫格式(相當如詞法吧,當然了我可能也說的不太對,因為對匯編語言學的不是很深入,所以現在也正在有計劃的去學習)。如果你學習的java,vb,c#等等那么就請您多多看看c和c++吧,我們常常聽說某種語言實現了垃圾回收機制,用某種算法不定期的把你程序中不再使用的內存回收掉,最好的例子就是JAVA了(關于它的一句話說的挺好,一次編譯到處運行,非常適用于嵌入式計算機程序的編寫),不過你能用JAVA語言寫出內存回收的程序么我想應該是不可能,JAVA對于這方面做了太多的限制,但在c/c++中卻沒有,你可以用庫函數malloc等等去分配內存,free去釋放內存,c++中對應的是(new,delete)實現的跟方便些,你也可以用系統調用brk(其實庫函數也是調用了他,只不過做了一些更加完善的工作而已)去分配,而且他可以直接去操作數據到位(&,|,~),如果說高級語言是匯編語言的一個子集的話,那么JAVA在這方面就是C/C++的一個子集,我并沒有說java不用學,不好,而是在學習他之前應該多去學學C/C++,(注意語法不是特別的重要,重要的是你怎么能在學完語言以后去靈活的運用他),計算機體系結構對于你理解。

軟硬件非常的重要給大家推薦一本書,書名 :計算機組成與設計——硬件/軟件接口作者:DavidA.Patterson John L.hennessy 出版社:機械工業出版社,這本書很不錯,能夠很好的把軟硬件的關系數清楚,而且不像一些國內的體系結構教材,看的非常的費勁誰然講的都是很清楚,但不能從讀者的角度去考慮問題,這本書會讓你看的愛不釋手的,恩,對于我來說卻是如此,不適合初學c語言的,要有一定的c語言基礎。我想還有一點要和大家分享一下,就是學習計算機切忌浮躁,不要像追是族一樣,看到一項新出的技術就去學習,新技術會不斷的變的,而且很容易讓你迷失方向,一定要打好基礎,關于計算機基礎的書一定要多看,不要死記硬背,但你發現你需要死記硬背去記住書中的知識的時候,那么我可以給你個建議把此書放在書架里,去看一些能夠引導你一步步的從本質上理解知識的書,首選一些計算機科學叢書,圖靈叢書(機械工業出版社,人民郵電出版社,電子工業出版社),我們學校用的是清華大學自己出版的計算機書籍,雖說清華大學在工科方面很不錯,但是出版的計算機書籍就我個人來說真的不怎么好,相對于國外的計算機書籍來說差的真是太遠了,我很不明白為什么要用清華出的,有一本關于Linux/unix內核的書我覺得挺好的,書名是Linux內核源代碼情景分析浙江大學出版的,我目前正在潛心學習這本書,雖然很難,但真的不錯,很少有由我們自己寫的關于Linux內核這方面的好書,這本就是不可多得的好書。說了太多關于計算機書籍的話題了,但我認為一本好的書籍真的能給我們很大的幫助還能從中得到快樂。如果你只想學習計算機去賺錢的話,那么你大可以不必去學習很多東西,對于你也沒有用處,如果你是對計算機有著非常濃厚的興趣的話,那么就塌下心來,一步一步去在計算機的海洋里傲游吧,真是一件美妙的事情。

現在我告訴大家自己認為的關于學習計算機的路程

(1)

c語言(可以去學譚浩強寫的c語言的書,如果能找到K&R C 那就更好,自己是沒有找到,要想進一步去學習的話去看 c缺陷與陷阱,c專家編程,這兩本書很經典的)

(2)

c++語言(c和c++其實并不一樣,可以說c++是繼承了c,增加了面向對象的思想,如果能找到c++program languagec++之父寫的就很好,不過自己沒有找到,要想進一步去學習的話去看effective c++ more effective c++,挺不容易懂的,因為自己要看Linux內核所以沒有多少時間去看,c++沉思錄(c缺陷與陷阱 的作者與他的妻子)也非常的不錯,還是沒有時間去看,只看了200多頁,講的太好了,有時間自己一定會去看完的,這本書講的主要是教你怎么運用C++語言去寫出好的文章)算法和數據之間的結構的理解也很重要,我想如果你有了c++的學習經驗學習數據結構應該不太困難,一直以來我都不是很明白抽象的數據結構(abstract data type ADT)的抽象是怎么回事是什么意思,之后看了c++沉思錄才恍然大悟,抽象就是把想關注事務的部分拿出來,不關心的不去考慮,就像我們人類,人有很多屬性,姓名,年齡,體重等等,當我們研究具體問題是也許只關心人的屬性的某些方面,例如姓名,年齡,那么就把它拿出來也就是術語抽象,在c/c++語言就用用戶自定義的數據類型來去定義人:struct people{charname[10];int age;};struct 是structure(結構)的縮寫,這樣理解就非常簡單了么,所以c++沉思錄非常的好。

(3)

算法與數據結構(有很多好的書籍,大家可以去找找,反正清華出的不敢恭維)

(4)

匯編語言,計算機組成原理,計算機體系結構 微機原理(我認為剛才我說計算機組成與設計——硬件/軟件接口就很好的包含了這些內容挺不錯的,當然了學習是無止境的。)之后才能開始os的學習,我認為OS是讓你在學習計算機上有一個質的飛躍,因為現代的程序設計一般都是基于OS的,如果不了解OS,那么就不可能學好程序設計,就像建造房子一樣,房子要建在地上,如果你不了解當地的環境,地質,這么怎么能建造好的房子呢?

(5)

操作系統原理的學習,數據庫原理的學習(有一本挺好的書,自己是看完了一遍,電子工業出版社的操作系統設計與精髓作者 stalling 忘了具體怎么拼了,理論性很強,不過是一本好書,要理解性的看)。

至于網絡原理,軟件工程,通信安全,鑒于尚在學習中,就不說了。哦,還有編譯原理,是一門教你怎么把語言翻譯成匯編語言,機器語言的一門課,有很多很難的算法,LR算法就很不好理解,至于要什么時候學那就在學好語言和算法的基礎上去學習吧。記住千萬不要趕時髦去學什么VC,BC,包括MFC之類的,他們只是開發程序的工具而已幫你做了一些輔助性的工作,所以好好學習語言吧!還有就是對于什么等級考試一點作用都沒有,如果要是我說現在的等級考試只是人家賺錢的一種方式,已經變質了,我不知道為什么不跟上時代的腳步,把它們給取消了,不止是計算機等級考試,英語等級考試也沒有用,不管怎么說他都是一門紙上的考試,對于提高自己沒有作用,反而會有反作用。如果你只是為了拿一個計算機考試的憑證,那我勸你還是止步吧,我們是為了學習計算機而學習計算機而不是為了學習計算機而去拿那個一文不值得證,不然我真不知道你學習計算機還有什么意思。如果真的是對計算機感興趣那就塌下心來,一步一個腳印的去探索計算機世界的奧秘,多么美好的事情呀。很多人開始學習的人都是夢想成為黑客,用幾個程序去攻擊別人的漏洞,但什么是黑客,天才的程序員才能配的上,就像Linus等一樣,我們的目的是去建造宏偉的建筑,而不是去炸毀他那是駭客所做的事情,如果你認為別人的建筑有不足之處大可以指出來。這只是我個人的意見,有不足之處請指出,謝謝了!

還有就是談談自己對于Linux學習的看法。學完os以后自己就覺得應該去學習os的內核了,其實當自己剛學os的時候就特別特別特別的想去自己寫一個os,看了很多東西還是一無所獲,當然了這是必然的,因為自己連os有什么功能,進程線程,進程調度,虛擬內存,進程間的通信,文件系統,系統調用與中斷,都是不知所云,所以當時很是郁悶,很是茫然,在學完os之后才對操作系統有一個感性的認識,但是還是太理論了,沒有任何源代碼的分析,沒有任何設計os的細節,所以自己只好去看linux源代碼了,但是還有一件重要的事沒有做,寫源代碼我要在一個環境中去寫在哪去寫呢,那就是在類UNIX操作系統上(我用的是fedora 9.0的發行版,內核是2.6版的),怎樣去編譯源代碼呢用的是一種特殊的格式(其實這種特殊的格式就是在寫make命令時,所規定的make認識的文件)書寫去告訴編譯器編譯的過程是什么,也就是用make命令去解釋,在windows上我們所用的幾乎都是IDE(集成的開發環境,編輯器,編譯器,調試器等都組裝在一個程序中)的開發環境所以想,對于編譯的

過程一無所知,所以當初自己看linux內核書籍的時候很是不理解,為什么每個文件目錄下都會有一個Makefile文件,原來但你輸入make命令的時候他會自動在當前的目錄下按照makefile,Makefile的順序去查找是否有此文件名,然后就讀取文件進行解釋,并告訴gcc編譯器怎樣編譯按照什么樣的順序編譯這些源文件。之后就是去熟悉linux操作系統,編寫Linux上的c程序(unix環境高級編程第二版是在類unix上學習的很好的書籍,因為這些開放源代碼的os都是按照POSIX(開放的操作系統接口標準)標準寫的,所提供的API(通用的應用程序編程接口,就是人們把各個方面常用的函數用某種語言編寫出來供程序員使用,減少了程序員的負

第三篇:用戶交互設計學習心得

學習心得

老師整體講得挺好,從中學習到了交互設計的精髓,即是“不要讓用戶思考”,可用性是交互設計的基本目標。從中也了解了Web用戶的行為特點,了解了一般Web可用性的基本要素以及比較專業的設計迭代和設計驗證過程?;剡^頭來對比之前做的項目,參照著也發現了不少問題和缺點,尤其是在設計流程上,也有時間因素沒法花兩三個禮拜要做設計迭代和驗證。我們的原型和設計缺乏對最終用戶群的設計考慮,出發點尚處在以自我觀點為決策的階段,沒有為最終用戶設計,這點是我們亟需改進的。除此之外,也講到了web交互設計的一般法則,對我們以后開發也很有裨益。

用戶體驗的提高需要各方的努力,不是光靠UE設計師一個人就能達到。一個項目的用戶體驗好與壞,需要受眾用戶、產品經理、業務分析師、視覺設計師、開發人員一起協同努力才能在一個有限的時間內達成。更多得可能還是需要在研發流程和規范上下藥,提高用戶體驗設計的重視度,才能貫徹相同的理念互相協同起來,達到高用戶體驗的目標。

第四篇:停水告知用戶程序及規定

停水告知用戶程序及規定

1、水廠計劃檢修造成的停水,由公司生產技術安監部及時通過新聞媒體告知全市用戶,并同時書面通知公司供水服務熱線。

2、因突發事件造成的停水,由公司生產技術安監部科學確定停水時間,及時通過新聞媒體告知全市用戶,并同時通知公司供水熱線。

3、因管網部搶修造成的停水,由公司管網部確定搶修時間,并通知公司生產技術安監部。生產技術安監部及時通過新聞媒體告知全市用戶并同時通知公司供水熱線。

4、公司供水熱線在接到相關部門的停水通知后,負責把停水相關信息通過手機短信告知公司領導及相關部門負責人,同時電話通知營銷部和各營業所負責人,并把停水相關信息在公司網站上公告。

5、公司營銷部在接到停水通知后,應及時通過水費通知短信平臺,用手機短信告知用戶。

6、公司各營業所在接到停水通知后,要及時以告知函的方式書面通知所轄片區的大型小區、大型企業和重點單位,告知函需用戶簽收。

7、遇突發性停水,公司各營業所要第一時間電話通知大型小區、大型企業和重點單位的聯系人,并補填停水告知函。

8、各營業所必須注冊登記上述相關用戶指定的聯系人電話號碼(包括手機和固定電話),并報營銷部備案,以便今后及時將停水信息告知用戶。

9、各部門負責人為第一責任人,如未按規定和程序執行,將按公司《職工獎懲條例》相關規定處理。

10、本規定下發之日起執行,解釋權屬公司企管部。

第五篇:產品設計程序用戶研究 課程小結

產品設計程序與用戶研究課程小結

轉眼間產品設計程序用戶研究的課程結束了。通過這門課程的學習,我懂得了產品設計的概念以及產品設計具體實施過程和采用的基本方法、設計的基本要素等。

產品設計是以“用戶為中心”,通過物質材料對產品的造型、結構等的綜合性創造。按照產品造型時間的一般過程,大致可分為三個階段:設計準備階段、方案設計階段、方案實施階段。細分的話,可分為設計選題、市場調研、準備構思、創意草圖、確定設計方案、產品效果圖、工程圖繪制、編寫設計報告書。

首先設計師應根據企業的設計要求制定詳細計劃,對要求進行具體分析,并對其做廣泛調查,如功能性、認知性、審美性、適應性、經濟性、環保性等。在選題過程中,要充分了解設計的對象、用途、及影響產品造型的各種參數。

市場經濟決定著產品的生產,因此,市場調研應把銷售作為主要課題來研究。產品設計包括產品的工程設計和產品的造型設計,兩者是緊密聯系在一起的。但也有所不同,工程設計接近于生產者,而產品造型設計則偏重于消費者。調研的主要內容包括:分析使用對象、市場狀況、產品使用的環境和地區等等。

我們還學習到了產品設計方法的種類,如:智力激勵法、設問法、列舉法、聯想法、整理法等。在歸納后便開始產品的創意草圖。創意草圖是設計師設計思想的直接反應,能清楚地表達出的每一個思維跳躍和創意火花。在老師的帶領下我們對電線插線板進行了拆分,對它的內部和外部進行了分析討論,并一比一繪制了插線板的三視圖。使我們更加深刻地了解產品設計構造。之后利用了幾天時間對插排進行市場調研。接著我們便開始繪制插線板的改良設計草圖,并在全班進行公開研討與辯論。

在這個課程當中,我們通過查找大量資料,相互討論,請教老師,以及不懈的努力,對電線插排進行了后期改良設計,在這次設計過程中,體現出自己單獨設計產品的能力,與同學交流,完成了插排的改良設計。使我們學到了很多知識,還鍛煉了我們動手能力。在未來的設計學習中我會繼續努力學習,多加鍛煉自己,讓自己的專業能力更進一步。

設計藝術學院

X班 XXX

下載abaqus_用戶程序-學習心得(五篇范例)word格式文檔
下載abaqus_用戶程序-學習心得(五篇范例).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    室內設計程序學習心得

    室內設計程序學習心得 指導老師:向陽班級:藝設六班姓名:李陟學號:20092468藝術,在人類文明的知識體系中與科學并駕齊驅。藝術,具有完全不可代替的學科系統。 藝術與科學的理論研究......

    實質性程序學習心得

    實質性程序總結心得 ———趙彩虹 一、 總體心得 (一) 每張表頭均包含客戶名稱、財務報表日、編制人及日期、復核人及日期以及索引號和頁次。 (二) 會計科目的審計目標通常......

    程序文件學習心得2

    學習心得根據質保體系會議要求及學習計劃,本周重點學習了《質量體系程序文件》的“無損檢測系統質量管理程序”、“理化檢驗系統質量管理程序”、“熱處理系統質量管理程序”......

    程序文件學習心得1

    學習心得本公司《質量體系程序文件》共有22個控制程序,作為工藝員及理化負責人,主要涉及到其中的12個控制程序,并計劃利用3周時間對其進行重點學習。 程序文件就是為了完成管理......

    計算機常用程序軟件應用技巧 學習心得

    《計算機常用程序軟件應用技巧》聽課心得 序號:xx 學號:xx 姓名:xx 班級:xx 本學期,我選擇了這門公共選修課課程——計算機常用程序軟件應用技巧。通過短短的18次堂課的學習過......

    發展黨員的程序和手續學習心得

    本周星期二下午我們上了關于“入黨條件、手續和程序“的黨課。在這之前,我對此入黨條件有一小部分的了解,但對入黨的手續和程序不是很了解。我想通過這次課后,能夠更深刻的體會......

    修改獨立博客程序 獲得更好的用戶體驗

    獨立博客,由于其靈活的操作性,以及盈利的可能性,越來越受到網友們的青睞。如今現成的博客程序比比皆是,更加消除了創建獨立博客的門檻限制,拋去前期的注冊域名和域名備案,余下的......

    汽車修理業務受理程序、服務承諾、用戶抱怨制度★

    汽車修理業務受理程序業務受理工作從內容上分為兩個部分: 迎接客戶送修程序與恭送 客戶離廠程序。工作程序具體內容如下: 1、接待室接待前來公司送修的客戶。 2、受理業務:詢問......

主站蜘蛛池模板: 国内精品久久久久影院老司机| 97se狠狠狠狠狼亚洲综合网| 日本一高清二区视频久二区| 亚洲男人综合久久综合天堂| 狠狠97人人婷婷五月| 亚洲国产成人精品青青草原导航| 欧美精品亚洲日韩aⅴ| 亚洲国产成人精品无码区在线网站| 亚洲七七久久桃花影院| 久久偷偷做嫩草影院免费看| 国内精品国产成人国产三级| 伊人99综合精品视频| 婷婷久久久亚洲欧洲日产国码av| 97精品国产一区二区三区| 一区二区三区四区产品乱码在线观看| 动漫美女h黄动漫在线观看| 国产精品美女久久久久av福利| 五级黄高潮片90分钟视频| 亚洲人成人无码www影院| 国产免费观看黄av片| 欧美激情做真爱牲交视频| 一本久道久久综合狠狠爱| 亚洲午夜久久久影院| 一本一道久久综合狠狠老| 中文字幕乱码熟女人妻水蜜桃| 久久久久人妻精品一区蜜桃网站| 在线视+欧美+亚洲日本| 无码人妻精品一区二区三区夜夜嗨| 国产麻豆一精品一av一免费软件| 丰满人妻无奈张开双腿av| 亚洲熟女乱色综合亚洲av| 精品欧美h无遮挡在线看中文| 国产伦精品一区二区三区免.费| 国产精品欧美久久久久久日木一道| 宅男午夜成年影视在线观看| 欧美videos另类粗暴| 真实国产熟睡乱子伦视频| 中文字幕亚洲综合久久蜜桃| 三上悠亚网站在线观看一区二区| 狠狠色噜噜狠狠狠狠7777米奇| 国产成人亚洲影院在线播放|