औसत को हराना
Originalअप्रैल 2001, संशोधित अप्रैल 2003
(यह लेख 2001 के फ्रांज डेवलपर सिम्पोजियम में दिए गए एक भाषण से लिया गया है.)
1995 की गर्मियों में, मेरे मित्र रॉबर्ट मॉरिस और मैंने एक स्टार्टअप शुरू किया जिसका नाम Viaweb था. हमारा प्लान था कि हम ऐसा सॉफ्टवेयर लिखेंगे जो अंत उपयोगकर्ताओं को ऑनलाइन स्टोर बनाने में मदद करेगा. उस समय इस सॉफ्टवेयर की नवीनता यह थी कि यह हमारे सर्वर पर चलता था और सामान्य वेब पेज को इंटरफ़ेस के रूप में उपयोग करता था.
बहुत से लोग इस आइडिया को एक साथ ले सकते थे, लेकिन जहां तक मुझे पता है, Viaweb वेब-आधारित एप्लिकेशन था. यह हमें इतना नया लगा कि हमने कंपनी का नाम इसी के नाम पर रखा: Viaweb, क्योंकि हमारा सॉफ्टवेयर वेब के माध्यम से काम करता था, अपने डेस्कटॉप कंप्यूटर पर नहीं.
इस सॉफ्टवेयर की एक और असामान्य बात यह थी कि इसे प्रमुख रूप से एक प्रोग्रामिंग भाषा कहलाने वाली Lisp में लिखा गया था. यह उन पहले बड़े एंड-यूजर एप्लिकेशनों में से एक था जो Lisp में लिखे गए थे, जिसका उपयोग तब तक मुख्य रूप से विश्वविद्यालयों और अनुसंधान प्रयोगशालाओं में किया जाता था. [1]
गुप्त हथियार
एरिक रेमंड ने "कैसे एक हैकर बनें" नामक एक निबंध लिखा है, और इसमें, अन्य चीजों के अलावा, वह भविष्य के हैकरों को कौन-सी भाषाएं सीखनी चाहिए, बताता है. वह सुझाव देता है कि शुरुआत में Python और Java सीखें, क्योंकि वे सीखने में आसान हैं. गंभीर हैकर को C भी सीखना चाहिए, ताकि वह यूनिक्स को हैक कर सके, और Perl को सिस्टम प्रशासन और सीजीआई स्क्रिप्ट के लिए. अंत में, वास्तव में गंभीर हैकर को Lisp सीखने पर विचार करना चाहिए:
Lisp सीखना उस गहन प्रबोधन अनुभव के लिए मूल्यवान है जो आप तब महसूस करेंगे जब आप अंत में इसे समझ जाएंगे; यह अनुभव आपको शेष जीवन के लिए एक बेहतर प्रोग्रामर बना देगा, भले ही आप वास्तव में Lisp का बहुत अधिक उपयोग न करें.
यह वही तर्क है जो आप लैटिन सीखने के लिए सुनते हैं. यह आपको एक नौकरी नहीं दिलाएगा, शायद केवल एक क्लासिक प्रोफेसर के रूप में, लेकिन यह आपके मन को बेहतर बनाएगा, और आपको उन भाषाओं में एक बेहतर लेखक बनाएगा जिनका आप उपयोग करना चाहते हैं, जैसे अंग्रेजी.
लेकिन एक मिनट रुकिए. यह उपमा इतनी दूर नहीं जाती. लैटिन नौकरी नहीं दिलाएगा क्योंकि कोई भी उसे नहीं बोलता. यदि आप लैटिन में लिखते हैं, तो कोई समझ नहीं पाएगा. लेकिन Lisp एक कंप्यूटर भाषा है, और कंप्यूटर आपके, प्रोग्रामर के, द्वारा बताई गई किसी भी भाषा में बोलते हैं.
तो यदि Lisp आपको एक बेहतर प्रोग्रामर बनाता है, जैसा कि वह कहता है, तो आप इसका उपयोग क्यों नहीं करना चाहेंगे? यदि एक चित्रकार को एक ब्रश मिले जो उसे एक बेहतर चित्रकार बना देगा, तो मुझे लगता है कि वह अपने सभी चित्रों में इसका उपयोग करना चाहेगा, क्या नहीं? मैं यहां एरिक रेमंड का मजाक नहीं उड़ा रहा हूं. कुल मिलाकर, उसकी सलाह अच्छी है. जो वह Lisp के बारे में कहता है, वह लगभग प्रचलित धारणा है. लेकिन प्रचलित धारणा में एक विरोधाभास है: Lisp आपको एक बेहतर प्रोग्रामर बनाएगा, और फिर भी आप इसका उपयोग नहीं करेंगे.
क्यों नहीं? प्रोग्रामिंग भाषाएं बस उपकरण हैं, बस. यदि Lisp वाकई बेहतर प्रोग्राम देता है, तो आपको इसका उपयोग करना चाहिए. और यदि ऐसा नहीं है, तो फिर इसकी क्या जरूरत है?
यह केवल एक सैद्धांतिक प्रश्न नहीं है. सॉफ्टवेयर एक बहुत प्रतिस्पर्धी व्यवसाय है, प्राकृतिक एकाधिकारों के लिए प्रवण. एक कंपनी जो सॉफ्टवेयर को तेजी से और बेहतर लिखती है, सभी अन्य चीजों के समान होने पर, अपने प्रतिद्वंद्वियों को बाहर कर देगी. और जब आप एक स्टार्टअप शुरू कर रहे हैं, तो आप इसे बहुत करीब से महसूस करते हैं. स्टार्टअप्स अक्सर एक या कुछ नहीं का प्रस्ताव होते हैं. या तो आप धनी हो जाते हैं, या आप कुछ भी नहीं पाते हैं. एक स्टार्टअप में, यदि आप गलत प्रौद्योगिकी पर दांव लगाते हैं, तो आपके प्रतिद्वंद्वी आपको कुचल देंगे.
रॉबर्ट और मैं दोनों Lisp में अच्छे थे, और हम किसी भी कारण को नहीं देख सकते थे कि हम अपने अंतर्दृष्टि पर भरोसा न करें और Lisp के साथ जाएं. हम जानते थे कि सभी अन्य लोग अपना सॉफ्टवेयर C++ या Perl में लिख रहे हैं. लेकिन हम यह भी जानते थे कि इसका कोई मतलब नहीं है. यदि आप इस तरह से प्रौद्योगिकी का चयन करते हैं, तो आप Windows चला रहे होंगे. जब आप प्रौद्योगिकी का चयन करते हैं, तो आपको दूसरों के क्या कर रहे हैं, इसे नजरअंदाज करना होगा और केवल उस पर विचार करना होगा जो सबसे अच्छा काम करेगा.
यह एक स्टार्टअप में खासकर सच है. एक बड़ी कंपनी में, आप वैसा ही कर सकते हैं जैसा अन्य बड़ी कंपनियां कर रही हैं. लेकिन एक स्टार्टअप को वैसा नहीं करना चाहिए जैसा अन्य स्टार्टअप कर रहे हैं. मुझे लगता है कि यहां तक कि स्टार्टअप में भी कई लोग इसे नहीं समझते हैं.
औसत बड़ी कंपनी लगभग दस प्रतिशत प्रति वर्ष बढ़ती है. इसलिए यदि आप एक बड़ी कंपनी चला रहे हैं और आप सब कुछ वैसा ही करते हैं जैसा कि औसत बड़ी कंपनी करती है, तो आप उम्मीद कर सकते हैं कि आप औसत बड़ी कंपनी जैसा ही करेंगे - यानी लगभग दस प्रतिशत प्रति वर्ष बढ़ेंगे.
एक स्टार्टअप में भी यही होगा, बेशक. यदि आप सब कुछ वैसा ही करते हैं जैसा कि औसत स्टार्टअप करता है, तो आप औसत प्रदर्शन की उम्मीद कर सकते हैं. यहां समस्या यह है कि औसत प्रदर्शन का मतलब है कि आप बाहर हो जाएंगे. स्टार्टअप के लिए जीवन दर पचास प्रतिशत से कम है. इसलिए यदि आप एक स्टार्टअप चला रहे हैं, तो आपको कुछ अजीब करना चाहिए. नहीं तो, आप मुश्किल में हैं.
1995 में, हम कुछ ऐसा जानते थे जिसे मुझे लगता है कि हमारे प्रतिद्वंद्वी नहीं समझते थे, और अभी भी कई लोग नहीं समझते हैं: जब आप ऐसा सॉफ्टवेयर लिख रहे हैं जो केवल आपके ही सर्वरों पर चलना है, तो आप किसी भी भाषा का उपयोग कर सकते हैं. जब आप डेस्कटॉप सॉफ्टवेयर लिख रहे हैं, तो ऑपरेटिंग सिस्टम की समान भाषा में एप्लिकेशन लिखने की एक मजबूत प्रवृत्ति होती है. दस साल पहले, एप्लिकेशन लिखना C में एप्लिकेशन लिखना था. लेकिन वेब-आधारित सॉफ्टवेयर के साथ, खासकर जब आपके पास भाषा और ऑपरेटिंग सिस्टम दोनों का सोर्स कोड है, तो आप जो भी भाषा का उपयोग कर सकते हैं.
यह नई स्वतंत्रता एक दोधारी तलवार है, हालांकि. अब जब आप किसी भी भाषा का उपयोग कर सकते हैं, तो आपको सोचना होगा कि किस एक का उपयोग करना है. जो कंपनियां कोई भी बदलाव नहीं होने का दावा करती हैं, उन्हें खतरा है कि उनके प्रतिद्वंद्वी ऐसा नहीं करते हैं.
यदि आप किसी भी भाषा का उपयोग कर सकते हैं, तो आप किसका उपयोग करते हैं? हमने Lisp का चयन किया. एक बात तो यह थी कि तेजी से विकास इस बाजार में महत्वपूर्ण होगा. हम सभी शुरुआत से ही थे, इसलिए एक कंपनी जो अपने प्रतिद्वंद्वियों से पहले नई सुविधाएं कर सकती है
यदि अन्य कंपनियों को लिस्प का उपयोग करना नहीं चाहता था, तो इतना ही बेहतर। यह हमें एक तकनीकी बढ़त दे सकता था, और हमें जितनी मदद मिल सकती थी उसकी जरूरत थी। जब हमने वियावेब शुरू किया, तो हमारे पास व्यवसाय में कोई अनुभव नहीं था। हमें विपणन, लोगों को नियुक्त करने, धन जुटाने या ग्राहक प्राप्त करने के बारे में कुछ भी नहीं पता था। हमारे में से किसी ने भी वास्तव में एक वास्तविक नौकरी नहीं की थी। एकमात्र चीज जिसमें हम अच्छे थे वह सॉफ्टवेयर लिखना था। हमें उम्मीद थी कि यह हमारी मदद करेगा।
हम जो भी लाभ सॉफ्टवेयर विभाग में प्राप्त कर सकते थे, उसे हम लेंगे।
इसलिए आप कह सकते हैं कि लिस्प का उपयोग एक प्रयोग था। हमारा परिकल्पना था कि यदि हम अपना सॉफ्टवेयर लिस्प में लिखते हैं, तो हम अपने प्रतिद्वंद्वियों से तेजी से सुविधाएं पूरी कर पाएंगे, और अपने सॉफ्टवेयर में ऐसी चीजें भी कर पाएंगे जो वे नहीं कर सकते। और क्योंकि लिस्प बहुत उच्च-स्तरीय है, हमें एक बड़ी विकास टीम की जरूरत नहीं होगी, इसलिए हमारी लागत कम होगी। यदि ऐसा होता है, तो हम कम कीमत पर एक बेहतर उत्पाद प्रदान कर सकते हैं और फिर भी लाभ कमा सकते हैं। हम सभी उपयोगकर्ताओं को प्राप्त कर लेंगे, और हमारे प्रतिद्वंद्वी किसी को भी नहीं, और अंततः व्यवसाय बंद कर देंगे। यही था जो हम होने की उम्मीद कर रहे थे।
इस प्रयोग के क्या परिणाम थे? कुछ हद तक आश्चर्यजनक, यह काम गया। अंततः हमारे कई प्रतिद्वंद्वी थे, लगभग बीस से तीस के आसपास, लेकिन उनका कोई भी सॉफ्टवेयर हमारे सॉफ्टवेयर के साथ प्रतिस्पर्धा नहीं कर सका। हमारे पास एक वाइसिविग ऑनलाइन स्टोर बिल्डर था जो सर्वर पर चलता था और फिर भी डेस्कटॉप एप्लिकेशन की तरह महसूस होता था। हमारे प्रतिद्वंद्वियों के पास सीजीआई स्क्रिप्ट थीं। और हम सुविधाओं में हमेशा उनसे काफी आगे थे। कभी-कभी, निराशा में, प्रतिद्वंद्वी ऐसी सुविधाएं पेश करने की कोशिश करते थे जिन्हें हमारे पास नहीं था। लेकिन लिस्प के साथ हमारा विकास चक्र इतना तेज था कि हम कभी-कभी प्रेस विज्ञप्ति में घोषित करने के एक या दो दिन के भीतर एक नई सुविधा को दोहरा सकते थे। जब पत्रकार प्रेस विज्ञप्ति को कवर करने के लिए हमसे संपर्क करते, तो हमारे पास भी नई सुविधा होती थी।
यह हमारे प्रतिद्वंद्वियों को लगा होगा कि हमारे पास कोई गुप्त हथियार है - कि हम उनके इनिग्मा संचार को डिकोड कर रहे हैं या कुछ ऐसा। वास्तव में, हमारे पास एक गुप्त हथियार था, लेकिन वह उनके द्वारा समझे जाने से भी सरल था। हमारी सुविधाओं की खबर किसी भी तरह से हमें नहीं मिल रही थी। हम केवल उनसे भी तेजी से सॉफ्टवेयर विकसित कर रहे थे।
जब मैं लगभग नौ साल का था, तो मुझे एक कॉपी द डे ऑफ द जैकल, फ्रेडरिक फोर्साइथ द्वारा मिल गई। मुख्य पात्र एक हत्यारा है जिसे फ्रांस के राष्ट्रपति को मारने के लिए किराए पर लिया गया है। हत्यारे को पुलिस से बचकर एक ऐसे अपार्टमेंट तक पहुंचना है जो राष्ट्रपति के मार्ग पर है। वह बस लकड़ी के छड़ों पर एक बूढ़े आदमी के रूप में उनके पास से चला जाता है, और वे उसे कभी संदेह नहीं करते।
हमारा गुप्त हथियार इसके समान था। हमने अपना सॉफ्टवेयर एक अजीब एआई भाषा में लिखा, जिसमें कंकड़ी से भरा विचित्र वाक्यविन्यास था। वर्षों तक मुझे लिस्प को इस तरह से वर्णित सुनकर परेशान किया गया था। लेकिन अब यह हमारे लाभ के लिए काम आया। व्यवसाय में, अपने प्रतिद्वंद्वियों द्वारा नहीं समझी जाने वाली एक तकनीकी बढ़त से अधिक कीमती कुछ नहीं है। व्यवसाय में, जैसे युद्ध में, आश्चर्य शक्ति के बराबर है।
और इसलिए, मुझे थोड़ा शर्मिंदा कहना पड़ता है, हमने वियावेब पर काम करते समय लिस्प के बारे में कभी भी सार्वजनिक रूप से कुछ नहीं कहा। हमने इसे प्रेस को कभी नहीं बताया, और यदि आप हमारी वेबसाइट पर लिस्प की तलाश करते, तो आप केवल मेरे बायो में दो पुस्तकों के शीर्षक ही पाएंगे। यह कोई दुर्घटना नहीं थी। एक स्टार्टअप को अपने प्रतिद्वंद्वियों को जितनी भी जानकारी दे सकता है उतनी कम देनी चाहिए। यदि वे नहीं जानते थे कि हमारा सॉफ्टवेयर किस भाषा में लिखा गया है, या उन्हें इससे कोई मतलब नहीं था, तो मैं चाहता था कि ऐसा ही रहे।
हमारी प्रौद्योगिकी को सबसे अच्छी तरह समझने वाले लोग ग्राहक थे। उन्हें भी वियावेब किस भाषा में लिखा गया था इससे कोई मतलब नहीं था, लेकिन उन्हें महसूस हुआ कि यह वास्तव में बहुत अच्छा काम करता है। यह उन्हें लगभग मिनटों में महान दिखने वाले ऑनलाइन स्टोर बनाने में सक्षम बनाता था। और इसलिए, मुख्य रूप से मौखिक रूप से, हमें और अधिक उपयोगकर्ता मिले। 1996 के अंत तक हमारे पास लगभग 70 स्टोर ऑनलाइन थे। 1997 के अंत तक हमारे पास 500 थे। छह महीने बाद, जब याहू ने हमें खरीदा, तो हमारे पास 1070 उपयोगकर्ता थे। आज, याहू स्टोर के रूप में, यह सॉफ्टवेयर अपने बाजार में प्रभुत्व बना हुआ है। यह याहू का एक अधिक लाभदायक हिस्सा है, और इसके साथ बनाए गए स्टोर याहू शॉपिंग के आधार हैं। मैं 1999 में याहू छोड़ गया, इसलिए मुझे अब उनके पास कितने उपयोगकर्ता हैं, यह नहीं पता, लेकिन जो आखिरी बार मैंने सुना था, वहां लगभग 20,000 उपयोगकर्ता थे।
ब्लब पैरेडॉक्स
लिस्प में क्या इतना महान है? और यदि लिस्प इतना महान है, तो फिर सभी इसका उपयोग क्यों नहीं करते? ये प्रतीत होने वाले प्रश्न हैं, लेकिन वास्तव में इनके सरल उत्तर हैं। लिस्प इतना महान है केवल इसलिए नहीं कि इसमें कोई जादुई गुण है जो केवल भक्तों को दिखाई देता है, बल्कि इसलिए कि यह सबसे शक्तिशाली भाषा है जो उपलब्ध है। और इसका कारण यह है कि प्रोग्रामिंग भाषाएं केवल प्रौद्योगिकियां ही नहीं हैं, बल्कि मन की आदतें भी हैं, और कुछ भी धीरे-धीरे नहीं बदलता।
मैं एक चौंकाने वाले विवादास्पद बयान से शुरू करूंगा: प्रोग्रामिंग भाषाएं शक्ति में भिन्न होती हैं।
कम से कम, यह कि उच्च स्तरीय भाषाएं मशीन भाषा से अधिक शक्तिशाली हैं, इसमें कोई विवाद नहीं होगा। आज के अधिकांश प्रोग्रामर सहमत होंगे कि आप सामान्य रूप से मशीन भाषा में प्रोग्राम नहीं करना चाहते। बजाय इसके, आपको एक उच्च-स्तरीय भाषा में प्रोग्राम करना चाहिए, और एक कंपाइलर को इसे मशीन भाषा में अनुवाद करने दें। यह विचार अब हार्डवेयर में भी शामिल है: 1980 के दशक से, निर्देश सेट मानव प्रोग्रामरों के बजाय कंपाइलरों के लिए डिज़ाइन किए गए हैं।
सभी जानते हैं कि मशीन भाषा में अपना पूरा कार्यक्रम हाथ से लिखना एक गलती है। जो कम समझा जाता है वह यह है कि यहां एक और सामान्य सिद्धांत है: कि यदि आपके पास कई भाषाओं का विकल्प है, तो सभी अन्य चीजों के बराबर होने पर, आप जो भी सबसे शक्तिशाली है उसमें प्रोग्राम करना गलत है।
यह नियम के कई अपवाद हैं। यदि आप किसी विशिष्ट भाषा में लिखे गए कार्यक्रम के साथ बहुत करीबी तरीके से काम करने वाले कार्यक्रम लिख रहे हैं, तो उसी भाषा में नया कार्यक्रम लिखना एक अच्छा विचार हो सकता है। यदि आप केवल कुछ बहुत सरल काम करने वाले कार्यक्रम लिख रहे हैं, जैसे संख्या क्रंचिंग या बिट मैनिपुलेशन, तो आप कम अमूर्त भाषा का उपयोग कर सकते हैं, खासकर क्योंकि यह थोड़ा तेज हो सकता है। और यदि आप एक छोटा, फेंक देने योग्य कार्यक्रम लिख रहे हैं, तो आप शायद केवल उस भाषा का उपयोग करना बेहतर होगा जिसके पास उस काम के लिए सबसे अच्छे लाइब्रेरी फंक्शन हैं। लेकिन सामान्य तौर पर, अनुप्रयोग सॉफ्टवेयर के लिए, आप जितनी शक्तिशाली (उचित दक्षता) भाषा का उपयोग कर सकते हैं, उसका उपयोग करना चाहिए, और किसी भी अन्य का उपयोग करना एक गलती है, उसी प्रकार की, हालांकि संभवतः कम डिग्री में, जैसे मशीन भाषा में प्रोग्रामिंग।
आप देख सकते हैं कि मशीन भाषा बहुत कम स्तर की है। लेकिन, एक प्रकार के सामाजिक कन्वेंशन के रूप में, उच्च-स्तरीय भाषाओं को अक्सर समकक्ष माना जाता है। वे नहीं हैं। तकनीकी रूप से "उच्च-स्तरीय भाषा" शब्द का कोई स्पष्ट अर्थ नहीं है। मशीन भाषाओं के एक ओर और सभी उच्च-स्तरीय भाषाओं के दूसरी ओर कोई विभाजन रेखा नहीं है। भाषाएं अमूर्तता के एक निरंतर [1] पर पड़ती हैं, सबसे शक्तिशाली से लेकर मशीन भाषाओं तक, जो खुद में शक्ति में भिन्न हैं।
कोबोल पर विचार करें। कोबोल एक उच्च-स्तरीय भाषा है, इस अर्थ में कि यह मशीन भाषा में कंपाइल होती है। क्या कोई गंभीरता से तर्क देगा कि कोबोल पायथन के समकक्ष है? यह संभवतः पायथन से मशीन भाषा के करीब है।
या पर्ल 4 के बारे में क्या? पर्ल 4 और पर्ल 5 के बीच, लेक्सिकल क्लोजर भाषा में जोड़े गए थे। अधिकांश पर्ल हैकर्स सहमत होंगे कि पर्ल 5 पर्ल 4 से अधिक शक्तिशाली है। लेकिन एक बार जब आप यह मान लिया है, तो आप यह भी मान लिया है कि एक उच्च-स्तरीय भाषा दूसरे से अधिक शक्तिशाली हो सकती है। और यह अनिवार्य रूप से यह निष्कर्ष निकलता है कि, विशेष मामलों को छोड़कर, आपको जितनी शक्तिशाली भाषा मिल सकती है, उसका उपयोग करना चाहिए।
यह विचार अक्सर अपने निष्कर्ष तक नहीं पहुंचता है। एक निश्चित उम्र के बाद, प्रोग्रामर अक्सर स्वेच्छा से भाषाएं नहीं बदलते हैं। जो भी भाषा लोग आदत से उपयोग करते हैं, वे उसे बस पर्याप्त मानते हैं।
प्रोग्रामर अपनी पसंदीदा भाषाओं से बहुत जुड़े होते हैं, और मैं किसी के भावनाओं को नहीं चोटित करना चाहता, इसलिए इस बिंदु को समझाने के लिए मैं एक काल्पनिक भाषा "ब्लब" का उपयोग करूंगा। ब्लब अमूर्तता के निरंतर [1] के बीच में पड़ता है। यह सबसे शक्तिशाली भाषा नहीं है, लेकिन यह कोबोल या मशीन भाषा से अधिक शक्तिशाली है।
और वास्तव में, हमारे काल्पनिक ब्लब प्रोग्रामर उनमें से किसी का भी उपयोग नहीं करेंगे। निश्चित रूप से वह मशीन भाषा में प्रोग्राम नहीं करेगा। यह कंपाइलर का काम है। और कोबोल के मामले में, वह नहीं जानता कि कोई भी इसके साथ कुछ कर कैसे पाता है। इसमें x (ब्लब विशेषता का आपका चयन) तक नहीं है।
जब तक हमारा काल्पनिक ब्लब प्रोग्रामर शक्ति के निरंतर [1] के नीचे देखता है, वह नीचे देख रहा है। उससे कम शक्तिशाली भाषाएं स्पष्ट रूप से कम शक्तिशाली हैं, क्योंकि उनमें कुछ ऐसी विशेषताएं नहीं हैं जिनका वह आदी है। लेकिन जब हमारा काल्पनिक ब्लब प्रोग्रामर दूसरी ओर, शक्ति के निरंतर [1] की ओर देखता है, तो वह नहीं समझता कि वह ऊपर देख रहा है। जो वह देखता है वे केवल अजीब भाषाएं हैं। वह शायद उन्हें ब्लब के समकक्ष शक्ति में मानता है, लेकिन साथ में कुछ और जटिल चीजें भी हैं। ब्लब उसके लिए काफी है, क्योंकि वह ब्लब में सोचता है।
जब हम किसी भी उच्च-स्तरीय भाषा का उपयोग करने वाले प्रोग्रामर के दृष्टिकोण पर स्विच करते हैं, तो हम पाते हैं कि वह भी ब्लब पर नजर डालता है। ब्लब में कुछ भी कैसे किया जा सकता है? इसमें y तक नहीं है।
प्रेरणा द्वारा, केवल वे प्रोग्रामर जो सबसे शक्तिशाली भाषा को समझते हैं, वे ही विभिन्न भाषाओं के बीच शक्ति के सभी अंतरों को देख सकते हैं। (यह शायद वह है जिसका एरिक रेमंड ने कहा था कि लिस्प आपको एक बेहतर प्रोग्रामर बनाता है।) आप अन्य की राय पर भरोसा नहीं कर सकते, क्योंकि ब्लब पैरडॉक्स के कारण: वे उस भाषा से संतुष्ट हैं जिसका वे संयोग में उपयोग करते हैं, क्योंकि यह उनके प्रोग्रामों के बारे में सोचने का तरीका निर्धारित करता है।
मैं अपने स्वयं के अनुभव से जानता हूं, जब मैं एक हाई स्कूल का बच्चा था और बेसिक में प्रोग्राम लिख रहा था। उस भाषा में तो रिकर्शन का समर्थन भी नहीं था। बिना रिकर्शन का उपयोग किए प्रोग्राम लिखना कल्पना करना मुश्किल है, लेकिन उस समय मुझे इसकी कमी महसूस नहीं हुई। मैं बेसिक में सोचता था। और मैं इसमें एक प्रतिभाशाली था। अपने सर्वेक्षण के मास्टर।
एरिक रेमंड द्वारा हैकर्स को सिफारिश की गई पांच भाषाएं शक्ति के निरंतर [1] पर विभिन्न बिंदुओं पर पड़ती हैं। वे एक-दूसरे के सापेक्ष कहां पड़ते हैं, यह एक संवेदनशील विषय है। जो मैं कहूंगा वह है कि मुझे लगता है कि लिस्प सबसे ऊपर है। और इस दावे का समर्थन करने के लिए मैं आपको उन चीजों में से एक के बारे में बताऊंगा जो मुझे अन्य चार भाषाओं में कमी लगती है। मैं सोचता हूं, उनमें से कुछ भी करने के लिए मैक्रो के बिना कैसे काम किया जा सकता है? [5]
कई भाषाओं में कुछ चीज को मैक्रो कहा जाता है। लेकिन लिस्प मैक्रो अनूठे हैं। और विश्वास नहीं होगा, लेकिन वे जो करते हैं वह उन परेंथिसिस से संबंधित है। लिस्प के डिजाइनरों ने उन सभी परेंथिसिस को भाषा में केवल अलग दिखने के लिए नहीं डाला था। ब्लब प्रोग्रामर के लिए, लिस्प कोड अजीब दिखता है। लेकिन वे परेंथिसिस किसी कारण के लिए वहां हैं। वे लिस्प और अन्य भाषाओं के बीच एक मूलभूत अंतर का बाहरी प्रमाण हैं।
लिस्प कोड लिस्प डेटा ऑब्जेक्ट्स से बना होता है। और न केवल इस तरीके से कि स्रोत फ़ाइलें वर्णों से बनी हैं, और स्ट्रिंग्स भाषा द्वारा समर्थित डेटा प्रकार हैं। लिस्प कोड, पार्सर द्वारा पढ़े जाने के बाद, ऐसे डेटा संरचनाओं से बना होता है जिन्हें आप ट्रावर्स कर सकते हैं।
यदि आप कंपाइलर कैसे काम करते हैं, यह समझते हैं, तो वास्तव में जो हो रहा है वह यह नहीं है कि लिस्प में एक अजीब वाक्य-रचना है, बल्कि यह है कि लिस्प में कोई वाक्य-रचना नहीं है। आप उन पार्स ट्रीज में कार्यक्रम लिखते हैं जो अन्य भाषाओं को पार्स करते समय कंपाइलर के भीतर उत्पन्न होते हैं। लेकिन ये पार्स ट्रीज आपके कार्यक्रमों के लिए पूरी तरह से सुलभ हैं। आप ऐसे कार्यक्रम लिख सकते हैं जो उन्हें मैनिपुलेट करते हैं। लिस्प में, ये कार्यक्रम मैक्रो कहलाते हैं। वे कार्यक्रम हैं जो कार्यक्रम लिखते हैं।
कार्यक्रम जो कार्यक्रम लिखते हैं? ऐसा करने की कब कोई जरूरत होगी? कोबोल में सोचते हो तो बहुत कम, लेकिन लिस्प में सोचते हो तो हर समय। यहां यदि मैं किसी शक्तिशाली मैक्रो का उदाहरण दे सकता और कह सकता कि देखो, यह कैसा है? लेकिन अगर मैं ऐसा करता, तो यह किसी को भी जो लिस्प नहीं जानता, केवल अस्पष्ट लगेगा; यहां पर समझने के लिए आपको जो कुछ भी जानना होगा, उसे समझाने के लिए पर्याप्त जगह नहीं है। Ansi Common Lisp में मैंने जितनी जल्दी हो सका, उतनी जल्दी आगे बढ़ने की कोशिश की, और भी वहां मैं मैक्रोज तक नहीं पहुंच पाया, पृष्ठ 160 तक।
लेकिन मैं एक तरह का तर्क दे सकता हूं जो मान्य हो सकता है। Viaweb एडिटर का सोर्स कोड लगभग 20-25% मैक्रोज था। मैक्रोज को सामान्य लिस्प फंक्शन से लिखना कठिन होता है, और इनका उपयोग जब भी आवश्यक नहीं होता, तो इसे खराब शैली माना जाता है। इसलिए इस कोड में प्रत्येक मैक्रो मौजूद है क्योंकि इसे होना चाहिए। इसका मतलब है कि इस कार्यक्रम का कम से कम 20-25% कोड ऐसी चीजें कर रहा है जिन्हें किसी अन्य भाषा में आसानी से नहीं किया जा सकता। भले ही ब्लब प्रोग्रामर मेरे लिस्प के रहस्यमय शक्तियों के दावों पर संदेहशील हो, लेकिन यह उसे जरूर उत्सुक कर देना चाहिए। हम यह कोड अपने मनोरंजन के लिए नहीं लिख रहे थे। हम एक छोटा स्टार्टअप थे, जो अपने प्रतिद्वंद्वियों के बीच तकनीकी बाधाएं बनाने के लिए जोर-शोर से प्रोग्रामिंग कर रहे थे।
एक संदिग्ध व्यक्ति यह सोचने लगेगा कि क्या यहां कोई संबंध है। हमारे कोड का एक बड़ा हिस्सा ऐसी चीजें कर रहा था जो अन्य भाषाओं में बहुत कठिन हैं। परिणामस्वरूप सॉफ्टवेयर ऐसी चीजें कर रहा था जो हमारे प्रतिद्वंद्वियों के सॉफ्टवेयर नहीं कर सकते थे। शायद इसमें कोई संबंध हो। मैं आपको इस धागे का पीछा करने के लिए प्रोत्साहित करता हूं। उस बूढ़े आदमी में जो लंगड़ाता हुआ अपने बैंचों पर चल रहा है, उससे अधिक कुछ हो सकता है।
स्टार्टअप्स के लिए एकिडो
लेकिन मैं किसी को भी लिस्प सीखने के लिए मनाने की उम्मीद नहीं करता (25 से अधिक)। इस लेख का उद्देश्य किसी के भी मन को बदलना नहीं है, बल्कि उन लोगों को आश्वस्त करना है जो पहले से ही लिस्प का उपयोग करने में रुचि रखते हैं - लोग जो जानते हैं कि लिस्प एक शक्तिशाली भाषा है, लेकिन चिंतित हैं क्योंकि इसका व्यापक उपयोग नहीं होता। प्रतिस्पर्धात्मक स्थिति में, यह एक लाभ है। लिस्प की शक्ति इस तथ्य से गुणा हो जाती है कि आपके प्रतिद्वंद्वी इसे नहीं समझते।
यदि आप किसी स्टार्टअप में लिस्प का उपयोग करने के बारे में सोच रहे हैं, तो आपको इस बात से चिंतित नहीं होना चाहिए कि यह व्यापक रूप से समझा नहीं जाता है। आपको आशा करनी चाहिए कि यह ऐसा ही रहे। और यह संभावना है कि ऐसा ही होगा। प्रोग्रामिंग भाषाओं की प्रकृति यह है कि वे अधिकांश लोगों को वर्तमान में उपयोग कर रहे उनके साथ संतुष्ट कर देती हैं। कंप्यूटर हार्डवेयर व्यक्तिगत आदतों की तुलना में बहुत तेजी से बदलता है, इसलिए प्रोग्रामिंग प्रथा आमतौर पर प्रोसेसर से 10 से 20 साल पीछे होती है। MIT जैसे स्थानों पर वे 1960 के दशक के शुरुआती वर्षों में उच्च स्तरीय भाषाओं में कार्यक्रम लिख रहे थे, लेकिन कई कंपनियां 1980 के दशक तक मशीन भाषा में कोड लिखती रहीं। मुझे लगता है कि कई लोग तब तक मशीन भाषा लिखते रहे जब तक कि प्रोसेसर, एक बार्टेंडर की तरह जो घर जाने के लिए उत्सुक है, उन्हें अंततः एक रिस्क निर्देश सेट अपनाकर बाहर नहीं कर देता।
सामान्य तौर पर प्रौद्योगिकी तेजी से बदलती है। लेकिन प्रोग्रामिंग भाषाएं अलग हैं: प्रोग्रामिंग भाषाएं केवल प्रौद्योगिकी ही नहीं हैं, बल्कि वे वह हैं जिसमें प्रोग्रामर सोचते हैं। वे आधी प्रौद्योगिकी और आधी धर्म हैं।[6] और इसलिए मध्य भाषा, यानी जो भाषा मध्य प्रोग्रामर उपयोग करता है, एक बर्फ की तरह धीमी गति से चलती है। गार्बेज कलेक्शन, जिसे लिस्प ने लगभग 1960 में पेश किया था, अब एक अच्छी चीज माना जाता है। रन-टाइम टाइपिंग, इसी तरह, लोकप्रियता में बढ़ रहा है। लेक्सिकल क्लोजर, जिन्हें लिस्प ने 1970 के दशक के शुरुआती वर्षों में पेश किया था, अब, बस, रडार स्क्रीन पर हैं। मैक्रोज, जिन्हें लिस्प ने मध्य 1960 में पेश किया था, अभी भी अज्ञात भूमि हैं।
स्पष्ट रूप से, मध्य भाषा का भारी गतिशीलता है। मैं यह प्रस्ताव नहीं कर रहा हूं कि आप इस शक्तिशाली बल का सामना कर सकते हैं। मैं जो प्रस्ताव कर रहा हूं वह बिल्कुल इसके विपरीत है: कि, एकिडो के अभ्यासी की तरह, आप इसका उपयोग अपने प्रतिद्वंद्वियों के खिलाफ कर सकते हैं।
यदि आप किसी बड़ी कंपनी के लिए काम करते हैं, तो यह आसान नहीं हो सकता। आपको पॉइंटी-हेयर्ड बॉस को यह मनाने में कठिनाई होगी कि वह आपको लिस्प में चीजें बनाने दे, जब उसने अभी-अभी समाचार पत्र में पढ़ा है कि कोई अन्य भाषा, जैसे कि 20 साल पहले एडा, दुनिया पर कब्जा करने के लिए तैयार है। लेकिन यदि आप किसी ऐसे स्टार्टअप के लिए काम करते हैं जिसके पास अभी तक पॉइंटी-हेयर्ड बॉस नहीं हैं, तो आप, जैसा कि हमने किया, ब्लब पैरेडॉक्स का लाभ उठा सकते हैं: आप ऐसी प्रौद्योगिकी का उपयोग कर सकते हैं जिसका मुकाबला आपके प्रतिद्वंद्वी, मध्य भाषा से चिपके हुए, कभी नहीं कर पाएंगे।
यदि आप कभी भी किसी स्टार्टअप के लिए काम करते हैं, तो प्रतिद्वंद्वियों का मूल्यांकन करने के लिए यहां एक उपयोगी सुझाव है। उनके जॉब लिस्टिंग्स पढ़ें। उनकी वेबसाइट पर अन्य सब कुछ स्टॉक फोटो या गद्य समकक्ष हो सकता है, लेकिन जॉब लिस्टिंग्स में उन्हें सही उम्मीदवार मिलने के लिए उन्हें वास्तविक में क्या चाहिए, इसका उल्लेख करना होता है।
हमने Viaweb पर काम करते समय मैंने कई जॉब विवरण पढ़े। लगभग हर महीने कोई नया प्रतिद्वंद्वी सामने आता था। पहला काम जो मैं करता था, उनके पास कोई लाइव ऑनलाइन डेमो है या नहीं, यह देखने के बाद, उनकी जॉब लिस्टिंग्स देखना था। कुछ वर्षों के बाद मैं बता सकता था कि किन कंपनियों को चिंता करनी है और किन्हें नहीं। जितना अधिक आईटी स्वाद जॉब विवरणों में होता था, उतनी कम खतरनाक कंपनी होती थी। सबसे सुरक्षित प्रकार वे थे जो ओरेकल अनुभव चाहते थे। उन पर कभी भी चिंता नहीं करनी पड़ती थी। आप भी सुरक्षित थे यदि वे कहते थे कि वे सी++ या जावा डेवलपर्स चाहते हैं। यदि वे पर्ल या पायथन प्रोग्रामर चाहते थे, तो थोड़ा डरावना होता था - यह एक ऐसी कंपनी की तरह लगता है जहां कम से कम तकनीकी पक्ष, वास्तविक हैकर्स द्वारा चलाया जाता है। यदि मैंने कभी भी लिस्प हैकर्स के लिए जॉब पोस्टिंग देखी होती, तो मैं वाकई चिंतित होता।
नोट्स
[1] Viaweb पहले दो हिस्सों में थी: एडिटर, जो लोग अपने साइट बनाने के लिए उपयोग करते थे, लिस्प में लिखा गया था, और ऑर्डरिंग सिस्टम, जो सी में लिखा गया था और ऑर्डर्स को संभालता था। पहला संस्करण ज्यादातर लिस्प था,
जनवरी 2003 में, याहू ने सी++ और पर्ल में लिखे गए एक नए संस्करण का संपादक जारी किया। हालांकि, यह कहना मुश्किल है कि क्या यह कार्यक्रम अब लिस्प में नहीं लिखा जाता है, क्योंकि इस कार्यक्रम को सी++ में अनुवादित करने के लिए उन्हें वास्तव में एक लिस्प व्याख्याता लिखना पड़ा: जहां तक मुझे पता है, सभी पृष्ठ-उत्पादन टेम्पलेट के स्रोत फ़ाइलें अभी भी लिस्प कोड हैं। (ग्रीनस्पन का दसवां नियम देखें।)
[2] रॉबर्ट मॉरिस कहते हैं कि मुझे गोपनीय नहीं रहना चाहिए था, क्योंकि यदि हमारे प्रतिद्वंद्वियों को पता चलता कि हम लिस्प का उपयोग कर रहे हैं, तो वे समझ नहीं पाते कि क्यों: "यदि वे इतने स्मार्ट होते तो वे पहले से ही लिस्प में प्रोग्रामिंग कर रहे होते।"
[3] सभी भाषाएं टूरिंग समकक्ष होने के मायने में समान रूप से शक्तिशाली हैं, लेकिन यह शब्द का वह अर्थ नहीं है जिसकी प्रोग्रामर्स को चिंता है। (कोई भी टूरिंग मशीन प्रोग्राम करना नहीं चाहता।) प्रोग्रामर्स को चिंता करने वाली शक्ति का प्रकार औपचारिक रूप से परिभाषित नहीं हो सकता, लेकिन इसे समझाने का एक तरीका यह हो सकता है कि यह उन सुविधाओं से संबंधित है जिन्हें आप कम शक्तिशाली भाषा में केवल उस अधिक शक्तिशाली भाषा के लिए एक व्याख्याता लिखकर प्राप्त कर सकते हैं। यदि भाषा A में स्ट्रिंग से स्पेस हटाने का ऑपरेटर है और भाषा B में नहीं है, तो यह शायद A को अधिक शक्तिशाली नहीं बनाता, क्योंकि आप B में इसे एक सहायक कार्यक्रम लिखकर ठीक कर सकते हैं। लेकिन यदि A में रिकर्शन का समर्थन है और B में नहीं, तो यह संभवतः कुछ ऐसा है जिसे लाइब्रेरी फ़ंक्शन लिखकर ठीक नहीं किया जा सकता।
[4] नर्डों के लिए नोट: या शायद एक लैटिस, शीर्ष की ओर संकुचित होता है; यहां महत्वपूर्ण बात आकार नहीं है बल्कि यह विचार है कि कम से कम एक आंशिक क्रम है।
[5] यह थोड़ा गलत है कि मैक्रो को एक अलग सुविधा के रूप में माना जाए। व्यावहारिक रूप से, उनकी उपयोगिता अन्य लिस्प सुविधाओं जैसे लेक्सिकल क्लोजर और रेस्ट पैरामीटर्स से काफी बढ़ जाती है।
[6] इसके परिणामस्वरूप, प्रोग्रामिंग भाषाओं की तुलनाएं या तो धार्मिक युद्धों के रूप में होती हैं या फिर स्नातक पाठ्यपुस्तकों में इतनी तटस्थ होती हैं कि वे वास्तव में मानवशास्त्रीय कृतियां हो जाती हैं। जो लोग अपने शांति का मूल्य करते हैं, या पदोन्नति चाहते हैं, इस विषय से बचते हैं। लेकिन यह प्रश्न केवल आधा धार्मिक है; अध्ययन करने के लिए वहां कुछ है, खासकर यदि आप नई भाषाएं डिज़ाइन करना चाहते हैं।