कंप्यूटर के लिए कोड लिखना कठिन है, लेकिन इंसानों के लिए कोड लिखना उससे भी कठिन है
- कंप्यूटर के लिए कोड लिखना अपने आप में कठिन है। क्योंकि बड़े 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 टिप्पणियां
Hacker News राय
लोग अलग-अलग तरीकों से सीखते हैं
writing और empathy महत्वपूर्ण हैं
हर कोई उदाहरणों से नहीं सीखता
code इंसानों के लिए लिखा जाता है
Code Complete से उद्धरण
code लिखना इंसानों के लिए है
IDE के विकास पर राय
blog post का प्रचार
programming सीखने के तरीक़े पर राय
उदाहरणों और मूल अवधारणाओं का महत्व