Loading...

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

Original

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

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

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

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

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

गुप्त हथियार

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ब्लब पैराडॉक्स

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

नोट्स

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

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

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

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

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

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

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