Dlaczego pogarda dla COBOL? [Zamknięte]

52

Kiedy ludzie wspominają o języku COBOL, zwykle jest to albo prychnięcie, albo jęk. Niewiele wiem o języku COBOL, ale widziałem w nim napisane programy. Widzę, że to jest męczące, a dla niewtajemniczonych, takich jak moje, niezrozumiałe. Ale tak naprawdę, czy wszystkie języki programowania nie są dla ludzi świeckich bełkotem?

Rozumiem, że działa, działa dobrze i nadal jest szeroko stosowany w branżach, dla których został zaprojektowany. Czy to nie są cechy dobrego języka? Co jest tak złego w COBOL?

Barry Brown
źródło
8
COBOL jest w porządku do manipulowania hierarchicznymi bazami danych lub plikami płaskimi oraz do wypompowywania danych do dużych raportów tekstowych na wielkiej drukarce mozaikowej. Ale większość danych znajduje się obecnie w RDBMS, a większość menedżerów lubi ładne raporty. COBOL po prostu nie radzi sobie z tym tak dobrze.
pdr
1
@ Steve314: Tak! Te! Tyle, że nasze to Line Matrix, a dziś rano nie napiłem się kawy, kiedy to napisałem. - en.wikipedia.org/wiki/Line_matrix_printer
pdr
3
Bez wyodrębnienia języka COBOL, jeśli trochę przeszukasz, myślę, że zauważysz, że wiele języków specyficznych dla domeny nie jest tutaj bardzo popularnych (co najmniej); COBOL, Fortran, VB6, MATLAB ... wszystkie bardzo dobre języki, po prostu niezbyt dobre do nauczania informatyki i ich abstrakcji.
Wieżowiec
4
@Rook - czy te naprawdę są liczone jako języki specyficzne dla domeny? Nawet MATLAB, IIRC, nadal jest zdolny do programowania ogólnego. Myślałem, że DSL stosuje się głównie do rzeczy takich jak yacc, lex itp. - języków, które naprawdę są w stanie wykonać dość wąskie zadanie, co prowadzi do innej popularnej nazwy „małe języki”. Nigdy nie przyszło mi do głowy, że COBOL, Fortran lub VB można nazwać specyficznymi dla domeny. Oczywiście, każdy z nich jest zwykle używany w określonych dziedzinach, ale myślałem, że nadal są one zwykle uważane za języki ogólnego przeznaczenia.
Steve314,
1
@ Steve314 - Tak, cóż - możemy powiedzieć, że są dwie strony. Jeden mówi dom.spec. są tylko te, o których wspomniałeś, drugi ma bardziej ogólny pogląd i liczy się w tym, o którym wspomniałem, jednocześnie zachowując je w kategorii ogólnego przeznaczenia. Ale praktycznie, gdziekolwiek wspominasz o inżynierii i sci. komp. dostaniesz Fortran lub MATLAB, biznes ... COBOL ... użyj terminologii, która wydaje ci się najbardziej logiczna. Używam tego, ponieważ uważam, że pasuje do większości ludzi. W każdym razie, oni z jakiegoś powodu mają dość bashingu od społeczności cs.
Wieżowiec

Odpowiedzi:

68

COBOL był jednym z pierwszych języków, których się nauczyłem - jeśli zignorujesz niezliczone wersje języka Basic, trzy lub cztery języki asemblera i wariant Fortha, to był on w moich pierwszych pięciu i uczył się równolegle z Pascalem. IOW, odpowiadam z własnego doświadczenia w posługiwaniu się językiem.

EDYCJA Powinienem powiedzieć starożytne doświadczenie. Nigdy nie używałem tego języka po latach 80., ale kupiłem nową książkę (aby zastąpić starą, którą odrzuciłem z niesmakiem), aby mieć coś, o czym mógłbym się odnieść, aby moje horrory nie były zbyt zniekształcone. Ale nie mam pojęcia, jak ten język ewoluował w ciągu ostatnich 20 lat.

Oczywiście, dla wielu ludzi jest to, że „stary jest zły” pogląd, który jonsca już opisała - a także, o wiele bardziej, podejście polegające na przekazywaniu mi z trzeciej ręki. Ale leżą u podstaw prawdziwe problemy.

Bycie zbyt pracowitym to prawdziwy problem - zbyt wiele bałaganu w sposobie rozumienia kodu. To zdecydowanie największy problem. Ludzie, którzy spojrzeć na MOVE, ADDi MULTIPLYetc oświadczenia grozy mają nieco przesadzone widok tego, prawda - COMPUTEstwierdzenie jest bliżej do zadań w innych językach. Ale wciąż jest mnóstwo bałaganu we wszystkich tych działach i sekcjach. Jedną z pierwszych rzeczy, których nauczyłem się w języku COBOL, było rozpoczęcie od kopiowania standardowego pliku SKELETON.COB o długości A4.

COBOL ma kilka ciekawych funkcji, ale te funkcje (np PICrzecz) wydają się być rzeczy, które są teraz bardziej częścią DBMS zamiast języka programowania, a wydaje mi się zwykle być lepszy sposób, aby oddzielić te obowiązki. Ponadto niektóre biblioteki w innych językach używają czegoś porównywalnego PIC(np. Printf i scanf w standardowej bibliotece C). Prawdopodobnie najlepsze zostały zachowane, ale najgorsze spadły.

Ponadto, dla każdej fajnej funkcji, istniała co najmniej jedna niedopuszczalna. Na przykład, bez względu na to, jak banalna jest pętla, musisz przenieść ciało do osobnej procedury. PERFORM ... UNTIL ...I podobne wypowiedzi pojedyncze wypowiedzi - nie blokować struktur. W pewnym sensie, COBOL był smak programowania strukturalnego od programowania strukturalnego zanim wynaleziono - nie byłoGO TO , ale to wykorzystanie zniechęcił (przynajmniej kiedy użyłem COBOL), ale zapętlenie w szczególności po prostu nie było traktowane tak dobrze.

W rzeczywistości językiem, którego użyłem po języku COBOL, który najbardziej mi to przypominał, był ... dBase. Jak w Ashton-Tate dBase III +. W dzisiejszych czasach ludzie są bardziej skłonni do zapamiętania wszystkich martwych lub umierających klonów (Clipper, FoxPro itp.), Które doprowadziły do ​​ogólnej nazwy xBase - a xHarbour nadal ma żyjącego potomka. Chodzi o to, że były to języki baz danych, ale nic podobnego do SQL.

Nawet wtedy, gdy każdy program COBOL działający na konkretnej bazie danych musi zawierać kopię specyfikacji tej bazy danych (a kopie mogą się skończyć niespójne), tak naprawdę nie dzieje się tak w przypadku xBase, gdzie baza danych zna swoją własną strukturę.

Biorąc to pod uwagę, COBOL nie jest tak straszny, jeśli zaakceptujesz go takim, jakim jest. Ale to nie jest język do pisania struktur danych. Być może dlatego COBOL bardzo ucierpiał w czasach świętych wojen C vs. Pascal - obie strony mogły się zgodzić, że COBOL nie był dobry do ponownego opracowania drzewa binarnego.

Aha - i nigdy nie zapomnę tego, że mój pierwszy podręcznik COBOL nie opisał SORTpolecenia, mówiąc, że wykracza to poza zakres książki - najwyraźniej albo autor nie poradziłby sobie z pomysłem sortowania, albo uważał, że jest to coś więcej niż małe umysły studentów COBOL-u, z którymi można sobie poradzić [patrz edycja na końcu]. Takie rzeczy bardzo utrudniały poważne traktowanie COBOL.

Dziwnym aspektem tego było programowanie strukturalne Jacksona, którego również musiałem się uczyć mniej więcej w tym samym czasie, a konkretnie do używania z COBOL. Częścią tego było narysowanie schematu struktury dla danych wejściowych, następnie schematu struktury dla danych wyjściowych, a następnie narysowanie schematu struktury pomiędzy kodem. Wyraźnie oczekiwano, że sortowanie będzie już rozwiązanym problemem - nie można w ten sposób uzyskać algorytmu sortowania. W zalecanym podręczniku było dziwne, że cała koncepcja sortowania była poza moim małym umysłem, a jednocześnie nauczono czegoś w rodzaju kilkunastu różnych algorytmów sortowania i sposobu ich implementacji w Pascalu.

Problemy, z którymi JSP może sobie poradzić, są prawdopodobnie dobrym przewodnikiem po rzeczach, które COBOL może zrobić stosunkowo dobrze. Ale nawet wtedy niekoniecznie oznacza to, że JSP lub COBOL są dobrym sposobem na rozwiązanie tych problemów.


EDYCJA 30 lipca 2014 r

Właśnie zyskałem dzięki temu reputację, przypominając mi, że już tu jest. Tak się składa, że ​​z powodu gromadzenia dawnych książek, napędzanych nostalgią, mogę teraz poprawić punkt WRT SORTpolecenia.

Książka, której pierwotnie użyłem jako zalecanego tekstu podczas nauki języka COBOL, brzmiała „Programowanie metodyczne w języku COBOL” autorstwa Ray Welland. Nie dotyczy to COBOL 85 (chociaż była późniejsza edycja „Programowanie metodyczne w języku COBOL-85”, której wciąż nie widziałem).

uprzejme komentarze poniżej: „Miałeś posortować pliki wejściowe przed ich odczytaniem lub posortować plik wyjściowy po jego wygenerowaniu, używając narzędzia sortującego dostarczonego z systemem operacyjnym”. Od mojej odpowiedzi na to pytanie przeoczyłem punkt „przyszedł z systemem operacyjnym”. Kindall sugerował coś podobnego do filozofii uniksowej AFAICT, z COBOL-em używanym do bitów, do których jest dobry, narzędziami systemu operacyjnego, takimi jak narzędzie sortujące używane do niektórych innych rzeczy i prawdopodobnie używając języka wsadowego / skryptowego / powłoki do sklejenia bitów. Ma to o wiele większy sens w starożytnym świecie, w którym oprogramowanie interaktywne rzadko bywało nieistniejące, dlatego i tak należy przesyłać partie pracy (stąd „język wsadowy”).

Poniższy cytat znajduje się na stronach 165-166 „Programowania metodycznego w języku COBOL” ...

Korzystanie z uporządkowanych plików szeregowych oznacza, że ​​konieczne jest dysponowanie środkami do sortowania rekordów w pliku w określonej kolejności według klucza. Większość większych systemów komputerowych ma narzędzie sortujące, które posortuje plik, biorąc pod uwagę pozycję, typ i rozmiar każdego z elementów danych tworzących klucz.

Istnieje również możliwość sortowania rekordów z programu COBOL, ale wykracza to poza zakres tej książki z dwóch powodów:

(a) interfejs do systemu operacyjnego jest często dość złożony i różni się w zależności od systemu,

(b) moduł sortowania jest opcjonalną częścią COBOLU ANS '74 i nie może być zaimplementowany w systemach COBOL dla mniejszych komputerów.

Dlatego należy założyć, że istnieją możliwości sortowania plików w określonej kolejności i zostanie rozważony problem aktualizacji takich plików.

Krótko mówiąc, kindall jest poprawny - założono, że zwykle sortowanie odbywa się poza COBOL. Być może istniało prawdziwe uzasadnienie wyłączenia sortowania z języka programowania około 1974 r. Dla małych komputerów.

To, co powiedziałem powyżej, było w zasadzie tym, co otrzymujesz po około 20 latach niemożności sprawdzenia faktów z powodu wyrzucenia książki.

Nadal jednak muszę podkreślić, że formalnie studiowałem COBOL z tej zalecanej książki, która obejmowała standard z 1974 r. (Nie standard z 1985 r.) W 1988 i 1989 r. Trzecie wydanie „COBOL dla studentów” (Parkin, Yorke, Barnes) - pierwsze wydanie obejmujące COBOL 85 - zostało opublikowane dopiero w 1990 roku. Nie jestem pewien, ale myślę, że wydanie „Metody programowania programistycznego” COBOL 85 zostało opublikowane dopiero w 1994 roku.

Ale to niekoniecznie oznacza, że ​​świat COBOL ciągnie się nogami - cóż, i tak nie tak bardzo. Przyjęcie nowych standardów wymaga czasu dla dowolnego języka, nawet teraz.

Steve314
źródło
5
+1 Za faktyczne zrozumienie, o czym mówisz. Żałuję, że nie mogę dać ci +1 za JSP. Czy używałeś kiedyś „Delta”? Był to generator Cobol, który pozwalał pisać JSP w kodzie, w stylu podobnym do definicji pamięci (01 - 03 - 05), a następnie zapisywać Cobol w lukach. Zarówno zabawne, jak i frustrujące jak diabli.
pdr
3
Strona Wikipedii na JSP - en.wikipedia.org/wiki/Jackson_Structured_Programming . Kiedy się tego nauczyłem, wszystko działo się na papierze.
Steve314,
1
Powodem, dla którego sortowanie traktowano jako rozwiązany problem, było to, że tak było. Z moich wspomnień, COBOL naprawdę odradzał posiadanie więcej niż jednego lub dwóch zapisów w pamięci na raz (bieżący i być może poprzedni). Miałeś posortować pliki wejściowe przed ich odczytaniem lub posortować plik wyjściowy po wygenerowaniu, używając narzędzia sortującego dostarczonego z systemem operacyjnym.
kindall
1
Zrobiłem trochę COBOL przez kilka lat (dla porównania mam tylko 26 lat) i mogę wyjaśnić jedną rzecz dla ciebie. Nie musisz już definiować akapitów dla każdej pętli, możesz teraz wstawić ją PERFORM UNTILdo END-PERFORMbloków. Naprawdę nienawidzę tego, że to wiem.
AgentConundrum
1
@NealB Właśnie wyjaśniłem mu, dlaczego przyznaje, że jego doświadczenie jest nieaktualne, nawet jak na standardy COBOL. Rozumiem twój pogląd na temat COBOL85, ale istnieje wiele starych kodów, które albo zostały uruchomione przed ich istnieniem, albo zostały napisane przez ludzi, którzy utknęli w głowach w poprzedniej wersji. Naprawdę nie możesz założyć, że baza kodów ma do 85 standardów, ale nawet jeśli tak jest, nadal jest to niewygodny język. Starsi programiści przechodzą na emeryturę szybciej niż są zastępowani, a niewielu nowych programistów chce pracować w języku COBOL. Wiem, że nie chciałbym dotykać tego wszystkiego ponownie.
AgentConundrum,
43

Wydaje mi się, że spędziłem większość dzisiejszego dnia na pisaniu COBOL-a.

Najpierw ZŁE rzeczy: -

  • Brak wywołań funkcji. Współczesny COBOL ma kilka wbudowanych funkcji, ale jest to poważne zadanie inżynierskie, aby napisać własne.
  • Brak sprawdzania typu w połączeniach podprogramów. Możesz przekazać (lub nie przekazać) dowolne wywołanie podprogramu, wywoływany podprogram beztrosko przyjmuje, że ma poprawne parametry i nie ma możliwości wykrycia brakujących lub niepoprawnych parametrów.
  • Brak bibliotek. Brak zero zilch. Brak standardowych bibliotek, brak powszechnie używanych, łatwo dostępnych bibliotek. Końcowe zadania związane z kodowaniem kompilują się w kółko.
  • Wszystko jest zaimplementowane jako słowo kluczowe. Ponieważ autorzy języków nie mają koncepcji biblioteki, każda nowa funkcja kończy się implementacją nowych słów kluczowych, np. PARSE i RENDER do obsługi XML.

Niezrozumiane, tj. Krytyka powszechnie wypowiadana przeciwko drogiemu staremu językowi, które są nieprawidłowe lub nieistotne.

  • Gadatliwość. Więc wpisujesz kilka dodatkowych znaków! To nie jest poważny problem. W wielu przypadkach język COBOL jest mniej szczegółowy niż Java.

  • „PLIKI COBOL” Często widujesz ten termin. Nie ma czegoś takiego, że COBOL może obsłużyć dowolny format pliku i dowolną organizację plików.

  • Bez wielowątkowości. W środowiskach, w których COBOL dobrze się rozwija, wielowątkowość jest zwykle pozostawiana kontenerom aplikacji, takim jak CICS lub IMS, które są w tym dobre, a nie programistom, którzy są w tym źli.

I dobre rzeczy - niektóre aspekty COBOL są lepsze od innych języków: -

  • Struktury danych. COBOL ma zwięzłą i elastyczną składnię do definiowania złożonych struktur danych i nieparzystych typów danych.
  • Arytmetyka dziesiętna. Ma natywną obsługę arytmetyki dziesiętnej, tj. Arytmetyki rozumianej przez księgowych, z odpowiednim zaokrągleniem itp.
  • Poruszanie się z duchem czasu. Niektóre aspekty COBOL są zaskakująco nowoczesne. Wbudowana obsługa XML, obsługa programowania OO, możliwość korzystania z klas Java itp.
  • Integracja z DB2, CICS itp. Odnosi się to tylko do COBOLu na komputerze mainframe IBM (ale jest to zdecydowanie największa część COBOL-a nadal działającego), ale integracja z DB2, CICS i innymi środowiskami mainframe ułatwia kodowanie takich rzeczy, jak kopia zapasowa bazy danych usługi sieciowe niż w jakimkolwiek innym środowisku.
  • Obsługa ekranu. Standardowa obsługa ekranu zaimplementowana w AS / 400 i MicroFocus Cobol jest doskonała.
  • Występ. Od wielu lat kompilatory COBOL produkują pliki wykonywalne o bardzo wysokiej wydajności. Tylko natywny C i natywny asembler pokonały COBOL na komputerze mainframe IBM.

Podsumowując, radzi sobie całkiem dobrze z czymś, co komitet opracował w latach 50. XX wieku. Jeśli istniejąca aplikacja jest zaimplementowana w języku COBOL i wykonuje zadanie, nie ma powodu, aby ją ponownie pisać. Jednak chyba, że ​​istnieje naprawdę dobry powód, nie widzę żadnego uzasadnienia dla nowych projektów do korzystania z COBOL.

James Anderson
źródło
2
W mojej odpowiedzi mówię, że COBOL jest szkodliwy dla struktur danych. Czy to różnica w znaczeniu „struktury danych”? Może narzędzia do układania rekordów są doskonałe, ale COBOL wciąż jest niewłaściwym językiem dla drzew binarnych itp.? A może moje doświadczenie z COBOL było po prostu za stare lub w inny sposób ograniczone? Kluczowe pytanie - czy COBOL ma wskaźniki? (Co niepokojące, szybkie Google sugeruje „tak”, choć moja stara książka sugeruje „nie”). Nie chciałbym wycofywać odpowiedzi, która zarobiła dla mnie wszystkie te piękne punkty rep, ale jeśli się mylę ...
Steve314,
3
Arytmetyka dziesiętna ma swoje minusy: musisz dokładnie powiedzieć, ile cyfr chcesz. Pamiętam, jak znajdowałem błędy, kiedy mieliśmy o jeden za mało 9s w PICklauzuli w jakimś programie w grupie.
David Thornley,
2
Moje (niedoinformowane) wrażenie jest takie, że COBOL jest szczególnie dobry w przetwarzaniu danych w sztywnych rekordach o stałej wielkości. Być może nie tak dobrze w dynamicznych strukturach danych. Popraw mnie, jeśli się mylę.
Barry Brown,
@ Steve314 - tak, wskaźniki pojawiły się około 1985 roku, ale były trochę kulawe, ponieważ można było ustawić je tylko w sekcji linkowania. Późniejsze wersje pozwoliły na wskazanie czegokolwiek.
James Anderson,
1
@ Struktury - chociaż nie spełnia standardów Pythona pod względem skrótów i drzew itp. Jest tak dobry jak C lub Java - z wyjątkiem tego, że nie jest tak dobry C ++ plus Boost lub Java plus biblioteka zbiorów. Po raz kolejny brak docenienia wartości standardowych bibliotek i funkcji okaleczył język przez całe jego życie.
James Anderson
27

To prawdopodobnie zależy od Djikstry. Djikstra stwierdził, że „stosowanie COBOL kaleczy umysł; dlatego jego nauczanie należy traktować jako przestępstwo”. Kobol był postrzegany jako naiwny, nieuporządkowany i gadatliwy. Dzięki możliwości samodzielnego zmieniania kodu (praktyka odradzana nawet wśród programistów cobol) było postrzegane jako dość trudne do debugowania lub śledzenia.

Jest też kwestia dużej niezgodności między wersjami.

Proponuję przeczytać sekcję krytyki i obrony w Wikipedii dotyczącą języka - http://en.wikipedia.org/wiki/COBOL#Criticism_and_defense

Danny Staple
źródło
20
Pewnego dnia odkryją sklepienie pełne kodu napisanego przez Dijkstrę w językach, które potępił.
jonsca
7
@jonsca - będziesz zaskoczony tym, co zrobisz dla pieniędzy.
JeffO
3
Niekompatybilne wersje były dość powszechne aż do lat 70., a nawet w latach 80. istniała wersja Basic. Dijkstra prawdopodobnie wypowiadał się w oparciu o problem, o którym wspomniałem w mojej odpowiedzi - COBOL nie nadaje się do (lub miał być dobry) kodowania struktury danych. Dlatego dla konkretnej wartości „nauczania programowania” lub „nauczania informatyki” COBOL naprawdę jest trucizną. Oczywiście od COBOL nie jest przeznaczony do tego, że jest to bardzo niesprawiedliwe twierdzenie - ale potem znowu, IIRC, kontekst było to, że niektórzy ludzie zostali próbują uczyć tych rzeczy wykorzystaniem COBOL.
Steve314,
2
Dijkstra <- mężczyzna, który za dużo
gadał
3
@Danny: COBOL gardził na długo zanim Dijkstra napisał tę linię w 1975 roku.
John R. Strohm
9

Wiek i gadatliwość to zwykle rzeczy, które sprawiają, że ludzie narzekają na to.

Wydaje mi się, że głównym celem IBM przy projektowaniu COBOL było to, że „powinno ono pozwolić menedżerowi banku na napisanie programu”. Cel ten miał oczywiście głęboki wpływ na sposób zaprojektowania języka i teraz ewoluował.

Najwyraźniej na wolności jest więcej COBOL niż w jakimkolwiek innym języku. Jednak po prawie 20 latach pracy w IT (15 w bankowości) nigdy nie spotkałem ani jednego systemu, który został w nim wdrożony.

Sean
źródło
Słyszałem, że ktoś wspomniał przelotnie o bankowości, co jest jedynym powodem, dla którego to zawarłem, ale z pewnością uwierzę ci na słowo nad czyjąś.
jonsca
4
Przez 20 lat pracowałem w bankowości, prawie wszystkie w COBOL. Różne banki zrobiły różne rzeczy, jak sądzę.
TrueDub,
Znam przynajmniej jeden duży system ERP, który ma (lub miał do około 2007 r.) Dużo COBOL-a.
Alan B,
2
To nie IBM zaprojektował COBOL. Głównymi inicjatorami byli US Navy i UNIVAC.
James Anderson,
8
„głównym celem IBM przy projektowaniu COBOL było to, że„ powinien pozwolić menedżerowi banku napisać program ”.” Szlachetny cel, chociaż ogromna większość menadżerów, których znam, nie może nawet napisać prostej literatury na stronę internetową, a co dopiero pisać COBOL.
wałek klonowy
8

Co jest tak złego w COBOL?

Nic.

Myślę, że ludzie mają z góry założone przekonanie, że stare jest złe, „najnowsze są najlepsze”. Nadal jest w użyciu i jestem pewien, że będzie wystarczająca ilość prac konserwacyjnych nad kodem, które można będzie wykonać przez kolejne pół wieku.

W 1997 r. Gartner Group podała, że ​​80% światowej działalności prowadzonej było w oparciu o COBOL, z ponad 200 miliardami linii kodu i około 5 miliardami linii nowego kodu rocznie. (przez wikipedia )

W kodowaniu należy zawsze wybrać najlepsze narzędzie do pracy, a w przypadku niektórych branż powiązanych z określonym sprzętem język jest optymalny. Nigdy nie pracowałem w bankowości, gdzie słyszałem, że jest popularna, ale odpowiedź Seana wskazuje, że tak nie jest.

Jeśli występuje problem ze starszym kodem, który wygląda na stary, o ile można uderzyć interfejsem użytkownika lub interfejsem sieciowym przed nim, większość użytkowników nawet nie zauważy różnicy.

jonsca
źródło
1
Języki są dla użytkowników?
JeffO,
16
„Linie kodu” nie są dobrą miarą międzyjęzykową. COBOL jest notorycznie gadatliwy. Te 5 miliardów wierszy kodu prawdopodobnie odpowiada siedemnastu wyrażeniom regularnym;)
MSalters,
3
Czasami COBOL jest właściwym narzędziem do pracy - wiele razy tak nie jest. Trudność polega na tym, aby ludzie rozpoznali różnicę.
TrueDub,
1
Całkiem prawda, @TrueDub. Moje zdanie zabrzmiało nieco sprzedawczo, ale tak nie było.
jonsca
3
@TrueDub: Jeśli COBOL jest właściwym narzędziem do pracy, nie chcę tego robić, dopóki mam alternatywy. Są o wiele ciekawsze prace, za które mogę dobrze zarabiać.
David Thornley,
5

Ludzie nie lubią języka COBOL, ponieważ ma on ograniczone zastosowanie. Został zaprojektowany dla systemów biznesowych, finansowych i administracyjnych dla firm i rządów.

Co łączy je wszystkie? Dane. Dużo danych.

Zgadnij, kto został zaprojektowany do kruszenia danych i ma dużo plików na śniadanie? Czy możesz powiedzieć COmmon Business-Oriented Language ?

50 lat temu COBOL był najlepszą rzeczą dla dużych organizacji z dużą ilością danych do zarządzania. Obecnie istnieją lepsze sposoby zarządzania dużą ilością danych, więc COBOL nie jest już istotny. Albo to jest?

Rozważmy rządy. Jakie dane potrzebuje rząd do śledzenia? Identyfikatory osób, akty urodzenia, dokumentacja medyczna, podatki (och ... tak ... podatki) itp. I muszą przechowywać te informacje w nieskończoność, dziś i 50 lat temu.

Ludzie również opisywali banki w niektórych odpowiedziach i rzeczywiście banki są intensywnym użytkownikiem COBOL. Dlaczego? ponieważ w przeciwieństwie do innych rodzajów firm banki zwykle mają swoją historię. Niektóre istnieją od setek lat ( jak na przykład ten ).

Oznacza to, że niektóre dane z 50 lat muszą być nadal z nami, dziś, 7 października 2011 r. Teraz mamy SQL Server i C # lub Oracle i Java, ale 50 lat temu było COBOL i pliki.

W miarę upływu czasu dane rządów i banków stawały się coraz większe, a migracja systemów była coraz droższa. Co oznacza, że ​​muszą pozostać w języku COBOL i być stale utrzymywani i ewoluować wraz z rozwojem biznesu. Niektóre banki powoli migrują, podczas gdy inne po prostu przyklejają ładny interfejs Web2.0 przed komputerem mainframe (najczęściej używane są c # i Java). Czy możesz powiedzieć starszy kod? (COBOL idzie w parze z (ekstremalnym) starszym kodem, niektórym dotkniętym przez wiele osób przez dziesięciolecia istnienia - kolejna rzecz, której programiści nie lubimy: D).

A teraz masz niszę działalności. COBOL ma teraz ograniczone zastosowanie i wpływa to na twoje doświadczenie .

A ludzie, którzy wchodzą w COBOL, w końcu odkrywają, że robisz to samo w kółko, rok po roku, a kiedy się budzą, nie są już konkurencyjni na rynku, ponieważ ludzie chcą teraz PHP, Java, C # , REST, jQuery i tylko banki szukają osób COBOL.

W tym momencie popyt jest niższy niż podaż, a ci, którzy nie robią cięcia, muszą przejść do czegoś innego. I muszą zacząć jako juniorzy, ponieważ COBOL naprawdę kaleczy umysł (wierzcie, że nie kopiowanie i wklejanie jest głównym stylem rozwoju w COBOL i odpowiada za jego dużą wydajność), a teraz przeklinają dzień, w którym wzięli COBOL i nie nie tracę okazji do opowiadania o tym swoich horrorów :). Ale możesz opowiedzieć te historie o jakimkolwiek starym języku fartów, który obecnie nie jest już pożądany, ale jesteś niefortunną osobą, która go tkwi. No cóż ...

PS i COBOL są złe z wszystkich innych powodów wymienionych przez innych :)

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.Naprawdę? A jak mierzył to dzień? Czy poszli zrobić każdą firmę na świecie i zapytali ich, ile mają linii COBOL lub co?


źródło
4

Dwie funkcje.

  • Oświadczenie ALTER jest czystym złem. Chociaż rzadko stosowany w bardziej nowoczesnych aplikacjach COBOL, był intensywnie wykorzystywany w „dawnych czasach”, ponieważ był bardziej wydajny niż równoważna struktura „IF-GOTO”. Gdy komputery miały tylko 32 KB pamięci RAM, każda instrukcja miała znaczenie. Zmodyfikował instrukcję GOTO, aby mieć inne miejsce docelowe.

    To spowodowało, że kod stał się nieprzejrzysty, ponieważ sam kod był stanowy.

  • Klauzula REDEFINES w strukturze danych (jak unionw C) jest problemem wiecznym. Termin „wolny związek” - tj. Nakładające się struktury danych bez dyskryminatora - jest sposobem na podsumowanie problemu. Dwa aliasy REDEFINES nie mogą być trywialnie rozróżniane przez dane; tylko obszerne czytanie logiki programu może określić znaczenie dwóch alternatywnych interpretacji bajtów.

    To spowodowało, że wiele struktur danych stało się nieprzezroczystych, ponieważ danych nie można zrozumieć bez kodu.

Czytelność angielskiej składni została pokonana przez te dwa konstrukty.

[Moderatorzy ostrzegają mnie, że krótkie odpowiedzi lekceważą twoje ważne i interesujące pytanie. Jeśli uważasz to za lekceważące, możesz poprosić o szczegóły. Lub oflaguj go, aby moderatorzy mogli go usunąć.]

S.Lott
źródło
Nie pamiętam żadnego z nich - ani represji, ani ich nigdy się nie nauczyłem. Szybkie wyszukiwanie mówi mi, że z pewnością zgadzam się, że ALTERto zło, ale ta funkcja jest rzadko używana, jeśli w ogóle, dlatego nie jest tak naprawdę powodem do nienawidzenia COBOL. REDEFINESJednak nie jestem tego taki pewien . Porównanie z tym unionsprawia, że ​​myślę o tym nieco bardziej uprzejmie - ale może to, co jest w porządku w przypadku niskiego poziomu fiddlingu i języka obsługi struktury danych, może nie być świetnym pomysłem w przetwarzaniu danych.
Steve314,
Czasami twoje odpowiedzi wydają mi się lekceważące, ale ta jest po prostu bezużyteczna. Nie wiem, czy próbujesz tutaj pomóc, ale robisz to źle, czy tylko rozmawiasz ze sobą. Mógłbym zapytać, co rozumiesz przez „czyste zło”, ale piękno powyższych dobrych odpowiedzi polega na tym, że nie muszę rozpoczynać rozmowy, aby się czegoś nauczyć.
Eric Wilson,
@EricWilson: Dzięki za tak dokładne odrzucenie mojej odpowiedzi. To pomogło mi zrozumieć, co jeszcze trzeba dodać.
S.Lott,
1
@Eric - problem ALTERpolega na tym, że przekierowuje gotos. Po pierwsze, oznacza to, że używasz gotos - samo w sobie nie sądzę, że to zło, ale w większości języków jest to niezwykła sprawa wyjątkowa. Po drugie, oznacza to, że gotos idą gdzie indziej niż tam, gdzie mówią, że pójdą - i to jest po prostu przerażające. Nie jestem do końca przekonany, czy to kod samodmodyfikujący, ale jest opisany jako ten, w którym patrzyłem, a myślenie o nim jako o modyfikowaniu celów instrukcji skoku w asemblerze wyjaśnia dlaczego.
Steve314,
@ S.Lott Dzięki za uzupełnienia (Ty też @ Steve314), nauczyłem się czegoś ciekawego i odwróciłem swój głos.
Eric Wilson,
3

Przez kilka dobrych lat programowałem w języku COBOL. Jego składnia jest prosta w porównaniu do dzisiejszych języków i nie trzeba wiele teorii, aby nauczyć się, jak zacząć. COBOL bardzo dobrze współpracował z IBM CICS (system do zarządzania transakcjami on-line), a programista musi zrobić to, aby w kodzie przeskalować liczbę użytkowników od 1 do kilku tysięcy. CICS zapewnił oparty na znakach GUI, który działał z ekranem jako jednostką wyświetlania (bez okien). Możesz wyświetlać wykresy za pomocą (IBM GDDM) na komputerze mainframe. COBOL może komunikować się z plikami indeksowanymi (VSAM i ISAM), a także z DB2 (relacyjny oparty na SQL), a także IMS. COBOL / CICS to bardzo solidne środowisko, którego możesz się nauczyć w ciągu kilku tygodni. Oznacza to, że skupiasz się na biznesie, a nie na technologii, więc pracujesz 7 z 8 godzin na kodowaniu, a nie na nauce MVM, JavaScript i tym podobnych.

Problemem z COBOL jest zły marketing, który prowadzi do braku zainteresowania stron trzecich tworzeniem narzędzi i środowisk programistycznych. Ponadto brak obsługi interfejsu podobnego do systemu Windows spowodował spadek jego popularności po 1993 r. Koszty komputerów mainframe skłoniły klientów do poszukiwania alternatyw i kompilatorów dla języka COBOL dostępnych w systemach UNIX i DOS. Język C przyciągnął wiele światła, ponieważ był bardziej przenośny i miał bezpośredni dostęp do funkcji systemu operacyjnego, czego COBOL miał bardzo mało.

Języki takie jak VB, DBase, FoxPro i Clipper miały lepsze sposoby dostępu do „baz danych” na PC niż porównywalny COBOL w DOS, więc COBOL stracił. CICS przez długi czas nie był tani w systemach DOS i UNIX, więc jego wartość nie była obecna w tych środowiskach.

Dzisiaj COBOL jest obsługiwany przez .NET, ale myślę, że przegrał bitwę na wszystkich platformach oprócz mainframe (i prawdopodobnie AS / 400), gdzie wciąż tam jest ze względu na ogromną liczbę krytycznych aplikacji, w pełni zależnych od to.

Bez szans
źródło
„brak wsparcia dla Windows, jak interfejs” .... co netcobol.com/products/Fujitsu-NetCOBOL-for-.NET/overview
JoelFan
@JoelFan dzięki za komentarz. Masz rację, że dziś są lepsze narzędzia do COBOL, ale myślę, że wszystkie one przybyły za późno. Mój punkt widzenia na temat braku obsługi interfejsu Windows był na początku lat 90., gdzie tylko Micro Focus był jedynym graczem na rynku.
NoChance,
2

Heh, poszedłem do college'u na początku lat 80., a ludzie pogardzali COBOL-em jeszcze wtedy. Myślę, że największym problemem jest jego gadatliwość - proste „Witaj, świecie!” w języku COBOL jest prawdopodobnie ponad pięćdziesiąt wierszy, z których 95% to wymagana płyta kotłowa. To po prostu niezbyt elegancki lub atrakcyjny język. Został również zaprojektowany, aby poradzić sobie z wczorajszymi problemami i tak naprawdę nie nadaje się do paradygmatów programistycznych opracowanych po około 1970 roku. Jest to całkiem dobry język generowania raportów - o ile raporty są nieskończonymi kolumnami liczb z nagłówkami i stopkami. Jeśli chcesz gdzieś nakleić wykres lub logo, zapomnij o tym. Myślę, że wciąż jest to najszybszy język do zadań typu „przetwarzanie danych” (weź plik o stałym formacie z 5-milionowymi transakcjami w bankomatach i dokonaj prostej korekty bilansu dla każdego z nich), ale ilu programistów robi takie rzeczy? I wiele systemów korzysta obecnie z XML lub JSON, nie chciałbym myśleć o próbowaniu parsowania czegoś takiego w COBOL (właściwie nie chciałbym myśleć o parsowaniu w ogóle w języku COBOL!)

TMN
źródło
1
„Witaj świecie” zajmuje tyle linii ?. Parsowanie / generowanie XML - jest teraz wbudowane w język. Może powinieneś aktualizować swoją bazę wiedzy. Ta odpowiedź należy do ery COBOL z lat 60.
NealB
Ciekawy. Nie musiałem współpracować z COBOLEM przez prawie dekadę, ale ostatnim razem, gdy go zobaczyłem, napisano tak, jak go zapamiętałem, DYWIZJA IDENTYFIKACYJNA, SEKCJA PRACY I PRZECHOWYWANIA i tak dalej. Sądzę, że wszystkie te „wymagane komentarze” (AUTOR, PISEMNA DATA, ŹRÓDŁO KOMPUTERA, OBIEKT-KOMPUTER) są teraz opcjonalne. Analiza składniowa XML nie wygląda tak imponująco - musisz zorganizować podział danych, aby odzwierciedlić strukturę pliku, nie ma przetwarzania w stylu SAX ani DOM. Ale dobrze wiedzieć, że tam jest.
TMN