Bagaimana Anda menjelaskan refactoring kepada orang non-teknis?

52

Bagaimana Anda menjelaskan tentang refactoring (dan utang teknis) kepada orang non-teknis (biasanya PHB atau pelanggan)? ("Apa, itu akan menghabiskan biaya sebulan untuk pekerjaanmu tanpa perbedaan yang terlihat ?!")

UPDATE Terima kasih atas semua jawaban sejauh ini, saya pikir daftar ini akan memberikan beberapa analogi yang bermanfaat yang dapat kami tunjukkan kepada orang yang tepat (meskipun mengedit referensi ke PHB mungkin bijaksana!)

Benjol
sumber
Saya tidak ingat bagaimana Apple meyakinkan banyak orang untuk berubah dari Leopard ke Snow Leopard. Mungkin harganya: $ 100 kurang dari biasanya saat itu.
mouviciel
Pertanyaan ini dapat menghasilkan beberapa tanggapan yang sangat berguna bagi siapa pun yang bekerja dengan kode dalam industri. Perhatikan orang.
joshin4colours
mengapa itu bijaksana?
Louis Rhys

Jawaban:

53

Ketika Anda memiliki teater rumah besar dan Anda menambahkan sesuatu, perlahan-lahan tapi pasti sarang tikus besar terbentuk di belakang.

Jika Anda sering mengganti komponen, terkadang ada baiknya meluruskan semua itu.

Tentu, jika Anda melakukan itu, itu berhasil sebelumnya, dan itu tidak akan bekerja lebih baik daripada ketika Anda mulai, tetapi ketika Anda harus mengacaukannya lagi, segalanya akan jauh lebih mudah.

Dalam hal apa pun, mungkin yang terbaik untuk membuat perbandingan yang serupa dengan beberapa bidang studi yang sudah dikenal oleh PHB atau pelanggan, yaitu mobil atau konstruksi atau sesuatu ...

whatsisname
sumber
1
Bukan analogi terbaik karena itu membuatnya terdengar seperti hal-hal buruk hanya secara spontan merangkak ke teater Anda, berlawanan dengan hal-hal buruk yang muncul sebagai akibat langsung dari terus membangun teater Anda.
doppelgreener
21
@Axidos: "rats nest" adalah idiom bahasa Inggris yang berarti "sesuatu yang tampaknya mustahil untuk diurai" (dalam hal ini, kabel dan kabel di belakang pusat hiburan)
HedgeMage
8
Secara konseptual ini cukup bagus - membutuhkan "kabel" setelah "sarang tikus"
Murph
2
@ Peter: Saya pikir kita semua harus pergi di belakang TV setidaknya sekali. Jelaskan saja seratus kali lebih buruk dan putar seutas kabel di mana-mana dan tarik ini dan tarik itu dan temukan peradaban mati di suatu tempat di kekacauan.
doppelgreener
3
Jika seseorang tidak dapat berhubungan, perlihatkan ini kepada mereka: google.com/images?q=do+not+touch+any+of+these+wires
Steve S
41

Re-factoring sama seperti proses pengemasan ulang koper sampai semuanya pas. Terkadang, dalam prosesnya, Anda bertanya-tanya mengapa Anda mencoba untuk mendapatkan begitu banyak sampah di sana untuk memulai.

Pos Tim
sumber
1
Saya akan memposting analogi dengan garasi atau gudang, tetapi ini lebih baik.
Matt Ellen
Atau kadang-kadang Anda pergi membeli beberapa koper lagi dan menyadari bahwa membayar biaya kelebihan berat badan bukanlah masalah besar, karena dalam biaya perangkat lunak tidak sama dengan yang ada di dunia fisik. Maka Anda benar-benar dapat memasukkan semuanya dengan baik dan kendala dari satu koper ternyata berubah-ubah dan tidak masuk akal.
Dan Rosenstark
+1 Ini luar biasa. Selain membuat hal-hal menempati lebih sedikit ruang, ada hal-hal yang Anda sadari bahwa Anda bahkan tidak membutuhkannya sama sekali sehingga bisa pergi.
Robbie Dee
21

Saya tidak akan menjelaskan konsep hutang teknis, karena itu tidak perlu. Alih-alih, fokuslah pada refactoring: Anda mengubah desain program Anda, tidak harus sehingga "lebih baik" atau "ditingkatkan", Anda mengubahnya sehingga dapat menerima perubahan yang perlu Anda buat.

Analogi mobil mungkin cocok: Anda perlu menambahkan AC ke mobil, tetapi awalnya tidak dirancang untuk itu. Anda tidak hanya harus membuat AC aneh berbentuk L, tetapi Anda juga harus memindahkan beberapa hal lain terlebih dahulu dan mengubah sistem ventilasi.

Saya juga berpikir itu adalah strategi yang lebih baik untuk refactor ketika Anda mengakomodasi fitur-fitur baru: jika tidak, Anda mungkin mengubah desain menjadi sesuatu yang hanya terlihat "lebih baik," tetapi sebenarnya mungkin kurang cocok dengan keadaan di sekitar penambahan fitur Anda berikutnya.

Macneil
sumber
Memindahkan bagian-bagian dalam mobil untuk memberikan kinerja yang lebih baik atau perawatan yang lebih mudah - bekerja untuk siapa saja yang mengangkat tutupnya pada mobil mereka, tetapi berapa banyak PHB yang melakukan itu?
Peter Boughton
3
Saya suka yang ini karena ini menekankan bahwa refactoring sedang dilakukan untuk membuat perubahan yang diperlukan lebih mudah (atau mungkin). Refactoring biasanya tidak dilakukan untuk kepentingannya sendiri, tetapi untuk memenuhi tujuan tertentu.
Kristopher Johnson
Jadi, jawaban singkatnya adalah: Jangan beri tahu mereka! Hanya faktor waktu ke fitur baru dan refactor sesuai.
Jonathan van de Veen
12

Saya menggunakan istilah Hutang Teknis dan menghubungkannya langsung dengan sesuatu yang mereka pahami - Hutang Korporat. Utang Teknis seperti mengambil pinjaman. Anda membayar bunga untuknya. Misalnya, Anda dapat membangun pabrik baru dan membayarnya langsung atau Anda dapat memperoleh pinjaman untuk itu. Jika Anda mendapatkan pinjaman, Anda akan benar-benar membayar lebih untuk jangka panjang, tetapi masuk akal secara finansial jika persyaratannya benar .

Namun, jika Anda membayar bunga 25% untuk pinjaman seperti itu, Anda menempatkan diri Anda pada posisi yang tidak berkelanjutan. Ini sama dengan utang teknis. Terkadang masuk akal untuk mengambil utang teknis. Namun, ada titik di mana bunganya terlalu tinggi dan harus dilunasi. Beberapa hutang techincal seperti pinjaman rumah dan beberapa lainnya seperti hutang kartu kredit. Dalam keadaan darurat, hutang kartu kredit adalah aset yang penting dan berharga. Namun, itu juga dapat merusak bank (atau rumah tangga jika Anda pilih) jika digunakan secara tidak bijaksana.

Contoh lain: Anda dapat membayar $ 10.000 untuk pengiriman surat pemasaran untuk mendapatkan lebih banyak arahan untuk penjualan di masa mendatang. Anda membayar "hutang penjualan". Ini merupakan pengeluaran dengan imbalan jangka panjang. Menyamakan ini dengan mengapa Anda ingin "menghabiskan" uang sekarang refactoring sepotong kode. Dalam kedua kasus tidak ada imbalan langsung, tetapi Anda menyiapkan diri Anda untuk kinerja yang lebih baik di masa depan.

Saya cenderung menggunakan istilah "utang xxxx" sebagai analogi ketika berbicara dengan siapa pun audiens targetnya. Misalnya, Hutang Operasional - Mesin cetak yang kita miliki sekarang berfungsi dengan baik, tetapi dengan menghentikan produksi selama satu hari (atau satu minggu) dan meningkatkan ke mesin baru kita dapat meningkatkan output sebesar 25%.

EDIT - Ini adalah pandangan lain tentang ini

Nemi
sumber
1
+1 untuk jawaban yang beralasan yang menunjukkan ekonomi realistis. Hutang kadang-kadang rasional, dan kaum puritan kehilangan banyak peluang jika mereka tidak bisa mentolerirnya.
Macneil
1
Dan orang-orang mengerti bahwa mengambil pinjaman untuk membayar bunga pinjaman lama tidak berkelanjutan.
Christopher Mahan
1
Ini adalah preferensi saya untuk penjelasan, karena saya suka merujuk pada menghapus semuanya dan menulis ulang (yang seringkali merupakan satu-satunya pilihan yang tersisa karena begitu banyak hutang teknis) sebagai kebangkrutan teknis
Wayne Molina
4
Ini jawaban yang mengerikan. (1) Ini lebih rumit daripada penjelasan teknis refactoring. (2) Ini tidak menjelaskan "mengapa" dari refactoring; ini menjelaskan "kapan" dari refactoring (yaitu: kapan efektif biaya). Atau mungkin saya benar-benar tidak mengerti postingan ini, dan karenanya poin (1).
Thomas Eding
2
@ThomasEding (1) Ini bukan penjelasan tentang refactoring, ini adalah penjelasan tentang utang teknis. (2) Ini menjelaskan mengapa kapan harus refactor - untuk pelaku bisnis. Jujur, mereka tidak peduli dengan alasan teknis, Anda tahu. Mereka menginginkan alasan yang dapat dibenarkan bahwa Anda mengerjakan sesuatu selain fitur berikutnya yang akan mendorong penjualan. Inilah sebabnya mengapa kebanyakan programmer tidak dapat berbicara dengan bos mereka dan mengeluh bos itu bodoh. Mereka tidak bodoh, mereka hanya memiliki driver yang berbeda dari Anda.
Nemi
8

Membersihkan musim semi.

Anda tidak melakukan modifikasi apa pun di rumah. Anda hanya memindahkan barang-barang dan menyingkirkan debu. Mungkin membuang beberapa hal yang tidak Anda gunakan atau butuhkan lagi. tetapi Anda tidak menambahkan apa pun.

Mark Canlas
sumber
1
+1: Ini adalah jawaban imo terbaik: dan hampir semua orang bisa berelasi. "Kamu tinggal di rumahmu, semuanya menjadi kotor / berdebu / sederhana - secara berkala kamu perlu melakukan pembersihan yang dalam."
Steven Evers
7

"Apakah Anda pernah memainkan Mouse Trap ? Saat kami menggunakan fitur baru, mengubah antarmuka, dan memperbaiki bug, kode dapat mulai terlihat seperti itu. Ada saatnya kita harus mengeluarkan banyak modal (waktu dan usaha) , yang berarti sejumlah uang) memastikan semua bagian yang bergerak bermain dengan baik dengan setiap perubahan atau penambahan baru, atau kita dapat menyisihkan waktu untuk memperbaiki desain, sehingga lebih sedikit bagian bergerak yang harus kita kelola setiap kali kita melakukan perubahan. mungkin terlihat , dari perspektif pengguna akhir, bahwa refactor tidak memiliki manfaat apa pun, tetapi manfaat terjadi setiap kali fitur baru ditambahkan pasca-refactor. Prosesnya lebih cepat, memperkenalkan lebih sedikit bug, dan lebih murah setelahnya, belum lagi bahwa kode refactored sering lebih efisien secara keseluruhan.

Anda mungkin bertanya-tanya mengapa kami membiarkannya mulai terlihat seperti Mouse Trap:

  • Kadang-kadang menyelesaikan sesuatu sekarang berarti kita harus mengorbankan keanggunan dan efisiensi hanya untuk "membuatnya bekerja".
  • Fitur bahasa dan teknologi lain yang tersedia bagi kita sebagai programmer sering berubah. Terkadang fitur-fitur baru mari kita gantikan enam komponen yang bergerak dengan satu.
  • Seringkali, ketika kita menambahkan fitur C ke fitur A dan B, kita tidak tahu bahwa B pada akhirnya akan dihapus dan D ditambahkan. Salah satu cara untuk mencapai C dapat bekerja sangat baik dengan B, tetapi tidak begitu baik dengan D.

Dalam upaya untuk terus membangun perangkap tikus yang lebih baik, kita harus terus-menerus kembali dan menemukan tempat untuk mengurangi kerumitan dan merampingkan apa yang kita miliki. Ini perbedaan antara hanya memiliki perangkat lunak dengan banyak fitur, dan memiliki perangkat lunak yang benar-benar berkualitas tinggi. "

HedgeMage
sumber
6

teks alternatif

Ini adalah versi analogi home theater yang sedikit lebih grafis.

Jika Anda ingin menambahkan satu lagi alat baru [alias, fungsionalitas baru], dalam keadaan darurat Anda mungkin dapat memasangnya di suatu tempat.

Jika Anda ingin menambahkan alat lain, Anda dapat membeli ekstensi, yang akan memberi Anda waktu.

Tetapi pada setiap penambahan, menjadi lebih sulit untuk menemukan solusi. Dan Anda mengekspos diri Anda untuk risiko 1 api [alias bug], dan Anda akan harus menarik keluar uang besar untuk membayar seseorang untuk menempatkan soket baru ke dinding, yang bisa sangat mungkin meningkat sepanjang jalan sampai ke utama papan sirkuit, atau lebih jauh.

1 Hal lain yang tidak disukai PHK dengan baik: "Ya, jika itu hanya bisa terjadi, apa yang Anda khawatirkan?"

Benjol
sumber
5

Refactoring - seperti mengatur lemari pakaian / Laci Alat Anda.

  • Anda tidak membuang pakaian / peralatan Anda hanya karena mereka ada di semua tempat.

  • Anda bisa berpendapat bahwa mereka seharusnya tidak pernah berantakan. Tetapi mereka melakukannya.

Sama seperti kode. Terutama karena ia tumbuh seiring waktu.

Dan jika Anda tidak membersihkannya, Anda akan terus bertanya-tanya apa yang terjadi pada kaus yang Anda cintai atau kunci pas yang selalu Anda butuhkan tetapi tidak pernah dapat ditemukan!

Jagmag
sumber
4

Saya akan mengatakan "pemeliharaan kode" . Sangat penting untuk menggunakan kata-kata yang akrab dengan orang non-teknis dan masuk akal untuk pandangan dunia non-teknis. Jika orang non-teknis (pelanggan) terbiasa dengan pemeliharaan aplikasi, maka mudah untuk membuat paralel pemeliharaan kode dan pemeliharaan aplikasi. Bahkan jika mereka tidak sama, Anda dapat menjelaskan bahwa pelanggan akhir di sini adalah pengembang atau mereka yang memelihara sistem.

Amir Rezaei
sumber
1
Orang-orang non teknis terbiasa dengan pemeliharaan aplikasi? Saya bertanya kepada nenek saya: dia bukan dan dia adalah orang yang paling tidak teknis yang saya temukan. Selain itu: Karena orang yang tidak teknis tidak tahu perbedaan antara kode dan aplikasi ("Jika kode adalah aplikasi, aplikasi adalah kode") analogi Anda tidak akan berfungsi.
Martin
2
di tempat saya pernah bekerja, tipe pemasaran dan projman telah memahami "pemeliharaan" berarti "perbaikan bug setelah rilis", dan akan menjadi tidak jujur ​​untuk mengklaim bahwa refactoring memperbaiki bug.
Bagi saya orang non-teknis adalah pelanggan. Jika pelanggan tahu apa pemeliharaan aplikasi maka dia juga harus memahami pemeliharaan kode.
Amir Rezaei
"Pemeliharaan kode" terdengar seperti kode Anda mengalami keausan atau digunakan. Mobil perlu dirawat, karena penggunaan normal menekankan komponennya, menghabiskan cairan, dll. Aplikasi tidak seperti itu - kode yang duduk di hard drive tidak "menua" atau "rusak" sendiri.
Dan Ray
Saya akan memberi Anda beberapa contoh tentang pemeliharaan: Masalah kinerja. Komponen Anda, seluruh sistem atau aplikasi ditulis dalam VB dan Microsoft berhenti mendukungnya. OS tidak mendukung teknologi yang menjadi dasar kode Anda. Masalah keamanan. Pemeliharaan masalah-masalah ini tidak menambah fungsionalitas baru yang mungkin diperhatikan oleh pengguna akhir, namun sangat penting untuk menjaga "aplikasi" tetap hidup.
Amir Rezaei
4

Katakanlah Anda adalah mekanik yang berspesialisasi dalam menyesuaikan mobil, bahkan membuatnya dari awal jika pelanggan membutuhkannya. Ada pelanggan ini yang sering kembali ke toko Anda untuk selalu menaruh barang mengkilap baru di limusinnya yang berukuran super.

Begitu dia datang untuk memiliki sistem suara yang bagus diinstal. Anda rajin melakukan tugas melewati kabel dan menghubungkan semuanya dengan benar. Dia keluar sehari kemudian, dia bahagia dan membayar mahal, seperti biasa.

Bulan berikutnya dia kembali tetapi kali ini dia ingin home theater yang penuh sesak dipasang. Sekali lagi, Anda mengambil limusin. Menjadi seorang profesional Anda meninjau kembali sistem suara dan membuatnya lebih mudah untuk dirawat dengan memasang sistem tabung untuk menjalankan kabel di sekitar mobil. Dengan cara ini kabel terlindungi dan lebih mudah ditarik dan harus Anda tambahkan lebih banyak juga akan mudah dilakukan. Jadi Anda merobek kabel lama, memasang tabung dan melewatkan sistem suara dan kabel tambahan untuk bioskop, tutup semuanya dan Anda selesai.

Menyadari bahwa pelanggan tidak meminta Anda untuk mengganti sound system lama, Anda mencoret sebagian biaya penggantian dan tabung. Namun Anda masih menghasilkan uang dari kesepakatan, Hanya saja tidak sebanyak yang Anda miliki, Anda baru saja melempar sistem seperti yang Anda lakukan pertama kali.

Satu bulan kemudian dia kembali, kali ini dia menginginkan sistem pencahayaan dan dia ingin speaker baru merusak yang lama di awal minggu.

Karena Anda menjaga semuanya bagus dan rapi, Anda dapat dengan cepat menjalankan kabel pencahayaan baru melalui tabung Anda, menginstal sistem dan mengganti speaker. Namun kali ini Anda melakukan jauh lebih cepat, anjak piutang terbayar dengan membuat Anda tetap di atas permainan Anda.

Pesaing Anda yang menertawakan Anda karena merobek kabel yang sangat bagus dan memasang semua pipa tambahan ini masih berjuang untuk membuat pelanggannya puas. Tentu saja dia sudah melakukan lebih cepat daripada Anda sebagian besar kali, tetapi seiring berjalannya waktu pelanggannya mengeluh bahwa ada semakin banyak penundaan dan kualitas pekerjaan secara keseluruhan merendahkan.

Melihat ini, Anda menyadari bahwa tujuan Anda untuk tidak hanya bertahan dalam bisnis tetapi untuk menjadi yang terbaik adalah menyeimbangkan apa yang Anda lakukan untuk memenuhi permintaan pelanggan dan apa yang Anda lakukan untuk membuat hidup Anda lebih mudah di jalan. Sangat jarang seorang pelanggan akan membayar keduanya sehingga Anda harus mengelola dengan cermat. Anda bertaruh bahwa dengan secara proaktif melakukan sesuatu dengan benar bahkan dengan biaya melakukan dua kali Anda akan menjaga biaya pemeliharaan pada persentase stabil yang stabil dari produktivitas Anda.

Perangkat lunaknya sama, kecuali programmer dapat bermain dengan lakban digital untuk SANGAT lama sebelum efeknya benar-benar dirasakan oleh pelanggan dan manajer. Sayangnya pada saat itu biaya melakukan kembali hal-hal yang benar tumbuh secara eksponensial sehubungan dengan berapa banyak lakban hadir dan usia rata-rata lakban tersebut.

Inilah sebabnya mengapa penting bagi kami untuk terus memfaktorkan ulang sistem. Sangat sering pengalaman akan menunjukkan kepada kita cara baru yang lebih efisien untuk melakukan hal yang sama atau kita dapat menggabungkan fungsi serupa dan mengeksploitasi redudansi alih-alih hanya menyalin melewatinya. Inilah cara kami menjaga sistem tetap ramping dan berarti. Waktu akan menunjukkan bahwa terus-menerus memfaktorkan ulang sistem untuk memenuhi permintaan akan menjaga produktivitas konstan dengan mengendalikan jumlah yang ditempatkan dalam pemeliharaan.

Menempatkan lakban sebentar akan meningkatkan produktivitas dengan biaya membawa sistem yang kurang optimal. Hutang teknis timbul setiap kali produktivitas langsung lebih disukai sehingga merugikan aspek-aspek lain dari suatu sistem. Analogi utang itu baik karena seperti halnya bunga atas modal yang dipinjam menggerogoti keuntungan waktu yang dipinjam membuat hal-hal dengan cepat menimbulkan pemeliharaan yang lebih tinggi dan meningkatkan kerapuhan sistem memaksa tim untuk menghabiskan sumber daya tambahan dalam mempertahankan daripada menciptakan. Sama seperti kerabat keuangannya, jika pinjaman terus berlanjut, sebagian besar sumber daya dihabiskan untuk pembayaran bunga dan hanya sedikit perbaikan. Utang teknis akan menggerogoti sumber daya teknis ke titik di mana sebagian besar sumber daya dihabiskan hanya menjaga sistem berjalan grinding untuk menghentikan semua peningkatan lainnya yang mungkin.

Jadi pada akhirnya pertanyaannya adalah bukan seharusnya kita atau tidak seharusnya kita lakukan tetapi apakah etis membiarkan manajer dan pelanggan percaya bahwa mereka dapat mengandalkan angka produktivitas yang secara artifisial menggembung dengan penggunaan selotip digital. Beberapa orang akan berpikir itu adalah keputusan bisnis tetapi terus terang ini hanya karena manajer tidak memahaminya. Pada akhirnya, seseorang harus membayar hutang baik melalui anjak piutang yang berat atau dengan bermigrasi ke sistem baru. Pada akhirnya bagi kami, pemrogram, untuk menjaga sistem tetap terpelihara, Anda tidak perlu meminta faktor karena itu adalah bagian yang melekat dalam pekerjaan, gagal memahami ini gagal memahami apa itu rekayasa perangkat lunak. Ini mengatakan, saya menyadari ada sistem di luar sana yang telah mengeluarkan hutang penting dan melunasi hutang ini akan membutuhkan keputusan dari para pembayar. Pekerjaan Anda adalah situasi seperti itu untuk setidaknya melakukan bagian Anda untuk berhenti meminjam. Hutang ini dikeluarkanOLEH AS, mungkin karena kami tidak tahu yang lebih baik, karena kami ditekan untuk melakukannya, tetap saja, kami mengambil hutang ini dan sangat sering orang-orang yang kami serahkan hutang itu tidak memahaminya, sehingga tidak bisa mengelolanya dengan baik.

Ini perangkat lunak Anda, semuanya sudah selesai, semoga Anda menyukainya .... Ngomong-ngomong, saya maksimalkan kartu kredit Anda melakukannya, semoga Anda tidak keberatan ... cya

Newtopian
sumber
3

Tujuan re-factoring adalah menyederhanakan desain dan menghilangkan ketidakefisienan. Ini membuatnya lebih mudah untuk memperbaiki bug dan menambahkan fitur baru di masa depan.

Debugging dua kali lebih sulit daripada menulis kode di tempat pertama. Karena itu, jika Anda menulis kode sepintar mungkin, Anda, menurut definisi, tidak cukup pintar untuk debug itu.

Jika Anda terus menambahkan fitur baru ke kode, re-factoring akan dengan cepat membayar sendiri. Ini akan terlihat dalam tingkat kesalahan yang lebih rendah, debugging lebih cepat dan perbaikan lebih cepat.

cmcginty
sumber
Tapi clever == 0begitu 2 * clever == 0...
Thomas Eding
3

Perangkat lunak menulis sangat mirip dengan menulis buku non-fiksi besar, atau ensiklopedia.

Draf pertama selalu menyebalkan. Itu selalu dapat ditingkatkan dengan mengatur ulang, menghapus bagian yang tidak perlu ada di sana, dan memastikan gaya yang konsisten di seluruh.

Kapan pun Anda harus merevisi, hal paling sederhana untuk dilakukan adalah menambahkan bagian baru, mengubah beberapa kata, dan sebagainya. Tetapi ketika revisi menumpuk, buku itu mulai kehilangan organisasinya. Jadi Anda harus membuat langkah reorganisasi lebih lanjut. Jika tidak, buku itu menjadi serakan yang tidak masuk akal.

Kristopher Johnson
sumber
3

Ambil komputer desktop Anda misalnya. Anda memiliki menara, monitor, keyboard, mouse, printer, pemindai, dan speaker. Pada akhirnya yang Anda inginkan adalah meja yang terorganisir dengan baik. Jadi Anda cukup mencolokkan semuanya, dan beberapa menit kemudian, lihatlah, semuanya diatur seperti yang Anda inginkan. Yah ... hampir seperti yang Anda inginkan.

Sehari kemudian ketika Anda mengubah keseimbangan pada speaker Anda, Anda menyadari bahwa Anda secara tidak sengaja meletakkan speaker kiri dan kanan Anda di area yang salah, sehingga Anda ingin menukar posisi mereka. Tapi oh tidak! Ada rimba tali kusut; ketika Anda melanjutkan untuk memindahkan speaker, kabel mouse Anda ketagihan, dan sekarang mouse Anda diseret bersama dengan speaker. Selain itu, keyboard Anda sekarang tidak memiliki kelonggaran - Anda dulu dapat memindahkannya dari meja ke pangkuan Anda.

Baiklah, Anda bisa mencabut mouse dan keyboard dan memasangnya kembali sehingga semuanya sudah diperbaiki. Tetapi ini tidak akan membantu dengan reorganisasi masa depan dan penambahan masa depan. Juga menenun kabel mouse dan keyboard Anda melalui hutan adalah hal yang merepotkan.

Solusi yang lebih baik adalah dengan memasang kembali semuanya untuk memasangnya kembali dengan cara yang rapi dan bersih di mana setiap kabel tidak mengganggu kabel lainnya. Sekarang perubahan di masa depan mudah dan terus menjadi mudah. Anda berinvestasi sedikit di depan untuk keuntungan besar nanti.

Poin kuncinya adalah bahwa solusi asli sebagian besar BEKERJA. Itulah hal tentang refactoring: ini bekerja untuk memulainya, tetapi Anda perlu mengubah bagaimana hal-hal yang sudah ada untuk dengan mudah membuat perubahan di masa depan (menggerakkan speaker).

Thomas Eding
sumber
2

Ini seperti membersihkan rumah setelah pesta liar dan gila dari malam sebelumnya.

Katakanlah ruang tamu benar-benar hancur. Rumah itu masih rumah, ruang tamu masih ruang tamu. Ini bekerja tetapi tidak seperti yang seharusnya. Setelah menatap kekacauan Anda menyadari bahwa itu perlu dibersihkan.

Jadi, Anda mulai mengantongi sampah. Terlihat lebih baik. Jadi, Anda melihat-lihat ruangan dan memutuskan untuk meluruskan perabotan. Anda meletakkan satu bagian kembali, lalu yang berikutnya dan yang berikutnya. Wow, ruangannya terlihat sangat bagus. Kamu bangga.

Kakakmu masuk dan mengatakan ruangan itu seperti sampah, kamu harus memperbaiki rak buku dan mengosongkan karpet. Dia benar. Kamarnya terlihat sangat, sangat bagus.

Anda melihat sekeliling dan melihat bahwa nuansa jendela akan terlihat jauh lebih baik jika semuanya pada ketinggian yang sama. Selesai. Wow, kamarnya luar biasa.

Perlakukan kode Anda dengan cara yang sama.

Michael Riley - AKA Gunny
sumber
1
Saya suka, tapi saya akan mengubahnya untuk membersihkan dapur. Tidak memasak untuk sementara waktu, tetapi keadaan akan lebih baik setelahnya. PHB mungkin mengalami kesulitan terkait dengan mengadakan pesta di waktu perusahaan :)
Jaap
Analogi yang layak, tetapi ada satu kelemahan yang harus diwaspadai oleh pembaca: Jika Anda tidak membersihkan rumah Anda, maka rumah Anda benar-benar menjadi kurang bisa digunakan seiring waktu. Padahal dengan sebuah program, ini tidak terjadi.
Thomas Eding
1

Mudah!

Ambillah dengan sebuah contoh ... setiap orang dalam hidup mereka menulis surat kepada orang yang saya kasihi. Itu pasti seseorang yang tersayang karena dalam surat-surat itu kita biasanya memperhatikan komposisi juga.

Jadi, Anda memiliki teks Anda, ... artinya akan melalui kedua cara, tetapi Anda ingin semuanya terdengar bagus! Baik?

Refactoring, hal yang sama ... informasi yang sama, lebih atau kurang, tetapi komposisinya lebih baik. Dan itu mungkin akan menghasilkan ulasan yang lebih baik oleh pembaca.

Contoh lain - menulis artikel untuk majalah. Dua penulis, keduanya tahu "barang-barang mereka", satu-satunya perbedaan adalah satu tahu "bagaimana menulis" dan yang lainnya menulis seperti ia belajar menulis dari jawaban seperti ini.

Artikel siapa yang akan Anda ingat?

Benteng
sumber
1

Semua analogi dengan hal-hal di dunia fisik - seperti membangun teater - adalah, IMO, mengerikan.

Anda perlu menjelaskan bahwa kode refactoring seperti ... kode refactoring. Perangkat lunak dapat ditempa dengan cara yang bukan analog fisik. Ketika segala sesuatunya menjadi semakin kompleks, kita harus reaktor (atau mengulang, seperti yang Anda inginkan) bagian basis kode yang besar atau kecil sehingga kita dapat terus meningkatkan kompleksitas tanpa menjadi gila.

Mengapa kami melakukan refactor? Karena kode yang tidak pernah di refactored biayanya lebih tinggi per menit untuk dipertahankan dan diubah, dan akhirnya menjadi lebih bermasalah.

Apa yang sangat menarik tentang refactoring adalah bahwa kita mengulang basis kode tetapi, setidaknya pada awalnya, fungsionalitasnya tetap sama.

Yar
sumber
/ Semua analogi /? Saya sangat tidak setuju. Anda hanya perlu lebih kreatif. Juga tidak menjawab pertanyaan OP.
Thomas Eding
@ Thomas terima kasih atas komentar Anda. Saya tidak setuju pada poin kedua: Saya sebenarnya menjawab pertanyaan itu. Namun, saya akan melakukan pengeditan sekarang hanya untuk Anda.
Dan Rosenstark
0

Re-factoring sama dengan membersihkan sesuatu dan memberikan barang tempat baru untuk 'menginap'

Mudah sederhana dan sesuatu yang bisa memakan banyak waktu. Kadang-kadang saya bahkan menambahkan bahwa orang X meninggalkan banyak hal dan saya harus membersihkannya.

Barfieldmv
sumber
0

Saya memikirkan contoh lain, yang tampaknya tidak ada yang disebutkan di sini: refactoring hampir sama persis dengan menata ulang persamaan dalam matematika (meskipun itu mungkin berada di luar ruang lingkup 'orang non-teknis, saya kira).

Saat Anda menyusun ulang persamaan, Anda hanya 'memindahkan barang' agar lebih mudah dibaca dan lebih dapat digunakan, tanpa mengubah artinya .

Benjol
sumber
1
jadi jika saya PHB atau pelanggan (yang akan membayar untuk upaya refactoring ini), mengapa saya harus peduli? Kode berfungsi (dari sudut pandang saya)
Dan Pichelman
0

Beri mereka persamaan matematika sederhana. Sebagai contoh:

Mana yang lebih sederhana?

y = x + x

atau

y = 2x

Refactoring adalah konsep serupa kecuali alih-alih persamaan matematika sederhana, Anda memasukkan algoritma. Gagasan utamanya adalah Anda dapat bertukar antara dua cara dalam melakukan sesuatu karena keduanya akan menghasilkan hasil yang sama.

Refactoring paling sederhana yang bisa dilakukan adalah mengubah nama.

doX() { ... }
{
   doX()
}

Sekarang karena kita tidak benar-benar ingin hal-hal disebut doX karena kita tidak benar-benar tahu apa artinya, kita mengubah nama menjadi sesuatu yang lebih jelas dan menggantikan di mana saja kita telah menggunakannya.

doBusinessTransaction() { ... }
{
   doBusinessTransaction()
}

Ini akan menghemat uang Anda nanti ketika ada masalah atau peningkatan karena mengurangi waktu bagi orang untuk memahami dan memperbaiki aplikasi Anda. Untuk lebih menghemat uang, ada alat gratis yang berfungsi untuk Anda secara otomatis tergantung pada bahasa apa yang Anda gunakan. Alat-alat ini juga dilisensikan sehingga tidak membatasi dan akan mengharuskan Anda untuk melakukan sesuatu yang khusus selain mengakuinya jika Anda menggunakannya secara langsung.

Archimedes Trajano
sumber
1
Saya sangat menyukai analogi ini karena dapat dimengerti oleh semua orang dan sangat mirip dengan kode itu sendiri.
Venkat D.
Terima kasih, saya bahkan mempostingnya di blog saya juga trajano.net/2013/05/refactoring-explained
Archimedes Trajano
0

Sebuah gambar mengatakan seribu kata. Misalnya, refactoring memiliki dua kasus penggunaan:

  • Ketika hal-hal tidak dilakukan dengan benar pertama kali:

refactoring ketika hal-hal tidak dilakukan dengan benar pada kali pertama

  • Ketika hal-hal membosankan:

refactoring ketika segalanya membosankan

Referensi

Paul Sweatte
sumber
XKCD adalah sepadan dengan waktu mengabaikan fakta bahwa membuat tugas rutin lebih efisien mungkin berarti Anda akhirnya melakukan lebih banyak daripada yang seharusnya Anda lakukan. Jadi, Anda perlu memperhitungkan nilai yang Anda dapatkan dari kinerja ekstra tugas tersebut.
bdsl
@bdsl Itu sudah dibahas di tempat
kerja.se
0

Pertimbangkan jawaban yang diberikan dalam Refactoring , dan jangan menjelaskannya kepada orang yang tidak teknis. Refactoring adalah kegiatan teknis yang tidak perlu mereka ketahui:

Tentu saja, banyak orang mengatakan mereka didorong oleh kualitas tetapi lebih didorong oleh jadwal. Dalam kasus ini saya memberikan saran yang lebih kontroversial: Jangan katakan!

Subversif? Saya kira tidak. Pengembang perangkat lunak adalah profesional. Tugas kami adalah membangun perangkat lunak yang efektif secepat mungkin. ... Seorang manajer yang digerakkan oleh jadwal ingin saya melakukan hal-hal dengan cara tercepat yang saya bisa; bagaimana saya melakukannya adalah bisnis saya. Cara tercepat adalah dengan refactor; oleh karena itu saya refactor.

(Refactoring, Martin Fowler, 2000, halaman 61)

Tentu saja ini tidak akan berhasil jika Anda akan menghabiskan satu bulan melakukan apa-apa selain refactoring, tapi saya pikir itu umumnya ide yang buruk, dan itu jauh lebih baik untuk hanya refactor sejauh yang diperlukan untuk membuat tugas Anda saat ini atau selanjutnya lebih mudah , atau untuk membersihkan kode yang baru saja Anda kerjakan.

bdsl
sumber