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