COBOL که در سال 1959 اختراع شد، زبانی است که بیشتر مقالات نوشته شده در مورد آن به این نکته اشاره دارند که این زبان در حال منسوخ شدن است و شرکتهایی که از آن استفاده میکنند مرتکب اشتباه حماقتآمیزی شدهاند و یا آموختنش برای تازهکارها دشوار است و چیزهایی از این دست. افسانهای در مورد COBOL که مخفف واژگان Common Business-Oriented Language است وجود دارد با این مضمون که سازمانهای بزرگی که از این زبان استفاده میکنند فقط به این دلیل دست به چنین انتخابی زدهاند که بازنویسی برنامههایشان در زبان مدرنتری کار بسیار خستهکنندهای است و همچنین اینکه دولوپرهای زیادی که در کار با این زبان از مهارت کافی برخوردارند باشند وجود ندارد! اما حقیقت امر چیز دیگری است که در ادامه به آن خواهیم پرداخت.
تاریخچهٔ COBOL
وقتی صحبت از زبان COBOL میشود، به نوعی به یاد تاریخچهٔ کامپیوتر خواهیم افتاد؛ اولین نسخه از زبان برنامهنویسی کوبول در سال 1959 از طریق کمیتهٔ استاندارد صنعتی که به طور ویژهای شامل دو مهندس خانم برجسته میشد، به بازار عرضه شد. یکی از این دو مهندس، Jean Sammet بود که کمیتهای فرعی را به منظور توسعهٔ خودِ زبان کوبول رهبری میکرد که وی در تاریخ 20 می 2017 درگذشت. دیگری هم دریاسالار نیروی دریایی ایالات متحده، Grace Hopper بود که کمیته را به سمت ساخت زبانی سطح بالا هدایت کرد (برای آشنایی بیشتر با ایشان، به مقالهٔ Grace Murray Hopper: کسی که برای اولین بار اصطلاح Bug را باب کرد! مراجعه نمایید.)
در آن زمان، Jean Sammet برای شرکت Sylvania کار میکرد و مسئول کامپایلر کوبول برای Mobile Digital Computer بود که بر اساس قراردادی تجاری، برای آزمایشگاه Evan Signals ارتش ایالات متحده ساخته شده بود (البته کلمهٔ Mobile به معنی «متحرک» برای این کامپایلر کاملاً نسبی بود چرا که برای حمل آن، به دو تریلر مخصوص 30 فوتی نیاز بود!) به نوعی میتوان گفت که این اولین کامپیوتری است که به زبان کوبول برنامهریزی شده است.
چه سازمانهایی از COBOL تاکنون استفاده کردهاند؟
Sylvania شش دستگاه از این نوع را تولید کرد و این کامپیوترها به خاطر عملکردشان، توسط نیروی داخلی ارتش ایالات متحده و آنهایی که در اروپا مستقر بودند مهر تأیید دریافت کردند. ادمینهای سیستم که با Mobile Digital Computer در بین دهههای 50 و 60 کار میکردند، در سال 1973 از تجربیات خود گفتند به این شکل که آنها به طرز قابلتوجهی از نحوهٔ کار این سیستمها شگفتزده شده بودند و همچنین گفتهاند که استفاده از این سیستمها را به دلیل اینکه سختافزارش منسوخ نشد، ادامه دادند.
سازمانهای بزرگ از کوبول استفاده میکنند به این دلیل که این زبان در برنامههای سطح بالای پردازش تراکنش بسیار بهینه است به طوری که هیچ زبان جدیدی توان رقابت با آن را ندارد! برنامههایی که امروزه به کار گرفته میشوند اکثراً بر اساس آپدیت 2002 کوبول (یا در بدترین حالت، نسخهٔ 1985) پایهگذاری شدهاند.
همچنین کوبول برای سری Z از یکسری Main Frames کمپانی IBM و سیستمهای توزیعشدهٔ ساخت دیگر شرکتها بسیار محبوب بود به طوری که به گفتهٔ Kevin Stoodly، که یکی از مدیران فنی در شرکت IBM است، کوبول یک مشکل بسیار مهم را به شکل خوبی حل کرد و شرکتها هم به استفاده از آن ادامه دادند.
دولوپرهای امروزی کوبول اکثراً بر این عقیده هستند که با کوبول میتوان از سختافزارها برای مدت طولانیتر استفاده کرد. امروزه IBM COBOL بدون شک محبوبترین نسخه از این زبان برای مِینفریمها است. شرکت دیگری به نام Micro Focus هم یکی از پیشتازان استفاده از کوبول برای سیستمهای توزیعشده است (موارد کم استفادهتری هم مانند GnuCOBOL که اپنسورس است نیز وجود دارد.)
در هر نسخهای از کوبول، ممکن است هزاران خط کد کوبول به ازای هر یک خط کد زبانی همچون جاوا نوشته شده باشد! اما به ادعای کارشناسان، جاوا برای تحلیل Big Data هرگز به سرعت کوبول نمیرسد. به عقیدهٔ برخی دولوپرها، این گزاره که «کوبول نابود شده است.» اصلاً درست نیست و شاهد چنین ادعایی هم اینکه نتیجهای که بر اساس آمار به دست میآید این است که غیرممکن است کوبول به سادگی نابود شود. در حقیقت، کوبول از بین نمیرود چرا که هنوز در حال استفاده است و برخی گرهها وجود دارند که فقط و فقط به دست کوبول باز میشوند. به عنوان نمونه برنامهٔ نوشتهشده با این زبان داریم:
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID.       SAMPLE.
000030 AUTHOR.           J.P.E. HODGSON.
000040 DATE-WRITTEN.     4 February 2000
000041
000042* A sample program just to show the form.
000043* The program copies its input to the output,
000044* and counts the number of records.
000045* At the end this number is printed.
000046
000050 ENVIRONMENT DIVISION.
000060 INPUT-OUTPUT SECTION.
000070 FILE-CONTROL.
000080     SELECT STUDENT-FILE     ASSIGN TO SYSIN
000090         ORGANIZATION IS LINE SEQUENTIAL.
000100     SELECT PRINT-FILE       ASSIGN TO SYSOUT
000110         ORGANIZATION IS LINE SEQUENTIAL.
000120
000130 DATA DIVISION.
000140 FILE SECTION.
000150 FD  STUDENT-FILE
000160     RECORD CONTAINS 43 CHARACTERS
000170     DATA RECORD IS STUDENT-IN.
000180 01  STUDENT-IN              PIC X(43).
000190
000200 FD  PRINT-FILE
000210     RECORD CONTAINS 80 CHARACTERS
000220     DATA RECORD IS PRINT-LINE.
000230 01  PRINT-LINE              PIC X(80).
000240
000250 WORKING-STORAGE SECTION.
000260 01  DATA-REMAINS-SWITCH     PIC X(2)      VALUE SPACES.
000261 01  RECORDS-WRITTEN         PIC 99.
000270
000280 01  DETAIL-LINE.
000290     05  FILLER              PIC X(7)      VALUE SPACES.
000300     05  RECORD-IMAGE        PIC X(43).
000310     05  FILLER              PIC X(30)     VALUE SPACES.
000311 
000312 01  SUMMARY-LINE.
000313     05  FILLER              PIC X(7)      VALUE SPACES.
000314     05  TOTAL-READ          PIC 99.
000315     05  FILLER              PIC X         VALUE SPACE.
000316     05  FILLER              PIC X(17)     
000317                 VALUE  'Records were read'.
000318     05  FILLER              PIC X(53)     VALUE SPACES.
000319
000320 PROCEDURE DIVISION.
000321
000330 PREPARE-SENIOR-REPORT.
000340     OPEN INPUT  STUDENT-FILE
000350          OUTPUT PRINT-FILE.
000351     MOVE ZERO TO RECORDS-WRITTEN.
000360     READ STUDENT-FILE
000370         AT END MOVE 'NO' TO DATA-REMAINS-SWITCH
000380     END-READ.
000390     PERFORM PROCESS-RECORDS
000410         UNTIL DATA-REMAINS-SWITCH = 'NO'.
000411     PERFORM PRINT-SUMMARY.
000420     CLOSE STUDENT-FILE
000430           PRINT-FILE.
000440     STOP RUN.
000450
000460 PROCESS-RECORDS.
000470     MOVE STUDENT-IN TO RECORD-IMAGE.
000480     MOVE DETAIL-LINE TO PRINT-LINE.
000490     WRITE PRINT-LINE.
000500     ADD 1 TO RECORDS-WRITTEN.
000510     READ STUDENT-FILE
000520         AT END MOVE 'NO' TO DATA-REMAINS-SWITCH
000530     END-READ. 
000540
000550 PRINT-SUMMARY.
000560     MOVE RECORDS-WRITTEN TO TOTAL-READ.
000570     MOVE SUMMARY-LINE TO PRINT-LINE.
000571     WRITE PRINT-LINE. 
000572
000580   Mark Levy که یکی از دولوپرهایی است که با زبان COBOL کد میزند، گفته است که از این زبان برای توسعهٔ برخی نرمافزارها در شرکت سونی استفاده کرده است. زمانی که وی در سال 1984 شروع به استفاده از زبان برنامهنویسی کوبول کرد، شایعاتی مبنی بر نابودی کوبول وجود داشت اما وی کماکان از این زبان استفاده میکند! به گفتهٔ وی:
اِعمال تغییرات در برنامههای قدیمی که با کوبول نوشته شدهاند ساده هست. خلاصه بگم که کوبول زبون بسیار ثابت و پایداری پس از این همه ساله. شاید وب اپلیکیشنی با زبونی مثل جاوا یا هر زبون دیگهای توسعه داده باشید که برای تعامل کاربر در بستر وب باشه، اما در نهایت برای توسعهٔ اپلیکیشنهایی که نیاز به دسترسی به مینفریمهای بزرگ دارن، از کوبول استفاده خواهد شد.
اینکه گفته میشود یادگیری کوبول سخت است شاید به نوعی درست باشد، اما شروع کدنویسی در کوبول برای دولوپرهایی که به زبانی همچون C تسط دارند، چند هفتهای بیشتر زمان نخواهد برد.
حال نوبت به نظرات شما میرسد. آیا تاکنون تجربهٔ کدزنی با زبان برنامهنویسی COBOL را داشتهاید و آیا فکر میکنید که این زبان به پایان عمرش نزدیک شده یا در آینده بیش از این مورد استقبال شرکتهای بزرگ قرار خواهد گرفت؟ نظرات و دیدگاههای خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.
