Saya mengambil kelas desain perangkat lunak di mana saya harus memilih perangkat lunak sumber terbuka untuk dianalisis dari sudut pandang Desain Perangkat Lunak.
Itu harus menjadi proyek besar: tidak kurang dari 100.000 baris kode.
Saya benar-benar ingin memilih perangkat lunak yang dirancang dengan sangat baik dan dirancang agar memiliki wawasan yang baik tentang desain perangkat lunak yang baik.
Dengan desain yang baik, saya maksudkan hal-hal seperti kelas dan arsitektur yang bermakna, penggunaan pola (desain) yang baik, penggunaan abstraksi yang baik, pengaturan komponen yang baik, kohesi yang tinggi dan kopling rendah antara komponen, dll ...
Apakah Anda memiliki perangkat lunak untuk menyarankan saya?
Perhatikan bahwa perangkat lunak hanya perlu memiliki desain yang baik, desainnya tidak perlu didokumentasikan! :)
Itu tidak perlu menjadi aplikasi untuk pengguna akhir ... Itu juga bisa menjadi perpustakaan, alat, dll ...
sumber
Jawaban:
Pertama, perangkat lunak, baik atau buruk, tidak hidup dalam kesendirian - ia memodelkan skenario dunia nyata yang oleh manusia dianggap sebagai masalah dan dengan demikian selalu terkait erat dengan sesuatu yang disebut "domain aplikasi". Jadi, setiap kali Anda berbicara tentang perangkat lunak, pertama-tama ketahui dan pelajari domainnya - karena hanya dengan begitu Anda dapat mencapai kebijaksanaan baik dan buruk.
git - bukan hanya bagus, tapi desain yang luar biasa. Ini bukan kontrol versi pada intinya, hanya sistem file. Lapisan tipis fungsionalitas di atas inti menjadikannya sistem kontrol versi. Kenali internal git, dan selera desain perangkat lunak Anda akan tercerahkan.
jQuery - bukan perpustakaan yang terdokumentasi dengan sangat baik (secara internal), tetapi sumber inspiratif yang menunjukkan bagaimana kode JavaScript sisi klien dapat melakukan keajaiban.
NodeJS - jika Anda ingin membuat server proyek ini memiliki ide dan pola baru yang menyegarkan untuk ditawarkan.
v8 - kode C ++ yang sangat bagus, pustaka fantastis untuk belajar / mempelajari implementasi mesin virtual.
Proyek NoSQL - Sofa, Mongo, Redis, Cassandra - proyek ini menunjukkan cara cerdas untuk menyelesaikan masalah kegigihan. Juga mereka menganut gagasan kegigihan polyglot.
Tingkatkan perpustakaan - dosis C ++ yang baik.
OpenStack - proyek yang sangat baik pada komputasi awan dan virtualisasi.
Yayasan Perangkat Lunak Apache - Pilih salah satu proyek mereka dan pelajarilah. Struktur modular HTTPd adalah sumber yang hebat jika Anda ingin melihat bagaimana komponen-komponen bersatu. APR (apache portable runtime) - lib yang sangat bagus juga.
mod_wsgi - salah satu program C terbaik yang pernah saya jumpai.
"penggunaan pola desain yang baik" - TIDAK penting bagi kode untuk berhubungan dengan pola desain yang terkenal - lebih penting bahwa itu memecahkan masalah "dengan cerdas" - bahwa kode tersebut dapat dikelola, digunakan kembali, dan dapat dibaca. Jika kode dijejalkan ke "bentuk" tertentu - hanya untuk mematuhi pola desain - itu bisa menjadi kode yang buruk.
"tidak kurang dari 100.000 baris kode" - sejak kapan jumlah baris menjadi metrik kualitas yang baik - mendapatkan rasa "peranti lunak yang dirancang dengan baik / arsitektur" tidak mengharuskannya menjadi BESAR.
Sekali lagi, ingat untuk mempelajari sifat dan nuansa dari domain masalah terlebih dahulu, dan kemudian mempelajari membaca kode.
UPDATE: Oktober 2015
InfluxDB - https://influxdb.com/ Proyek Go ini sedang dalam pengembangan aktif, dan masih TIDAK sangat kompleks. Jadi Anda dapat memulai dengan menggali ke dalam kode relatif lebih mudah daripada sesuatu seperti OpenStack.
sumber
Lempar koin. Semua proyek Open Source besar harus cemerlang untuk bertahan hidup. Proyek Apache, Linux, GNU semuanya brilian.
sumber
sumber
Python. Secara khusus, CPython, implementasi utama. Untuk Versi 3.2, interpreter menjalankan sekitar 50 k sloc kode C, library standar lebih dari 400k sloc kode Python. Mengingat kualitas bahasa yang sangat tinggi dan dorongan prinsip-prinsip keterbacaan dan desain yang baik, saya akan berpikir semua kode ini akan cukup baik.
sumber
TeX bersama dengan MetaFont benar-benar layak untuk dipelajari: http://www.tug.org/
Perpustakaan lokal Anda dapat membantu Anda dengan versi cetak dari sumber.
sumber
Saya akan merekomendasikan untuk membaca buku berikut sebelum memilih proyek open source. Ini akan memberi Anda wawasan tentang apa yang dapat dianggap kode baik / buruk.
Greg Wilson
Membuat Perangkat Lunak Yang Benar-Benar Berfungsi, dan Mengapa Kami Percaya
Arsitektur Aplikasi Open Source
Di sini juga ada wawancara pertukaran tumpukan Blognya jika Anda tertarik mendengarkan penulis sebelum melihat
http://blog.stackoverflow.com/2011/06/se-podcast-09/
Secara keseluruhan, apa yang dianggap perangkat lunak berkualitas tinggi? Pertanyaan itu sendiri sangat subyektif. Pengguna memiliki pengukuran kualitas yang berbeda. Satu pengguna dapat menganggap paket perangkat lunak berkualitas tinggi tergantung pada kemampuan teknisnya. Di mana pengguna lain dapat mengukur kualitas berdasarkan estetika antarmuka pengguna dan pengalaman pengguna secara keseluruhan.
Dari perspektif bisnis, mereka biasanya mengukur kualitas perangkat lunak tergantung pada apakah memenuhi harapan klien atau mereka memenuhi kewajiban kontrak klien. Ada juga perilaku profesional tetapi itu tergantung pada sisi mana Anda melihatnya.
Dari sudut pandang programmer, seberapa elegan desain dan konstruksi API pada saat perangkat lunak dibuat. Standar desain atau kode yang sama dapat dianggap tidak profesional ketika sikap dan pandangan programmer berubah seiring waktu.
sumber
Saya akan menyarankan Edisi Komunitas IntelliJ karena Anda menyebutkan bahwa Anda menyukai alat perangkat lunak.
http://www.jetbrains.org/
Apa yang saya suka tentang itu:
(diakui saya adalah penggemar JetBrains)
sumber
Saya sendiri sudah mencari proyek semacam itu, dan saya setuju
CLang
.Tidak ada banyak Pola Desain di sana, beberapa Pengunjung di sana-sini tapi itu saja. Hirarki kelasnya sederhana, dan terus terang ... Sebenarnya, saya pikir kesederhanaan adalah tujuannya, sepertinya tidak ada rekayasa berlebihan yang terjadi.
Yang mengatakan, karena kinerja kritis, sejumlah keputusan desain mungkin tampak meragukan (menghindari fungsi virtual untuk banyak objek, kompilasi tanpa RTTI / pengecualian), jadi tidak semuanya berlaku untuk perangkat lunak sehari-hari.
sumber
Blender terstruktur dengan baik dan dirancang dengan baik.
sumber
Joomla, ini dilakukan dengan sangat baik. Tapi saya tidak yakin apakah itu 100.000 baris
sumber
Jadi, hanya varian lain - Bagaimana dengan bahasa pemrograman Nemerle ?
Ini tidak begitu populer (tapi GitHub baru saja menambahkan highlighting untuk Nemerle) dan Anda dapat menemukan banyak poin bagus di sana.
sumber