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.
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).