16 पॉइंट द्वारा GN⁺ 2024-05-21 | 5 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
zihado 2024-05-23

Windows में तो शायद Everything ही है, हाहा

 
bus710 2024-05-23

Magit आखिर इतना अच्छा क्या है कि इसका नाम ऐसी उत्कृष्ट सॉफ़्टवेयर की कतार में आता है? मैं Emacs इस्तेमाल नहीं करता, इसलिए समझ नहीं पाता।
सुना है कि Nvim में Neogit, Magit से प्रभावित है, तो शायद वही इस्तेमाल करके देखना चाहिए...

 
bbulbum 2024-05-23

lazygit भी सुझाऊँगा हाहा

 
bus710 2024-05-23

धन्यवाद।
लगता है वीकेंड पर superfile और lazygit इंस्टॉल करके थोड़ा देखना पड़ेगा।

 
GN⁺ 2024-05-21
Hacker News राय

Hacker News टिप्पणियों का सारांश

  • Compiler Explorer:

    • Compiler Explorer ने compiler और performance optimization पर होने वाली चर्चाओं को काफ़ी बदल दिया है.
    • इसने फ़ोरम में होने वाली चर्चाओं की गुणवत्ता पर सकारात्मक प्रभाव डाला है.
    • साहसिक दावों को links के ज़रिए जल्दी सत्यापित किया जा सकता है.
    • llvm-mca और uiCA जैसे tools भी उपयोगी हैं.
  • Windows उपयोग पर राय:

    • Windows के बारे में एक संतुलित नज़रिया पेश किया गया है.
    • NT परिवार का Windows एक शानदार operating system है.
    • gaming के लिए Windows इंस्टॉल करके रखा जाता है.
  • Docker:

    • Docker ने consulting करियर के दौरान बहुत समय बचाया है.
    • यह पुराने projects को जल्दी चलाने में मदद करता है.
    • अलग-अलग database servers इंस्टॉल करने की ज़रूरत नहीं रहती.
    • यह Python environments को reproducible और parallel रूप से चलाने योग्य बनाता है.
  • Spring Framework:

    • Spring Framework dependency injection की अवधारणा को समझने में बाधा बन सकता है.
    • यह कई Java developers को यह सोचने पर मजबूर करता है कि जटिल frameworks ज़रूरी हैं.
    • Spring ख़ुद उपयोगी है, लेकिन यह software को ज़्यादा जटिल और कम portable बना सकता है.
  • Nix:

    • Nix और Nixpkgs के साथ कई जटिल काम किए जा सकते हैं.
    • Rust binaries के static builds जैसी चीज़ें आसानी से की जा सकती हैं.
    • यह विभिन्न build options और caching सुविधाएँ देता है.
    • Nix बहुत उपयोगी है, लेकिन NixOS के साथ सावधानी से आगे बढ़ना चाहिए.
  • Emacs:

    • Emacs bug fixing के काम को तकनीकी अभ्यास में बदल देता है.
    • यह उबाऊ कामों को मज़ेदार बना देता है.
  • 'Round' अवधारणा:

    • 'Round' अवधारणा न्यूनतम core volume के साथ अधिकतम interface area प्रदान करती है.
    • Emacs और Git का core छोटा, सरल, लेकिन शक्तिशाली है.
  • Magit:

    • Magit सादगी, प्रभावशीलता और discoverability का एक पाठ्यपुस्तक-जैसा उदाहरण है.
    • यह Git की सुविधाओं को बेहतर ढंग से सामने लाता है.
    • यह अपनी अलग terminology या workflow नहीं थोपता.
  • SVN और Git की तुलना:

    • SVN उपयोग का अनुभव बेहद नकारात्मक था.
    • Git कहीं ज़्यादा intuitive और समझने में आसान लगा.
    • Git का उपयोग करने पर workflow बेहतर हुआ.
  • Linux, Emacs, Bazel, Magit उपयोग अनुभव:

    • Linux पर Emacs और Bazel का उपयोग करके काम किया जाता है.
    • blogs देखे जाते हैं, Emacs में काम save किया जाता है, और Magit से commit messages लिखे जाते हैं.
    • Git repository में push किया जाता है.