第一篇:RPG AS400程序員培訓手冊6
CL、CMD
其實有關(guān)這一章,以及屏幕文件的,在網(wǎng)上已經(jīng)有很多人寫過了,想了想,還是說一下吧。
5.1 CL 程序
5.1.1 基本認識
簡單的理解,CL 程序就是和RPG 相對應的,是控制語言(Control Language)。類型為
CLP、CLLE 的源代碼編譯出來的程序,都屬于CL 程序。
可能還是不夠直觀,這么說吧,我們在交互式命令行上輸入的命令,用程序的方式來執(zhí)
行,這個執(zhí)行的程序,就是CL 程序。
學過UNIX 的會比較好懂,CL 程序有點類似于SHELL,不過SHELL 是可以直接執(zhí)行的,而且不用編譯;CL 程序需要編譯,而且要用CALL 的方式來執(zhí)行。不過原理是接近的,都是在程序中直接調(diào)用命令行的語句。
所以說,CL 程序其實很好寫,只要會輸入命令,就可以寫CL 程序了。在編輯CL 程
序時,也可以用“命令 + F4”的方式來寫,不需要老老實實的整行輸入。
CL 程序不像RPGLE 程序,在編寫時,可以使用自由格式書寫;一行的內(nèi)容如果太長
要,在最末尾處用“+”表示換行
舉個最簡單的例子,比如說新建個名為FHS01CL 的CLP 源程序,代碼如下:
PGM
WRKACTJOB
ENDPGM
編譯此程序,然后CALL 之,系統(tǒng)就會執(zhí)行命令WRKACTJOB,查看當前的活動作業(yè),效果與在交互式命令行下輸入WRKACTJOB 是一樣的。
當我們輸入F12,退出WRKACTJOB 時,系統(tǒng)就會繼續(xù)向下執(zhí)行,發(fā)現(xiàn)是ENDPGM,表示程序結(jié)束了,于是判定執(zhí)行完畢,退出至交互式畫面。
5.1.2 CL 程序的常用語法及命令:
一、程序的開始與結(jié)束:
PGM PARM(&A &B)/* 開始CL 程序 */
ENDPGM /* 結(jié)束CL 程序 */
CL 程序,和RPGLE 程序一樣,也可以有程序的入口參數(shù),而且程序的入口參數(shù)
都是可傳遞的(也就是輸入的參數(shù)如果在程序中被修改過,那么原調(diào)用的程序中的相應
參數(shù)也會進行變化。不過CL 的入口參數(shù)只能為字符型,或數(shù)字型的單個字段,不能象
RPGLE 程序中那么多樣化(字段、結(jié)構(gòu)、數(shù)組、指針)。
如果CL 程序沒有入口參數(shù)時,那么就可以不需要后面的PARM 語句,直接寫成PGM
即可。
寫CL 程序時,不妨多使用F4,看看系統(tǒng)的幫助,這樣就不用記那么多命令的參
數(shù)名。
二、變量及其定義
CL程序中的所有變量,都使用&做為前綴,這一點與RPGLE 程序不同。比如說
PGM PARM(&A &B)
就表示入口參數(shù)為A、B 這兩個變量
在CL 程序中使用到的變量,都必須使用DCL 語句來定義:
DCL VAR(&FLD01)TYPE(*CHAR)LEN(10)
DCL VAR(&FLD02)TYPE(*DEC)LEN(10 2)
上述語句表示:
定義變量FLD01,10 位長的字符型變量
定義變量FLD02,10 長,其中2 位小數(shù)的數(shù)字型變量
除了字符、數(shù)字之外,CL 程序還可以定義邏輯變量(*LGL),邏輯變量允許的值只
能為’1’或’0’。不過通常有字符與數(shù)字也就夠了。CL 程序的主要功能在于進行命令處理,而不是處理字符串以及數(shù)據(jù)庫
三、CL 常用命令:
CHGVAR--變量賦值
CHGVAR VAR(&FLD01)VALUE(‘ABCD’)
即是將變量FLD01 賦值成為’ABCD’(左對齊),同理,VALUE 的括號中也可
以填寫一個變量,即表示將此變量的值賦值到變量FLD01 中。
數(shù)字型變量的賦值同樣也是使用CHGVAR 語句。
當變量中只包含數(shù)字時(0—9),數(shù)字型變量與字符型變量可以使用CHGVAR
語句進行轉(zhuǎn)換,這一點與RPGLE 中的MOVE 語句比較類似。
IF--條件判斷語句
IF COND(&FLD01 *EQ '1')THEN(CHGVAR VAR(&FLD02)+
VALUE('0'))
當變量FLD01 等于’1’時,將變量FLD02 中的值更改為’0’
THEN 后面,即是當符合條件時,要執(zhí)行的命令。寫起來其實沒有看上去那么
復雜,多用F4 就會發(fā)現(xiàn)CL 程序?qū)懞唵巍?/p>
就比如上例,先寫IF,然后按F4,在Condition 處填寫條件語句,然后在
Command 處填上CHGVAR,再按F4,再去填相應的處理語句,這樣寫,就比直
接把整句抄下來就簡單多了。
上面這種寫法,只能在符合條件時,執(zhí)行一條CL 語句;如果要執(zhí)行多條,就
必須寫做:
IF COND(&FLD01 *EQ '1')THEN(DO)
CHGVAR VAR(&FLD02)VALUE(‘0’)
其它執(zhí)行語句
ENDDO 也就是THEN 后面,用DO,表示接下來的語句都是在這個IF 條件成立時才
執(zhí)行(DO)的。
然后結(jié)束處用ENDDO,必須要有。ENDDO 在這里和循環(huán)沒有任何關(guān)系,表
示的是ENDIF 的意思,但是CL 語句里沒有ENDIF,只有ENDDO。
IF 語句中,表示判斷的關(guān)鍵字與RPGLE 中的Ifxx 操作碼類似,有
*EQ *GT *LT *GE *LE *NE
用來表示邏輯關(guān)系的關(guān)鍵字有
*AND, *OR, *NOT
GOTO--跳轉(zhuǎn)語句
GOTO 語句與RPGLE 中的GOTO 是一樣的,都是跳轉(zhuǎn)的意思。
FHSTAG:
GOTO CMDLBL(FHSTAG)
注意,這里定義標簽是用“:” 冒號
MONMSG--監(jiān)控錯誤信息
我們使用CL 語句時,執(zhí)行的命令可能會報出一些異常錯誤,從而導致整個程
序中斷,需要手工干預。MONMSG 命令可以監(jiān)控我們預定的錯誤信息,使CL 程
序正常的向下運行。舉例而言,如果CL 程序中有如下語句:
CALL PGM(FHS01R)
MONMSG MSGID(CPF4131)
則表示當系統(tǒng)調(diào)用程序FHS01R 時,如果發(fā)現(xiàn)有CPF4131(聲明的文件重新編
譯過,但程序未重新編譯)的錯,那么CL 程序?qū)⒉粫惓V袛啵瑑H僅只是不運行
程序FHS01R,然后繼續(xù)向下執(zhí)行CL 程序
MONMSG 還可以用于在監(jiān)控到錯誤信息之后,進行處理,如下:
CALL PGM(FHS01R)MONMSG MSGID(CPF4131)EXEC(CHGVAR VAR(&FLD01)+
VALUE('0'))
這句話就表示當發(fā)現(xiàn)有CPF4131 的錯誤之時,將變量FLD01 賦值成為’0’
如果要執(zhí)行多句的話,和IF 語句的方法類似,也是使用DO 與ENDDO
MONMSG MSGID(CPF4131)EXEC(DO)
CHGVAR VAR(&FLD01)VALUE(‘0’)
其它處理語句
ENDDO
5.1.3 不常用的語法
%SST--取字符串
CHGVAR VAR(&FLD01)VALUE(%SST(&FLD02 3 1))
表示將字符變量FLD02,從第3 位開始,取1 位,左對齊賦值到變量FLD01 中。
%SST 的括號的參數(shù)中,第一個參數(shù)必須為字符型變量,第二個參數(shù)表示起始位,第三個參數(shù)表示要截取的長度。
*CAT--拼字符串
DCL VAR(&FLD01)TYPE(*CHAR)LEN(10)
CHGVAR VAR(&FLD01)VALUE('A' *CAT 'B')
即表示將10 位長的字符型變量賦值成為’AB ‘
‘A’,‘B’,也可以使用變量,如
CHGVAR VAR(&FLD01)VALUE(&FLD02 *CAT &FLD03)
要注意,*CAT 不能去掉字符串末尾的空,從效果上來看,有點類似于RPGLE 中的EVAL 操作碼,而不是CAT 操作碼
+、-、*、/--數(shù)學運算
數(shù)字型變量,可以進行數(shù)學運算 CHGVAR VAR(&FLD01)VALUE(&FLD01 + &FLD02)
即等同于RPGLE 程序中的 EVAL FLD01 = FLD01 + FLD0
2同理,-、*、/ 分別對應減、乘、除
不過數(shù)學運行常用于RPGLE 程序中,較少用在CL 控制里面,這里只是介紹一下。
讀取文件:(From Cuer:P1421)
DCL VAR(&FLD01)TYPE(*CHAR)LEN(2)
DCLF FILE(FHSLIB/PFFHS)
RCVF
CHGVAR VAR(&FLD01)VALUE(&FHS01)
以上這段CL 的意思,就是在CL 程序中讀取PFFHS 文件,然后將讀到的第一條記
錄賦值到CL 的臨時變量FLD01 中。
如果要將一個文件從頭讀到尾,則可以用如下語句來實現(xiàn):
DCLF FILE(FHSLIB/PFFHS)
LOOP:
RCVF
MONMSG MSGID(CPF0864)EXEC(GOTO CMDLBL(EXIT))
讀取到每條記錄后的處理語句
GOTO CMDLBL(LOOP)
EXIT:
也就是說,信息CPF0864,即表示未讀取到記錄。
在CL 程序中聲明文件使用DCLF 語句,一個CL 文件中只能聲明一個文件,聲明
語句必須在CL 控制語句之前。
使用聲明的文件中的字段,同樣需要在字段名前加上“&” ;
CL 程序中,無法控制游標,無法對記錄進行定位操作。所以CL 程序?qū)ξ募牟? 作是比較弱的,通常我最多只用來讀取某些只含少量記錄的參數(shù)文件。
5.2 CMD
CMD 是用來生成命令的,執(zhí)行后可以像其它系統(tǒng)命令一樣,直接輸入命令,或是F4,不需要像CLP 一樣,要CALL 一下。
其實CMD 本質(zhì)上也是執(zhí)行CLP 或RPGLE(在編譯時指定),用起來,無非就是好看點,直接一些,除此之外的意義,似乎也就沒什么了。
舉個例子,比如我們查看一個文件中的內(nèi)容時,可以使用SQL 來查看,也可以使用命
令RUNQRY 命令來實現(xiàn)(RUNQRY QRYFILE(文件名))。但在我們要頻繁查看文件
時,這兩種方式似乎都不是很爽,也就是說要輸入的內(nèi)容都不是最少的,那我們可以設(shè)計一
個CMD,譬如說叫SEE,希望實現(xiàn)的最終效果,是在命令行輸入“SEE 文件名”,就
可以查看PF 文件中的記錄。那么,我們按如下步驟來實現(xiàn):
1.建立一個CLP 程序,比如叫SEECLP,代碼如下
PGM PARM(&FILENAME)
RUNQRY QRYFILE(&FILENAME)
ENDPGM
2.編譯此程序
3.建立一個CMD 程序(即源代碼的屬性為CMD),代碼如下:
CMD PROMPT(' 顯示文件記錄 ')
PARM KWD(NAME)TYPE(*CHAR)LEN(10)MIN(1)+
CHOICE(' 顯示文件記錄內(nèi)容 ')+
PROMPT('Display file record')
4.編譯此CMD,用F4,可見如下畫面:
Create Command(CRTCMD)
Type choices, press Enter.Command............> SEE Name
Library...........> FHSLIB Name, *CURLIB
Program to process command...> SEE Name, *REXX
Library...........> *LIBL Name, *LIBL, *CURLIB
Source file..........> FHSFILE Name
Library...........> FHSLIB Name, *LIBL, *CURLIB
Source member.........> SEE Name, *CMD
Threadsafe...........*NO *YES, *NO, *COND
其中,藍色字體顯示的,就是我們需要輸入這個CMD 要調(diào)用的程序名(默認值與
CMD同名),這里我們將此項內(nèi)容填為SEECLP,表示SEE 這個CMD,調(diào)用的是SEECLP
這個程序
5.編譯成功之后,我們在命令行執(zhí)行“SEE 文件名”,就可以看到指定文件的記錄。也可以用SEE + F4 的方式來使用
6.要注意,CMD 中,PARM 表示的就是CMD 命令的參數(shù),參數(shù)的個數(shù)、類型、長
度都必須與其調(diào)用的程序相匹配,但名稱可以與其調(diào)用的程序中的參數(shù)名稱不一
樣,而且名稱前面不能有“&”字符。
7.在PARM 參數(shù)中,MIN(1),表示該項參數(shù)必須有值(即最小的有效長度為1),當
參數(shù)無值時,將會自動出現(xiàn)SEE + F4 的效果,同時該項參數(shù)高亮顯示。試一試
就知道了
第二篇:《程序員崗前培訓手冊》
程序員崗前培訓手冊
北京應用技術(shù)大學
目錄(CONTENTS)
前言
面試是雙向選擇
軟件公司研發(fā)技術(shù)崗位掃描與崗位職責
如何快速融入技術(shù)團隊(程序員入崗的注意事項)優(yōu)秀程序員應具有的品質(zhì)與習慣 談談學習方法
外包軟件、商品軟件、項目軟件簡介
前言
同學們經(jīng)過在北京應用技術(shù)大學兩年的學習,都滿懷憧憬地向往程序人生的開始,也對即將走上的工作崗位和環(huán)境充滿了期待,期待通過程序來證明自我的價值。程序員,相信在很多同學眼中是一個有趣、特別、高薪、充滿艱辛而又非常神秘的職業(yè),因為手下那一行行跳動的代碼不僅實現(xiàn)了生動的功能,同時也表達著程序員對人生的理解和追求。當程序員實現(xiàn)了一個獨到的創(chuàng)意之后準備熄燈休息時,天已蒙蒙亮…..當程序員看著用戶熟練地操作自己的軟件解決一個個復雜事件時,臉上那寫滿成就的微笑…..的確在這個行業(yè)里出現(xiàn)了太多的英雄人物和企業(yè),而每一個英雄的事跡和成就都足以讓我們熱血沸騰、摩拳擦掌……
在同學們即將步入程序員崗位之前,需要對軟件研發(fā)相關(guān)職位的職責范圍與工作特點有所了解,掌握一些入職的基本技巧和注意事項,檢查自己的技能與行為習慣,有的放矢,提高面試和就業(yè)的成功率。入職后能盡快地融入到技術(shù)團隊,近而快速成長,成為團隊技術(shù)骨干和最優(yōu)秀的職員。在工作中養(yǎng)成積極而良好的行為習慣和職業(yè)素養(yǎng),為自己的職業(yè)發(fā)展創(chuàng)造一個良好的開端。
本手冊從面試、技術(shù)崗位職責、如何快速融入技術(shù)團隊、優(yōu)秀程序員的品質(zhì)與習慣、學習方法、外包軟件/商業(yè)軟件/項目軟件簡介等幾個方面闡述了同學們在踏入工作崗位之前應該了解的知識和注意事項。
面試是雙向選擇
一般同學都會誤認為面試時應聘者處于弱勢,要接受招聘者的挑選,從而從心理上承受很大的壓力,而影響自己正常的發(fā)揮和才能展示。其實大可不必,因為面試是雙向的,選人和擇業(yè)是平等的。況且現(xiàn)在市面上的用人單位或招聘崗位也是良莠不齊,甚至還有一些騙子公司,這就要求同學們在應聘時擦亮眼睛,注意分辨。當然大多數(shù)公司都是良性的,他們要么是已具規(guī)模,各部門及崗位功能分工很明確,他們會根據(jù)業(yè)務的發(fā)展或作為人才儲備而有針對性的招聘相關(guān)技術(shù)人員,而有的公司可能是剛剛成立,業(yè)務與核心技術(shù)還未形成,他們需要招聘到能為他們提供解決方案或創(chuàng)意的技術(shù)人員,所以對于這些類型的公司,他們對人才的渴求也都不亞于同學們對工作崗位的渴求,若是聘到一個優(yōu)秀的技術(shù)人員對業(yè)務或項目的推進將會使公司獲得更大的利益,或者使公司的發(fā)展少走彎路甚至能改變一個公司的命運。相反,如果招不到合適的人才或者使用一個較差的技術(shù)人才,不但不能推進項目的進展,還要花費幾個月的培養(yǎng)時間和費用,甚至阻礙業(yè)務開拓甚至項目擱淺。所以當同學們想得到一個工作崗位的同時,也要看到企業(yè)更需要一個優(yōu)秀的員工,二者是平等的。在面試時,同學們在一種非常平和的心態(tài)下,充分發(fā)揮,盡可能地展示自己已經(jīng)掌握的技能,展示學習能力和發(fā)展?jié)撃埽涣硪环矫嬉惨M可能地提前了解公司的背景和業(yè)務以及應聘崗位的職能,從而加以辨別和選擇。一旦本次面試不能成功,表明要么崗位不適合你,要么你不適合崗位,或者因為你本次的表現(xiàn)不佳,這都是很正常的,一定不要有挫敗感,要及時總結(jié)面試時的表現(xiàn)方式以及溝通技巧,若感覺自己的確能夠勝任該崗位,只是因為自己的臨場發(fā)揮不佳而沒有展示出自己的實際水平,也可及時和招聘公司聯(lián)系,經(jīng)詢問確認對方?jīng)]有找到合適人選的情況下,表明誠意,請求復試機會??傊?,若本次失敗,一定不要影響下一次的面試,要積極總結(jié),為一下次面試作準備。
正常運營的公司因業(yè)務的不斷發(fā)展,人才需要不斷的更新、補充和儲備,所以他們一直都需要人才,況且公司每次組織招聘都會花費一大筆費用,也希望能夠找到合適的人才,所以公司面試時一般不會出太吊鉆的問題來為難你,同學們也不要過分擔心。
另一方面,同學們在堅信“天生我才必有用”的同時,也要正確看待現(xiàn)在的就業(yè)形勢,對第一份工作也不要過于理想化,要擺正心態(tài),堅持從基層做起,先就業(yè)再擇業(yè),職場上“騎驢找馬”也未必不是一種現(xiàn)實的理性選擇。
總之,面試是雙向性的,是招聘單位與同學們相互展示、相互認識、互相挑選的一次溝通過程。同學們 在求職的過程中,要正確看待面試,放下思想包袱,充分重視,充分準備,從容應對。
軟件公司研發(fā)技術(shù)崗位掃描與崗位職責
一般中小型軟件公司設(shè)置的技術(shù)崗位有:研發(fā)總監(jiān)、項目經(jīng)理、需求分析人員、系統(tǒng)架構(gòu)與分析人員、數(shù)據(jù)庫設(shè)計人員、程序員、項目助理與文檔專員、測試人員、技術(shù)支持(售前/售后)、美工或網(wǎng)站前臺人員等,這些職位的工作聯(lián)系非常密切,根據(jù)公司規(guī)模的大小,以上職位可由一人或多人兼任,比如一個小型的軟件公司可能只有一個人完成軟件的總體設(shè)計、架構(gòu)、編碼、測試、文檔等工作。這些崗位的職責范圍大致是:
研發(fā)總監(jiān):全面負責研發(fā)及技術(shù)部門的整體工作。
項目經(jīng)理:在整個項目開發(fā)過程中組織項目所需的各項資源,對項目的范圍、項目的質(zhì)量、項目時間以及項目成本進行管理與控制。根據(jù)項目范圍、質(zhì)量、時間與成本的綜合因素的考慮,進行項目的總體規(guī)劃與階段計劃,保證項目組目標明確且理解一致;在項目生命周期的各個階段,跟蹤、檢查項目組成員的工作質(zhì)量;保證項目在預算成本范圍內(nèi)按規(guī)定的質(zhì)量和進度達到項目目標。
需求分析人員:項目前期與客戶方打交道最多的人,對于客戶來說,他可以代表整個項目組,對于項目組成員來說他的意見可以代表客戶方的意見,項目組內(nèi)所有與客戶需求相關(guān)的事情必需得到他的認可。他的工作主要是:
1、在項目前期根據(jù)《需求調(diào)研計劃》對客戶進行需求調(diào)研。
2、收集整理客戶需求,負責編寫《用戶需求說明書》。
3、代表項目組與用戶溝通與項目需求有關(guān)的所有事項。
4、代表客戶與項目組成員溝通項目需求有關(guān)的所有事項。
5、負責《用戶需求說明書》得到用戶的認可與簽字。
6、負責將完成的項目模塊給客戶做演示,并收集對完成模塊的意見。
7、完成《需求變更說明書》,并得到用戶的認可與簽字。
8、協(xié)助項目組有關(guān)人員對需求進行理解。
系統(tǒng)架構(gòu)與分析人員:是項目的總體設(shè)計師,組織構(gòu)建新產(chǎn)品的開發(fā)與集成、新技術(shù)體系等,也可以理解為技術(shù)總監(jiān)。是在技術(shù)上對所有重要事情做出決定的人。系統(tǒng)架構(gòu)在整個軟件開發(fā)過程中都起著非常重要的作用,并隨著開發(fā)進程的推進而其職責或關(guān)注點不斷地變化。
1、在需求階段,負責理解和管理非功能性系統(tǒng)需求,比如軟件的可維護性、性能、復用性、可靠性、有效性和可測試性等。審查客戶和市場人員所提出的需求,確認開發(fā)團隊所提出的設(shè)計;組織開發(fā)團隊成員和開發(fā)過程的定義;協(xié)助需求分析師完成《用戶需求說明書》、《需求變更說明書》等。
2、在設(shè)計階段,負責對整個軟件架構(gòu)、關(guān)鍵模塊、接口的設(shè)計。對系統(tǒng)進行分析與建模,完成《系統(tǒng)架構(gòu)說明書》、《系統(tǒng)概要設(shè)計說明書》、《系統(tǒng)詳細設(shè)計說明書》。
3、編碼階段,成為程序員的顧問,負責重點代碼檢查,并且經(jīng)常性地要舉行一些技術(shù)研討會、技術(shù)培訓班等;
4、測試及實施階段,隨著軟件開始測試、集成和交付,集成和測試支持將成為工作重點;
數(shù)據(jù)庫設(shè)計人員:根據(jù)《系統(tǒng)架構(gòu)說明書》負責進行數(shù)據(jù)庫選型與建模。由于數(shù)據(jù)庫是整個系統(tǒng)運行的核心,數(shù)據(jù)庫設(shè)計的好差直接影響著整個系統(tǒng)的開發(fā)效率和系統(tǒng)運行的優(yōu)劣。他是項目組中唯一能對數(shù)據(jù)庫進行直接操作的人,對數(shù)據(jù)庫結(jié)構(gòu)的每一次改動都要得到他的認可。主要職責:
1、根據(jù)數(shù)據(jù)庫建模結(jié)果,繪制數(shù)據(jù)庫關(guān)系圖。進行數(shù)據(jù)庫建庫以及數(shù)據(jù)庫進行初始化操作。
2、對數(shù)據(jù)庫進行維護、備份、恢復、同步。
3、負責客戶數(shù)據(jù)的導入導出。
4、根據(jù)《系統(tǒng)詳細設(shè)計說明書》編寫對應的視圖、存儲過程、函數(shù)、觸發(fā)器等。
5、對項目組其它成員進行SQL方面的指導。
6、為測試建立相關(guān)測試數(shù)據(jù)。
程序員:負責系統(tǒng)的最終代碼實現(xiàn)。主要職責:
1、參與需求調(diào)研、項目可行性分析、技術(shù)可行性分析和需求分析。
2、協(xié)助完成《系統(tǒng)詳細設(shè)計說明書》,并根據(jù)《系統(tǒng)詳細設(shè)計說明書》進行編碼實現(xiàn);
3、對自己代碼進行復查,并進行簡單的測試。
4、撰寫相關(guān)技術(shù)實現(xiàn)或功能描述文檔。
5、負責向項目經(jīng)理及時反饋軟件開發(fā)中的情況,并根據(jù)實際情況提出改進建議。
6、參與軟件開發(fā)和維護過程中重大技術(shù)問題的解決。
項目助理或文檔專員:協(xié)助項目經(jīng)理在項目日常管理和數(shù)據(jù)分析方面的工作,進行與項目有關(guān)的協(xié)調(diào)工作,編寫項目進度報表,參與組織項目協(xié)調(diào)會,組織項目非技術(shù)文檔的編寫、傳遞與歸檔,以及與市場人員或其他部門的日常溝通,協(xié)助項目資源協(xié)調(diào)工作。跟蹤項目進展。項目或軟件包的打包、發(fā)布以及授權(quán)鎖的制作等工作。
測試員:負責實施軟件測試。測試是整個項目系統(tǒng)中非常重要的一個環(huán)節(jié),項目質(zhì)量的保證,他的主要工作就是找到項目中存在的不合理、不合格的部份,并要求項目其它成員按其給定的項目質(zhì)量完成項目。保證了系統(tǒng)功能實現(xiàn)是否與功能設(shè)計和需求定義一致。主要職責:
1、根據(jù)軟件項目規(guī)范編寫測試計劃,設(shè)計測試數(shù)據(jù)和測試用例。
2、采用合適的測試方法實施軟件測試,形成各階段的測試報告,并對軟件問題進行跟蹤分析和反饋,推動測試中發(fā)現(xiàn)問題及時合理地解決。
3、完成對產(chǎn)品的集成測試與系統(tǒng)測試,對產(chǎn)品的功能、性能及其他方面的測試負責。
4、協(xié)助程序員進行軟件代碼檢查,提出對軟件的進一步改進的要求。
技術(shù)支持人員:主要負責軟件產(chǎn)品或項目在技術(shù)層面上與客戶的交流,根據(jù)工作重點分為售前支持和售后支持。
? 售前支持:是銷售人員和開發(fā)人員的橋梁,協(xié)調(diào)銷售人員、用戶、開發(fā)人員的關(guān)系,制作產(chǎn)品功能演示PPT文檔或多媒體資料,將公司的技術(shù)實力向用戶展示,技術(shù)標書的撰寫,定期采集、分析和整理用戶的需求,配合銷售制訂產(chǎn)品銷售策略,從技術(shù)上支持市場銷售業(yè)務等。
? 售后支持:負責編寫《用戶手冊》、《操作手冊》,制作系統(tǒng)操作視頻教程等多媒體培訓教材;負責系統(tǒng)實施(包括系統(tǒng)安裝、用戶培訓、系統(tǒng)試運行等),協(xié)助用戶進行“用戶確認測試”和編寫《確認測試報告》;通過電話、網(wǎng)絡(luò)、及時通訊等多種渠道解答用戶在使用中的問題,提供售后服務。收集、整理用戶的建議等。
美工或網(wǎng)站前臺人員:負責完成軟件設(shè)計師安排的功能界面設(shè)計和簡單網(wǎng)站的設(shè)計。
1、負責對項目整體色彩的調(diào)配。
2、向系統(tǒng)分析師提出項目美化的建議。
3、為BS 項目提供一套或幾套CSS樣式表及HTML結(jié)構(gòu)表
4、為CS項目提供符合項目內(nèi)容的靜態(tài)、動態(tài)圖片。
5、并為程序員提供界面指導。
如何快速融入技術(shù)團隊
——程序員入崗的注意事項
同學們剛剛結(jié)束學校的集體生活,面對新的工作環(huán)境、新領(lǐng)導、新同事、新任務、新的制度、新的生活節(jié)奏,很多的變化需要你盡快適應,很多的事情需要你獨擋一面,而又有許多事情需要你與同事通力協(xié)作來完成…… 以下是新程序員入職后盡快融入技術(shù)團隊應注意的事項:
1、認真學習公司的發(fā)展背景與歷程、主營業(yè)務以及規(guī)章制度。
進入公司前可能對公司已經(jīng)有了一些了解,入職后,相關(guān)人力資源管理部門會組織培訓,解讀公司文化,介紹公司發(fā)展背景、主要職能部門以及主要業(yè)務特點,學習公司考勤、人事、辦公等管理規(guī)定和規(guī)章制度。有些新入職的程序員或技術(shù)人員,認為這些不含技術(shù)成分沒有必要花精力去學習,其實這種認識是錯誤的,公司文化及各種制度是整個公司的靈魂,是公司正常經(jīng)營活動保障和員工行為的一種約定,新職員只有對公司的發(fā)展背景和經(jīng)營狀態(tài)有充分的了解,接受公司文化,高度認同公司的核心價值觀,嚴格遵守各種規(guī)章制度,才能自覺地規(guī)范自己的行為習慣,在工作學習中才有主動性,遇到工作壓力時也能坦然地接受,不會有抵觸心理,從而能更快地推動自己的工作。
2、積極學習業(yè)務知識、類庫及現(xiàn)有程序資源,把握學習的技術(shù)方向。
程序員入職后,若有一個成熟的開發(fā)團隊,一般都會有一個老職員來帶領(lǐng)學習,這一階段主要有三個方面的學習任務,第一是公司業(yè)務知識,因為程序員只有對業(yè)務知識熟悉了,才能更好的理解和把握功能需求,比如做通信方面的軟件,你要學習一些通信行業(yè)知識;若做財務軟件,你要了解一些財務知識。第二,現(xiàn)有的類庫是公司開發(fā)部門積累的程序資源,學習和使用它可以規(guī)范統(tǒng)一程序的風格,提高開發(fā)的速度,掌握并能使用這些資源,可使你盡快與老職員有程序上的共同語言。第三,學習并加強在此領(lǐng)域的編程技能,因為在學校學習的是通用的知識,掌握的是一種知識導入與學習的方法,那么在公司應用方面也許要求你某一個方面很精通,比如網(wǎng)站的前臺、數(shù)據(jù)庫、圖形處理、多媒體、網(wǎng)絡(luò)編程等某些方面的技能需要強化。案例:
小張(男)和小胡(女)是同一個大學畢業(yè)的應屆生,在2005年4月份同時進入公司做技術(shù)支持,當時兩人的工資都是每月1500元,而兩年后的今天小胡已是研發(fā)部的一個程序員,工資是每月4300元,而且是公司重點培養(yǎng)的對象之一。小張現(xiàn)在還是在做技術(shù)支持,工資是每月2600元,他們兩人可以說是起點相同,但兩年的發(fā)展卻讓他們有了明顯的差距,小胡比較愛學習,工作非常踏實,對業(yè)務知識也掌握得非常精通,而且在做技術(shù)支持工作的時候,業(yè)余時間學習編程,由于做技術(shù)支持與程序員交流比較多,小胡抓住了這個學習編程的機會,但她從不在公司上班時間學習程序,在做技術(shù)支持工作時,她上班時間鉆研業(yè)務知識、軟件需求、學習程序?qū)崿F(xiàn)的思想,業(yè)余時間練習代碼。在做技術(shù)支持一年后,她通過了研發(fā)部的考核,進入研發(fā)部開始做編程。而小張與她對比就不同了,他只是做好本質(zhì)工作,沒有潛心學習,對業(yè)務知識、軟件知識只是一般了解,工作上很業(yè)績平平,總體上不出色也沒出大的差錯。工資漲得當然也慢,小張和小胡的起點相同,但小胡比較主動學習,很明顯他們兩個在職場上的差距就拉開了。
3、展示進步,創(chuàng)新思考,體現(xiàn)價值。
入職之初,通過積極的學習與適應,應該說進步是非常快的,要及時的總結(jié),并把工作學習的總結(jié)和進步程度及時向主管匯報(口頭、郵件、書面),階段工作總結(jié)應包括以下幾點:已經(jīng)完成的工作、技術(shù)上的進步、業(yè)務上的進步、從學生到職員心態(tài)上的轉(zhuǎn)變、八小時之外的學習狀態(tài)等。這樣一方面可以疏理一下知識結(jié)構(gòu),把握自己的學習階段,一方面讓主管根據(jù)你的知識結(jié)構(gòu)和技能狀態(tài)有針對性地給你分配合適的任務。
另外在工作當中也要注重思考,對工作進行適當?shù)母倪M,并提出改進意見,這樣能更快是體現(xiàn)出你的進步和工作價值。
4、積極參加團隊活動,適應團隊文化,創(chuàng)造與團隊成員友好而積極的協(xié)作氛圍。
能盡快適應團隊文化,與同事友好溝通是任何崗位都需要的職業(yè)素質(zhì),只是在研發(fā)團隊里要顯得尤為重要,由于研發(fā)工作的重要與特殊性,若在軟件商品化和產(chǎn)品化的開發(fā)階段,不良的溝通協(xié)作可能導致項目的流產(chǎn)。另外,部分程序員寫程序久了都會很注重與機器或代碼交流,有的不容易與新職員交流,有的他們因有大量的工作任務而顧不上,有的是因為他們有太多的思想與創(chuàng)意,和一個新來的職員沒有共同語言,有的是人為設(shè)置“技術(shù)壁壘”(因擔心新職員威脅到自己的崗位,而不愿傳授一些知識)。那么新職員一定不要因為他們沒有主動與你交流而放棄交流,或者認為自己被冷落而與逐漸遠離團隊,而是要在適當?shù)臅r間與他們主動交流,主動向他們請教,積極參加團隊的集體活動,創(chuàng)造與同事交流合作的良好氛圍。要盡可能地為團隊多做貢獻,不要因為多干一些工作或多加一點班,就有不良的情緒,從而影響正常的溝通與交流。另外,在研發(fā)團隊里的溝通與協(xié)作,還體現(xiàn)在代碼上,自己設(shè)計的功能模塊是否能為別人提供良好的說明和程序接口??傊c同事友好愉快的協(xié)作,盡快融入研發(fā)團隊,是新入職的程序員技術(shù)快速進步和穩(wěn)定職位的重要因素。
5、正確面對工作壓力,學會釋放“厭職”情緒。
許多同學進入一個新的工作環(huán)境,面對的是很多新事物,感覺工作節(jié)奏太快,工作壓力太大。其實新職員有工作壓力也是正常的,從職業(yè)生涯發(fā)展的角度來看,這種工作壓力是非常必要的。同學們在進入公司后,要勇于接受工作壓力,把這種壓力作為進入初職鍛煉的良好機會,樹立良好的心態(tài),不要逃避,更不要產(chǎn)生“厭職”情緒,公司還正在培養(yǎng)你,你卻選擇退縮而自炒“魷魚”。工作中要學會積極與同學溝通,注意工作方法,釋放和減輕壓力。其實我發(fā)現(xiàn)一些新職員說工作壓力大,做事不順心,仔細分析之后可以發(fā)現(xiàn)他們感覺的工作壓力大與“不合群”有很大的關(guān)系。有些同學到公司后,一坐下就是八小時,語言和行為與同事格格不入導致他不敢言語不敢行動,下班時間到了,其實他不是工作學習本身的累,他們感到更累的是“心”。這些新職員在工作中總是希望別人主動接近自己,自己卻不會主動與人交流,時間長了,同事覺得他“不愛說話”,也就逐漸放棄了與他的交往,這時他又會感到被排擠,感到孤獨,心理壓力就會增大。另外技術(shù)上單打獨斗,不能利用別人的資源,因此完成相同的工作,付出的努力和壓力就要比其他同事大得多。所以新職員在入職之初,一定要正確看待工作上正常的工作壓力,學會與團隊成員友好相處,創(chuàng)造一種“如魚得水”的工作氛圍,那么真正技術(shù)上的壓力都不會成為問題的。
如果公司還沒有成熟的開發(fā)團隊,需要你一個人承擔開發(fā)項目,著手組建開發(fā)團隊,那么就要求你充分一切時間,利用網(wǎng)絡(luò)資源,有技術(shù)難點及時到網(wǎng)絡(luò)上尋求幫助,同時與相關(guān)部門人員密切合作,保持動態(tài)及時的溝通,及時報告工作進度,爭取盡快擬出解決方案或產(chǎn)品。
優(yōu)秀程序員應具有的品質(zhì)與習慣
? 善于理解與把握需求
程序員的勞動成果就是滿足需求的程序,那么在動手寫代碼之前,只有完整地理解一個模塊的需求才能做出好的程序,優(yōu)秀的程序員在分析需求的基礎(chǔ)上,應該能抓住問題的關(guān)鍵技術(shù),從而能夠建立合適的數(shù)據(jù)模型,盡量在代碼中少走“彎路”。? 善于學習與總結(jié)
當然善于學習,是對任何行業(yè)任何職業(yè)的最根本的要求,對于程序員,這種要求就更加高了。其實研發(fā)部門招聘程序員,其實并不一定注重你現(xiàn)在能做什么,而更注重的是你的學習能力、你的編程潛力,因為程序員是很容易被淘汰,很容易落伍的職業(yè),一種技術(shù)可能僅僅在三兩年內(nèi)具有領(lǐng)先性,若你不能跟進新的技術(shù),不學習新的技能,那么不斷出現(xiàn)的新技術(shù)會使你顯得非常笨拙。善于總結(jié),也是學習能力的一種體現(xiàn),每次完成一個研發(fā)任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結(jié),找到自己的不足,這樣逐步提高,才能成長起來。
? 規(guī)范化的編碼習慣
養(yǎng)成良好的編碼習慣,比如:變量命名清晰,語句嵌套明確,函數(shù)具有獨立功能,適當注釋等等,因為這些不但有助于代碼的移植和糾錯,也有助于不同人員之間的協(xié)作。? 良好的文檔習慣
良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),作為代碼程序員,30%的工作時間寫技術(shù)文檔是很正常的,而作為高級程序員和系統(tǒng)分析員,這個比例還要高很多。缺乏文檔,一個軟件系統(tǒng)就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。? 代碼復用性,模塊化思維能力
復用性設(shè)計,模塊化思維就是要程序員在完成任何一個功能模塊或函數(shù)的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統(tǒng)存在,是否可以通過簡單的修改參數(shù)的方式在其他系統(tǒng)和應用環(huán)境下直接引用,這樣就能極大避免重復性的開發(fā)工作,如果一個軟件研發(fā)單位和工作組能夠在每一次研發(fā)過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創(chuàng)新的代碼工作中去。? 團隊精神與溝通協(xié)作能力
這是程序員應該具備的最基本的,也是最重要的安身立命之本。軟件或項目的各模塊功能需求的理解準確,一個功能實現(xiàn)的修定,是否會影響其他模塊等,沒有充分及時的協(xié)作對一個項目來說幾乎是不可想象的。我做了幾年開發(fā),感覺溝通真的太重要了,其實軟件研發(fā)過程中最重要的不是技術(shù)問題,而是管理中的溝通問題,比如初級程序員或許是礙于面子或其他原因,不懂的問題也不想問,總是把問題掖著藏著,而高級程序員又不理解初級程序員的開發(fā)任務總是完不成,其實可能是高級程序員不了解初級程序員的真正困難,或者沒有把要實現(xiàn)的邏輯和思路講解清楚。合作起來總會有一些不透徹,要么一個問題討論多次依然是問題沒有結(jié)果,要么是有些問題根本不反映,大家都掖著藏著,報喜不報憂,待到問題暴露已無法挽回,嚴重的阻礙了項目的進度。所以我最好的建議就是,高級程序員應該把問題講到明白為止,初級程序員應該把問題問到明白為止,并且不僅僅是口頭上講明白、聽明白,還一定要形成文字,現(xiàn)在網(wǎng)絡(luò)非常方便,公司都會有企業(yè)郵箱,把問題的討論過程通過mail的形式記錄保存,明確確認,這樣障礙才能去除,項目才能得以順利進展。
案例1:
陳某是北京某重點大學自動化專業(yè)的畢業(yè)生,編程基礎(chǔ)知識非常扎實,在學校學習期間也有許多代碼積累,從技術(shù)上說應該是很有潛力的,但他性格有點孤僻,不太容易與同事溝通,當時錄用他時公司是看在他的編程基礎(chǔ)很好,以為在研發(fā)部大家多帶動他,應該會好些的。進公司有兩個多月了,一次在做某油田項目中負責其中一個小模塊的開發(fā),在開發(fā)過程中我經(jīng)常詢問他有沒什么問題,他每次都有些含糊地說沒有。可當項目交付的時候,發(fā)現(xiàn)他做的某一功能與當初功能定義不符,客戶就抓住這一點說與合同中需求描述不符,由此延期支付28萬的余款,使該項目后期維護起來非常被動。而導致這一結(jié)果就是陳某在做程序時有問題自己繞過去了,沒有及時與項目組成員交流,而獨自采用了他熟悉的一種解決辦法。項目匯報會剛結(jié)束,人事部門就通知陳某交接工作,到財務結(jié)算工資…..文摘:下面這故事《請按一下九層》我一直和我的同事們分享。是《讀者》中的一篇文章: 這是全市最忙的一部電梯,上下班高峰時期,和公共汽車差不多,人挨著人。上電梯前和公司的人力資源總監(jiān)相遇,說笑間,電梯來了,我們隨人群一擁而進。每個人轉(zhuǎn)轉(zhuǎn)身子,做一小小的調(diào)整,找到了一種相對融洽的關(guān)系。這時,一只胳膊從人逢中穿過來,出現(xiàn)在我的鼻子前頭。我扭頭望去,一個小伙子隔著好幾個人,伸手企圖按電鈕。他夠得很辛苦,好幾個人剛剛站踏實的身子不得不前挺后撅,發(fā)生了一陣小小的騷動。
那個人力資源總監(jiān)問道:“你要去哪一層?”“九層。”有人抬起一個手指頭立刻幫他按好了。沒有謝謝。
下午在樓道里又碰到那個人力資源總監(jiān)?!斑€記得早上電梯里那個要去九層的小伙子嗎?”她問我。
“記得呀,是來應聘的吧?”九層,人力資源部所在地?!皼]錯,挺好的小伙子,可我沒要他?!薄盀槭裁??”
“缺少合作精神?!彼冻鲆桓睂I(yè)HR的神情,“開口請求正當?shù)膸椭鷮λ麃碚f是件很困難的事情,得到幫助也不懂得感激。這種人很難讓別人與他合作?!?/p>
我點頭稱是。如果那個小伙子坦然而自信地說一句“請按一下九層”,結(jié)果會怎樣呢?大家不但不會反感他的打擾,而且?guī)椭娜诉€會心生助人的快樂,最后他也能得到想要的工作。
這個故事表明,良好溝通不僅僅體現(xiàn)在禮貌地說聲“請”、“謝謝”,而是一個職員能夠創(chuàng)造愉快、高效、和諧工作氛圍的素質(zhì)和習慣。
? 時刻修定自己的認識和行為與公司的核心價值觀(短期目標、長期目標)保持一致
公司或研發(fā)團隊在什么時段做什么樣的項目,或者根據(jù)項目進度的計劃,在什么時間做什么功能模塊,作為程序員要高度地與這些目標保持一致,不要在關(guān)鍵時刻“掉鏈子”,這是最重要的。
案例:
小張是公司里的轉(zhuǎn)正不久的程序員,很聰明,對新技術(shù)接受很快,缺點就是非常的貪玩,對項目組的事缺乏主動性和責任心,平時的工作中主管已經(jīng)提醒過他多次要注意工作的責任心,但他都不太放在心上,對事依然是敷衍。一次在做上海鐵通的項目中,小張負責項目中的一個模塊,當軟件架構(gòu)出來以后,需要出差上海為客戶現(xiàn)場演示和進一步確認需求,由于合同還沒有正式簽下來,所以此行的技術(shù)交流對公司能不能簽下這個項目至關(guān)重要,公司派由我和小張在內(nèi)的項目組4人出差上海,臨行前我們多次開會研究方案,確保拿下這個項目,下午到了上海之后約好第二天上午與客戶見面,正當大家為第二天的交流捏一把汗,積極準備的時候,小張卻說是第一次到上海,要求先去外灘看夜景,在得到項目組的否定之后,小張竟一個人偷偷到外灘看夜景至到深夜才回到賓館。第二天的技術(shù)交流會上,小張負責的模塊問題最多,雖然最后整個項目的交流還算成功,公司總算簽下了這個項目,但小張也被辭退了。原因很簡單,小張一直沒有把公司的事放在心上,項目組出差第一目標是與客戶交流好,拿下項目,而小張出差上海的第一目標是看一下外灘。所以象小張這樣的技術(shù)上不管有多么出色,但總在公司的關(guān)鍵時刻“掉鏈子”,被公司辭退也是早晚的事。就在寫此案例的前幾天,在地鐵上我偶遇小張,談話中得知他被辭退后半年內(nèi)又經(jīng)歷了一家公司。而此刻他又在匆匆地找工作。
談談學習方法
說起學習的方法,其實每個人都有自己的學習方法,也許這種方法對我來說有用,但不見得就對所有的人有用。所以,不要盲目的跟著別人的學習方法學習,要思考屬于自己的學習方法。但以下幾個原則是要遵守的: ? 堅持學習。首先要有毅力,對編程的狂熱也可以在一定程度上起到幫助。學習編程應該說要經(jīng)歷好奇——困難——容易——郁悶——成就感——困惑——輕松的幾個階段的循回,不管哪個階段都需要天天學習,堅持每天都要進步,不能半途而廢,培養(yǎng)一種堅持克服困難的毅力。案例: 記得開發(fā)團隊里有一個基礎(chǔ)不是太好的程序員,剛?cè)肼殐蓚€多月,表現(xiàn)一般,有一天早上他眉飛色舞地在講述昨天電視中的一個情節(jié),我聽到后就說了一句:“你還好意思說你看電視?”。他立刻明白了,就沒說什么。從此他的進步是可以說是突飛猛進的,代碼的質(zhì)量和工作效率明顯上了一個臺階,對項目的推動也是有目共睹的。幾個月后的一次公司慶典上,他被評為“進步最快員工獎”,獎金3000元。獎后在他給我的Mail中發(fā)現(xiàn)了這句話:“你說我看電視的那句話改變了我的學習狀態(tài)….我現(xiàn)在是馬桶上、公交車上都在看書或筆記?!?/p>
? 堅持實踐。當你學到了一種新的技術(shù)或知識時,多實踐是鞏固學習的一種最好最有效的方法。這個實踐不是照著書上的例子做一遍,而是根據(jù)自己的能力,給自己出題,然后去完成它。只有這樣,你才能發(fā)現(xiàn)自己的不足,同時又增加了編程經(jīng)驗。要成為合格的程序員,光會寫代碼是遠遠不夠的,更重要的是在實踐中思考創(chuàng)新。實踐的多少決定著“高手”和一般程序員界線,高手們并不是天才,他們是在無數(shù)個日日夜夜中磨煉出來的。成功能給我們帶來無比的喜悅,但實踐的過程卻是無比的枯燥乏味。
? 掌握編程思想。學一門語言,不能僅僅是語言,還要注重語言背后的思想方法,獲得提出問題,分析問題,解決問題的能力,不是為編程而學習,因為編程語言和我們?nèi)粘Kf的語言一樣,日常所說的語言是一種思想的表達,而編程語言是一種功能的實現(xiàn)。要學習它是如何來解決某一問題的,為什么要這樣去做,他總是要符合客觀事實的,存在某種邏輯,數(shù)據(jù)的組織,信息的傳遞,然后看該怎么樣用編程語言來表達自己的想法。
? 多問、多總結(jié)、多記筆記?!叭诵斜赜形?guī)煛保苍S在一次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。著名的交換蘋果理論說的是:“你有一個蘋果,我有一個蘋果,當我們互相交換蘋果后,我們?nèi)匀换サ靡粋€蘋果;你有一個想法,我有一個想法,當我們互相交換想法,我們則互得兩個想法”。遇到問題,上網(wǎng)查看一些技術(shù)論壇,看看別人對同一問題的看法,會給你很大的啟發(fā)。在這個網(wǎng)絡(luò)時代,資料到處都有,無論什么先進的技術(shù),你可以問身邊的高手,問網(wǎng)上的同仁,只要查到資料,快的學上幾天慢的一兩個月也能學會,學會后總結(jié)出技術(shù)要點記下來,可寫在本子上也可寫在Blog上,編程技能的提高靠的是代碼的積累,把所有自己的代碼保存起來,并附有適當?shù)墓P記,這樣,到用到時才能信手拈來,才能獲得踏踏實實的進步。所以現(xiàn)在已沒有寫不出的程序了,寫不出不是因為不夠聰明,而是因為你沒有耐心和找 BUG 的細心。
? 不鉆“牛角尖”,只抓主要問題,一些不影響工作的難點只要會用就行,這也體現(xiàn)了OOP的思想,你只要知道一個技術(shù)能完成什么功能就可以,至于它是如何實現(xiàn)的可暫時放一放,有時回過頭來再看就不是什么難點了。當你遇到技術(shù)障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當重新開始工作的時候,我會發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。
外包軟件、商品軟件、項目軟件的操作模式簡介
軟件外包
就是一些發(fā)達國家的軟件公司將他們的一些非核心的軟件項目通過外包的形式交給人力資源成本相對較低的國家的公司開發(fā),以達到降低軟件開發(fā)成本的目的。因為軟件開發(fā)的成本中70%是人力資源成本,所以,降低人力資源成本將有效地降低軟件開發(fā)的成本。軟件外包已經(jīng)成為發(fā)達國家的軟件公司降低成本的一種重要的手段。軟件外包的大幅度增長為人力資源成本相對較低的印度和中國帶來了新的發(fā)展機會。企業(yè)與企業(yè)之間的外包就是:企業(yè)(A)為了專注核心競爭力業(yè)務和降低軟件項目成本,將軟件項目中的全部或部分工作發(fā)包給提供企業(yè)(B)完成; 商業(yè)軟件 商業(yè)軟件(又叫“商品軟件”)就是由商業(yè)公司在調(diào)研大多數(shù)行業(yè)用戶的需求上開發(fā)的軟件,該軟件基本上能滿足這些用戶的需求,而且它的功能不會因個別或少數(shù)用戶的要求而改動。隨著互聯(lián)網(wǎng)的興起和軟件授權(quán)銷售方式的普及,商品軟件的銷售可軟件公司直銷、代理銷售、專業(yè)下載網(wǎng)站銷售等多種渠道,軟件授權(quán)許可的銷售模式往往是根據(jù)使用商品軟件的用戶數(shù)和安裝該軟件的計算機數(shù)來收取許可費用。項目軟件 就是軟件公司專門為某個客戶開發(fā)的軟件系統(tǒng),該系統(tǒng)由委托開發(fā)的客戶配合調(diào)研需求,“量體裁衣”,在關(guān)鍵階段雙方可派技術(shù)人員互相“滲透”,密切合作,共同完成系統(tǒng)的開發(fā)和實施以及運行。項目軟件與外包軟件的操作模式有相同性也有不同性。產(chǎn)品經(jīng)理與項目經(jīng)理
簡單地說,產(chǎn)品經(jīng)理是做正確的事,其所領(lǐng)導的產(chǎn)品是否符合市場的需求,是否能給公司帶來利潤的。而項目經(jīng)理是把事情做正確,把事情作得完美,在時間,成本和資源約束的條件下完成目標。項目經(jīng)理要對某個產(chǎn)品進行開發(fā)的管理,負責開發(fā)的進度,開發(fā)過程中的協(xié)調(diào)等有關(guān)開發(fā)方面的問題,他最大的目標是時間第一、立項目標達成第一。并不會很尊重產(chǎn)品本身的市場需求以及業(yè)務邏輯的問題。
而產(chǎn)品經(jīng)理是橫向管理的,也就是說他將負責某個產(chǎn)品或者某個產(chǎn)品線從商業(yè)計劃市場競爭開發(fā)需求推廣方案渠道策略等各個方面。產(chǎn)品經(jīng)理一個產(chǎn)品線從頭到尾的重要參與人。
第三篇:RPG AS400程序員培訓手冊
2.8.4.4 O--R
ON-ERROR(On-Error)
沒用過
OPEN {(E)}(Open File for Processing)打開文件
Factory 1 Operation Factory 2 Result HI LO EQ
OPEN 文件名
OPEN 后面的目標,必須是在當前程序中已聲明的文件名(不是文件的記錄格式名),而且在OPEN 操作之后,在程序結(jié)束之前之前,必須有對應的CLOSE 操作。
使用OPEN 操作,文件在聲明時,必須使用USROPN 關(guān)鍵字(詳見D 行說明)。
ORxx(Or)邏輯判斷—或
Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 IFGT FLD0
3FLD01 OREQ FLD0
2等價于
IF FLD01>FLD03 OR FLD01=FLD02
與IF、IFxx,AND、ANDxx 類似,RPGLE 的寫法OR,比RPG 的寫法ORxx 要靈活,而且可以用來表達一些復雜的邏輯關(guān)系。有鑒于此,所以通常IF 語句中,我會以O(shè)R 為主,基本不用ORxx。如果在編程序方面,公司/項目組無硬性要求,那我覺得還是少用ORxx 吧,總覺得這種寫法的邏輯關(guān)系看起來不直接,尤其是有很復雜的AND,OR 時。
OTHER(Otherwise Select)分支語句的判斷
與分支語句SELECT 一起使用,表示不符合上述所有條件時的操作,如下:
Factory 1 Operation Factory 2 Result HI LO EQ
SELECT
WHEN 條件判斷1 處理語句1
WHEN 條件判斷
2處理語句2
OTHER
處理語句
3ENDSL
在這個例子中,當滿足條件判斷1 時,運行處理語句1,運行結(jié)束后跳至ENDSL 處;
如果不滿足條件判斷1,則程序繼續(xù)向下執(zhí)行,判斷是否滿足條件判斷2。當滿足條件判斷2 時,運行處理語句2,跳至ENDSL;當不滿足
當不滿足條件判斷2 時,程序繼續(xù)向下執(zhí)下,當讀到OTHER 操作碼時,無條件運
行處理語句3(即當程序當前不滿足以上所以條件判斷時,則執(zhí)行OTHER 之后的語句。
處理語句允許有很多句;
條件判斷可以寫得很復雜,也允許對不同的字段進行判斷;比如說C 語言也有分支語
句switch,但是這個語句只能對一個字段進行分支判斷,ILE 語言與它不同,允許對不同的字段進行判斷
就我目前掌握的測試情況,上述的SELECT—WHEN--OTHER—ENDSL,其實也可以
寫做:
IF 條件判斷
1處理語句1
ELSEIF 條件判斷2
處理語句2
ELSE
處理語句3
ENDIF 即WHEN 與ELSEIF 是類似的,這樣說,應該可以明白了吧。
總之,SELECT—ENDSL 是一個很好用的語法,尤其是在表示很多不同的分支處理時。
OUT {(E)}(Write a Data Area)
沒用過,講數(shù)據(jù)域的。
PARM(Identify Parameters)定義入口參數(shù)
Factory 1 Operation Factory 2 Result HI LO EQR
*ENTRY PLIST
PARM FLD01
關(guān)于具體內(nèi)容講解,詳見前面所說“入口參數(shù)”一章。
允許做為入口參數(shù)的有:普通變量、結(jié)構(gòu)變量、數(shù)組變量
關(guān)于PARM、PLIST,還有一種在Factory 1,F(xiàn)actory 2 也填寫變量或指示器的用
法,不過我不知道它具體表示什么意思,也不知道該怎么用。請用過的來補充。PLIST(Identify a Parameter List)同上
POST {(E)}(Post)
沒用過
READ {(N | E)}(Read a Record)讀取記錄
1.基本語法:
Factory 1 Operation Factory 2 Result HI LO EQ
READ 文件記錄格式名 45 46
READ后面跟的,必須是聲明的文件記錄格式名;
LO 指示器表示鎖表指示器,當在指定的時間(CHGPF,WAITRCD 項可看到),需要讀取的記錄仍被鎖,將會打開LO 指示器,即*IN45=’1’;
EQ指示器為是否讀到指示器。當未讀到仸何記錄時,打開EQ 指示器,即*IN46=’1’
2.當文件在程序中,是用只讀的方式聲明時,READ 操作并不會造成鎖表; 如果文件在程序中是用修改的方式聲明,READ 操作成功后,該記錄被鎖;直到執(zhí)
行解鎖操作(UNLOCK,或UPDATE),或READ 該文件的其它記錄,才會解鎖
如果文件是用修改的方式聲明,但希望READ 操作不鎖表時,那么就用READ(N),即
Factory 1 Operation Factory 2 Result HI LO EQ
READ(N)文件記錄格式名 45 46
這樣讀文件,就不會鎖記錄,但是同時也不能修改記錄。如果需要修改記錄,那么 在修改之前(包括對文件字段賦值之前),還必須再對該記錄進行一次定位操作(比如
CHAIN、READ 語句均可)。也就是說,如果要修改記錄,必須先鎖住當前記錄(很合理吧)
3.當執(zhí)行READ 操作時,程序是根據(jù)游標當前在文件中所指向的位置,順序讀取下
一條記錄。關(guān)于游標是如何指向,還不是一個很簡單的問題,所以將會在下一章“數(shù)
據(jù)庫相關(guān)知識”中具體講解。
4.執(zhí)行READ 操作時,允許聲明的文件沒有鍵值。(即PF 文件)
READC {(E)}(Read Next Changed Record)
沒用過,讀下一次修改過的記錄?
READE {(N | E)}(Read Equal Key)讀取鍵值相等的記錄
語法與READ 操作碼大致一樣,這里不再重復,只說不同的:
假設(shè)程序中已聲明邏輯文件PFFHSL3(鍵值為FHS01+FHS02)
Factory 1 Operation Factory 2 Result HI LO EQ
FHSKEY KLIST
KFLD FLD0
1KFLD FLD02
FHSKEY SETLL FMTFHS DOW 1=1
FHSKEY READE FMTFHS 1
5IF *IN15=’1’
LEAVE
ENDIF
ENDDO
這段話的意思,就是定義組合鍵值FHSKEY,然后根據(jù)這個FHSKEY 在邏輯文件
PFFHSL3 中去定位,循環(huán)讀取PFFHSL3 中,F(xiàn)HS01、FHS03 與FLD01、FLD02 相等的記
錄。當讀取記錄結(jié)束,或鍵值不等時,退出循環(huán)(*IN15 是EQ 指示器)。如果將READE 操
作碼換成READ 操作碼的話(當然,F(xiàn)actory 1 處也就不能有值),就沒有“鍵值不等時退出
循環(huán)”這一層意思,只是讀不到記錄時就退出循環(huán),但有時我們使用邏輯文件,僅僅是需要
它的排序,而不需要讀不到鍵值相等的記錄就退出循環(huán)。所以說,使用READ 操作碼,還
是READE 操作碼,需要根據(jù)實際的要求來決定。
以上的Factory 1 處填寫值的系統(tǒng)處理,當READE 操作碼在Factory 1 處未填寫值時,系統(tǒng)實際上是將當前的值與讀到的上一條記錄的關(guān)鍵字進行比較,而不是與SETLL 時的鍵
值做比較(讀第一條記錄不做比較!),如果鍵值不等時,置EQ 指示器為1。也就是說,如果沒有與FHSKEY 鍵值相同的錄,那么系統(tǒng)并不是直接找開EQ 指示器,而是會一直保
持正常地往下讀,直到找到與讀到的第一條記錄關(guān)鍵字不同的記錄,才會打開EQ 指示器,所以要注意。
READP {(N | E)}(Read Prior Record)讀取記錄—游標上移
簡單來說,READ、READE 操作時,游標在數(shù)據(jù)文件中,是下移的;即讀完第一條記
錄,游標指向第二條記錄;讀完第二條記錄,游標指向第三條記錄,依此類推,直至最后一 條記錄。但READP 則正好相反,游標是上移的,即讀完第三條記錄后,游標指向第二條記
錄;讀完第二條記錄后,游標指向第一條記錄,直至讀完第一條記錄。一般來說,用READ、READE 的概率會比READP、READPE 的概率高得多,不過在某些情況下,使用READP 操作,又的確會很省事,這個一時間想不起例子來,大家可在編
程序時多實踐。
READPE {(N | E)}(Read Prior Equal)
雖然我沒用過,但猜想它應該就是指游標上移,按鍵值去讀取文件。與READP 的關(guān)系,就類似于READE 與READ 的關(guān)系。
REALLOC {(E)}(Re-allocate Storage)
沒用過
REL {(E)}(Release)
沒用過
RESET {(E)}(Reset)
將數(shù)據(jù)結(jié)構(gòu)賦值成為初始值。
注意是初始值,不是清空。如定義結(jié)構(gòu):
D FHSDS DS
D FHS01 10 INZ(’ABCD’)
D FHS02 5 INZ(’EFGH’)
那么,不管對該結(jié)構(gòu)如何賦值,當執(zhí)行語句: C RESET FHSDS
之后,F(xiàn)HS01 將會變成’ABCD,F(xiàn)HS02 將會變成’EFGH’,即恢復成為初始值。
RETURN {(H | M | R)}(Return to Caller)
RETURN 是程序結(jié)束。
在前面,“簡單的程序流程”中,我們講過,“SETON LR” 與RETURN 這兩句話一
起,做為程序的結(jié)束。這里,再詳細解釋一下兩者之間的區(qū)別,以及關(guān)系: 如果不寫RETURN,只寫“SETON LR”,程序執(zhí)行完最后一句之后,將會再從第一
句開始執(zhí)行,造成死循環(huán)。在簡單的程序流程這個例子中,程序原來只想修改讀到的第一條 記錄,而如果沒有RETURN 的話,將會把所有的記錄都修改掉,直到最后找不到可修改的記錄,然后系統(tǒng)報錯,異常中斷。(這種離奇的現(xiàn)象現(xiàn)在又測試不到了,可能是當時寫錯程 序了?把F 寫成了P?不管它,當是我寫錯了,總之RETURN 是表示程序結(jié)束,沒有
RETURN,主程序無可執(zhí)行的語句時,它也會結(jié)束;如果RETURN 出現(xiàn)在主程序的中間,那么RETURN 后面的語句將不會執(zhí)行)
如果只寫RETURN,不打開指示器*INLR,根據(jù)blogliou 所說 “程序不會強制將內(nèi)存
中的數(shù)據(jù)寫到磁盤中。400 缺省的是BLOCK 輸出,即數(shù)據(jù)記錄滿一個BLOCK 塊時才會將
這一組記錄寫到磁盤上。那么如果這時BLOCK 沒滿,數(shù)據(jù)信息不會立刻寫到磁盤上。之后 有其它作業(yè)用到該文件,讀取的數(shù)據(jù)就不完整?!?/p>
但如果文件有唯一鍵字,或記錄日志,必須同步寫時,其實BLOCK 實際被忽略,也就 是此時不會有錯。目前我們用的是MIMIX 備份,客戶實際上將所有的文件都列入日志,這
時不寫也不會出現(xiàn)上述錯誤。但為避免一些潛在的問題,養(yǎng)成良好的編程風格,建議將 SETON LR 與RETURN 一同,做為程序結(jié)束的標志。當然,如果某個程序頻繁被調(diào)用,且 不涉及文 操作時,可考慮不打開指示器*INLR,僅用RETURN 作為結(jié)束,這樣程序不
會被PURGE 出內(nèi)存,可提高調(diào)用效率。
如果沒寫RETURN,也沒有打開指示器*INLR,在編譯時,系統(tǒng)將會報40 級錯,說找
不到程序結(jié)束的語句,所以大可放心。ROLBK {(E)}(Roll Back)
1.基本語法
Factory 1 Operation Factory 2 Result
ROLBK
2.該操作碼無其它參數(shù),就是指對事務處理進行回滾操作。3.ILE 程序中,ROLBK 操作可隨時進行,也允許在沒有聲明COMMIT 類型的文件的情況下,仍進行ROLBK 操作(對該進程這前的事務進行確認處理)f
4.關(guān)于日志的確認回滾操作,在后面會另設(shè)專門章節(jié)講述。
2.8.4.5 S--Z SCAN {(E)}(Scan Character String)掃描字符串
掃描字符或字符串Factory 1 在目標字符串Factory 2 中是否存在Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 SCAN FLD02 N 26
FLD01 可以是字符,也可以是字符變量;可以是一位長,也可以是多位長。
當FLD01 在FLD02 中存在時,EQ 指示器打開,即*IN26=’1’,同時將FLD02 中的起始
位置,賦值給N;
當FLD01 在FLD02 中不存在時,EQ 指示器保持關(guān)閉狀態(tài),即*IN26=’0’,同時N=0
允許從FLD02 中的指定位置開始檢查:
FLD01 SCAN FLD02:2 N 26
如上句,即表示從FLD02 的第2 位,開始掃描。
在實際使用中,比如說我們判斷某個字符是否為數(shù)字,就可以先定義一個0—9 的常量,然后將要判斷的字符去SCAN 一下這個常量
SELECT(Begin a Select Group)分支語句
在操作碼“OTHER”中講過,為方便讀者,列出簡單語法如下:
Factory 1 Operation Factory 2 Result HI LO EQ
SELECT
WHEN 條件判斷
1處理語句1
WHEN 條件判斷2 處理語句
2OTHER
處理語句
3ENDSL
要注意,SELECT 操作碼,必須有對應的ENDSL 操作碼,否則編譯無法通過。
SETGT {(E)}(Set Greater Than)定位操作—大于
舉個例子吧,假設(shè)文件中有一個字段,是標識順序號的,1、2、3、4。即該字段為1,表示第一條記錄,該字段為2,表示第2 條記錄。那么: Factory 1 Operation Factory 2 Result HI LO EQSETGT 文件記錄格式名
READ 文件記錄格式名
這個READ 操作,READ 到的,是第3 條記錄。也就是說,SETGT 操作碼,會將游標
定位到大于鍵值的第一條記錄前。
在實際使用中,如果我們是按邏輯文件讀取,而且讀了一條記錄之后,對其鍵值相同的 記錄都不需要再讀取時,就可以用SETGT,不過需要注意,F(xiàn)actory 1 項,需要是與鍵值相
同的變量,即如果文件是使用多個字段做為鍵值,那么我們也需要先定義一個組合鍵值的變
量,然后Factory 1 處填寫這個組合鍵值的變量名。
當聲明文件的鍵值有多項時,F(xiàn)actory 1 項的鍵值,允許小于文件的鍵值,但順序必須
一致。即聲明的文件如果鍵值為:FHS01、FHS02、FHS03,那么我們在程序中定義三個類
型與之相同的變量FLD01、FLD02、FLD03,以下寫法都是有效的FLDKEY KLIST
KFLD FLD0
1KFLD FLD0
2KFLD FLD03 FLDKEY SETGT 文件記錄格式名
FLDKEY KLIST
KFLD FLD01
KFLD FLD02
FLDKEY SETGT 文件記錄格式名
FLD01 SETLL 文件記錄格式名
SETLL {(E)}(Set Lower Limit)定位操作—小于
語法與SETGT 相同,含義與SETGT 不同。SETLL 操作碼,會將游標定位到與鍵值相
等的第一條記錄之前,仍是上例,如果是 2 SETLL 文件記錄格式名
READ 文件記錄格式名
那么READ 操作碼讀到的記錄,就是第2 條記錄,看到了吧,和SETGT 不同。
SETLL 操作碼還可以用來簡單判斷當前鍵值是否存在有記錄,以PFFHSL3 為例(鍵值
為FHS01、FHS02)
Factory 1 Operation Factory 2 Result HI LO EQ
FHSKEY KLIST
KFLD FLD0
1KFLD FLD0
2EVAL FLD01=’01’
EVAL FLD02=’02’
FHSKEY SETLL 文件記錄格式名 44
當文件中有相應記錄時,EQ 指示器打開,即*IN44=’1’
當文件中無相應記錄時,EQ 指示器關(guān)閉,即*IN44=’0’(與CHAIN 正好相反,要注意)
而在這種用法中,SETLL 與CHAIN 的區(qū)別在于,CHAIN 是定位讀取了記錄,而SETLL 僅僅只是判斷該記錄是否存在。所以用SETLL 操作,不能修改記錄,也無法取出記錄的值。
只能判斷記錄是否存在。如果要修改記錄,或取出記錄的值,還需要有一個讀取定位的操作,如READ,或READE、READP 等(最常用的,應該就是READ 操作)
SETOFF(Set Indicator Off)關(guān)閉指示器
Factory 1 Operation Factory 2 Result HI LO EQ
SETOFF 10 11 1
2等價于
EVAL *IN10=’0’
EVAL *IN11=’0’
EVAL *IN12=’0’
在SETOFF 這個操作碼中,指示器填在HI、LO、EQ 哪里都沒關(guān)系,都是表示要被關(guān)
閉的指示器
SETON(Set Indicator On)打開指示器
Factory 1 Operation Factory 2 Result HI LO EQ
SETOFF 10 11 1
2等價于
EVAL *IN10=’1’
EVAL *IN11=’1’
EVAL *IN12=’1’
在SETON 這個操作碼中,指示器填在HI、LO、EQ 哪里都沒關(guān)系,都是表示要被關(guān)閉的指示器
SHTDN(Shut Down)
沒用過
SORTA(Sort an Array)沒用過
SQRT {(H)}(Square Root)開方
Factory 1 Operation Factory 2 Result HI LO EQSQRT 3 N
這時,N=3(因為3 的平方為9)9、3 都可以是數(shù)字型變量,或者直接是數(shù)字 SUB {(H)}(Subtract)減法操作
Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 SUB FLD02 FLD0
3SUB FLD02 FLD03
看過前面的ADD、MULT 操作碼,這里不用解釋也應該明白是什么意思了吧。那就不
多說了。
SUBDUR {(E)}(Subtract Duration)日期相減
1.減日期
Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 SUBDUR N:*Y FLD02
表示將日期型變量FLD01 減去N 年,賦值到日期型變量FLD02 中;
N 可以是一個數(shù)字型變量,也可以就是一個數(shù)字,N 允許為負數(shù) *Y,*M,*D(還有其它的參數(shù)值,可見ADDDUR,其中有詳細解釋)
2.判斷兩個日期型變量之間的天/月/年數(shù)
Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 SUBDUR FLD02 N:*D
這時,N 做為一結(jié)果變量,表示日期型變量FLD01 與FLD02 之間的天數(shù)
SUBST {(P | E)}(Substring)取字符/字符串 Factory 1 Operation Factory 2 Result HI LO EQSUBST FLD01:3 FLD02
表示從字段FLD01 的第3 位開始,取2 位,左對齊賦值到字段FLD02 中。
要求字段FLD01 的長度必須大于或等于3+2 位,否則程序會報錯。
可以嘗試用%SUBST 語句,也是等價的,如下
EVAL FLD02=%SUBST(FLD01:3:2)
表示的是同樣的意思。
起始位數(shù)3,取的長度2,在兩種寫法之下,都可以使用數(shù)字型變量來表達。
相比較之下,%SUBST 還有一種用法,就是對字符的指定位置賦值,這個就厲害了:
EVAL %SUBST(FLD02:3:2)=’01’
看到了吧,這句話就是說,使字段FLD02 的第3、4 位(即從第三位開始,兩位長)等
于“01”
TAG(Tag)定義標簽,與GOTO 同用
Factory 1 Operation Factory 2 Result HI LO EQ
FHSTAG TAG
TEST {(D | T | Z | E)}(Test Date/Time/Timestamp)
沒用過
TESTB(Test Bit)
沒用過
TESTN(Test Numeric)
沒用過
TESTZ(Test Zone)
沒用過
TIME(Time of Day)--取當前系統(tǒng)時間 Factory 1 Operation Factory 2 Result HI LO EQ
TIME FLD01
FLD01 可以是時間型或數(shù)字型變量
UNLOCK {(E)}(Unlock a Data Area or Release a Record)解鎖
Factory 1 Operation Factory 2 Result HI LO EQ
UNLOCK 文件記錄格式名
UNLOCK 是解鎖操作,在某種程度上,可以將UNLOCK 視為ROLBK,將UPDATE
視為COMMIT。即如果鎖定某條記錄,并對其字段進行賦值之后,使用UPDATE 語句,將
會把修改后的結(jié)果保存下來,即修改文件,而UNLOCK 語句則不會修改文件,即否認了之 前對文件字段做的賦值修改。
從程序的執(zhí)行效率上來講,UNLOCK 的執(zhí)行效率是高于UPDATE 的,因為UPDATE
操作時,系統(tǒng)需要對文件的每一個字段進行確認處理(DEBUG 時可以看到),而UNLOCK 就
是簡單的解鎖而已。
UPDATE(Modify Existing Record)修改記錄
語法與UNLOCK 一樣。
這里需要說明一下,在執(zhí)行UPDATE 的時候,必須先使用READ、CHAIN 等操作碼鎖
定一條記錄。如果未鎖住記錄,UPDATE 操作碼將會報錯。當執(zhí)行了UNLOCK、UPDATE、以及ROLBK 語句時,等于是解鎖,此時再執(zhí)行UPDATE 操作碼之前,必須再次鎖住記錄
操作;
WHEN {(M | R)}(When)分支判斷語句中的條件判斷
在操作碼“OTHER”,“SELECT”中都講過,仍列出簡單語法如下:
Factory 1 Operation Factory 2 Result HI LO EQ
SELECT
WHEN 條件判斷1 處理語句1
WHEN 條件判斷
2處理語句2
OTHER
處理語句
3ENDSL
WHENxx(When True Then Select)
上面的語法,是RPGLE 的語法,WHENxx 是RPG 的語法,也就是
SELECT
FLD01 WHENEQ FLD02
處理語句
1……..這樣的語法,在表達復雜的邏輯關(guān)系時,必須與ANDxx,ORxx 一起使用,所以我不
使用WHENxx 這個操作碼。
WRITE(Create New Records)寫記錄
常用的方式:
Factory 1 Operation Factory 2 Result HI LO EQ
CLEAR 文件記錄格式名
EVAL 文件字段1=xxxx
EVAL 文件字段2=xxxx
WRITE 文件記錄格式名
表示在文件中寫入一條新記錄。文件需要聲明為可寫的。
通常會在給文件字段賦值之前,作一次CLEAR 操作來進行初始化,以避免不必要的麻煩。XFOOT {(H)}(Sum the Elements of an Array)
沒用過,看幫助,是表示對數(shù)組字段的累加統(tǒng)計。
假設(shè)DIMDATA 定義為一個數(shù)字型的數(shù)組變量,F(xiàn)HS01 為一個足夠大的數(shù)字型變量
Factory 1 Operation Factory 2 Result HI LO EQ
XFOOT DIMDATA FHS01
就表示將數(shù)組DIMDATA 中的所有記錄的值都取出來,匯總相加,賦值到數(shù)字變量
FHS01 中
XLATE {(P | E)}(Translate)
將一個字符串中指定的字符,更換成另外的字符。
舉例:如MYCHAR1,MYCHAR2 都是兩個20 位長的字符型變量
C MOVEL 'ABCAAAC123' MYCHAR1
C 'A':'9' XLATE MYCHAR1 MYCHAR2
執(zhí)行過這個語句之后,MYCHAR2 就等于”9BC999C123’,即將字符串MYCHAR1 中所
有的“A”都變成了“9”;
XLATE 也可能指定起始位置。如上句更改為:
C 'A':'9' XLATE MYCHAR1:4 MYCHAR2
則MYCHAR2 等于“ABC999C123”,指從第4 位開始(含第4 位),將“A”變成“9”
賦值。
Z-ADD {(H)}(Zero and Add)向數(shù)字型變量賦值
Factory 1 Operation Factory 2 Result HI LO EQ
Z-ADD FLD01 FLD02
將數(shù)字型變量FLD01,賦值到數(shù)字型變量FLD02 中。
Z-ADD、MOVE 雖然同是賦值操作碼,但Z-ADD 的用法就遠沒有MOVE 那么變化多
端,只能在數(shù)字型變量之間賦值。所以也沒有什么可說的了。zero 如果要對數(shù)字型變量賦初值,使用*ZERO
Z-ADD *ZERO FLD02
Z-SUB {(H)}(Zero and Subtract)用0 減
Factory 1 Operation Factory 2 Result HI LO EQ
Z-SUB FLD01 FLD02
等價于
0 SUB FLD01 FLD02
等價于
EVAL FLD02=FLD01*(-1)
*ALL
*ALL 是個很有意義的變量,舉例:
EVAL FLD01=*ALL’0’
表示將字符型變量FLD01 賦值為全’0’
而
CLOSE *ALL
就表示關(guān)閉所有文件,意義與上面是不同的%LEN
取字符串的長度,舉例:
(MYLEN 為數(shù)字型變量,F(xiàn)LD01 為字符型變量)
EVAL MYLEN = %LEN(FLD01)
這句話的意思,是指取字符串FLD01 的長度,不過通常這樣用是沒意義的,因為直接
用%LEN 操作碼,取到的是字符串的總長度,不是有效字符的長度,也就是說FLD01 長度
為2,那么MYLEN 就恒等于2,不會變。就算變量FLD01 中沒有值,取出的MYLEN 也等
于2.。所以,%LEN 通常會與%TRIM 或是%TRIMR 一起使用,語法在下面介紹。
%TRIM,%TRIMR
都是去字符串變量中的空字符意思,%TRIM 是去字符串左邊的空字符;%TRIMR 是去
字符串右邊的空格。
通常我們在寫程序中,都是默認字符串變量左對齊,所以我們使用%TRIMR 操作碼的概率應該高一點。舉例:
EVAL MYLEN = %LEN(%TRIMR(FLD01))
這時的MYLEN,就是指變量FLD01 中的有效長度(前提條件是FLD01 中如果有值,是左對齊)。如果FLD01 為空,那么MYFLEN 為0;如果FLD01 首位有值,第二位為空,那么MYLEN 為1;如果FLD01 兩位都不為空,那么MYLEN 就等于2。
如果字符串左對齊,那么就使用%TRIMR
還有一種用法,假設(shè)字符串FLD04 為4 位長的字符,F(xiàn)LD01,F(xiàn)LD02 都是2 位長的字
符,且FLD01 等于“A ”,F(xiàn)LD02 等于“BC”,那我們執(zhí)行:
EVAL FLD04 = FLD01 + FLD01 + FLD02
FLD04 就等于“A A ”,也就是第二位與第四位都是空的,最后加的FLD02 其實無
效。
而如果執(zhí)行
EVAL FLD04 = %TRIMR(FLD01)+ %TRIMR(FLD01)+ FLD02
則FLD04 就等于“AABC”,也就是說,在這里,%TRIMR(FLD01),是等價于單字符
“A”的MONITOR
監(jiān)控程序信息。據(jù)說是可以屏蔽掉出錯信息,避免程序異常中斷,未經(jīng)測試。
第四篇:程序員入門進階手冊
這篇文章,我主要是讓你成為更為專業(yè)的入門程序員。請注意,此時,你可能需要讀一些比較枯燥的書,但我想說,這些是非常非常重要的。你一定要堅持住。
編程技能
在系統(tǒng)地學習編程技能之前,我希望你能先看一下 “ The Key To Accelerating Your Coding Skills”,這篇文章會告訴你如何有效地快速提高自己的編程能力。然后接下來是下面幾大塊內(nèi)容,但還只是入門級的。
編程技巧方面這個階段,你可以開始了解一下 Java 語言了,我個人覺得 Java 是世界上目前為止綜合排名最好的語言。你一定要學好這門語言。推薦《Java 核心技術(shù)(卷 1)》,除了讓你了解 Java 的語法,它還會讓你了解面向?qū)ο缶幊淌莻€什么概念(如果你覺得這本書有點深,那么,你可以降低難度看更為基礎(chǔ)的《Head First Java》)。然后,既然開始學習Java 了,那就一定要學 Spring,推薦看看《Spring in Action》或是直接從最新的 Spring Boot 開始,推薦看看《Spring Boot 實戰(zhàn)》。關(guān)于 Spring 的這兩本書,里面可能會有很多你從來沒有聽說過的東西,比如,IoC 和 AOP 之類的東西,能看懂多少就看懂多少,沒事兒。?
操作系統(tǒng)。這里你可以看看《鳥哥的 Linux 私房菜》,這本書會讓你對計算機和操作系統(tǒng),以及 Linux 有一個非常全面的了解,并能夠管理或是操作好一個 Linux 系統(tǒng)。當然,這本書有很多比較專業(yè)的知識,你可能會看不懂,沒關(guān)系,就暫時略過就好了。這本書的確并不適合初學者,你能看多少就看多少吧。
? 網(wǎng)絡(luò)協(xié)議你需要系統(tǒng)地了解一下數(shù)據(jù)庫設(shè)計中的那些東西,這里推薦慕課網(wǎng)的一個在線課程--“數(shù)據(jù)庫設(shè)計的那些事”。每個小課程不過 5-6 分鐘,全部不到 2 個小時,我相信你一定能跟下來。你需要搞清楚數(shù)據(jù)的那幾個范式,還有 SQL 語句的一些用法。當然,你還要學習和使用一下數(shù)據(jù)庫,這里推薦學習開源的 MySQL。你可以看官方文檔,也可以看一下這本書《MySQL 必知必會》。? 前端方面在你處理中文時有時會發(fā)現(xiàn)有亂碼出現(xiàn),此時需要了解 ASCII 和 Unicode 這樣的字符編碼。這里推薦一篇文章Character encoding。還有 Github 上的這兩個 Awesome 倉庫:Awesome Unicode 和 Awesome Code Points。?
為什么轉(zhuǎn)成 Java 語言?
相信你可能會問,為什么之前學習的 Python 和 JavaScript 不接著學,而是直接切到 Java 語言上來,這樣會不會切得太快了。這是一個好問題,這里需要說明一下,為什么我會切到 Java 這個語言上來,主要是有以下幾方面考慮。1.Java 是所有語言里面綜合實力最強的,這也是為什么幾乎所有大型的互聯(lián)網(wǎng)或是分布式架構(gòu)基本上都是 Java 技術(shù)棧。所以,這是一個工業(yè)級的編程語言(Python 和 JavaScript 還達不到這樣的水準)。
2.之所以,沒有用 Java 來做入門語言而是用了 Python,這是因為編程是一件比較費腦子的事,一開始學習時,興趣的培養(yǎng)很重要。Python 比較簡單,容易上手,能夠比較容易地提起興趣,而用 Java 則可能比較難。3.在你有了一些編程語言的基礎(chǔ)后,有了一些代碼的邏輯后,切到工業(yè)級的編程語言上來,更為專業(yè)地學習編程,是非常有幫助的。像 Python 和 JavaScript 這樣的動態(tài)語言用著是很爽,但是,只有像 C、C++ 和 Java 這樣的靜態(tài)語言才可以讓你真正地進階。
4.對于一個合格的程序員,掌握幾門語言是非常正常的事情。一方面,這會讓你對不同的語言進行比較,讓你有更多的思考。另一方面,這也是一種學習能力的培養(yǎng),會讓你對于未來的新技術(shù)學習得更快。很多時候,一些程序員只在自己熟悉的技術(shù)而不是合適的技術(shù)上工作,這其實并不好,這會讓你的視野受限,而視野會決定你的高度。綜上所述,這就是在入門的時候我故意讓你多學幾門語言的原因。
編程工具
編程工具方面,你需要開始學習使用下面這些工具了。
? 編程的 IDE。傳統(tǒng)一點的,你可以使用 Eclipse。當然,我推薦你使用 Intellij IDEA。這兩個工具都可以開發(fā)各種語言,但是主要用在 Java。如果你想玩得更時髦一些的話,使用 Visual Studio Code 也不錯,這個工具潛力十足,用其開發(fā) Python、JavaScript、Java、Go、C 和 C++ 都能得心應手(教程-本文發(fā)布時還基本沒怎么翻譯完)。
? 版本管理工具。版本管理工具是非常重要的編程工具。傳統(tǒng)的有 P4、SVN、CVS 等,但都會被 Git 取代,所以,你就只用學習Git 就好了。學習Git 的教程網(wǎng)上有很多,這里我推薦非常系統(tǒng)的 Pro Git 第二版(如 果你覺得 Pro Git 比較枯燥的話,備選猴子都能懂的 Git 入門),然后你要學會使用 GitHub。關(guān)于一些 Git 環(huán)境安裝和準備以及 GitHub 使用,你可以自行 Google(比如:這篇Github and Git 圖文教程 或是這篇Git 圖文教程及詳解)。
? 調(diào)試前端程序。你需要學會使用 Chrome 調(diào)試前端程序,Google 一下會有很多文章,你可以看看 超完整的 Chrome 瀏覽器客戶端調(diào)試大全。? 數(shù)據(jù)庫設(shè)計工具。你需要學會使用 MySQL WorkBench,這個工具很容易使用。相關(guān)的手冊,你可以看一下官方文檔。
實踐項目
這回我們需要設(shè)計一個投票系統(tǒng)的項目。業(yè)務上的需求如下:
? ? ? ? ? 用戶只有在登錄后,才可以生成投票表單。投票項可以單選,可以多選。
其它用戶投票后顯示當前投票結(jié)果(但是不能刷票)。投票有相應的時間,頁面上需要出現(xiàn)倒計時。
投票結(jié)果需要用不同顏色不同長度的橫條,并顯示百分比和人數(shù)。
技術(shù)上的需求如下:
這回要用 Java Spring Boot 來實現(xiàn)了,然后,后端不返回任何的 HTML,只返回 JSon 數(shù)據(jù)給前端。
? 由前端的 JQuery 來處理并操作相關(guān)的 HTML 動態(tài)生成在前端展示的頁面。
? 前端的頁面還要是響應式的,也就是可以在手機端和電腦端有不同的呈現(xiàn)。這個可以用 Bootstrap 來完成。?
如果你有興趣,還可以挑戰(zhàn)以下這些功能。
在微信中,通過微信授權(quán)后記錄用戶信息,以防止刷票。? 可以不用刷頁面,就可以動態(tài)地看到投票結(jié)果的變化。
? Google 一些畫圖表的 JavaScript 庫,然后把圖片表得風騷一些。?
小結(jié) 上面那些書和知識你要看完,還要能理解并掌握,我估計你最少也要花 1-2 年左右的時間。如果你能夠走到這里,把前面的那些知識都了解了,不用精通,能獨立地做出上面的那些實踐項目,那么,你就算是真正的入門了。
而且,你已經(jīng)是一個 “ 全棧工程師 ” 的樣子了,在這里我要給你一個大大的贊。如果這個時候,你對編程還有很大的熱情,那么我要恭喜你了,你可能會是一個非常不錯的程序員。加油啊!
上面的那些技術(shù)已經(jīng)算是比較專業(yè)的了。如果你已經(jīng)大致掌握了,我相信你可以找到至少年薪 20 萬以上的工作了,而且你的知識面算是有不錯的廣度了。但是深度還不夠,這個時候,是一個比較關(guān)鍵點了。
你可能已經(jīng)沉醉在沾沾自喜的驕傲的情緒中,那么你也可以就此止步,加入一些公司,在那里按部就班地完成一些功能性的開發(fā),成為一個搬磚的碼農(nóng)。你也可以開始選擇一個方向開始深入。
我給你的建議是選擇一個方向開始深入。因為你并不知道你未來會有多大的可能性,也不知道你會成為什么樣的人,所以為什么不再更努力一把呢?
后面,我們就開始非常專業(yè)的程序員之路了。這也是一般程序員和高級程序員的分水嶺了,能不能過去就看你的了。
第五篇:JAVA程序員面試題6
JAVA程序員面試題(6)
2008-06-12 10:43
1.客服端調(diào)用EJB對象的幾個基本步驟
設(shè)置JNDI服務工廠以及JNDI服務地址系統(tǒng)屬性,查找Home接口,從Home接口調(diào)用Create方法創(chuàng)建Remote接口,通過Remote接口調(diào)用其業(yè)務方法。
2.如何給weblogic指定大小的內(nèi)存?
在啟動Weblogic的腳本中(位于所在Domian對應服務器目錄下的startServerName),增加set MEM_ARGS=-Xms32m-Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M
3.如何設(shè)定的weblogic的熱啟動模式(開發(fā)模式)與產(chǎn)品發(fā)布模式?
可以在管理控制臺中修改對應服務器的啟動模式為開發(fā)或產(chǎn)品模式之一?;蛘咝薷姆盏膯游募蛘遚ommenv文件,增加set PRODUCTION_MODE=true。
4.如何啟動時不需輸入用戶名與密碼?
修改服務啟動文件,增加 WLS_USER和WLS_PW項。也可以在boot.properties文件中增加加密過的用戶名和密碼.5.在weblogic管理制臺中對一個應用域(或者說是一個網(wǎng)站,Domain)進行jms及ejb或
連接池等相關(guān)信息進行配置后,實際保存在什么文件中?
保存在此Domain的config.xml文件中,它是服務器的核心配置文件。
6.說說weblogic中一個Domain的缺省目錄結(jié)構(gòu)?比如要將一個簡單的helloWorld.jsp
放入何目錄下,然的在瀏覽器上就可打入 http://主機:端口號//helloword.jsp就可以看到運行結(jié)果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?
Domain目錄服務器目錄applications,將應用目錄放在此目錄下將可以作為應用訪問,如果是Web應用,應用目錄需要滿足Web應用目錄要求,jsp文件可以直接放在應用目錄中,Javabean需要放在應用目錄的WEB-INF目錄的classes目錄中,設(shè)置服務器的缺省應用將可以實現(xiàn)在瀏覽器上無需輸入應用名。
7.在weblogic中發(fā)布ejb需涉及到哪些配置文件
不同類型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP
weblogic-cmp-rdbms-jar.xml實體Bean一般還需要
8.如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配
置
缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現(xiàn)SSL,需要配置服務器使用Enable SSL,配置其端口,在產(chǎn)品模式下需要從CA獲取私有密鑰和數(shù)字證書,創(chuàng)建identity和trust keystore,裝載獲得的密鑰和數(shù)字證書??梢耘渲么薙SL連接是單向還是雙向的。
9.如何查看在weblogic中已經(jīng)發(fā)布的EJB?
可以使用管理控制臺,在它的Deployment中可以查看所有已發(fā)布的EJB
10.CORBA是什么?用途是什么?
CORBA 標準是公共對象請求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對象管理組織(Object Management Group,縮寫為 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯(lián)編)和允許應用程序間互操作的協(xié)議。其目的為:用不同的程序設(shè)計語言書寫在不同的進程中運行,為不同的操作系統(tǒng)開發(fā)。
11.說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設(shè)計模式的一些看法?
Session Facade Pattern:使用SessionBean訪問EntityBean Message Facade Pattern:實現(xiàn)異步調(diào)用 EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現(xiàn)輕量級訪問 Data Transfer Object Factory:通過DTO Factory簡化EntityBean數(shù)據(jù)提供特性 Generic Attribute Access:通過AttibuteAccess接口簡化EntityBean數(shù)據(jù)提供特性 Business Interface:通過遠程(本地)接口和Bean類實現(xiàn)相同接口規(guī)范業(yè)務邏輯一致性EJB架構(gòu)的設(shè)計好壞將直接影響系統(tǒng)的性能、可擴展性、可維護性、組件可重用性及開發(fā)效率。項目越復雜,項目隊伍越龐大則越能體現(xiàn)良好設(shè)計的重要性。
12.說說在weblogic中開發(fā)消息Bean時的persistent與non-persisten的差別
persistent方式的MDB可以保證消息傳遞的可靠性,也就是如果EJB容器出現(xiàn)問題而JMS服務器依然會將消息在此MDB可用的時候發(fā)送過來,而non-persistent方式的消息將被丟棄。
13.Servlet執(zhí)行時一般實現(xiàn)哪幾個方法?
public void init(ServletConfig config)public ServletConfig getServletConfig()public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)public void destroy()
14.j2ee常用的設(shè)計模式?說明工廠模式。
Java中的23種設(shè)計模式: Factory(工廠模式),Builder(建造模式),F(xiàn)actory Method(工廠方法模式),Prototype(原始模型模式),Singleton(單例模式),F(xiàn)acade(門面模式),Adapter(適配器模式),Bridge(橋梁模式),Composite(合成模式),Decorator(裝飾模式),F(xiàn)lyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解釋器模式),Visitor(訪問者模式),Iterator(迭代子模式),Mediator(調(diào)停者模式),Memento(備忘錄模式),Observer(觀察者模式),State(狀態(tài)模式),Strategy(策略模式),Template Method(模板方法模式),Chain Of Responsibleity(責任鏈模式)工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類并且實現(xiàn)了相同的方法,但是這些方法針對不同的數(shù)據(jù)進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現(xiàn)了基類中的方法。然后需要定義一個工廠類,工廠類可以根據(jù)條件生成不同的子類實例。當?shù)玫阶宇惖膶嵗?,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
15.EJB需直接實現(xiàn)它的業(yè)務接口或Home接口嗎,請簡述理由。
遠程接口和Home接口不需要直接實現(xiàn),他們的實現(xiàn)代碼是由服務器產(chǎn)生的,程序運行中對應實現(xiàn)類會作為對應接口類型的實例被使用