Šta raditi s 220 milijardi linija COBOL koda? Ništa.

Senior programer Igor Spasić za Startit Dnevnik piše o COBOL programu, zbog koga je u Americi nastala čitava pometnja, objašnjavajući zašto ga do sada nisu zamenile državna administracija i najbolje banke.

Ovih dana se u nemalom broju američkih država pojavila hitna potražnja za COBOL programerima. S obzirom na to da je reč o programskom jeziku koji je koncipiran krajem ’50 godina prošlog veka – da, pre nekih 60 godina – ovakva potražnja predstavlja neobičan presedan.

Zašto COBOL?

Krenimo od početka. COBOL je jezik koji je ’60 korišćen na mainframe računarima, mahom u poslovnim sistemima: bankam, ili sistemima koje koriste uprave država. Ovi kompjuterski sistemi, od kojih su neki napravljeni ’70, još uvek su u upotrebi.

Prema Reutersovom izveštaju iz 2017. više od 40 odsto bankarskih sistema još uvek radi u COBOL-u. Preko 80 odsto transakcija karticama se obavlja uz pomoć COBOL koda, a 95 odsto ATM aparata je kodirano ovim jezikom. Ukupno, to je nekih 220 milijardi programskih linija COBOL koda koji je još u upotrebi.

Pročitaj i:

Bil Gejts: Pandemija će promeniti naše živote zauvek, ključ je uspeti  prilagoditi svoje poslovanje

COBOL je dizajniran nekoliko godina nakon FORTRAN-a, jezika kojeg su koristili mahom inženjeri. Na dosta načina ova dva jezika liče jedan na drugi (što je ujedno i nekakav uvid u to davno doba softverskog razvoja).

Ideja iza COBOL-a je bila na mestu: stvoriti standardizovani poslovni kompjuterski jezik koji će se koristiti na širokom spektru računara – dakle, portabilan. Iz te namere dolazi i njegovo ime: COmmon Business Oriented Language. Na razvoju jezika su radili predstavnicikorporacija, ali i ministarstvo odbrane Sjedinjenih Država.

Jezik su podržavali proizvođači mainframe računara

Jezik je ubrzo doživeo prva poboljšanja, kao što je bila mogućnost kreiranja izveštaja, što ga je učinilo popularnijim. COBOL je jedan od prvih komjuterskih jezika višeg nivoa, u kome se program piše rečnikom koji više liči na govorni (engleski) nego na mašinske komande, što je za to vreme bila novina i vredna stvar. Takođe ima jaku podršku za procesiranje podataka ugrađenu u sam jezik, zamenjuje veliku količinu posla baratanja podacima koja se u to doba radila mahom ručno.

Jezik su podržavali proizvođači mainframe računara, među kojima se izdvaja IBM. On nastavlja da do danas proizvodi nove verzije mainframe rešenja. Sve je to dovelo do toga da se COBOL usadi u velikom broju kompjuterskih sistema nastalim u narednim dekadama, od kojih neki obavljaju neumoljivo važne poslovne ili državne funkcije.

COBOL kao programski jezik

COBOL je, u suštini, jednostavan programski jezik. Ta jednostavnost, na svoj način, održava sve te milijarde linija koda; čineći ga jasnim, i usudio bih se reći, manjim otpornim na propuste. Da ne bude zabune: greši se podjednako u COBOL-u kao i u bilo kom drugom modernom jeziku, ali samo odsustvo kompleksnijih koncepata čini jezik otpornijim, te stoga i lakšim za razumevanje i održavanje.

Danas nam program pisan u COBOL-u izgleda rogobatno, čak i na trenutke bolno. Sintaksa je vrlo ‘pričljiva’, dokumentacija je nepotpuna… Daleko je od toga da je ‘kul’; popularnost COBOL-a je poslednjih 20 godina na niskom nivou. On ostaje jezik mainframe računara, prosto zatrpan u lavini modernih kompjuterskih jezika i rešenja kojima smo od skora preplavljeni.

Fokus razvoja softvera je mahom pomeren na web, oblake, procesorska moć je daleko jača nego ranije; sve to zahteva novije koncepte i drugačije jezike. Pored svega, COBOL kao programski jezik i dalje živi. Iako nije postojao kao softver otvorenog koda u ’80 i ’90, stvari se menjaju, te danas postoji i GNU verzija kompajlera. Postoje okruženja ili dodaci za razvoj COBOL-a na svim operativnim sistemima, kao i onlajn zajednice koje i dalje neguju veštine razvoja softvera u ovom programskom jeziku.

Šta raditi s 220 milijardi linija COBOL koda?

To je upravo pitanje koje muči Amerikance. Korak nazad. Svest o korišćenju ‘legacy’ rešenja svakako postoji. Od 100 najboljih američkih banaka 92 i dalje koriste mainframe računare, od toga je 70 odsto na Fortune 500 listi kompanija. Ako se prihvati da je COBOL pregazilo vreme, i da mainframe računare treba zameniti manjim serverima i cloud-računarima, zašto se to onda ne dešava?

Zanimljivo je da u Americi postoji telo koje se bavi i evaluacijom održivosti sistema – Government Accountability Office. GAO je u više navrata izveštavao da postoje sistemi u vlasništvu države kojima je preko potreban dobar remont. Odeljenje za edukaciju, na primer, procesira studente na sistemu iz 1973. – koga održava 18 kontraktora i koji zahteva poseban hardver, te ga je teško integrisati sa modernim softverskim rešenjima.

GAO smatra COBOL zastarelim (‘legacy’) programskim jezikom, što oslikava i uporedni problem nalaženja novih programera. Sa ovakvim deficitom radne snage, specijalisti za COBOL postaju preskupi.

Zašto COBOL nije napušten?

Vratimo se na pitanje: zašto onda jednostavno ne napustimo COBOL i prosto migriramo na nove, moderne kompjuterske sisteme i rešenja? Zato što je skupo. Da naglasim: pre-sku-po je. Commonwealth Banka Australije je zamenila svoju COBOL platformu 2012.; za to joj je trebalo pet godina, a poduhvat je koštao 750 miliona dolara. Na drugom mestu, migracija sličnog sistema na Java platformu je trajala četiri godine, i nije još bila završena.

Zaključak se nameće sam: migracija sa stare platforme nije trivijalna stvar. Dok poslovni svet možda i može sebi da to priušti, silne državne institucije (Amerike) to, jednostavno, nisu u stanju. Odeljenje za unutrašnju bezbednost Amerike, na primer, koristi IBM z10 mainframe iz 2008. na kome se vrte programi pisani u COBOL-u.

COBOL je tu i, kako izgleda, neće biti zamenjen još dugo

Administracija socijalne službe Amerike ima u službi 60 miliona linija COBOL koda. Slično stanje je i sa drugim kompjuterskim sistemima državnih institucija Amerike. Koriste se sistemi koji su stari i 40 godina. COBOL je tu i, kako izgleda, neće biti zamenjen još dugo.

Zašto je nastao problem?

U kriznim vremenima količina podataka koja se obrađuje je značajno uvećana. Primera radi, usled nadošlog talasa nezaposlenosti, količina prijava u Nju Džersiju se povećala 1.600 odsto, gde je 580.000 ljudi podnelo odgovarajuće zahteve upravi u kratkom roku.

Stari sistemi jednostavno ne mogu da podnesu ovakvu promenu saobraćaja. Zapravo, to ne može ni jedan sistem ukoliko nije od početka dizajniran na takav način. S druge strane, dizajnirati robusne sisteme je kompleksna stvar sama po sebi, te sporija i skuplja za razvoj. Nažalost, u svetu koji želi sve za juče, trend kvaliteta razvoja softvara ne raste; no to je tema koja zaslužuje zasebnu razradu.

Pročitaj i: 

Uslužni IT preduzetnici u poverenju — od „klijenti stopirali plaćanja” do „preživeli smo 2008. pa ćemo i ovo”

Ovakvo stanje stvari zahteva da se postojeći sistemi u vanrednim okolnostima korišćenja održavaju, nagledaju, poprave ili ubrzaju.  Manjak programera učinilo je da korisnici pogođeni uvećanim saobraćajem, prvenstveno državne institucije, javno vape za pristupačnim COBOL programerima. Odnedavno se na sve strane postavljaju onlajn kursevi COBOL-a. U tome prednjači IBM kome je, jasno, stalo da poveća bazu svojih korisnika.

Što je brzo, to je i kuso, reče stari COBOL programer

Prethodni put kada je COBOL bio aktuelan je bilo na prelasku u 2000. godinu, povodom tzv. Y2K greške. Industrija je imala vremena da se spremi za tako nešto, te je čak od ’80 počela da radi na tome. U slučaju iznenadnih kriza, kao što je ova pandemija, nije bilo mesta za pripremu.

Ostaje nam da iz svega ovoga nešto i naučimo. Ako ništa drugo, bar da mi, koji razvijamo softver, ne zaboravimo podjednako važne vrednosti svakog kompjuterskog sistema: robusnost i održivost. Piši kod koji želiš da te nadživi. S druge strane, u robusnost i kvalitet se mora uložiti. “Što je brzo, to je i kuso”, reče stari COBOL programer.

BONUS: COBOL u praksi

GNU Cobol se na OSX lako instalira: brew install gnu-cobol. Kao editor možete koristit Sublime ili VS Code, oba imaju podršku za COBOL; za potonjeg je ona naprednija od prostog prepoznavanja sintakse.

To je to, spremni ste.

Hajde da pogledamo kako izgleda jedan COBOL program:

IDENTIFICATION DIVISION.

PROGRAM-ID. HELLO.

DATA DIVISION.

WORKING-STORAGE SECTION.

*> 9 — numeric A — alphabetic X — alphanumeric V —

decimal S — sign

01 NUM-VAR PIC S9(3)V9(2).

01 COUNT1 PIC 9(2) VALUE 0.

01 NUM PIC 9(9).

01 TEXT-VAR PIC X(8) VALUE 'OBLAC.RS'.

01 STR1 PIC X(8).

01 STR2 PIC X(8).

01 GROUP-VAR.

05 BROJ PIC 9(3) VALUE 173.

05 NAZIV PIC X(15) VALUE 'LALALAND'.

01 CHECK-VAL PIC 9(9).

88 PASS VALUES ARE 044 THRU 100.

88 FAIL VALUES ARE 000 THRU 43.

PROCEDURE DIVISION.

DISPLAY 'CIAO COBOL'.

MOVE 2.1 TO NUM-VAR.

DISPLAY "NUM VAR : "NUM-VAR.

DISPLAY "TEXT VAR : "TEXT-VAR.

DISPLAY "GROUP VAR : "GROUP-VAR.

COMPUTE NUM = (NUM-VAR * NUM-VAR).

DISPLAY "MUL : "NUM.

IF NUM > 3 AND NUM LESS THAN 100 THEN

DISPLAY "Da!"

END-IF

MOVE NUM TO CHECK-VAL

IF FAIL

DISPLAY "Ups"

END-IF

INSPECT TEXT-VAR TALLYING COUNT1 FOR CHARACTERS.

DISPLAY "Broji : "COUNT1.

INSPECT TEXT-VAR REPLACING ALL 'C' BY 'K'.

UNSTRING TEXT-VAR DELIMITED BY '.'

INTO STR1, STR2

END-UNSTRING.

DISPLAY STR1

PERFORM FN WITH TEST AFTER UNTIL COUNT1=0.

STOP RUN.

FN.

DISPLAY 'Hi!'.

SUBTRACT 1 FROM COUNT1.

Pre svega, ovo nije greška – prve kolone u programu su rezervisane i ne koriste se prilikom pisanja koda. Sedma kolona je takođe posebna. Kod se piše od osme kolone. Sve se piše velikim slovima, pa je zgodno upotrebiti Caps-Lock.

COBOL program je podeljen na celine (DIVISION). U prvoj deklarišemo promenljive. Ne postoje unapred definisani tipovi, već se tip podatka definiše odmah pri deklaraciji. Zanimljive su i grupne varijable (liče na strukture), kao i neka vrsta enum varijable.

U proceduralnom delu se piše program. Gornji radi neke osnovne računske radnje i pitalice. Rad sa stringovima je posebno zametan; potrebno je puno toga napisati za jednostavne manipulacije. Poslednje prikazano je kako se procedura pozova više puta, u petlji.

Ovde nije prikazan rad sa podacima, po čemu je COBOL poseban. Koncepti su direktno uključen u sam jezik: pojam zapisa, polja, ključeva. Rad sa SQL upitima se zatim nastavlja na ove koncepte.

Gornji kod se kompajlira sa cobc -x hello.cob.

Predstavljamo poslodavca
3lateral-logo-1.png

3Lateral

Multidisciplinary team creating digital excellence

3Lateral develops innovative technologies enabling digitization of human motion and appearance at unprecedented level of realism. Our mission is to evolve through exploring abstract landscapes of art and science, exciting new technologies and, most importantly, through nurturing continuous multi-disciplinary communication and company values among our team members.

Igor Spasić

Unesite termine za pretragu