Pengembangan adalah tentang berulang kali menciptakan sesuatu yang baru dan bermanfaat.
Ketika kita mendengar "pengembangan," pengembangan produk baru sering kali terlintas dalam pikiran. Ini berbeda dari pembuatan produk individual; ini menyiratkan pembuatan cetak biru atau cetakan produk, begitu pula sebutannya.
Oleh karena itu, desain dan cetakan yang dibuat melalui pengembangan produk baru berulang kali digunakan di pabrik untuk memproduksi produk yang identik secara massal.
Ada juga penggunaan kata "pengembangan" seperti mengembangkan kemampuan individu, atau mengembangkan masyarakat dan bangsa. Ini menyiratkan bukan hanya peningkatan dalam apa yang dimiliki, melainkan kemampuan untuk berulang kali menggunakan dan mendapatkan manfaat dari kemampuan yang dikembangkan.
Meskipun kekuatan ekonomi individu dan masyarakat dapat berfluktuasi seiring dengan kondisi ekonomi, kemampuan yang dikembangkan umumnya bersifat permanen.
Bahkan jika kemampuan tersebut berkurang, itu dilihat sebagai kemunduran, bukan fluktuasi seperti kemakmuran ekonomi.
Selain itu, ada juga pengembangan teknologi dan pengetahuan. Berbeda dengan kemampuan individu atau masyarakat tertentu, hal-hal ini memiliki karakteristik mudah dibagikan.
Dan di antara hasil dari pengembangan-pengembangan ini—produk, kemampuan, pengetahuan, dan teknologi—beberapa di antaranya dapat berguna untuk pengembangan selanjutnya.
Dengan mengembangkan hasil yang bermanfaat tersebut, ruang lingkup pengembangan meluas, dan efisiensi serta kualitas juga meningkat.
Pengembangan Perangkat Lunak Berbasis AI
Secara umum, pengembangan membutuhkan waktu dan upaya yang cukup besar. Terutama seiring kemajuan masyarakat dan berbagai hal menjadi lebih canggih, menciptakan hal-hal baru menjadi semakin sulit.
Namun, dengan munculnya AI generatif, situasi ini berubah. Saat ini, pengembangan perangkat lunak sedang mengalami transformasi dramatis, diuntungkan oleh kemampuan pemrograman AI generatif yang tinggi.
Visi masa depan di mana agen otonom berbasis AI generatif menjadi pusat pengembangan perangkat lunak sebagai insinyur perangkat lunak sudah menjadi kenyataan.
Kita saat ini berada dalam periode transisi. Meskipun kita tidak dapat sepenuhnya menyerahkan pengembangan kepada AI generatif, pemanfaatan AI generatif secara terampil dapat secara kuat memajukan pengembangan perangkat lunak.
Ini disebut sebagai Pengembangan Perangkat Lunak Berbasis AI.
Pengembangan Berbasis Pengembangan
Ketika AI generatif menyederhanakan pengembangan perangkat lunak, ia tidak hanya dapat membuat pengembangan perangkat lunak target akhir menjadi lebih efisien, tetapi juga pengembangan perangkat lunak yang membantu dalam pengembangan itu sendiri.
Seperti yang disebutkan sebelumnya, hasil yang membantu pengembangan memperluas ruang lingkup pengembangan dan berkontribusi pada peningkatan efisiensi dan kualitas. Terlebih lagi, jika dibuat secara efektif, mereka dapat digunakan kembali dalam proyek pengembangan lainnya.
Oleh karena itu, dengan mengembangkan perangkat lunak yang berguna selama proses pengembangan perangkat lunak, efisiensi keseluruhan pada akhirnya dapat ditingkatkan, dan aset-aset ini dapat dimanfaatkan untuk pengembangan di masa mendatang juga.
Secara tradisional, pengembangan perangkat lunak yang membantu pengembangan semacam itu adalah praktik umum di lapangan, tetapi itu membutuhkan waktu dan upaya pengembangannya sendiri, sehingga memerlukan penilaian yang cermat dan implementasi yang ditargetkan.
Dengan memanfaatkan AI generatif, perangkat lunak sederhana untuk mengotomatisasi tugas-tugas kecil yang bersifat dadakan dapat dibuat dengan cepat. Untuk tugas-tugas dengan proses yang jelas, AI generatif dapat menghasilkan program yang akurat dengan hampir tanpa kesalahan.
Hal ini membuat pengembangan perangkat lunak yang membantu pengembangan selama pengembangan perangkat lunak menjadi lebih mudah dari sebelumnya.
Dan setelah direfleksikan lebih dalam, muncullah gaya pengembangan di mana alat-alat yang berguna terus-menerus dikembangkan selama proses pengembangan, sehingga mengubah metode pengembangan itu sendiri.
Kami akan menyebutnya Pengembangan Berbasis Pengembangan.
Untuk mempraktikkan Pengembangan Berbasis Pengembangan, diperlukan kebiasaan mengamati pengembangan perangkat lunak sendiri secara objektif untuk mempertimbangkan bagian mana yang dapat didelegasikan ke perangkat lunak dan bagian mana yang hanya dapat dilakukan oleh manusia, bersama dengan keterampilan untuk mengembangkan perangkat lunak pembantu pengembangan semacam itu.
Selain itu, AI generatif dapat diintegrasikan ke dalam alat perangkat lunak ini. Dengan menyematkannya di dalam perangkat lunak, tidak seperti agen AI generatif mandiri, ruang lingkup pemrosesan dapat dipersempit dan jalur yang jelas dapat ditentukan sampai batas tertentu.
Meskipun agen AI dapat mencapai hasil serupa melalui prompting, perangkat lunak yang mengintegrasikan AI generatif dapat lebih mudah meningkatkan akurasi dengan menggabungkan program dan prompt.
Jika Pengembangan Berbasis Pengembangan dapat dipraktikkan, proyek kedua akan melihat peningkatan kualitas dan biaya dibandingkan dengan yang pertama. Selanjutnya, dengan setiap proyek berikutnya—yang ketiga, keempat, dan seterusnya—peningkatan akan terus terakumulasi.
Ini sama sekali berbeda dari sekadar mengembangkan perangkat lunak menggunakan AI generatif. Kesenjangan yang signifikan akan muncul seiring waktu antara tim yang hanya menguasai alat AI generatif dan tim yang mempraktikkan Pengembangan Berbasis Pengembangan.
Pengujian Berbasis Refactoring
Ada konsep yang disebut Pengembangan Berbasis Pengujian (TDD), yang melibatkan perancangan pengujian berdasarkan spesifikasi terlebih dahulu, kemudian mengembangkan perangkat lunak untuk melewati pengujian tersebut.
Awalnya, saya juga berpikir bahwa dengan AI generatif yang memudahkan pengembangan program pengujian untuk pengujian otomatis, Pengembangan Berbasis Pengujian mungkin dapat diterapkan.
Namun, ketika saya mulai mempraktikkan Pengembangan Berbasis Pengembangan, saya mulai percaya bahwa pendekatan perancangan pengujian sebelum implementasi tidak selalu cocok.
Terutama untuk perangkat lunak seperti aplikasi web, yang melibatkan aspek-aspek subjektif seperti kegunaan dan desain visual yang dapat dialami seseorang melalui interaksi, saya menyadari bahwa menjalankan dan berinteraksi langsung dengan perangkat lunak lebih diutamakan daripada pengujian detail.
Ini karena jika ada ketidakpuasan signifikan pada tingkat UI/UX saat berinteraksi, ada kemungkinan bahwa bagian-bagian fundamental seperti kerangka kerja, arsitektur dasar, model data, atau kasus penggunaan mungkin perlu diubah.
Dalam proyek pengembangan perangkat lunak pribadi saya saat ini, saya juga melihat masalah dengan fleksibilitas fungsional dan kinerja, yang menyebabkan saya mengganti dua kerangka kerja dengan yang berbeda.
Ada juga bagian dengan efisiensi penggunaan memori yang buruk, yang memerlukan perombakan total pemrosesan.
Pada titik-titik refactoring inilah pengujian pertama kali menjadi pertimbangan yang disadari.
Jika ini selama tahap awal pengembangan, atau jika fitur dan spesifikasi akan berubah secara signifikan, pengujian mungkin tidak diperlukan.
Namun, jika pengembangan sudah berjalan dengan baik dan ada banyak item yang perlu diperiksa, pengujian kemungkinan akan diperlukan selama refactoring untuk memastikan tidak ada kekurangan atau kelalaian fungsional.
Oleh karena itu, gagasan untuk membuat program pengujian pada titik ketika pengembangan telah mencapai tingkat tertentu dan refactoring menjadi perlu bukanlah ide yang buruk.
Pada titik ini, kuncinya adalah tidak membuat pengujian untuk semua kode, tetapi memfokuskan pengujian pada bagian-bagian yang matang yang tidak mungkin banyak berubah di masa mendatang, meninggalkan bagian-bagian yang masih cair tanpa pengujian otomatis.
Ini dapat disebut Pengujian Berbasis Refactoring.
Kesimpulan
AI generatif secara dramatis mengubah pengembangan perangkat lunak.
Dalam artikel-artikel sebelumnya, saya menulis tentang pentingnya bertujuan untuk menjadi Insinyur Omnidireksional, yang dapat melampaui peran insinyur full-stack tradisional untuk mengembangkan sistem omnidireksional yang menggabungkan berbagai domain, infrastruktur, dan lingkungan eksekusi.
Saya juga menulis artikel yang menyarankan bahwa kita memasuki era Pengembangan Berbasis Pengalaman & Perilaku, yang berfokus pada peningkatan pengalaman pengguna melalui perilaku perangkat lunak, daripada pendekatan pengembangan perangkat lunak tradisional yang menyelaraskan spesifikasi dengan implementasi.
Pengembangan Berbasis Pengembangan dan Pengujian Berbasis Refactoring adalah pendekatan yang tepat yang akan membawa kita menuju cakrawala baru dalam pengembangan perangkat lunak.