औसत को मात देना

स्टार्टअप शुरू करना चाहते हैं? Y Combinator से फंड प्राप्त करें।


अप्रैल 2001, संशोधित अप्रैल 2003

(यह लेख 2001 फ्रांज डेवलपर सिम्पोजियम में दिए गए भाषण से लिया गया है।)

1995 की गर्मियों में, मेरे दोस्त रॉबर्ट मॉरिस और मैंने Viaweb नामक एक स्टार्टअप शुरू किया। हमारी योजना एक ऐसा सॉफ्टवेयर लिखना था जो अंतिम उपयोगकर्ताओं को ऑनलाइन स्टोर बनाने की सुविधा दे सके। उस समय इस सॉफ्टवेयर के बारे में जो नवीनता थी, वह यह थी कि यह हमारे सर्वर पर चलता था, इंटरफ़ेस के रूप में सामान्य वेब पृष्ठों का उपयोग करता था।

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

इस सॉफ्टवेयर के बारे में एक और असामान्य बात यह थी कि यह मुख्य रूप से लिस्प नामक प्रोग्रामिंग भाषा में लिखा गया था। यह लिस्प में लिखे गए पहले बड़े अंतिम-उपयोगकर्ता अनुप्रयोगों में से एक था, जिसे तब तक ज्यादातर विश्वविद्यालयों और अनुसंधान प्रयोगशालाओं में इस्तेमाल किया जाता था। [1]

गुप्त हथियार

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

लिस्प सीखने लायक है क्योंकि जब आप इसे अंततः समझ जाते हैं तो आपको एक गहरा ज्ञान अनुभव प्राप्त होता है; वह अनुभव आपको अपने बाकी दिनों के लिए एक बेहतर प्रोग्रामर बनाएगा, भले ही आप वास्तव में लिस्प का बहुत अधिक उपयोग न करें।

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

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

तो अगर लिस्प आपको एक बेहतर प्रोग्रामर बनाता है, जैसा कि वह कहता है, तो आप इसका उपयोग क्यों नहीं करना चाहेंगे? यदि किसी चित्रकार को एक ऐसा ब्रश दिया जाए जो उसे एक बेहतर चित्रकार बना दे, तो मुझे लगता है कि वह उसे अपनी सभी पेंटिंग्स में इस्तेमाल करना चाहेगा, है ना? मैं यहाँ एरिक रेमंड का मज़ाक उड़ाने की कोशिश नहीं कर रहा हूँ। कुल मिलाकर, उनकी सलाह अच्छी है। लिस्प के बारे में जो वह कहते हैं वह काफी हद तक पारंपरिक ज्ञान है। लेकिन पारंपरिक ज्ञान में एक विरोधाभास है: लिस्प आपको एक बेहतर प्रोग्रामर बनाएगा, और फिर भी आप इसका उपयोग नहीं करेंगे।

क्यों नहीं? प्रोग्रामिंग भाषाएँ अंततः केवल उपकरण हैं। यदि लिस्प वास्तव में बेहतर प्रोग्राम उत्पन्न करता है, तो आपको इसका उपयोग करना चाहिए। और यदि नहीं, तो किसे इसकी आवश्यकता है?

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

रॉबर्ट और मैं दोनों लिस्प को अच्छी तरह जानते थे, और हम अपने अंतर्ज्ञान पर भरोसा करने और लिस्प के साथ जाने का कोई कारण नहीं देख सके। हम जानते थे कि बाकी सभी अपना सॉफ्टवेयर C++ या पर्ल में लिख रहे थे। लेकिन हम यह भी जानते थे कि इसका कोई मतलब नहीं है। यदि आप उस तरह से तकनीक चुनते, तो आप विंडोज चला रहे होते। जब आप तकनीक चुनते हैं, तो आपको यह देखना होगा कि दूसरे लोग क्या कर रहे हैं, और केवल वही विचार करना होगा जो सबसे अच्छा काम करेगा।

यह एक स्टार्टअप में विशेष रूप से सच है। एक बड़ी कंपनी में, आप वही कर सकते हैं जो अन्य सभी बड़ी कंपनियाँ कर रही हैं। लेकिन एक स्टार्टअप वही नहीं कर सकता जो अन्य सभी स्टार्टअप करते हैं। मुझे नहीं लगता कि बहुत से लोग इसे समझते हैं, यहाँ तक कि स्टार्टअप में भी।

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

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

1995 में वापस, हम कुछ ऐसा जानते थे जो मुझे नहीं लगता कि हमारे प्रतिस्पर्धियों ने समझा था, और कुछ ही इसे अभी भी समझते हैं: जब आप ऐसा सॉफ्टवेयर लिख रहे हों जो केवल आपके अपने सर्वर पर चलना हो, तो आप अपनी इच्छानुसार कोई भी भाषा इस्तेमाल कर सकते हैं। जब आप डेस्कटॉप सॉफ्टवेयर लिख रहे हों, तो ऑपरेटिंग सिस्टम की भाषा के समान भाषा में एप्लिकेशन लिखने की ओर एक मजबूत झुकाव होता है। दस साल पहले, एप्लिकेशन लिखना सी में एप्लिकेशन लिखना था। लेकिन वेब-आधारित सॉफ्टवेयर के साथ, खासकर जब आपके पास भाषा और ऑपरेटिंग सिस्टम दोनों का सोर्स कोड हो, तो आप अपनी इच्छानुसार कोई भी भाषा इस्तेमाल कर सकते हैं।

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

यदि आप कोई भी भाषा इस्तेमाल कर सकते हैं, तो आप कौन सी इस्तेमाल करते हैं? हमने लिस्प चुना। एक बात के लिए, यह स्पष्ट था कि इस बाजार में तेजी से विकास महत्वपूर्ण होगा। हम सभी खरोंच से शुरुआत कर रहे थे, इसलिए जो कंपनी अपने प्रतिस्पर्धियों से पहले नई सुविधाएँ पूरी कर सकती थी, उसे एक बड़ा फायदा होगा। हम जानते थे कि लिस्प सॉफ्टवेयर को जल्दी से लिखने के लिए एक बहुत अच्छी भाषा है, और सर्वर-आधारित एप्लिकेशन तेजी से विकास के प्रभाव को बढ़ाते हैं, क्योंकि आप सॉफ्टवेयर को जैसे ही यह तैयार हो जाता है, जारी कर सकते हैं।

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

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

इस प्रयोग के परिणाम क्या थे? कुछ हद तक आश्चर्यजनक रूप से, यह काम कर गया। हमारे पास अंततः कई प्रतिस्पर्धी थे, लगभग बीस से तीस, लेकिन उनमें से कोई भी सॉफ्टवेयर हमारे साथ प्रतिस्पर्धा नहीं कर सका। हमारे पास एक WYSIWYG ऑनलाइन स्टोर बिल्डर था जो सर्वर पर चलता था और फिर भी डेस्कटॉप एप्लिकेशन जैसा लगता था। हमारे प्रतिस्पर्धियों के पास सीजीआई स्क्रिप्ट थे। और हम हमेशा सुविधाओं में उनसे बहुत आगे थे। कभी-कभी, हताशा में, प्रतिस्पर्धी ऐसी सुविधाएँ पेश करने की कोशिश करते थे जो हमारे पास नहीं थीं। लेकिन लिस्प के साथ हमारा विकास चक्र इतना तेज था कि हम कभी-कभी किसी प्रतिस्पर्धी द्वारा प्रेस विज्ञप्ति में घोषित करने के एक या दो दिन के भीतर एक नई सुविधा की नकल कर सकते थे। जब तक प्रेस विज्ञप्ति को कवर करने वाले पत्रकारों को हमें कॉल करने का समय मिलता, तब तक हमारे पास भी नई सुविधा होती।

हमारे प्रतिस्पर्धियों को ऐसा लगा होगा कि हमारे पास किसी प्रकार का गुप्त हथियार है - कि हम उनके Enigma ट्रैफ़िक को डिकोड कर रहे थे या कुछ और। वास्तव में हमारे पास एक गुप्त हथियार था, लेकिन यह जितना वे समझते थे उससे कहीं सरल था। कोई भी उनकी सुविधाओं की खबर हमें लीक नहीं कर रहा था। हम बस किसी भी चीज़ से तेज़ी से सॉफ्टवेयर विकसित करने में सक्षम थे।

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

हमारा गुप्त हथियार समान था। हमने अपना सॉफ्टवेयर एक अजीब एआई भाषा में लिखा था, जिसमें कोष्ठकों से भरी एक विचित्र वाक्य रचना थी। वर्षों से लिस्प को इस तरह से वर्णित सुनना मुझे परेशान करता था। लेकिन अब यह हमारे फायदे में काम आया। व्यवसाय में, आपके प्रतिस्पर्धियों द्वारा न समझी जाने वाली तकनीकी बढ़त से अधिक मूल्यवान कुछ भी नहीं है। व्यवसाय में, युद्ध की तरह, आश्चर्य बल के बराबर है।

और इसलिए, मुझे यह कहते हुए थोड़ा शर्मिंदगी हो रही है, कि जब हम Viaweb पर काम कर रहे थे तब मैंने लिस्प के बारे में कभी भी सार्वजनिक रूप से कुछ नहीं कहा। हमने कभी भी प्रेस को इसका उल्लेख नहीं किया, और यदि आप हमारी वेबसाइट पर लिस्प की खोज करते, तो आपको मेरे बायो में केवल दो किताबों के शीर्षक मिलते। यह कोई संयोग नहीं था। एक स्टार्टअप को अपने प्रतिस्पर्धियों को यथासंभव कम जानकारी देनी चाहिए। यदि वे नहीं जानते थे कि हमारा सॉफ्टवेयर किस भाषा में लिखा गया था, या उन्हें परवाह नहीं थी, तो मैं इसे ऐसे ही रखना चाहता था।[2]

जिन लोगों ने हमारी तकनीक को सबसे अच्छी तरह समझा, वे ग्राहक थे। उन्हें इस बात की परवाह नहीं थी कि Viaweb किस भाषा में लिखा गया था, लेकिन उन्होंने देखा कि यह बहुत अच्छा काम करता है। इसने उन्हें सचमुच मिनटों में शानदार दिखने वाले ऑनलाइन स्टोर बनाने की सुविधा दी। और इसलिए, ज्यादातर शब्द-प्रचार से, हमें अधिक से अधिक उपयोगकर्ता मिले। 1996 के अंत तक हमारे पास लगभग 70 स्टोर ऑनलाइन थे। 1997 के अंत तक हमारे पास 500 थे। छह महीने बाद, जब याहू ने हमें खरीदा, तो हमारे पास 1070 उपयोगकर्ता थे। आज, याहू स्टोर के रूप में, यह सॉफ्टवेयर अपने बाजार पर हावी है। यह याहू के अधिक लाभदायक हिस्सों में से एक है, और इसके साथ बनाए गए स्टोर याहू शॉपिंग की नींव हैं। मैंने 1999 में याहू छोड़ दिया, इसलिए मुझे ठीक से नहीं पता कि उनके पास अब कितने उपयोगकर्ता हैं, लेकिन आखिरी बार जब मैंने सुना तो लगभग 20,000 थे।

ब्लब विरोधाभास

लिस्प में इतना महान क्या है? और अगर लिस्प इतना महान है, तो हर कोई इसका उपयोग क्यों नहीं करता? ये अलंकारिक प्रश्न लगते हैं, लेकिन वास्तव में उनके सीधे जवाब हैं। लिस्प इसलिए महान है क्योंकि यह केवल भक्तों द्वारा देखी जाने वाली कोई जादुई गुणवत्ता के कारण नहीं है, बल्कि इसलिए कि यह उपलब्ध सबसे शक्तिशाली भाषा है। और हर कोई इसका उपयोग इसलिए नहीं करता क्योंकि प्रोग्रामिंग भाषाएँ केवल प्रौद्योगिकियाँ नहीं हैं, बल्कि मन की आदतें भी हैं, और कुछ भी इतनी धीमी गति से नहीं बदलता। बेशक, इन दोनों उत्तरों को समझाने की आवश्यकता है।

मैं एक चौंकाने वाले विवादास्पद बयान से शुरू करूंगा: प्रोग्रामिंग भाषाएँ शक्ति में भिन्न होती हैं।

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

हर कोई जानता है कि अपने पूरे प्रोग्राम को मशीन भाषा में हाथ से लिखना एक गलती है। जो कम समझा जाता है वह यह है कि यहाँ एक अधिक सामान्य सिद्धांत है: कि यदि आपके पास कई भाषाओं में से चुनने का विकल्प है, तो यह, अन्य सभी चीजें समान होने पर, किसी भी चीज़ के बजाय सबसे शक्तिशाली भाषा में प्रोग्रामिंग करने की एक गलती है। [3]

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

आप देख सकते हैं कि मशीन भाषा बहुत निम्न-स्तरीय है। लेकिन, कम से कम एक सामाजिक परंपरा के रूप में, उच्च-स्तरीय भाषाओं को अक्सर समकक्ष माना जाता है। वे नहीं हैं। तकनीकी रूप से "उच्च-स्तरीय भाषा" शब्द का कोई बहुत निश्चित अर्थ नहीं है। मशीन भाषाओं के साथ एक तरफ और सभी उच्च-स्तरीय भाषाओं के साथ दूसरी तरफ कोई विभाजन रेखा नहीं है। भाषाएँ अमूर्तता के एक निरंतरता [4] के साथ गिरती हैं, सबसे शक्तिशाली से लेकर मशीन भाषाओं तक, जो स्वयं शक्ति में भिन्न होती हैं।

कोबोल पर विचार करें। कोबोल एक उच्च-स्तरीय भाषा है, इस अर्थ में कि इसे मशीन भाषा में संकलित किया जाता है। क्या कोई गंभीरता से तर्क देगा कि कोबोल शक्ति में, उदाहरण के लिए, पाइथन के बराबर है? यह शायद पाइथन की तुलना में मशीन भाषा के करीब है।

या पर्ल 4 के बारे में क्या? पर्ल 4 और पर्ल 5 के बीच, लेक्सिकल क्लोजर को भाषा में जोड़ा गया था। अधिकांश पर्ल हैकर्स सहमत होंगे कि पर्ल 5 पर्ल 4 से अधिक शक्तिशाली है। लेकिन एक बार जब आप इसे स्वीकार कर लेते हैं, तो आप स्वीकार करते हैं कि एक उच्च-स्तरीय भाषा दूसरे से अधिक शक्तिशाली हो सकती है। और यह अनिवार्य रूप से अनुसरण करता है कि, विशेष मामलों को छोड़कर, आपको सबसे शक्तिशाली का उपयोग करना चाहिए जो आपको मिल सके।

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

प्रोग्रामर अपनी पसंदीदा भाषाओं से बहुत जुड़ जाते हैं, और मैं किसी की भावनाओं को ठेस नहीं पहुँचाना चाहता, इसलिए इस बिंदु को समझाने के लिए मैं ब्लब नामक एक काल्पनिक भाषा का उपयोग करूंगा। ब्लब अमूर्तता की निरंतरता के बीच में आता है। यह सबसे शक्तिशाली भाषा नहीं है, लेकिन यह कोबोल या मशीन भाषा से अधिक शक्तिशाली है।

और वास्तव में, हमारा काल्पनिक ब्लब प्रोग्रामर उनमें से किसी का भी उपयोग नहीं करेगा। बेशक वह मशीन भाषा में प्रोग्राम नहीं करेगा। कंपाइलर उसी के लिए होते हैं। और कोबोल के लिए, उसे समझ नहीं आता कि कोई भी इसके साथ कुछ भी कैसे कर सकता है। इसमें एक्स (आपकी पसंद की ब्लब सुविधा) भी नहीं है।

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

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

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

मुझे यह अपने अनुभव से पता है, एक हाई स्कूल के बच्चे के रूप में बेसिक में प्रोग्राम लिख रहा हूँ। वह भाषा रिकर्सन का समर्थन भी नहीं करती थी। रिकर्सन का उपयोग किए बिना प्रोग्राम लिखना मुश्किल है, लेकिन मुझे उस समय इसकी कमी महसूस नहीं हुई। मैं बेसिक में सोचता था। और मैं इसमें माहिर था। जो कुछ भी मैं देखता था उसका स्वामी।

एरिक रेमंड हैकर्स को जिन पांच भाषाओं की सलाह देते हैं, वे शक्ति की निरंतरता पर विभिन्न बिंदुओं पर आती हैं। वे एक-दूसरे के सापेक्ष कहाँ गिरते हैं, यह एक संवेदनशील विषय है। मैं जो कहूंगा वह यह है कि मुझे लगता है कि लिस्प शीर्ष पर है। और इस दावे का समर्थन करने के लिए मैं आपको उन चीजों में से एक के बारे में बताऊंगा जो मुझे अन्य चार भाषाओं को देखते समय गायब लगती हैं। आप उनमें कुछ भी कैसे कर सकते हैं, मुझे लगता है, मैक्रोज़ के बिना? [5]

कई भाषाओं में मैक्रो नामक कुछ होता है। लेकिन लिस्प मैक्रोज़ अद्वितीय हैं। और विश्वास करें या न करें, वे जो करते हैं वह कोष्ठकों से संबंधित है। लिस्प के डिजाइनरों ने सिर्फ अलग दिखने के लिए भाषा में वे सभी कोष्ठक नहीं डाले। ब्लब प्रोग्रामर के लिए, लिस्प कोड अजीब दिखता है। लेकिन वे कोष्ठक एक कारण से हैं। वे लिस्प और अन्य भाषाओं के बीच एक मौलिक अंतर का बाहरी प्रमाण हैं।

लिस्प कोड लिस्प डेटा ऑब्जेक्ट्स से बना होता है। और उस तुच्छ अर्थ में नहीं कि स्रोत फ़ाइलें वर्णों से बनी होती हैं, और स्ट्रिंग भाषा द्वारा समर्थित डेटा प्रकारों में से एक हैं। लिस्प कोड, पार्सर द्वारा पढ़े जाने के बाद, डेटा संरचनाओं से बना होता है जिन्हें आप पार कर सकते हैं।

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

प्रोग्राम जो प्रोग्राम लिखते हैं? आप ऐसा कब करना चाहेंगे? यदि आप कोबोल में सोचते हैं तो बहुत बार नहीं। यदि आप लिस्प में सोचते हैं तो हर समय। एक शक्तिशाली मैक्रो का उदाहरण देना यहाँ सुविधाजनक होगा, और कहना कि वहाँ! उसके बारे में क्या? लेकिन अगर मैंने ऐसा किया, तो यह लिस्प न जानने वाले किसी व्यक्ति के लिए केवल बकवास जैसा दिखेगा; यहाँ वह सब कुछ समझाने के लिए पर्याप्त जगह नहीं है जो आपको यह समझने के लिए जानने की आवश्यकता होगी कि इसका क्या मतलब है। Ansi Common Lisp में मैंने चीजों को जितनी जल्दी हो सके आगे बढ़ाने की कोशिश की, और फिर भी मैं मैक्रोज़ तक पृष्ठ 160 तक नहीं पहुँच पाया।

लेकिन मुझे लगता है कि मैं एक तरह का तर्क दे सकता हूँ जो सम्मोहक हो सकता है। Viaweb संपादक का स्रोत कोड शायद 20-25% मैक्रोज़ था। मैक्रोज़ को सामान्य लिस्प फ़ंक्शन की तुलना में लिखना कठिन होता है, और जब वे आवश्यक न हों तो उनका उपयोग करना खराब शैली माना जाता है। इसलिए उस कोड में हर मैक्रो इसलिए है क्योंकि यह आवश्यक है। इसका मतलब यह है कि इस प्रोग्राम में कम से कम 20-25% कोड ऐसी चीजें कर रहा है जो आप किसी अन्य भाषा में आसानी से नहीं कर सकते। हालांकि ब्लब प्रोग्रामर मेरे दावों के बारे में संदिग्ध हो सकता है कि लिस्प की रहस्यमय शक्तियां क्या हैं, यह उसे उत्सुक बनाना चाहिए। हम यह कोड अपने मनोरंजन के लिए नहीं लिख रहे थे। हम एक छोटे से स्टार्टअप थे, अपने प्रतिस्पर्धियों से हमारे बीच तकनीकी बाधाएं डालने के लिए जितना हम कर सकते थे उतना प्रोग्रामिंग कर रहे थे।

एक संदिग्ध व्यक्ति यह सोचना शुरू कर सकता है कि क्या यहाँ कोई संबंध था। हमारे कोड का एक बड़ा हिस्सा ऐसी चीजें कर रहा था जो अन्य भाषाओं में करना बहुत कठिन है। परिणामी सॉफ्टवेयर ने ऐसी चीजें कीं जो हमारे प्रतिस्पर्धियों का सॉफ्टवेयर नहीं कर सका। शायद कोई संबंध था। मैं आपको उस धागे का पालन करने के लिए प्रोत्साहित करता हूँ। हो सकता है कि उसके बैसाखी पर लंगड़ाते हुए उस बूढ़े आदमी में दिखने से कहीं ज़्यादा हो।

स्टार्टअप के लिए आइकिडो

लेकिन मुझे किसी को भी समझाने की उम्मीद नहीं है (25 से ऊपर) बाहर जाकर लिस्प सीखने के लिए। इस लेख का उद्देश्य किसी का मन बदलना नहीं है, बल्कि लिस्प का उपयोग करने में पहले से ही रुचि रखने वाले लोगों को आश्वस्त करना है - ऐसे लोग जो जानते हैं कि लिस्प एक शक्तिशाली भाषा है, लेकिन चिंता करते हैं क्योंकि यह व्यापक रूप से उपयोग नहीं की जाती है। एक प्रतिस्पर्धी स्थिति में, यह एक फायदा है। लिस्प की शक्ति इस तथ्य से बढ़ जाती है कि आपके प्रतिस्पर्धी इसे नहीं समझते हैं।

यदि आप एक स्टार्टअप में लिस्प का उपयोग करने के बारे में सोचते हैं, तो आपको इस बात की चिंता नहीं करनी चाहिए कि यह व्यापक रूप से समझा नहीं गया है। आपको उम्मीद करनी चाहिए कि यह ऐसा ही रहेगा। और यह संभावना है। प्रोग्रामिंग भाषाओं की प्रकृति यह है कि अधिकांश लोग जो वे वर्तमान में उपयोग करते हैं उससे संतुष्ट होते हैं। कंप्यूटर हार्डवेयर व्यक्तिगत आदतों की तुलना में बहुत तेजी से बदलता है कि प्रोग्रामिंग अभ्यास आमतौर पर प्रोसेसर से दस से बीस साल पीछे होता है। एमआईटी जैसी जगहों पर वे 1960 के दशक की शुरुआत में उच्च-स्तरीय भाषाओं में प्रोग्राम लिख रहे थे, लेकिन कई कंपनियाँ 1980 के दशक में भी मशीन भाषा में कोड लिखना जारी रखती थीं। मुझे यकीन है कि बहुत से लोग मशीन भाषा लिखना जारी रखते थे जब तक कि प्रोसेसर, एक बारटेंडर की तरह जो बंद करने और घर जाने के लिए उत्सुक था, अंततः उन्हें एक RISC निर्देश सेट पर स्विच करके बाहर नहीं निकाल दिया।

आम तौर पर प्रौद्योगिकी तेजी से बदलती है। लेकिन प्रोग्रामिंग भाषाएँ अलग हैं: प्रोग्रामिंग भाषाएँ केवल प्रौद्योगिकी नहीं हैं, बल्कि प्रोग्रामर क्या सोचते हैं। वे आधे प्रौद्योगिकी और आधे धर्म हैं। [6] और इसलिए मध्यस्थ भाषा, जिसका अर्थ है कि मध्यस्थ प्रोग्रामर जो भी भाषा का उपयोग करता है, वह हिमशैल की तरह धीमी गति से चलती है। गार्बेज कलेक्शन, जो लगभग 1960 में लिस्प द्वारा पेश किया गया था, अब व्यापक रूप से एक अच्छी बात मानी जाती है। रनटाइम टाइपिंग, वही, लोकप्रियता में बढ़ रही है। लेक्सिकल क्लोजर, जो 1970 के दशक की शुरुआत में लिस्प द्वारा पेश किए गए थे, अब, बस मुश्किल से, रडार स्क्रीन पर हैं। मैक्रोज़, जो 1960 के दशक के मध्य में लिस्प द्वारा पेश किए गए थे, अभी भी टेरा इंकॉग्निटा हैं।

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

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

यदि आपको कभी भी किसी स्टार्टअप के लिए काम करते हुए पाया जाता है, तो यहाँ प्रतिस्पर्धियों का मूल्यांकन करने के लिए एक उपयोगी टिप दी गई है। उनकी नौकरी लिस्टिंग पढ़ें। उनकी साइट पर बाकी सब कुछ स्टॉक फोटो या गद्य समकक्ष हो सकता है, लेकिन नौकरी लिस्टिंग को यह बताना होगा कि वे क्या चाहते हैं, या उन्हें गलत उम्मीदवार मिलेंगे।

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

नोट्स

[1] Viaweb में शुरुआत में दो भाग थे: संपादक, लिस्प में लिखा गया, जिसका उपयोग लोग अपनी साइट बनाने के लिए करते थे, और ऑर्डरिंग सिस्टम, सी में लिखा गया, जो ऑर्डर संभालता था। पहला संस्करण ज्यादातर लिस्प था, क्योंकि ऑर्डरिंग सिस्टम छोटा था। बाद में हमने दो और मॉड्यूल जोड़े, सी में लिखा गया एक इमेज जनरेटर, और ज्यादातर पर्ल में लिखा गया एक बैक-ऑफिस मैनेजर।

जनवरी 2003 में, याहू ने सी++ और पर्ल में लिखा गया संपादक का एक नया संस्करण जारी किया। यह कहना मुश्किल है कि प्रोग्राम अब लिस्प में नहीं लिखा गया है, हालांकि, क्योंकि इस प्रोग्राम को सी++ में अनुवाद करने के लिए उन्हें शाब्दिक रूप से एक लिस्प इंटरप्रेटर लिखना पड़ा: सभी पेज-जेनरेटिंग टेम्प्लेट की स्रोत फ़ाइलें अभी भी, जहाँ तक मुझे पता है, लिस्प कोड हैं। (देखें ग्रीनस्पन का दसवां नियम ।)

[2] रॉबर्ट मॉरिस का कहना है कि मुझे गुप्त रहने की आवश्यकता नहीं थी, क्योंकि भले ही हमारे प्रतिस्पर्धियों को पता होता कि हम लिस्प का उपयोग कर रहे हैं, वे यह नहीं समझते कि क्यों: "यदि वे इतने स्मार्ट होते तो वे पहले से ही लिस्प में प्रोग्रामिंग कर रहे होते।"

[3] सभी भाषाएँ ट्यूरिंग समतुल्य के अर्थ में समान रूप से शक्तिशाली होती हैं, लेकिन वह शब्द का वह अर्थ नहीं है जिसकी प्रोग्रामर परवाह करते हैं। (कोई भी ट्यूरिंग मशीन को प्रोग्राम नहीं करना चाहता।) जिस तरह की शक्ति की प्रोग्रामर परवाह करते हैं, उसे औपचारिक रूप से परिभाषित नहीं किया जा सकता है, लेकिन इसे समझाने का एक तरीका यह कहना होगा कि यह उन सुविधाओं को संदर्भित करता है जो कम शक्तिशाली भाषा में केवल अधिक शक्तिशाली भाषा के लिए एक इंटरप्रेटर लिखकर प्राप्त की जा सकती हैं। यदि भाषा ए में स्ट्रिंग्स से रिक्त स्थान हटाने के लिए एक ऑपरेटर है और भाषा बी में नहीं है, तो शायद यह ए को अधिक शक्तिशाली नहीं बनाता है, क्योंकि आप शायद बी में ऐसा करने के लिए एक सब रूटीन लिख सकते हैं। लेकिन यदि ए समर्थन करता है, उदाहरण के लिए, रिकर्सन, और बी नहीं करता है, तो यह संभवतः कुछ ऐसा नहीं है जिसे आप लाइब्रेरी फ़ंक्शन लिखकर ठीक कर सकते हैं।

[4] nerds के लिए नोट: या संभवतः एक जाली, शीर्ष की ओर संकरा; यहाँ आकार मायने नहीं रखता बल्कि यह विचार है कि कम से कम एक आंशिक क्रम है।

[5] मैक्रोज़ को एक अलग सुविधा के रूप में मानना थोड़ा भ्रामक है। व्यवहार में उनकी उपयोगिता लेक्सिकल क्लोजर और रेस्ट पैरामीटर जैसी अन्य लिस्प सुविधाओं से बहुत बढ़ जाती है।

[6] परिणामस्वरूप, प्रोग्रामिंग भाषाओं की तुलना या तो धार्मिक युद्धों के रूप में होती है या स्नातक पाठ्यपुस्तकें इतनी दृढ़ता से तटस्थ होती हैं कि वे वास्तव में मानव विज्ञान के कार्य होते हैं। जो लोग अपनी शांति को महत्व देते हैं, या कार्यकाल चाहते हैं, वे इस विषय से बचते हैं। लेकिन सवाल केवल आधा धार्मिक है; अध्ययन करने लायक कुछ है, खासकर यदि आप नई भाषाएँ डिजाइन करना चाहते हैं।