Baru-baru ini saya menghadiri kuliah yang diberikan oleh Greg Wilson (Kepala Ilmuwan Perangkat Lunak Pertukangan). Dari abstrak:
Gagasan bahwa klaim tentang praktik pengembangan perangkat lunak harus didasarkan pada bukti masih asing bagi pengembang perangkat lunak, tetapi ini akhirnya mulai berubah: setiap akademisi yang mengklaim bahwa alat atau praktik tertentu membuat pengembangan perangkat lunak lebih cepat, lebih murah, atau lebih dapat diandalkan sekarang diharapkan untuk mendukung klaim itu dengan semacam studi empiris.
Secara keseluruhan, kuliahnya sangat informatif dan membuat saya berpikir cukup mendalam tentang pendekatan saya terhadap pengembangan. Secara khusus, saya sekarang menemukan diri saya mencari kutipan untuk mendukung banyak pernyataan. Sebelumnya, saya telah tergelincir ke dalam kebiasaan hanya mengulangi kebenaran yang ditawarkan, mungkin dengan catatan mental untuk memeriksanya nanti.
Terus terang, saya mudah tertipu .
Berikut ini contoh yang diambil dari kuliah:
"Jika lebih dari 25% kode perlu refactoring, lebih cepat untuk menulis ulang".
Kedengarannya masuk akal, tetapi apakah itu benar? Di mana studi mendukung ini? Benarkah untuk semua bahasa? Dan seterusnya.
OK, sangat mungkin untuk mengambil ini ke ekstrem dan tidak percaya apa pun oleh siapa pun kecuali Anda telah mengambilnya sendiri dari prinsip pertama. Dengan begitu terletak kegilaan (atau mungkin matematika ;-)). Tetapi, jika seseorang mendatangi Anda dengan pernyataan di sepanjang baris "Hei, dengan melakukan ini di [pilih bahasa saat ini] kami akan dapat meningkatkan produktivitas dengan [pilih kelipatan 10]%" apakah Anda cenderung hanya menerimanya, atau Anda akan meminta bukti yang terbukti?
Jika yang terakhir (dan saya harap begitu) maka
- kemana Anda akan pergi untuk menemukan bukti ini?
- seberapa ketat Anda akan?
Singkatnya, jika seseorang menawarkan kepada Anda pernyataan yang tidak diverifikasi, akankah Anda merespons dengan "rujukan?"
Jawaban:
Masalah dengan pernyataan semacam ini adalah bahwa bahkan jika Anda memiliki bukti empiris yang mendukung klaim, akan sangat sulit untuk menentukan apakah penelitian yang mengarah pada bukti yang diterapkan pada situasi Anda saat ini.
Hampir segala sesuatu dalam profesi memiliki peringatan, atau beberapa sehingga setiap perbaikan di satu tempat memiliki kemungkinan menjadi merugikan di tempat lain.
Orang-orang di parit mengetahui perbedaan melalui pengalaman dan umumnya tidak memiliki dana / waktu / sumber daya untuk mencoba membuktikannya melalui studi ilmiah.
Orang-orang yang mencoba membuktikannya melalui studi ilmiah jelas memiliki sumber daya untuk mendedikasikan untuk studi seperti itu dan karena itu sangat mungkin untuk menjual sesuatu kepada Anda, jadi saya akan mengatakan bahwa Anda harus lebih ketat menerapkan pengalaman pribadi Anda pada apa pun yang mengklaim didukung oleh penelitian empiris.
Jika seseorang mengatakan kepada Anda "Jika lebih dari 2% dari kode membutuhkan refactoring, lebih cepat untuk menulis ulang" Anda akan tahu bahwa itu salah sama seperti jika seseorang mengatakan kepada Anda "Hanya jika lebih dari 98% dari kode membutuhkan refactoring, itu adalah lebih cepat menulis ulang itu ". Di mana angka aktual tergantung pada apa yang Anda lakukan dan seberapa jauh dari ideal kode saat ini.
Gagasan bahwa setelah titik tertentu lebih mudah untuk melakukan reaktor nuklir jelas benar dalam banyak kasus, tetapi persentase sebenarnya lebih merupakan contoh yang perlu Anda pertimbangkan melalui lensa pengalaman (tim) Anda sendiri dan situasi saat ini.
sumber
Tidak, saya mempostingnya di sini dan melihat apakah ada perbaikan. Bukti sosial lebih baik daripada tidak ada bukti!
sumber
Banyak pengembang mendasarkan keputusan mereka dari waktu ke waktu berdasarkan pengalaman di parit yang bekerja dengan kode dan pelanggan yang dilayani oleh kode itu.
Ketika sebuah kelas atau metode telah menjadi sangat terfragmentasi oleh perbaikan bug dan permintaan perubahan pelanggan yang telah menjadi tidak dapat dipelihara, pengembang terkadang akan membuat keputusan untuk menulis ulang daripada refactor, berdasarkan teori bahwa ia akan menghemat waktu dan upaya dalam jangka panjang , karena kode yang dihasilkan akan berkualitas lebih tinggi.
Kecerdasan pengalaman semacam ini adalah apa yang disebut departemen SDM "modal manusia." Ini adalah salah satu hal yang membuat pengembang berpengalaman berharga, dan salah satu alasan perusahaan yang baik melakukan sesuatu untuk mencoba dan menjaga umur panjang karyawan mereka.
Rasanya tidak adil atau bahkan praktis untuk meminta pengembang berpengalaman untuk membuat studi dan data empiris sebagai bukti bahwa teknik mereka valid. Pengalaman tidak bekerja seperti itu. Sebaliknya, pengalaman adalah sesuatu yang "terasa masuk akal". Di dunia refactoring, kita sering menyebutnya "bau."
Pada akhirnya, pernyataan seperti "Jika lebih dari 25% dari kode perlu refactoring, lebih cepat untuk menulis ulang" tidak dapat terbukti bekerja dalam semua keadaan, sehingga pernyataan [rujukan?] Benar-benar cara untuk memberi tahu programmer dogmatik yang berusaha untuk memaksakan pandangannya pada orang lain bahwa itu tidak selalu "Jalan-Nya atau Jalan Raya."
sumber
Saya pikir dengan apa pun yang Anda tidak pernah tahu sampai Anda mencobanya. Bahkan dengan bukti yang mendukung pernyataan, selalu memungkinkan untuk membengkokkan fakta demi kepentingan Anda. Yang sedang berkata Anda tidak harus mencoba setiap hal baru yang menyentuh jalinan. Buat penilaian terbaik Anda. Ingat, jika sesuatu terdengar terlalu bagus untuk menjadi kenyataan, mungkin itu benar. Selalu tanyakan pada diri sendiri mengapa Anda perlu mengadopsi sesuatu? Apa yang harus Anda dapatkan? Apakah masuk akal dari calon bisnis? Jangan pernah membutakan kecuali sesuatu pada iman.
sumber
Contoh dari kuliah adalah heuristik, aturan praktis dan tidak lebih. Itu harus jelas secara implisit.
Heuristik seperti yang lain: mereka tunduk pada konteks tertentu dan bergantung pada sejumlah asumsi yang tidak disebutkan, dan kegunaannya bisa sangat non-deterministik. Sebanyak mungkin penilaian sewenang-wenang untuk menemukan mereka berguna seperti halnya merumuskan mereka.
Apakah itu berarti mereka tidak berharga? Saya tidak akan mengatakannya sama sekali.
Heuristik adalah salah satu pendekatan yang dapat kita ambil untuk mengatasi masalah NP-complete, dan dalam banyak hal, rekayasa perangkat lunak itu sendiri merupakan masalah NP-complete.
sumber
Tergantung. :) Ketika pernyataan seseorang bertentangan dengan pengalaman yang diulang, direfleksikan, dan diverifikasi secara pribadi, maka ya, saya ingin melihat semacam referensi penelitian. Di sisi lain, jika seseorang menggemakan ide yang telah Anda lihat dan hidup berkali-kali, tidak ada banyak reaksi yang diprovokasi (tidak berarti bahwa ide itu sempurna).
Sebagai contoh, buku "Code Complete" mengutip sejumlah studi dalam setiap bab untuk menunjukkan poin-poinnya, terkadang tentang hal-hal yang tampaknya kecil (seperti lekukan dan jarak, atau panjang nama variabel). Saya ingat beberapa pengembang (yang lebih muda) yang saya perkenalkan buku untuk berpikir bahwa tingkat detail dan bukti itu konyol. Tetapi beberapa bulan kemudian dengan lebih banyak pengalaman pengkodean produksi dan setelah beberapa ulasan kode, beberapa pengembang yang sama memiliki kejujuran untuk mengakui bahwa ya, bahkan jumlah ruang dalam lekukan tidak masalah. Komentar yang baik penting. Enkapsulasi penting. dll. dll
Di sisi lain, ketika vendor mengklaim beberapa IDE baru 50% lebih produktif, reaksi pertama saya adalah $ $ ^ &!
sumber
Bukankah itu sesuatu yang tergantung pada banyak variabel tidak berwujud (variabel yang tidak memiliki cara untuk diukur secara ilmiah)?
Menurut pendapat saya, mereka berbicara tentang metode empiris untuk mengukur emosi. Sesuatu yang bahkan Spock tidak bisa capai. =)
sumber