मुझे सभी कोडिंग-संबंधित मशीन सीखने के विषयों पर काफी व्यापक पढ़ने की सूची मिली ।
जैसा कि आप देख सकते हैं, लोग मशीन लर्निंग को कोडिंग में लागू करने की कोशिश कर रहे हैं, लेकिन हमेशा बहुत संकीर्ण क्षेत्रों में, न कि केवल एक मशीन जो कोडिंग या डिबगिंग के सभी तरीके को संभाल सकती है।
इस उत्तर के बाकी हिस्से में आपकी अपेक्षाकृत व्यापक गुंजाइश "डिबगिंग" मशीन पर केंद्रित है और यह वास्तव में अभी तक प्रयास नहीं किया गया है (जहां तक विषय पर मेरे शोध से पता चलता है)।
मैंने जवाब का एक लंबा हिस्सा रिडक्ट किया। संक्षेप में प्रस्तुत करना (यह अगले भाग के लिए महत्वपूर्ण है): वर्तमान मशीन लर्निंग कार्यप्रणाली से, कुछ भी जो मनुष्य सीख सकता है, एक मशीन भी सीख सकती है। हम केवल भौतिक क्षेत्र (सीपीयू की गति, एक मशीन के आकार, ...) द्वारा सीमित हैं, स्वयं सीखने के एल्गोरिथ्म की एक सीमित सीमित प्रयोज्यता नहीं।
कोड विकास के लिए मशीन लर्निंग लागू करने में अब तक क्या शोध किया गया है? डिबगिंग के बारे में कैसे?
यहाँ मुद्दा यह नहीं है कि यह असंभव है, बल्कि यह कि यह एक अविश्वसनीय रूप से जटिल विषय है।
मनुष्य एक सार्वभौमिक कोडिंग मानक को परिभाषित करने के करीब भी नहीं आया है, जिससे हर कोई सहमत है। यहां तक कि एसओएलआईडी जैसे सिद्धांतों पर सबसे व्यापक रूप से सहमति अभी भी चर्चा का एक स्रोत है कि इसे कितनी गहराई से लागू किया जाना चाहिए। सभी व्यावहारिक उद्देश्यों के लिए, जब तक आपके पास कोई वित्तीय (या समय) बाधा न हो तब तक SOLID का पूरी तरह से पालन करना असंभव है; जो निजी क्षेत्र में संभव नहीं है, जहां सबसे अधिक विकास होता है। SOLID एक दिशानिर्देश है, न कि एक कठिन सीमा।
सही और गलत के वस्तुनिष्ठ माप के अभाव में, हम इसे सीखने के लिए मशीन को सकारात्मक / नकारात्मक प्रतिक्रिया कैसे दे पाएंगे?
सबसे अच्छे रूप में, हम कई लोगों को मशीन के लिए अपनी राय दे सकते हैं ("यह अच्छा / बुरा कोड है"), और मशीन का परिणाम तब "औसत राय" होगा। लेकिन यह जरूरी नहीं कि एक सही समाधान के रूप में ही हो । यह हो सकता है, लेकिन यह होने की गारंटी नहीं है।
दूसरे, विशेष रूप से डिबगिंग के लिए, यह स्वीकार करना महत्वपूर्ण है कि विशिष्ट डेवलपर्स एक विशिष्ट प्रकार की बग / गलती को शुरू करने के लिए प्रवण हैं। गलती की प्रकृति कुछ मामलों में हो सकती है जो इसे पेश करने वाले डेवलपर से प्रभावित हो सकती है।
उदाहरण के लिए, जैसा कि मैं अक्सर काम में दूसरों के कोड को बगफिक्सिंग में शामिल करता हूं, मुझे इस तरह की उम्मीद है कि प्रत्येक डेवलपर किस तरह की गलती करता है। एक निश्चित समस्या को देखते हुए, मुझे पता है कि देव ए को कॉन्फिग फाइल को अपडेट करने की भूल है, जबकि देव बी अक्सर खराब लाइनक्यू प्रश्नों को लिखते हैं। डेवलपर के आधार पर, मैं पहले कॉन्फ़िगर फ़ाइल या LINQ की ओर देख सकता हूं।
इसी तरह, मैंने अभी कई कंपनियों में सलाहकार के रूप में काम किया है, और मैं स्पष्ट रूप से देख सकता हूं कि कुछ प्रकार की बग को कुछ प्रकार की कंपनियों के लिए पक्षपाती बनाया जा सकता है। यह एक कठिन और तेज़ नियम नहीं है कि मैं निर्णायक रूप से इंगित कर सकूं, लेकिन एक निश्चित प्रवृत्ति है।
क्या कोई मशीन यह सीख सकती है? क्या यह महसूस कर सकता है कि देव ए में विन्यास गड़बड़ करने की अधिक संभावना है और देव बी में लिनक्यू क्वेरी गड़बड़ होने की अधिक संभावना है? बेशक यह कर सकते हैं। जैसा कि मैंने पहले कहा था, एक मानव कुछ भी सीख सकता है, एक मशीन भी हो सकती है।
हालांकि, आप कैसे जानते हैं कि आपने मशीन को संभावनाओं की पूरी श्रृंखला सिखाई है? आप इसे कभी भी एक छोटे (यानी वैश्विक नहीं) डेटासेट के साथ कैसे प्रदान कर सकते हैं और इस तथ्य के लिए जानते हैं कि यह बग के पूर्ण स्पेक्ट्रम का प्रतिनिधित्व करता है? या, क्या आप विशिष्ट डिबगर बनाने के बजाय विशिष्ट डिबगर बना सकते हैं, बजाय एक डिबगर बनाने के जो सार्वभौमिक रूप से उपयोग करने योग्य है?
मशीन-सीखा डिबगर के लिए पूछना एक मशीन-सीखा शर्लक होम्स के लिए पूछने जैसा है। किसी एक को बनाना असंभव नहीं है, लेकिन अक्सर व्यक्तिपरक आकलन पर एक डिबगर / शर्लक होने का मूल तर्क है जो विषय से अलग-अलग होता है और अविश्वसनीय रूप से विस्तृत ज्ञान / संभव दोषों पर स्पर्श करता है।
जल्दी से सही / गलत परिणामों की कमी के कारण मशीन को आसानी से पढ़ाना और यह सत्यापित करना कठिन हो जाता है कि यह अच्छी प्रगति कर रही है।