# COBOL

COBOL (acrònim de COmmon Business-Oriented Language, Llenguatge Comú Orientat a Negocis) és un llenguatge de programació que va ser creat l'any 1960 amb l'objectiu que es pogués usar a qualsevol ordinador, ja que durant els anys 1960 hi havia molts models d'ordinador incompatibles entre si, i que estigués orientat als negocis, és a dir, a l'anomenada informàtica de gestió. A més, hi havia la intenció d'orientar-lo principalment al negoci i a l'ús en sistemes de gestió empresarials; per tal d'aconseguir aquest requisit, havia de ser força simple, de manera que tècnics sense grans coneixements poguessin crear aplicacions. Aquesta simplificació es va aconseguir mitjançant una sintaxi semblant a la de l'anglès, evitant símbols propis de la programació.

## Història

En la creació d'aquest llenguatge hi va participar la comissió CODASYL, composta per fabricants d'ordinadors, usuaris i el Departament de Defensa dels Estats Units, el maig de 1959. La definició del llenguatge es va completar en menys de sis mesos, i va ser aprovada per la comissió el gener de 1960. El llenguatge COBOL va ser dissenyat inspirant-se en el llenguatge FLOW-MATIC de Grace Hopper i l'IBM COMTRANT de Bob Bemer, ja que ambdós formaven part de la comissió.
Gràcies a l'ajuda dels usuaris, COBOL va evolucionar ràpidament i va ser revisat de 1961 a 1965 per afegir-li noves funcionalitats. El 1968 va sortir la primera versió ANSI del llenguatge, sent revisada posteriorment el 1974 (COBOL ANS-74), 1985 (COBOL ANS-85), el 2002 (COBOL ANS-2002), el 2014 (COBOL-2014) i 2023 (COBOL-2023).

## Característiques

COBOL va ser dotat, per disseny, d'unes excel·lents capacitats d'autodocumentació, una bona gestió de fitxers i una excel·lent gestió dels tipus de dades per l'època, a través de la coneguda sentència PICTURE per la definició de camps estructurats. Per evitar errors d'arrodoniment en els càlculs que es produeixen en convertir els nombres a binari i que són inacceptables comercialment, COBOL pot usar i usa per defecte nombres de base deu. Per facilitar la creació de programes en COBOL, la sintaxi del mateix va ser creada de forma que semblés l'idioma anglès, evitant l'ús de símbols que es van imposar a llenguatges de programació posteriors.
Tot i això, a començaments dels vuitanta es va anar quedant antiquat respecte als nous paradigmes de programació i als llenguatges que els implementaven. A la revisió de 1985 es va solucionar, incorporant a COBOL variables locals, recursivitat, reserva de memòria dinàmica i programació estructurada.
A la revisió del 2002 se li va afegir orientació a objectes, tot i que des de la revisió del 1974 es podia crear un entorn de treball semblant a l'orientació a objectes, i un mètode de generació de pantalles gràfiques estandarditzat.
Abans de la inclusió de noves característiques a l'estàndard oficial, molts fabricants de compiladors les afegien de forma no estàndard. En l'actualitat aquest procés s'està veient amb la integració de COBOL amb Internet. Hi ha diversos compiladors que permeten usar COBOL com a llenguatge de scripting i de servei web. També existeixen compiladors que permeten generar codi de COBOL per la plataforma .NET i EJB.

## Programa Hola món

El programa Hola món seria el següent:

## Ús

Malgrat que molta gent creu que el COBOL està en desús, la realitat és que tots els sistemes que necessiten gran capacitat de procés batch, tant els bancs com les grans empreses de mainframes, usen COBOL. Això permet garantir la compatibilitat dels sistemes més antics amb els més moderns, així com tenir la seguretat que el llenguatge està perfectament provat i, per tant, és estable. Segons un informe de Gartner Group del 2005, el 75% de les dades generades per negocis són processades amb programes creats mitjançant COBOL, i un altre informe del 1997 s'estima que del 80% dels 300.000 milions de línies de codi existents estan creades amb COBOL, escrivint-se 5.000 milions de línies noves de COBOL cada any. Amb tot això, actualment la programació amb COBOL és un dels negocis més rendibles del món de la informàtica.

## Rebuda
### Falta d'estructura

A la dècada de 1970, l'adopció del paradigma de programació estructurada s'estava generalitzant cada vegada més. Edsger Dijkstra, un preeminent informàtic, va escriure una carta a l'editor de Comunicacions de l'ACM, publicada el 1975 titulada "Com diem veritats que podrien fer mal?", en la qual va ser crític amb COBOL i diversos altres llenguatges contemporanis; remarcant que “l'ús de COBOL paralitza la ment”. En una discrepància publicada als comentaris de Dijkstra, el científic informàtic Howard E. Tompkins va afirmar que el COBOL no estructurat tendia a ser "escrit per programadors que mai han tingut el benefici de COBOL estructurat ben ensenyat", argumentant que el problema era principalment un d'entrenament.
Una de les causes del codi espagueti va ser la declaració GO TO. Els intents d'eliminar GO TOs del codi COBOL, però, va resultar en programes intricats i qualitat de codi reduïda. GO TOs van ser reemplaçats en gran part per les declaracions i procediments PERFORM, que va promoure la programació modular i va donar fàcil accés a potents instal·lacions de bucle. No obstant això, PERFORM podria utilitzar-se només amb procediments perquè els cossos dels bucles no s'ubiquessin on es van usar, cosa que dificultava la comprensió dels programes.
Els programes COBOL eren famosos per ser monolítics i mancar de modularització. El codi COBOL només podia modularitzar-se a través de procediments, que van resultar inadequats per a sistemes grans. Era impossible restringir l'accés a les dades, cosa que significa que un procediment podia accedir i modificar qualsevol element de dades. A més, no hi havia manera de passar paràmetres a un procediment, una omissió que Jean Sammet va considerar com l'error més gran del comitè. Una altra complicació procedia de la capacitat de PERFORM THRU una seqüència específica de procediments. Això significava que el control podia saltar i tornar de qualsevol procediment, creant un flux de control intricat i permetent que un programador trenqués la regla entrada única, sortida única.
Aquesta situació va millorar a mesura que COBOL va adoptar més característiques. COBOL-74 va afegir subprogrames, brindant als programadors la capacitat de controlar les dades a què podia accedir cada part del programa. COBOL-85 després va afegir subprogrames niats, cosa que va permetre als programadors ocultar subprogrames. Un control més gran sobre les dades i el codi va arribar el 2002 quan es van incloure la programació orientada a objectes, les funcions definides per l'usuari i els tipus de dades definides per l'usuari.
No obstant això, gran part del programari COBOL heretat important utilitza codi no estructurat, que ha esdevingut impossible de mantenir. Pot ser massa arriscat i costós modificar fins i tot una simple secció de codi, ja que es pot fer servir des de llocs desconeguts de formes desconegudes.

### Problemes de compatibilitat

COBOL estava destinat a ser un llenguatge "comú" altament portàtil. Tot i això, per al 2001, s'havien creat al voltant de 300 dialectes. Una font de dialectes era el mateix estàndard: l'estàndard del 1974 estava compost per un nucli obligatori i onze mòduls funcionals, cadascun amb dos o tres nivells de suport. Això va permetre 104.976 variants oficials.
COBOL-85 no era totalment compatible amb versions anteriors i el seu desenvolupament va ser controvertit. Joseph T. Brophy, el CIO de Travellers Insurance, va encapçalar un esforç per informar els usuaris de COBOL sobre els alts costos de reprogramació d'implementar el nou estàndard. Com a resultat, el comitè ANSI COBOL va rebre més de 2200 cartes del públic, la majoria negatives, que sol·licitaven al comitè que fes canvis. D'altra banda, es pensava que la conversió a COBOL-85 augmentaria la productivitat en futurs anys, justificant així els costos de conversió.

### Sintaxi detallada

Un llenguatge feble, verbós i fofo que utilitzen els codificadors per fer coses avorrides i sense sentit en mainframes de dinosaures. [...] El seu mateix nom rares vegades es pronuncia sense expressions rituals de disgust o horror.
La sintaxi de COBOL sovint ha estat criticada per la seva verbositat. Els defensors diuen que això tenia la intenció de fer el codi autodocumentat, facilitant el manteniment del programa. COBOL també estava destinat a ser fàcil d'aprendre i fer servir per als programadors, sense deixar de ser llegible per al personal no tècnic, com ara els gerents. El desig de llegibilitat va conduir a l'ús d'elements estructurals i sintàctics similars a l'anglès, com ara substantius, verbs, clàusules, oracions, seccions i divisions. Tot i això, el 1984, els mantenidors dels programes COBOL lluitaven per bregar amb el codi "incomprensible" i els principals canvis a COBOL-85 eren allà per ajudar a facilitar el manteniment.
Jean Sammet, membre del comitè de curt abast, va assenyalar que "es va fer un petit intent per atendre el programador professional, de fet, les persones el principal interès de les quals és la programació tendeixen a estar molt descontentes amb COBOL", cosa que va atribuir a la sintaxi detallada de COBOL.

### Aïllament de la comunitat informàtica

La comunitat COBOL sempre ha estat aïllada de la comunitat informàtica. Cap informàtic acadèmic va participar en el disseny de COBOL: tots els membres del comitè procedien del comerç o el govern. Els informàtics de l'època estaven més interessats en camps com l'anàlisi numèrica, la física i la programació de sistemes que no pas en els problemes comercials de processament d'arxius que abordava el desenvolupament de COBOL. Jean Sammet va atribuir la impopularitat de COBOL a una "reacció snob" inicial a causa de la seva manca d'elegància, la manca de científics informàtics influents que participessin en el procés de disseny i el menyspreu pel processament de dades comercials. L'especificació COBOL va fer servir una "notació" única, o metallenguatge, per definir la seva sintaxi en lloc de la nova forma Backus-Naur que el comitè no coneixia. Això va resultar en crítiques "severes".
El món acadèmic tendeix a considerar COBOL com a prolix, maldestre i poc elegant, i tracta d'ignorar-lo, encara que probablement hi haurà més programes i programadors COBOL al món que FORTRAN, ALGOL i PL/I combinats. Majoritàriament, només les escoles amb un objectiu vocacional immediat brinden instrucció a COBOL.
Més tard, COBOL va patir una escassetat de material que el cobrís; els llibres introductoris van trigar fins a 1963 a aparèixer (amb Richard D. Irwin publicant un llibre de text universitari sobre COBOL el 1966). Per a 1985, hi havia el doble de llibres sobre FORTRAN i quatre vegades més sobre BASIC que sobre COBOL a la Biblioteca del Congrés. Els professors universitaris ensenyaven llenguatges i tècniques més moderns i de darrera generació en lloc de COBOL, que es deia que tenia una naturalesa d'”escola de comerç”. Donald Nelson, president del comitè CODASYL COBOL, va dir el 1984 que "els acadèmics... odien COBOL" i que els graduats en informàtica "tenien 'odi al COBOL'".
A mitjan dècada de 1980, també hi va haver una condescendència significativa cap a COBOL en la comunitat empresarial per part dels usuaris d'altres llenguatges, per exemple FORTRAN o assemblador, cosa que implica que COBOL podria utilitzar-se només per a problemes no desafiants.
El 2003, COBOL figurava en el 80% dels plans d'estudi de sistemes d'informació als Estats Units, la mateixa proporció que C++ i Java. Deu anys després, una enquesta realitzada per Micro Focus va trobar que el 20% dels acadèmics universitaris pensaven que COBOL estava desactualitzat o mort i que el 55% creia que els seus estudiants pensaven que COBOL estava desactualitzat o mort. La mateixa enquesta també va trobar que només el 25% dels acadèmics tenien programació COBOL en el pla d'estudis, encara que el 60% va pensar que haurien d'ensenyar-la.

### Preocupacions sobre el procés de disseny

S'han plantejat dubtes sobre la competència del comitè de normes. El membre del comitè a curt termini, Howard Bromberg, ha dit que hi havia "poc control" sobre el procés de desenvolupament i que estava "plagat per la discontinuïtat del personal i... la manca de talent". Jean Sammet i Jerome Garfunkel també van assenyalar que els canvis introduïts en una revisió de l'estàndard es revertirien a la següent, degut tant als canvis en qui estava al comitè de l'estàndard com a l'evidència objectiva.
Els estàndards COBOL han patit repetidament retards: COBOL-85 va arribar cinc anys més tard del que s'esperava, COBOL 2002 es va endarrerir cinc anys, i COBOL 2014 es va endarrerir 6 anys Per combatre els retards, el comitè d'estàndards va permetre la creació d'apèndixs opcionals que afegirien característiques més ràpidament que esperant la pròxima revisió de l'estàndard. Tot i això, alguns membres del comitè van expressar la seva preocupació per les incompatibilitats entre les implementacions i les freqüents modificacions de l'estàndard.

### Influències en altres idiomes

Les estructures de dades de COBOL van influir en els llenguatges de programació posteriors. La seva estructura de registres i arxius va influir en PL/I i Pascal, i la clàusula REDEFINES va ser un predecessor dels registres variants de Pascal. Les definicions explícites d'estructures d'arxius van precedir el desenvolupament de sistemes d'administració de bases de dades i les dades agregades van ser un avenç significatiu sobre les matrius de Fortran. Les declaracions de dades de PICTURE es van incorporar a PL/I, amb canvis menors.
La facilitat de COBOL amb COPY, encara que es considera "primitiu", va influir en el desenvolupament de directives include.
L'enfocament a la portabilitat i l'estandardització va significar que els programes escrits a COBOL poguessin ser portàtils i va facilitar la difusió del llenguatge a una àmplia varietat de plataformes de maquinari i sistemes operatius. A més, l'estructura de divisió ben definida restringeix la definició de referències externes a la Divisió d'Entorn, cosa que simplifica els canvis de plataforma en particular.

## Referències

* ↑ «COBOL». Gran Enciclopèdia Catalana. Barcelona: Grup Enciclopèdia Catalana.
* ↑ Report to Conference on Data Systems Languages. Department of Defense, 1962, p. I-2.
* ↑ «Programming language COBOL» (en anglès). ISO/IEC 1989:2023. [Consulta: 19 desembre 2023].
* ↑ Dijkstra, Edsger W. «How do we tell truths that might hurt?». University of Texas at Austin, 18-06-1975. Arxivat de l'original el 2 May 2017. [Consulta: 29 agost 2007].
* ↑ Tompkins, H. E. «In defense of teaching structured COBOL as computer science». ACM SIGPLAN Notices, vol. 18, 4, 1983, pàg. 86–94. DOI: 10.1145/948176.948186.
* 1 2 Riehle, 1992, p. 125.
* ↑ Shneiderman, 1985, p. 349–350.
* ↑ Coughlan, Michael. Beginning COBOL for Programmers. Apress, 2014-03-16, p. 4. ISBN 978-1430262534.
* ↑ Sammet, 1978b, p. 258.
* ↑ Riehle, 1992, p. 126.
* ↑ Riehle, 1992, p. 127.
* ↑ «COBOL and Legacy Code as a Systemic Risk | naked capitalism» (en anglès americà), 19-07-2016. [Consulta: 23 juliol 2016].
* ↑ Lämmel, Ralf; Verhoef, Chris «Cracking the 500-language problem». IEEE Software, vol. 18, 6, 01-11-2001, pàg. 79. DOI: 10.1109/52.965809.
* ↑ Howkins, T. J.; Harandi, M. T. «Towards more portable COBOL». The Computer Journal, vol. 22, 4, 01-04-1979, pàg. 290. DOI: 10.1093/comjnl/22.4.290.
* ↑ Garfunkel, 1987, p. 11.
* ↑ Garfunkel, 1987, p. 15.
* ↑ Raymond, Eric S. «COBOL». The Jargon File, version 4.4.8, 01-10-2004. Arxivat de l'original el 2014-08-30. [Consulta: 13 desembre 2014].
* ↑ Brown, 1976, p. 53.
* ↑ CODASYL, 1969, § II.1.1.
* ↑ Shneiderman, 1985, p. 350.
* ↑ Sammet, 1961, p. 381.
* 1 2 Conner, 1984, p. ID/10.
* ↑ Marcotty, 1978a, p. 263.
* ↑ «Expert addresses Cobol 85 standard». Computerworld, vol. 19, 37, 16-09-1985, pàg. 41, 48.
* ↑ Conner, 1984, p. ID/14.
* ↑ Sammet, 1961, p. 380.
* ↑ Marcotty, 1978a, p. 266.
* ↑ Sammet, 1978b, p. 255.
* ↑ Shneiderman, 1985, p. 348–349.
* ↑ Bemer, 1971, p. 133.
* ↑ Conway, Richard; Gries, David. An Introduction to Programming: A Structured Approach using PL/1 and PL/C. Cambridge, Massachusetts: Winthrop Publishers, 1973, p. 341. ISBN 0-87626-405-4.
* ↑ «COBOL Logic and Programming, third edition 1974». Arxivat de l'original el 2016-03-05. [Consulta: 25 febrer 2016].
* 1 2 3 Shneiderman, 1985, p. 349.
* ↑ Shneiderman, 1985, p. 351.
* ↑ «An interview: Cobol defender». Computerworld, vol. 18, 37, 10-09-1984, pàg. ID/29–ID/32.
* ↑ Pratt, Terrence W.; Zelkowitz, Marvin V. Programming Languages: Design and Implementation. 2nd. Englewood Cliffs, N.J. : Prentice Hall, 1984. ISBN 0136780121.
* ↑ Carr i Kizior, 2003, p. 13.
* ↑ Micro Focus (2013-03-07). "Academia needs more support to tackle the IT skills gap". Nota de premsa.
* ↑ Beyer, 2009, p. 301.
* ↑ Sammet, Jean; Garfunkel, Jerome «Summary of Changes in COBOL, 1960–1985». Annals of the History of Computing, vol. 7, 4, 01-10-1985, pàg. 342. DOI: 10.1109/MAHC.1985.10033.
* ↑ Cook, Margaret M. (June 1978). "Data Base Facility for COBOL 80" a 1978 National Computer Conference. : 1107–1112, Anaheim, California: AFIPS Press. DOI:10.1109/AFIPS.1978.63
* ↑ Saade, Henry; Wallace, Ann. «COBOL '97: A Status Report». Dr. Dobb's Journal, 01-10-1995. Arxivat de l'original el 2014-04-22. [Consulta: 21 abril 2014].
* ↑ «COBOL Standards». Micro Focus. Arxivat de l'original el 2004-03-31. [Consulta: 2 setembre 2014].
* ↑ «Resolutions from WG4 meeting 24 – June 26–28, 2003 Las Vegas, Nevada, USA» (doc), 11-07-2003. Arxivat de l'original el 2016-03-08. [Consulta: 29 juny 2014]. «a June 2008 revision of the COBOL standard»
* ↑ Babcock, Charles «Cobol standard add-ons flayed». Computerworld, vol. 20, 28, 14-07-1986, pàg. 1, 12.
* ↑ Marcotty, 1978b, p. 274.
* ↑ Això es pot veure a: «Visual COBOL». IBM PartnerWorld. IBM, 21-08-2013. Arxivat de l'original el 2014-07-12. [Consulta: 5 febrer 2014]. «Micro Focus Visual COBOL delivers the next generation of COBOL development and deployment for Linux x86-64, Linux for System z, AIX, HP/UX, Solaris, and Windows.» «COBOL Compilers family». ibm.com. IBM. Arxivat de l'original el 2014-02-23. [Consulta: 5 febrer 2014]. Tiffin, Brian. «What platforms are supported by GNU Cobol?», 04-01-2014. Arxivat de l'original el 2013-12-14. [Consulta: 5 febrer 2014].
* ↑ Coughlan, Michael. «Introduction to COBOL», 2002. [Consulta: 3 febrer 2014].

### Bibliografia

* Bemer, Bob «A View of the History of COBOL». Honeywell Computer Journal, 5, 1971. Arxivat de l'original el 2016-01-22 [Consulta: 28 juny 2014].
* Beyer, Kurt. Grace Hopper and the Invention of the Information Age. MIT Press, 2009. ISBN 978-0262013109.
* Brown, William R. Belzer, Jack. Encyclopedia of Computer Science and Technology: Volume 5. CRC Press, 1976-12-01. ISBN 978-0824722555.
* Carr, Donald E.; Kizior, Ronald J. «Continued Relevance of COBOL in Business and Academia: Current Situation and Comparison to the Year 2000 Study». Information Systems Education Journal, vol. 1, 52, 31-12-2003. ISSN: 1545-679X.
* CODASYL «CODASYL COBOL Journal of Development 1968». Codasyl Cobal Journal of Development. National Bureau of Standards, 1969. ISSN: 0591-0218.
* Conner, Richard L. «Cobol, your age is showing». Computerworld, vol. 18, 20, 14-05-1984, pàg. ID/7–ID/18. ISSN: 0010-4841.
* Cutler, Gary. «GNU COBOL Programmer's Guide», 09-04-2014. [Consulta: 25 febrer 2014].
* Garfunkel, Jerome. The COBOL 85 Example Book. Wiley, 1987. ISBN 978-0471804611.
* ISO/IEC JTC 1/SC 22/WG 4. «ISO/IEC IS 1989:2001 – Programming language COBOL» (ZIP of PDF). ISO, 04-12-2001. Arxivat de l'original el 2002-01-24. [Consulta: 2 setembre 2014]. (Link goes to draft N 0147)
* ISO/IEC JTC 1/SC 22/WG 4. INCITS/ISO/IEC 1989:2014 [2014] – Programming language COBOL. INCITS, 2014-10-31.
* Klein, William M. «The History of COBOL», 04-10-2010. Arxivat de l'original el 2014-01-07. [Consulta: 7 gener 2014].
* Marcotty, Michael «Transcript of question and answer session». History of Programming Languages. Academic Press, 1978a, pàg. 263. DOI: 10.1145/800025.1198370.
* Marcotty, Michael «Full text of all questions submitted». History of Programming Languages. Academic Press, 1978b, pàg. 274. DOI: 10.1145/800025.1198371.
* McCracken, Daniel D. A Simplified Guide to Structured COBOL Programming. Wiley, 1976. ISBN 0-471-58284-0.
* McCracken, Daniel D.; Golden, Donald G. A Simplified Guide to Structured COBOL Programming. 2nd. Wiley, 1988. ISBN 978-0471610540.
* Riehle, Richard L. «PERFORM considered harmful». Communications of the ACM, vol. 35, 8, 01-08-1992, pàg. 125–128. DOI: 10.1145/135226.376106.
* Sammet, Jean E. «A method of combining ALGOL and COBOL». Papers presented at the 9–11 May 1961, western joint IRE–AIEE–ACM computer conference. ACM, 1961, pàg. 379–387. DOI: 10.1145/1460690.1460734.
* Sammet, Jean E. «The early history of COBOL (History of Programming Languages)». Academic Press, 1978a. DOI: 10.1145/800025.1198367.
* Sammet, Jean E. «History of Programming Languages». Academic Press, 1978b. DOI: 10.1145/800025.1198368.
* Sammet, Jean E. Concise Encyclopedia of Computer Science. Wiley, 2004-07-23. ISBN 978-0470090954. OCLC 249810423.
* Shneiderman, B. «The Relationship Between COBOL and Computer Science». Annals of the History of Computing, vol. 7, 4, 01-10-1985, pàg. 348–352. DOI: 10.1109/MAHC.1985.10041.

## Enllaços externs

* Article de la revista PC-WORLD sobre COBOL (castellà)
* COBOL en castellà (castellà)
* COBOL Standards Arxivat 2004-03-31 a Wayback Machine. (anglès)
* COBOL User Groups (COBUG) Arxivat 2005-08-14 a Wayback Machine. (anglès)
* OpenCobol: Compilador COBOL-2002 multiplataforma de codi obert (anglès)