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