Enlightenmentware - मुझे जागृत करने वाले सॉफ़्टवेयर
(mmapped.blog)- UNIX, Git, Emacs, Boost.Graph, Bazel
- एक प्रोग्रामर के रूप में मैं हर दिन सॉफ़्टवेयर टूल्स के साथ इंटरैक्ट करता हूँ, लेकिन ज़्यादातर टूल्स सिर्फ़ किसी तरह काम पूरा करने के लिए ही इस्तेमाल होते हैं
- कभी-कभी ऐसे सॉफ़्टवेयर मिलते हैं जो सिर्फ़ उपयोगी होने से आगे बढ़कर कल्पना को उत्तेजित करते हैं, नई संभावनाएँ खोलते हैं, और सिस्टम डिज़ाइन करने के तरीके को प्रभावित करते हैं
- ऐसे सॉफ़्टवेयर को मैं ‘Enlightenmentware’ कहता हूँ
- प्रोग्रामर के लिए सबसे सामान्य जागृति का स्रोत उसकी इस्तेमाल की जाने वाली प्रोग्रामिंग भाषा होती है, इसमें शौक़ से सीखी गई भाषाएँ भी शामिल हैं
- MASM, C, Prolog, Idris जैसी प्रोग्रामिंग भाषाओं के साथ काम करते हुए मैंने कई गहरे बोध के क्षण अनुभव किए
- चूँकि भाषा सीखने का सोचने-समझने की क्षमता के विस्तार पर असर बहुत पहले से जाना जाता है, इसलिए इस लेख में भाषाओं पर ध्यान देने के बजाय केवल ऐसे सॉफ़्टवेयर पर ध्यान रखा गया है जो जागृति देते हैं
UNIX
unix उपयोगकर्ता-मित्रवत है—बस यह अपने मित्र खुद चुनता है।
अज्ञात, "Art of unix Programming" by Eric S. Raymond
- 2008 में, विश्वविद्यालय में पढ़ाई करते समय मैंने अपनी पहली प्रोग्रामिंग नौकरी ढूँढना शुरू किया
- ज़्यादातर जॉब पोस्टिंग में UNIX और socket का ज्ञान माँगा जाता था
- विश्वविद्यालय के पाठ्यक्रम में unix या operating system पर कोई कोर्स नहीं था, इसलिए मैंने खुद पढ़ने का निर्णय लिया
- Andrey Robachevsky आदि की किताब "The unix Operating System" के माध्यम से मैंने unix की दुनिया में प्रवेश किया
- Mandriva Linux इंस्टॉल करते हुए मैंने unix environment को खोजना शुरू किया
- उसके बाद से unix जीवन के हर चरण में मेरे साथ रहा
- अधिकांश सॉफ़्टवेयर unix environment में चलते हैं, और आज भी मैं "Advanced Programming in the unix Environment" किताब का सहारा लेता हूँ
Git
git से अपने ही पैर पर कुल्हाड़ी मारना आसान है, लेकिन पहले वाले पैर पर वापस जाना और उसे मौजूदा टांग के साथ merge करना भी आसान है।
Jack William Bell
- 2009 की शुरुआत में, Rational ClearCase का उपयोग करते हुए मैंने पहली बार version control system से परिचय पाया
- ClearCase बेहद उलझाऊ था और बस न्यूनतम आवश्यकताएँ ही पूरी करता था
- बाद में मैंने Subversion का उपयोग किया और "Version Control with Subversion" किताब के ज़रिए उसे सीखा
- Subversion समझने और इस्तेमाल करने में आसान था, लेकिन personal projects के लिए असुविधाजनक था
- उसके बाद मुझे Git मिला
- Git की learning curve बहुत steep थी और वह उलझाने वाला था, लेकिन ClearCase से बिल्कुल अलग तरह से
- Git ने version control इस्तेमाल करने की friction को हटा दिया, जिससे हर क़ीमती चीज़ को version control में रखना संभव हो गया
- Git का डिज़ाइन distributed systems, acyclic graphs, और content-addressed storage का एक आकर्षक और सुरुचिपूर्ण मिश्रण था
- Git के अंदरूनी हिस्सों को सीखना इतना दिलचस्प था कि मेरी रुचि दूसरे version control systems में भी बढ़ गई
- Git की मुख्य कमी यह है कि इसका snapshot-oriented approach merge को समझना कठिन बना देता है
Emacs
कोई भी text editor फ़ाइल save कर सकता है, लेकिन आत्मा को केवल Emacs ही बचा सकता है।
Per Abrahamsen
- मैंने अपना पहला प्रोग्राम Turbo Pascal 7.0 की परिचित नीली विंडो में संपादित किया
- विश्वविद्यालय में मैंने Pascal से प्रोग्रामिंग सीखी, और बाद में C++ और Java का उपयोग किया
- अपनी पहली प्रोग्रामिंग नौकरी में मैंने NEdit का उपयोग किया, लेकिन Vim और Emacs में रुचि लेने लगा
- Vim किसी वाद्य यंत्र को बजाने जैसा चुनौतीपूर्ण था, लेकिन मज़ेदार भी
- Emacs एक Lisp machine है जो text editing और window management की सुविधाएँ प्रदान करती है
- Emacs की आंतरिक संरचना साफ़, सुव्यवस्थित और अच्छी तरह documented है
- Emacs Lisp का उपयोग करके इसे extend करना दूसरे editors की तुलना में कहीं अधिक आसान है
Boost.Graph
reusable code के फ़ैशन के प्रति मेरा गहरा पक्षपात है। मुझे लगता है कि "reeditable code" किसी black box या toolkit से कहीं बेहतर है।
Donald Knuth, Andrew Binstock के साथ एक साक्षात्कार
- 2013 की नववर्ष पूर्वसंध्या पर मैंने Boost Graph Library पढ़ी
- अधिकांश algorithm libraries किसी विशेष data representation पर निर्भर होती हैं, जिससे उन्हें मौजूदा projects में integrate करना कठिन हो जाता है
- Boost.Graph library generic programming का उपयोग करके इस समस्या को हल करती है
- मैंने इस library का वास्तव में कभी उपयोग नहीं किया, लेकिन इसके डिज़ाइन ने STL design और generic programming की मेरी समझ को गहरा किया
Bazel
अगर make आपकी अपेक्षा के अनुसार काम नहीं करता, तो बहुत संभव है कि makefile ही ग़लत हो।
Adam de Boor, "PMake—A Tutorial"
- 2009 में, एक research project के लिए मैंने अपना पहला
Makefileलिखा makeकी जटिलता ने मुझे किसी बेहतर टूल की चाह दी- मैंने कई build systems आज़माए, लेकिन सभी असंतोषजनक लगे
- 2016 में, Google में शामिल होने के बाद मैंने
blazeका उपयोग किया - Bazel build system की आख़िरी missing puzzle piece था
- Bazel तेज़, सटीक, इस्तेमाल में आसान, और language-agnostic है
निष्कर्ष
- अच्छे Enlightenmentware की समान विशेषताएँ:
- वे गहरे समस्याओं को हल करते हैं, और उन समस्याओं से निपटते हैं जिनका सामना हम रोज़मर्रा में करते हैं
- उनकी सतह छोटी होती है, लेकिन गहराई बहुत होती है
- वे अपने भीतर झाँकने, खोजने और समझने के लिए आमंत्रित और प्रोत्साहित करते हैं
GN⁺ की राय
- UNIX का महत्व: UNIX कई प्रोग्रामिंग environments में मूल operating system के रूप में उपयोग होता है, और system programming की बुनियादी समझ के लिए आवश्यक है
- Git की learning curve: Git शुरुआत में कठिन लगता है, लेकिन version control के एक शक्तिशाली टूल के रूप में अनिवार्य है। खासकर distributed systems और collaborative environments में यह बहुत उपयोगी है
- Emacs की लचीलापन: Emacs text editor से कहीं बढ़कर है, और खास तौर पर उन लोगों के लिए सिफ़ारिश करने योग्य है जिन्हें Lisp programming में रुचि है
- Boost.Graph और generic programming: Boost.Graph generic programming का एक मज़बूत उदाहरण है, जिससे जटिल algorithms को प्रभावी ढंग से लागू करना सीखा जा सकता है
- Bazel की दक्षता: Bazel बड़े पैमाने के projects में build system की efficiency को अधिकतम करने वाला टूल है, और Google जैसी बड़ी कंपनियों में विशेष रूप से उपयोगी है
5 टिप्पणियां
Windows में तो शायद Everything ही है, हाहा
Magit आखिर इतना अच्छा क्या है कि इसका नाम ऐसी उत्कृष्ट सॉफ़्टवेयर की कतार में आता है? मैं Emacs इस्तेमाल नहीं करता, इसलिए समझ नहीं पाता।
सुना है कि Nvim में Neogit, Magit से प्रभावित है, तो शायद वही इस्तेमाल करके देखना चाहिए...
lazygitभी सुझाऊँगा हाहाधन्यवाद।
लगता है वीकेंड पर superfile और lazygit इंस्टॉल करके थोड़ा देखना पड़ेगा।
Hacker News राय
Hacker News टिप्पणियों का सारांश
Compiler Explorer:
Windows उपयोग पर राय:
Docker:
Spring Framework:
Nix:
Emacs:
'Round' अवधारणा:
Magit:
SVN और Git की तुलना:
Linux, Emacs, Bazel, Magit उपयोग अनुभव: