**COBOL** (akronyymi sanoista *common business-oriented language*) on kaupallis-hallinnollisiin sovelluksiin tarkoitettu korkean tason ohjelmointikieli. Kielen kehitys aloitettiin Yhdysvaltain puolustusministeriön aloitteesta vuonna 1959.

COBOL on todennäköisesti tietojenkäsittelyn historian merkittävin kaupallis-hallinnollisten järjestelmien ohjelmointikieli. Vanhoja COBOL-järjestelmiä on vielä 2010-luvun lopulla käytössä runsaasti muun muassa Suomessa, vaikka uusia ei enää tehdäkään.

COBOLin piirteitä ovat sovellusten suunnittelun hankaluus ja huono tuki strukturoidulle ohjelmoinnille. Kielioppi muistuttaa englantia. Kielelle ovat tyypillisiä pitkät muuttujanimet.

Viimeisin voimassa oleva standardi on ISO/IEC 1989:2014.

Historiaa
---------

COBOL perustuu osittain lippueamiraali Grace Hopperin kehittämään Flow-Matic-kieleen. COBOLin kehitys aloitettiin vuonna 1959 ja ensimmäinen versio esiteltiin vuonna 1960. COBOL kehitettiin komiteassa, joka salli politiikan vaikuttaa päätöksiin: komitean jäsen Jean Sammet on sanonut, että komitea hylkäsi hyviä ideoita jotka se tunnisti IBM:n COMTRANissa (*Commercial Translator*) vain koska komitea ei halunnut antaa mielikuvaa, että IBM dominoi keskustelua. Yhdysvaltain puolustusministeriö (DOD) käytti huomattavasti rahaa tietokoneisiin jo vuonna 1959 ja tietokoneiden valmistajat tunnistivat tarpeen yhteiselle kielelle. Yhdysvaltain puolustusministeriö oli kuitenkin tiukassa aikataulussa ja suunnitteluvaiheessa tehtiin lyhytnäköisiä päätöksiä.

COBOLin valta-ajan on sanottu olleen 1970–90-luvuilla.
Kieli oli erittäin suosittu 1960–1980-luvuilla ja sillä tehtiin liiketoiminnan ja talouden sovelluksia.
Vuonna 2020 uutisoitiin tarpeelle COBOLia osaaville ohjelmoijille kun Yhdysvaltojen osavaltioiden tietojärjestelmät eivät pysyneet työttömyyshakemusten perässä. Yhdysvaltain työministeriön järjestelmät riippuvat COBOL-koodista.

Reutersin tilaston mukaan käytössä on edelleen 220 miljardia riviä COBOL-koodia ja 43 prosenttia pankkijärjestelmistä riippuu siitä.
Talousjärjestelmissä sanotaan olevan päällekkäisiä kerroksia eri sukupolvilta, jotka ovat usein vahvasti toisistaan riippuvia, joka tekee pankkien järjestelmien päivityksistä monimutkaista. Järjestelmien päivityksistä tekee vaikeamman se, ettei niitä ole aikoinaan dokumentoitu. 
Arvioiden mukaan kolmen biljoonan dollarin edestä päivittäistä kauppaa kulkee COBOLillä tehtyjen järjestelmien kautta. Järjestelmät kattavat tallennustilejä, luottokorttiverkkoja, pankkiautomaatteja, lainoja ja muita palveluja. Digitaalisten pankkien tulo lisää tarvetta ratkaista ongelma harveneville COBOL-osaajille. Jotkin yliopistot tarjoavat edelleen kursseja, mutta kieltä opettelevien määrä on erittäin pieni.
Toisen lähteen mukaan COBOL-koodia on 80 miljardia riviä ja se kasvaa yhä 15 prosenttia vuosittain.

Kielestä on 19 "murretta", joissa on laajennuksia eri tahoilta kuten IBM ja Micro Focus -yhtiöiltä.

Ohjelman rakenne
----------------

COBOL-ohjelman tyypillinen piirre on sen jakautuminen divisiooniin eli lohkoihin:

* Tunnistuslohko (Identification Division)

sisältää ohjelman tunnisteet.
* Ympäristölohko (Environment Division)

määrittää käyttöympäristön.
* Tietolohko (Data Division)

sisältää ohjelmassa käsiteltävän datan.
* Toimintalohko (Procedure Division)

sisältää itse ohjelmaproseduurin.
Divisioonat voivat jakautua sektioihin, sektiot kapaleisiin, ne taas merkintöihin, määrittelyihin (entry) tai virkkeisiin, jotka puolestaan määreisiin (clause) tai lauseisiin (statement). Proseduurin käskyt on pyritty laatimaan niin lähelle käyttöenglantia kuin mahdollista. Jos ohjelman parametreiksi ja muuttujiksi vielä valitaan sopivia sanoja, tulee proseduurista mahdollisesti täysin yleiskielinen ja englantia hallitsevan maallikonkin luettava.

Esimerkki
---------

"Hei maailma -ohjelma" COBOLilla:

```
  IDENTIFICATION DIVISION.
  PROGRAM-ID. hello-world.
  PROCEDURE DIVISION.
  DISPLAY "Hello, world!"
  .

```

Toteutukset
-----------

Kielelle on tehty useita eri toteutuksia. Avoimen lähdekoodin GnuCOBOL on kehittynyt OpenCOBOLista, jossa on käytetty kokemuksia TinyCOBOLista.
COBOL-IT oli ranskalainen projekti, jonka Micro Focus hankki vuonna 2017. Micro Focus myy Visual COBOLia. GCC:n edustakääntäjänä toimiva gcobol on uusi projekti, josta on kerrottu vuonna 2022.

Lähteet
-------

1. 1 2  ISO/IEC 1989:2014 ISO. Viitattu 27.8.2017.
2. 1 2 3 4 5  Ollila, Kauko: Kun Cobol maailman it-asiakkaat käyttöönsä otti.  *Tekniikan historia*, 1/2018.
3. 1 2  Conner, Richard L. (14 May 1984). "Cobol, your age is showing". *Computerworld* **18** (20): ID/7–ID/18. ISSN 0010-4841.
4. 1 2 3 4  COBOL Programmers are Back In Demand. Seriously. *cacm.acm.org*.  21.4.2020. Viitattu 8.11.2021. (englanniksi)
5. ↑  COBOL blues *fingfx.thomsonreuters.com*. Viitattu 8.11.2021. (englanniksi)
6. 1 2 3 4 5  Anna Irrera: Banks scramble to fix old systems as IT 'cowboys' ride into sunset *reuters.com*.  11.4.2017. Viitattu 8.11.2021. (englanniksi)
7. 1 2  Fabrice Le Fessant & Simon Sobisch: GnuCOBOL, the Free Software Alternative for COBOL! (PDF) *fosdem.org*.  2024. Viitattu 9.2.2024. (englanniksi)
8. ↑  Fontell, Lauri: *COBOL-ohjelmointi*, s. 7–8. Helsinki: Limes ry, 1973. ISBN 951-745-009-5.
9. ↑  An open-source COBOL contender emerges *theregister.com*.  16.3.2022. Viitattu 20.3.2022. (englanniksi)

Aiheesta muualla
----------------

* COBOL kielen koulutustietoa ja esimerkkiohjelmia

|  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Yleisimmät ohjelmointikielet |
| --- |
|  |
| Tuotantokäytössä | 
* Ada
* APL
* Assembly
* AWK
* C
* C++
* C#
* COBOL
* Dart
* Delphi
* Eiffel
* Erlang
* Forth
* Fortran
* Go
* Java
* JavaScript
* Kotlin
* Lisp
* Lua
* Objective-C
* Pascal
* Perl
* PHP
* PostScript
* Python
* R
* Ruby
* Rust
* Smalltalk
* Swift
* Tcl
* TypeScript
* Visual Basic

 |
|  |
| Akateemiset | 
* CLU
* Haskell
* Logo
* ML
* OCaml
* Prolog
* Scheme

 |
|  |
| Historialliset | 
* ALGOL
* BASIC
* Modula-3
* MUMPS
* Plankalkül
* PL/I
* Simula

 |
|  |
| Luettelo yleisimmistä ohjelmointikielistä |

 |