Perbedaan antara praktik terbaik dan akal sehat?

13

Ada banyak percakapan mengenai praktik terbaik 1 dalam pengembangan perangkat lunak. Saya telah melihat setidaknya tiga poin utama mendapatkan banyak diskusi tentang SE dan di tempat lain:

  • Apa yang memenuhi syarat sebagai praktik terbaik, dan mengapa?
  • Apakah praktik terbaik bahkan layak didiskusikan sejak awal, karena masuk akal untuk menyatakan bahwa tidak ada praktik yang merupakan praktik "terbaik"?
  • Kapan Anda harus melepaskan praktik terbaik - atau mungkin praktik terbaik - baik karena tampaknya tidak berlaku atau karena kendala eksternal (waktu, uang, dll.) Yang membuat pertukaran tidak praktis?

Sesuatu yang tampaknya muncul jauh lebih jarang, tetapi lebih dari tidak pernah, adalah gagasan tentang akal sehat dalam pengembangan perangkat lunak. Pengalaman baru-baru ini telah membawa gagasan ini ke depan pikiran saya lagi.

Kesan awal saya adalah bahwa ini adalah diskusi yang berbeda dari praktik terbaik, tetapi mungkin dengan beberapa penyerbukan silang.

Ketika saya memikirkan akal sehat secara umum, saya memikirkan seperangkat aturan yang telah Anda ambil atau pelajari yang memberi Anda dasar untuk alasan dan membuat keputusan. Mengikuti akal sehat adalah cara yang baik untuk menghindari Anda menembak seluruh kaki Anda. Tetapi di luar garis dasar yang cukup rendah, akal sehat memberi jalan pada kebutuhan untuk membuat keputusan yang berpendidikan, dan keputusan yang berpendidikan bahkan dapat mengesampingkan akal sehat ketika bukti tampaknya cukup meyakinkan. Saya mungkin bermain sedikit longgar dengan definisi di sini, tapi saya pikir itu cukup dekat untuk menjadi ujung tombak contoh saya.

Ketika saya memikirkan akal sehat dalam pengembangan perangkat lunak, saya memikirkan semua aturan kebersihan dasar untuk mencegah basis kode dengan cepat membusuk menjadi kekacauan yang tidak dapat dipahami. Sebagai contoh, hal-hal seperti: tidak menggunakan struktur global tunggal untuk mempertahankan dan berkomunikasi negara dalam program non-sepele; tidak menggunakan variabel / metode / nama kelas yang hanya omong kosong acak; hal-hal yang mungkin sangat mirip dengan apa yang kita sebut anti-pola. Di mana menerapkan praktik terbaik analog praktis untuk pola pembelajaran, menerapkan akal sehat dapat dilihat sebagai analog praktis anti-pola pembelajaran.

Dengan mengingat hal ini, saya ingin mengajukan beberapa pertanyaan yang melihat jawaban orang lain mungkin dapat membantu saya mencari jalan melalui hal ini.

Apakah orang lain percaya bahwa ada gagasan tentang akal sehat dalam pengembangan perangkat lunak? Akan tertarik mengetahui alasannya.

Jika demikian, apakah ini layak untuk dibahas? Apakah itu sesuatu yang harus kita dorong sebanyak yang kadang-kadang kita lakukan dengan praktik terbaik? Apakah ini sesuatu yang layak untuk didorong lebih keras?

Jika analogi dengan anti-pola tampak masuk akal, aturan umum adalah bahwa anti-pola hanya digunakan jika tidak ada cara lain, dan itupun hanya dalam keadaan yang sangat terbatas. Seberapa fleksibel seseorang dalam membiarkan basis kode menyimpang dari akal sehat? Tampaknya tidak masuk akal bahwa jawabannya adalah "tidak sama sekali," karena kadang-kadang kemanfaatan menuntut penyimpangan. Tapi, sepertinya argumen yang berbeda dari kapan menggunakan "praktik terbaik." Mungkin bukan; jika Anda tidak berpikir begitu, saya ingin tahu alasannya.

Ini jauh lebih terbuka dan mungkin layak untuk ditindaklanjuti sendiri, rekomendasi macam apa yang akan Anda tunjukkan yang tampaknya seperti masalah akal sehat?

Pikiran lain juga diterima.


1 Mungkin saya akan lebih baik memanggil mereka "pola domain yang sering berulang", tetapi nama "praktik terbaik" cukup umum sehingga semua orang tahu apa itu, bahkan jika mereka tidak setuju. Jika bagian "terbaik" mengganggumu, bayangkan saja aku mengganti "praktik terbaik" dengan sesuatu yang terdengar kurang otoritatif.

Ed Carrel
sumber
2
Memiliki akal sehat berarti Anda dapat menggunakannya untuk mencari tahu pro dan kontra dari beberapa solusi dan memilih yang terbaik untuk masalah tersebut. Seseorang yang pengalamannya terdiri dari membaca beberapa buku tentang pola desain dan praktik terbaik tidak mengerti di mana dan bagaimana menerapkannya.
Blrfl

Jawaban:

10

Praktik terbaik adalah praktik yang telah ditemukan bekerja dengan baik di bidang keadaan yang relatif luas. Masalahnya dengan mereka adalah bahwa A) ekspresi kadang-kadang disalahgunakan untuk pemasaran dan B) sebagai aturan tetap, mereka tidak cukup fleksibel; tidak ada seperangkat aturan baku yang harus diikuti tanpa memikirkan apakah mereka berlaku untuk situasi saat ini.

Praktik terbaik sangat baik ketika mereka datang dengan penjelasan mengapa mereka "terbaik" dan dalam keadaan apa mereka harus digunakan. Maka Anda dapat mempertimbangkan kapan tidak menggunakannya.

Masalah dengan "akal sehat" adalah bahwa itu terlalu fleksibel - itu dapat digunakan untuk membenarkan hampir semua hal, dan Anda tidak dapat benar-benar berdiskusi secara rasional ketika orang tidak setuju dan keduanya mengklaim posisi mereka adalah "akal sehat". Itu baik untuk memiliki tetapi miskin sebagai pedoman bagi tim untuk diikuti.

Michael Borgwardt
sumber
10

Saya pikir Anda memilikinya mundur.

Ketika mengajar programmer tentang dasar-dasar keamanan, saya selalu mengajar mereka untuk menggunakannya best practices, namun ketika berhadapan dengan pakar keamanan (atau lebih banyak programmer "berpengalaman keamanan") saya tidak akan pernah membahas best practices, bahkan saya sering akan melanggar mereka.

Definisi yang lebih baik adalah:

"Praktik Terbaik" adalah akal sehat dari para ahli, seperti yang seharusnya diterapkan oleh non-ahli.

Artinya, Anda tidak bisa mengklaim "akal sehat" sampai Anda memiliki keahlian yang cukup dalam bidang yang diberikan untuk memahami pengorbanan halus; dan ketika Anda melakukannya, Anda seharusnya tidak lagi membabi buta mengikuti "praktik terbaik" pemotong kue.

"Praktik terbaik" adalah pengganti sementara sampai Anda memiliki cukup pengalaman untuk menggunakan "akal sehat" Anda sendiri.

Keranjingan
sumber
3
Oh, dan jika Anda tidak terbiasa dengan praktik terbaik, Anda juga tidak memiliki akal sehat.
AviD
7

Praktik terbaik -> "pertama, Anda mempelajari aturannya". Pengalaman -> "lalu, Anda belajar kapan dan bagaimana cara memecahkannya".

Kesediaan untuk bereksperimen dengan alternatif-alternatif (dalam kode yang tidak kritis, tentu saja - lebih disukai proyek-proyek pribadi dan kejadian-kejadian buruk) dapat membantu membangun pengalaman yang Anda butuhkan.

Akal sehat tidak sama dengan pengalaman, tentu saja, dan Anda tidak selalu membutuhkan banyak pengalaman untuk melihat kelemahan dalam menerapkan teknik yang baik di tempat yang salah - tetapi sangat mudah untuk membangun rasionalisasi yang salah untuk penerapan yang berlebihan dan kurang menerapkan teknik, dan karena "akal sehat" di sini jelas bukan pengetahuan bawaan tentang pemrograman, akal itu jelas "umum" hanya dalam kelompok tertentu.

Sangat mudah untuk "memihak". Tidak mungkin untuk menghindari, pada kenyataannya - kadang-kadang satu sisi benar-benar benar, dan yang lain benar-benar salah, dan tidak masuk akal untuk berdebat tentang keseimbangan. Masalahnya di sini adalah bahwa neraka yang sebenarnya tidak terlalu membebani satu praktik terbaik untuk relevansi, tetapi ketika dua pendapat praktik terbaik yang saling bertentangan bertabrakan.

Berurusan dengan ini mungkin lebih banyak tentang keterampilan orang daripada tentang keterampilan teknis. Saya sangat buruk dalam hal itu :-(

Meskipun demikian, masih penting untuk belajar dari pengalaman orang lain serta Anda sendiri - yaitu untuk mencari tahu apa praktik terbaik, mengapa mereka digunakan, dan apa keuntungan (dan kerugiannya).

Steve314
sumber
6

Tampak bagi saya bahwa pertanyaan ini adalah tipuan semantik. Jika kita menggunakan definisi ini maka tidak ada pertanyaan:

Praktik Terbaik: cara yang terbukti di lapangan dalam memecahkan masalah dalam domain tertentu (mis. Praktik terbaik waktu nyata benar-benar asing bagi praktik terbaik basis data)

Common Sense: pengalaman profesional yang berfungsi untuk memperingatkan programmer dari jebakan yang harus dihindari

Pada akhirnya, Praktik Terbaik adalah pola desain meta untuk memecahkan kongruensi masalah tertentu dan dipilih berdasarkan pengalaman dunia nyata sementara Common Sense adalah panduan untuk pemecahan masalah berdasarkan pengamatan umum di berbagai set masalah.

Patrick Hughes
sumber
Ya ... itu semantik sesuatu atau lainnya. Tidak yakin dengan tipu daya. "Akal sehat" tidak selalu berarti apa yang dikatakannya. Ini telah memperoleh rasa tidak mengikuti-buku-akademik-aturan - aspek dari semua otak-dan-tidak-masuk akal-hal yang pada dasarnya mengacu pada pemikiran di luar lingkup buku aturan. Kadang-kadang, praktik terbaik tidak benar-benar dapat diterapkan - kenyataan terlalu rumit untuk set generalisasi terbatas hingga menjadi sempurna - jadi ada kalanya Anda harus menggunakan pengalaman Anda sendiri dan - ahem - "akal sehat".
Steve314
@ Patrick: Itu bukan maksud saya untuk menjadi rumit. Bagian dari pertanyaan saya tentang pertanyaan ini adalah untuk mengeksplorasi pemahaman yang saya miliki tentang dua konsep ini, terutama dari "akal sehat", hingga titik ini. Semua tipu daya yang kelihatannya mungkin hanya tanda bahwa intuisi saya tentang ide-ide ini sama sekali tidak sempurna.
Ed Carrel
5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)
Benjol
sumber
2
... * Pemasaran
keppla
4

Waktu yang menarik. Minggu lalu artikel ini diterbitkan membahas mengapa akal sehat belum tentu ideal dalam semua situasi.

Akal sehat disesuaikan dengan indah untuk menangani jenis kompleksitas yang muncul dalam situasi sehari-hari ... Dan karena berfungsi dengan sangat baik dalam situasi ini, kami cenderung memercayainya dalam semua situasi

(kata-kata saya dicetak tebal)

Pada dasarnya - manusia tidak pandai menggunakan akal sehat di bidang-bidang seperti ini di mana kita belum mengembangkan sistem yang mendarah daging, jadi kita harus SELALU menggunakan seperangkat standar yang terdokumentasi dan tidak bergantung pada akal sehat kita sendiri!

Rory Alsop
sumber
Bias kognitif ... lagi. Dan itulah mengapa Anda harus menjadi ahli yang diakui, sebelum Anda mengandalkan akal sehat Anda ...
AviD
2

Akal sehat tidak sesuai dengan belajar pola anti, juga tidak berbeda dari, atau berbeda dengan praktik terbaik.

Masalah pertama dengan akal sehat adalah namanya - itu mengarah pada kesimpulan bahwa itu masuk akal dan masuk akal. Seperti yang biasa digunakan, itu bisa menyerang pada kedua hal. Menggunakan contoh Anda:

anti-pola hanya digunakan jika tidak ada cara lain, dan itupun hanya dalam keadaan yang sangat terbatas

Ini adalah pemahaman saya bahwa ini bukan cara anti-pola muncul. Itu berasal dari pertambahan faktor budaya dan sosial; mengabaikan praktik terbaik dan standar selama periode substansial; mengabaikan biaya di masa depan untuk mencapai manfaat jangka pendek - misalnya untuk memenuhi tenggat waktu dengan menggunakan solusi jalan pintas yang merupakan mimpi buruk pemeliharaan; dll. Tidak ada tubuh yang secara sengaja mengadopsi pola anti - mereka tumbuh begitu saja.

Demikian pula, akal sehat terlalu sering digunakan untuk berarti "yang dilakukan secara umum", dan membenarkan kurangnya pemikiran, wawasan, dan kerja keras dalam menyelesaikan apa yang terlibat dalam memberikan solusi. Ini juga digunakan sebagai pembenaran untuk "itu cara saya melakukannya, jadi jelas itu masuk akal" - dan sebagai pertahanan terhadap ulasan dan kritik.

Sejauh menyangkut praktik terbaik @ dua paragraf pertama Michael adalah ringkasan yang sangat baik tentang apa praktik terbaik seharusnya - sumber daya untuk membantu semua orang untuk meningkatkan apa yang mereka lakukan. Ini juga memberikan transparansi keputusan (desain keputusan khususnya) dan kemampuan untuk belajar dari orang lain. Kelemahan dari praktik terbaik adalah ketika menghasilkan budaya daftar centang - "Saya menandai semua kotak, jadi apa yang saya lakukan harus baik-baik saja" - tanpa menerapkan pemikiran, perhatian, dan perhatian pada sifat dari penerapan daftar periksa.

Chris Walton
sumber
1

Ini adalah argumen lereng yang licin yang sering berubah menjadi perang agama.

Hampir semua praktik terbaik dapat dilawan dengan kasus yang valid untuk melakukan yang sebaliknya.

Beberapa praktik terbaik lebih "terbaik" daripada yang lain. Variabel keadaan global hampir selalu lebih baik dilakukan dengan cara yang berbeda dan GOTO biasanya adalah ide yang buruk, tetapi ketika Anda masuk ke pola / anti-pola atau data langsung / argumen data yang diabstraksikan, itu menjadi sedikit kurang jelas. Terlebih lagi ketika Anda mulai berbicara tentang metodologi dan praktik pengembangan.

Dalam beberapa situasi akal sehat dan praktik terbaik bahkan saling bertentangan.

Tidak ada badan yang mengatur praktik-praktik terbaik dan tidak ada kelompok tunggal bahkan jika itu ada dapat mendefinisikan setiap "terbaik" yang mungkin untuk setiap situasi yang memungkinkan. Banyak hal yang dilabeli sebagai praktik terbaik hanya pemasaran yang buruk mencoba menjual alat atau pelatihan individu yang tidak mendapat informasi.

Bahkan ketika seluruh tim Anda setuju bahwa ada sesuatu yang terbaik itu tidak selalu mungkin untuk menerapkannya seperti itu untuk berbagai faktor penghambat.

IMHO Anda harus menggunakan praktik terbaik sebagai panduan untuk apa yang harus dipertimbangkan lebih hati-hati dalam desain Anda. Anda mungkin memiliki alasan yang sah untuk menyimpang, tetapi Anda mungkin perlu memastikan bahwa semua orang di tim setuju sebelum Anda pergi dan membangun sesuatu yang aneh.

Beberapa argumen tentang praktik terbaik setelah titik itu cukup banyak bermuara untuk tidak membangun sesuatu bahwa pengembang berikutnya yang harus bekerja di atasnya akan membenci. Semua orang membenci kode yang bukan gaya mereka, dan semua orang menyalahkan semua orang yang pergi, jadi Anda akan menjelaskannya kepada dev berikutnya setelah mereka menggerutu tentang sesuatu, atau Anda tidak akan berada di sana dan dibicarakan dengan buruk terlepas dari bagaimana Anda mengkodekannya. Ini membuat kekhawatiran itu sebagian besar tidak relevan.

Tagihan
sumber
1

Akal sehat tidak selalu menghasilkan hasil terbaik. Namun, praktik terbaik telah dicoba. Ini menjadikan praktik terbaik sebagai sumber informasi yang lebih andal.

DeadMG
sumber
0

Praktik terbaik bukan yang terbaik, dan akal sehat tidak umum. ;-)

Baik untuk praktik terbaik atau akal sehat, saya suka menganggapnya sebagai pola; Ingat definisi suatu pola: Suatu solusi dalam konteks yang menyelesaikan kekuatan ke dalam konteks yang dihasilkan .

Untuk apa pun yang ingin Anda lakukan, Anda harus tahu konteks yang berlaku, kekuatan yang diputuskan, dan konteks yang dihasilkannya. Kemudian, tentukan tim Anda pola apa yang akan Anda gunakan secara umum. (Ini bisa formal atau informal, tetapi bagaimanapun juga, ini jauh lebih besar dari sekadar buku Geng Empat. Ini termasuk idiom bahasa dan perpustakaan pembantu setempat, bukan hanya pola yang diterbitkan.)

Jika Anda merasa, berdasarkan pengalaman Anda, bahwa dalam keadaan tertentu, akan lebih baik untuk tidak menggunakan pola yang diberikan, tetapi untuk melakukan sesuatu yang lain, beri tahu orang lain. Mungkin konteks atau kekuatannya berbeda di sini (atau mungkin konteks yang dihasilkan tidak diinginkan.) Saya tidak peduli apakah itu rapat, komentar kode atau apa, tetapi jika Anda menjelaskan bahwa Anda telah merusak pola dengan sengaja , Anda akan berada jauh di depan.

Sean McMillan
sumber
-1

Praktik terbaik adalah apa yang mereka ajarkan kepada Anda di sekolah, akal sehat adalah apa yang diinginkan bos dari Anda. Yang pertama menciptakan perangkat lunak yang memenuhi standar keanggunan, gaya dan sejenisnya. Yang terakhir membayar tagihan / menghasilkan uang sehingga Anda dibayar setiap minggu.

Salah satunya adalah seni, bisnis lain, terlalu banyak dari kita melupakannya.

mattnz
sumber
Bos tidak peduli tentang bagaimana Anda merasionalisasi cara bertindak Anda, dia peduli tidak mengalami masalah. Solusi yang Anda sebut 'dicapai dengan akal sehat' sama baiknya dengan solusi 'dicapai dengan mengikuti praktik-praktik terbaik'
keppla
Biarkan saya ulangi jawaban saya. Praktik terbaik sering digunakan sebagai alasan untuk over engineering, sejauh mereka identik di banyak rumah perangkat lunak. Common Sense menahan diri dari over engineering untuk kepentingan penyelesaian proyek yang sukses (biasanya komersial).
mattnz
-1

Untuk sedikit melebih-lebihkan: Perbedaannya adalah Common Sense adalah Prejudice, Best Practice adalah (seharusnya) Sains

Dalam pengalaman saya, 'Common Sense' digunakan ketika seseorang tidak ingin memberikan bukti atau setidaknya argumen untuk cara melakukan sesuatu. Itu tidak berarti jalannya selalu salah, tetapi itu tidak berarti itu baik juga.

Di antara hal-hal yang saya temui, yang dirasionalisasi sebagai akal sehat adalah permata ini.

  • Metode HTTP sebagian besar tidak relevan, gunakan DAPATKAN ketika Anda mengirimkan sedikit data, gunakan POST saat mentransmisikan lebih banyak (yaitu, banyak untuk URL)
  • fungsi tidak boleh terlalu kecil, karena sulit untuk mengingat apa yang mereka lakukan. satu fungsi besar lebih disukai daripada 5 yang lebih kecil, karena Anda dapat membacanya sebagai satu
  • database dan server web HARUS berjalan di mesin yang sama, atau layanan web akan lambat. Satu-satunya cara untuk menskalakan adalah mempercepat kode dengan peretasan dan dengan abstraksi yang berkelanjutan, sehingga kekuatan satu mesin mencukupi.

Yang lucu tentang 'Common Sense' adalah, bahwa itu tidak biasa: pilih dua tim dan biarkan mereka menyatakan apa yang mereka sebut 'akal sehat', dan nikmati perang agama.

Di sisi lain, sebagai 'Praktik Terbaik' saya akan mempertimbangkan cara melakukan sesuatu, yang memiliki sedikit lebih banyak 'peer review'. Untuk mempertimbangkan sesuatu sebagai 'praktik terbaik', saya berharap itu dirumuskan dengan cukup jelas sehingga dapat disajikan sebagai konsep ('pemrograman terstruktur' adalah praktik terbaik, 'foto membingungkan, hindari mereka' adalah akal sehat), dan diterapkan lebih dari sekali, dengan hasil yang baik.

keppla
sumber
Apakah Anda mengatakan bahwa "Praktik Terbaik" selalu tepat dalam setiap situasi, dan di mana praktik terbaik secara sadar tidak dilakukan itu buruk ("tidak baik").
mattnz
1
Tidak, saya katakan "Praktik Terbaik" memiliki peluang lebih besar untuk tidak menjadi sepenuhnya tidak masuk akal, karena itu bertahan "peer review", bertentangan dengan akal sehat, yang hanya harus masuk akal bagi satu orang. Saya tidak menentang menerapkan sesuatu yang dianggap "akal sehat", saya menentang membenarkan apa pun sebagai akal sehat.
keppla