IBM derleyicisi + COBOL'u C ++ ile yeniden yazma


13

1972 yılında yazılmış bir kiralama sistemi üzerinde çalışan bir araç kiralama şirketi için kiralama acentesi / yöneticisi olarak çalışıyorum. Belki de güncelleme zamanı geldiğine karar verdim. Biraz arka plan için, günlük olarak bu programdan ele almamız gereken deliliğe kısa bir örnek:

Bir kiralama acentesi, bir ekranda yazdırmanın ACT alanında "MXC" kullandığını (her şeyin kısa kodlara dayandığını) hatırlamalıdır; bu da şaşırtıcı bir şekilde "Bir Sözleşmede Maksimum Ekran" anlamına gelirken, diğerinde PR (PRint için) EYLEM alanı, ancak birkaç ekran PT (PrinT için) alanında Y kullanır, ancak başka bir ekran PRT (PRinT için) alanında Y kullanır, ancak başka bir ekran kullanıcının enter tuşuna basmasını gerektirir (ancak Harfler, bu yeni bir çizgi karakteri olduğu için, sayı tuş takımındaki enter olmalıdır) ve daha sonra farklı ama ilgili bir ekran sadece F8 gerektirir, bazı ekranlarda PRT etiketli bir alan vardır, bu alan PRinT için olmalıdır, ancak alan aslında hiçbir şey yapmaz ve yazdırma birkaç bilgi isteminden sonra otomatik olarak yapılır ve yine de daha fazla ekranda YAZDIRMA Y / N etiketli bir alan bulunur,bu, başka bir konumun zaten evrakları teslim ettiği işlemler için Y'yi ve başka bir bayinin evraklara ihtiyaç duyacağı işlemler için N'yi varsayılan olarak ayarlar.

Bundan daha iyi bir iş yapabileceğime karar verdim, bu yüzden şirkette bunu güncelleme kararını verecek kişi ile iletişime geçmeye karar verdim. Sonunda bu programdan sorumlu olan BT Başkan Yardımcısı'na geçiyorum. Ondan biraz bilgi alıyorum ve araç kiralama şirketimin kiralama programını IBM ana bilgisayar montajcısında biraz COBOL ile karıştırılmış olarak yazdığını öğreniyorum. Şu anda açık pozisyon olmadığını söylüyor, ama yapmalıyım özgeçmişimi yine de e-postayla gönder (bir şey açıldığında).

Bu beni sorularıma götürüyor.

Birincisi teknik. Gelecekte sürdürülebilirliği geliştirme fikriyle düşüncem, montaj dilinden daha yüksek bir dilde yeniden yazmaktır. Benim deneyim alanı C ++, bu yüzden bu benim için bariz bir seçimdir. Kısa süre önce konuştuğum adamın takımın çok çalıştığını söyleyen bir makaleyi okuduğumdan, şirketin programı güncellemenin daha kolay bir yoluna ihtiyacı var ve programın şimdi 5 için destek olduğunu duyurmaktan gurur duyuyorlar. - basamaklı konum kodları (4 yerine) ve 8 basamaklı araba numaraları (7 yerine). Güncellemeler hakkındaki felsefem, bu korkunç durumlarda bile Joel'inkiyle uyumlu: http://www.joelonsoftware.com/articles/fog0000000069.html kısaca, yeniden yazma daha önce var olan her şeyi atmak yerine artımlı olmalı ve yeni başlıyor.

IBM derlemesini C ++ ile entegre etmenin kolay bir yolu var mı, öyleyse nasıl yapmalıyım? Asm anahtar kelimesinin belirsiz bir şekilde farkındayım, ancak bunu kullanmanın veya başka bir şey yapmanın en iyisi olup olmadığını bilmiyorum. Böyle bir plan tavsiye edilmiyor mu? Linux üzerinde yaptığım işlerin çoğunu g ++ ve GNU yapmak için yapıyorum, bu yüzden buna özel cevaplar memnuniyetle karşılanıyor, ancak kesinlikle gerekli değil (çünkü ne tür bir inşa sistemine sahip oldukları hakkında hiçbir fikrim yok, ancak neredeyse hiç şüphelenmiyorum).

İkinci soru daha politik. Bu şirketi geçişi yapmaları için ikna etmeye nasıl devam etmeliyim? Teorik maliyet tasarrufu çok büyük (tahminlerime dayanarak, şirket yılda ekstra milyon dolar harcıyor, sadece programla nasıl etkileşime gireceğini öğrenmek için artan eğitim maliyetlerinde), ancak önerilen değişikliklerim muhtemelen tüm yürürlükteki programcıların işten çıkarılması, yürürlüğe girmeleri durumunda, değişime karşı büyük bir yapısal direnç var.

edit: Ben neden şirketin zaten sahip olduğunu değiştirmek bana en iyi çözüm gibi görünüyor açıklamalıyım. Yine de başka önerilere açığım, çünkü bu bir programın canavarı. Daha önce hiç programlama işim olmadı, bu yüzden lütfen verebileceğim yanlış analizlerde beni düzeltin.

İlk önce, hazır çözüm var.

Bu tür bir şey hakkında birkaç orta düzey yöneticiyle yaptığım görüşmelerden, yeni bir sisteme geçmenin ana endişelerinden biri, şirketle yıllardır birlikte olan ve şimdiye kadar sistemle rahat olan çok sayıda sadık çalışan . Sahip olduklarımızı değiştirme yeteneğim varsa, mevcut arayüzü bir tür 'uyumluluk modunda' koruyabilirim. Kullanıcılar zaten mevcut sistemi kullanmak için oturum açmak zorunda, bu yüzden kullanıcılar 'ilk' kez (bu değişikliği yaptıktan sonra) oturum açtıklarında, 'klasik' arayüz veya 'yeni' arayüz. Buna izin veren hazır bir çözüm bulmamın bir yolu yok,

Şirketim ayrıca kullandığımız yazılıma da sahiptir; lisans vermiyoruz. Bu şu anda konuştuğum yönetimin aslında bir değişiklik yapmam için bana yetki verebilecek insanlar olduğu anlamına geliyor. Üçüncü taraf bir çözümle, kullandığımız ürünü geliştiren şirketten ne gibi haklar alınacağının yanı sıra ek bir engel ekleyen şirketimden onay almam gerekir. Bu aynı zamanda şirketi "ürünlerinden" vazgeçmeye ve başka bir ürünü almaya ikna etmeyi gerektirecektir, ki bu da sahip olduklarımızı güncellemeye çalışmaktan daha büyük bir engel gibi gözükmektedir, ancak bu konuda çok yanlış olabilirim.

Son olarak, geleceğe baktığımda, sadece kullanıcı arayüzünü geliştirmek ve birkaç hatayı düzeltmek istemiyorum. Bu 'acil' sorunları güncelledikten sonra, şirketin teknoloji ile ilgili temel çalışma şeklini güncellemeyi umuyordum. Bu tür konularda 1-2 yıl geçirdikten sonra planım yönetime geri dönüp daha dramatik değişiklikler önermekti. Şirketin şu anda kullanmadığı teknoloji ile temelden geliştirilebilecek birçok yolu var. Örneğin, her bölge hemen hemen aynı şekilde çalışır. Yerel büyük havaalanı, araba dağıtmak için merkezi bir merkezdir. Öncelikle gerektiği gibi gönderilir. Ancak havalimanı tüm operasyonlar için ana üs olarak kullanılıyor. İhtiyacımız olmayan bir araba almak için bir arabada iki kişiyi bulunduğum yere gönderecekler, sonra geldikleri araba ile artı havaalanına dönüş, ne onlar geri alıyor (biz havaalanından 32 mil). Daha sonra iki arabada bizden 5 kilometre uzakta bir yere gelecekler, onlardan birini bırakacaklar, sonra diğer arabalarına geri dönecekler. Geri gönderdiğimiz araba bize yakın ihtiyaç duydukları araba aynı tür olsa bile bunu yaparlar. Yaklaşık iki yıldır şirketle birlikteyim ve sadece araba kıtlığının en aşırı acil durumlarında (yani yaklaşık üç kez) bundan sapmış gibi görünüyorlar. Her bölgede çalışan 4 kişiyi, otomobillerin nereye gittiğini belirleyen otomatik bir zamanlama sistemi ile değiştirir ve olması gereken tüm arabaları sunmak için en az zaman + mil + sürücü gerektiren yolu bulmaya çalışırım. daha yüksek seviye düzeltmeleri örneği bir gün eklemek umuyoruz.

Ancak, tüm bunları önermek için rahat hissetmeden önce, arabirimi güncellemek gibi daha küçük görevleri yaparak şirkette ve kod tabanında bir pay sahibi olmanın yararlı olacağını hissediyorum. Dış kaynak kullanımı veya başka türlü çözümler bu olasılığı ortadan kaldıracaktır.


3
Hercules emülatörüne bakın - taklit edilmesi gereken bir IBM anabilgisayarının çekirdek işletim sisteminde çok fazla sihir var.
Yann Ramin

Dürüst olmak gerekirse "baştan yeniden yap" bakmak (kötü C64 şaka). Yine de, teknik özellikleri kontrol edin ve yeni bir GUI kendiniz yazmak için ne gerekebileceğini görün. Veritabanı arayüzü aynı olduğu sürece ve bu belirlemek için çok zaman ve araştırma sürecektir, o zaman altınsınız - ve $ # && yükü para kazanmak için :)

8
Mevcut sistem gerçekten işe yarıyorsa, bunun müşteri için ödemesi için çok iyi bir nedeniniz olması gerekir. Ayrıca, mevcut sistemi yeniden üretmek için gereken iş miktarını ciddi şekilde küçümseyeceksiniz - sadece mevcut sistemi tamamen anlamanız gerektiğini düşünün - yeniden yazımınızı orijinal tahminden daha pahalı hale getirin. Bu sizi cesaretlendirmek için değil, sadece geri alamayacağınız ÖNCE ne kadar saçmalık görevini bildiğinizden emin olmak içindir. Ayrıca, çalışmanızı aşamalı hale getirin - diğer bir deyişle şimdilik ana bilgisayarda kalın.

Korkarım ki, sistemi taklit etmek beni sıfırdan başlamaya çalışmak yerine küçük, modüler değişiklikler yapmam için bir yol aramaya iten çok zor olurdu.
David Stone

@David Stone Bir zamanlar bir projede bulundum "yeni ya da eski arayüzü seçin" şeyi yaptık. HIZLI geliştirme cehenneme gitti - kod arayüzü ile sıkıca bağlandı ve hızla if (m_newInterface)spagetti kodu tüm kod tabanı üzerinde görünmeye başladı. Ayrıştırma ve yeniden düzenleme, tamamlandığında, kullanıcıların çoğunun zaten yeni arayüze geçtiği kadar uzun sürdü (birkaç yıl düşünün).
Vitor Py

Yanıtlar:


4

Kendimi teknik cepheyle sınırlamak ...

Uygulamanın çalıştığı ortamı belirleyerek başlamanızı öneririm. "Mainframe" uygulamanın yaşı göz önüne alındığında CICS veya IMS olabilir birkaç farklı şey anlamına gelebilir . Orijinal yazarların kendi başlangıç ​​görevlerini yazmaları da mümkündür.

Uygulamanın çalıştığı yere bağlı olarak, muhtemelen bu ortam için API'leri kullanacak, CICS artık ilk günlerinden belirgin bir şekilde farklı bir arayüz kullanıyor , IMS için konuşamıyorum. Uygulamanın kendi başlattığı görev ise, o zaman kendi dahili API'sine sahip olabilir - aynı çağda yazılmış böyle bir canavarı desteklemek için yaklaşık yedi yıl geçirdim.

Başvurunun yaşı göz önüne alındığında, dikkate alınacak başka bir şey, C ++ ile entegre etmek istediğiniz Assembler'ın Dil Ortamı'nın (LE) varlığından önce gelmesidir . Bu nedenle, Assembler LE uyumlu olacak şekilde güncellenmedikçe, C ve C ++ LE uyumlu olduğundan ve arayanların ve calle'lerin de uymasını gerektirdiği için bazı zorluklarınız olacaktır.

Göz önünde bulundurulması gereken başka bir nokta, bu uygulama can çekişen bir ana bilgisayarda çalışıyorsa, desteklenmeyen donanım ve yazılım üzerinde çalışan bir uygulama ile tümleştirmeye çalışıyor olabilirsiniz. Bu, 1989'da yazılmış ve özgün donanımında DOS 4.01 üzerinde çalışan bir uygulama ile tümleştirmeye çalışmaktan farklı olmayacaktır.


Uygulama , bir dönüşümü son derece zorlaştıracak TPF'yi bile kullanabilir .
Gilbert Le Blanc

13

Silahı atlıyorsun. Açıklamanızdan, mevcut teknik ortamı tam olarak anlamadığınız anlaşılıyor (hangi işletim sistemi tam olarak, nerede ve nasıl saklanıyor, diğer sistemlerle arayüzler var mı). Ancak daha da önemlisi: ciddi bir plan, yazılımın kısmi veya tam bir şirket içi yeniden yazımına, yani hazır yazılımlara, yeniden yazmanın dışa aktarılmasına, hizmet olarak yazılımlara vb.

Şirket ne şekilde olursa olsun, öncelikle yazılımın bugün ne yaptığını ve yeni çözümün gereksinimlerinin ne olduğunu sağlam bir şekilde analiz etmelidir.

Öyleyse neden bu analizi yapmayı önermiyorsun?


7
+1 Teknik bir çözüm önermeden önce mevcut başvuru ve şirket taleplerinin tam analizini öneren tek cevap budur. Bana eski şakayı hatırlatıyor: Kodlamaya başlıyorsun - ne istediklerini öğreneceğim.

Bu iyi bir nokta ve bu işi yapmadan önce kesinlikle daha fazla bilgiye ihtiyacım var. Sorunun bir kısmı etrafta sordum ve şirketin başkan yardımcısına geçene kadar gerçekten herhangi bir ayrıntıyı bilen birini bulduğum değildi. Teknik destek de dahil olmak üzere çeşitli ofisleri aradım ve hiçbiri bana programın hangi programlama dilinde yazıldığı gibi ayrıntılar veremedi. Ancak, düzenleyeceğim hazır bir çözüm atmak için bazı nedenlerim var. orijinal sorum.
David Stone

7

Böyle kibar bir yanıt aldığınıza şaşırdım!

Buna kendi bakış açılarından bakalım.

Muhtemelen yüz binlerce satır kod ile otuz yıllık bir sistemi başarıyla yönetiyorlar, belki de kırk yıl içinde gelişen bir iş sürecini somutlaştıran yirmi diğer sisteme arayüz oluşturuyorlar.

Muhtemelen / umarız kendi alanlarında uzmandırlar ve bu nedenle C ++ 'ı tam başlığını vermek için IBM'in "Yüksek Seviye Birleştirici Dili" nden bir adım olarak görürler. IBMs derleyici dili son derece güçlü ve "MACRO" dili, bir ön işleme / şablon dilinin en iyi uygulamasıdır.

İlk uygulamaya konulduğundan bu yana yaklaşık beş yılda bir sistemlerini değiştirmek için bir teklif olacaktır. Bazıları bir fizibilite çalışmasından sonra reddedilirdi, bazıları orada bütçe kaybetmeden önce tasarım aşamasına kadar inebilirdi, bazıları performans sorunlarına çarpmadan ve konserve edilmeden önce koda ve belki de test aşamasına girmiş olabilir.

C ++ yardımcı olmaz. Uygulamanın çalıştığı ortamda grafik kütüphanesi yok. (3270 grafik kitaplığı var, ancak hiç kimse kullanmadığı için C ++ 'da desteklenmesi pek mümkün değil ve tam bir "X" istemci kitaplığı var, ancak kullanmak için farklı bir ortamda olmanız gerekiyor.)

Onlar mükemmel olmaktan uzak ama iyi bilinen ve hızlı bir kullanıcı arayüzü var. Deneyimli bir operatör, eşdeğer bir GUI yerine yeşil ekran kullanarak formu üç kat daha hızlı dolduracaktır. Ayrıca müşteriye dokunurken müşteriye dikkat edebilirler.

Ekran operatörleri hangi arabirimi kullanırlarsa kullansınlar, yeni ve alışılmadık bir GUI kullanmak için tüm çalışanların yeniden eğitilmesi, olde worldy sistemindeki yeni çalışanları eğitmekle karşılaştırıldığında büyük bir bütçe kalemi olacaktır.


4

Birkaç yıl önce BellSouth'ta da benzer bir sorun yaşadım. Basitçe COBOL kodu bayt bayt bayt bayt taramak, opcodes ve işlenenleri ayırmak, şube talimatları tos dönüştürmek ve karşılaştırma talimatları IFs dönüştürmek için yazdı. Bu program DC talimatlarını eşdeğer COBOL Veri Bölümü koduna dönüştürdü ve uygun şekilde hamle, zap, vb. Dönüştürdü.

Bu yapıldıktan sonra, IF'leri ve GOTO'ları IF-THEN'lere, bu kümeler arasındaki satırlarda hareketlerle ve benzeri şekilde dönüştürmek için ikinci bir program yazdım (bu gerçekten yapmak o kadar da zor değildi - sır IF'leri eklemek ve ELSE'ler 1. faz "pidgin" kobolunu arkadan öne doğru okurken).

IF-THEN-ELSER, güvenli bir şekilde silinebilecek bir etikete yakın bir GOTO referansı bulduğu durumlar (referans sayısını 1 azaltarak) aradı. Bu IF-THEN-ELSER programını yinelemeli olarak çalıştırırsınız (yani, tekrar tekrar çalıştırırsınız, yalnızca son geçişiniz daha fazla değişiklik yapmanın bir yolunu bulamadığında durur). Kritik çalışmaların çoğu, COBOL ürünü deneyimli, yetkili bir montajcı dili programcısı (yani, ben) tarafından dikkatle incelenmeli ve incelenmelidir. Deneyimlerime göre, "if-then-elser" benim orijinal şube talimatlarından kaynaklanan GO TO'ların yüzde 90'ından fazlasını ortadan kaldırabildi.

Sanırım bu noktadan itibaren C (veya C ++) ya da konuştuğum dillere doğrudan bir dönüşümle ilerlemek mümkün. Ancak BellSouth'ta hedef dilimiz COBOL / II idi. Kalan bir etiketin birden fazla GO TO referansına sahip olduğu durumlardan kaynaklanan biraz karmaşıklık vardır (çoğu zaman bu durumlar COBOL PERFORM'lar tarafından işlenir, ancak bazen basitçe OR ve AND yapıları tarafından temsil edilebilir).

Ben EVALUATEs (Case yapıları) ve 88 seviye koşul adları ile zarif blok-yapılandırılmış COBOL / II kod üretmek güzel olduğunu düşünüyorum. Bu son rötuşları eklemek, montajcıdan dönüştürülen programlardan kaynaklanmayan COBOL programlarında kullanışlı olduğunu kanıtlayan başka bir program çiftine yol açtı.

Bunun yardımcı olup olmadığını bilmiyorum.

Yukarıdaki diğerlerin yorumladığı gibi, bu süreci dikkatli bir şekilde yürütmelisiniz. Karar verme süreçlerinizi bildiren 10-12 yıllık montajcı kodlama deneyimine sahip olmanıza yardımcı olur. Bu deneyime sahip olan bizleri bulmak artık zor.

Son bir not olarak: O zamanlar sadece montajcıda yazdık, çünkü yüksek seviyeli diller için derleyiciler hantal, verimsiz nesne kodu üretti. Bugünün "optimize edici" COBOL derleyicileri aynı kötü alışkanlıklara sahip değil. ----------


2

Joel'in tavsiyesi genellikle sağlamdır, ancak bu durumda tam bir yeniden yazma gecikmiştir. İdeal olarak, bir battleaxe ile yeniden yazmak, burada uğraştığınız şey bir canavar.

Tam olarak ne ekleyeceğinizden emin değilim, çünkü zaten bu yeniden yazma için oldukça iyi bir tartışma yaptınız. Benim tek tavsiyem C ++ 'ı tamamen atlamak ve doğrudan kiralama sistemi için bir web arayüzüne gitmek olacaktır, çünkü bu muhtemelen işçileri eğitmek için daha da kolay olacak ve kullanıcı arayüzünde çok fazla iş tasarrufu sağlayacaktır. projede yeni kan almak, hatta her şeyi dışarıdan almak çok daha kolay).

Mevcut COBOL programcılarına gelince - belki mevcut sistemi belgelemeye ve geçiş sürecine yardımcı olabilirler.


2
+1: Bu C ++ için bir iş değil
6502

2
@ 6502: Neden olmasın? OP'nin uzmanlığı C ++ 'dadır. Eski bir sistemle nasıl başa çıkılacağını bulmak yeterince kötü. Başka bir dil öğrenmek yardımcı olmaz. Programlayıcının yetkin olduğu araçları kullanan yetkili bir programcı, dili ne olursa olsun eski sistemden çok daha iyi çalışmasını sağlayacaktır.
Silico'da

1
@ Silico: Bence bu büyüklükte oldukça büyük bir proje için, C ++ kullanmaktan çok Python gibi daha uygun bir dil öğrenerek zaman kazanacaksınız. Python'un orada olmadığını varsayarsak, bu tür yeterince büyük bir proje için IMO, C ++ 'da kendi Python'unuzu yazmayı ve C ++' da her şeyi yapmak yerine bunu kodlamayı öder. C ++ çok güzel bir dildir ve güçlü noktası tasarım gereği C ++ ve yukarıdaki montajcıların üstünde boşluk bırakmak istememesidir. Burada tamamen anlamsız. Eğer posterin uzmanlık alanı buysa FPGA'ları kullanarak her şeyi yazmayı önerir misiniz?
6502

3
@ 6502: Katılmıyorum. Uygun, modern teknik, iyi tasarlanmış kütüphaneler ve dilde yetkinlik ile tüm bu konular önemsizdir. (Tabii ki bu herhangi bir dil için geçerli.) Ve insanlar C ++ 'da gayet iyi çalışan ve C ++ kullanımı ile ilgili bir sorun gibi görünmeyen büyük ölçekli sistemler ve yazılımlar geliştirdiler. Çünkü sen gelmez bu iş için C ++ kullanmanız olmaz Başkalarının kullanmaması ve iyi kullanmak mümkün olmaz. Bu OP için karar verecek. Diğer dillerde oldukça üretken olduğunuzdan eminim ve elbette devam edin.
Silico'da

1
Silico: Açıkçası teoride her şey herhangi bir şeyle (brainf k dahil ) uygulanabilir. Bu, tüm araçların eşdeğer olduğu anlamına gelmez. Yazmak ve okumak için basit bir koda sahip bir businness uygulaması için (teknik olmayan kişiler tarafından bile) çıplak bilgi işlem hızından çok daha önemli olduğunu düşünüyorum. Ayrıca tanımlanmamış davranış gibi bir şey, metale gereksiz yakınlığı ödemek için çok yüksek bir fiyattır. Sizin için C ++ iş mantığı için bir veri giriş uygulaması için iyi bir seçim ise, o zaman orada sizin için C ++ kötü bir seçim olduğunu merak ediyorum ...
6502

2

Teknik açıdan, montajcı kodunun kalitesine - modülerliğine - çok bağlı olacaktır. Bazı programcılar, standart IBM alt program bağlantı kurallarını kullanarak belirli, sınırlı işlevli ve açık, basit parametreli arabirime sahip modüller oluşturmanın önemini anladılar. Bununla birlikte, büyük çoğunluk monolitik canavarlıklar yaratma eğilimindeydi.

Birincisi ile yeniden kullanım mümkündür ve C ++ ve montajcı arasındaki "tutkal" ı bulmak zor olmamalı, montajcı modüllerinizin standart (veya en azından tutarlı) çağrı dizileri kullandıkları varsayılarak. Ancak, büyük olasılıkla, birleştirici kodu bir karışıklık olacaktır. Yapılandırılmış bir derleyici yazmak mümkün olmasına rağmen , çok az insan yaptı ve yeniden yazmaya başlamak için herhangi bir "tasarımı" ayırt etmek neredeyse imkansız olacak.

Öte yandan, 360/370 montajcı günümüzün mikroişlemcileri ile karşılaştırıldığında oldukça yüksek seviyededir ve çok daha basittir ve C bazen "yüksek seviyeli montajcı" olarak kabul edilir. Ürünü tamamen 370 montajcı olan bir DBMS şirketi için çalıştım ve asıl mimarımız, montajcı kodunun C'ye makineye çevrilmesinin mümkün olabileceğine inanıyordu (gelecekteki taşınabilirlik için). Şüpheliyim, ama asıl nokta mesafenin düşündüğünüz kadar büyük olmaması.

Bunlardan herhangi birinin yardımcı olup olmadığını bilmiyorum. Dediğim gibi, büyük ölçüde orijinal kodun kalitesine ve boyutuna bağlı olduğunu düşünüyorum.


1

Bunun bir şaka olup olmadığını söyleyemem - şirketiniz aslında 39 yıl önce yazılmış bir kod çalıştırıyor mu? Bir System / 360 üzerinde çalışıyorsa, g ++ kaynağından derlemeniz gerekecek ...

Dürüst olmak gerekirse, eski kodlardan herhangi birini kullanmayı düşünmezdim; yeni bir yaklaşım benimsemeniz, oturmanız ve tasarıma nelerin girmesi gerektiğini düşünmeniz ve bunu baştan aşağı yapmanız gerekir. Evet, bu biraz planlama gerektirecek, ancak Joel'in bile bunun artımlı değişiklikler için bir durum olduğunu söyleyeceğini sanmıyorum.

Geçiş yapmanız gereken şirketi ikna etmeye gelince, verimliliği artıracak, maliyetleri düşürecek ve / veya şu anda kullandığınız şeyin sonuçta şu anda bir miktar zarar verdiğini gösteren belirli nedenlere dikkat etmeniz gerekiyor .

Bir başka yorum - Diğer araç kiralama şirketlerinin 21. yüzyılda geri kalanlarımıza katıldığını hayal ediyorum; Nasıl yaptıklarını görmek için biraz keşif yapardım (web tabanlı, hayal ediyorum) ve muhtemelen bu sistemlerden birinden sonra modellenirim (yani, tekerleği yeniden icat etmeyin).

İyi şanslar!


5
Ana bilgisayar sistemlerinin 60'larda veya 70'lerde başlayan kod tabanlarını kullanması olağandışı değildir. IBM, zSeries ana bilgisayarlarını ve işletim sistemini, bunun 360 tam nedeni ile geriye dönük olarak uyumlu tutar. O zamandan bu yana değişen bir araba kiralama şirketinin (veya bir bankanın veya bir sigorta şirketinin) iş modelinde fazla bir şey yok. Bir web arayüzü ekleyebilirsiniz, ama arabaları veritabanında saklama şekliniz ne değişti?
Bo Persson

zOS, CICS ve DB2 için ön işlemcilerle tamamlanmış yerel bir C ++ derleyicisine sahiptir. Yani g ++ 'a gerek yoktur.
James Anderson

5
İkincisi, büyük şirketlerin 30 yıllık ana bilgisayar kodunu çalıştırması oldukça yaygındır. Genel olarak güvenilir, performanslı ve işini yapar. Ayrıca çok kötü belgeleniyor.
James Anderson

3
@Chris, 39 yaşındaki kod neden çalıştırılmasın? 30 yaşında bayat mı büyüyor? 20? Savaşta test edilmiş üretim kodu eski olabilir, ancak yine de işi mükemmel bir şekilde yapar. Herhangi bir yeniden yazmanın , ücretlerinizi ödeyen programa herhangi bir faydası olmadan önce eski programla aynı seviyeye gelmesi gerekir.

1
@Chris, çok az iyi yazılmış bir "yeşil ekran" uygulama daha hızlı ve bunu bir Cobol dükkanında Java adam olmak kişisel deneyim biliyorum. Açıkçası, hepinizin benzer bir uygulamaya sahip olmak için gereken iş miktarını içtenlikle küçümsediğinize inanıyorum. Ayrıca, kod paslanma. Sadece yaşlı olmak bunu düzeltmek için yeterli bir sebep değildir.

0

Teoride, üst yönetimi eski sistemi değiştirmeye ikna etmek zor olmamalı, eğer onları megabucks'a kurtaracağını gösterebilirseniz. Ve olacak. Bu sistemi korumak için programcılar bulmak gittikçe zorlaşacak ve bu programcılar gittikçe daha pahalı olacak. Bu "eğer" meselesi değil, "ne zaman" meselesidir. Gerçekten güncellenmesi gerekiyor.

Ancak soru, onları sadece güncellenmesi gerektiğine ikna edip edemeyeceğinizdir (ve muhtemelen bunu zaten biliyorlar), aynı zamanda bir şirket içi proje olması gerektiğine ikna edip edemeyeceğinizdir. Özellikle ekip sadece sizseniz. Çoğu zaman böyle büyük bir değiştirme dış kaynaklardan sağlanır. Dikkate alınması gereken bazı hazır yazılımlar bile olabilir. Bu seçeneklerin araştırılması gerekir ve yöneticileriniz mantıklı oldukları zaman bu konuda ısrar eder.

Göreve gelince, eğer bunu yapacak olsaydınız, bu durumda bir buldoze-yeniden yazmanın uygun olabileceğine inanıyorum. Joel'in iddiası her durumda geçerli değildir. Ancak görmeden gerçekten bilemedim.


0
  1. Artımlı bir değişiklik söz konusu değildir.

  2. Hazır bir çözüm olması muhtemeldir. Birçok araç kiralama şirketi var.

  3. Son çare olarak, yeniden yazmanız gerekiyorsa, önce yeni sistemin nasıl çalışacağını düşünmek için biraz zaman ayırın.
    İşlevselliği ve arayüzleri tanımladıktan sonra, ihtiyaçlara (ve becerilerinize) en uygun geliştirme araçlarını seçebilirsiniz.

Son kullanıcılara yönelik stresi en aza indirmenin bir stratejisi, çirkin anımsatıcılar için açılır listeler gibi birkaç incelikle, daha sonra yavaş yavaş kullanıcı arayüzü işlevselliği ekleyip bunları modern bir kullanıcı arayüzüne ayırmaktır.

Muhtemelen aynı veri dosyası biçimini korumak istemezsiniz, bu yüzden geçiş yaptıktan sonra geri dönüş olmaz.


1
Bunu aşamalı olarak yapmazsanız proje büyük olasılıkla başarısız olacaktır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.