Seni Perang yang Diterapkan pada Pengembangan Perangkat Lunak
Diterbitkan: 2022-03-11Jika Anda bekerja di industri perangkat lunak, kemungkinan Anda pernah mendengar tentang paradigma desain divide and taklukkan , yang pada dasarnya terdiri dari pemecahan masalah secara rekursif menjadi dua atau lebih sub-masalah ( devide ), hingga menjadi cukup sederhana untuk diselesaikan secara langsung. ( menaklukkan ).
Apa yang Anda mungkin tidak tahu adalah bahwa paradigma ini berasal dari strategi politik lama (nama ini berasal dari bahasa Latin yang mengatakan devide et impera ) yang menunjukkan adalah mungkin untuk mempertahankan kendali atas bawahan atau subjek dengan mendorong perbedaan pendapat di antara mereka.
Strategi ini telah digunakan oleh banyak politisi dan pemimpin militer sepanjang sejarah, seperti Julius Caesar (yang menggunakannya selama Perang Galia untuk mengalahkan Galia yang kuat secara militer) dan Napoleon (pakar artileri Prancis akan membagi pasukan musuh sehingga tidak ada bagian yang lebih kuat). dari pasukannya sendiri, dan kemudian mengganggu komunikasi mereka, menghalangi upaya musuh untuk mengoordinasikan dan melakukan serangan).
Seni Perang: Prinsip Kuno yang Diterapkan pada Pembangunan
Namun, aturan bagi dan taklukkan bukanlah satu-satunya strategi politik yang dapat diterapkan pada pengembangan perangkat lunak. Meskipun politik dan peperangan tidak ada hubungannya dengan pengembangan perangkat lunak, seperti halnya politisi dan jenderal, pengembang harus memimpin bawahan, mengoordinasikan upaya antar tim, menemukan strategi terbaik untuk menyelesaikan masalah, dan mengelola sumber daya.
The Art of War adalah risalah militer kuno yang ditulis pada abad kelima SM dan dikaitkan dengan Sun Tzu, seorang ahli strategi militer Tiongkok kuno, yang teorinya memiliki pengaruh besar pada filsafat Timur dan Barat.
Meskipun sudah tua, teks ini masih termasuk dalam silabus di banyak sekolah militer di Asia Timur dan terdaftar sebagai bacaan yang direkomendasikan di beberapa akademi militer di Barat. Teks ini dibagi menjadi 13 bab, masing-masing membahas aspek peperangan yang berbeda.
Namun, selain peperangan, prinsip dan ajaran Sun Tzu memiliki aplikasi praktis dalam politik, bisnis, olahraga, dan, percaya atau tidak, pengembangan perangkat lunak. Bahkan, Anda mungkin hanya menerapkan beberapa prinsip ini dalam rutinitas harian Anda, tanpa mengetahui asal-usulnya.
Dirinci di bawah ini, Anda akan menemukan daftar singkat taktik dasar dan tips yang dijelaskan dalam Seni Perang. Mereka mungkin dapat diterapkan pada pekerjaan Anda di industri perangkat lunak, atau salah satu dari sejumlah industri lainnya.
Waktu Sangat Penting Dalam Kampanye Apa Pun
Bab II, paragraf 2
Ketika Anda terlibat dalam pertempuran yang sebenarnya, jika kemenangan akan datang lama, maka senjata pria akan menjadi tumpul dan semangat mereka akan berkurang.
Prinsip ini dapat diterapkan pada pengembangan perangkat lunak, sebagai aturan yang menggambarkan hubungan antara panjang siklus pengembangan dan moral pengembang.
Jika sekelompok pengembang mengerjakan proyek yang sama selama berbulan-bulan, tanpa tujuan yang jelas atau akhir yang terlihat, mereka mungkin menjadi frustrasi dan produktivitas mereka mungkin menurun.
Pengembangan perangkat lunak adalah upaya intelektual, jadi motivasi adalah bahan bakar utama untuk produktivitas. Bekerja setiap hari tanpa menyadari bahwa pekerjaan Anda menghasilkan hasil yang nyata bisa sangat menurunkan motivasi.
Seperti yang ditunjukkan dalam beberapa metodologi tangkas, peta jalan pengembangan harus dibagi menjadi beberapa tujuan dan pencapaian, yang mungkin dapat dicapai oleh tim dalam jangka waktu yang singkat, dan mereka akan memberi mereka rasa kemajuan dan pencapaian.
Bab II, paragraf 18
Maka, dalam perang, biarkan tujuan besar Anda menjadi kemenangan, bukan kampanye panjang.
Frasa ini dapat diartikan dalam dua cara:
Pertama, ini dapat dilihat sebagai pendahulu dari filosofi UNIX: Tulis program yang melakukan satu hal dan melakukannya dengan baik . Saat mengembangkan perangkat lunak, Anda harus selalu mengingat tujuan utama program, fitur utama yang disediakan, atau masalah terbesar yang dipecahkan, dan memastikan implementasi yang tepat.
Terkadang Anda mungkin terinspirasi dan memikirkan fitur yang sangat keren untuk ditambahkan, tetapi jangan lupa bahwa aplikasi yang memiliki banyak fitur yang jarang digunakan memiliki nama yang meremehkan: bloatware .
Kedua, pernyataan tersebut juga dapat dianggap sebagai pendahulu untuk salah satu prinsip pengembangan perangkat lunak lean: Deliver secepat mungkin .
Semakin cepat Anda mengirimkan perangkat lunak tanpa cacat besar, semakin cepat Anda akan mendapatkan umpan balik dari klien, dan Anda akan dapat memasukkan perubahan ke dalam iterasi berikutnya.
Jika di sisi lain, Anda memberikan perangkat lunak yang tidak berfungsi, Anda akan kehilangan umpan balik yang berharga, karena klien tidak akan mendapatkan kesempatan untuk mengujinya dengan benar. Ini akan membuat tahap pengembangan selanjutnya lebih sulit, atau tidak mungkin dalam situasi di mana iterasi Anda berikutnya bergantung pada umpan balik pelanggan.
Tidak Ada Kepemimpinan, Tidak Ada Hasil
Bab III, paragraf 11
Sekarang sang jenderal adalah benteng Negara; jika benteng selesai di semua titik, Negara akan menjadi kuat; jika benteng rusak, Negara akan lemah.
Kutipan ini menggambarkan pentingnya peran manajer dalam tim pengembangan: keberhasilan sebuah proyek tergantung pada kekuatan semua orang yang terlibat, dan manajer adalah benteng dari proyek tersebut. Tanggung jawab dimulai dari atas.
Meskipun pengembang sering bekerja sendiri (masing-masing duduk di belakang komputer, dengan komunikasi terbatas dengan rekan kerja), bukan berarti mereka tidak membutuhkan kepemimpinan yang baik. Manajer proyek bertanggung jawab untuk menjaga tim tetap pada jalurnya, memastikan komunikasi yang efektif dan penyelesaian perselisihan, dan para pemimpin, jelas, menentukan prioritas proyek (di antara tugas-tugas lainnya), sehingga peran mereka tidak boleh diremehkan. Mereka juga tidak bertanggung jawab jika terjadi kesalahan. Bayangkan apa yang akan terjadi pada seorang pemimpin militer yang unitnya gagal menjalankan tugasnya di medan pertempuran?
Sebuah tim dapat menghasilkan perangkat lunak yang hebat bahkan jika memiliki beberapa apel buruk dalam posisi pengembangan, tetapi itu tidak mungkin terjadi jika manajer proyek adalah apel yang buruk , tidak peduli berapa banyak pengembang rockstar yang dimiliki tim.
Bab VI, paragraf 28
Jangan mengulangi taktik yang telah memberi Anda satu kemenangan, tetapi biarkan metode Anda diatur oleh berbagai keadaan yang tak terbatas.
Terkadang, saat memulai sebuah proyek, kita tergoda untuk menggunakan kumpulan teknologi yang sama dengan yang kita gunakan dalam proyek yang sebelumnya sukses (bahasa pemrograman yang sama, pustaka yang sama, server yang sama, dll). Namun, kecuali jika persyaratan proyek baru sama persis dengan yang sebelumnya, ini mungkin merupakan pendekatan yang salah.
Dalam pemrograman, seperti di sebagian besar domain, obat mujarab (obat yang dianggap mampu menyembuhkan semua penyakit) tidak ada. Tidak ada kombinasi teknologi tunggal yang dapat Anda gunakan untuk menyelesaikan semua masalah; setiap teknologi memiliki kelebihan dan kekurangannya masing-masing.
Tentu saja, mempelajari bahasa pemrograman baru atau menggunakan API yang tidak dikenal pada awalnya mungkin mahal, tetapi dalam jangka panjang, kualitas perangkat lunak akan lebih unggul dan Anda akan menjadi pengembang yang lebih baik.
Bab XIII, paragraf 27
Oleh karena itu hanya penguasa yang tercerahkan dan jenderal yang bijaksana yang akan menggunakan kecerdasan tertinggi tentara untuk tujuan mata-mata, dan dengan demikian mereka mencapai hasil yang luar biasa. Mata-mata adalah elemen terpenting dalam perang, karena pada mereka bergantung kemampuan pasukan untuk bergerak.
Frasa ini dapat diartikan sebagai pentingnya menggunakan alat pemantauan dan perpustakaan logging selama fase pemeliharaan.
Meskipun terkadang klien mungkin tidak berpikir demikian, pengembangan tidak berakhir ketika Anda mendapatkan rilis yang stabil dan teruji sepenuhnya. Perangkat lunak selalu berkembang, baik dengan memperbaiki bug, menambahkan fitur baru, atau meningkatkan efisiensi.

Dan tidak ada sumber informasi yang lebih baik untuk mengetahui perubahan apa yang harus dilakukan selain memiliki mata-mata yang memantau perangkat lunak di lingkungan produksi, memeriksa fitur mana yang paling sering digunakan, kesalahan paling umum, dan operasi yang paling lama.
Laporan kesalahan, entri logging, dan data penggunaan sangat penting untuk mendeteksi bug, mengidentifikasi kemacetan, dan masalah lainnya karena tidak selalu memungkinkan untuk mereproduksi kondisi yang sama di lingkungan pengujian yang terkontrol.
Kerja Sama Tim Dan Motivasi
Bab X, paragraf 24
Dia yang maju tanpa mencari ketenaran, Yang mundur tanpa menghindari kesalahan, Dia yang satu tujuannya adalah untuk melindungi rakyatnya dan melayani tuannya, Pria itu adalah permata dari Alam.
Pada dasarnya, ini adalah versi Cina kuno dari "tidak ada saya dalam tim" . Lebih penting untuk bekerja sama dengan orang lain daripada mengejar keuntungan pribadi.
Pengembangan perangkat lunak adalah aktivitas kompleks yang mengharuskan pengembang untuk bekerja secara efektif sebagai sebuah tim. Pengembang yang baik bukanlah pengembang yang paling banyak memperbaiki bug, mengimplementasikan fitur paling banyak, atau menyelesaikan tugas lebih cepat dari jadwal; pengembang yang baik adalah orang yang membantu tim mencapai tujuannya.
Mengklaim pujian untuk semua yang telah Anda lakukan, tidak menyadari kesalahan Anda atau menyalahkan orang lain atas kesalahan tersebut, atau menyebut diri Anda seorang ninja kode mungkin menipu beberapa manajer yang tidak berpengalaman dan bahkan mungkin akan menaikkan gaji Anda, tetapi Anda akan menjadi anggota tim Anda yang kontraproduktif.
Bab VII, paragraf 21
Renungkan dan renungkan sebelum Anda bergerak.
Frasa ini menunjukkan pentingnya pertemuan pengembangan tim, seperti yang diusulkan oleh metodologi tangkas.
Saat bekerja dalam tim, penting untuk mendiskusikan perubahan besar apa pun sebelum menerapkannya. Tidak masalah jika Anda adalah pemimpin tim, atau jika Anda adalah orang yang paling berpengalaman dalam subjek, Anda harus selalu berbicara dengan, atau setidaknya memberi tahu, anggota tim lainnya.
Ingatlah bahwa pengembang lain dapat memberi Anda wawasan tentang bagian perangkat lunak yang tidak dikenal. Ini berarti mereka dapat mulai menerapkan perubahan lebih cepat dari yang diharapkan, karena mereka dapat sepenuhnya menyadari efek dari perubahan tersebut.
Bab X, paragraf 25
Anggap prajuritmu sebagai anak-anakmu, dan mereka akan mengikutimu ke lembah terdalam; pandanglah mereka sebagai putra-putramu yang terkasih, dan mereka akan berdiri di sampingmu bahkan sampai mati.
Kutipan ini menunjukkan pentingnya motivasi, prinsip manajemen yang terkadang dilupakan oleh manajer dan pemimpin tim. Pengembang yang termotivasi akan menulis kode yang lebih baik, bekerja lebih cepat, melakukan lebih sedikit kesalahan, dan lebih bersedia bekerja ekstra.
Motivasi harus dibangkitkan oleh manajer, dengan menaruh minat yang tulus pada bawahan mereka, mendengarkan mereka, memperhatikan keseimbangan kehidupan kerja mereka, membangun lingkungan kerja yang positif dan peduli dengan jalur karir mereka.
Juga, Anda tidak boleh salah mengartikan motivasi dengan remunerasi. Studi terbaru menunjukkan bahwa uang tidak memotivasi sebagian besar pekerja, uang sebagian besar bagus untuk menarik dan mempertahankan karyawan, tetapi tidak membuat mereka senang dengan pekerjaan mereka. Jadi kenaikan gaji dan promosi tidak boleh dilihat sebagai alat motivasi.
Berpikir di Luar Kotak
Bab V, paragraf 7, 8 dan 9
Tidak lebih dari lima nada musik, namun kombinasi dari kelima nada ini menghasilkan lebih banyak melodi daripada yang bisa didengar.
Ada tidak lebih dari lima warna primer, namun dalam kombinasi mereka menghasilkan lebih banyak warna daripada yang pernah terlihat.
Ada tidak lebih dari lima rasa utama, namun kombinasi dari mereka menghasilkan lebih banyak rasa daripada yang pernah bisa dicicipi.
Salah satu hal baik tentang pemrograman adalah kemungkinannya tidak terbatas; Anda dapat mengembangkan pada dasarnya di mana pun Anda inginkan (setidaknya, selama bukan masalah NP-complete).
Aplikasi seluler, situs web, game, aplikasi desktop... jika Anda tahu pemrograman, semuanya ada dalam jangkauan Anda.
Bab III, paragraf 1
Dalam seni perang praktis, hal terbaik dari semuanya adalah merebut negara musuh secara utuh dan utuh; untuk menghancurkan dan menghancurkannya tidak begitu baik. Jadi, juga, lebih baik untuk menangkap seluruh pasukan daripada menghancurkannya, untuk menangkap satu resimen, satu detasemen atau seluruh kompi daripada menghancurkan mereka.
Saat mengerjakan proyek dengan basis kode yang besar, biasanya ditemukan modul atau bagian kode yang telah diimplementasikan dengan praktik buruk atau dengan menggunakan pustaka yang tidak digunakan lagi. Meskipun mungkin tergoda untuk menghapus (atau menghancurkan) kode ini, itu mungkin bukan ide terbaik karena beberapa alasan:
Kode lama tidak selalu buruk, terkadang kode bagus yang ditulis ketika metodologi dan teknologi lain dianggap sebagai jalan yang harus ditempuh. Namun, hanya karena sudah tua bukan berarti tidak berfungsi.
Anda mungkin kehilangan waktu untuk memperbaiki kode yang masih berfungsi alih-alih berfokus untuk memperbaiki bagian kode lain yang lebih penting.
Kecuali Anda benar-benar yakin dengan apa yang Anda lakukan, mengganti bagian kode yang berfungsi berarti Anda berisiko menimbulkan kesalahan atau bug baru.
Ini tidak berarti bahwa ungkapan "Jika tidak rusak, jangan diperbaiki" adalah strategi yang baik, tetapi setiap proyek memiliki prioritas, tujuan, dan batasan waktu. Jadi, jika Anda menemukan kode yang dapat ditingkatkan, diskusikan dengan anggota tim lainnya atau dengan manajer proyek untuk mengetahui kapan harus mengoptimalkannya.
Bab VIII, paragraf 3
Ada jalan yang tidak boleh diikuti, tentara yang tidak boleh diserang, kota-kota yang tidak boleh dikepung, posisi yang tidak boleh diperebutkan, perintah penguasa yang tidak boleh dipatuhi.
Meskipun tidak secara langsung, prinsip ini dapat kita artikan sebagai peringatan untuk menghindari anti-pola.
Meskipun menggunakan anti-pola dapat menyelesaikan masalah jangka pendek, Anda harus ingat bahwa dalam jangka panjang itu akan menjadi kontra-produktif. Jadi, tidak peduli berapa banyak waktu yang Anda hemat, berapa banyak bug yang Anda perbaiki atau seberapa nyaman bagi Anda, hindarilah.
Namun, ada kalanya Anda mungkin tergoda untuk menggunakan anti-pola untuk menyelesaikan tugas mendesak, berjanji pada diri sendiri bahwa Anda akan menerapkan perbaikan yang tepat ketika Anda memiliki lebih banyak waktu, tetapi ingat salah satu hukum Murphy: Semua perbaikan cepat menjadi perubahan permanen.
Kesimpulan
Meskipun mengembangkan perangkat lunak berbeda dengan memimpin tentara dalam perang atau memimpin suatu negara, semua itu harus menyelesaikan masalah yang membutuhkan kerja tim, kepemimpinan yang baik, efisiensi, dan solusi jangka panjang.
Namun, Art of War bukan satu-satunya buku yang berisi prinsip-prinsip yang dapat diterapkan pada pengembangan perangkat lunak. The Prince karya Niccolo Machiavelli, adalah contohnya.
Faktanya, berikut adalah daftar kutipan dari Machiavelli yang masih relevan. Coba tebak mana prinsip yang sesuai dalam dunia pengembangan perangkat lunak.
- Singa tidak dapat melindungi dirinya dari jebakan, dan rubah tidak dapat melindungi dirinya dari serigala. Karena itu, seseorang harus menjadi rubah untuk mengenali jebakan, dan singa untuk menakuti serigala.
- Jangan pernah mencoba untuk memenangkan dengan paksa apa yang bisa dimenangkan dengan penipuan.
- Tidak pernah ada sesuatu yang hebat dicapai tanpa bahaya.
- Siapa pun yang menginginkan kesuksesan terus-menerus harus mengubah perilakunya seiring waktu.
- Pria pada umumnya menilai lebih dari penampilan daripada dari kenyataan. Semua pria memiliki mata, tetapi hanya sedikit yang memiliki karunia penetrasi.
- Dia yang ingin dipatuhi harus tahu bagaimana memerintah.
- Kebijaksanaan terdiri dari mengetahui bagaimana membedakan sifat masalah, dan dalam memilih kejahatan yang lebih rendah.
- Tidak ada cara untuk menghindari perang; itu hanya dapat ditunda untuk keuntungan musuh Anda.
- Alam menciptakan sedikit orang yang berani; industri dan pelatihan membuat banyak.