Viết lại trình biên dịch IBM + COBOL trong C ++


13

Tôi làm việc như một đại lý / quản lý cho thuê cho một công ty cho thuê xe đang chạy trên một hệ thống cho thuê được viết vào năm 1972. Tôi quyết định rằng có lẽ đã đến lúc cập nhật. Đối với một chút nền tảng, đây là một ví dụ ngắn về sự điên rồ mà chúng ta phải đối phó từ chương trình này hàng ngày:

Một đại lý cho thuê phải nhớ rằng việc in trên một màn hình sử dụng "MXC" trong trường ACT (mọi thứ đều dựa trên các mã ngắn), nghĩa là "MaXimum hiển thị trên Hợp đồng", trong khi trên một màn hình khác, nó yêu cầu PR (cho PRint) trường ACTION, nhưng một số màn hình sử dụng Y trong trường PT (cho PrinT), nhưng một màn hình khác sử dụng Y trong trường PRT (cho PRinT), nhưng một màn hình khác yêu cầu người dùng nhấn enter (nhưng không phải là nhập bên cạnh các chữ cái, vì đó là một ký tự dòng mới, nó phải là ký tự trên bàn phím số) và sau đó là F8, một màn hình khác nhưng có liên quan chỉ cần F8, một số màn hình có trường có nhãn PRT, thực tế là trường PRinT, nhưng thực tế là trường không có gì và việc in được thực hiện tự động sau khi trải qua một số lời nhắc và vẫn còn nhiều màn hình khác có trường có nhãn PRINT Y / N,trong đó chắc chắn mặc định cho Y cho các hoạt động trong đó một địa điểm khác đang giao giấy tờ và cho N cho các hoạt động mà đại lý khác sẽ cần giấy tờ.

Tôi quyết định rằng tôi có thể làm một công việc tốt hơn thế này, vì vậy tôi đã bắt đầu liên hệ với người trong công ty sẽ đưa ra quyết định cập nhật điều này. Cuối cùng tôi cũng thông qua được VP của IT, người phụ trách chương trình này. Tôi nhận được một chút thông tin từ anh ấy và biết rằng công ty cho thuê xe của tôi có chương trình cho thuê được viết bằng trình biên dịch máy tính lớn của IBM với một chút COBOL trộn lẫn. Anh ấy nói rằng không có vị trí nào mở ngay bây giờ, nhưng tôi nên e-mail cho anh ấy sơ yếu lý lịch của tôi dù sao (trong trường hợp một cái gì đó mở ra).

Điều này dẫn tôi đến câu hỏi của tôi.

Đầu tiên là kỹ thuật. Với ý tưởng cải thiện khả năng bảo trì trong tương lai, suy nghĩ của tôi là viết lại nó bằng ngôn ngữ cấp cao hơn ngôn ngữ lắp ráp. Lĩnh vực kinh nghiệm của tôi là trong C ++, vì vậy đó là sự lựa chọn rõ ràng cho tôi. Công ty đang rất cần một cách dễ dàng hơn để cập nhật chương trình, vì gần đây tôi đã đọc một bài báo mà người đàn ông mà tôi nói chuyện được trích dẫn nói rằng nhóm làm việc chăm chỉ và họ tự hào thông báo rằng chương trình hiện đã hỗ trợ cho 5 mã số-chữ số (thay vì 4) và số xe 8 chữ số (thay vì 7). Triết lý của tôi về các bản cập nhật, ngay cả trong tình huống thảm khốc này, phù hợp với Joel: http://www.joelonsoftware.com/articles/fog0000000069.html trong ngắn hạn, viết lại nên được tăng dần, thay vì bỏ đi mọi thứ trước đây và bắt đầu tươi.

Có một cách dễ dàng để tích hợp lắp ráp IBM với C ++ và nếu vậy, tôi nên làm như thế nào? Tôi mơ hồ nhận ra từ khóa asm, nhưng tôi không biết nên sử dụng từ đó hay làm gì khác. Là một kế hoạch không sáng suốt? Tôi thực hiện hầu hết các công việc của mình trên Linux bằng g ++ và GNU, vì vậy câu trả lời cụ thể được hoan nghênh, nhưng chắc chắn là không bắt buộc (vì tôi không biết họ không có hệ thống xây dựng nào, nhưng tôi nghi ngờ hầu như không có).

Câu hỏi thứ hai mang tính chính trị nhiều hơn. Làm thế nào tôi nên thuyết phục công ty này rằng họ cần thực hiện chuyển đổi? Tiết kiệm chi phí lý thuyết là rất lớn (dựa trên ước tính của tôi, công ty đang lãng phí thêm một triệu đô la mỗi năm, chỉ cần tăng chi phí đào tạo để học cách tương tác với chương trình), nhưng những thay đổi được đề xuất của tôi có thể sẽ khiến tất cả lập trình viên hiện tại không có việc làm, nếu họ được ban hành, do đó có sức đề kháng cấu trúc lớn để thay đổi.

chỉnh sửa: Tôi nên giải thích lý do tại sao tôi sửa đổi những gì công ty đã có dường như là giải pháp tốt nhất cho tôi. Tôi vẫn mở cho các đề xuất khác, bởi vì đây là một con quái vật của một chương trình, tuy nhiên. Tôi chưa bao giờ có một công việc lập trình trước đây, vì vậy xin vui lòng sửa cho tôi bất kỳ phân tích không chính xác nào tôi có thể đưa ra.

Trước hết, có giải pháp ngoài kệ.

Từ những cuộc nói chuyện của tôi với một vài nhà quản lý cấp trung về vấn đề này, một trong những mối quan tâm chính khi chuyển sang một hệ thống mới là số lượng lớn nhân viên trung thành đã làm việc với công ty trong nhiều thập kỷ và hiện đang thoải mái với hệ thống này. . Nếu tôi có khả năng sửa đổi những gì chúng tôi có, tôi có thể duy trì giao diện hiện tại ở dạng 'chế độ tương thích'. Người dùng đã phải đăng nhập để sử dụng hệ thống hiện tại, vì vậy tôi có thể thêm khả năng kích hoạt cài đặt khi người dùng đăng nhập lần đầu tiên (sau khi tôi thực hiện thay đổi này), trong đó họ được cung cấp tùy chọn sử dụng Giao diện 'cổ điển' hoặc giao diện 'mới'. Không có cách nào tôi sẽ tìm thấy một giải pháp sẵn có cho phép điều đó,

Công ty của tôi cũng sở hữu phần mềm chúng tôi sử dụng; chúng tôi không cấp phép cho nó. Điều này có nghĩa là quản lý mà tôi hiện đang nói chuyện là những người thực sự có thể ủy quyền cho tôi thực hiện thay đổi. Với giải pháp của bên thứ ba, tôi sẽ phải nhận được sự chấp thuận từ công ty của mình ngoài việc đảm bảo mọi quyền lợi cần thiết từ công ty phát triển sản phẩm chúng tôi sử dụng, điều này làm tăng thêm một trở ngại. Điều này cũng đòi hỏi phải thuyết phục công ty từ bỏ sản phẩm "của họ" và lấy một số sản phẩm khác, điều này có vẻ như là một trở ngại lớn hơn so với việc cố gắng cập nhật những gì chúng tôi có, nhưng tôi rất có thể sai về vấn đề này.

Cuối cùng, nhìn về tương lai, tôi không chỉ muốn cải thiện giao diện người dùng và sửa một vài lỗi. Sau khi tôi cập nhật những vấn đề 'cấp bách' đó, tôi đã hy vọng cập nhật cách thức cơ bản của công ty liên quan đến công nghệ. Sau khi dành 1-2 năm cho các loại vấn đề này, kế hoạch của tôi là quay trở lại quản lý và đề xuất những thay đổi mạnh mẽ hơn. Có nhiều cách công ty điều hành có thể được cải thiện cơ bản bởi công nghệ mà hiện tại họ không sử dụng. Ví dụ, mỗi khu vực khá nhiều hoạt động theo cùng một cách. Sân bay lớn địa phương là trung tâm trung tâm để phân phối xe hơi. Chúng chủ yếu được gửi trên cơ sở khi cần thiết. Tuy nhiên, sân bay được sử dụng làm căn cứ nhà cho tất cả các hoạt động. Họ sẽ gửi hai người trong một chiếc xe đến địa điểm của tôi để nhận một chiếc xe từ chúng tôi mà chúng tôi không cần, sau đó trở về sân bay với chiếc xe họ bước vào, cộng với những gì họ đang lấy lại (chúng tôi là 32 dặm từ sân bay). Sau đó, họ sẽ đến với các vị trí 5 dặm từ chúng tôi trong hai chiếc xe để thả một trong số họ đi, sau đó quay trở lại trong xe hơi khác của họ đến sân bay. Họ làm điều này ngay cả khi chiếc xe chúng tôi gửi lại là cùng loại xe họ cần gần chúng tôi. Tôi đã ở với công ty khoảng hai năm nay và dường như họ chỉ đi chệch hướng này trong những trường hợp khẩn cấp nhất về tình trạng thiếu xe (khoảng ba lần). Tôi sẽ thay thế cho 4 người làm việc trong tất cả các khu vực với một hệ thống lập lịch trình tự động xác định những gì xe đi đâu và cố gắng và tìm ra con đường mà đòi hỏi phải có số tiền ít nhất của + dặm trình điều khiển thời gian + để cung cấp tất cả các xe mà họ cần phải được, như là một ví dụ về các bản sửa lỗi cấp cao hơn tôi hy vọng một ngày nào đó sẽ thêm vào.

Tuy nhiên, trước khi tôi cảm thấy thoải mái khi đề xuất tất cả những điều này, tôi cảm thấy sẽ hữu ích khi có được sự hỗ trợ trong công ty và cơ sở mã bằng cách thực hiện các tác vụ nhỏ hơn, như cập nhật giao diện. Các giải pháp như gia công hoặc nếu không sẽ loại bỏ khả năng này.


3
Nhìn vào trình giả lập Hercules - có rất nhiều phép thuật trong hệ điều hành lõi của máy tính lớn của IBM cần được mô phỏng.
Yann Ramin

Tôi thành thật nhìn vào "làm lại từ đầu" (trò đùa C64 tồi tệ). Nghiêm túc mà nói, hãy kiểm tra thông số kỹ thuật và xem những gì có thể cần để tự viết một GUI mới. Miễn là giao diện cơ sở dữ liệu là như nhau, và điều này sẽ mất rất nhiều thời gian và nghiên cứu để xác định, thì bạn thật tuyệt vời - và phù hợp để tạo ra một khoản tiền $ # && :)

8
Nếu hệ thống hiện tại thực sự hoạt động, bạn cần có một lý do rất chính đáng để trả tiền cho khách hàng. Ngoài ra, rất có thể bạn sẽ đánh giá thấp khối lượng công việc cần thiết để tái tạo hệ thống hiện tại - chỉ cần nghĩ rằng bạn cần hiểu hệ thống hiện tại trước tiên - làm cho việc viết lại của bạn thậm chí còn tốn kém hơn so với ước tính ban đầu của bạn. Điều này không phải để làm bạn nản lòng, mà chỉ để đảm bảo rằng bạn thực sự biết nhiệm vụ bất chính nào bạn có thể đăng ký TRƯỚC KHI bạn không thể rút lui. Ngoài ra, làm cho công việc của bạn tăng lên - nói cách khác là ở lại trên máy tính lớn bây giờ.

Tôi sợ rằng việc mô phỏng hệ thống sẽ rất khó khăn khiến tôi phải tìm cách để tôi thực hiện các thay đổi nhỏ, theo mô-đun, thay vì cố gắng bắt đầu lại từ đầu.
David Stone

@David Stone Tôi đã từng tham gia một dự án, chúng tôi đã làm điều "chọn giao diện mới hoặc giao diện cũ". Nó đã NHANH CHÓNG vào địa ngục phát triển - mã được kết hợp chặt chẽ với giao diện và if (m_newInterface)mã spaghetti nhanh chóng bắt đầu xuất hiện trên khắp cơ sở mã. Việc tách và tái cấu trúc mất nhiều thời gian, khi hoàn thành, hầu hết người dùng đã chuyển sang giao diện mới (nghĩ nhiều năm).
Vitor Py

Câu trả lời:


4

Nhốt mình vào mặt trận kỹ thuật ...

Tôi đề nghị bạn bắt đầu bằng cách xác định môi trường mà ứng dụng chạy. "Máy tính lớn" có thể có nghĩa là một vài điều khác nhau, với tuổi của ứng dụng, đó có thể là CICS hoặc IMS . Cũng có thể các tác giả ban đầu đã viết nhiệm vụ bắt đầu của riêng họ.

Tùy thuộc vào nơi ứng dụng chạy, nó có thể sẽ sử dụng API cho môi trường đó, CICS hiện sử dụng giao diện khác biệt rõ rệt so với những ngày đầu, tôi không thể nói cho IMS. Nếu ứng dụng là nhiệm vụ bắt đầu của riêng nó, thì rất có thể nó có API nội bộ của riêng nó - tôi dành bảy năm để hỗ trợ một con thú như vậy, được viết trong cùng thời đại.

Một cái gì đó khác để xem xét, với độ tuổi của ứng dụng, đó là Trình biên dịch mà bạn muốn tích hợp C ++ có trước sự tồn tại của Môi trường ngôn ngữ (LE). Như vậy, trừ khi Trình biên dịch đã được cập nhật để tuân thủ LE, bạn sẽ gặp một số khó khăn vì C và C ++ tuân thủ LE và yêu cầu người gọi và calle của họ cũng tuân thủ.

Một điểm khác để xem xét, nếu ứng dụng này đang chạy trên một máy tính lớn, bạn có thể đang cố gắng tích hợp với một ứng dụng chạy trên phần cứng và phần mềm không được hỗ trợ. Điều này sẽ không giống như cố gắng tích hợp với một ứng dụng được viết vào năm 1989 chạy trên DOS 4.01 trên phần cứng ban đầu của nó.


Ứng dụng thậm chí có thể sử dụng TPF , điều này sẽ khiến việc chuyển đổi trở nên vô cùng khó khăn.
Gilbert Le Blanc

13

Bạn đang nhảy súng. Từ mô tả của bạn, có vẻ như bạn chưa hiểu đầy đủ về môi trường kỹ thuật hiện tại (chính xác là hệ điều hành nào, dữ liệu được lưu trữ ở đâu và giao diện với các hệ thống khác như thế nào, v.v.). Nhưng thậm chí còn quan trọng hơn: một kế hoạch nghiêm túc nên xem xét các lựa chọn thay thế cho việc viết lại một phần hoặc toàn bộ phần mềm, cụ thể là phần mềm sẵn có, ngoài việc viết lại, phần mềm như một dịch vụ, v.v.

Dù công ty cuối cùng đi theo hướng nào, trước tiên họ cần một phân tích chắc chắn về những gì phần mềm hiện nay và những yêu cầu cho giải pháp mới là gì.

Vậy tại sao bạn không đề nghị phân tích?


7
+1 Đây là câu trả lời duy nhất đề xuất phân tích đầy đủ các yêu cầu hiện tại của ứng dụng và công ty trước khi đề xuất giải pháp kỹ thuật. Nhắc tôi về trò đùa cũ: Bạn bắt đầu viết mã - Tôi sẽ đi tìm hiểu những gì họ muốn.

Đó là một điểm tốt, và tôi chắc chắn cần thêm thông tin trước khi tôi cam kết thực hiện công việc này. Một phần của vấn đề là tôi đã hỏi xung quanh và mãi đến khi tôi gặp một phó chủ tịch của công ty, tôi mới tìm thấy bất cứ ai thực sự biết bất kỳ chi tiết nào. Tôi đã gọi cho một số văn phòng, bao gồm hỗ trợ kỹ thuật và không ai trong số họ có thể cung cấp cho tôi thông tin chi tiết như ngôn ngữ lập trình mà chương trình được viết. Tuy nhiên, tôi có một số lý do để đưa ra giải pháp ngoài lề mà tôi sẽ chỉnh sửa câu hỏi ban đầu của tôi
David Stone

7

Tôi ngạc nhiên khi bạn nhận được một phản ứng lịch sự như vậy!

Hãy nhìn vào điều này từ quan điểm của họ.

Họ quản lý thành công một hệ thống ba mươi năm tuổi với hàng trăm ngàn dòng mã, giao diện với có lẽ hai mươi hệ thống khác thể hiện một quy trình kinh doanh phát triển hơn bốn mươi năm.

Họ có thể / hy vọng các chuyên gia trong lĩnh vực của họ và như vậy sẽ coi C ++ là một bước xuống từ "Ngôn ngữ trình biên dịch cấp cao" của IBM để đặt cho nó tiêu đề đầy đủ. Ngôn ngữ trình biên dịch chương trình của IBM cực kỳ mạnh mẽ và ngôn ngữ "MACRO" là ngôn ngữ được xử lý tốt nhất từ ​​trước đến nay.

Sẽ có một đề xuất thay thế hệ thống của họ khoảng năm năm kể từ khi nó được thực hiện lần đầu tiên. Một số sẽ bị từ chối sau một nghiên cứu khả thi, một số sẽ có được đến giai đoạn thiết kế trước khi họ mất ngân sách, một số thậm chí có thể đã nhập mã và có lẽ là giai đoạn thử nghiệm trước khi họ gặp vấn đề về hiệu suất và bị đóng hộp.

C ++ đơn giản là không giúp được gì. Không có thư viện đồ họa trong môi trường ứng dụng chạy. (Có thư viện đồ họa 3270 nhưng không có khả năng được hỗ trợ trong C ++ vì không ai sử dụng nó và có thư viện máy khách "X" đầy đủ nhưng bạn cần ở trong một môi trường khác để sử dụng nó.)

Họ có một giao diện người dùng không hoàn hảo nhưng nổi tiếng và nhanh chóng. Một nhà điều hành có kinh nghiệm sẽ điền vào một biểu mẫu nhanh hơn khoảng ba lần bằng cách sử dụng màn hình màu xanh lá cây thay vì GUI tương đương. Thêm vào đó họ có thể chú ý đến khách hàng trong khi họ chạm vào loại.

Các nhà điều hành màn hình sẽ cần đào tạo bất kỳ giao diện nào họ sử dụng, đào tạo lại tất cả nhân viên ở đó để sử dụng GUI mới và lạ sẽ là một mục ngân sách lớn so với việc chỉ đào tạo nhân viên mới trên hệ thống thế giới cũ.


4

Tôi đã có một vấn đề tương tự vài năm trước tại BellSouth. Tôi chỉ đơn giản viết mã COBOL để quét các chương trình ngôn ngữ trình biên dịch theo từng byte, tách riêng các mã và toán hạng, chuyển đổi các hướng dẫn chi nhánh để chuyển sang và chuyển đổi các hướng dẫn so sánh thành IF. Chương trình này đã chuyển đổi các hướng dẫn DC thành mã Bộ phận Dữ liệu COBOL tương đương và các chuyển động, số lần chuyển đổi, v.v., nếu phù hợp.

Khi đã xong, tôi đã viết một chương trình thứ hai để chuyển đổi IF và GOTO thành IF-THEN, với các bước di chuyển và như vậy trong các đường giữa các cụm này (điều này thực sự không khó thực hiện - bí mật là chèn IF và ELSE khi bạn đọc lại cobol "pidgin" giai đoạn 1 từ trước ra trước).

IF-THEN-ELSER đã tìm kiếm các tình huống trong đó tìm thấy tham chiếu GOTO gần với nhãn, có thể bị xóa một cách an toàn (giảm số lượng tham chiếu của nó đi 1). Bạn chạy chương trình IF-THEN-ELSER này lặp đi lặp lại (nghĩa là bạn chạy nó nhiều lần, chỉ dừng lại khi lần cuối cùng của bạn không thể tìm ra cách thay đổi nào nữa). Hầu hết các công việc quan trọng được thực hiện bởi if-then-elser, người có sản phẩm COBOL phải được xem xét cẩn thận và hiệu đính bởi một lập trình viên ngôn ngữ lắp ráp có kinh nghiệm (cụ thể là tôi). Theo kinh nghiệm của tôi, "if-then-elser" của tôi đã có thể loại bỏ hơn 90 phần trăm GO TO do các hướng dẫn chi nhánh ban đầu.

Tôi cho rằng có thể đi tiếp từ thời điểm này với một chuyển đổi đơn giản sang C (hoặc C ++) - ngôn ngữ mà tôi cũng đang nói chuyện. Tuy nhiên, tại BellSouth, ngôn ngữ lựa chọn mục tiêu của chúng tôi là COBOL / II. Luôn có một chút phức tạp nảy sinh từ các tình huống trong đó một nhãn còn lại có nhiều tham chiếu GO TO (nhiều lần, các tình huống này được xử lý bởi COBOL PERFORM, nhưng đôi khi có thể được biểu diễn đơn giản bằng các cấu trúc OR và AND).

Tôi nghĩ thật tuyệt khi sản xuất mã theo kiểu COBOL / II có cấu trúc khối thanh lịch, với EVALUATE (Cấu trúc trường hợp) và 88 tên điều kiện cấp. Việc thêm các điểm hoàn thiện này đã dẫn đến một cặp chương trình khác, điều này tỏ ra tiện lợi trên các chương trình COBOL không bắt nguồn từ các chương trình được chuyển đổi từ trình biên dịch chương trình.

Tôi không biết nếu điều này giúp.

Như những người khác ở trên đã nhận xét, bạn phải tiến hành quá trình này một cách cẩn thận. Nó giúp có 10-12 năm kinh nghiệm mã hóa trình biên dịch thông báo cho các quá trình ra quyết định của bạn. Chúng tôi, những người có kinh nghiệm đó rất khó để tìm thấy nữa.

Như một lưu ý cuối cùng: Chúng tôi chỉ viết trong trình biên dịch chương trình trước đó vì trình biên dịch cho các ngôn ngữ cấp cao tạo ra mã đối tượng cồng kềnh, kém hiệu quả. Các trình biên dịch COBOL "tối ưu hóa" ngày nay không có những thói quen xấu tương tự. ----------


2

Lời khuyên của Joel nói chung là hợp lý, nhưng trong trường hợp này, việc viết lại hoàn chỉnh đã quá hạn. Lý tưởng nhất là viết lại với battleaxe, vì những gì bạn đang đối phó ở đây là một con quái vật.

Tôi không chắc chính xác nên thêm gì, vì bạn đã đưa ra một lập luận khá hay cho việc viết lại này. Lời khuyên duy nhất của tôi là bỏ qua C ++ hoàn toàn và chuyển thẳng đến giao diện web cho hệ thống cho thuê, vì điều đó có thể sẽ dễ dàng hơn để đào tạo nhân viên và sẽ giúp bạn tiết kiệm rất nhiều công việc trên UI (cũng như thực hiện dễ dàng hơn nhiều để có được dòng máu mới trong dự án, hoặc thậm chí chỉ thuê ngoài toàn bộ).

Đối với các lập trình viên COBOL hiện tại - có lẽ họ có thể giúp ghi lại hệ thống hiện có và quy trình di chuyển.


2
+1: đây không phải là Công việc dành cho C ++
6502

2
@ 6502: Tại sao không? Chuyên môn của OP là về C ++. Tìm ra cách đối phó với một hệ thống cũ là đủ tệ. Học một ngôn ngữ khác sẽ không có ích. Một lập trình viên có năng lực sử dụng các công cụ mà lập trình viên có năng lực sẽ có thể làm cho nó hoạt động tốt hơn nhiều so với hệ thống cũ bất kể ngôn ngữ nào.
Trong silico

1
@In silico: Theo tôi đối với một dự án khá lớn với kích thước này, bạn sẽ tiết kiệm thời gian bằng cách học một ngôn ngữ phù hợp hơn, ví dụ như Python hơn là sử dụng C ++. Giả sử Python không có ở đó, đối với một dự án đủ lớn thuộc loại này, IMO sẽ trả tiền bằng cách viết Python của riêng bạn bằng C ++ và mã hóa nó bằng cách sử dụng nó thay vì thực hiện toàn bộ trong C ++. C ++ là một ngôn ngữ rất hay và điểm mạnh của nó là do thiết kế không muốn để lại bất kỳ khoảng trống nào dưới C ++ và trình biên dịch trên. Hoàn toàn vô nghĩa ở đây. Bạn có đề nghị viết tất cả mọi thứ bằng cách sử dụng các GPU nếu đó là lĩnh vực chuyên môn của người đăng bài không?
6502

3
@ 6502: Tôi không đồng ý. Với kỹ thuật phù hợp, hiện đại, thư viện được thiết kế tốt và năng lực về ngôn ngữ, tất cả những vấn đề đó đều không liên quan. (Tất nhiên, điều đó đúng với mọi ngôn ngữ.) Và mọi người đã phát triển các hệ thống và phần mềm quy mô lớn trong C ++ hoạt động tốt và dường như không có vấn đề gì khi sử dụng C ++. Chỉ vì bạn sẽ không sử dụng C ++ cho công việc này không có nghĩa là những người khác sẽ không thể sử dụng nó và sử dụng nó tốt. Đó là để OP quyết định. Tôi chắc chắn rằng bạn khá năng suất trong các ngôn ngữ khác, và bằng mọi cách hãy duy trì nó.
Trong silico

1
Trong silico: Rõ ràng bất cứ điều gì trong lý thuyết có thể được thực hiện với bất cứ điều gì (bao gồm cả brainf k). Điều này không có nghĩa là tất cả các công cụ đều tương đương. Tôi nghĩ rằng đối với một ứng dụng businness có mã đơn giản để viết và đọc (ngay cả bởi những người không có kỹ thuật) thì quan trọng hơn nhiều so với tốc độ tính toán trần. Ngoài ra một cái gì đó như hành vi không xác định là một cách giá quá cao để trả cho sự gần gũi không cần thiết với kim loại. Nếu đối với bạn C ++ là một lựa chọn tốt cho logic kinh doanh một ứng dụng nhập dữ liệu thì tôi tự hỏi liệu đối với bạn có ** bất cứ điều gì mà C ++ là một lựa chọn tồi ...
6502

2

Về khía cạnh kỹ thuật, rất nhiều thứ sẽ phụ thuộc vào chất lượng - tính mô đun - của mã trình biên dịch. Một số lập trình viên hiểu tầm quan trọng của việc tạo các mô-đun với chức năng cụ thể, hạn chế và giao diện tham số đơn giản, rõ ràng, sử dụng các quy ước liên kết chương trình con tiêu chuẩn của IBM. Tuy nhiên, đại đa số có xu hướng tạo ra những quái vật nguyên khối.

Với trước đây, việc tái sử dụng là có thể và không khó để tìm ra "chất keo" giữa C ++ và trình biên dịch, giả sử các mô đun trình biên dịch của bạn sử dụng các chuỗi gọi tiêu chuẩn (hoặc ít nhất là nhất quán). Tuy nhiên, trong tất cả các khả năng, mã trình biên dịch mã sẽ là một mớ hỗn độn. Mặc dù có thể viết trình biên dịch có cấu trúc, nhưng rất ít người đã làm và gần như không thể nhận ra bất kỳ "thiết kế" nào từ đó bắt đầu viết lại.

Mặt khác, trình biên dịch 360/370 có trình độ khá cao so với các bộ vi xử lý ngày nay, và đơn giản hơn rất nhiều, và đôi khi C được coi là "trình biên dịch cấp cao". Tôi đã làm việc cho một công ty DBMS có sản phẩm hoàn toàn là 370 trình biên dịch và kiến ​​trúc sư chính của chúng tôi tin rằng có thể dịch mã máy biên dịch thành C (cho tính di động trong tương lai). Tôi nghi ngờ, nhưng vấn đề là khoảng cách không lớn như bạn nghĩ.

Không biết nếu bất kỳ điều này là hữu ích. Như tôi nói, tôi nghĩ nó phụ thuộc nhiều vào chất lượng và kích thước của mã gốc.


1

Tôi không thể biết liệu đây có phải là một trò đùa hay không - công ty của bạn đang nghiêm túc chạy mã ban đầu được viết 39 năm trước? Nếu nó chạy trên System / 360, bạn sẽ phải biên dịch g ++ từ nguồn ...

Thành thật mà nói, tôi thậm chí sẽ không nghĩ về việc sử dụng bất kỳ mã cũ nào; bạn cần có một cách tiếp cận mới, ngồi xuống và suy nghĩ về những gì cần đi vào thiết kế, và thực hiện nó từ đầu. Vâng, nó sẽ liên quan đến một chút lập kế hoạch, nhưng tôi không nghĩ ngay cả Joel cũng sẽ nói đây là trường hợp thay đổi gia tăng.

Để thuyết phục công ty mà bạn cần chuyển đổi, bạn cần chỉ ra những lý do cụ thể sẽ cải thiện hiệu quả, dẫn đến chi phí thấp hơn và / hoặc cho thấy rằng những gì bạn đang sử dụng hiện đang gây hại cho dòng dưới cùng.

Một nhận xét khác - Tôi tưởng tượng rằng các công ty cho thuê xe khác đã tham gia cùng chúng tôi trong Thế kỷ 21; Tôi sẽ làm lại một chút để xem họ đang làm như thế nào (dựa trên web, tôi tưởng tượng) và có thể mô hình hóa nó sau một trong những hệ thống đó (nghĩa là không phát minh lại bánh xe).

Chúc may mắn!


5
Không có gì lạ khi các hệ thống máy tính lớn sử dụng các cơ sở mã bắt đầu từ những năm 60 hoặc 70. IBM giữ các máy tính lớn zSeries của họ và HĐH tương thích ngược với 360 chỉ là điều cần thiết. Không có gì nhiều trong mô hình kinh doanh của một công ty cho thuê xe (hoặc ngân hàng hoặc công ty bảo hiểm) đã thay đổi kể từ đó. Bạn có thể thêm một giao diện web, chắc chắn, nhưng điều gì đã thay đổi trong cách bạn lưu trữ những chiếc xe trong cơ sở dữ liệu?
Bo Persson

zOS có trình biên dịch C ++ riêng hoàn chỉnh với các bộ xử lý trước cho CICS và DB2. Vì vậy, không cần g ++.
James Anderson

5
Thứ hai, nó khá phổ biến đối với các tập đoàn lớn đang chạy mã máy tính lớn 30 năm tuổi. Nó thường đáng tin cậy, thực hiện và làm công việc. Nó cũng có xu hướng rất tệ.
James Anderson

3
@Chris, tại sao mã 39 tuổi không nên chạy? Nó phát triển cũ ở tuổi 30? 20? Mã sản xuất thử nghiệm trận chiến có thể cũ nhưng vẫn hoàn thành công việc một cách hoàn hảo. Bất kỳ việc viết lại nào cũng cần phải đạt được cùng cấp độ với chương trình cũ trước khi nó có bất kỳ lợi ích nào đối với người trả phí của bạn.

1
@Chris, rất ít nhanh hơn một ứng dụng "màn hình xanh" được viết tốt và tôi biết điều này từ kinh nghiệm cá nhân là anh chàng Java trong một cửa hàng Cobol. Tôi thẳng thắn tin rằng tất cả các bạn chân thành đánh giá thấp khối lượng công việc cần thiết để có một ứng dụng tương tự. Ngoài ra, mã không bị rỉ sét. Chỉ là già là không đủ lý do để sửa nó.

0

Về lý thuyết, không khó để thuyết phục quản lý cấp trên thay thế hệ thống cũ nếu bạn có thể chỉ cho họ thấy nó sẽ tiết kiệm cho họ megabucks. Và nó sẽ. Sẽ ngày càng khó khăn hơn trong việc tìm kiếm các lập trình viên để duy trì hệ thống này và những lập trình viên đó sẽ ngày càng đắt hơn. Đó không phải là vấn đề "nếu", đó là vấn đề "khi nào". Nó thực sự phải được cập nhật.

Tuy nhiên, câu hỏi đặt ra là liệu bạn có thể thuyết phục họ không chỉ là nó cần cập nhật (và dù sao họ cũng có thể biết điều đó), mà đó phải là một dự án nội bộ. Đặc biệt nếu đội chỉ là bạn. Thường thì một sự thay thế lớn như vậy là thuê ngoài. Thậm chí có thể có một số phần mềm sẵn có để xem xét. Các tùy chọn này cần được điều tra và người quản lý của bạn sẽ nhấn mạnh rằng điều đó sẽ xảy ra nếu chúng hợp lý.

Đối với nhiệm vụ, nếu bạn thực hiện nó, tôi thực sự tin rằng một máy ủi-viết lại có thể phù hợp trong trường hợp này. Đối số của Joel không áp dụng trong mọi trường hợp. Tuy nhiên tôi không thể thực sự biết mà không nhìn thấy nó.


0
  1. Một sự thay đổi gia tăng là ra khỏi câu hỏi.

  2. Có khả năng là một giải pháp sẵn có. Có nhiều doanh nghiệp cho thuê xe.

  3. Nếu như là phương sách cuối cùng, bạn cần viết lại nó, trước tiên hãy dành thời gian suy nghĩ về cách hệ thống mới sẽ hoạt động.
    Sau khi bạn đã xác định chức năng và giao diện, sau đó bạn có thể chọn các công cụ phát triển phù hợp nhất với nhu cầu (và kỹ năng của bạn).

Một chiến lược để giảm thiểu căng thẳng cho người dùng cuối là bắt đầu mô phỏng giao diện xấu xí cũ mà người dùng biết, với một vài danh sách như danh sách thả xuống cho những câu chuyện xấu xí, sau đó thêm dần chức năng UI và đưa chúng vào giao diện người dùng hiện đại.

Bạn có thể không muốn giữ định dạng tệp dữ liệu giống nhau, vì vậy sẽ không quay trở lại sau khi họ chuyển đổi.


1
Nếu bạn không làm điều này dần dần, dự án rất có thể sẽ thất bại.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.