- MIT के शोध से पता चलता है कि code को समझना language processing की तुलना में जटिल problem solving में इस्तेमाल होने वाले multiple demand network पर अधिक निर्भर करता है
- Python और ScratchJr code पढ़ने वाले fMRI प्रयोग में Broca area सहित बाएं hemisphere का language network लगभग प्रतिक्रिया नहीं करता था
- code पढ़ना math·logic tasks जैसे network का इस्तेमाल करता है, लेकिन उसके भीतर सक्रिय होने वाले विस्तृत क्षेत्र पूरी तरह समान नहीं थे
- ScratchJr ने दाएं multiple demand network को थोड़ा अधिक सक्रिय किया, और शोधकर्ताओं ने इसकी तुलना spatial navigation tasks में right hemisphere bias से की
- programming को सिर्फ math या language में से किसी एक की तरह पढ़ाने के बजाय, code learning के लिए उपयुक्त विशिष्ट शिक्षण पद्धति की ज़रूरत है
code पढ़ना language पढ़ने से अलग brain activity दिखाता है
- programming सीखना नई language सीखने की प्रक्रिया जैसा लगता है
- नए symbols और terms सीखने पड़ते हैं
- computer को क्या करना है यह बताने के लिए code को सही ढंग से व्यवस्थित करना पड़ता है
- इसे इतना स्पष्ट लिखना पड़ता है कि दूसरे programmers भी पढ़कर समझ सकें
- लेकिन computer code पढ़ते समय दिमाग के language processing क्षेत्र सक्रिय नहीं हुए
- इसके बजाय, जटिल cognitive tasks में इस्तेमाल होने वाला multiple demand network मुख्य रूप से सक्रिय हुआ
- यह network math problems या crossword puzzles जैसे tasks में भी इस्तेमाल होता है
- code पढ़ना math·logic problems के बिल्कुल समान भी नहीं था
- multiple demand network के भीतर भी math·logic tasks से अलग हिस्सों पर अधिक निर्भरता का पैटर्न दिखा
- Anna Ivanova का मानना है कि computer code को समझना न language के अधिक करीब है, न math·logic के, बल्कि “अपनी तरह की चीज़” के अधिक करीब है
programming language के अधिक करीब है या math के
- Evelina Fedorenko की research team language और अन्य cognitive functions के संबंध का अध्ययन करती रही है
- मुख्य प्रश्न यह था कि क्या अन्य functions दिमाग के language network पर निर्भर करते हैं
- इस language network में Broca area और बाएं hemisphere के अन्य क्षेत्र शामिल हैं
- Fedorenko lab के पिछले शोध में पाया गया था कि music और math इस language network को सक्रिय नहीं करते
- computer programming अपेक्षाकृत हाल की खोज है, इसलिए यह मानना कठिन था कि इंसानों में programming के लिए कोई जन्मजात समर्पित mechanism हो
- programming सीखने को लेकर दृष्टिकोण मोटे तौर पर दो हिस्सों में बंटे रहे हैं
- programming में अच्छा होने के लिए math में अच्छा होना चाहिए, यह दृष्टिकोण
- coding और language की समानताओं के कारण language ability अधिक प्रासंगिक हो सकती है, यह दृष्टिकोण
fMRI प्रयोग: Python और ScratchJr code पढ़ना
- प्रयोग में इस्तेमाल की गई भाषाएं Python और ScratchJr थीं, जिन्हें high-readability programming languages माना जाता है
- ScratchJr 5 वर्ष या उससे अधिक आयु के बच्चों के लिए बनाई गई एक visual programming language है
- प्रतिभागी ऐसे युवा वयस्क थे जो जिस language में उनका test लिया जा रहा था, उसमें दक्ष थे
- प्रतिभागियों ने functional magnetic resonance imaging (fMRI) scanner के भीतर code snippets देखे
- task यह था कि उस code से कौन-सा behavior बनेगा, इसका अनुमान लगाया जाए
परिणाम: language क्षेत्रों से अधिक multiple demand network केंद्रीय रहा
- दिमाग के language क्षेत्र code पर बहुत कम या बिल्कुल प्रतिक्रिया नहीं करते थे
- code tasks मुख्य रूप से multiple demand network को सक्रिय करते थे
- इस network की activity frontal और parietal lobes में व्यापक रूप से फैली हुई थी
- यह आम तौर पर उन tasks में इस्तेमाल होता है जिनमें एक साथ कई जानकारियां दिमाग में बनाए रखनी पड़ती हैं
- यह विभिन्न mental tasks करने की क्षमता से जुड़ा है
- Ivanova के अनुसार यह network लगभग हर उस काम में शामिल होता है जो cognitively challenging हो और जिसमें “गहराई से सोचना” पड़े
- पिछले शोध में पाया गया था कि math और logic problems मुख्य रूप से बाएं hemisphere के multiple demand क्षेत्रों पर निर्भर करते हैं
- spatial navigation tasks बाएं की तुलना में दाएं hemisphere को अधिक सक्रिय करते हैं, यह पहले से जाना जाता है
अलग-अलग code languages का अंतर और expertise का प्रभाव
- MIT टीम ने Marina Bers के साथ मिलकर यह पाया कि code पढ़ना multiple demand network के बाएं और दाएं दोनों हिस्सों को सक्रिय करता है
- ScratchJr ने बाएं की तुलना में दाएं हिस्से को थोड़ा अधिक सक्रिय किया
- programming के लिए विशेष रूप से समर्पित कोई brain region नहीं मिला
- हालांकि, बहुत अधिक coding experience वाले लोगों में specialized brain activity विकसित होने की संभावना बनी रहती है
- Fedorenko का कहना है कि अगर कोई expert programmer 30 या 40 वर्षों तक किसी खास language में coding करता रहा हो, तो multiple demand system के कुछ हिस्सों में specialization या crystallization दिख सकती है
- लेकिन इस अध्ययन के प्रतिभागियों जैसे लोगों में, जो coding से परिचित थे और task को दक्षता से कर सकते थे, पर जिनका अनुभव अपेक्षाकृत सीमित था, ऐसी specialization नहीं दिखी
शैक्षिक निहितार्थ और संबंधित paper
- eLife के उसी अंक में प्रकाशित Johns Hopkins University की research team के एक companion paper ने भी बताया कि code problems को हल करना language क्षेत्रों नहीं, बल्कि multiple demand network को सक्रिय करता है
- केवल इन परिणामों के आधार पर यह तय करना कठिन है कि coding को math-आधारित skill की तरह पढ़ाया जाए या language-आधारित skill की तरह
- programming सीखने की प्रक्रिया में language system और multiple demand system दोनों शामिल हो सकते हैं
- लेकिन एक बार सीख लेने के बाद programming language क्षेत्रों पर निर्भर नहीं दिखती
- Ivanova का मानना है कि computer science educators को code को सबसे प्रभावी ढंग से सिखाने के लिए अपना अलग approach विकसित करना चाहिए
- संबंधित paper: Comprehension of computer code relies primarily on domain-general executive brain regions
1 टिप्पणियां
Hacker News की राय
लगता है पेपर का लिंक छूट गया है, शायद https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7738192/pdf/eli... होने की काफी संभावना है
बात यह है कि programmers ने fMRI scanner के अंदर code snippets देखे और अनुमान लगाया कि वह code क्या behavior पैदा करेगा, लेकिन code लिखने की क्षमता और किसी और का लिखा code समझने की क्षमता शायद अलग-अलग skills हैं
लिखी हुई बात को समझने से ज्यादा, यह लिखी हुई चीज़ का क्या मतलब है, इसका inference निकालने जैसा काम है
Bill और Tom shoe store गए, Bill ने 23.56 dollar के काले जूते खरीदे, और Tom ने 40.30 dollar के लाल जूते खरीदे। इसके बाद वे grocery store गए, जहाँ Tom ने 3.50 dollar की bread और 5.99 dollar का milk खरीदा, और Bill ने भी bread खरीदी लेकिन milk नहीं खरीदा।
इस खास सवाल का जवाब देने में होने वाली brain activity “Tom और Bill ने क्या किया?” का जवाब देने से अलग है, और “shoe store के बाद Bill के barber shop जाने वाली बात जोड़ो” जैसे existing story को बदलना हो तो grammar parse करनी और consistency बनाए रखनी पड़ती है, इसलिए वह फिर बिल्कुल अलग है
big picture !== details !== writing !== existing content editing है, और अगर study ने story और code दोनों के लिए understanding के इन चार प्रकारों को बराबरी से नहीं पूछा, तो research अधूरी लगती है
article भी code writing को अपने आप में नहीं, बल्कि केवल इस हद तक writing से जोड़ता है कि उसे दूसरे लोग समझ सकें
Programming languages का अनुभव रखने वाले लोगों ने सच में सोचा कि ऐसे नतीजे आ सकते हैं, यह और भी ज्यादा हैरान करने वाला है
programming language को सतह पर human language जैसा बनाना language design की classic beginner mistakes में से एक है। Perl के “do what I mean” paradigm और उसके बाद की उलझन देख लें
अहम फर्क यह है कि programming language communication से ज्यादा किसी चीज़ को construct करने का काम है। यह formulas, algorithms, data structures, कई components की architecture जैसी चीज़ें बनाने के करीब है, और इसलिए programming के दौरान बहुत सा thinking grammatical details से ज्यादा बनाई जा रही चीज़ के implicit properties में अटका होता है
human language से भी recipes, legal documents, mathematical definitions, board game rules, LLM instructions जैसे मिलते-जुलते काम किए जा सकते हैं, लेकिन human language बिल्कुल अलग उद्देश्यों वाले communication modes के लिए भी इस्तेमाल हो सकती है
code पढ़ने और formalized human language पढ़ने की brain activity, या formalized human language और informal language पढ़ने की brain activity की तुलना करना ज्यादा दिलचस्प होगा
programming language सीखना किसी और खास skill को सीखने जैसा है, और programmer का दिमाग होने से ज्यादा, interest हो तो बेहतर है। दूसरी ओर human language सीखना बिल्कुल अलग और कहीं ज्यादा मुश्किल है, और इसका बड़ा हिस्सा semi-conscious तरीके से होता है, इसलिए सामान्य अर्थों में “study” से मिलने वाला return भी बहुत कम है
data structures के बारे में सोचते समय जो visualization इस्तेमाल करता हूँ, वह किताब के scenes visualize करने से बहुत अलग नहीं है
linked article के मुताबिक, code reading दिमाग के उन क्षेत्रों को activate करती है जो unfamiliar problems पर सावधानी से reason करते हैं
यह भी अनुमान लगाया गया है कि 30 साल के programming experience वालों पर यह generalize न हो; students पर academic research ज्यादा होती है, यह समझ में आता है। लेकिन क्या subjects की तुलना उस natural language processing से करना, जिसमें उनके पास दशकों का अनुभव है, अपने आप में invalid नहीं हो जाता?
theoretical linguistics background रखने वाले और अपनी native language से काफी अलग कई languages को university level पर देख चुके self-taught programmer के तौर पर, ये नतीजे मुझे चौंकाते नहीं। कुछ layers पर similarities जरूर हैं, लेकिन human language और computer code की similarity अक्सर बढ़ा-चढ़ाकर बताई जाती है, और यह grammar पर संकीर्ण focus रखने वाली अधिक primitive linguistics की legacy जैसी लगती है
repository में पहले कभी न देखा code भी हो, तब भी style, conventions, और वह code पूरे program में कैसे fit होता है—इसकी familiarity recognition के तरीके पर बड़ा असर डाल सकती है
अगर programming से familiarity कम है, तो unfamiliar problem area का activate होना समझ में आता है। यह study करना interesting होगा कि यह area unfamiliar होने की वजह से activate होता है, या फिर code नाम की चीज़ से deal करते समय experience होने पर भी लगातार activate होता रहता है
code पढ़ते समय आम तौर पर हम शुरू से ही किसी अज्ञात चीज़ से deal कर रहे होते हैं, इसलिए वह हमेशा कुछ हद तक unfamiliar हो सकता है; या उल्टा, code reading खुद familiar हो जाती है और फिर वह उस तरह काम नहीं करती
fair comparison के लिए subjects को natural language processing और programming दोनों में experience होना चाहिए, लेकिन दोनों areas में समान रूप से familiar लोग मिलना मुश्किल है, इसलिए अंत में शायद “code से पर्याप्त familiar” लोगों पर compromise करना पड़ेगा
जब लोग कहते हैं कि “AI से ordinary language में कहेंगे तो वह वैसा ही कर देगा”, तो भविष्य से डर लगने की वजह यही है
मैं रोज़ 8 घंटे ordinary text या speech में बातचीत नहीं करना चाहता। बहुत थकाऊ लगेगा। इसके उलट programming language को 8 घंटे handle करना मजेदार है
Rust के
unsafeकी तरह “यहाँ मुझे पता है कि मैं क्या कर रहा हूँ, इसलिए दखल मत दो” कह सकना चाहिए। फिर AI tests या दूसरे तरीकों से human-written हिस्सों की correctness verify करेकुछ हद तक हम यह पहले से कर रहे हैं, लेकिन अभी इंसान AI-generated code verify करता है; roles बदलने के लिए अभी लंबा रास्ता तय करना बाकी है
Lex Fridman ने हाल ही में भाषाविद् Edward Gibson का इंटरव्यू लिया, और दिमाग भाषा को कैसे प्रोसेस करता है इस पर काफी बात हुई
इसमें यह बात भी शामिल थी कि code पढ़ना भाषा से बिल्कुल अलग brain areas को उजागर करता है
#426 https://lexfridman.com/podcast/
मेरी जानकारी में इस paper की Evelina Fedorenko, Edward की पत्नी हैं
मेरे हिसाब से यह skills का पूरी तरह अलग समूह है
मैं मुख्यतः code पढ़ने वाला YouTube channel चलाता हूँ: https://www.youtube.com/@ants_are_everywhere
लोकप्रिय open-source projects के code को पहली बार देखकर पढ़ने और समझने की कोशिश करता हूँ, जो संगीत में sight-reading जैसा थोड़ा लगता है
researchers ने बताया कि language areas में code पर बहुत कम response दिखा, और इसके बजाय frontal और parietal lobes में फैला multiple demand network मुख्य रूप से activate हुआ — यह explanation मुझे plausible लगता है। यह network उन tasks में इस्तेमाल होता है जहाँ कई जानकारियों को एक साथ दिमाग में बनाए रखना पड़ता है, और यह अलग-अलग mental tasks करने की क्षमता से जुड़ा है
बेशक भाषा मौजूद है, लेकिन language processing पर ही बहुत effort नहीं लग रहा होता, इसलिए वह fMRI signal में न दिखे। मैं अक्सर code क्या कर रहा है, author क्या करना चाहता है, author का background, similar software कैसे काम करते हैं—ऐसी कई चीज़ें एक साथ दिमाग में रखता हूँ
मैंने math पढ़ी है, लेकिन यह भी text पढ़ने या math करने जैसा बहुत नहीं लगता
उन चीज़ों को दिमाग में “load” करने में थोड़ा समय लगता है, और यह कुछ-कुछ balancing act जैसा है जहाँ सब कुछ बिखर न जाए, इसके लिए लगातार संतुलन बनाए रखना पड़ता है
बीच में interruption हो तो लगता है संतुलन बिगड़ गया और सब कुछ अस्त-व्यस्त हो गया; फिर बाद में उसे दोबारा समेटना पड़ता है, जिसमें समय और effort लगता है। ऐसा लगातार कुछ बार हो जाए तो बहुत frustration होती है
Paul Graham ने maker schedule और manager schedule पर अपने लेख में इसे कवर किया है: (2009) https://paulgraham.com/makersschedule.html
feeling बिल्कुल वही है, और कई चीज़ों को एक साथ दिमाग में बनाए रखने का pattern भी वही है
modern neuroscience और brain imaging के हिसाब से निष्कर्ष यह निकलता है कि code पढ़ना मूलतः coma के दौरान zolpidem से consciousness लौटने जैसा है
बचपन और teenage में मैंने कुछ instruments बजाए, लेकिन sight-reading में अच्छा नहीं था। सुना है कि musical ability और programming ability में अक्सर correlation होता है, लेकिन मैं professional musician नहीं बन पाता। इसके बजाय programming में मैंने अच्छा career बनाया
बिल्कुल surprising नहीं। code पढ़ना prose पढ़ने से भी अलग है, math करने से भी अलग है, और यह दिमाग में puzzle assemble करने जैसा ज़्यादा है
code क्या कर रहा है यह समझने के लिए functions, symbols, variables, statements, abstractions जैसी ढेरों चीज़ों को real time में जोड़ना, substitute करना और translate करना पड़ता है। इसलिए code पढ़ना कभी-कभी scratch से code लिखने से भी ज़्यादा complex हो जाता है
असल में common बात बस इतनी है कि दोनों को “language” कहा जाता है
क्योंकि यह computer को क्या करना है इसका लिखा हुआ machine instruction set है, और language areas की तरह यह किसी दूसरी चीज़ का metaphor नहीं बन सकता, न ही बनना चाहिए
मेरे लिए code पढ़ना gears के bunch की drawing देखकर यह पूछने जैसा है कि “gear A counterclockwise घूमेगा या clockwise”
feeling में यह language comprehension से ज़्यादा mechanism analyze करने जैसा है
code पढ़ते समय दिमाग में narration voice नहीं होती, इससे भी पता चलता है
जब मैं code पढ़ने की कोशिश करता हूँ, तो speech या familiar language के music जैसी ऐसी background noise जिसमें शब्द समझ में आ सकें, distracting और annoying लगती है। coding करते हुए मैं बात भी नहीं कर सकता; ऐसा करने पर typing गड़बड़ा जाती है
साथ ही Rust जैसी symbols-heavy languages या Haskell जैसी abbreviations और operators-heavy languages की तुलना में Ruby जैसी English sentences के करीब languages मुझे कहीं ज़्यादा पसंद हैं। बेशक दूसरे developers में अलग brain pathways activate होंगे
जो code अच्छी तरह read नहीं होता, उसे process करना अक्सर मुश्किल होता है; शायद इसलिए कि उस narration की rhythm टूट जाती है और वह natural flow में नहीं चलता
जब मैं किसी behavior को explain करता हूँ, तब भी आम तौर पर इसी narration की rhythm follow करता हूँ, और इसलिए संक्षेप में explain करने और knowledge जल्दी transfer करने में मदद मिलती है
हालांकि यह novel पढ़ते समय की narration voice से साफ़ अलग है। शायद दोनों के बीच emotional language की मौजूदगी/गैरमौजूदगी की वजह से। यह उस phenomenon जैसा भी हो सकता है कि कुछ लोगों में internal monologue होता है और कुछ में नहीं, या बिना सचमुच देखे objects imagine करने की detail level अलग होती है
यहाँ “same” का मतलब है कि working और “सुनाई देने” का तरीका समान है, और स्वाभाविक रूप से grammar और vocabulary इस्तेमाल की जा रही sign language के अनुसार होती है। वास्तव में वही brain areas काम करते हैं
इससे लगता है कि narration voice सिर्फ “sound की echo” नहीं, बल्कि understanding process itself है। text पढ़ते समय जैसा होता है
खासकर loops का judgment करने के लिए code को temporarily बदलकर देखने की iteration चाहिए
मैं ज़्यादातर घर से काम करता/करती हूँ, और coding करते समय आम तौर पर music चला देता/देती हूँ
मुझे music के साथ गाना पसंद है, इसलिए दिन भर desk पर बैठकर गाते हुए coding करता/करती हूँ
लेकिन जब कुछ पढ़ना होता है, तो मैं ऐसा बिल्कुल नहीं कर पाता/पाती। कोई text पढ़ते हुए साथ-साथ कोई दूसरा गाना गाना नामुमकिन है, लेकिन coding करते समय यह बहुत आसान है