Membaca kode sumber SQLite adalah misi IMO tidak mungkin. Namun itu adalah bagian dari perangkat lunak yang cukup dapat digunakan (ini adalah database tertanam yang lengkap) yang dapat diunduh, dikompilasi dan digunakan dari kode orang lain dan terus diperbarui.
Bagaimana orang bisa menulis dan memelihara kode yang begitu rumit dan sulit dibaca?
source-code
maintenance
readability
sharptooth
sumber
sumber
Jawaban:
Ada perbedaan besar antara Complex dan Complicated. Tautan berikut tentang ringkasannya. :)
http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/complex-vs-complicated.aspx
Pada catatan yang lebih pribadi, saya mengerjakan basis kode lebih dari 1 juta baris kode. Saya sudah di dalamnya dari baris 1 ke kondisi saat ini. Semakin Anda bertani (baca lagi kode Anda) semakin mudah. Saya tidak dapat memberi tahu Anda apa yang dilakukan setiap baris, tetapi saya dapat memberitahu Anda untuk mulai mencari tugas atau bug yang diberikan. Itu hanya datang secara alami.
Moral dari cerita ini adalah bahwa seperti hal-hal lain di dunia pemrograman, itu membutuhkan waktu. Jika Anda berharap untuk melihat SQLite dan hanya tahu dan memahaminya, Anda bercanda. Perlu waktu untuk memikirkan bagaimana semuanya bekerja bersama. Perbedaan antara kode yang baik dan kode yang buruk adalah berapa lama proses itu berlangsung.
Terakhir, beberapa pengembang tidak memiliki kemampuan untuk melompat ke basis kode dan mulai mencari tahu. Banyak yang akan merasa kewalahan dengan ukuran atau arsitektur basis kode. Yang lain tidak akan memiliki masalah hanya dengan melompat ke dalamnya. Itu semua tergantung pada kekuatan pengembang.
sumber
Dalam kasus spesifik SQLite, alat utama yang mereka pilih untuk digunakan dalam pengembangan dan pemeliharaan adalah pengujian otomatis. Mereka bangga akan cakupan 100% (cakupan cabang, bukan cakupan pernyataan) di ruang uji mereka. Menurut mereka, itu adalah salah satu produk perangkat lunak yang paling teruji di dunia. Jadi mereka langsung tahu ketika sesuatu yang mereka tambahkan atau ubah menyebabkan kemunduran, dan dapat berkembang tanpa rasa takut sebagai akibatnya.
http://sqlite.org/testing.html
Angka yang cukup mengejutkan - mereka memiliki sekitar 640 kali lebih banyak baris kode pengujian daripada kode produksi.
EDIT: Tampaknya pertanyaan ini telah dibangkitkan dari kematian! Dan sedikit lebih dari setahun kemudian, halaman yang sama melaporkan bahwa mereka memiliki 1177 kali lebih banyak baris kode pengujian dibandingkan dengan produksi!
sumber
sumber
Anda tidak perlu memiliki pemahaman yang mendalam tentang keseluruhan proyek untuk dapat mempertahankannya. Biasanya dengan perangkat lunak besar dan kompleks, orang akan memiliki "area" khusus mereka sendiri yang mereka rawat dan mereka hanya memiliki pengetahuan 'lewat' dari seluruh sistem.
SQLite sebenarnya relatif kecil pada skala "proyek perangkat lunak besar" tetapi jika Anda melihat sesuatu seperti sistem operasi Windows, Anda akan memiliki orang-orang yang hanya bekerja pada kernel, orang-orang yang hanya bekerja pada shell, orang-orang yang hanya bekerja di Internet Explorer, orang-orang yang hanya bekerja di Window manager, dll. Seseorang yang bekerja di "shell" tidak akan dapat memperbaiki bug di kernel dengan cepat.
Ada juga manfaat yang berkembang dari proyek-proyek ini dari waktu ke waktu: mereka tidak selalu memulai yang rumit ini. Itu berarti pengembang baru biasanya dapat "dilatih" oleh pengembang yang lebih berpengalaman.
Ketika Anda bergabung dengan tim besar pengembang, Anda akan diberikan aspek tertentu dari proyek untuk dikerjakan (mungkin bug atau fitur baru) dan Anda akan memiliki pengembang lain menjadi Anda "teman" untuk beberapa iterasi pertama. Teman Anda akan memiliki pemahaman yang baik tentang area Anda bekerja dan dapat membantu Anda menemukan jalan keluar.
Untuk proyek open source seperti SQLite, sebenarnya sedikit lebih sulit karena tidak ada motivasi bagi pengembang yang ada untuk "melatih" pengembang baru. Jadi Anda akan menemukan diri Anda sedikit lebih banyak. Tetapi Anda masih dapat menemukan bantuan di forum pengembang atau milis (mis. Hanya memposting pertanyaan seperti "Saya ingin menerapkan fitur ini & itu" atau "Saya menemukan bug XYZ, di mana saya mulai mencari?" Dan Anda cenderung mendapatkan beberapa bentuk bantuan.
sumber
Ada perbedaan antara proyek yang sulit dibaca dan kompleks. Jika seseorang tidak memahami secara mendalam bahasa yang ditulis oleh proyek atau domain proyek, itu tidak berarti kode tersebut ditulis dengan buruk.
Saranku:
Bagi saya SQLite jauh dari rumit dan tidak ada yang rumit. Domain proyek ini menuntut pemahaman mendalam tentang konsep luas.
sumber
Satu hal yang tidak disebutkan dalam jawaban lain adalah "Itu datang secara alami kepada mereka". Kebanyakan orang ingin menulis kode yang baik tetapi mereka disetel untuk menulis kode yang buruk. Beberapa programmer yang saya temui adalah pemikir LINEAR alami + beberapa kali dengan sangat sadar mereka datang dengan solusi yang kompleks. Kebanyakan orang seperti itu tidak menghabiskan waktu membaca atau belajar dari buku yang mereka pelajari ketika dan ketika pekerjaan menuntutnya.
sumber
Jika mereka adalah coders asli, dan mereka tetap mempertahankannya, mereka tidak melihatnya sebagai "rumit dan sulit dibaca". Mereka mungkin melihatnya sebagai "sederhana dan mudah dibaca", karena mereka menulisnya sendiri.
Kode apa pun membutuhkan waktu untuk memahaminya. Hanya saja beberapa memakan waktu lebih lama dari yang lain :)
sumber
Anda dapat membungkus kepala Anda di sekitar basis kode apa pun jika Anda memiliki - ketekunan, kesabaran dan pendekatan metodis - tetapi terutama ketekunan :-)
sumber
Mengelola menjadi jauh lebih mudah jika ada hal yang dilakukan selalu dengan cara yang sama. Saya tidak tahu kode SQLite, tapi saya bekerja di lingkungan di mana ada beberapa proyek. Selain memahami kasus bisnis (persamaan logika), karena semuanya pada dasarnya dilakukan dengan cara yang sama di mana-mana (akses database, dll.) Relatif mudah untuk mulai bekerja pada proyek lain. Teks panjang pendek: Pedoman pengkodean - dengan cara yang tepat - membuat hidup dan kode semacam itu jauh lebih mudah. Ini bisa menjadi salah satu pembantu untuk coders SQLite.
sumber
sumber
Mereka mencoba menulisnya dengan cara yang sederhana tetapi tidak dengan cara yang sederhana.
Menjadi sesederhana mungkin membuat hal-hal lebih cepat dipahami / dibaca, bahkan jika itu membutuhkan waktu.
sumber
Algoritme yang diimplementasikan menetapkan batas yang lebih rendah pada seberapa sederhananya kode untuk suatu implementasi. Jika deskripsi abstrak dari algoritma yang akan diimplementasikan sangat rumit dan membutuhkan banyak potongan data yang berbeda untuk digabungkan satu sama lain, maka kode yang mengimplementasikan algoritma tersebut tidak dapat sederhana tidak peduli siapa yang menulisnya.
Dengan kata lain, salah satu alasan mengapa saya terkadang menulis kode yang tidak dapat dipahami adalah karena, mengingat algoritma yang ingin saya terapkan, saya tidak punya pilihan.
sumber