Jawaban ini memiliki jangkauan dan tautan luar biasa tentang mengapa berbagai bahasa dapat memberikan manfaat yang berbeda untuk suatu proyek. Namun, ada sedikit lebih dari sekadar kesesuaian bahasa yang terlibat dalam mengapa proyek akhirnya menggunakan banyak bahasa.
Proyek akhirnya menggunakan banyak bahasa karena enam alasan utama:
- Manfaat biaya menggunakan kembali kode yang ditulis dalam bahasa lain;
- Kebutuhan untuk memasukkan dan mengakomodasi kode warisan;
- Ketersediaan coders untuk bahasa tertentu;
- Kebutuhan akan bahasa khusus untuk kebutuhan khusus;
- Bias bahasa lama; dan
- Manajemen proyek yang buruk (penggunaan multi-bahasa yang tidak terencana).
Alasan 1-4 adalah alasan positif dalam arti bahwa mengatasinya secara langsung dapat membantu proyek menyimpulkan lebih cepat, lebih efisien, dengan produk berkualitas lebih tinggi, dan dengan dukungan jangka panjang yang lebih mudah. Alasan 5 dan 6 adalah negatif, gejala penolakan terhadap perubahan yang diperlukan, perencanaan yang buruk, manajemen yang tidak efektif, atau kombinasi dari semua faktor ini. Sayangnya, faktor-faktor negatif ini merupakan penyebab umum dari penggunaan multi-bahasa yang "tidak disengaja".
Alasan 1 , manfaat biaya penggunaan kembali, telah menjadi alasan yang semakin kuat untuk memungkinkan penggunaan berbagai bahasa dalam suatu proyek karena peran perangkat lunak open source yang lebih besar dan kemampuan yang ditingkatkan untuk menemukan komponen kode yang tepat di web. Filsafat "mari kode semuanya internal" dari dekade terakhir terus memudar dalam menghadapi realitas ekonomi, dan pada dasarnya tidak pernah pendekatan yang paling hemat biaya untuk setiap proyek baru. Hal ini pada gilirannya membuat peluang untuk penegakan yang ketat terhadap penggunaan satu bahasa dalam proyek menjadi kurang umum.
Terutama dalam kasus proyek menggunakan kembali komponen open source yang dikelola dengan baik, penggunaan berbagai bahasa dapat memberikan manfaat biaya keseluruhan yang besar karena komponen yang digunakan kembali keduanya tersembunyi di balik antarmuka yang dirancang dengan baik, dan dikelola secara independen oleh kelompok eksternal tanpa biaya. Dalam skenario terbaik, pencampuran bahasa melalui penggunaan kembali semacam ini tidak lebih mahal untuk proyek daripada menggunakan komponen sistem operasi. Saya tahu tidak ada contoh yang lebih baik dari nilai pendekatan ini selain adopsi besar-besaran Microsoft dari perangkat lunak open source di browser mereka.
Alasan 2 , kebutuhan untuk mengakomodasi kode warisan, diabaikan pada bahaya proyek besar apa pun. Namun banyak masalah kode warisan dapat menyebabkan, secara naif berasumsi bahwa itu dapat diganti dengan mudah dengan kode baru dalam bahasa baru bisa sangat berisiko. Kode warisan, bahkan kode warisan yang buruk, sering kali mencakup jumlah "kontrak" implisit fitur yang diharapkan oleh komunitas yang menggunakan produk lawas. Komunitas itu cukup sering merupakan sumber pendapatan utama bagi sebuah perusahaan, atau target utama dukungan untuk perangkat lunak pemerintah. Membuang kontrak yang tersirat dapat mengejar pelanggan yang sadar berbondong-bondong, dan dapat membuat perusahaan bangkrut dalam semalam jika opsi lain tersedia.
Pada saat yang sama, tidak mengganti kode lama dalam bahasa lama bisa sama berbahayanya dengan mengganti secara grosir. Contoh kasus terburuk adalah Administrasi Veteran AS, yang memiliki sejumlah besar sistem vital yang dikodekan dalam bahasa yang disebut MUMPS (tidak bercanda) yang dirancang oleh dokter medis, bukan ilmuwan komputer. Tidak ada yang mau belajar MUMPS, dan mereka yang tahu benar-benar sekarat. Programer karena itu harus mengakomodasi MUMPS bahkan ketika mereka mencoba untuk bergerak maju menggunakan bahasa lain yang lebih umum, lebih kuat, dan lebih terpelihara.
Jenis penggunaan multi-bahasa ini membutuhkan perencanaan yang cermat. Perencanaan itu harus menavigasi ujung pisau antara kehilangan puluhan tahun pengetahuan pelanggan di satu sisi, dan kehilangan kemampuan untuk mendukung perangkat lunak di sisi lain. Teknik yang mengisolasi kode lama di belakang antarmuka yang terdefinisi dengan baik, dan yang memungkinkan kode baru yang lebih kuat untuk menggantikan kode lama setelah perilakunya didokumentasikan dengan baik, dapat membantu. Tetapi skenario warisan ini tidak pernah mudah, dan telah (dan akan terus menjadi) penyebab kematian banyak perusahaan dan organisasi di berbagai spektrum ukuran.
Alasan 3 , ketersediaan coder untuk berbagai bahasa, adalah faktor pragmatis yang diabaikan proyek. Betapapun penyelenggara proyek mungkin merasa (benar atau salah) bahwa bahasa tertentu adalah yang terbaik untuk tujuan mereka, jika bahasa tersebut bertentangan dengan kumpulan keahlian bahasa yang tersedia untuk mereka, baik jadwal dan kualitas produk akan menderita dari pembelajaran melengkung programmer mencoba belajar bahasa baru.
Pendekatan yang lebih rasional adalah menganalisis kebutuhan bahasa proyek berdasarkan area fungsional. Sebagai contoh, melihat dengan seksama pada proyek dapat menunjukkan bahwa hanya ada "puncak" kecil dari kode bernilai tinggi, misalnya untuk mengimplementasikan beberapa algoritma kepemilikan, yang membutuhkan keahlian pengkodean dalam bahasa yang kurang umum digunakan. Bagian lain dari setiap proyek besar seringkali mudah ditampung oleh bahasa yang lebih umum, atau (bahkan lebih baik) oleh produk open source yang dikelola dengan baik. Menganalisis proyek berdasarkan kebutuhan bahasa dapat memberikan pendekatan yang jauh lebih realistis dan hemat biaya untuk mempekerjakan atau menyewa keahlian khusus dalam bahasa khusus, dan juga dapat membantu mempertajam antarmuka antar bahasa dalam satu proyek tunggal.
Alasan 4 , menggunakan bahasa yang berbeda untuk kebutuhan yang berbeda, mengikuti segera dan dengan lancar melakukan analisis kebutuhan proyek semacam itu. Perhatian harus digunakan dalam hal ini juga, karena memilih terlalu banyak bahasa untuk dukungan dalam satu proyek tunggal dapat menyebabkan ledakan kombinasi kompleksitas baik dalam dukungan dan antarmuka antara komponen. Rute teraman dari segi biaya adalah untuk selalu menemukan peluang maksimum untuk digunakan kembali terlebih dahulu, terutama jika ada paket bagus yang dapat memenuhi kebutuhan proyek melalui sedikit lebih dari penyesuaian. Selanjutnya, beberapa jenis keputusan harus dibuat pada sejumlah kecil bahasa yang dapat menjawab sebagian besar kebutuhan yang diidentifikasi. Dalam pengembangan intensif-penggunaan ulang, ini akan sering menjadi jenis kode lem.
Pada umumnya bukan ide yang baik untuk memilih beberapa bahasa dengan kemampuan yang sangat mirip hanya karena beberapa anggota proyek menyukai satu dan beberapa yang lain. Namun, jika ada subset kemampuan yang diidentifikasi dengan baik dan terdefinisi dengan baik yang akan mendapat manfaat dari keterampilan bahasa khusus, itu bisa menjadi alasan yang baik untuk menggunakan beberapa bahasa untuk pengembangan kode baru.
Alasan 5 , penolakan terhadap perubahan yang diperlukan dalam bahasa yang digunakan, dapat menjadi penyebab gangguan proyek yang parah dan perselisihan internal. Sebagai pengguna Daveoditunjukkan dalam komentar pada jawaban ini, perubahan bisa sangat sulit bagi beberapa personel proyek. Pada saat yang sama, penolakan terhadap perubahan tidak pernah menjadi masalah sederhana, dan itulah sebabnya hal itu dapat menyebabkan banyak perselisihan. Penggunaan keterampilan bahasa lawas dapat menjadi pendorong kuat bagi produktivitas suatu proyek jika bahasa lawas cukup kuat, dan dapat mengarah pada produk dengan kualitas luar biasa dalam tim yang beroperasi dengan lancar dan menghargai kualitas. Namun, keterampilan bahasa lawas harus diimbangi dengan fakta bahwa banyak bahasa yang lebih tua tidak dapat lagi lengkap dengan bahasa yang lebih baru dalam hal fitur canggih, ketersediaan komponen, opsi sumber terbuka, dan dukungan kit alat cerdas.
Baik dulu maupun sekarang, satu-satunya argumen yang paling umum (dan ironisnya, paling sering benar) untuk terus menggunakan bahasa warisan yang lebih lemah, kurang mudah dibaca, atau kurang produktif adalah bahwa bahasa yang lebih tua memungkinkan produksi kode yang lebih efisien. Ini adalah argumen lama, argumen yang kembali ke tahun 1950-an ketika pengguna bahasa assembly membenci, seringkali dengan pahit, kemunculan pemrograman di FORTRAN dan LISP. Sebuah contoh di mana bahkan sekarang argumen efisiensi kode dapat memiliki validitas dapat dilihat dalam kode intensif pemrosesan seperti kernel sistem operasi, di mana C tetap menjadi bahasa pilihan atas C ++ (meskipun untuk alasan yang melampaui efisiensi sederhana).
Namun, dalam lingkungan proyek yang didukung secara global dan didukung mesin pada milenium baru, efisiensi kode sebagai argumen utama untuk memilih bahasa proyek semakin lemah. Ledakan yang sama dari komputasi dan perangkat keras jaringan yang telah memungkinkan pemasaran massal aplikasi kecerdasan buatan juga berarti bahwa biaya pemrograman manusia dapat dengan mudah mengerdilkan mereka yang melakukan eksekusi kode relativitas yang tidak efisien pada perangkat keras dan cloudware yang sangat murah. Ketika itu dikombinasikan dengan ketersediaan yang lebih besar untuk dalam bahasa yang lebih baru perpustakaan komponen, opsi sumber terbuka, dan kit alat canggih, jumlah kasus di mana menjaga bahasa untuk alasan efisiensi saja menjadi sangat sempit. Bahkan dalam kasus di mana itu berlaku,
Alasan yang lebih meyakinkan untuk proyek untuk tetap menggunakan bahasa warisan terjadi ketika untuk alasan apa pun proyek memiliki sedikit atau tidak ada pilihan untuk mengubah stafnya. Ini bisa terjadi misalnya ketika lini produk lawas utama dikodekan sepenuhnya dalam bahasa yang hanya fasih staf yang ada. Dalam kasus-kasus seperti itu, proyek harus melanjutkan jalur mencoba program dalam bahasa lama, atau mencoba untuk melatih staf yang ada dalam cara menggunakan bahasa baru.
Melatih staf bahasa lama dalam bahasa baru bisa menjadi bahaya dengan sendirinya. Saya masih ingat kasus di mana seorang anggota proyek yang baru saja dilatih dan beralih dari C ke C ++ mengeluh kepada saya dengan segala ketulusan bahwa ia tidak mengerti kelebihan metode berorientasi objek. Ketika saya melihat kodenya, dia telah mengubah fungsi 103 C sebelumnya menjadi 103 metode untuk satu kelas objek C ++ ... dan memang seharusnya tidak melihat bagaimana hal itu membantu apa pun.
Pesan yang lebih dalam adalah bahwa ketika orang telah memprogram dalam satu bahasa dan gaya bahasa selama bertahun-tahun atau puluhan tahun, kesulitan untuk membuat mereka "berpikir" dengan cara-cara baru bisa menjadi hampir tidak dapat diatasi, bahkan dengan program pelatihan yang baik. Dalam beberapa kasus mungkin tidak ada pilihan lain selain membawa desainer muda dan programmer yang lebih selaras dengan tren dan metode saat ini.
Alasan 6 , manajemen proyek yang buruk, berbicara untuk dirinya sendiri. Pemilihan dan penggunaan bahasa dalam suatu proyek harus selalu dipertimbangkan dan dinilai secara eksplisit, dan tidak diperbolehkan terjadi hanya secara kebetulan. Paling tidak, pemilihan bahasa dapat membuat perbedaan besar dalam nasib jangka panjang dan biaya dukungan proyek, dan karenanya harus selalu diperhitungkan dan direncanakan. Jangan menjadi MUMPS!