Haruskah pengkodean praktik terbaik selalu digunakan [ditutup]

20

Saat mengkode perangkat lunak, haruskah arsitektur selalu menjadi praktik terbaik atau praktik praktis terkait dengan aplikasi yang sedang dibangun?

Jika saya membuat aplikasi web dua halaman yang mungkin hidup 5 tahun dan memiliki 2 perangkat tambahan selama 5 tahun, haruskah saya membuat kode dalam injeksi ketergantungan, pola desain, model-view-controller dengan model tampilan, dll.

Kyle Johnson
sumber
53
Over-engineering bukanlah praktik terbaik.
5gon12eder
18
Tidak ada 'praktik terbaik' tunggal yang berlaku untuk semua perangkat lunak dalam semua situasi. Anda harus mengevaluasi apa yang memberi Anda bayaran terbaik untuk biaya yang berlaku untuk situasi spesifik Anda.
whatsisname
10
Jadilah pemrogram yang pragmatis. Ini akan membawa Anda ke jalan perlawanan paling sedikit.
Jon Raynor
3
Bisakah Anda memberikan definisi untuk praktik terbaik? Banyak jawaban yang kelihatannya membingungkan dengan semacam interpretasi literal yang telah mereka buat.
JeffO
5
Ini praktik terbaik untuk selalu menggunakan praktik terbaik.
Angsa

Jawaban:

40

Haruskah pengkodean praktik terbaik selalu digunakan

Selalu? Tidak, itu konyol.

Praktik terbaik adalah pedoman. Bagi kebanyakan orang, untuk sebagian besar situasi, jika diimplementasikan dengan kemahiran, mereka akan menghasilkan hasil terbaik. Di situlah Anda mulai ketika mempertimbangkan solusi. Tetapi akan ada tempat-tempat di mana praktik terbaik dapat dan harus diabaikan, karena ada solusi yang lebih baik.

Masalahnya adalah bahwa manusia tidak dapat melihat ke masa depan. Dan pemula (dan banyak yang bukan pemula) pasti berpikir bahwa mereka berada dalam skenario khusus di mana aturan tidak berlaku untuk mereka. Jika ragu, gunakan praktik terbaik. Perdebatan dan pengalaman bertahun-tahun di banyak insinyur yang lebih pintar daripada Anda atau saya telah menemukan mereka menghasilkan hasil yang baik secara konsisten. Tetapi tidak ada (atau hampir tidak ada) dari mereka yang tahu masalah khusus Anda sebaik Anda. Kadang-kadang Anda akan mengalami kasus luar biasa di mana aturan dapat ditekuk.

Telastyn
sumber
12
... Tapi, definisikan "praktik terbaik."
svidgen
4
Saya pikir itu lebih umum bagi pemula untuk ingin melakukan hal-hal "benar," dan secara membabi buta mengikuti beberapa praktik terbaik (misalnya pola perangkat lunak) tanpa benar-benar memahami mengapa mereka ada atau bagaimana menggunakannya. Mungkin itu adalah tahap kedua pencerahan, tahap pertama adalah "Saya tidak tahu apa yang saya lakukan."
Robert Harvey
19
@RobertHarvey - pertama Anda belajar apa yang harus dilakukan, kemudian Anda belajar mengapa Anda melakukannya, kemudian Anda belajar mengapa Anda tidak melakukannya
HorusKol
1
@HorusKol yang mungkin menjadi salah satu hal paling mendalam yang pernah saya baca.
Jared Smith
+1 untuk "manusia tidak dapat melihat ke masa depan"
Tulains Córdova
29

Iya nih. Itu terbukti dengan sendirinya. Mengapa Anda tidak melakukan yang terbaik?

Tapi bukan itu masalahnya. Bagian yang sulit adalah mencari tahu apa yang merupakan praktik terbaik, karena untuk menjawab bahwa Anda perlu tahu persis persyaratan apa yang Anda miliki dan bagaimana proyek ini cenderung berkembang selama bertahun-tahun, dan itu sangat sulit.

Namun satu aturan praktis yang baik: BUKAN praktik terbaik, tidak pernah, untuk mengambil nama-nama sekelompok pola desain dan hanya menyatukannya tanpa berpikir.

Selain itu, pertanyaan Anda benar-benar tidak dapat dijawab. Mencari tahu persis apa "praktik terbaik" untuk situasi tertentu adalah apa yang dimaksud dengan insinyur perangkat lunak. Anda harus mempersempitnya untuk mendapatkan jawaban yang lebih baik.

sara
sumber
6
Jawaban Anda lolos dari downvote dari saya hanya karena paragraf ketiga Anda.
Robert Harvey
4
Saya akan melemparkan upvote untuk yang ketiga, tetapi hanya karena itu adalah praktik terbaik untuk melakukannya. <Grin & Duck>
Blrfl
5
Suara positif saya berlaku untuk keempat paragraf dengan setara.
Quuxplusone
4
"praktik terbaik" adalah ungkapan idiomatis dalam diskusi dalam bahasa Inggris tentang rekayasa perangkat lunak, dan itu berarti sesuatu yang berbeda dari apa yang dijawab oleh jawaban ini, yang berarti "solusi terbaik untuk masalah yang diberikan". Jadi misalnya, "gunakan kontrol sumber" digambarkan sebagai "praktik terbaik" terlepas dari apakah ada atau tidak ada masalah yang kontrol sumbernya bukan bagian dari solusi, yaitu terlepas dari apakah itu benar-benar selalu terbaik atau tidak . Ini mungkin penyalahgunaan bahasa yang mengerikan, tapi itulah yang kami lakukan.
Steve Jessop
1
@SteveJessop Saya tahu ini. Namun, ada banyak "praktik terbaik", dan kadang-kadang konflik. Kuncinya adalah konteks dan ruang lingkup. Selalu ada sesuatu yang membuat situasi Anda istimewa. Hanya dengan menyadari dengan tepat apa persyaratan Anda dan apa kendala Anda, Anda dapat mengidentifikasi "praktik terbaik" mana yang paling sesuai dengan situasi Anda. Contoh yang sangat dibuat-buat: Menggunakan kontrol sumber adalah praktik terbaik KECUALI seseorang mengancam akan meledakkan bumi jika Anda menggunakan kontrol sumber. Itu akan menjadi konteks tambahan yang mengubah apa yang dianggap praktik terbaik.
sara
11

Praktik terbaik adalah yang paling efektif memenuhi persyaratan fungsional dan non-fungsional perangkat lunak Anda untuk fitur, rawatan, kinerja, dll. Jika praktik itu terjadi untuk menyelaraskan dengan beberapa "standar industri," itu luar biasa. Tetapi jika tidak, pragmatisme menang.

Di mana saya saat ini bekerja, kami sedang membangun UI web baru untuk produk kami dari awal. Itu tidak akan tenang dengan cara apa pun; menggunakan POST secara eksklusif. Ini bukan multi-tier, tidak menggunakan layanan microser, dan tidak menggunakan database NoSQL. Tidak memiliki arsitektur seperti Enterprise Java.

Dengan kata lain, itu sama sekali tidak keren.

Tapi itu menggabungkan kerangka HTML5 canggih yang menghadirkan penyatuan data seperti Angular, penskalaan otomatis ke berbagai jenis perangkat seperti ponsel dan desktop, integrasi dengan Kendo UI Telerik untuk melakukan semua pengangkatan berat, dan sepenuhnya dienkripsi dan diamankan saluran data.

Terbaik dari semua, itu akan dilakukan dalam 30 hari, suatu prestasi yang akan membawa pasukan pengembang Java dalam arsitektur Enterprise setahun untuk mencapainya. Kode ini adalah ES6 / Typescript; itu beberapa kode terbersih yang pernah saya lihat.

Robert Harvey
sumber
Saya pikir jawaban Anda menggambarkan hal yang saya coba sampaikan pada saya ... Setidaknya saya kira begitu. +1 ... meskipun saya masih VTC pertanyaan ini karena kurang detail!
svidgen
Kedengarannya seperti proyek saya! Sangat lelah dengan mode yang muncul dalam pengembangan.
Matt Lacey
RE Telerik: kata peringatan pada beberapa widget mereka, DateTimePicker mengerikan ketika digunakan bersama dengan Angular jika Anda ingin memodifikasi tanggal dari sisi Angular sama sekali.
Dan Pantry
@DanPantry: Saya akan mengingatnya.
Robert Harvey
3

Tidak ada . Praktik terbaik adalah hal-hal yang umumnya dianggap sebagai hal terbaik untuk dilakukan 99% dari waktu, tetapi itu tidak berarti mereka selalu berlaku untuk setiap situasi.

Sebagai pengembang, tugas Anda adalah untuk mengetahui dan menggunakan praktik-praktik terbaik itu, tetapi juga tahu kapan aman untuk menyingkirkannya.

Ini tidak seharusnya promosi diri, tetapi saya baru-baru ini menulis posting blog yang terkait dengan pekerjaan saya di platform Salesforce.com yang merinci salah satu dari kesempatan ini . Salah satu aturan emas yang ada adalah "Jangan pernah melakukan kueri di dalam satu lingkaran", tetapi baru-baru ini, untuk pertama kalinya dalam 7 tahun bekerja di platform, saya punya alasan yang sah untuk tidak mematuhi aturan itu.

Intinya adalah bahwa platform memiliki batasan pada jumlah kueri yang dapat Anda lakukan dalam konteks eksekusi yang diberikan, tetapi dalam kasus ini saya harus meminta di dalam lingkaran untuk menghindari kehabisan ruang tumpukan dan tahu saya akan berada dalam kueri membatasi.

Jadi itu jarang terjadi, tetapi ada kalanya praktik terbaik tidak relevan dengan skenario, jadi jika mereka tidak cocok, jangan paksa mereka.

Matt Lacey
sumber
2

Saya berasumsi dengan "praktik terbaik" yang Anda maksudkan beberapa daftar aturan yang seseorang tulis dalam sebuah buku. Tentu saja jika Anda maksud kalimat secara harfiah, maka tentu saja Anda harus selalu menulis kode terbaik yang Anda bisa.

Perlukah saya tunjukkan bahwa tidak ada satu pun "praktik terbaik" yang diterima secara universal? Untuk aturan apa pun yang dipromosikan oleh satu pakar, Anda hampir selalu dapat menemukan pakar lain dengan kredensial yang sama yang mengatakan sesuatu yang berbeda.

Tetapi to the point: Jawaban singkat: biasanya, tetapi tidak selalu.

Setiap bidang memiliki "praktik terbaik" dan "solusi buku teks". Ini mewakili akumulasi pengalaman dan kebijaksanaan banyak, banyak orang selama bertahun-tahun, dan tidak boleh diabaikan. TAPI! Selalu ada keadaan khusus, kasus pinggiran, dll. Orang yang benar-benar mampu di bidang apa pun tahu kapan harus mengikuti aturan dan kapan harus melanggarnya.

Saya akan mengatakan secara umum: Mulailah dengan mengikuti aturan buku teks. Ketika mengikuti aturan buku teks menyebabkan masalah - kompleksitas yang tidak perlu, kinerja buruk, apa pun - kemudian mempertimbangkan apakah melanggar aturan yang satu ini kali ini mungkin bukan ide yang lebih baik.

Jika Anda mengabaikan aturan dan pergi ke mana pun keinginan Anda saat ini menuntun Anda, kode Anda kemungkinan akan berantakan. Tidak peduli seberapa pintar Anda, Anda bukan programmer pertama di dunia. Masuk akal untuk belajar dari pengalaman orang lain. Dalam kehidupan kita sehari-hari, inilah sebabnya kita memiliki orang tua, guru, dan pengkhotbah: jadi kita tidak perlu mengulangi setiap kesalahan bodoh untuk mengetahui bahwa itu adalah kesalahan bodoh.

Tetapi jika Anda dengan patuh mengikuti daftar aturan dari beberapa buku 100% dari waktu, Anda akan sering menemukan diri Anda memalu pasak persegi menjadi lubang bundar. Orang-orang yang menulis buku aturan mungkin tidak menemukan kasus seperti milik Anda. Dan bahkan jika mereka punya, jika itu cukup langka mereka mungkin mengabaikannya. Aturan yang bekerja 80% dari waktu adalah aturan yang sangat baik - selama Anda mengerti bahwa itu bekerja 80% dari waktu dan bukan 100% dari waktu.

Saya menulis buku tentang desain basis data yang mencakup banyak aturan yang saya sarankan untuk diikuti oleh perancang basis data. (Saya akan menahan diri dari memberikan judul sehingga saya tidak terlihat seperti tanpa malu-malu tergelincir dalam promosi diri.) Saya tentu saja mendorong siapa pun yang ingin mendesain database untuk membaca buku seperti milik saya dan belajar semampu mereka dari itu. . Tapi TENTU SAJA ada kalanya Anda harus melanggar aturan yang saya daftarkan.

Saya pernah menulis dokumen standar pemrograman untuk tim pengembang yang saya pimpin saat itu. Dan aturan terakhir berbunyi seperti ini: "Jika Anda memiliki alasan yang baik untuk melanggar salah satu aturan di atas, maka silakan, TAPI Anda harus memasukkan komentar dalam kode Anda menjelaskan mengapa Anda melanggar aturan. Jika Anda tidak bisa datang dengan alasan yang bagus, lalu ikuti aturan. Jika menulis komentar lebih banyak masalah daripada mengikuti aturan, maka ikuti aturan. " Kami hanya memiliki beberapa kali seseorang menemukan melanggar aturan yang sepadan dengan kesulitan untuk menjelaskan mengapa.

Jay
sumber
1

Dengan praktik terbaik , saya berasumsi maksud Anda "aturan informal yang telah dipelajari komunitas pengembangan perangkat lunak dari waktu ke waktu yang dapat membantu meningkatkan kualitas perangkat lunak" dan bukan semacam cara harfiah terbaik untuk melakukan tugas tertentu.

Ya, sampai Anda punya alasan untuk tidak melakukannya. Itu harus menjadi alasan yang baik bahwa Anda telah mempertimbangkan dengan serius dan menerapkan keadaan dan keterbatasan tugas yang ada. Itu berarti Anda sepenuhnya memahami praktiknya dan dapat menerapkannya. Jangan berpikir bahwa jika Anda tidak memahaminya, maka itu bukanlah pemikiran yang terbaik. Lihat definisi.

Anda tidak selalu akan melakukan yang terbaik. Ketika bos memberitahu Anda untuk, "Kirim omong kosong ini atau Anda dipecat!" Anda akan mengirimkannya dan mungkin mencari pekerjaan lain, tetapi Anda masih akan mengirimkannya. Terkadang Anda akan menemukan diri Anda melakukan sesuatu yang cukup baik. Tentu saja, Anda tidak ingin membiasakan diri dengan hal ini, tetapi kadang-kadang Anda harus membuat gerobak berputar dan Anda tidak bisa khawatir tentang kuda menjadi buta.

JeffO
sumber
1

Beberapa hal penting, beberapa tidak penting.

Anda harus menyesuaikan pilihan bahasa dan gaya Anda dengan masalah yang dihadapi.

Misalnya, "Praktik Terbaik" untuk penanganan pengecualian mungkin untuk selalu menangkap pengecualian dan mencatatnya, tetapi saat membuat tes unit praktik terbaik sering kali membiarkannya dibuang sehingga kerangka pengujian unit dapat melaporkannya dengan benar.

Di sisi lain, pertimbangkan aturan "KERING". Berjuang untuk kode yang tidak terulang itu selalu baik, tidak hanya karena alasan yang jelas, tetapi juga karena semakin banyak Anda mengkode dengan cara itu semakin baik Anda menjadi pembuat kode - ini adalah cara yang bagus untuk melenturkan keterampilan pengkodean / berpikir Anda alih-alih keterampilan mengetik dan menyalin / menempel, dan dalam jangka panjang biasanya Anda akan merasa lebih baik mengunjungi kembali kode Anda (bahkan ketika Anda mengharapkannya menjadi kode yang dibuang) jika Anda mengikuti beberapa aturan yang masuk akal.

Singkatnya, menjadi fleksibel tetapi jangan hanya kode sampah yang tidak dapat dibaca karena Anda pikir itu adalah kode yang dibuang.

Bill K
sumber
1

Saya akan mencoba melihat dari perspektif yang berbeda.

Kerangka kerja modern saat ini membuatnya sangat mudah untuk mengatur proyek dasar dengan mvc, injeksi ketergantungan, arsitektur berlapis dll (pecinta boot musim semi di sini). Saya akan mengatakan mulai dengan basis yang dibuat dan gunakan alat yang disediakan untuk Anda, sampai Anda menabrak sesuatu yang membutuhkan solusi buatan tangan. Maka Anda dapat mengambil jalan pintas dari praktik terbaik itu.

Ini tidak sulit untuk menggunakan sesuatu seperti Spring Boot untuk aplikasi web 2 halaman, kemudian menggulir servlets Anda sendiri, permintaan jdbc dan hal-hal lain.

uylmz
sumber
1

Dalam pengalaman saya, hanya ada satu praktik terbaik yang saya anggap wajib:

Keep It Simple, Stupid (KISS)

Dengan kata lain: Apa pun alat, API, arsitektur, dll yang Anda pilih - jika Anda membuatnya sederhana, itu lebih mudah untuk bekerja di masa depan, memiliki lebih sedikit bug, cepat, efisien memori dan segala sesuatu yang Anda inginkan.

Semua hal lain yang dibicarakan orang: Prinsip, pola, praktik, dll - Saya anggap sebagai palet alat yang bisa saya pilih, memilih yang paling sesuai dengan proyek yang sedang saya kerjakan. Mereka semua memberikan teknik dan ide untuk memecahkan masalah. Triknya adalah mencari tahu apakah Anda memiliki masalah tersebut sejak awal.

drekka
sumber
0

"Praktik Terbaik" terbaik selalu berisi bagian yang harus Anda gunakan intelijen dan pengalaman Anda untuk mengidentifikasi ketika item dalam manual tidak tepat. Mereka juga dapat berisi bagian tentang meninjau, menyetujui, dan mendokumentasikan pengecualian tersebut dan menjadikannya bagian dari praktik "terbaik".

Bradley Ross
sumber
0

Saat mengkode perangkat lunak, haruskah arsitektur selalu menjadi praktik terbaik atau praktik praktis terkait dengan aplikasi yang sedang dibangun?

Dalam Teori, ya.

Di Dunia Nyata, [tetap] ya, selama Anda mampu melakukannya.

Yang, tentu saja, berarti, "Tidak".

Tekanan waktu dan uang akan selalu mencoba untuk mendorong Anda ke jalan solusi "cepat dan kotor", karena memberikan nilai "lebih baik" kepada klien. Bagaimana itu diterapkan tidak menarik bagi klien atau akuntan mereka. Jika Anda dapat melakukan pekerjaan [buruk] dalam dua hari atau sempurna dalam tiga bulan, menurut Anda mana yang akan mereka tanyakan?

Kesenjangan antara keduanya - praktik terbaik dan apa yang harus Anda "hindari" - disebut "Utang Teknis"; itu sangat dapat diterima, selama Anda memiliki rencana untuk "membayar" itu, yaitu untuk kembali dan memperbaiki keadaan nanti. Sekali lagi, bukan sesuatu yang Anda selalu (selalu?) Dapatkan anggarannya.

Salah satu taktik adalah merilis versi awal, Beta, dengan perbaikan "cepat" di dalamnya, tetapi memastikan bahwa perbaikan arsitektur yang diperlukan diprioritaskan sebelum rilis "penuh". Sekali lagi, bukan sesuatu yang selalu dapat Anda lakukan.

Phill W.
sumber