1 पॉइंट द्वारा GN⁺ 2024-09-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें

कंप्यूटर के लिए कोड लिखना कठिन है, लेकिन इंसानों के लिए कोड लिखना उससे भी कठिन है

  • कंप्यूटर के लिए कोड लिखना अपने आप में कठिन है। क्योंकि बड़े business goals को छोटे-छोटे logical निर्देशों में तोड़ना पड़ता है.
  • लेकिन इंसानों के लिए कोड लिखना उससे भी कठिन है। यह computer science और psychology का मिला-जुला काम है.
  • Richard Feynman की बात उधार लें तो, अगर electrons के भी emotions होते, तो physics कितनी कठिन हो जाती, इसकी कल्पना कीजिए। इंसानों के लिए programming को समझाने के लिए यह तुलना बिल्कुल सटीक है.

शुरुआत ही product है

  • user feedback सुनना ज़रूरी है, लेकिन ज़्यादातर feedback उन power users से आता है जो product को बार-बार इस्तेमाल करते हैं.
  • यहाँ survivorship bias मौजूद रहता है। जो users शुरुआत ही नहीं कर पाए, उनका feedback लगभग कभी सुनाई नहीं देता.
  • consumer products ने लंबे समय से onboarding process को optimize किया है। developer tools को भी वैसा ही करना चाहिए.
  • onboarding process को product का हिस्सा मानना चाहिए, setup को न्यूनतम रखना चाहिए, ताकि user कुछ ही मिनटों में product इस्तेमाल कर सके.

इंसान 'core concepts' से नहीं, examples से सीखते हैं

  • इंसान pattern matching में बहुत अच्छे होते हैं। वहीं कंप्यूटर सख्त logic का पालन करते हैं.
  • बहुत-से developer tool docs ऐसे लिखे जाते हैं मानो वे computer program हों। यह इंसानों के लिए उपयुक्त नहीं है.
  • examples के ज़रिए सीखना ज़्यादा प्रभावी होता है। examples users को tool समझने में मदद करते हैं.

सफलता के जाल में गिरना

  • programming का default mode error fixing है। users अपना अधिकांश समय errors ठीक करने में बिताते हैं.
  • इसलिए errors को success की ओर ले जाना महत्वपूर्ण है.
  • errors को एक अवसर की तरह इस्तेमाल करके users को सही रास्ते की ओर guide करना चाहिए। exception handling में code snippets शामिल करने चाहिए, और warning messages के ज़रिए मदद देनी चाहिए.

वैचारिक overload से बचना

  • नए concepts को समझने की ज़रूरत friction पैदा करती है.
  • 2-3 concepts ठीक हैं, लेकिन 8 नए concepts सीखना भारी पड़ता है.
  • आदर्श framework वह है जो कम concepts के साथ powerful features दे। उदाहरण के लिए, React कुछ सरल concepts से बहुत शक्तिशाली capabilities देता है.

वैचारिक duck principle

  • नया concept लाते समय users के लिए परिचित terminology का उपयोग करना महत्वपूर्ण है.
  • उदाहरण के लिए, किसी नए value का evaluation करने वाली चीज़ को 'function' कहना बेहतर है। इससे users अपने मौजूदा mental models का इस्तेमाल कर सकते हैं.

programmability

  • users codebase में रचनात्मक काम करेंगे.
  • framework की लगभग हर चीज़ 'programmable' होनी चाहिए.
  • CLI पर निर्भर रहने के बजाय चीज़ों को सीधे code से call किया जा सके, और configuration को SDK या API में बदला जाना चाहिए.

magic, defaults और syntax sugar के साथ सावधान रहें

  • defaults और magic जैसी सुविधाओं को बहुत सोच-समझकर लाना चाहिए.
  • अगर defaults 97% से अधिक मामलों में और magic 99% से अधिक मामलों में लागू नहीं होते, तो उन्हें लाने से बचना चाहिए.
  • coding golf नहीं है। लक्ष्य कम-से-कम code लिखना नहीं, बल्कि readability को महत्व देना होना चाहिए.

इंसानों के लिए कोड लिखना कठिन है

  • ज़्यादातर चीज़ें immutable होनी चाहिए.
  • 'scaffolding' (code generation) से बचना चाहिए.
  • feedback loop को बेहद तेज़ बनाना चाहिए.
  • ऐसा disposal process होना चाहिए जिससे users आसानी से चीज़ों से निपट सकें.
  • docs और examples में code snippets के लिए automated tests का उपयोग करना चाहिए.

GN⁺ का सार

  • यह लेख इंसानों के लिए कोड लिखने की कठिनाई और उसके समाधान पर बात करता है.
  • user-friendly developer tools बनाना महत्वपूर्ण है, और इसकी शुरुआत onboarding process से होती है.
  • examples के ज़रिए सीखना प्रभावी है, और errors को success की दिशा में मोड़ना इसकी कुंजी है.
  • नए concepts लाते समय users के लिए परिचित शब्दों का इस्तेमाल करना चाहिए और programmability को ध्यान में रखना चाहिए.
  • defaults और magic जैसी सुविधाओं को सावधानी से लाना चाहिए, और readability को प्राथमिकता देनी चाहिए.

1 टिप्पणियां

 
GN⁺ 2024-09-28
Hacker News राय
  • लोग अलग-अलग तरीकों से सीखते हैं

    • कुछ लोग पहले मूल अवधारणा समझना और उसके बाद उदाहरण देखना पसंद करते हैं
    • कई tutorials ऐसे होते हैं जो Lego assembly की तरह हाथ पकड़कर चलाते हैं
    • लोग यह जानना चाहते हैं कि निर्णय कैसे और क्यों लिए जाते हैं
    • किसी नई library या framework को अपनाते समय, वे पहले परिचयात्मक टेक्स्ट पढ़ते हैं और "Getting started" code sample को छोड़ देते हैं
    • advanced sections में अवधारणाओं पर अधिक चर्चा होती है, इसलिए वे पहले उन्हें देखते हैं
  • writing और empathy महत्वपूर्ण हैं

    • code लिखना और application बनाना अलग बातें हैं
    • बाहर की ओर उन्मुख developers architecture और documentation पर अधिक ध्यान देते हैं
    • simplicity महत्वपूर्ण है
    • application लिखना essay लिखने जैसा है
    • frameworks डेवलपर की organizational ability में बाधा डालते हैं
  • हर कोई उदाहरणों से नहीं सीखता

    • कुछ लोग general से specific की ओर सीखते हैं
    • ऐसे लोगों को K12 शिक्षा में अक्सर नज़रअंदाज़ किया जाता है
  • code इंसानों के लिए लिखा जाता है

    • समस्या को समग्र रूप से समझना, stakeholders के साथ काम करना, और efficient algorithms बनाना महत्वपूर्ण है
    • code लिखना कठिन हिस्सा नहीं है
  • Code Complete से उद्धरण

    • "प्रोग्रामिंग का छोटा हिस्सा ऐसा program लिखना है जिसे computer पढ़ सके, और बड़ा हिस्सा ऐसा लिखना है जिसे दूसरे इंसान पढ़ सकें"
  • code लिखना इंसानों के लिए है

    • computer के लिए machine instructions ही काफ़ी हैं
    • code इंसानी विचारों को formalize करने का एक तरीका है
  • IDE के विकास पर राय

    • basic intellisense बेहतर हुआ है, लेकिन coding की अवधारणा बहुत नहीं बदली है
    • नए tools और libraries तक पहुँचना आसान हुआ है
    • लोग coding का काम computer को सौंपकर creation पर ध्यान देना चाहते हैं
    • ऐसे tools चाहिए जो language की छोटी-छोटी details अपने-आप संभाल लें
    • लोग कई methods को एक साथ screen पर देखना चाहते हैं
    • लोग data transformation अपने-आप होना चाहते हैं
  • blog post का प्रचार

    • उन्होंने "Move Fast & Document Things" नाम की एक blog post लिखी
    • उसमें code writing culture साझा किया
  • programming सीखने के तरीक़े पर राय

    • लोग छोटे programs लिखते हुए सीखते हैं
    • foundational knowledge की कमी के कारण वे बेहतर software development jobs के लिए apply नहीं कर सके
    • basics को हमेशा सीखना महत्वपूर्ण है
  • उदाहरणों और मूल अवधारणाओं का महत्व

    • examples और core concepts दोनों महत्वपूर्ण हैं
    • अच्छी तरह परिभाषित और documented core concepts चाहिए
    • "Getting Started" guide में examples शामिल होने चाहिए