अच्छी तरह से डिजाइन / उच्च गुणवत्ता वाले खुले स्रोत सॉफ्टवेयर [बंद]


32

मैं एक सॉफ्टवेयर डिजाइन क्लास ले रहा हूं, जहां मुझे सॉफ्टवेयर डिजाइन बिंदु से विश्लेषण के लिए एक ओपन सोर्स सॉफ्टवेयर चुनना चाहिए।

यह एक बड़ी परियोजना होनी चाहिए: कोड की 100,000 पंक्तियों से कम नहीं।

मैं वास्तव में एक ऐसे सॉफ्टवेयर का चयन करना चाहूंगा जो बहुत ही अच्छी तरह से डिजाइन किया गया हो और अच्छे सॉफ्टवेयर डिजाइन पर अच्छी अंतर्दृष्टि रखने के लिए तैयार किया गया हो।

अच्छे डिजाइन से मेरा मतलब है कि सार्थक वर्ग और वास्तुकला, (डिजाइन) पैटर्न का अच्छा उपयोग, अमूर्तता का अच्छा उपयोग, घटकों का अच्छा संगठन, उच्च सामंजस्य और घटकों के बीच कम युग्मन, आदि ...

क्या आपके पास मुझे सुझाव देने के लिए कोई सॉफ्टवेयर है?

ध्यान दें कि सॉफ्टवेयर के लिए बस एक अच्छा डिज़ाइन होना चाहिए, डिज़ाइन को डॉक्यूमेंट करने की आवश्यकता नहीं है! :)

यह अंतिम उपयोगकर्ता के लिए एक एप्लिकेशन होने की आवश्यकता नहीं है ... यह एक पुस्तकालय, एक उपकरण, आदि भी हो सकता है ...


3
हमसे क्यों पूछें? आपकी रुचि किसमें हैं? यदि मैंने एक लेखांकन पैकेज का सुझाव दिया है और आपको लेखांकन उबाऊ लगता है, तो यह एक अच्छा जवाब नहीं होगा? आप किस तरह के पैकेज में रुचि रखते हैं? पहले उन लोगों को देखें, फिर उन विशिष्ट पैकेजों के बारे में पूछें जिन्हें आपने देखा था।
एस.लॉट

इस पर ध्यान दिलाने के लिए धन्यवाद। मेरा कहना है कि सॉफ्टवेयर विकास उपकरण मेरे लिए रूचिकर होंगे।
एंड्रिया जिलियो

कोई विशेष प्लेटफ़ॉर्म जिसका आप उपयोग करना चाहते हैं?

3
आर्किटेक्चर ऑफ ओपन सोर्स एप्लिकेशन पर एक नज़र डालें, जो कई डिज़ाइन किए गए ओपन सोर्स एप्लिकेशन का वर्णन करता है।
रिचर्ड

कोड माप की रेखाएं अस्पष्ट हैं। निष्पादन योग्य और सभी dll का आकार जो इस पर निर्भर करता है, आपको कुछ बता सकता है। अगर वहाँ एक अच्छा पुस्तकालय है, यह केवल इसका उपयोग करने के लिए समझ में आता है। फिर, क्या मैं अपने कुल एलओसी की गिनती के हिस्से के रूप में पुस्तकालय की लाइनों को गिनता हूं या नहीं? मैं कहूंगा कि बहुत से चौखटे (पुस्तकालय, एपीआई, एसडीके, या जो भी नाम आप पसंद करते हैं) बहुत अच्छे हैं (वे हर कोण से बहुत हिट होते हैं, इसलिए बग को खोजने के लिए जल्दी है और ठीक करने के लिए जल्दी होना चाहिए)। चूंकि अच्छे कोडर अन्य अच्छे कामों का लाभ उठाएंगे, इसलिए जटिल अनुप्रयोग के लिए एक्टल LOC की आवश्यकता नहीं होगी।
नौकरी

जवाबों:


23

अच्छी डिजाइन से मेरा मतलब है सार्थक वर्ग और वास्तुकला, डिजाइन पैटर्न का अच्छा उपयोग, अमूर्तता का अच्छा उपयोग, घटकों का अच्छा संगठन, उच्च सामंजस्य और घटकों के बीच कम युग्मन

सबसे पहले, एक सॉफ्टवेयर, अच्छा या बुरा, एकांत में नहीं रहता है - यह एक वास्तविक विश्व परिदृश्य को दर्शाता है जो मनुष्य एक समस्या के रूप में गर्भ धारण करता है और इस तरह हमेशा "एप्लिकेशन डोमेन" नामक चीज के साथ निकटता से जुड़ा होता है। इसलिए, जब भी आप सॉफ़्टवेयर के बारे में बात करते हैं, तो पहले डोमेन को जानें और उसका अध्ययन करें - केवल तभी आप अच्छे और बुरे का विवेक प्राप्त कर सकते हैं।

  • गिट - न केवल अच्छा है, बल्कि एक अद्भुत डिजाइन है। यह अपने मूल में एक संस्करण नियंत्रण नहीं है, बस एक फाइल सिस्टम है। कोर के शीर्ष पर कार्यक्षमता का एक पतला लिबास यह एक संस्करण नियंत्रण प्रणाली बनाता है। गिट के इंटर्नल को जानें, और आपके सॉफ्टवेयर डिजाइन की भावना प्रबुद्ध होगी।

  • jQuery - एक बहुत अच्छी तरह से (आंतरिक रूप से) प्रलेखित पुस्तकालय नहीं है, लेकिन एक प्रेरक स्रोत यह दर्शाता है कि क्लाइंट साइड जावास्क्रिप्ट कोड कैसे चमत्कार कर सकता है।

  • NodeJS - यदि आप सर्वर बनाने में लगे हैं तो इस परियोजना में ताज़गी से भरे नए विचार और पैटर्न हैं।

  • v8 - बहुत अच्छा C ++ कोड, वर्चुअल मशीन कार्यान्वयन को सीखने / अध्ययन करने के लिए शानदार पुस्तकालय।

  • NoSQL परियोजनाओं - काउच, मानगो, रेडिस, कैसेंड्रा - ये प्रोजेक्ट दृढ़ता समस्याओं को हल करने के लिए स्मार्ट तरीके प्रदर्शित करते हैं। इसके अलावा वे बहुउद्देशीय दृढ़ता के विचार को गले लगाते हैं।

  • पुस्तकालयों को बढ़ावा देना - सी ++ की अच्छी खुराक।

  • खुला ढेर - क्लाउड कंप्यूटिंग और वर्चुअलाइजेशन पर बहुत अच्छी परियोजनाएं।

  • अपाचे सॉफ्टवेयर फाउंडेशन - उनकी किसी भी परियोजना को चुनें और उसका अध्ययन करें। यदि आप यह देखना चाहते हैं कि कैसे घटक एक साथ आते हैं, तो HTTPd की मॉड्यूलर संरचना एक बेहतरीन स्रोत है। APR (अपाचे पोर्टेबल रनटाइम) - एक बहुत अच्छा काम भी।

  • mod_wsgi - मेरे द्वारा आये सबसे अच्छे C कार्यक्रमों में से एक।

"डिजाइन पैटर्न का अच्छा उपयोग" - कोड के लिए एक प्रसिद्ध डिजाइन पैटर्न के अनुरूप होना महत्वपूर्ण नहीं है - यह अधिक महत्वपूर्ण है कि यह समस्या को "स्मार्टली" हल करे - यह बनाए रखने योग्य, पुन: प्रयोज्य और पठनीय है। यदि कोड को एक विशेष "आकार" में ढाला गया है - तो बस एक डिजाइन पैटर्न का पालन करना - यह बुरा कोड हो सकता है।

"कम नहीं तो कोड की 100,000 पंक्तियाँ" - जब से लाइनों की संख्या अच्छी गुणवत्ता का एक मीट्रिक बन गई - "अच्छी तरह से डिज़ाइन / आर्किटेक्चर सॉफ़्टवेयर" का स्वाद प्राप्त करने के लिए इसे BIG होने की आवश्यकता नहीं है।

फिर से, समस्या डोमेन की प्रकृति और बारीकियों का अध्ययन करना याद रखें, और फिर कोड पढ़ने में देरी करें।

अद्यतन: अक्टूबर 2015

InfluxDB - https://influxdb.com/ यह गो परियोजना सक्रिय विकास के तहत है, और अभी भी बहुत जटिल नहीं है। तो आप OpenStack जैसी किसी चीज की तुलना में अपेक्षाकृत आसानी से कोड में खुदाई शुरू कर सकते हैं।


13

सिक्का उछालो। सभी बड़े ओपन सोर्स प्रोजेक्ट्स को जीवित रहने के लिए शानदार होना चाहिए। अपाचे, लिनक्स, जीएनयू प्रोजेक्ट सभी शानदार हैं।


4
सभी बड़े समुदाय द्वारा संचालित ओएसएस परियोजनाओं को जीवित रहने के लिए कम से कम सभ्य होना चाहिए। शानदार नहीं कहेंगे। ज्यादातर चीजों के लिए, सरकारी परियोजनाएं कर्मचारियों द्वारा विशेष रूप से की जाती हैं, कोड गुणवत्ता हमेशा प्राथमिकता सूची में सर्वोच्च चीज नहीं होती है। लेकिन आपके उदाहरणों के लिए +1।
TZHX

8
क्या Wordpress शानदार है?
आकर्षित किया

9
  • क्रोम
  • फ़ायरफ़ॉक्स
  • अमरीका की एक मूल जनजाति
  • माई एसक्यूएल
  • PostgreSQL
  • लिनक्स
  • जीएनयू

2
क्या आप सुनिश्चित हैं कि फ़ायरफ़ॉक्स 90 के दशक की शुरुआत में लिखे गए कोड के स्थिर टुकड़ों से अटे नहीं थे? यह आधुनिक कोडिंग प्रथाओं के अध्ययन के लिए कोड का एक अच्छा टुकड़ा नहीं लगता है
TheLQ

3
फ़ायरफ़ॉक्स और MySQL के लिए स्रोत कोड बकवास के भयानक टुकड़े हैं जिन्हें कभी भी अच्छे सॉफ़्टवेयर डिज़ाइन के उदाहरण के रूप में उपयोग नहीं किया जाना चाहिए।
जॉर्डन

7

अजगर। विशेष रूप से, सीपीथॉन, प्राथमिक कार्यान्वयन। संस्करण 3.2 के लिए, दुभाषिया सी कोड के लगभग 50k ढलान, पायथन कोड के 400k से अधिक मानक पुस्तकालय चलाता है। भाषा की अत्यंत उच्च गुणवत्ता और पठनीयता और अच्छे डिजाइन के सिद्धांतों को इसके प्रोत्साहन को देखते हुए, मुझे लगता है कि यह सभी कोड काफी अच्छा होगा।


4

मेटाफ़ॉन्ट के साथ TeX वास्तव में एक अध्ययन के लायक हैं: http://www.tug.org/

आपका स्थानीय पुस्तकालय स्रोतों के मुद्रित संस्करणों के साथ आपकी सहायता कर सकता है।


3

मैं एक ओपन सोर्स प्रोजेक्ट चुनने से पहले निम्नलिखित पुस्तक पढ़ने की सलाह दूंगा। यह आपको अच्छा / बुरा कोड माना जा सकता है।

ग्रेग विल्सन
सॉफ्टवेयर बनाना वास्तव में क्या काम करता है, और क्यों हम
ओपन सोर्स एप्लिकेशन के आर्किटेक्चर पर विश्वास करते हैं

यदि आप अपने http://blog.stackoverflow.com/2011/06/se-podcast-09/ को देखने से पहले लेखक को सुनने में रुचि रखते हैं तो यहां उनका ब्लॉग स्टैक एक्सचेंज साक्षात्कार भी है।

कुल मिलाकर उच्च गुणवत्ता वाले सॉफ्टवेयर को क्या माना जाता है? सवाल ही बहुत व्यक्तिपरक है। उपयोगकर्ताओं के पास गुणवत्ता के विभिन्न माप हैं। एक उपयोगकर्ता तकनीकी योग्यता के आधार पर सॉफ़्टवेयर पैकेज को उच्च गुणवत्ता वाला मान सकता है। जहां एक और उपयोगकर्ता उपयोगकर्ता इंटरफ़ेस के सौंदर्यशास्त्र और समग्र उपयोगकर्ता अनुभव के आधार पर गुणवत्ता का अनुमान लगा सकते हैं।

व्यवसाय के दृष्टिकोण से वे आम तौर पर सॉफ्टवेयर की गुणवत्ता को मापते हैं जो इस आधार पर होता है कि यह ग्राहक की अपेक्षाओं को पूरा करता है या वे ग्राहक के अनुबंध संबंधी दायित्वों को पूरा कर रहे हैं। पेशेवर आचरण भी है लेकिन यह इस बात पर निर्भर करता है कि आप बाड़ के किस तरफ से इसे देखते हैं।

एक प्रोग्रामर के दृष्टिकोण से, सॉफ्टवेयर के निर्माण के समय एपीआई का डिज़ाइन और निर्माण कितना सुरुचिपूर्ण है। एक ही डिजाइन या कोड मानक को अप्रभावी माना जा सकता है जब समय के साथ-साथ प्रोग्रामर्स के दृष्टिकोण और विचार बदलते हैं।


2

मैं IntelliJ सामुदायिक संस्करण का सुझाव दूंगा क्योंकि आप उल्लेख करते हैं कि आपको सॉफ्टवेयर टूल पसंद हैं।

http://www.jetbrains.org/

मुझे इसके बारे में क्या पसंद है:

  1. यह एक उपकरण है जो एक ढांचे के बजाय कुछ करता है
  2. वे वास्तव में स्टैटिक कोड विश्लेषण और डेटा प्रवाह विश्लेषण जैसी दिलचस्प चीजें करते हैं जिनके विवरण देखने के लिए मुझे वास्तव में सुखद लगता है।
  3. एक अच्छी बात यह है कि आप इसका उपयोग अपने अध्ययन को करने के लिए कर सकते हैं क्योंकि इसमें सभी कोड विश्लेषणों को स्वयं चलाने की क्षमता है।

(वास्तव में मैं एक JetBrains प्रशंसक हूँ)


2

मैं खुद इस तरह की परियोजना की तलाश कर रहा हूं, और इसके लिए तैयार हो गया हूं CLang

  • यह अपेक्षाकृत नया है (LLVM की संतान जो केवल 10 वर्ष की है), इसलिए नहीं (या नहीं जो मैंने देखा है) बासी कोड
  • एक मॉड्यूलर डिजाइन (एलएलवीएम के रूप में), बहुत अच्छी तरह से सोचा गया था, जो मुझे लगता है कि आजकल बहुत महत्वपूर्ण है
  • बहुत साफ कोड, अच्छी तरह से टिप्पणी की गई (आप अक्सर चीजों को समझाने के लिए मानक से उद्धरण देखते हैं)
  • एक बहुत अच्छी तरह से डिजाइन किए गए परीक्षण-सूट / परीक्षण-वातावरण

वहाँ कई डिज़ाइन पैटर्न नहीं हैं, कुछ आगंतुक यहाँ और वहाँ लेकिन इसके बारे में है। वर्ग पदानुक्रम सरल, और सीधे-आगे होते हैं ... वास्तव में, मुझे लगता है कि सादगी ही लक्ष्य है, ऐसा प्रतीत नहीं होता कि कोई ओवर-इंजीनियरिंग चल रहा है।

कहा कि, प्रदर्शन महत्वपूर्ण होने के नाते, कई डिजाइन निर्णय संदिग्ध लग सकते हैं (कई वस्तुओं के लिए आभासी कार्यों से बचना, आरटीटीआई / अपवादों के बिना संकलन), इसलिए हर चीज रोजमर्रा के सॉफ्टवेयर पर लागू नहीं होती है।


1

ब्लेंडर अच्छी तरह से संरचित और अच्छी तरह से डिज़ाइन किया गया है।



0

तो, बस एक और संस्करण - नेमारल प्रोग्रामिंग भाषा के बारे में क्या ?

यह इतना लोकप्रिय नहीं है (लेकिन GitHub ने सिर्फ नेमारल के लिए हाइलाइटिंग जोड़ा है) और आप वहां कई अच्छे बिंदु पा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.