समस्या को हल करने के लिए किस पुस्तकालय / ढांचे ने आपको बहुत जटिल बना दिया है? [बन्द है]


12

... और कार्यक्षमता "मैन्युअल रूप से" कोडित?

एक बल्कि उपमात्मक उदाहरण के रूप में, आपको द्विघात समीकरणों को हल करने के लिए एक पुस्तकालय की आवश्यकता होगी, हालांकि ऐसे पुस्तकालय मौजूद हैं और कोई भी इसे गंभीरता से लेता है।

अधिक संदिग्ध मामले के रूप में, परिस्थितियों के आधार पर मैं jQuery (उदाहरण के लिए जब मुझे कुछ पत्थर आयु ब्राउज़र का समर्थन करने की आवश्यकता नहीं है) पर निर्भर हो सकता है: यह कुछ चीजों को सरल करता है लेकिन यह DOM की जटिलता और अविश्वसनीयता की एक और परत जोड़ता है। और jQuery का अधिक उपयोग करने से बेतुकी समस्याएं पैदा होती हैं, जैसे कि हाल ही में SO पर देखा गया: मैं ajQuery के साथ टैग के लिए एक खाली href कैसे प्रदान करूं ? यह एक HTML प्रश्न था, जावास्क्रिप्ट भी नहीं।

एक और बेतुका मामला है और अभी तक कई लोगों के लिए गैर-स्पष्ट कुछ अस्थायी सिस्टम / भाषा का उपयोग कर रहा है जो किसी अन्य टेंपलेटिंग सिस्टम के ऊपर बनाया गया है: PHP। तीसरे स्तर के किसी को भी?

और एक और: कभी-कभी एक्सएमएल के साथ थूकना (लाक्षणिक रूप से) printfयह कुछ राक्षसी एक्सएमएल इंजन के साथ करने की तुलना में कहीं अधिक आसान है।

आपके अनुभव से कोई अन्य मामले?


4
किसी भी अन्य टूल की तरह, आप jQuery का उपयोग करते हैं जहां यह उचित है। यदि आपको कोई चाबी मिली है तो आप अपने सामने के दरवाजे को खोलने के लिए एक हथौड़ा और छेनी का उपयोग नहीं करते हैं।
रॉबर्ट हार्वे

1
@ रोबर्ट हार्वे: बेशक, लेकिन सॉफ्टवेयर इंजीनियरिंग में हमें अक्सर चाबियों और हथौड़ों को पहचानने में परेशानी होती है। यही पोस्ट के बारे में है।
मोजुबा

ध्यान रखें कि एक लोकप्रिय पुस्तकालय कितना भी जटिल क्यों न हो, यह आपके कस्टम "सरल" पुस्तकालय की तुलना में दूसरों के लिए समझने में आसान परिमाण का आदेश है, क्योंकि वे इसके लिए उपयोग किए जाते हैं।
लुई कोट्टमन

@RobertHarvey मेरा दरवाजा मेरे से बेहतर आकार में होना चाहिए।
जिमी हॉफ

जवाबों:


14

MS एंटरप्राइज़ लाइब्रेरी और अधिकांश 3 पार्टी नियंत्रणों के लिए .net ने थोड़े से उपयोग के बाद मुझे इस भावना के साथ छोड़ दिया है।

आपकी माइलेज भिन्न हो सकती है


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

शुरुआती दिनों में थलीब ने कुछ ऐसे सामान तैयार किए, जो शुरुआती रूपरेखाओं के साथ करना मुश्किल था या करना ... इन दिनों ऐसा लगता है कि शुरुआती दिनों में या तो आंशिक रूप से पिछड़ी हुई संगतता या आंशिक रूप से पके हुए समाधान जो आप भविष्य के रिलीज में देखते हैं। बेहतर रूप।
बिल

13

विंडोज कम्युनिकेशन फाउंडेशन

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

भविष्य की सभी परियोजनाओं में, मैं सिर्फ REST के साथ रहना चाहता हूं।


2
WCF 4.0 को किसी XML कॉन्फ़िगरेशन फ़ाइल की आवश्यकता नहीं है। मेरे पास अन्य तकनीकों के साथ अंतर के साथ कोई अनुभव नहीं है (एक ग्राहक के रूप में WCF का उपयोग करने के अलावा, जो अच्छी तरह से काम करता है), लेकिन मैं कह सकता हूं कि मैंने इसे आसान और सहज दोनों पाया। भले ही मैंने इसका इस्तेमाल बिना किसी किताब को पढ़े या बिना किसी प्रशिक्षण (और मिलने की समय सीमा के साथ) के बिना करना शुरू कर दिया, लेकिन मैं ग्राउंड रनिंग को हिट करने में सक्षम था।
एलन गुरेलनेक

4
मैंने "डब्ल्यूटीसीएफ" का नाम बदलकर "डब्ल्यूटीएफ" कर दिया है।
मेटलमेस्टर

1
@ सभी: मैं मानता हूँ कि मैंने WCF 4.0 की कोशिश नहीं की है, यह बहुत संभव है कि उन्होंने उस क्षेत्र में महत्वपूर्ण सुधार किए ...
डीन हार्डिंग

12

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

सरल उदाहरण: XML का उपयोग करने के लिए एक पुस्तकालय का उपयोग करने के लिए प्रिंटफ का उपयोग करना 10 गुना आसान हो सकता है:

printf("<xml>%s</xml>", str);

लेकिन क्या आपने विशेष पात्रों से बचना याद किया str? उदाहरण के लिए ' <' और ' &'? कुछ लोग कह सकते हैं "नहीं मैंने नहीं किया" और इसे लिखने के लिए आगे बढ़ें:

printf("<xml><![CDATA[%s]]></xml>", str);

लेकिन यह अभी भी टूटी हुई एक्सएमएल का उत्सर्जन करेगा यदि strइसमें ]]>कहीं भी सबस्ट्रिंग " " हो। किनारे का मामला - निश्चित। लेकिन फिर भी एक वैध परिदृश्य जो गंभीर परिणामों के साथ अप्रत्याशित समस्याएं पैदा कर सकता है।

कई बार और ऐसे स्थान होते हैं जहां "अपना खुद का रोल करना" उपयुक्त हो सकता है, लेकिन यह कभी-कभी उपयुक्त होने पर पहचानने के लिए बहुत अनुभव और ज्ञान लेता है। यही कारण है कि मैं अक्सर प्रोग्रामरों को स्वयं-कार्यान्वित दिनचर्या के बजाय स्थापित पुस्तकालयों (जहां उपलब्ध हो) का उपयोग करने के लिए प्रोत्साहित करता हूं।


11

log4net

पुस्तकालय अच्छा है, लेकिन प्रलेखन भयावह है। मैं जो करना चाहता था, वह उसके ऊपर हावी हो गया।

मैंने इसके बजाय ट्रेस का इस्तेमाल किया ।


1
रॉबर्ट, तुमने मुझे भी हरा दिया है कि तुम बदमाश हो! मैं बस log4net को देखता हूं और सोचता हूं "वाह, ये श्रोता शांत हैं। अब मैं इसका उपयोग कैसे करूं ..?" और फिर मुझे लगता है कि जब तक मुझे यह पता चल जाता है, तब तक मैं खुद लिख सकता था।
जॉनएल

5
वास्तव में - मुझे सम्मानपूर्वक असहमत होना होगा - यह log.error () की तुलना में कोई भी सरल नहीं मिलता है।
वॉटसन

3
@Watson: अगर यह वास्तव में सरल है, तो आपको एक रूपरेखा की आवश्यकता क्यों होगी?
रॉबर्ट हार्वे

मैं ऑब्जेक्ट गाय के विकल्प का उपयोग करता हूं, जिसे कॉन्फ़िगर करने में मिनट लगते हैं, लॉग 4नेट के अनावश्यक जटिलता से दूर रखा जाना चाहिए।
cjmUK

7

शेयर बिंदु

मुझे गलत मत समझो, यदि आप इसके साथ (और यह बहुत काम आता है!) की जरूरत वाली अधिकांश चीजों के लिए SharePoint भयानक है, लेकिन अगर आपको नहीं पता कि आप क्या कर रहे हैं या केवल एक या दो के लिए इसकी आवश्यकता है! चीजें, यह प्रयास और विन्यास के लायक नहीं है।


6

ASP.NET WebForms - हालाँकि .NET वेब डेवलपर के रूप में यह लंबे समय से मेरी रोटी और मक्खन रहा है, क्योंकि मैंने MVC फ्रेमवर्क का उपयोग करना शुरू कर दिया है (और PHP / स्मार्टी टेम्पलेट वातावरण से आ रहा है) - आपको लगता है कि कभी-कभी बस बेहतर होते हैं वेब विकास करने के तरीके और अमूर्तता जो इसका उपयोग करता है वह ओवरकिल और टपका हुआ है


मुझे लगता है कि आपको ASP.NET MVC से अलग ASP.NET WebForms से मतलब है। सही बात?
एरिक किंग

@ एरिक - हाँ सही है, मुझे इसे ठीक करना चाहिए!
वॉटसन

3

लगभग हर मामले में मैंने ऐसा किया है, मैंने इसे पछतावा किया है:

  • PHP oci_ * का उपयोग कर एक रैपर लाइब्रेरी के बजाय कोड मेंटेनेंस की वजह से एक खराब चाल बन गई। Zend_Db के लिए सभी कोड को पोर्ट करना, डेटाबेस कोड को बनाए रखना बहुत आसान बनाता है।
  • अपने स्वयं के अजाक्स ग्रिड घटक को रोल करना, जिसने आगे विकसित करने के लिए बहुत अधिक समय लिया, यह देखते हुए कि अन्य ग्रिड घटक कितनी तेजी से विकसित होते हैं। मैं वर्तमान में इसे सभी जेएस ग्रिड में पोर्ट कर रहा हूं क्योंकि उन लोगों के साथ थर्ड-पार्टी कार्यक्षमता का एक बड़ा द्रव्यमान उपलब्ध है।
  • प्रोटोटाइप और jquery जैसी पुस्तकालयों से बचने के कारण क्रॉस-ब्राउज़र मुद्दों की बार-बार होने वाली घटनाओं को ट्रैक करने के लिए अक्सर कठिन होता है। एक्सट जेएस पोर्ट ने मेरे क्रॉस-ब्राउजर को हल कर दिया है। यह जादू है, भले ही यह एक विशाल ढांचा हो, जिसे समझने में मुझे कई हफ्ते लग गए।

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


+1। और यह मदद करता है अगर उन पुस्तकालयों खुला स्रोत हैं। आगे बढ़ें और आपके द्वारा उपयोग किए जा रहे सभी पुस्तकालयों के लिए स्रोत कोड डाउनलोड करें, अगर आपने पहले से नहीं किया है। लाइब्रेरी के सोर्स कोड को पढ़ना समस्याओं का निदान करने और ठीक करने का एक शानदार तरीका है, साथ ही अन्य प्रोग्रामर्स (संभवतः काफी उच्च गुणवत्ता) कोड से सीखने का अवसर है।
मैक क्लार्क

2

System.Text.RegularExpressions

रेगेक्स इतना जटिल और इतना धीमा है। मैं शायद ही कभी रेगेक्स का उपयोग करता हूं और आमतौर पर अपने स्वयं के पाठ पार्सिंग और मिलान लिखता हूं।

कभी-कभी मैं वास्तव में जटिल मिलान के लिए रेगेक्स को उपयोगी पाऊंगा।


क्या आप regexp को ठीक से संकलित करते हैं [या शायद System.Text.RegularExpressions धीमा है तो पर्ल और सह। कार्यान्वयन]?
Maciej Piechotka

3
रेगेक्स मैनुअल स्ट्रिंग पार्सिंग की तुलना में अपेक्षाकृत धीमा हो सकता है, लेकिन यह बहुत से लोगों की तुलना में तेज है, और आमतौर पर अधिक व्यावहारिक अनुप्रयोगों के लिए पर्याप्त से अधिक तेज है।
माइक क्लार्क

2
मुझे नहीं लगता कि यह वास्तव में विशेष रूप से .NET कार्यान्वयन के बारे में एक शिकायत है, क्योंकि इसके बारे में कुछ भी विशेष रूप से जटिल या धीमा नहीं है (वास्तव में, मैंने इसे तेजी से उपलब्ध कार्यान्वयन में से एक पाया है)। कम से कम, यह मेरा अनुभव रहा है। बेशक, सामान्य रूप से नियमित अभिव्यक्ति आसानी से जटिल हो जाती है, और निश्चित रूप से लोगों के लिए पूरी तरह से अनुचित स्थानों में उनका उपयोग करने की प्रवृत्ति होती है।
डीन हार्डिंग

2

ऐसा नहीं है कि डेल्फी 4PHP को किसी भी बुरे प्रेस की आवश्यकता है, लेकिन मैंने इसे (संस्करण 2.0) की कोशिश की और इसे अपनी इच्छा पर झुकाना बेहद कठिन था। मैं प्रशिक्षण वीडियो देखने के लिए ग्राहकों के लिए एक youtube शैली वेब ऐप बनाने के लिए इसका उपयोग करना चाहता था, लेकिन यह बहुत बोझिल था और जब मैंने इसे PHP फ्रेमवर्क (VCL4PHP, Zend, Smarty और Recess) को संयोजित करने की कोशिश की, तो मैं अपरिहार्य, गोटे का नाम बदलकर भाग गया सब कुछ क्योंकि PHP 5 समस्या में कोई नामस्थान नहीं है।

कहा जा रहा है, मैं अंत में अपना रोल नहीं किया। मैंने बस अपनी गलतियों से सीखा और इसे बहुत सरल रखने और कोडआईग्निटर और फ्लोप्लेयर (JQuery के साथ) का उपयोग करने का फैसला किया।

मुझे एक ललक पैदा हुई है कि जो भी फ्रेमवर्क इसे PHP 5 से बाहर जीवित करता है, PHP 6 में कुछ भयानक फ्रेमवर्क होने वाले हैं जो वास्तव में एक साथ अच्छा खेल सकते हैं।


2

Weka

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

  1. यह अपने स्वयं के रहने योग्य सरणी को रोल करता है जो कुछ और उपयोग नहीं करता है, आगे और पीछे परिवर्तित करने वाले व्यस्तता की गारंटी देता है।

  2. अनुक्रमिक युग्मन के बहुत सारे जहां तरीकों को एक विशिष्ट क्रम में बुलाया जाना है और जब तक आप वास्तव में आरटीएफएम को ध्यान से नहीं करते हैं, तब तक आपको इसका एहसास नहीं होगा।

  3. हर उदाहरण के लिए एक इंस्टेंस ऑब्जेक्ट होना चाहिए, और मुझे एक एट्रिब्यूट ऑब्जेक्ट के साथ स्पष्ट रूप से घोषित करना होगा कि यह नाममात्र या संख्यात्मक है। इसके चलते बहुत से काम करने वाले व्यस्त डेटा को वीका चाहते हैं। यह विशेष रूप से कष्टप्रद है क्योंकि वीका एपीआई इतने सारे अपवाद फेंकता है कि कोड संकलन का मतलब यह नहीं है कि यह किसी भी तरह से काम करने की संभावना है। अगर मैं एपीआई को डिजाइन कर रहा था, तो मैंने जो कुछ भी स्वीकार किया है उसमें मैं उदार हो सकता हूं (शायद सिर्फ एक वस्तु ले सकता हूं) और मुझे जो भी मिला है उसका पता लगाने के लिए डेटा को आत्मनिरीक्षण करें और इसके साथ क्या करना सही है।


2

एक विशेष परियोजना पर मैंने EJB3 को खोदा। इसने मुझे निर्भरता इंजेक्शन और कंटेनर प्रबंधन लेन-देन से निपटने दिया। लेकिन इसने बहुत अधिक निर्भरता (जैसे JBoss) का परिचय दिया और सिस्टम के लिए स्वचालित परीक्षण लिखना मुश्किल बना दिया। अब मैंने इसे JPA + कंस्ट्रक्टर डिपेंडेंसी इंजेक्शन से हटा दिया है।


1

एक ऐप पर डिबग पोर्ट पर HTML बाहर थूकना। मुझे कुछ वर्तमान डेटा (स्वचालित रिफ्रेशिंग के साथ) प्राप्त करने के लिए कुछ सरल तरीके की आवश्यकता थी। एक पुस्तकालय में इसे प्रारूपित करने के लिए खींचना अच्छा होगा, लेकिन इसे सिर्फ प्रिंट करना आसान था।

मैंने दूसरे के लिए पुस्तकालय को भी अस्वीकार कर दिया है: हम अपने अधिकांश सामानों में एक बड़े, जटिल XML पुस्तकालय का उपयोग करते हैं। एक दिन में 4 घंटे बिताने के बाद इसे एक नए ऐप में काम करने की कोशिश करने के लिए, मैंने अभी 'बैग इट' कहा, और टाइनीएक्सएमएल में खींच लिया। यह ऐसा नहीं है जहां शक्तिशाली के रूप में निकट है, लेकिन यह साधारण सामान बनाने के लिए बहुत कम प्रयास करता है।


1

हाल ही में मैं एक स्क्रिप्टिंग भाषा संकलक पर काम कर रहा हूं जिसे मैं अपने अनुप्रयोगों में उपयोग कर सकता हूं। मैंने दूसरों का उपयोग किया है, लेकिन कोई भी ऐसा नहीं करता है जो मुझे करने की आवश्यकता है। तो मुझे लगा कि क्यों न मैं खुद लिखने की कोशिश करूं? यह सामान्य उपयोग के लिए वास्तव में उपयुक्त होने से पहले एक या दो साल हो सकता है, लेकिन यह ठीक है। इसके अलावा, यह एक महान सीखने का अनुभव है।

एक अन्य 'मेरा अपना रोल' समाधान मेरे अनुप्रयोगों का अनुवाद करने के लिए उपयोग किए जाने वाले टुकड़े हैं। वहाँ मौजूदा पुस्तकालयों है, लेकिन मैं उनमें से किसी की तरह नहीं था। इसलिए मैंने अपना खुद का बना लिया।

और डेल्फी के डेटाबेस घटक। मुझे नफरत है। हमेशा होना चाहिए। इसलिए मैंने अपना खुद का डेटाबेस इंटरफ़ेस बनाया जो काम करने के तरीके से काम करना चाहता है (और ठीक उसी तरह जैसे मैंने PHP के कामों के लिए बनाया है, जिससे भाषाओं में कोडिंग आसान हो जाती है)।

मूल रूप से, जब कोई विकल्प दिया जाता है, तो मैं आम तौर पर अपना खुद का पुस्तकालय बनाता हूं।


मुझे पता है कि आपका क्या आशय है। मैं आपको होम-ब्रुस्ड STL, DB abstraction, संपूर्ण भाषाओं को उनके संकलक या दुभाषियों के साथ, और क्या नहीं, का एक पूरा शस्त्रागार दिखा सकता हूँ। यह आमतौर पर आपके सहकर्मियों और प्रबंधन द्वारा स्वागत नहीं किया जाता है, लेकिन क्या प्रोग्रामर, जिन्होंने कभी कोई कंपाइलर नहीं लिखा, भले ही किसी को इसकी परवाह न हो?
मोजुबा

0

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

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