Perangkat lunak open source yang dirancang dengan baik / berkualitas tinggi [ditutup]


32

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 ...


3
Mengapa bertanya kepada kami? Apa yang menarik minat Anda? Jika saya menyarankan paket akuntansi dan Anda merasa akuntansi membosankan, itu bukan jawaban yang baik bukan? Jenis paket apa yang menarik minat Anda? Lihatlah yang pertama, lalu tanyakan kepada kami tentang paket spesifik yang Anda lihat.
S.Lott

Terima kasih telah menunjukkannya. Saya harus mengatakan bahwa alat pengembangan perangkat lunak akan menarik bagi saya.
Andrea Zilio

Adakah platform tertentu yang ingin Anda gunakan?

3
Lihatlah Arsitektur Aplikasi Open Source yang menjelaskan sejumlah aplikasi open source yang dirancang dengan baik.
Richard

Garis-garis ukuran kode bersifat mendua. Ukuran executable dan semua dll yang tergantung padanya mungkin memberi tahu Anda sesuatu. jika ada perpustakaan yang bagus di luar sana, masuk akal untuk menggunakannya. Lalu, apakah saya menghitung baris perpustakaan sebagai bagian dari jumlah LOC total saya atau tidak? Saya akan mengatakan bahwa banyak kerangka kerja (pustaka, API, SDK, atau nama apa pun yang Anda suka) cenderung sangat baik (mereka mendapatkan banyak sekali dari setiap sudut, sehingga bug cepat ditemukan dan harus cepat diperbaiki). Karena coders yang baik akan memanfaatkan lib yang baik lainnya, LOC aksi tidak harus besar untuk aplikasi yang kompleks.
Pekerjaan

Jawaban:


23

Dengan desain yang baik, saya maksudkan hal-hal seperti kelas dan arsitektur yang bermakna, penggunaan pola desain yang baik, penggunaan abstraksi yang baik, pengorganisasian komponen yang baik, kohesi yang tinggi dan kopling rendah antara komponen

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.


13

Lempar koin. Semua proyek Open Source besar harus cemerlang untuk bertahan hidup. Proyek Apache, Linux, GNU semuanya brilian.


4
Semua proyek OSS besar yang dikelola masyarakat harus setidaknya layak untuk bertahan hidup. Tidak akan mengatakan brilian. Untuk sebagian besar hal yang dikatakan, proyek pemerintah dikerjakan secara eksklusif oleh karyawan, kualitas kode tidak selalu menjadi hal tertinggi dalam daftar prioritas. Tapi beri +1 untuk contoh Anda.
TZHX

8
Apakah Wordpress brilian?
Drew

9
  • Chrome
  • Firefox
  • Apache
  • MySQL
  • PostgreSQL
  • Linux
  • GNU

2
Apakah Anda yakin Firefox tidak dikotori oleh potongan kode yang stagnan yang ditulis pada awal 90-an? Itu tampaknya bukan bagian yang baik dari kode untuk mempelajari praktik pengkodean modern
TheLQ

3
Kode sumber untuk Firefox dan MySQL adalah omong kosong mengerikan yang tidak boleh digunakan sebagai contoh desain perangkat lunak yang baik.
Jordan

7

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.


4

TeX bersama dengan MetaFont benar-benar layak untuk dipelajari: http://www.tug.org/

Perpustakaan lokal Anda dapat membantu Anda dengan versi cetak dari sumber.


3

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.


2

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:

  1. Ini adalah alat yang melakukan sesuatu daripada kerangka kerja
  2. Mereka melakukan hal-hal yang sangat menarik seperti analisis kode statis dan analisis aliran data yang menurut saya sangat menyenangkan untuk melihat detailnya.
  3. Yang menyenangkan adalah Anda dapat menggunakannya untuk melakukan studi karena memiliki kemampuan untuk menjalankan semua analisis kode dengan sendirinya.

(diakui saya adalah penggemar JetBrains)


2

Saya sendiri sudah mencari proyek semacam itu, dan saya setuju CLang.

  • Ini relatif baru (keturunan LLVM yang baru berusia 10 tahun), jadi tidak ada (atau tidak yang saya lihat) kode basi
  • Desain modular (seperti LLVM), dipikirkan dengan sangat baik, yang saya pikir sangat penting saat ini
  • Kode sangat bersih, berkomentar dengan baik (Anda sering melihat kutipan dari Standar untuk menjelaskan hal-hal)
  • Ruang uji / lingkungan uji yang dirancang dengan sangat baik

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.




0

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.

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.