मैं अपने बॉस को कैसे मना सकता हूं कि ANSI C हमारे नए प्रोजेक्ट के लिए अपर्याप्त है? [बन्द है]


64

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

हमारे बॉस ने लगभग 30 साल पहले स्नातक किया था (अपराध के रूप में नहीं लिया जाना चाहिए; मेरे पास मेरी पीठ पर भी उस समय का आधे से अधिक समय है) और यह अनिवार्य किया है कि हम इस आवेदन को एएनएसआई सी में विकसित करें। तर्क यह है कि वह केवल एक ही है। पूरे समय के आसपास रहेगा, और इसलिए वह यह समझने में सक्षम होना चाहिए कि हम क्या कर रहे हैं। उन्होंने यह भी फैसला किया कि हमें कोई सार डेटा प्रकार का उपयोग नहीं करना चाहिए; यहां तक ​​कि उसने हमें वैश्विक चर (आह) के नाम के साथ एक सूची दी, जिसका वह उपयोग करना चाहता है।

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

अगले हफ्ते हम दोनों को स्रोत कोड पर जाने के लिए मिलेंगे, ताकि वह "यह जान सके कि इसे कैसे बनाए रखा जाए"। मुझे डर लगता है, और मैं आप लोगों से सुनना चाहूंगा कि मैं अपने फैसले का समर्थन करने के लिए क्या तर्क दे सकता हूं।

कायर तुम्हारा,


220
"अरे नहीं, यह अंतिम संस्करण नहीं है, यह सिर्फ एक सी # संस्करण है जिसे हमने प्रोटोटाइप और परीक्षण के लिए कुछ दिनों में जल्दी से लिखा है, यह सुनिश्चित करने के लिए कि हम आवश्यकताओं को समझते हैं और UI को ट्यून करते हैं। इसे ANSI C में लागू करेंगे। एक और एक्स सप्ताह, क्योंकि, आप जानते हैं, हमें उन सभी फैंसी डेटा संरचनाओं के नहीं होने के आसपास काम करना होगा। ... ठीक है, हाँ, अब जब आप इसका उल्लेख करते हैं, तो सी # संस्करण पहले से ही वह सब कुछ करता है जो अंतिम कार्यक्रम को करना चाहिए, लेकिन आपने कहा आपको एएनएसआई सी में इसकी आवश्यकता है ... ठीक है, अगर आप जोर देते हैं, तो आइए इस संस्करण के साथ
बने रहें

8
@ हिनजी: मेरे पास एक ही अनुभव है: एक सी # लाइब्रेरी का 2 दिनों में प्रोटोटाइप लिखना, और सी में इसे फिर से लिखने में कई हफ्ते बिताना। सौभाग्य से, उस परियोजना के बाद, मुझे एक और टीम के साथ एक और स्थानान्तरण करने का मौका मिला। समझदार भाषा विकल्प।
dan04

49
वैश्विक चर और धागे? आपके द्वारा उपयोग की जा रही प्रोग्रामिंग भाषा की परवाह किए बिना, आप मेरे मित्र, मुसीबत में हैं।
निमंजा ट्रिफ़ुनोविक

16
आपको वास्तव में तर्क की आवश्यकता है कि आपको अपनी नौकरी क्यों रखनी चाहिए।
एपो

11
आपकी धारणा गलत है - ANSI C लगभग सभी परियोजनाओं के लिए पर्याप्त है । यही कारण है कि यह इन सभी वर्षों के बाद भी लोकप्रिय है। यह इष्टतम है या नहीं यह एक अलग सवाल है।
रैनसम

जवाबों:


108

ध्यान दें कि "कृपया इसे ऐसे करें ताकि मुझे यकीन है कि मैं इसे बनाए रख सकता हूं " वास्तव में एक बहुत अच्छी आवश्यकता है - अधिकांश कार्यक्रमों को लिखे जाने की तुलना में बहुत अधिक समय तक खर्च किया जाता है और किसी ज्ञात तकनीक में समाधान रखना आमतौर पर एक अच्छा विचार है।

ज़रा सोचिए कि C # एप्लिकेशन लिखने के लिए कहने पर कुछ नए कंप्यूटर के बच्चे ने इसे दो दिनों में हास्केल में लिखा और कहा "अरे, यह काम करता है और मैं चला गया, अलविदा" आप पर रखरखाव छोड़ रहा है।

जरा सोचिए कि 15 साल पहले ANSI C एप्लिकेशन लिखने के लिए पूछे जाने पर कुछ नए कंप्यूटर के बच्चे ने इसे दो दिनों में विजुअल बेसिक 6 में लिखा था और इसे छोड़ दिया था। अब आपको इसे बनाए रखना है और विंडोज 7 इंस्टॉलेशन मीडिया सम्मिलित होने पर पहले से ही शिकायत करना शुरू कर देता है

यह कहने का एक अच्छा अवसर हो सकता है - जैसा कि हेंजजी ने टिप्पणियों में संकेत दिया है - "यह एक त्वरित प्रोटोटाइप है जो C # में लिखा गया है जो सी की तरह बहुत अधिक देखने के लिए होता है - क्या हम इसे तैयार करते हैं, या आप जैसे ANSI में इसे फिर से लागू करेंगे। पूछा ", और फिर अब चर्चा करें। देखने के लिए वास्तविक स्रोत होने के कारण, "अरे, इससे बेहतर है कि हम अपना अगला आवेदन हास्केल में न लिखें क्योंकि यह अधिक तेज़ है"।

दूसरे शब्दों में - अब आपके पास यह प्रदर्शित करने का अवसर है कि एक नए मंच पर विचार किया जा सकता है। ऊपर लाएँ कि आपने कोड समीक्षा से पहले एक प्रोटोटाइप लिखा था - यह उस छाप को हटाने में मदद करेगा, जिसे आप रडार के नीचे C # चुपके करने की कोशिश कर रहे हैं। मेरा सुझाव है कि आप यह भी प्रदर्शित करें कि ANSI C में लिखे गए सभी मौजूदा कोड C # के भीतर से उपयोग किए जा सकते हैं। व्यक्तिगत रूप से मेरा मानना ​​है कि आपको बताया जाएगा कि एक ही मंच में रहने के लिए लक्ष्य ANSI C रहता है।


26
+1: आवश्यकता को इंगित करने के लिए "इसे इस तरह से करें ताकि मुझे यकीन है कि मैं इसे बनाए रख सकता हूं"। C # (सामान्य रूप से) विकसित करने के लिए C की तुलना में C बहुत आसान / तेज़ है, लेकिन C पिछले 30 वर्षों में C # से कम पिछले 15 वर्षों में बदल गया है। तो ऐसे उत्पाद के लिए जिसे कई वर्षों तक बनाए रखना पड़ता है C बेहतर अनुकूल हो सकता है। आपको सभी आवश्यकताओं के बीच समझौता करना होगा: परियोजना की जटिलता (सी # शायद एक बेहतर विकल्प है), दीर्घकालिक रखरखाव (सी अधिक स्थिर लगता है), जो रखरखाव करने जा रहा है, आदि
जियोर्जियो

4
@ रामधुन मैं वीबी 6 सपोर्ट के बारे में बात नहीं कर रहा हूं, लेकिन विजुअल बेसिक 6 डेवलपमेंट एनवायरनमेंट को सपोर्ट करने के बारे में । स्थापना मीडिया को सम्मिलित करते समय विंडोज 7 की मेरी प्रति ने मुझे स्पष्ट रूप से सूचित किया कि यह एक अच्छा विचार नहीं था।

12
अच्छे अंक, लेकिन क्या होगा अगर बॉस ने इसके लिए COBOL में लिखा जाए? या 6502 विधानसभा? आप किस बिंदु पर अपने बॉस से कह सकते हैं, "वह भाषा इस उद्देश्य के लिए अप्रचलित है, और एक बार आपके जाने के बाद कोई भी ऐसा व्यक्ति नहीं रहेगा जो इस सामान को समझता है"?
चींटी

6
@ एलेक्स: संगति अच्छा है, सच है। लेकिन क्या आप C में एक नया वेब सिस्टम लिखेंगे यदि आपके विभाग द्वारा लिखे गए अन्य सभी (गैर-वेब) सॉफ्टवेयर सी में लिखे गए थे? मुझे लगता है कि यह सिस्टम के लिए उपयुक्त तकनीकों को चुनने के बीच संतुलन के लिए आता है जो आप टीम के मौजूदा कौशल बनाम लिख रहे हैं। बिना किसी विचार-विमर्श के किसी भाषा को चुनना क्योंकि वह जो आप हमेशा उपयोग करते हैं वह हानिकारक हो सकता है।
एंटी

8
@ant, वह जो बैंड का भुगतान करता है उसे संगीत चुनने के लिए मिलता है। (और हम एक COBOL दुकान हैं - कोई समस्या नहीं जो समर्थन कर रही है)

35

आपका बॉस इस मामले में आपका ग्राहक प्रतीत होता है, और उसकी प्राथमिक आवश्यकता यह है कि जब आप आगे बढ़ते हैं तो वह एप्लिकेशन को बनाए रखने में सक्षम होता है। यह काफी उचित लगता है।

तो, चुनाव वही करना है जो वह पूछता है, या प्रदर्शित करता है कि आप विकास को पूरा कर सकते हैं और उसे सिखा सकते हैं कि समय की कमी के भीतर और कम लागत पर एक सी # आवेदन कैसे बनाए रखा जाए। यदि आप ऐसा नहीं कर सकते, तो आप परियोजना की आवश्यकताओं को पूरा नहीं कर रहे हैं।


21
ओपी ने अधिसूचना या चर्चा के बिना स्पष्ट रूप से आवश्यकताओं की अनदेखी की। बॉस एक वाणिज्यिक ग्राहक थे जो भुगतान को मना कर सकते थे और संभवतः समय बर्बाद होने के कारण लागत के लिए मुकदमा कर सकते थे। भूमिकाओं को उल्टा करें, क्या होगा यदि आपने उदाहरण के लिए एक बिसपोक सूट का आदेश दिया और पाया कि दर्जी ने आपके द्वारा निर्दिष्ट किए गए कपड़े के साथ काम करना पसंद नहीं किया, जो उसने पसंद किया था, रंग की पसंद में? ओपी की समस्या अब यह है कि वह बिना किसी करीबी पर्यवेक्षण के परियोजनाओं पर भरोसा नहीं कर सकता है, लोकतंत्र में लोगों के कौशल की कमी है और प्रबंधन के लिए कोई सम्मान नहीं है।
ईपीओ

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

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

26

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

यह तेज है, पोर्टेबल है (मैंने कभी भी C # नहीं लिखा है लेकिन मुझे नहीं लगता कि यह स्थापित किए गए फ्रेमवर्क के किसी विशेष संस्करण के बिना काम करता है और यह आमतौर पर केवल विंडोज़ है)।

हर तरह से आप GUI करने के लिए दूसरी भाषा का उपयोग कर सकते हैं। लेकिन आप अपने आप को प्रयास को बचा सकते हैं और बस पहले से चल रहे ट्रेंडिंग पैकेज का उपयोग कर सकते हैं (कुछ अच्छे ओपन सोर्स उपलब्ध हैं)।

संक्षेप में मैं हार्डवेयर भाग C के साथ अंतर्निहित इंटरफेसिंग के लिए कहूँगा एक अच्छा विकल्प है।


7
मेरे पास C + कोड के साथ विंडोज से लिनक्स (मोनो का उपयोग करके) से C # कोड को पोर्ट करने में अधिक सफलता मिली है।
dan04

8
@ dan04: आपको C ++ में क्या समस्याएँ थीं? मुझे लगा कि C ++ काफी पोर्टेबल होगी। इसके अलावा, सी ++ सी नहीं है। मैं हमेशा जीएनयू सी लाइब्रेरी के साथ सी का उपयोग करते हुए पाया गया, जैसे कि जीएनयू लिनक्स और साइबरविन के बीच।
जियोर्जियो

4
@ dan04 C! = C ++।

2
@ जियोर्जियो: एक गुस्सा बड़े पैमाने पर यह तार था। हमें सभी विंडोज-विशिष्ट TCHARबकवास (जो हम वैसे भी लगातार उपयोग नहीं कर रहे थे) को बाहर निकालना पड़ा और लिनक्स संक्रमण के रूप में उसी समय UTF-8 का उपयोग करने के एक टीम मानक को अपनाया । दुर्भाग्य से, यह आवश्यक था कि विंडोज पर मानक पुस्तकालय का एक बड़ा हिस्सा फिर से लागू boost::nowideहो, समय पर अस्तित्व में नहीं था।
dan04

3
@ dan04: जैसा कि कहा गया है, C निश्चित रूप से C # (या उस मामले के लिए C ++) के रूप में अभिव्यंजक नहीं है, लेकिन मैं 1997 से GNU C लाइब्रेरी ( gnu.org/software/libc ) का उपयोग कर रहा हूं और यह वास्तव में स्थिर और पोर्टेबल है। सी ++ के लिए मैं क्यूटी (या बढ़ावा और मानक पुस्तकालयों) को देखूंगा क्योंकि वे काफी पोर्टेबल हैं। यदि संभव हो तो मैं विंडोज-विशिष्ट सामान से बचूंगा: AFAIK यह कभी Microsoft का लक्ष्य नहीं था कि वह पोर्टेबल सॉफ्टवेयर का उत्पादन करे क्योंकि ग्राहक लॉक-इन उनकी मार्केटिंग रणनीति का हिस्सा है।
जियोर्जियो

24

ओह प्रिय। यह एक वास्तविक समय अनुप्रयोग है? वास्तविक समय में उपकरणों को नियंत्रित करना? वास्तविक समय में डेटा इकट्ठा करना? कचरा बीनने वाले के साथ भाषा का उपयोग करना? ओह प्रिय।

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

मैंने आपको C # या पायथन में एक प्रोटोटाइप बनाने का सुझाव दिया होगा, बस मुख्य कार्यक्षमता और UI का परीक्षण करने के लिए। जब यह ऐप कई दिनों तक लगातार चलने वाले डेटा के साथ हिट हो जाता है, तो वास्तविक विलंबता और प्रतिक्रिया समय को मापते हुए, इसे बाहर निकाल दें। ऑड्स हैं, ऐप बहुत धीमा हो सकता है या यादृच्छिक समय में पीछे रह सकता है, जब वीएम या कचरा कलेक्टर अंदर किक करता है।

मैं आपको सुझाव देता हूं कि आपने एक PROTOTYPE के रूप में क्या किया है।

C में कोडिंग उतना कठिन नहीं है। यदि आप इसके लिए तैयार नहीं हैं, तो ऐसा कहें। चुनौती के लिए हम में से बहुत कुछ है। (मैं वास्तविक समय सी कोडिंग के लिए कर रहा हूँ, argh, अब दशकों)।


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

आपने स्पष्ट रूप से जो डफी के काम के बारे में नहीं सुना है । वह कम से कम 2013 से C # में सिस्टम प्रोग्रामिंग पर काम कर रहा है । रोसलिन संकलक मूल कोड में संकलित कर सकता है (कि यूडब्ल्यूपी कैसे काम करता है) और कचरा संग्रह एक मुद्दा नहीं है यदि आप क्या कर रहे हैं पर ध्यान दें।
रबरकप

14

ठीक है, पहली बात यह है कि अपने मालिक के पास जाओ और उपद्रव करो। आपने उनके स्पष्ट अनुरोध की अवहेलना की है, और महीनों से बदतर कर रहे हैं। मुझे नहीं पता कि आपको इसमें कितना समय मिला है, लेकिन यह मानते हुए कि इस परियोजना को पूरा करने के लिए सबसे अधिक समय आवंटित किया गया है, आपको इस तथ्य का सामना करना होगा कि आप जल्द ही एक नई नौकरी की तलाश में हैं।

जितनी जल्दी आप इससे बेहतर तरीके से निपटेंगे।

दूसरे, मुझे नहीं लगता कि आप उसे समझा सकते हैं कि एएनएसआई सी अपर्याप्त है, आपको जो करने की ज़रूरत है वह उसे कई अन्य चीजों (1) से समझाने की है कि सी # पर्याप्त है, (2) वह आसानी से सी #, (3) बनाए रखना सीख सकता है ) कि आप इसे सी में लिखने के लिए अयोग्य थे। यह मानते हुए कि आपके पास अभी भी एक नौकरी है और इस परियोजना के साथ खेलने का एक हिस्सा है, मैं 2 पर ध्यान केंद्रित करूंगा, सी और सी # के बीच की समानता पर जोर देना।

टिप्पणियों के जवाब में उद्धरण ...

कुछ महीने पहले, हमने एक ऐप विकसित करना शुरू किया [...] कुछ दिनों के बाद, मैंने पूरी चीज़ को हटा दिया और नए सिरे से # का उपयोग करना शुरू कर दिया।


कहीं भी उसने उल्लेख नहीं किया कि वह महीनों से C # संस्करण बना रहा था?
बेनामी

1
@ अज्ञात - इससे कोई फर्क नहीं पड़ता कि यह दिन था या महीने वह अभी भी अपने प्रबंधकों के निर्देशों का पालन नहीं करता था। लेखक के पास स्पष्ट रूप से एएनएसआई सी में आवेदन को विकसित करने के लिए आवश्यक कौशल नहीं था
रामहाउंड

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

@jmoreno - माफी, मुझे इस सवाल का गलत मतलब निकालना चाहिए था।
बेनामी

2
@jmoreno - बिल्कुल। आपने जो उद्धरण जोड़ा है, उसे देखने के बाद मैंने अपनी अंतिम टिप्पणी पोस्ट की। एक बार फिर माफ़ी।
अनाम

12

यह अनिवार्य है कि हम इस एप्लिकेशन को ANSI C. में विकसित करें। तर्क यह है कि वह एकमात्र ऐसा है जो पूरे समय के आसपास रहेगा, और इसलिए उसे यह समझने में सक्षम होना चाहिए कि हम क्या कर रहे हैं।

यह एक बहुत ही उचित आवश्यकता है।

उन्होंने यह भी फैसला किया कि हमें कोई सार डेटा प्रकार का उपयोग नहीं करना चाहिए;

इसका कोई मतलब नहीं है। अब यह थोड़ा संदिग्ध लगने लगा है, क्योंकि यह एक प्रोग्राम डिजाइन की आवश्यकता है न कि भाषा की आवश्यकता। यदि कोड को बनाए रखने में आसान होना चाहिए, तो ADT को लागू करना या अच्छी तरह से परीक्षण का उपयोग करना, पहले से मौजूद लोगों की प्राथमिकता होनी चाहिए।

यहां तक ​​कि उसने हमें वैश्विक चर (आह) के नाम के साथ एक सूची दी, जिसका वह उपयोग करना चाहता है।

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

मैं अनुमान लगा रहा हूं कि आपका बॉस कभी भी बड़े पैमाने पर, मिशन क्रिटिकल सॉफ्टवेयर प्रोजेक्ट्स में शामिल नहीं हुआ है, लेकिन वह विभिन्न निम्न-गुणवत्ता वाले लोगों के आस-पास तैर रहा है।

इसलिए इसका प्रोग्रामिंग लैंग्वेज सी से कोई लेना-देना नहीं है। आप आसानी से C # में समान रूप से icky प्रोग्राम लिख सकते हैं। यह मानना ​​एक बहुत ही सामान्य गलती है कि अच्छा प्रोग्राम डिज़ाइन भाषा पर निर्भर करता है। यह बिल्कुल भी सच नहीं है!

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

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


1
+1 के लिए "आप C # में भी समान रूप से icky प्रोग्राम आसानी से लिख सकते हैं।"
जेवियर

11

पहला मुद्दा जो आपको संबोधित करना है वह भावनात्मक, तर्कहीन है। आईटी उद्योग निरंतर परिवर्तन में एक है और, हालांकि हर चीज के लिए जगह हैं, सुधार में बदलाव या गले लगाने से इनकार करना एक समस्या है।

आपका बॉस ANSI C से क्यों जुड़ा हुआ है? यदि वह एकमात्र ऐसी भाषा है जिसे वह जानता है या जानता है तो शायद यह बदलाव का समय है, लेकिन तर्कसंगत तर्क अपर्याप्त हो सकता है। क्या आपके बॉस को किसी अपरिचित भाषा में काम करने के लिए मजबूर किया गया है, जो बिना सोचे समझे या संभवतः निकाल दिया जाएगा? उस अनुभव पर जोर दें जो उसके पास है और अन्य लाभ जो वह लाता है।

यदि आप इस समस्या को हल नहीं करते हैं, तो आपके द्वारा लाए जाने वाले सभी तर्कसंगत तर्क व्यर्थ हो जाएंगे। एक अधीनस्थ के रूप में, आप वह नहीं हो सकते हैं जिसके साथ यह चर्चा हो सकती है। शायद इस विषय को दूसरे प्रबंधकों में से किसी एक के पास भेज दिया जाए, यदि कोई हो।

अपने दृष्टिकोण से भी इस पर विचार करें। आप C # का उपयोग क्यों करना चाहते हैं? यह कुछ नया और शांत उपयोग करने की कितनी इच्छा है? खुद के साथ ईमानदार हो। यदि आप इसे पहचानते हैं, तो यह आपको अधिक प्रभावी ढंग से बहस करने में मदद करेगा।

दूसरा मुद्दा जोखिम और लागत में से एक है। सॉफ्टवेयर लिखना महंगा है और भाषा का चुनाव इसमें एक प्रमुख कारक है। विचार करें:

  1. C # बनाम C में लिखने में कितना समय लगेगा? आसान वस्तु अभिविन्यास और बेहतर कचरा संग्रह के साथ, C # आसान हो सकता है। हालाँकि, यदि एप्लिकेशन अप्रबंधित API कॉल का बहुत उपयोग करता है, तो C आसान हो सकता है।
  2. यदि आप C # का उपयोग करते हैं, तो क्या आपको अतिरिक्त टूल खरीदने की आवश्यकता है? ऐसा लगता है कि आप पहले से ही विज़ुअल स्टूडियो का उपयोग करते हैं, लेकिन क्या आपको स्थानीयकरण, कोड समीक्षा और विश्लेषण, डीबगिंग और इतने पर अतिरिक्त उपकरणों की आवश्यकता है?
  3. इसे बनाए रखना कितना आसान है? यदि आप बग ढूंढते हैं, तो इसे कितनी जल्दी ठीक किया जा सकता है। C # इस ऑब्जेक्ट ओरिएंटेशन को कम कर सकता है। स्वचालित कचरा संग्रह भी अधिकांश मेमोरी लीक और पॉइंटर मुद्दों से बचा जाता है।
  4. समर्थन करना कितना आसान है? यदि आपके पास सहायक कर्मचारी हैं, तो वे क्रैश डंप को पढ़ना जान सकते हैं लेकिन क्या वे जानते हैं कि एसओएस के साथ विंडबग का उपयोग कैसे करें? क्या लक्ष्य मशीनों में पहले से ही .Net फ्रेमवर्क का उपयुक्त संस्करण है?
  5. स्टाफिंग पर विचार करें। C बनाम C # को कितने लोग जानते हैं? यदि आप या दोनों ने संगठन छोड़ दिया है, तो आपको प्रतिस्थापित करना कितना आसान होगा? क्या C डेवलपर्स, C # डेवलपर्स की तुलना में सस्ता या महंगा है?

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

शायद C बेहतर विकल्प है। C # सभी स्थितियों के लिए स्वचालित रूप से बेहतर नहीं है। हो सकता है कि आप इस परियोजना को C का उपयोग कर रहे हों, लेकिन अगले एक के लिए C # अवधारणा का प्रमाण दें। याद रखें आप युद्ध हार सकते हैं लेकिन फिर भी युद्ध जीत सकते हैं।


5
मैं अंतर्निहित धारणा से असहमत हूं कि C # डिफ़ॉल्ट रूप से ANSI C. से बेहतर विकल्प है। उदाहरण के लिए यदि आप प्लेटफ़ॉर्म से स्वतंत्र रहना चाहते हैं तो C # सबसे बुरा विकल्प है।

@ ThorbjørnRavnAndersen मैं सहमत हूं। कृपया अंतिम पैराग्राफ देखें। मैं मानवरहित कोड को कॉल करने जैसे मामलों का भी उल्लेख करता हूं। मुझे लगता है कि मंच की स्वतंत्रता ने ओपी में सी # को बाहर कर दिया होगा। शायद यह एक गलत धारणा है।
अकटन

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

@akton - जब से आप C # से अनवांटेड कोड को कॉल नहीं कर सकते। बेशक इसके लिए एक रैपर की आवश्यकता होती है और यह अतिरिक्त समर्थन समस्याओं का परिचय देता है लेकिन यह संभव है। इसके अलावा यदि आप चाहें तो आप मल्टी प्लेटफॉर्म पर C # का समर्थन कर सकते हैं। मोनो हर प्रमुख डेस्कटॉप प्लेटफॉर्म (ओएस एक्स, विंडोज और लिनक्स) पर समर्थन करता है। Microsoft Windows आधारित .NET फ्रेमवर्क के रूप में दी गई यह सलाह देती है कि मोनो का फीचर बेस इसे बिल्कुल मेल नहीं खाएगा (जो कि पहले से ही WPF के साथ है) और निश्चित रूप से आप लिनक्स पर चलने वाले मेट्रो एप्लिकेशन को विकसित नहीं कर पाएंगे। बेशक इसकी संभावना नहीं है कि इस मामले में किया जाएगा।
रामहाउंड

@ राममाउंड मैंने यह नहीं कहा कि आप सी # से अनवांटेड कोड को कॉल नहीं कर सकते, बस यह बहुत दर्द हो सकता है। इसी तरह, आप C # में क्रॉस प्लेटफॉर्म डेवलपमेंट कर सकते हैं, लेकिन C लगभग यूनिवर्सल है, जैसा कि थोरबॉर्न ने कहा।
अकटन a

7

शायद एक और तर्क: कंप्यूटर विज्ञान के छात्रों को खोजने के लिए शायद बहुत मुश्किल है, जिनके पास गलतियों को बिना सी कोड लिखने के लिए पर्याप्त अनुभव है। एएनएसआई सी पहली चीज नहीं है जो आज लोग सीखते हैं।

अब सभी कंप्यूटर विज्ञान के छात्र मुझे मार देंगे।


एएनएसआई सी वास्तव में कॉलेज में सीखी गई पहली चीजों में से एक थी। मैंने 2004 में शुरू किया था। इसलिए पिछले 10 वर्षों के भीतर यह अभी भी पढ़ाया जा रहा था। मैंने SSH के माध्यम से जुड़े कई लेट नाइट्स को एक यूनिक्स वातावरण से जोड़कर अपने कोड को संकलित करने की कोशिश की।
रामऔंध

1
मजेदार, मैंने विश्वविद्यालय में अपने अंतिम वर्ष तक एएनएसआई सी नहीं सीखा। सिखाई गई पहली भाषा पास्कल थी, ताकि मैं सुरक्षित
रहूँ

यहां हाल ही में स्नातक; हमारे पास C और C ++ दोनों के लिए जोखिम था, हालांकि C एक एम्बेडेड संदर्भ और न्यूनतम में था। दोनों मेरे अंतिम वर्ष में थे - विशुद्ध रूप से सी # और उससे पहले जावा।
रोस

2
सी बस सही प्रोग्राम करने के लिए मुश्किल हो रहा है शायद सी का उपयोग करने के खिलाफ सबसे अच्छा बिंदु है
पॉल नाथन

7

आप हमें समझाने में पूरी तरह से विफल रहे हैं कि ANSI C अपर्याप्त था। सी एक उत्कृष्ट भाषा है जिसे आपके द्वारा वर्णित कार्यों के लिए अनुकूलित लगता है। कार्य के संक्षिप्त विवरण (भाषा की आवश्यकता को छोड़कर) के साथ, मैं सी (या शायद जाना) की भी सिफारिश करूंगा।

मुझे लगता है कि समस्या यह है कि आप C में अपने दिमाग से C # में सोच रहे थे। मुझे एक समान समस्या है जब मैं पर्ल से सी या जावा पर स्विच करता हूं। आपको भाषा के अनुकूल होना सीखना चाहिए, और दिन की भाषा के प्रति अपने सोचने के तरीके से अनुवाद करना नहीं सीखना चाहिए।

समस्या आपके बॉस या सी भाषा की नहीं है, समस्या आपके दिमाग को सोचने के विभिन्न तरीकों की ओर खोलने की है। प्रोग्रामिंग भाषा को बदलना कुछ ऐसा है जो आपको लाभान्वित करेगा।


4
स्टैक एक्सचेंज प्रोग्रामर्स पर आपके पहले प्रश्न का उत्तर देने के लिए धन्यवाद। हालांकि, आप "आप पूरी तरह से विफल हो गए हैं", "समस्या अपने दिमाग को खोलने के लिए" जैसे वाक्यांशों का उपयोग करके अपने भविष्य के जवाबों को थोड़ा कम व्यक्तिगत बनाने की इच्छा हो सकती है। कृपया FAQs प्रोग्रामर की समीक्षा करें ।stackexchange.com/faq# etiquette । मुझे लगता है कि आप तटस्थ भाषा के साथ अपनी बात का अच्छा वर्णन कर सकते हैं।
DeveloperDon

2

सबसे पहले, आपको अपने बॉस को यह बताने की ज़रूरत है कि वह अब एक अलग भाषा में है। यदि आप बिना किसी सूचना के आवश्यकताओं के विरुद्ध उद्देश्यपूर्ण ढंग से कुछ वापस लाते हैं तो वह (बोधपूर्वक) क्रोधित होगा।

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

यह भी लगता है कि आपका बॉस माइक्रोएनेज करने की कोशिश कर रहा है। मुझे यकीन है कि अन्य उत्तरों में से एक यह समझाने की कोशिश करेगा कि आपके बॉस को यह कैसे करना है


अफोर्डेबिलिटी एक संभावित तर्क लगता है। जबकि बॉस (एक ग्राहक के रूप में, @ मैथ्यूफ्लिन के सुझाव के अनुसार) का तर्क है कि वह कार्यक्रम को सी में नहीं लिखा जा सकता है, ओपी यह तर्क दे सकता है कि बॉस भी कार्यक्रम से जुड़े कार्यान्वयन और रखरखाव की लागत वहन करने में सक्षम नहीं होगा। सी। में लिखा है, चीजों को बनाने के लिए समझौता आवश्यक है।
रवांग

1

ADTs के लिए पर्यवेक्षक का विरोध कहीं और संबोधित किया गया था, जैसा कि जीसी लागतों के लिए देवता की गैर-बराबरी थी, इसलिए मैं "थ्रेड्स" पर ध्यान केंद्रित करूंगा।

शायद .NET (या JVM, यदि ऐसा हो तो) के संदर्भ में सोचने के बजाय, आप जो चाहते हैं वह कई प्रक्रियाएं हो सकती हैं, उनके बीच संवाद करने के लिए कुछ अंतर-प्रक्रिया संचार (IPC) तंत्र का उपयोग करना। जैसे - खिड़कियों के संदेश, साझा की गई मेमोरी, मेमोरी मैप की गई फ़ाइल बफर, पाइप का नाम, जो भी हो। एक डिवाइस या डिवाइस के साथ बातचीत करने और अपडेट को स्वीकार करने और अनुरोधों को स्वीकार करने के लिए आईपीसी की जांच करने के लिए छोटी प्रक्रियाओं को समर्पित करें, और जीयूआई को बनाए रखने के लिए कुछ हद तक बड़ी प्रक्रिया है और जो भी आईपीसी आप चुनते हैं उनका उपयोग "मॉनिटर" के साथ संवाद करें।

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