Perché il disprezzo per COBOL? [chiuso]


52

Quando la gente parla di COBOL, di solito si incontra uno sbuffo o un gemito. Non so molto di COBOL, ma ho visto alcuni programmi scritti in esso. Vedo che è prolisso, e agli occhi non iniziati come i miei, incomprensibile. Ma, davvero, non tutti i linguaggi di programmazione sono completamente incomprensibili per un laico?

Capisco che funziona, funziona bene ed è ancora ampiamente utilizzato nelle industrie per le quali è stato progettato. Non sono questi i tratti distintivi di una buona lingua? Cosa c'è di così brutto in COBOL?


8
COBOL è OK per manipolare database gerarchici o file flat e per pompare i dati in grandi report di solo testo su una gigantesca stampante a matrice di punti. Ma la maggior parte dei dati al giorno d'oggi è in RDBMS e alla maggior parte dei manager piacciono i bei report. COBOL non lo gestisce così bene.
pdr,

1
@ Steve314: Sì! Coloro! A parte il fatto che i nostri erano Line Matrix, e non avevo bevuto il caffè stamattina quando l'ho scritto. - en.wikipedia.org/wiki/Line_matrix_printer
pdr

3
Senza cercare COBOL, se cerchi un po ', penso che noterai che molte lingue specifiche del dominio non sono molto popolari qui (per non dire altro); COBOL, Fortran, VB6, MATLAB ... tutte ottime lingue, ma non buone per insegnare informatica e le loro astrazioni.
Rook

4
@Rook: quelli contano davvero tutti come lingue specifiche del dominio? Anche MATLAB, IIRC, è ancora in grado di programmare per scopi generici. Pensavo che DSL si applicasse principalmente a cose come yacc, lex, ecc. - linguaggi che sono veramente solo in grado di svolgere un compito abbastanza ristretto, portando all'altro nome comune "piccole lingue". Non mi è mai venuto in mente che COBOL, Fortran o VB potessero essere definiti specifici del dominio. Naturalmente ognuno di essi tende ad essere utilizzato in campi particolari, ma pensavo che fossero ancora generalmente considerati lingue di uso generale.
Steve314,

1
@ Steve314 - Sì, bene - possiamo dire che ci sono due lati. Uno dice il dom.spec. alcuni sono solo quelli che hai menzionato, l'altro ha una visione più generale e conta anche in quello che ho citato, pur mantenendoli nella categoria di uso generale. Ma praticamente, ovunque menzioni ingegneria e scienze. comp. avrai Fortran o MATLAB, affari ... COBOL ... usa la terminologia che ti sembra più logica. Lo uso perché lo trovo adatto alla maggior parte delle persone. In ogni caso, ottengono una buona dose di colpire per qualche motivo dalla comunità CS in generale.
Rook,

Risposte:


68

COBOL è stata una delle prime lingue che ho imparato - se ignori innumerevoli versioni di Basic, tre o quattro lingue assembler e una variante di Forth, allora era tra le mie prime cinque e imparavo in concomitanza con Pascal. IOW, sto rispondendo per esperienza personale usando la lingua.

EDIT Dovrei dire esperienza antica . Non ho mai usato la lingua dopo la fine degli anni '80, anche se ho comprato un nuovo libro (per sostituire quello vecchio che ho gettato via con disgusto) in modo da avere qualcosa a cui fare riferimento in modo che le mie storie dell'orrore non fossero troppo distorte. Ma non ho idea di come la lingua si sia evoluta negli ultimi 20 anni.

Ovviamente, per molte persone, è solo quella visione del "vecchio è cattivo" che jonsca ha già descritto - e anche molto di più una cosa di terza mano per gli atteggiamenti pass-down. Ma ci sono problemi reali alla base di ciò.

Essere troppo prolisso è un vero problema - c'è troppa confusione nel modo di comprendere il codice. Questo è di gran lunga il problema più grande. Le persone che guardano il MOVE, ADDe MULTIPLYle dichiarazioni ecc in orrore hanno una visione un po 'esagerata di questo, vero - l' COMPUTEaffermazione è più vicino alle assegnazioni in altre lingue. Ma c'è ancora molto disordine in tutte quelle divisioni e sezioni. Una delle prime cose che ho imparato in COBOL è stata quella di iniziare sempre copiando una pagina standard di SKELETON.COB lunga A4.

COBOL ha alcune caratteristiche interessanti, ma quelle caratteristiche (ad esempio, la PICcosa) tendono ad essere le cose che sono ora più parte dei DBMS, piuttosto che il linguaggio di programmazione, e che mi sembra di solito essere un modo migliore per separare tali responsabilità. Inoltre, alcune librerie in altre lingue usano qualcosa di paragonabile a PIC(ad esempio printf e scanf nella libreria standard C). Probabilmente, il meglio è stato mantenuto, ma il peggio è caduto.

Inoltre, per ogni bella caratteristica, ce n'era almeno una intollerabile. Ad esempio, non importa quanto un loop sia banale, devi spostare il corpo in una procedura separata. Le PERFORM ... UNTIL ...dichiarazioni e simili sono dichiarazioni singole, non strutture a blocchi. In un certo senso, COBOL è stato un assaggio della programmazione strutturata da prima programmazione strutturata è stato inventato - c'è stato un GO TO, ma il suo impiego è stato scoraggiato (almeno quando ho usato COBOL), ma il ciclo, in particolare, proprio non era gestito molto bene.

In effetti, il linguaggio che ho usato dopo COBOL che mi ha ricordato di più era ... dBase. Come in Ashton-Tate dBase III +. In questi giorni, le persone hanno maggiori probabilità di ricordare tutti i cloni ora morti o morenti (Clipper, FoxPro ecc.) Che hanno portato al nome generico xBase - e c'è ancora un discendente vivente in xHarbour. Il punto è che questi erano linguaggi di database, ma niente come SQL.

Anche allora, dove ogni programma COBOL che opera su un particolare database deve includere una copia delle specifiche di quel database (e le copie potrebbero risultare incoerenti), non è proprio il caso di xBase in cui il database conosce la propria struttura.

Tenendo conto di ciò, quindi, COBOL non è così terribile se lo accetti per quello che è. Ma ciò che non è è un linguaggio per scrivere strutture di dati. Il che potrebbe essere il motivo per cui COBOL ha sofferto molto ai tempi delle guerre sante C vs Pascal - entrambe le parti potevano concordare sul fatto che COBOL non era utile per reinventare nuovamente l'albero binario.

Oh - e una cosa che non dimenticherò mai è come il mio primo libro di testo COBOL non descrisse il SORTcomando, dicendo che era al di fuori dello scopo del libro - apparentemente, o l'autore non poteva far fronte all'idea di smistamento, o lo considerava più di quello che le piccole menti degli studenti COBOL potevano affrontare [vedi modifica alla fine]. Questo genere di cose ha reso molto difficile prendere sul serio COBOL.

Un aspetto strano di questo è stato Jackson Structured Programming, che sono stato costretto a imparare nello stesso momento e in particolare per l'uso con COBOL. Parte di questo era disegnare un diagramma di struttura per l'input, quindi un diagramma di struttura per l'output, quindi disegnare il diagramma di struttura intermedio per il codice. Si prevedeva chiaramente che l'ordinamento rappresentava un problema già risolto: in questo modo non si poteva derivare un algoritmo di ordinamento. Quindi era strano dire dal libro di testo raccomandato che l'intero concetto di smistamento andava oltre la mia piccola piccola mente, mentre allo stesso tempo veniva insegnato qualcosa come una dozzina di algoritmi di smistamento diversi e come implementarli in Pascal.

I problemi che JSP può gestire sono probabilmente una buona guida per le cose che COBOL può fare relativamente bene. Ma anche allora, ciò non significa necessariamente che sia JSP che COBOL siano buoni modi per gestire questi problemi.


EDIT il 30 luglio 2014

Ho appena ricevuto un impulso di reputazione da questo, ricordandomi che è qui. Come succede, a causa della raccolta di libri antichi alimentati dalla nostalgia, ora posso correggere un punto WRT il SORTcomando.

Il libro che ho usato originariamente come testo raccomandato durante l'apprendimento di COBOL era "Programmazione metodica in COBOL" di Ray Welland. Questo non riguarda COBOL 85 (sebbene ci sia stata un'edizione successiva "Programmazione metodica in COBOL-85" che non ho ancora visto).

di seguito alcuni commenti che "Avresti dovuto ordinare i file di input prima di leggerli o ordinare il file di output dopo averlo generato, utilizzando l'utilità di ordinamento fornita con il sistema operativo". Dalla mia risposta, mi mancava il punto "arrivato con il sistema operativo". Kindall stava suggerendo qualcosa di simile alla filosofia Unix AFAICT, con COBOL usato per i bit per cui è buono, utilità del sistema operativo come un'utilità di ordinamento utilizzata per alcune altre cose e presumibilmente usando un linguaggio batch / scripting / shell per incollare i bit insieme. Ciò ha molto più senso in un mondo antico in cui i software interattivi erano rari o inesistenti, quindi invieresti comunque lotti di lavoro (quindi "linguaggio batch").

Quanto segue è citato da pagina 165-166 di "Programmazione metodica in COBOL" ...

L'uso dei file seriali ordinati implica che è necessario disporre di un mezzo per ordinare i record all'interno di un file in un ordine specificato in base alla chiave. La maggior parte dei sistemi di computer più grandi ha un'utilità di ordinamento che ordinerà un file in base alla posizione, al tipo e alla dimensione di ciascuno degli elementi di dati che formano la chiave.

C'è anche una possibilità per ordinare i record all'interno di un programma COBOL ma questo va oltre lo scopo di questo libro per due motivi:

a) l'interfaccia con il sistema operativo è spesso piuttosto complessa e varia da sistema a sistema,

(b) il modulo di ordinamento è una parte facoltativa di ANS '74 COBOL e non può essere implementato nei sistemi COBOL per computer più piccoli.

Pertanto si supporrà che esistano strutture per l'ordinamento dei file in un ordine specificato e verrà preso in considerazione il problema dell'aggiornamento di tali file.

In breve, kindall è corretto - il presupposto era che di solito l'ordinamento sarebbe stato fatto al di fuori di COBOL. Potrebbe esserci stata una vera giustificazione per escludere l'ordinamento da un linguaggio di programmazione intorno al 1974 per i piccoli computer.

Quello che ho detto sopra era fondamentalmente quello che ottieni dopo circa 20 anni di non essere in grado di controllare i fatti a causa del buttare via il libro.

Devo comunque sottolineare che ho studiato formalmente COBOL da questo libro raccomandato che copriva lo standard del 1974 (non lo standard del 1985) nel 1988 e nel 1989. La terza edizione di "COBOL for Students" (Parkin, Yorke, Barnes) - la prima edizione di COBOL 85 - non è stata pubblicata fino al 1990. Non ne sono certa, ma penso che l'edizione COBOL 85 di "Metodologia di programmazione" non sia stata pubblicata fino al 1994.

Ma ciò non rappresenta necessariamente il mondo COBOL che trascina i suoi piedi - beh, comunque non molto. L'adozione di nuovi standard richiede tempo per qualsiasi lingua, anche ora.


5
+1 Per sapere effettivamente di cosa stai parlando. Vorrei poterti dare un altro +1 per JSP. Hai mai usato "Delta"? Era un generatore Cobol tale da poter scrivere il tuo JSP nel codice, in uno stile simile alle definizioni di memoria (01 - 03 - 05) e quindi scrivere il tuo Cobol negli spazi vuoti. Divertente e frustrante da morire.
pdr

3
Pagina di Wikipedia su JSP - en.wikipedia.org/wiki/Jackson_Structured_Programming . Quando l'ho imparato, è stato tutto fatto su carta.
Steve314,

1
La ragione per cui l'ordinamento è stato trattato come un problema risolto è che lo era. Dal mio ricordo, COBOL ha davvero scoraggiato di avere più di uno o due record alla volta (il record corrente e forse il precedente). Avresti dovuto ordinare i file di input prima di leggerli o ordinare il file di output dopo averlo generato, utilizzando l'utilità di ordinamento fornita con il sistema operativo.
kindall

1
Ho fatto un po 'di COBOL per un paio d'anni (per riferimento, ho solo 26 anni) e posso chiarire una cosa per te. Non è più necessario definire i paragrafi per ogni ciclo, ora è possibile incorporarlo PERFORM UNTILin END-PERFORMblocchi. Odio davvero questo lo so.
AgentConundrum,

1
@NealB Stavo solo chiarendo il punto per lui, dal momento che ammette che la sua esperienza è obsoleta, anche per gli standard COBOL. Sento il tuo punto su COBOL85, ma c'è un sacco di vecchio codice là fuori che è stato avviato prima che esistesse, o è stato scritto da persone che avevano la testa bloccata in una versione precedente. Non puoi davvero presumere che un codebase sia fino a 85 standard, ma anche se lo è, è ancora un linguaggio scomodo. I programmatori più anziani si ritirano più rapidamente di quanto non vengano sostituiti e pochissimi nuovi programmatori vogliono lavorare in COBOL. So che non vorrei toccare di nuovo le cose.
AgentConundrum,

43

Avendo trascorso la maggior parte di oggi a scrivere un po 'di COBOL, penso di poter dare un contributo corrente.

Prima le cose CATTIVE: -

  • Nessuna chiamata di funzione. Il moderno COBOL ha alcune funzioni integrate ma è un serio lavoro di ingegneria scrivere le tue.
  • Nessun controllo del tipo su chiamate di subroutine. È possibile passare (o non passare) nulla a una chiamata di subroutine, la subroutine chiamata assumerà allegramente di avere i parametri corretti e non è possibile rilevare parametri mancanti o non validi.
  • Nessuna biblioteca Nessuno zero zilch. Nessuna libreria standard, nessuna libreria ampiamente disponibile e di facile utilizzo. Si finisce per codificare attività commomplace ripetutamente a mano.
  • Tutto è implementato come parola chiave. Poiché gli autori del linguaggio non hanno il concetto di libreria, ogni nuova funzionalità finisce per essere implementata con nuove parole chiave, ad esempio PARSE e RENDER per il supporto XML.

I fraintesi, cioè quelle critiche comunemente rivolte contro la cara vecchia lingua che sono invalide o irrilevanti.

  • Verbosità. Quindi digiti alcuni caratteri extra! Non è un problema serio. In molti casi COBOL è meno prolisso rispetto a Java.

  • "COBOL FILES" Vedi questo termine molto spesso. Non esiste nulla di simile al fatto che COBOL può gestire praticamente qualsiasi formato di file e qualsiasi organizzazione di file.

  • Nessun multi-threading. Negli ambienti in cui COBOL prospera, il multi-threading viene solitamente lasciato a contenitori di applicazioni come CICS o IMS che sono bravi a farlo, piuttosto che ai programmatori che tendono ad esserlo.

E le cose buone - alcuni aspetti di COBOL sono superiori ad altre lingue: -

  • Strutture dati. COBOL ha una sintassi concisa e flessibile per la definizione di strutture dati complesse e tipi di dati dispari.
  • Aritmetica decimale. Ha il supporto nativo per l'aritmetica decimale, cioè l'aritmetica come intesa dai contabili, con arrotondamento adeguato ecc.
  • Muoversi con i tempi. Alcuni aspetti di COBOL sono sorprendentemente moderni. Supporto XML integrato, supporto per la programmazione OO, capacità di usare classi Java ecc.
  • Integrazione con DB2, CICS ecc. Questo vale solo per il mainframe IBM COBOL (ma quello è di gran lunga il pezzo più grande di COBOL ancora in esecuzione) ma l'integrazione con DB2, CICS e altri ambienti mainframe semplifica la codifica di cose come il backup dei database servizi web che in qualsiasi altro ambiente.
  • Gestione dello schermo. La gestione standard dello schermo implementata su AS / 400 e MicroFocus Cobol è eccellente.
  • Prestazione. Per molti anni i compilatori COBOL hanno prodotto eseguibili ad altissime prestazioni. Solo C nativo e Assembler nativo hanno battuto COBOL su un mainframe IBM.

Quindi tutto sommato sta andando abbastanza bene per qualcosa che è stato messo insieme da un comitato negli anni '50. Se un'applicazione esistente è implementata in COBOL e fa il lavoro, non c'è motivo di riscriverla. Tuttavia, a meno che non ci sia una buona ragione, non vedo alcuna giustificazione per i nuovi progetti di utilizzare COBOL.


2
Nella mia risposta, dico che COBOL è dannoso per le strutture di dati. Questa è una differenza nel significato di "struttura dei dati"? Forse gli strumenti di layout dei record sono eccellenti, ma COBOL è ancora la lingua sbagliata per gli alberi binari, ecc.? O forse la mia esperienza con COBOL era troppo vecchia o altrimenti limitata? Domanda chiave: COBOL ha dei puntatori? (Preoccupante, un rapido Google suggerisce di sì, anche se il mio vecchio libro suggerisce di no). Odierei ritirare una risposta che mi ha fatto guadagnare tutti quegli adorabili punti di ripetizione, ma se sbaglio ...
Steve314

3
C'è un aspetto negativo dell'aritmetica decimale: devi dire esattamente quante cifre vuoi. Ricordo di aver trovato dei bug quando ne avevamo inseriti uno 9in meno PICin alcuni programmi all'interno di un gruppo.
David Thornley,

2
La mia impressione (non informata) è che COBOL sia particolarmente bravo a gestire i dati in record rigidi di dimensioni fisse. Non così buono, forse, nelle strutture di dati dinamici. Correggimi se sbaglio.
Barry Brown,

@ Steve314 - I puntatori sì arrivarono verso il 1985, ma erano un po 'zoppi in quanto si potevano solo impostare su roba nella sezione linkage. Le versioni successive ti hanno permesso di indicare qualsiasi cosa.
James Anderson,

1
@Structures - sebbene non sia all'altezza degli standard Python in termini di hash e alberi, ecc. È buono come C o Java - tranne che non è buono come C ++ plus Boost o Java più la libreria delle collezioni. Ancora una volta l'incapacità di apprezzare il valore delle librerie e delle funzioni standard ha paralizzato il linguaggio per tutta la sua lunga vita.
James Anderson,

27

Questo probabilmente dipende da Djikstra. Djikstra affermò che "L'uso di COBOL paralizza la mente; il suo insegnamento dovrebbe pertanto essere considerato un reato". Cobol era considerato ingenuo, non strutturato e prolisso. Con la capacità di auto-alterare il codice (una pratica scoraggiata anche tra i programmatori cobol) è stato visto come abbastanza difficile da eseguire il debug o seguire.

Poi c'è anche la questione della grande incompatibilità tra le versioni.

Suggerirei di leggere la sezione critica e di difesa in Wikipedia per la lingua - http://it.wikipedia.org/wiki/COBOL#Criticism_and_defense


20
Un giorno scopriranno un caveau pieno di codice scritto da Dijkstra nelle lingue che ha denunciato.
jonsca,

7
@jonsca: rimarrai sorpreso da ciò che farai per soldi.
JeffO,

3
Le versioni incompatibili erano IIRC piuttosto comuni fino almeno agli anni '70, e anche negli anni '80 c'era Basic. Dijkstra stava probabilmente affermando la sua tesi in base a un problema che menziono nella mia risposta: COBOL non è utile per (o intende essere buono) per la codifica della struttura dei dati. Pertanto, per un valore particolare di "insegnamento della programmazione" o "insegnamento dell'informatica", COBOL è davvero un veleno. Naturalmente dal momento che COBOL non è destinato a questo, è un'affermazione piuttosto ingiusta - ma poi, IIRC, il contesto era che alcune persone stavano cercando di insegnare queste cose usando COBOL.
Steve314,

2
Dijkstra <- un uomo che parlava troppo ...
Rook,

3
@Danny: COBOL è stato disprezzato molto prima che Dijkstra scrivesse quella battuta nel 1975.
John R. Strohm,

9

È l'età e la verbosità sono in genere le cose che fanno gemere le persone al riguardo.

Mi sembra di ricordare che l'obiettivo principale di IBM nella progettazione di COBOL era che "dovrebbe consentire a un direttore di banca di scrivere un programma". Questo obiettivo ovviamente ha avuto un profondo impatto sul modo in cui il linguaggio è stato progettato e ora si è evoluto.

Apparentemente c'è più COBOL allo stato brado di qualsiasi altra lingua. Tuttavia, dopo aver lavorato nell'IT per quasi 20 anni (15 nel settore bancario) non ho mai incontrato un singolo sistema che è stato implementato in esso.


Avevo sentito qualcuno menzionare il passaggio bancario, che è l'unica ragione per cui l'ho incluso, ma sicuramente prenderò la tua parola su quella di qualcun altro.
jonsca,

4
Ho lavorato per 20 anni nel settore bancario, quasi tutto in COBOL. Diverse banche hanno fatto le cose in modi diversi suppongo.
TrueDub

Conosco almeno un importante sistema ERP che contiene (o aveva fino al 2007 circa) un sacco di COBOL.
Alan B,

2
Non è stato IBM a progettare COBOL. Gli istigatori principali furono la Marina degli Stati Uniti e l'UNIVAC.
James Anderson,

8
"l'obiettivo principale di IBM nella progettazione di COBOL era che" dovrebbe consentire a un gestore di banca di scrivere un programma "." Un obiettivo nobile, sebbene la stragrande maggioranza dei manager che conosco non riesca nemmeno a scrivermi semplice letteratura per un sito Web, figuriamoci scrivere COBOL.
maple_shaft

8

Cosa c'è di così brutto in COBOL?

Niente.

Penso che le persone abbiano un'idea preconcetta che il vecchio sia cattivo, "il più nuovo è il migliore". È ancora molto in uso, e sono sicuro che ci sarà abbastanza lavoro di manutenzione sul codice da fare per un altro mezzo secolo.

Nel 1997, il gruppo Gartner ha riferito che l'80% delle attività mondiali funzionava con COBOL con oltre 200 miliardi di righe di codice esistenti e circa 5 miliardi di righe di nuovo codice all'anno. (tramite wikipedia )

Nella codifica, si deve sempre selezionare lo strumento migliore per il lavoro e, con alcune industrie che sono sposate con un determinato hardware, la lingua è ottimale. Non ho mai lavorato nel settore bancario, dove avevo sentito che era popolare, ma la risposta di Sean indica che non è così.

Se c'è un problema con il codice legacy che sembra vecchio, finché puoi schiaffeggiare un'interfaccia utente o un'interfaccia web di fronte ad essa, la maggior parte degli utenti non saprà nemmeno la differenza.


1
Le lingue sono per gli utenti?
JeffO,

16
Le "righe di codice" non sono una buona misura linguistica. COBOL è notoriamente prolisso. Quei 5 miliardi di righe di codice all'anno sono probabilmente equivalenti a diciassette regex;)
MSalters,

3
A volte COBOL è lo strumento giusto per il lavoro, molte volte non lo è. La parte difficile è convincere le persone a riconoscere la differenza.
TrueDub

1
Abbastanza vero, @TrueDub. La mia frase suonava un po 'commossa, ma non doveva esserlo.
jonsca,

3
@TrueDub: Se COBOL è lo strumento giusto per un lavoro, non voglio fare quel lavoro, purché abbia alternative. Ci sono lavori molto più interessanti per i quali posso essere pagato bene.
David Thornley,

5

Alla gente non piace COBOL perché ha un'applicazione limitata. È stato progettato per sistemi aziendali, finanziari e amministrativi per aziende e governi.

Cosa hanno in comune tutti questi? Dati. Moltissimi dati.

Indovina chi è stato progettato per eseguire il crunch dei dati e avere molti file per colazione? Puoi dire COmmon Business-Oriented Language ?

50 anni fa COBOL era la cosa migliore per le grandi organizzazioni con molti dati da gestire. Oggi ci sono modi migliori per gestire un grande volume di dati, quindi COBOL non è più pertinente. O è?

Consideriamo i governi. Di quali dati ha bisogno un governo per tracciare? Identificativi delle persone, certificati di nascita, cartelle cliniche, tasse (oh ... sì ... tasse) ecc. Ecc. E devono conservare queste informazioni a tempo indeterminato, oggi e anche 50 anni fa.

Le persone hanno anche mischiato le banche in alcune delle risposte e in effetti le banche sono utenti forti di COBOL. Perché? perché a differenza di altri tipi di società le banche di solito hanno una storia. Alcuni esistono da centinaia di anni ( come questo ad esempio ).

Ciò significa che alcuni dati di 50 anni devono essere ancora qui con noi, oggi, 7 ottobre 2011. Ora abbiamo SQL Server e C # o Oracle e Java, ma 50 anni fa c'erano COBOL e file.

Con il passare del tempo, i dati relativi a governi e banche sono diventati sempre più grandi ed era sempre più costoso migrare i sistemi. Ciò significa che devono rimanere in COBOL ed essere costantemente mantenuti ed evoluti man mano che il business si evolve. Alcune banche stanno lentamente migrando, mentre altre hanno solo una bella interfaccia Web 2.0 davanti al mainframe (c # e Java sono i più utilizzati). Puoi dire il codice legacy? (COBOL va di pari passo con il codice (estremo) legacy, alcuni che sono stati toccati da molte persone nel corso di decenni di esistenza - un'altra cosa che a noi programmatori non piace: D).

E ora hai una nicchia di attività. COBOL ora ha un'applicazione limitata e la tua esperienza è influenzata .

E le persone che entrano in COBOL alla fine scoprono che fai sempre la stessa cosa ancora e ancora, anno dopo anno dopo anno e quando si svegliano non sono più competitivi sul mercato perché ora le persone vogliono PHP, Java, C # , REST, jQuery e solo le banche cercano persone COBOL.

A questo punto la domanda è inferiore all'offerta e coloro che non effettuano il taglio devono passare a qualcos'altro. E devono iniziare come junior poiché COBOL davvero paralizza la mente (credeteci che non Copy-Paste sia lo stile di sviluppo principale in COBOL e rappresenti la sua grande produttività) e ora maledicono il giorno in cui hanno raccolto COBOL e don ' Non perdere l'occasione di raccontare le loro storie dell'orrore al riguardo :). Ma potresti raccontare quelle storie su qualsiasi vecchio linguaggio scoreggia che non è più richiesto in questi giorni, ma sei la sfortunata persona bloccata con esso. Bene ...

PS e COBOL fanno male per tutti gli altri motivi citati dagli altri :)

PS2. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code in existence and with an estimated 5 billion lines of new code annually.Veramente? E come ha fatto il giorno a misurarlo? Sono andati a fare tutte le società nella parola e hanno chiesto loro quante linee di COBOL hanno o cosa?


4

Due caratteristiche.

  • L'affermazione ALTER è puro male. Sebbene utilizzato raramente nelle più moderne applicazioni COBOL, era molto utilizzato nei "vecchi tempi" perché era più efficiente della struttura equivalente "IF-GOTO". Quando i computer avevano solo 32 KB di RAM, ogni istruzione contava. Ha modificato un'istruzione GOTO per avere una destinazione diversa.

    Ciò rese il codice opaco perché il codice stesso era stateful.

  • La clausola REDEFINES in una struttura di dati (come unionin C) è un problema perpetuo. Il termine "unione libera" - ovvero strutture di dati sovrapposte senza discriminatore - è un modo per riassumere il problema. Due alias REDEFINES non possono essere banalmente distinti dai dati; solo una lettura approfondita della logica del programma potrebbe determinare il significato delle due interpretazioni alternative dei byte.

    Ciò ha reso opache molte strutture di dati perché i dati non possono essere compresi senza il codice.

La leggibilità della sintassi inglese è stata sconfitta da questi due costrutti.

[Sono stato avvertito dai moderatori che brevi risposte sono sprezzanti per la tua domanda importante e interessante. Se lo trovi sprezzante, potresti chiedere dettagli. Oppure contrassegnalo in modo che i moderatori possano eliminarlo.]


Non ricordo nessuno di questi, né la repressione, o non li ho mai imparati. Una rapida ricerca mi dice che sono certamente d'accordo sul fatto che ALTERsia malvagio, ma questa funzione è raramente se mai usata, quindi non è davvero un motivo per odiare COBOL. Non ne sono così sicuro REDEFINES, però. Confrontarlo con unionme mi fa pensare un po 'più gentile verso di esso - ma forse ciò che è OK in un linguaggio di manipolazione della struttura dei dati e di manipolazione dei dati di basso livello potrebbe non essere una grande idea nell'elaborazione dei dati.
Steve314,

A volte le tue risposte mi sembrano sprezzanti, ma questa è solo inutile. Non so se stai cercando di aiutare qui, ma lo stai facendo male, o se stai solo parlando con te stesso. Potrei chiederti cosa intendi per "puro male", ma la bellezza delle buone risposte di cui sopra è che non ho bisogno di iniziare una conversazione per imparare qualcosa.
Eric Wilson,

@EricWilson: grazie per aver respinto la mia risposta così a fondo. Questo mi ha aiutato a capire che cosa bisognava aggiungere di più.
S. Lott,

1
@Eric - il problema ALTERè che reindirizza goto. Innanzitutto, ciò significa che stai usando goto - in sé non penso che sia malvagio, ma nella maggior parte delle lingue è una cosa insolita in casi speciali. In secondo luogo, ciò significa che le goto vanno in un posto diverso da quello in cui dicono che andranno - e questo è semplicemente terrificante. Non sono davvero convinto che questo sia un codice auto-modificante, ma è descritto come quello in cui ho guardato, e pensarlo come obiettivi modificanti delle istruzioni di salto nell'assemblatore spiega perché.
Steve314,

@ S.Lott Grazie per le tue aggiunte (anche tu @ Steve314), ho imparato qualcosa di interessante e ho invertito il mio voto.
Eric Wilson,

3

Ho programmato in COBOL per diversi buoni anni. La sua sintassi è semplice rispetto alle lingue di oggi e non hai bisogno di molta teoria per imparare ad andare avanti. COBOL ha funzionato molto bene con IBM CICS (un sistema di gestione delle transazioni online) e il programmatore deve fare attenzione nel codice per scalare il numero di applicazioni degli utenti da 1 a diverse migliaia. CICS ha fornito una GUI basata sui caratteri che ha funzionato con uno schermo come unità di visualizzazione (senza finestre). È possibile visualizzare i grafici utilizzando (GDDM di IBM) sul mainframe. COBOL può parlare con file indicizzati (VSAM e ISAM), DB2 (relazionale basata su SQL) e IMS. COBOL / CICS è un ambiente molto robusto e puoi impararlo in poche settimane. Ciò significa che ti concentri sul business e non sulla tecnologia, quindi lavori 7 ore su 8 sulla programmazione non sull'apprendimento di MVM, JavaScript e simili.

Il problema con COBOL è il cattivo marketing che porta alla mancanza di interesse da parte di terzi a sviluppare strumenti e ambienti di programmazione per esso. Inoltre, la mancanza di supporto all'interfaccia di Windows ha causato la sua popolarità dopo il 1993. Il costo del mainframe ha portato i clienti a cercare alternative e compilatori per COBOL erano disponibili in UNIX e DOS. Il linguaggio C ha attirato molta luce in quanto è stato in grado di essere più portatile e di avere accesso diretto alle funzioni del sistema operativo, cosa di cui COBOL aveva ben poco.

Lingue come VB, DBase, FoxPro e Clipper avevano modi migliori per accedere ai "database" sul PC rispetto al COBOL comparabile su DOS, quindi COBOL perse. CICS non è stato reso a buon mercato su DOS o UNIX per molto tempo, quindi il suo valore non era presente in questi ambienti.

Oggi, COBOL è supportato con .NET ma immagino che abbia perso la battaglia su tutte le piattaforme tranne il mainframe (e possibilmente AS / 400) dove è ancora lì a causa dell'enorme numero di applicazioni mission-critical che sono completamente dipendenti da esso.


"mancanza di supporto a Windows come l'interfaccia" .... cosa ne pensi di netcobol.com/products/Fujitsu-NetCOBOL-for-.NET/overview
JoelFan

@JoelFan grazie per il tuo commento. Hai ragione sul fatto che oggi ci sono strumenti migliori per COBOL ma penso che siano arrivati ​​tutti troppo tardi. Il mio punto in merito alla mancanza di supporto all'interfaccia di Windows era agli inizi degli anni '90, dove solo Micro Focus era l'unico player sul mercato.
NoChance,

2

Heh, sono andato al college nei primi anni '80, e la gente era sprezzante per COBOL anche allora. Penso che il problema più grande sia la sua verbosità - un semplice "Ciao, mondo!" a COBOL è probabilmente più di cinquanta linee, il 95% delle quali sono necessarie per la caldaia. Non è solo un linguaggio molto elegante o attraente. È stato anche progettato per gestire i problemi di ieri e non si presta davvero ai paradigmi di sviluppo sviluppati dopo il 1970 circa. È un linguaggio di generazione dei rapporti piuttosto buono, a condizione che i rapporti siano interminabili colonne di numeri con intestazioni e piè di pagina. Se vuoi incollare un grafico o un logo da qualche parte, dimenticalo. Penso che sia ancora la lingua più veloce per le attività di tipo "elaborazione dati" (prendi un file in formato fisso con transazioni ATM 5M e fai una semplice regolazione del saldo per ognuna), ma quanti sviluppatori fanno più questo genere di cose? E molti sistemi usano XML o JSON al giorno d'oggi, odio pensare di provare a analizzare qualcosa del genere con COBOL (in realtà, odio pensare di analizzare in generale in COBOL!)


1
"Hello World" prende quante righe ?. Analisi / generazione di XML: ora è integrato nel linguaggio. Forse dovresti aggiornare la tua base di conoscenze. Questa risposta appartiene all'era 1960 di COBOL.
NealB,

Interessante. Non ho dovuto lavorare con COBOL per quasi un decennio, ma l'ultima volta che l'ho visto è stato scritto proprio come me lo ricordavo, DIVISIONE IDENTIFICAZIONE, SEZIONE WORK-STORAGE e tutto il resto. Immagino che tutti quei "commenti richiesti" (AUTORE, DATA SCRITTURA, FONTE-COMPUTER, OBJECT-COMPUTER) siano opzionali ora. L'analisi XML non sembra così impressionante: devi strutturare la divisione dei dati per riflettere la struttura dei file, non c'è elaborazione SAX o DOM. Buono a sapersi, comunque.
TMN,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.