कोडिंग समय को गति देने के लिए सामान्य प्रोग्रामिंग तकनीक


20

मैं एक प्रोग्रामिंग प्रतियोगिता की तैयारी कर रहा हूं, जहां हमें C ++ में कोड करना है और यह थोड़े समय में काम करने वाले कोड के निर्माण के बारे में है। एक उदाहरण मैक्रो का उपयोग करना होगा ताकि न्यूनतम दो ints प्राप्त करें या सरणियों को प्रारंभ करने के लिए मेमसेट्स का उपयोग करें (लेकिन मुझे बताया गया था कि आपको यहां भी उपयोग नहीं करना चाहिए )।

यह इस सवाल की ओर जाता है कि वास्तविक नौकरी में उपयोग करने के लिए किस तरह की कोडिंग तकनीक मौजूद है?


26
मुझे लगता है कि जिन तकनीकों का आप कोडिंग प्रतियोगिता में उपयोग करते हैं, उनका आपके द्वारा वास्तविक नौकरी में उपयोग की जाने वाली तकनीकों से कोई लेना-देना नहीं हो सकता है।
डग टी।

1
मैं एक वास्तविक नौकरी में तकनीक के लिए नहीं पूछ रहा था, मैं एक कोडिंग प्रतियोगिता में तकनीक के लिए पूछ रहा था।
निशान्तानी

1
@DougT। मैं मानता हूं, एक कोडिंग प्रतियोगिता के लिए ट्रिक्स विषय पर नहीं है, लेकिन मुझे भी लगता है कि आप काम के माहौल में उत्पादकता के बारे में बात करने के लिए विस्तार कर सकते हैं, और आप बंदर कोड पर खर्च किए गए समय को कैसे कम कर सकते हैं
जेम्स

1
आपको डायनामिक ऐरे में मेमसेट्स का उपयोग क्यों नहीं करना चाहिए?
जेम्स

3
C ++ का उपयोग न करें। उच्चतम स्तर की भाषा का उपयोग करें जो आप कर सकते हैं।
केविन

जवाबों:


52

वर्किंग कोड फास्ट बनाने का तरीका है ... धीमा करना। बहुत छोटे कदम उठाएं। सुनिश्चित करें कि आप जानते हैं कि प्रत्येक चरण क्या है। सुनिश्चित करें कि प्रत्येक चरण के बाद आपका कोड संकलित होता है और चलता है।

सभी के सर्वश्रेष्ठ, टेस्ट-प्रेरित विकास का उपयोग करें। एक असफल परीक्षा लिखें। टेस्ट पास करने के लिए बस पर्याप्त कोड लिखें। कोड को साफ करने के लिए रिफैक्टर, यह सुनिश्चित करते हुए कि यह अभी भी सभी परीक्षण पास करता है। दोहराएँ।

यदि आप ऐसा नहीं करते हैं, तो कोड का एक बड़ा ढेर लिखना बहुत आसान है, जो काम नहीं करता है। फिर आपको यह पता लगाने में बहुत समय लगेगा कि यह काम क्यों नहीं करता है।


21
क्या आप गंभीर हैं? प्रोग्रामिंग प्रतियोगिता के लिए टीडीडी?
कोडिज्म

1
@ शरीरवाद: सामान्य सॉफ़्टवेयर विकास पर लागू तकनीकों को शामिल करने के लिए प्रश्नों का विस्तार किया गया था।
दिमा

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

3
TDD के लिए -1। यह समझ में आता है कि यदि परियोजना एक दीर्घकालिक है, न कि कोई छोटा हैकथॉन।
TheLQ

1
@ TheLQ सिर्फ इसलिए कि आप अपना सारा समय डिबगर का उपयोग करने में व्यतीत करेंगे, इसका मतलब यह नहीं है कि टीडीडी एक बुरा सुझाव है।
byxor

29

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


+1 - मैं इससे पूरी तरह सहमत हूं। इस प्रकार की प्रतियोगिताओं में एसटीएल में कोड को जल्दी से लिखने का तरीका जानना बहुत बड़ा है।
जॉर्डन पैरा

23

मैं एसीएम प्रतियोगिताओं में नियमित रूप से भाग लेता हूं, उम्मीद है कि इनमें से कुछ टिप्स आपकी मदद करेंगे:

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

  • समस्या की श्रेणी को पहचानें, यदि यह गणितीय, गतिशील प्रोग्रामिंग, ग्राफ सिद्धांत आदि है, तो अपने आप से पूछें: आप उस प्रकार की समस्या से कितने परिचित हैं? ऐसा करने के बाद, आपको उस आदेश के बारे में निर्णय लेना चाहिए जिस पर आप उन्हें हल करेंगे , जो अगले बिंदु के साथ हाथ में जाता है ...

  • आप टाइप करने से पहले समस्या को पूरी तरह से समझना चाहते हैं, सही समस्या को हल करते हैं , मेरी पहली प्रतियोगिताओं में मैंने सोचा कि अगर मैं टाइप नहीं कर रहा था तो मैं अपना समय बर्बाद कर रहा था; मैंने बाद में पाया कि यह एक गलती थी।

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

  • है मज़ा


6
टाइप करने से पहले समस्या को पूरी तरह से समझने के लिए +1। अन्यथा, आप टीम का समय बर्बाद कर रहे हैं (एसीएम प्रतियोगिता 3 व्यक्ति एक कंप्यूटर है)
कोडीज़

अच्छा उत्तर। :)
जारेड फरिश

13

खैर, यह मुझे लगता है जैसे आप केवल सी जानते हैं और सी ++ बिल्कुल नहीं। इन सवालों का जवाब आसानी से किसी को भाषा के बुनियादी काम ज्ञान के साथ दिया जाता है।

एक उदाहरण दो मैक्रो का न्यूनतम प्राप्त करने के लिए एक मैक्रो का उपयोग करना होगा

बस एक फ़ंक्शन का उपयोग करें? std::minपहले से ही मौजूद है।

या सरणियों को प्रारंभ करने के लिए मेमसेट्स का उपयोग करना

std::array<T, N> पहले से ही यह सामग्री को इनिशियलाइज़ करता है।

वास्तविक नौकरी में किस तरह की कोडिंग तकनीक का उपयोग किया जाता है?

पहला चरण उस भाषा को जानना है जिसका आप उपयोग कर रहे हैं।


मैं उस भाषा को जानने की कोशिश कर रहा हूं जिसका मैं उपयोग कर रहा हूं, इसीलिए मैंने यह सवाल पूछा है! इस बारे में इनपुट के लिए धन्यवाद ।
निशान्तानी

7
ओह। मुझे आपके सवाल का गलत अर्थ निकालना चाहिए। मैं एक किताब की सिफारिश करूंगा । हम कृपया केवल उन पुस्तकों को पढने लायक बनाते हैं, जिनके बजाय C कचरा सिखाते हैं।
डेडएमजी

10

भाषा जानने के अलावा, अपने उपकरणों, विशेष रूप से अपने संपादक को जानें। मैं 15 से अधिक वर्षों से पेशेवर रूप से कोडिंग कर रहा हूं, और मैंने देखा है कि अन्यथा महान प्रोग्रामर धीमा पड़ गए क्योंकि एकमात्र संपादक जो वे उपयोग करते हैं, वे कर्सर कुंजी और crtl-x / c / v हैं।

क्या आपका संपादक एक लाइन हटाने के लिए एक एकल कीस्ट्रोक का समर्थन करता है? एक लाइन फिर से इंडेंट करने के लिए? कार्यों / विधियों के बीच ले जाएँ? ब्लॉक का चयन करें / पेस्ट करें? बुकमार्क? शब्द से हटो? क्या संपादक ऑटो कक्षाओं / विधियों / कार्यों को उत्पन्न कर सकता है? क्या यह आपको समय से पहले पैदा कर सकता है? त्वरित रिफैक्टरिंग? मैक्रो रिकॉर्डिंग?

अपने संपादक को जानने से विकास के समय में काफी तेजी आ सकती है।


1
तथास्तु। मैं बस एक नए आदमी के साथ काम कर रहा हूं जो बहुत तेज है ... और विम का उपयोग करता है। यह उसके लिए काम करता है क्योंकि उसने यह जानने का समय लिया है कि इसका उपयोग कैसे किया जाए।
gbjbaanb

इसके अलावा ... यदि आपका संपादक यहां सूचीबद्ध लगभग हर सुविधा का समर्थन नहीं करता है - तो बेहतर संपादक खोजें।
२३:२३

Google डॉक्स में साक्षात्कार ... इस कारण से सबसे खराब अनुभव।
उमेनोबे

6

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

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

जानिए आप क्या कर रहे हैं। यह याद रखने की कोशिश करने से बदतर कुछ नहीं है कि भाषा और / या लाइब्रेरी की बुनियादी कार्यक्षमताएं और विशेषताएं कैसे काम करती हैं। आपके द्वारा उपयोग किए जाने वाले उपकरण से परिचित हों।



4

पहले से ही कई जवाब हैं, फिर भी मैं अपनी राय जोड़ना चाहूंगा।

अपनी कोडिंग को गति देने के लिए, एक टच टाइपिस्ट बनें , ताकि टाइपिंग करते समय आप तर्क और कोड दोनों पर ध्यान केंद्रित कर सकें। टाइपिंग सीखने के लिए कई सॉफ्टवेयर हैं (टाइपिंग मास्टर, रैपिड टाइपिंग, केटच, उदाहरण के लिए gTypist), उनका उपयोग करें

मैंने कई अनुभवी प्रोग्रामर देखे हैं जो अभी भी टू-फिंगर टाइपिस्ट हैं। यह बिना किसी दस्तावेज़ के साथ गंदा कोड की ओर जाता है और मैक्रोज़ और संक्षिप्त प्रकार नामों के साथ वास्तव में गुप्त कोड होता है।


तर्जनी के साथ नीचे उतारा गया :)
mlvljr

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

2

सॉफ्टवेयर विकास उन क्लासिक 80-20 गतिविधियों में से एक है - यानी जहां पहले 80% काम में 20% समय लगता है, और अंतिम 20% काम में 80% समय लगता है।

सामान्य रूप से आपके काम को गति देने की कुंजी है, इसलिए, उस प्रयास के अंतिम 20% के लिए अपने प्रदर्शन को बेहतर बनाने पर काम करना। यह आम तौर पर डिबगिंग चरणों और काम के साथ सब कुछ एक साथ जोड़ने और इसे प्रयोग करने योग्य बनाने के लिए है।

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

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


-2

यदि यह वास्तविक प्रोग्रामिंग प्रतियोगिता के लिए है, तो C ++ का उपयोग न करें। एक तेज, इंटरैक्टिव, रेड स्क्रिप्टिंग भाषा का उपयोग करें। यह कुछ ऐसा है जो VB6 पर पूरी तरह से हावी है। उन पुस्तकालयों के साथ पूर्व-सशस्त्र जाएं, जिन्हें आपने लिखा था। स्ट्रिंग विभाजन, सरणी उलट, खोज, छँटाई, अशिष्टता ग्राफिक्स, कंसोल नियंत्रण।

यदि यह काम के लिए है, तो ठीक इसके विपरीत करें। जानें कि वहां क्या है, एक ठोस भाषा का उपयोग करें (C ++ ठीक है), सब कुछ टिप्पणी करें, और आगे। दो प्रकार के वातावरण अलग नहीं हो सकते हैं।


3
मैं डाउनवॉटर्स में से एक नहीं था, लेकिन मुझे लगता है कि वे शायद आपको पसंद करेंगे क्योंकि सवाल सी ++ में तेजी से प्रोग्रामिंग के बारे में था ।
गॉर्डन गुस्ताफसन

9
VB6? गंभीरता से? क्या आप अतीत से हैं?
कोनामिमान

2
@ कोनामिमान: हे, हाँ मैं हूँ। मैं यह नहीं बता सकता था कि क्या वह "मैं तैयारी कर रहा हूँ, C ++ में, प्रोग्रामिंग प्रतियोगिता के लिए" या "मैं C ++ प्रोग्रामिंग प्रतियोगिता की तैयारी कर रहा हूँ"। ओह ठीक है, चिप्स झूठ जहां वे कर सकते हैं। फिर भी, कुछ भी प्रोग्रामिंग प्रतियोगिताओं के लिए बहुत तेज आरएडी वातावरण को नहीं हराता है, जहां शाब्दिक रूप से हर दूसरे मायने रखता है।
ब्रायन बोएचर

मैंने स्पष्टीकरण के लिए प्रश्न को संपादित किया।
निशान्तानी

राड पर: डेल्फी 6 तो संभवतः सबसे अच्छा दांव होगा।
mlvljr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.