Cara menulis lebih sedikit kode [ditutup]


12

Kualitas yang ingin saya kembangkan adalah menulis kode yang lebih ringkas. Dengan menulis lebih ringkas, setidaknya menurut saya, peluang untuk menambahkan bug ke kode lebih kecil. Lebih mudah untuk membaca kode untuk yang lain.

Pertanyaan saya adalah apakah itu sesuatu yang baru saja datang dengan pengalaman atau apakah itu sesuatu yang dapat Anda lakukan secara eksplisit untuk mengembangkan kualitas itu?


6
Plot kecenderungan dan lihat ketika Anda melewati sumbu x ...

1
Pointer wajib untuk makro, makro, makro: paulgraham.com/avg.html
vemv

Anda dapat menghasilkan kode yang sangat mudah dibaca dengan mengadopsi gaya pemrograman pointless. Pointless programming adalah pemrograman hanya dengan menerapkan fungsi. Anda dapat mengenalinya dengan penggunaan luas fungsi-fungsi tingkat tinggi seperti peta, filter, concat, lipat / perkecil / suntikkan / [masukkan nama lain untuk daftar catamorphism] dll.
dan_waterworth

2
-1: Ini sepertinya selamat untuk diri sendiri dalam penyamaran.
Jim G.

Saya belum melihat kode bebas titik yang dapat dibaca. tidak ada di perpustakaan signifikan.
Simon Bergot

Jawaban:


12

Saya akan mengatakan bahwa secara keseluruhan itu adalah sesuatu yang datang dengan waktu dan pengalaman, tetapi Anda mungkin menemukan bahwa jika Anda melakukan beberapa pekerjaan dengan bahasa yang lebih singkat Anda membawa kualitas itu kembali ke bahasa kerja reguler Anda.

Tentu saja setelah satu atau dua tahun bekerja dengan Ruby, saya menemukan C # saya semakin kencang. Saya pikir jika saya memahami pemrograman fungsional lebih baik (ambisi yang sedang berlangsung) saya mungkin akan mengambil lebih dari itu.

Juga ada beberapa pedoman yang dapat membantu - misalnya jika Anda menulis dua baris yang sama lebih dari sekali membaginya menjadi metode mereka sendiri. Itu adalah pedoman sederhana tetapi dengan cepat mengurangi baris kode dan memotong dan menempel pemrograman, yang sebagian besar dari kita bersalah dari waktu ke waktu.

Jika Anda memahami warisan, Anda sering dapat menghemat pengulangan kode yang sama di tempat yang berbeda dengan memberikan fungsionalitas umum ke kelas induk. Ini jelas pada prinsipnya tetapi sesuatu yang sering dilewatkan orang dalam praktik.

Mungkin ada perbedaan antara menulis lebih sedikit kode dan memiliki lebih sedikit kode dalam aplikasi Anda - kadang-kadang Anda dapat menggunakan pembuatan kode untuk menghindari keharusan mengulang sendiri sehingga Anda hanya menulis beberapa baris kode tetapi yang kemudian menghasilkan banyak kode lain untuk Anda - yang dapat memberi Anda banyak pengaruh. Lihatlah apa yang dilakukan alat seperti Rails atau Entity Framework dalam hal ini untuk memahami betapa bermanfaatnya itu. Lebih jelas tentang perlunya dan berpikir dua kali, tiga kali dan kemudian empat kali tentang menggulirkan kode Anda sendiri - yang dapat membuat Anda masuk neraka YAGNI.

Pahami bahasa Anda, API Anda, dan alat Anda. Sekali lagi ini tampak jelas tetapi selama bertahun-tahun saya telah menulis begitu banyak kode yang kemudian saya sadari mereproduksi fungsionalitas saya bisa saja diwarisi dari API atau menggunakan fitur bahasa untuk menyederhanakan bahwa saya telah menyadari bahwa beberapa jam membaca di dokumentasi untuk API tempat saya bekerja akan menghemat banyak waktu untuk pengkodean atau debugging nanti. Demikian pula, sebagian besar platform Anda bekerja dengan memiliki biji-bijian - belajar untuk bekerja dengan cara yang mereka harapkan dan hidup Anda akan jauh lebih mudah. Luangkan waktu untuk menemukan arah resistensi paling tidak untuk platform yang Anda gunakan dan Anda akan menyelesaikan banyak hal dengan lebih baik.

Jika Anda bertanya-tanya apakah ada cara yang lebih baik untuk melakukan sesuatu, mungkin ada dan selalu ada baiknya mencari tahu bagaimana melakukan sesuatu dengan lebih baik.


Ya, menurut saya, satu-satunya alasan untuk fungsi satu-line pribadi adalah prinsip KERING

Karena saya memiliki lebih banyak fungsi-fungsi itu, jumlah baris kode di kelas saya turun dengan jelas dan terlihat jauh lebih rapi dan lebih jelas.
glenatron

Kedengarannya seperti sedikit kontradiksi, lebih banyak fungsi tetapi lebih sedikit garis, tapi mungkin saya dapat melihat tren yang sama dalam kode saya juga .. Saya harus memikirkannya ....

Apakah Anda memiliki pedoman ini yang dapat diikuti? Kedengarannya mereka bisa berguna bagi dev muda seperti diriku.
stuartmclark

@stuartmclark - Saya telah menambahkan beberapa lagi, meskipun saya kira tidak ada terlalu banyak di sana bahwa Anda tidak akan pernah mendengar di tempat lain.
glenatron

16

Satu cara hebat untuk menulis lebih sedikit kode adalah mencoba menghindari menciptakan kembali roda , dan menggunakan komponen perangkat lunak yang ada saat tersedia.

Satu jawaban umum yang saya dapatkan ketika saya bertanya mengapa orang melakukan ORM mereka sendiri, atau mesin logging mereka sendiri, atau komponen UI mereka sendiri, atau segalanya mereka sendiri:

Tapi kami lebih baik

Saya percaya pernyataan ini benar sebagian besar kasus, tetapi dampak negatif pada ROI sangat tinggi dalam banyak kasus. Anda ibu melakukan hidangan terbaik kan? Tetapi Anda tidak bisa meminta ibu Anda pulang dan menyiapkannya setiap hari.

Itu sebabnya saya berpikir bahwa pengembang harus mendapatkan minat pada dampak finansial dari pilihan mereka. Beberapa dari mereka adalah:

  • Diperlukan kerja ekstra untuk membangun komponen
  • Kerja ekstra bagi pendatang baru untuk mempelajarinya
  • Pekerjaan ekstra besar untuk mempertahankannya

Saya suka berpikir bahwa vendor komponen tersebut adalah tim besar Anda yang bekerja untuk Anda untuk sebagian kecil dari apa yang akan Anda bayarkan untuk membangun, memelihara, dan memperbaikinya sendiri.

Lebih baik bagi seluruh perusahaan untuk ROI maksimum daripada bekerja untuk memaksimalkan kepuasan ego kami;) Semakin banyak uang yang didapat perusahaan Anda, semakin besar kemungkinan kondisi kerja dan gaji Anda akan meningkat.


1
Saya bersalah atas hal itu juga, beberapa tahun yang lalu saya menulis kelas filepath saya sendiri dapat mengkonversi file antara format Win, Unix dan Apples. Kami hanya menggunakan windows. Mungkin itu adalah aturan juga, jangan pernah membuat hal-hal di masa depan-bukti

Terkadang karena kurangnya pengetahuan Anda tentang kerangka kerja yang diberikan. Saya memang menulis kelas jalur saya sendiri juga ketika saya mulai bekerja dengan .NET, kemudian saya menemukan kelas System.IO.Path beberapa hari setelah :-)

Aku lebih suka spageti ibuku, tetapi barang-barang di dalam toples cukup bagus. Ini benar-benar bermuara kepada mereka yang bertanggung jawab atas persyaratan. Jika mereka tidak puas dengan solusi 85%, Anda tidak punya pilihan.
JeffO

Ibuku membuat spageti lebih baik dari milikmu.

1
+ internet untuk "hindari menciptakan kembali roda". Salah satu keterampilan paling penting yang saya kembangkan adalah mampu mengidentifikasi masalah yang mungkin sudah dipecahkan seseorang. Tidak hanya hampir selalu memberi saya solusi yang lebih baik daripada yang saya hasilkan sendiri dengan menangani banyak kasus pinggiran yang mungkin saya abaikan, itu membebaskan saya untuk mengerjakan masalah yang sebenarnya saya dibayar untuk menyelesaikannya .
BlairHippo

5

Menurut pendapat saya, menulis lebih sedikit kode dapat dilakukan dengan beberapa cara:

  • Anda Tidak Akan Membutuhkannya . Jangan kode sesuatu yang belum Anda butuhkan. Kode hanya menyatakan persyaratan begitu. Dengan cara ini, kita akan mengurangi kode yang dibutuhkan untuk menulis.

  • Jangan Ulangi Diri Anda Sendiri . Saya percaya menggunakan CMS, framework atau perpustakaan pihak ketiga adalah salah satu cara untuk menerapkan prinsip KERING.

  • Abstraksi . Dan yang tak kalah pentingnya, pemrograman abstraksi dapat mengurangi kode juga. Dengan mengabstraksi kode, peluang untuk menggunakan kembali kode akan lebih tinggi karena mengurangi dupacity.


3

Di luar pemahaman bahasa pemrograman, saya pikir pemahaman seseorang tentang suatu masalah dan muncul dengan solusi yang baik ada banyak hubungannya dengan itu. Ada banyak solusi untuk sebagian besar masalah, tidak semuanya optimal. Anda dapat berkendara dari kota A ke kota B melalui jalan yang berbeda - yang satu bisa memakan waktu dua jam, yang lain bisa dua kali lipat. Itu ide yang sama dalam pemrograman. Anda mungkin tahu bahasa dengan sangat baik, tetapi Anda mungkin menemukan solusi yang membutuhkan, katakanlah, dua halaman kode, sementara orang lain akan menemukan solusi yang dapat diimplementasikan dalam seperempat dari setengah ukuran kode. Saya sudah sering melihat ini selama bertahun-tahun.

Pastikan Anda memiliki pemahaman yang baik tentang masalah tersebut. Menganalisisnya, menghasilkan solusi, menimbang pro dan kontra (tentu saja "solusi dengan 's'" akan sangat bervariasi dari masalah ke masalah - hanya secara umum berbicara di sini.) Lalu ada implementasi dari solusi yang dipilih, yang adalah di mana pemahaman Anda tentang bahasa (dan kerangka kerja, jika itu berlaku) akan ikut bermain.


Berapa banyak waktu yang Anda habiskan untuk mempersiapkan solusi versus memprogram solusi?

Itu bervariasi tergantung pada masalahnya, tentu saja. Saya tidak berbicara berhari-hari di sini. Menghabiskan sedikit waktu untuk berpikir sebelum coding biasanya terbayar. Ini tidak benar-benar tentang waktu yang dihabiskan untuk melakukan baik karena ia datang dengan solusi yang baik - dan idealnya dapat dipertahankan dalam jangka panjang. Saya dapat menghasilkan kode jelek untuk solusi jelek dengan baik - siapa pun dapat melakukannya.
MetalMikester

1

Seluruh seni pemrograman bisa dikatakan turun ke ini.

Anda dapat mempelajari bahasa-bahasa yang memiliki penekanan tradisional pada kejelasan dan keringkasan (misalnya Haskell, Skema, Python), atau bahkan paradigma terser seperti Factor dan bahasa-bahasa gabungan lainnya, tetapi pada akhirnya, segala sesuatu yang Anda pilih untuk dipelajari pada akhirnya harus berkontribusi untuk membantu Anda menulis lebih pendek , kode yang kurang berlebihan.


1

Seperti semua kesengsaraan lainnya, jika Anda tidak mengaku memiliki masalah, Anda tidak akan mencari solusi. Pengalaman mulai menjadi faktor ketika Anda mempelajari seperti apa kode itu. Ketika Anda meninjau kembali kode Anda, ini adalah waktu yang tepat untuk menentukan apakah Anda dapat menggunakan kembali kode atau refactor untuk mengurangi kode. Microsoft dapat meningkatkan kecepatan pencetakan dengan Windows 2000 dengan TIDAK menggulungnya dua kali (kutipan dari karyawan Microsoft di salah satu demo gratis mereka).


Jadi saya harus meninjau kembali kode saya dan refactor untuk mendapatkan pegangan tentang bagaimana menulis lebih sedikit kode atau seperti kata Piet, kode terser?

2
@Gorgen - Anda bisa jika Anda punya waktu atau hanya melihat kode yang Anda tulis satu jam yang lalu. Kadang-kadang menemukan contoh pada SO dapat meminta Anda untuk kembali dan membuat beberapa perubahan dalam kode Anda sendiri.
JeffO

0
  1. Kembali yo kode lama Anda yang panjang lebar,
  2. letakkan di bawah kontrol versi,
  3. tulis beberapa tes agar memiliki harapan yang masuk akal untuk tidak memperkenalkan bug baru,
  4. menulis kembali.

Ulangi libitum iklan. Dan selamat datang di neraka.


-2

Pengembangan Test Driven mungkin membantu. Dengan ini, Anda hanya menulis kode minimum yang diperlukan untuk lulus tes itu.


Dalam konteks itu, minimum dimaksudkan dalam hal fitur, bukan panjang.
vemv
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.