發(fā)布于:2021-01-21 15:29:19
0
249
0
從前,當(dāng)世界和計(jì)算機(jī)都是新事物的時(shí)候,我正在攻讀數(shù)據(jù)處理的副學(xué)士學(xué)位,那時(shí)沒(méi)有“計(jì)算機(jī)科學(xué)”課程,我必須學(xué)習(xí)會(huì)計(jì)學(xué)、數(shù)學(xué)、統(tǒng)計(jì)學(xué)和三種計(jì)算機(jī)語(yǔ)言:IBM/360基本匯編語(yǔ)言、FORTRAN和COBOL。到了80年代,學(xué)生們被告知COBOL是一種死語(yǔ)言,沒(méi)有人再學(xué)習(xí)它了。
現(xiàn)在,到了2020年,政府和銀行都在懇求COBOL程序員,一種不會(huì)消亡的語(yǔ)言。
那么,你如何學(xué)習(xí)COBOL,賺大錢,并節(jié)省大量的國(guó)家機(jī)構(gòu)需要新的代碼來(lái)處理所有新的政府刺激計(jì)劃?
COBOL公司?這是什么東西?
COBOL代表面向業(yè)務(wù)的通用語(yǔ)言。作為最早的高級(jí)語(yǔ)言之一,它是由國(guó)防部贊助的一個(gè)小組組織起來(lái)開(kāi)發(fā)的一種通用商務(wù)語(yǔ)言。這個(gè)小組后來(lái)被稱為數(shù)據(jù)系統(tǒng)語(yǔ)言委員會(huì)CODASYL,并從Grace Hopper的FLOW-MATIC以及Univac的AIMACO和IBM的COMTRAN等其他語(yǔ)言中定義了一種“面向業(yè)務(wù)的通用語(yǔ)言”。由此產(chǎn)生的語(yǔ)言經(jīng)歷了更多的修改,但很快就成為構(gòu)建業(yè)務(wù)系統(tǒng)的主導(dǎo)語(yǔ)言,并且從那時(shí)起它一直處于主導(dǎo)地位。
許多公司仍在使用COBOL,包括IBM、UPS和Cigna。Cigna的軟件工程師Mario Ceballos告訴我,“語(yǔ)法保持簡(jiǎn)單,讓非程序員(業(yè)務(wù))能夠閱讀和理解它。COBOL應(yīng)該是明確的,因?yàn)椴粦?yīng)該有任何假設(shè)的空間?!?/span>
當(dāng)然,它也受到了批評(píng)。1975年,Edsgar Dijkstra著名地宣稱“使用COBOL會(huì)削弱大腦;因此,其教學(xué)應(yīng)被視為刑事犯罪[sic]”。這無(wú)疑導(dǎo)致了大學(xué)中COBOL教學(xué)的衰落,但COBOL仍然是占主導(dǎo)地位的商業(yè)語(yǔ)言。
但是找到有COBOL技能的人可能很困難。Ceballos說(shuō):“大型機(jī)是一個(gè)很難學(xué)習(xí)的平臺(tái),這是由于成本問(wèn)題。”?!皞€(gè)人沒(méi)有錢租賃主機(jī)。極少數(shù)學(xué)校在大型機(jī)和COBOL上教授課程。當(dāng)IBM開(kāi)始遠(yuǎn)程工作和外包時(shí),他們就不再鼓勵(lì)美國(guó)學(xué)校教授大型機(jī)和COBOL課程。人才庫(kù)從岸上轉(zhuǎn)移到了離岸。任何本地人才的咨詢費(fèi)都會(huì)很貴?!?/span>
為什么COBOL仍然占主導(dǎo)地位?
與當(dāng)今常見(jiàn)的編程語(yǔ)言相比,COBOL是不同的,而且在某些方面非常有限:您不能進(jìn)行動(dòng)態(tài)內(nèi)存分配,不能輕松訪問(wèn)操作系統(tǒng)或特定計(jì)算機(jī)體系結(jié)構(gòu)的低級(jí)功能。最常見(jiàn)的語(yǔ)言形式不能使用遞歸。你永遠(yuǎn)不會(huì)想用COBOL編寫編譯器。一個(gè)計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生如果被出示COBOL,一定會(huì)大吃一驚。
這是類別錯(cuò)誤。在現(xiàn)代術(shù)語(yǔ)中,COBOL實(shí)際上是一種特定于領(lǐng)域的語(yǔ)言,特定于業(yè)務(wù)編程的特定領(lǐng)域。Robert Glass確定了COBOL比通用語(yǔ)言更適合業(yè)務(wù)編程的具體方式,其中包括:
面向業(yè)務(wù)的語(yǔ)言需要聲明、管理和操作異構(gòu)數(shù)據(jù)。業(yè)務(wù)程序在復(fù)雜的記錄結(jié)構(gòu)中混合了固定長(zhǎng)度和可變長(zhǎng)度的字符串、浮點(diǎn)、整數(shù)和十進(jìn)制數(shù)據(jù),通常包含可變部分。數(shù)據(jù)庫(kù)程序員熟悉其中的一些問(wèn)題,對(duì)象-關(guān)系映射工具經(jīng)常會(huì)忽略這些復(fù)雜性。
業(yè)務(wù)和財(cái)務(wù)數(shù)據(jù)需要使用真正的十進(jìn)制數(shù)據(jù)類型進(jìn)行管理。會(huì)計(jì)系統(tǒng)必須精確到最后一位小數(shù),并且需要精確地再現(xiàn)手工計(jì)算的結(jié)果;傳統(tǒng)的浮點(diǎn)數(shù)會(huì)導(dǎo)致復(fù)雜性和錯(cuò)誤。
面向業(yè)務(wù)的語(yǔ)言需要訪問(wèn)和操作外部維護(hù)的大量記錄結(jié)構(gòu)化數(shù)據(jù)。
當(dāng)然,這一切都超出了通用編程語(yǔ)言的能力。但在COBOL中,它是該語(yǔ)言的原生語(yǔ)言。
我們可以對(duì)COBOL的必要性進(jìn)行辯論,但事實(shí)是,存在著數(shù)千億行COBOL代碼,而且從COBOL遷移出去的嘗試通常并不成功。
你的第一個(gè)COBOL程序
源文件是簡(jiǎn)單的文本文件。對(duì)于COBOL來(lái)說(shuō),擁有一個(gè)支持語(yǔ)言的有用的編程編輯器和任何其他語(yǔ)言一樣方便,如果不是更方便的話。對(duì)于初學(xué)者來(lái)說(shuō),最簡(jiǎn)單的事情就是使用visualstudio代碼,這是自EMACS以來(lái)我所喜愛(ài)的唯一競(jìng)爭(zhēng)對(duì)手。
COBOL的VSCode擴(kuò)展多得驚人。現(xiàn)在,我正在使用bitlang代碼著色器和Broadcom COBOL語(yǔ)言支持。其他的很多都是為在大型機(jī)環(huán)境中編程的人準(zhǔn)備的,但這增加了我們不需要介紹的復(fù)雜性。
因此,總結(jié)一下,開(kāi)始試驗(yàn)COBOL:
如果尚未安裝Visual Studio代碼,請(qǐng)下載并安裝。
安裝比特語(yǔ)言.cobol和Broadcom COBOL語(yǔ)言支持?jǐn)U展。
安裝GnuCOBOL。(老實(shí)說(shuō),如果有什么事情會(huì)引起麻煩,那就是這個(gè)。MacOS上的自制安裝運(yùn)行得很好,我沒(méi)有其他系統(tǒng)可以測(cè)試。在Windows上,MicroFocus免費(fèi)試用visualstudio COBOL和Azure實(shí)驗(yàn)支持。)
現(xiàn)在,您已經(jīng)安裝了所有內(nèi)容,并準(zhǔn)備編寫第一個(gè)COBOL程序。按照傳統(tǒng),我們將從你的節(jié)目“Hello, World”開(kāi)始
因此,作為一個(gè)新的COBOL程序員,這里是您的第一個(gè)驚喜:COBOL關(guān)心您的代碼在哪個(gè)列中。在傳統(tǒng)的COBOL程序中,源代碼有幾個(gè)組件:
列1-6表示序列號(hào)。第7列稱為指示符區(qū)域;一般來(lái)說(shuō),它主要用于通過(guò)在該列中添加星號(hào)“*”來(lái)表示注釋。然后代碼進(jìn)入第8列到第72列,第73列到第80列基本上是免費(fèi)的,供程序員使用。
這一切都是基于當(dāng)我們把我們的來(lái)源到80列霍勒瑞斯卡的日子。
現(xiàn)代COBOL編譯器也接受一種免費(fèi)的格式,這種格式不會(huì)強(qiáng)迫您的代碼進(jìn)入80列的限制中,但是現(xiàn)有代碼中很大一部分仍然是卡片圖像格式。現(xiàn)在,我們將繼續(xù)使用卡片圖像。
振作起來(lái):COBOL并不像你曾經(jīng)使用過(guò)的任何其他語(yǔ)言那樣是塊結(jié)構(gòu)語(yǔ)言。COBOL從一開(kāi)始的一個(gè)主要設(shè)計(jì)目標(biāo)是,它應(yīng)該是“自文檔化”的,具有類似英語(yǔ)的語(yǔ)法。我們沒(méi)有函數(shù)、子例程和塊,而是有劃分、節(jié)、段落和語(yǔ)句。(我們將看到類似下面帶有PERFORM
動(dòng)詞的子例程。)。
哦,對(duì)了,我們還有COBOL操作符的動(dòng)詞。
以下是COBOL中的“Hello, World”:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, world".
END PROGRAM HELLO.
與某些語(yǔ)言相比,它有點(diǎn)冗長(zhǎng),但老實(shí)說(shuō)也不算太糟。將其與簡(jiǎn)單的Java版本進(jìn)行比較:
public class Hello {
public static void main(String[] args){
System.out.println("Hello, world!");
}
}
像所有的“Hello,world”程序一樣,它的作用不大,但是如果你被告知用COBOL編寫一個(gè)basic程序需要90行代碼,那么,你就被誤導(dǎo)了。
現(xiàn)在讓我們把“Hello world”程序分解為第一個(gè)示例。
第一行是:
IDENTIFICATION DIVISION.
COBOL程序總是至少有一個(gè)標(biāo)識(shí)劃分和一個(gè)過(guò)程劃分。識(shí)別部門有一個(gè)重要的段落,即PROGRAM-ID
。你需要在這里給程序起個(gè)名字。名稱不需要與文件名或幾乎任何東西對(duì)應(yīng),除非從另一個(gè)COBOL程序調(diào)用您的COBOL程序。這是通過(guò)CALL
動(dòng)詞實(shí)現(xiàn)的,我們將不討論。
我們需要一個(gè)程序ID,所以我們添加
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
還有很多其他的事情,通常會(huì)進(jìn)入鑒定部門。我將添加幾個(gè)常見(jiàn)的示例。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
AUTHOR. CHARLES R MARTIN.
DATE-WRITTEN. 2020-APR-11.
然而,在現(xiàn)代環(huán)境中,這些都是評(píng)論。
說(shuō)到現(xiàn)代環(huán)境,順便說(shuō)一下,COBOL并不像我一直使用的那樣需要所有的cap。GnuCOBOL會(huì)非常樂(lè)意。
identification division.
program-id. tut2.
author. charlie martin.
procedure division.
display "hello, world".
end program tut2.
我只是有點(diǎn)迷茫的懷舊。
別妄下判斷我。所以呢讓我們結(jié)束我們的“你好,世界”。COBOL程序的執(zhí)行部分在過(guò)程部分中。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, world".
END PROGRAM HELLO.
這里還有一種卡片圖像格式。注意,`DISPLAY“Hello,world”`縮進(jìn)了四列。這是因?yàn)榈?-72欄的部分實(shí)際上有兩部分:第8-11欄的A部分和第12欄的B部分。分部、節(jié)和段落需要從A節(jié)開(kāi)始;代碼語(yǔ)句應(yīng)該從B節(jié)開(kāi)始。
擴(kuò)展COBOL示例
當(dāng)然,“Hello,World”并不能為任何語(yǔ)言提供一個(gè)很好的描述,所以讓我們用一些至少類似于真實(shí)商業(yè)程序的東西來(lái)深入研究COBOL。我們將使用一個(gè)非常常見(jiàn)的例子:計(jì)算小時(shí)工的工資,包括計(jì)算聯(lián)邦、州和FICA稅。
做了這件事,我可以告訴你這不是一件容易的事,事實(shí)上,稅率表是復(fù)雜和神秘的,所以我們要簡(jiǎn)化,使聯(lián)邦稅率為16.4%,州稅率為7%,并將FICA稅率固定在6.2%,同時(shí)仔細(xì)選擇我們的工資率和工作時(shí)間,以不達(dá)到FICA的上限。我們只做小時(shí)工,我們計(jì)算超過(guò)40小時(shí)的加班時(shí)間是基準(zhǔn)費(fèi)率的1.5倍。
重復(fù)身份劃分毫無(wú)意義。我們從一個(gè)新的部門開(kāi)始,環(huán)境部門,它的存在是為了收集COBOL程序和外部世界之間的接口。
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TIMECARDS
ASSIGN TO "TIMECARDS.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
再一次,我們將練習(xí)COBOL的一些方面,這將使那些沒(méi)有在面向記錄的數(shù)據(jù)處理領(lǐng)域工作過(guò)的人感到驚訝。在UNIX、Linux、MacOS或Windows中,記錄是一行文本,后跟一些行尾字符。這給傳統(tǒng)的COBOL帶來(lái)了一個(gè)問(wèn)題,但是COBOL編譯器實(shí)現(xiàn)了一個(gè)非標(biāo)準(zhǔn)的擴(kuò)展來(lái)處理這個(gè)問(wèn)題:ORGANIZATION IS LINE SEQUENTIAL。
input-output部分只為文件分配一個(gè)符號(hào)名(TIMECARDS
),并將其連接到外部環(huán)境中的文件。
程序的下一部分描述我們正在處理的數(shù)據(jù)。在COBOL中,所有數(shù)據(jù)通常被假定包含在固定格式的記錄中。這些記錄有一個(gè)層次結(jié)構(gòu),由級(jí)別號(hào)表示:01是最高層,而細(xì)分得到更高的數(shù)字。我使用02、03等等,但這是任意的;我們使用01、05等等,因?yàn)椴迦肟ㄆ菀?,而不必全部重新裝訂。
但現(xiàn)在我們介紹另一個(gè)部門,數(shù)據(jù)部門。正如你可能猜到的,這是數(shù)據(jù)。我們使用了兩個(gè)部分。首先是文件部分。
DATA DIVISION.
FILE SECTION.
FD TIMECARDS.
01 TIMECARD.
02 EMPLOYEE-NAME.
03 EMP-FIRSTNAME PIC X(10).
03 EMP-SURNAME PIC X(15).
02 HOURS-WORKED PIC 99V9.
02 PAY-RATE PIC 99.
這是我們的輸入,是固定格式;我們用FD
行將它連接到TIMECARDS
文件。接下來(lái)是工作存儲(chǔ)部分。如果您不習(xí)慣COBOL,這看起來(lái)有點(diǎn)陌生,但實(shí)際上,我只是聲明了稍后將在程序中使用的變量。
WORKING-STORAGE SECTION.
* temporary variables in computational usage.
* intermediate values for computing paycheck with overtime
01 REGULAR-HOURS PIC 9(4)V99 USAGE COMP.
01 OVERTIME-HOURS PIC 9(4)V99 USAGE COMP.
01 OVERTIME-RATE PIC 9(4)V99 USAGE COMP.
01 REGULAR-PAY PIC 9(4)V99 USAGE COMP.
01 OVERTIME-PAY PIC 9(4)V99 USAGE COMP.
* computed parts of the paycheck
01 GROSS-PAY PIC 9(4)V99 USAGE COMP.
01 FED-TAX PIC 9(4)V99 USAGE COMP.
01 STATE-TAX PIC 9(4)V99 USAGE COMP.
01 FICA-TAX PIC 9(4)V99 USAGE COMP.
01 NET-PAY PIC 9(4)V99 USAGE COMP.
其中不熟悉的部分是PIC
(或PICTURE)子句。COBOL根本不是強(qiáng)類型的。相反,更像C,每個(gè)聲明都標(biāo)識(shí)一段內(nèi)存;PIC
告訴COBOL如何用“picture”解釋該內(nèi)存。在這種情況下,9(4)v99
告訴COBOL,一個(gè)名為REGULAR-HOURS
的內(nèi)存塊將被解釋為一個(gè)六位數(shù)字,該數(shù)字假定在最后兩位之前有一個(gè)小數(shù)點(diǎn)(V
)。告訴COBOL使用適合快速算術(shù)的內(nèi)部格式。這種格式實(shí)際上是有點(diǎn)靈活的,并且取決于體系結(jié)構(gòu),這意味著您最好不要依賴于它在任何地方都是相同的。
如果您想對(duì)此有信心,請(qǐng)不要使用USAGE COMP
,這會(huì)導(dǎo)致數(shù)據(jù)的另一部分,即輸出檢查的格式。這些字段是默認(rèn)用法,可在USAGE COMP
不可用時(shí)打印。
01 PAYCHECK.
02 PRT-EMPLOYEE-NAME PIC X(25).
02 FILLER PIC X.
02 PRT-HOURS-WORKED PIC 99.9.
02 FILLER PIC X.
02 PRT-PAY-RATE PIC 99.9.
02 PRT-GROSS-PAY PIC $,$$9.99.
02 PRT-FED-TAX PIC $,$$9.99.
02 PRT-STATE-TAX PIC $,$$9.99.
02 PRT-FICA-TAX PIC $,$$9.99.
02 FILLER PIC X(5).
02 PRT-NET-PAY PIC $*,**9.99.
這里唯一有趣的是我們有了一些新的格式:$,$$9.99
有一個(gè)美元符號(hào),它總是與最左邊的數(shù)字相對(duì),而$*,**9.99
用*填充美元符號(hào)和第一個(gè)數(shù)字之間的空間。
我將很快展示整個(gè)程序,但我確實(shí)想指出COBOL處理數(shù)學(xué)的方式,如COMPUTE-GROSS-PAY
所示:
COMPUTE-GROSS-PAY.
IF HOURS-WORKED > 40 THEN
MULTIPLY PAY-RATE BY 1.5 GIVING OVERTIME-RATE
MOVE 40 TO REGULAR-HOURS
SUBTRACT 40 FROM HOURS-WORKED GIVING OVERTIME-HOURS
MULTIPLY REGULAR-HOURS BY PAY-RATE GIVING REGULAR-PAY
MULTIPLY OVERTIME-HOURS BY OVERTIME-RATE
GIVING OVERTIME-PAY
ADD REGULAR-PAY TO OVERTIME-PAY GIVING GROSS-PAY
ELSE
MULTIPLY HOURS-WORKED BY PAY-RATE GIVING GROSS-PAY
END-IF
.
是的,標(biāo)準(zhǔn)COBOL讓你拼出來(lái)。
下面是完整的程序。
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYCHECKS.
AUTHOR. CHARLES R. MARTIN.
DATE-WRITTEN. 2020-APR-15.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TIMECARDS
ASSIGN TO "TIMECARDS.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD TIMECARDS.
01 TIMECARD.
02 EMPLOYEE-NAME.
03 EMP-FIRSTNAME PIC X(10).
03 EMP-SURNAME PIC X(15).
02 HOURS-WORKED PIC 99V9.
02 PAY-RATE PIC 99.
WORKING-STORAGE SECTION.
* temporary variables in computational usage.
* intermediate values for computing paycheck with overtime
01 REGULAR-HOURS PIC 9(4)V99 USAGE COMP.
01 OVERTIME-HOURS PIC 9(4)V99 USAGE COMP.
01 OVERTIME-RATE PIC 9(4)V99 USAGE COMP.
01 REGULAR-PAY PIC 9(4)V99 USAGE COMP.
01 OVERTIME-PAY PIC 9(4)V99 USAGE COMP.
* computed parts of the paycheck
01 GROSS-PAY PIC 9(4)V99 USAGE COMP.
01 FED-TAX PIC 9(4)V99 USAGE COMP.
01 STATE-TAX PIC 9(4)V99 USAGE COMP.
01 FICA-TAX PIC 9(4)V99 USAGE COMP.
01 NET-PAY PIC 9(4)V99 USAGE COMP.
* print format of the check
01 PAYCHECK.
02 PRT-EMPLOYEE-NAME PIC X(25).
02 FILLER PIC X.
02 PRT-HOURS-WORKED PIC 99.9.
02 FILLER PIC X.
02 PRT-PAY-RATE PIC 99.9.
02 PRT-GROSS-PAY PIC $,$$9.99.
02 PRT-FED-TAX PIC $,$$9.99.
02 PRT-STATE-TAX PIC $,$$9.99.
02 PRT-FICA-TAX PIC $,$$9.99.
02 FILLER PIC X(5).
02 PRT-NET-PAY PIC $*,**9.99.
* Tax rates -- 77 level aha!
77 Fed-tax-rate Pic V999 Value Is .164 .
77 State-tax-rate Pic V999 Value Is .070 .
77 Fica-tax-rate Pic V999 Value Is .062 .
* 88 Level is for conditions.
01 END-FILE PIC X.
88 EOF VALUE "T".
PROCEDURE DIVISION.
BEGIN.
PERFORM INITIALIZE-PROGRAM.
PERFORM PROCESS-LINE WITH TEST BEFORE UNTIL EOF
PERFORM CLEAN-UP.
STOP RUN.
INITIALIZE-PROGRAM.
OPEN INPUT TIMECARDS.
PROCESS-LINE.
READ TIMECARDS INTO TIMECARD
AT END MOVE "T" TO END-FILE.
IF NOT EOF THEN
PERFORM COMPUTE-GROSS-PAY
PERFORM COMPUTE-FED-TAX
PERFORM COMPUTE-STATE-TAX
PERFORM COMPUTE-FICA
PERFORM COMPUTE-NET-PAY
PERFORM PRINT-CHECK
END-IF.
COMPUTE-GROSS-PAY.
IF HOURS-WORKED > 40 THEN
MULTIPLY PAY-RATE BY 1.5 GIVING OVERTIME-RATE
MOVE 40 TO REGULAR-HOURS
SUBTRACT 40 FROM HOURS-WORKED GIVING OVERTIME-HOURS
MULTIPLY REGULAR-HOURS BY PAY-RATE GIVING REGULAR-PAY
MULTIPLY OVERTIME-HOURS BY OVERTIME-RATE
GIVING OVERTIME-PAY
ADD REGULAR-PAY TO OVERTIME-PAY GIVING GROSS-PAY
ELSE
MULTIPLY HOURS-WORKED BY PAY-RATE GIVING GROSS-PAY
END-IF
.
COMPUTE-FED-TAX.
MULTIPLY GROSS-PAY BY FED-TAX-RATE GIVING FED-TAX
.
COMPUTE-STATE-TAX.
* Compute lets us use a more familiar syntax
COMPUTE STATE-TAX = GROSS-PAY * STATE-TAX-RATE
.
COMPUTE-FICA.
MULTIPLY GROSS-PAY BY FICA-TAX-RATE GIVING FICA-TAX
.
COMPUTE-NET-PAY.
SUBTRACT FED-TAX STATE-TAX FICA-TAX FROM GROSS-PAY
GIVING NET-PAY
.
PRINT-CHECK.
MOVE EMPLOYEE-NAME TO PRT-EMPLOYEE-NAME
MOVE HOURS-WORKED TO PRT-HOURS-WORKED
MOVE PAY-RATE TO PRT-PAY-RATE
MOVE GROSS-PAY TO PRT-GROSS-PAY
MOVE FED-TAX TO PRT-FED-TAX
MOVE STATE-TAX TO PRT-STATE-TAX
MOVE FICA-TAX TO PRT-FICA-TAX
MOVE NET-PAY TO PRT-NET-PAY
DISPLAY PAYCHECK
.
CLEAN-UP.
CLOSE TIMECARDS.
END PROGRAM PAYCHECKS.
數(shù)據(jù)文件如下:
Charlie Martin 41015
Terry Lacy 32007
輸出結(jié)果如下:
$ cobc -x paycheck.cob
$ ./paycheck
Charlie Martin 41.0 15.0 $622.50 $102.09 $43.57 $38.59 $**438.25
Terry Lacy 32.0 07.0 $224.00 $36.73 $15.68 $13.88 $**157.71
$
學(xué)習(xí)COBOL的資源
實(shí)際上有相當(dāng)多的課程和書籍學(xué)習(xí)COBOL。許多課程來(lái)自海外,因?yàn)殡x岸外包公司多年來(lái)一直在滿足COBOL的需求。
我買了這本書,并完成了我的課程,它相當(dāng)不錯(cuò),在Kindle上的幾本COBOL書籍中,我喜歡Michael Coughlan的《程序員COBOL入門》。YouTube上的視頻堆積如山,我只看了幾個(gè)。這一個(gè)看起來(lái)不錯(cuò),但搜索COBOL,你會(huì)發(fā)現(xiàn)更多。
接下來(lái)還會(huì)有更多。4月9日,IBM和openmainframe項(xiàng)目宣布了一個(gè)聯(lián)合項(xiàng)目,用COBOL技能連接各州并教授COBOL編程。它有幾個(gè)資源,包括一個(gè)公告欄,面向那些想重返行業(yè)的COBOL程序員,以及一個(gè)開(kāi)源COBOL課程的開(kāi)始。
為什么COBOL名聲不好?
從這個(gè)小示例中可以看出,COBOL與普通編程語(yǔ)言不同。不能用COBOL編寫編譯器或內(nèi)核模塊,而且語(yǔ)法也不是我們所期望的。但是再考慮另一種常見(jiàn)的領(lǐng)域特定語(yǔ)言:SQL。語(yǔ)法有點(diǎn)奇怪,語(yǔ)義依賴于關(guān)系代數(shù)。
Ceballlos說(shuō):“在大型機(jī)上編程可以讓你一窺軟件過(guò)去是如何構(gòu)建的?!皩?duì)于任何現(xiàn)代程序員來(lái)說(shuō),它就像一個(gè)時(shí)間膠囊。與現(xiàn)代的DEVOPS和自動(dòng)化技術(shù)相比,它的大部分仍然是非常手工的?!?/span>
COBOL在很多方面都是一種過(guò)時(shí)的、糟糕的編程語(yǔ)言。但對(duì)于它的特定領(lǐng)域,它比其他任何東西都好。
作者介紹
熱門博客推薦