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