Saya bekerja sebagai agen / manajer rental untuk perusahaan rental mobil yang menjalankan sistem rental yang ditulis pada tahun 1972. Saya memutuskan bahwa mungkin sudah waktunya untuk pembaruan. Untuk sedikit latar belakang, berikut adalah contoh singkat dari kegilaan yang harus kita hadapi dari program ini setiap hari:
Agen rental harus ingat bahwa pencetakan pada satu layar menggunakan "MXC" di bidang ACT (semuanya didasarkan pada kode pendek), yang secara membingungkan berarti "tampilan MaXimum pada Kontrak", sedangkan pada yang lain memerlukan PR (untuk PRint) di bidang AKSI, tetapi beberapa layar menggunakan Y di bidang PT (untuk PrinT), namun layar lain menggunakan Y di bidang PRT (untuk PRinT), namun layar lain mengharuskan pengguna untuk menekan enter (tetapi bukan enter di sebelah huruf, karena itu adalah karakter baris baru, itu harus menjadi enter pada tombol angka) dan kemudian F8, layar berbeda tetapi terkait hanya membutuhkan F8, beberapa layar memiliki bidang berlabel PRT, yang harus untuk PRINT, tetapi bidang sebenarnya tidak melakukan apa pun dan pencetakan dilakukan secara otomatis setelah melalui beberapa permintaan, dan masih banyak layar memiliki bidang berlabel PRINT Y / N,yang gila-gilaan default untuk Y untuk operasi di mana lokasi lain sudah memberikan dokumen, dan ke N untuk operasi di mana dealer lain akan membutuhkan dokumen.
Saya memutuskan bahwa saya bisa melakukan pekerjaan yang lebih baik dari ini, jadi saya berangkat untuk menghubungi orang di perusahaan yang akan membuat keputusan untuk memperbarui ini. Saya akhirnya menghubungi VP IT, yang bertanggung jawab atas program ini. Saya mendapatkan sedikit informasi darinya, dan mengetahui bahwa perusahaan rental mobil saya memiliki program rental yang ditulis dalam assembler mainframe IBM dengan sedikit COBOL. Dia mengatakan bahwa tidak ada posisi yang terbuka saat ini, tetapi saya harus tetap kirim e-mail padanya resume saya (kalau-kalau ada sesuatu yang terbuka).
Ini mengarahkan saya ke pertanyaan saya.
Yang pertama adalah teknis. Dengan gagasan meningkatkan rawatan di masa depan, pemikiran saya adalah menulis ulang dalam bahasa tingkat yang lebih tinggi daripada bahasa rakitan. Area pengalaman saya ada di C ++, jadi itu pilihan yang jelas bagi saya. Perusahaan sangat membutuhkan cara yang lebih mudah untuk memperbarui program, karena saya baru-baru ini membaca sebuah artikel di mana orang yang saya ajak bicara dikutip mengatakan bahwa tim bekerja keras, dan mereka dengan bangga mengumumkan bahwa program sekarang memiliki dukungan untuk 5 -digit kode lokasi (bukan 4) dan 8 digit nomor mobil (bukan 7). Filosofi saya tentang pembaruan, bahkan dalam situasi yang mengerikan ini, sejalan dengan Joel: http://www.joelonsoftware.com/articles/fog0000000069.html singkatnya, menulis ulang haruslah bertahap, alih-alih membuang semua yang ada sebelumnya dan mulai segar.
Apakah ada cara mudah untuk mengintegrasikan perakitan IBM dengan C ++, dan jika demikian, bagaimana saya harus melakukannya? Saya samar-samar menyadari kata kunci asm, tetapi saya tidak tahu apakah yang terbaik untuk menggunakan itu atau melakukan sesuatu yang lain. Apakah rencana semacam itu keliru? Saya melakukan sebagian besar pekerjaan saya di Linux menggunakan g ++ dan GNU make, jadi jawaban khusus untuk yang disambut, tapi jelas tidak diperlukan (karena saya tidak tahu apa jenis sistem mereka tidak membangun, tapi saya kira hampir tidak ada).
Pertanyaan kedua lebih bersifat politis. Bagaimana saya harus meyakinkan perusahaan ini bahwa mereka perlu beralih? Penghematan biaya teoretis sangat besar (berdasarkan perkiraan saya, perusahaan menghabiskan jutaan dolar atau lebih per tahun, hanya pada peningkatan biaya pelatihan untuk belajar bagaimana berinteraksi dengan program ini), tetapi perubahan yang saya usulkan mungkin akan menempatkan semua programmer saat ini kehilangan pekerjaan, harus diberlakukan, sehingga ada hambatan struktural yang besar untuk berubah.
sunting: Saya harus menjelaskan mengapa saya memodifikasi apa yang sudah dimiliki perusahaan sebagai solusi terbaik bagi saya. Saya masih terbuka untuk saran lain, karena ini adalah monster dari sebuah program. Saya belum pernah memiliki pekerjaan pemrograman sebelumnya, jadi tolong perbaiki saya pada analisis yang salah yang mungkin saya berikan.
Pertama, ada solusi di luar rak.
Dari pembicaraan saya dengan beberapa manajer tingkat menengah tentang hal semacam ini, salah satu masalah utama dengan beralih ke sistem baru adalah sejumlah besar karyawan setia yang telah bersama perusahaan selama beberapa dekade dan merasa nyaman dengan sistem tersebut sekarang. . Jika saya memiliki kemampuan untuk mengubah apa yang kita miliki, saya dapat mempertahankan antarmuka saat ini dalam semacam 'mode kompatibilitas'. Pengguna sudah harus masuk untuk menggunakan sistem saat ini, jadi saya bisa menambahkan kemampuan untuk mengaktifkan pengaturan ketika pengguna masuk untuk 'pertama kali' (setelah saya melakukan perubahan ini), di mana mereka diberi pilihan untuk menggunakan salah satu antarmuka 'klasik' atau antarmuka 'baru'. Tidak ada cara saya akan menemukan solusi yang memungkinkan,
Perusahaan saya juga memiliki perangkat lunak yang kami gunakan; kami tidak melisensikannya. Ini berarti bahwa manajemen yang saya ajak bicara saat ini adalah orang yang sama yang sebenarnya dapat memberi saya wewenang untuk melakukan perubahan. Dengan solusi pihak ketiga, saya harus mendapatkan persetujuan dari perusahaan saya selain mendapatkan hak apa pun yang diperlukan dari perusahaan yang mengembangkan produk yang kami gunakan, yang menambah rintangan tambahan. Ini juga membutuhkan meyakinkan perusahaan untuk menyerah pada produk "mereka" dan mengambil beberapa produk lain, yang sepertinya merupakan rintangan yang lebih besar daripada mencoba memperbarui apa yang kita miliki, tetapi saya bisa saja salah dalam masalah ini.
Akhirnya, melihat ke masa depan, saya tidak hanya ingin meningkatkan antarmuka pengguna dan memperbaiki beberapa bug. Setelah saya memperbarui masalah 'mendesak' itu, saya berharap untuk memperbarui cara mendasar perusahaan berjalan terkait dengan teknologi. Setelah menghabiskan 1-2 tahun untuk masalah-masalah seperti ini, rencana saya adalah kembali ke manajemen dan mengusulkan perubahan yang lebih dramatis. Ada banyak cara perusahaan berjalan yang secara fundamental dapat ditingkatkan dengan teknologi yang mereka tidak gunakan saat ini. Misalnya, masing-masing daerah cukup banyak beroperasi dengan cara yang sama. Bandara utama setempat adalah pusat hub untuk mendistribusikan mobil. Mereka terutama dikirim berdasarkan kebutuhan. Namun, bandara digunakan sebagai pangkalan untuk semua operasi. Mereka akan mengirim dua orang dalam satu mobil ke lokasi saya untuk mengambil satu mobil dari kami yang tidak kami butuhkan, kemudian kembali ke bandara dengan mobil yang mereka datangi, ditambah apa yang mereka ambil kembali (kami berjarak 32 mil dari bandara). Kemudian mereka akan datang ke lokasi 5 mil jauhnya dari kami dengan dua mobil untuk mengantar salah satu dari mereka, kemudian kembali dengan mobil mereka yang lain ke bandara. Mereka melakukan ini bahkan jika mobil yang kami kirim kembali adalah jenis mobil yang sama yang mereka butuhkan di dekat kami. Saya sudah bersama perusahaan selama sekitar dua tahun sekarang, dan saya hanya tampaknya mereka menyimpang dari ini dalam keadaan darurat kekurangan mobil yang paling ekstrem (sekitar tiga kali sebelumnya). Saya akan mengganti 4 orang yang bekerja di setiap wilayah dengan sistem penjadwalan otomatis yang menentukan mobil mana yang pergi dan mencoba serta menemukan jalur yang memerlukan paling sedikit waktu + mil + driver untuk mengantarkan semua mobil ke tempat yang mereka inginkan, sebagai contoh perbaikan tingkat yang lebih tinggi Saya berharap suatu hari nanti menambahkan.
Namun, sebelum saya merasa nyaman untuk mengajukan semua ini, saya merasa akan sangat membantu untuk mendapatkan pijakan di perusahaan dan basis kode dengan melakukan tugas yang lebih kecil, seperti memperbarui antarmuka. Solusi seperti outsourcing atau sebaliknya akan menghapus kemungkinan ini.
if (m_newInterface)
kode spaghetti cepat mulai muncul di seluruh basis kode. Decoupling dan refactoring cukup lama sehingga, ketika itu selesai, sebagian besar pengguna telah bermigrasi ke antarmuka baru (pikirkan beberapa tahun).