1 คะแนน โดย GN⁺ 2024-05-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • งานวิจัยของ MIT แสดงให้เห็นว่าการเข้าใจโค้ดพึ่งพา multiple demand network ซึ่งใช้ในการแก้ปัญหาซับซ้อน มากกว่าการประมวลผลภาษา
  • ในการทดลอง fMRI ที่ให้ผู้เข้าร่วมอ่านโค้ด Python และ ScratchJr เครือข่ายภาษาซีกซ้าย เช่น บริเวณ Broca แทบไม่ตอบสนอง
  • การอ่านโค้ดใช้เครือข่ายเดียวกับงานคณิตศาสตร์และตรรกะ แต่บริเวณย่อยที่ถูกกระตุ้นภายในเครือข่ายนั้นไม่ได้เหมือนกันทั้งหมด
  • ScratchJr กระตุ้น multiple demand network ด้านขวามากกว่าเล็กน้อย และนักวิจัยเปรียบเทียบสิ่งนี้กับความเอนเอียงไปยังซีกขวาในงานสำรวจเชิงพื้นที่
  • แทนที่จะสอนการเขียนโปรแกรมโดยมองว่าเป็นเพียงคณิตศาสตร์หรือภาษาอย่างใดอย่างหนึ่ง จำเป็นต้องมี วิธีสอนเฉพาะตัว ที่เหมาะกับการเรียนรู้โค้ด

การอ่านโค้ดแสดงกิจกรรมสมองที่ต่างจากการอ่านภาษา

  • การเรียนเขียนโปรแกรมมีลักษณะคล้ายกับการเรียนภาษาใหม่
    • ต้องเรียนรู้ สัญลักษณ์และคำศัพท์ ใหม่
    • ต้องจัดระเบียบโค้ดให้ถูกต้องเพื่อสั่งให้คอมพิวเตอร์ทำงาน
    • ต้องเขียนให้ชัดเจนพอที่โปรแกรมเมอร์คนอื่นจะอ่านและเข้าใจได้
  • แต่เมื่ออ่านโค้ดคอมพิวเตอร์ พื้นที่ประมวลผลภาษาของสมองไม่ได้ถูกกระตุ้น
  • แต่กลับเป็น multiple demand network ซึ่งใช้กับงานด้านความคิดที่ซับซ้อนเป็นหลักที่ถูกกระตุ้น
    • เครือข่ายนี้ถูกเรียกใช้ในงานอย่างโจทย์คณิตศาสตร์หรือปริศนาอักษรไขว้ด้วย
  • การอ่านโค้ดก็ไม่ได้เหมือนกับปัญหาคณิตศาสตร์หรือตรรกะโดยสิ้นเชิง
    • แม้ภายใน multiple demand network ก็พบรูปแบบที่พึ่งพาบางส่วนต่างจากงานคณิตศาสตร์และตรรกะมากกว่า
  • Anna Ivanova มองว่าการเข้าใจโค้ดคอมพิวเตอร์ใกล้เคียงกับ “สิ่งที่เป็นตัวของมันเอง” ไม่ใช่ทั้งภาษา และไม่ใช่คณิตศาสตร์หรือตรรกะ

การเขียนโปรแกรมใกล้เคียงกับภาษา หรือคณิตศาสตร์มากกว่ากัน

  • ทีมวิจัยของ Evelina Fedorenko ศึกษาความสัมพันธ์ระหว่างภาษากับความสามารถทางปัญญาอื่น ๆ มาอย่างต่อเนื่อง
  • คำถามหลักคือความสามารถอื่น ๆ พึ่งพา เครือข่ายภาษา ของสมองหรือไม่
    • เครือข่ายภาษานี้รวมถึงบริเวณ Broca และบริเวณอื่น ๆ ในซีกซ้าย
  • งานวิจัยก่อนหน้าของห้องวิจัย Fedorenko พบว่าดนตรีและคณิตศาสตร์ไม่ได้กระตุ้นเครือข่ายภาษานี้
  • การเขียนโปรแกรมคอมพิวเตอร์เป็นสิ่งประดิษฐ์ที่ค่อนข้างใหม่ จึงยากที่จะมองว่ามนุษย์มีกลไกโดยกำเนิดที่ใช้เฉพาะกับการเขียนโปรแกรม
  • มุมมองเกี่ยวกับการเรียนเขียนโปรแกรมแบ่งได้กว้าง ๆ เป็นสองกลุ่ม
    • มุมมองที่ว่าหากจะเขียนโปรแกรมให้เก่ง ต้องเก่ง คณิตศาสตร์
    • มุมมองที่ว่าเพราะการเขียนโค้ดคล้ายกับภาษา ความสามารถทางภาษา อาจเกี่ยวข้องมากกว่า

การทดลอง fMRI: อ่านโค้ด Python และ ScratchJr

  • ภาษาที่ใช้ในการทดลองคือ Python และ ScratchJr ซึ่งเป็นที่รู้จักว่าเป็นภาษาโปรแกรมที่อ่านง่าย
  • ScratchJr เป็นภาษาโปรแกรมแบบภาพที่ออกแบบมาสำหรับเด็กอายุ 5 ปีขึ้นไป
  • ผู้เข้าร่วมเป็นผู้ใหญ่ตอนต้นที่เชี่ยวชาญภาษาที่ตนถูกทดสอบ
  • ผู้เข้าร่วมดูชิ้นส่วนโค้ดขณะอยู่ในเครื่องสแกนภาพด้วยคลื่นแม่เหล็กไฟฟ้าเชิงหน้าที่ (fMRI)
  • ภารกิจคือคาดการณ์ว่าโค้ดดังกล่าวจะทำให้เกิดการทำงานแบบใด

ผลลัพธ์: multiple demand network เป็นศูนย์กลางมากกว่าพื้นที่ภาษา

  • พื้นที่ภาษาของสมองแทบไม่ตอบสนองต่อโค้ด หรือไม่ตอบสนองเลย
  • งานเกี่ยวกับโค้ดกระตุ้น multiple demand network เป็นหลัก
    • กิจกรรมของเครือข่ายนี้กระจายอยู่ทั่วกลีบหน้าผากและกลีบข้าง
    • โดยปกติถูกเรียกใช้ในงานที่ต้องเก็บข้อมูลหลายอย่างไว้ในใจพร้อมกัน
    • เกี่ยวข้องกับความสามารถในการทำงานทางจิตหลากหลายประเภท
  • Ivanova กล่าวว่าเครือข่ายนี้เกี่ยวข้องกับงานแทบทุกอย่างที่ท้าทายทางปัญญาและต้อง “คิดอย่างหนัก”
  • งานวิจัยเดิมพบว่าปัญหาคณิตศาสตร์และตรรกะพึ่งพาพื้นที่ multiple demand ในซีกซ้ายเป็นหลัก
  • เป็นที่ทราบกันว่างานสำรวจเชิงพื้นที่กระตุ้นซีกขวามากกว่าซีกซ้าย

ความแตกต่างตามภาษาโค้ดและผลของความเชี่ยวชาญ

  • ทีม MIT ร่วมกับ Marina Bers ได้ผลลัพธ์ว่าการอ่านโค้ดกระตุ้น multiple demand network ทั้งด้านซ้ายและด้านขวา
  • ScratchJr กระตุ้นด้านขวามากกว่าด้านซ้ายเล็กน้อย
  • ไม่พบพื้นที่สมองที่ใช้เฉพาะสำหรับการเขียนโปรแกรมเท่านั้น
  • อย่างไรก็ตาม ยังมีความเป็นไปได้ว่ากิจกรรมสมองเฉพาะทางอาจพัฒนาขึ้นในผู้ที่มีประสบการณ์เขียนโค้ดมากกว่านี้มาก
    • Fedorenko กล่าวว่า หากเป็นโปรแกรมเมอร์มืออาชีพที่เขียนโค้ดด้วยภาษาหนึ่งมา 30 หรือ 40 ปี อาจเห็นการทำให้เฉพาะทางหรือการตกผลึกของบางส่วนในระบบ multiple demand
    • แต่ในผู้เข้าร่วมครั้งนี้ ซึ่งคุ้นเคยกับการเขียนโค้ดและทำงานที่ได้รับมอบหมายได้อย่างมีประสิทธิภาพ แต่มีประสบการณ์ค่อนข้างจำกัด ไม่พบการทำให้เฉพาะทางดังกล่าว

นัยต่อการศึกษาและบทความวิจัยที่เกี่ยวข้อง

  • บทความคู่ขนานของทีมวิจัย Johns Hopkins University ที่ตีพิมพ์ใน eLife ฉบับเดียวกัน ก็รายงานว่าการแก้ปัญหาโค้ดกระตุ้น multiple demand network ไม่ใช่พื้นที่ภาษา
  • จากผลลัพธ์ครั้งนี้เพียงอย่างเดียว ยังตัดสินได้ยากว่าควรสอนการเขียนโค้ดในฐานะทักษะที่มีฐานจากคณิตศาสตร์ หรือทักษะที่มีฐานจากภาษา
  • ในกระบวนการเรียนเขียนโปรแกรม ทั้งระบบภาษาและระบบ multiple demand อาจมีส่วนเกี่ยวข้อง
  • แต่หลังจากเรียนรู้แล้ว การเขียนโปรแกรมดูเหมือนไม่ได้พึ่งพาพื้นที่ภาษา
  • Ivanova มองว่านักการศึกษาด้านวิทยาการคอมพิวเตอร์ควรพัฒนาแนวทางของตนเองเพื่อสอนโค้ดให้มีประสิทธิภาพที่สุด
  • บทความวิจัยที่เกี่ยวข้อง: Comprehension of computer code relies primarily on domain-general executive brain regions

1 ความคิดเห็น

 
GN⁺ 2024-05-27
ความคิดเห็นจาก Hacker News
  • ดูเหมือนจะไม่มีลิงก์บทความวิจัย แต่มีโอกาสสูงว่าจะเป็น https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7738192/pdf/eli...
    เนื้อหาคือโปรแกรมเมอร์ดูชิ้นส่วนโค้ดในเครื่องสแกน fMRI แล้วทำนายว่าโค้ดนั้นจะสร้างพฤติกรรมแบบไหน แต่ ความสามารถในการเขียนโค้ด กับความสามารถในการเข้าใจโค้ดที่คนอื่นเขียนน่าจะเป็นทักษะคนละอย่างกัน

    • อันนี้ให้ความรู้สึกคล้ายกับการอ่านนิทานแล้วถามว่า “ข้ามสะพานกี่ครั้ง”, “ตอนท้ายถืออะไรอยู่ในมือ”, “ตอนจบแอปเปิลอยู่ที่ไหน”
      มากกว่าจะเป็นการเข้าใจสิ่งที่เขียน มันใกล้เคียงกับงาน อนุมานว่าสิ่งที่เขียนหมายถึงอะไร
    • การอ่านโค้ดอาจกระตุ้นบริเวณเดียวกับตอนอ่านร้อยแก้วภาษาอังกฤษ แต่การรันโค้ดในหัวอาจกระตุ้น บริเวณสมองอื่น ก็ได้
    • หลายคนสงสัยผลลัพธ์นี้แล้วบอกว่า “การรัน === ความเข้าใจ” แต่ถ้าลองคิดโจทย์ต่อไปนี้จะเห็นว่าต่างกัน: Bill ใช้เงินที่ร้านขายของชำไปเท่าไร?
      Bill กับ Tom ไปร้านรองเท้า โดย Bill ซื้อรองเท้าสีดำราคา 23.56 ดอลลาร์ และ Tom ซื้อรองเท้าสีแดงราคา 40.30 ดอลลาร์ หลังจากนั้นไปร้านขายของชำ Tom ซื้อขนมปังราคา 3.50 ดอลลาร์กับนมราคา 5.99 ดอลลาร์ และ Bill ก็ซื้อขนมปังเหมือนกันแต่ไม่ได้ซื้อนม
      การทำงานของสมองเพื่อตอบคำถามเฉพาะนี้ต่างจากการตอบว่า “Tom กับ Bill ทำอะไรบ้าง?” และถ้าต้องแก้เรื่องเดิม เช่น “เพิ่มเนื้อหาว่า Bill แวะร้านตัดผมหลังจากร้านรองเท้า” ก็ต้อง parse ไวยากรณ์และรักษาความสอดคล้อง จึงต่างออกไปโดยสิ้นเชิงอีก
      ภาพรวม !== รายละเอียด !== การเขียน !== การแก้ไขเนื้อหาเดิม และถ้างานวิจัยไม่ได้ถามความเข้าใจทั้งสี่แบบนี้อย่างเท่าเทียมกันทั้งกับเรื่องเล่าและโค้ด ก็รู้สึกว่างานวิจัยยังไม่สมบูรณ์
    • มันต่างกันก็จริง แต่ไม่ได้ต่างกันโดยสิ้นเชิง ทั้งสองใช้ การอนุมานชนิดเดียวกัน เกี่ยวกับพฤติกรรมของโปรแกรม
      บทความก็ไม่ได้เชื่อมโยงกับการเขียนโค้ดโดยตรง แต่เชื่อมโยงกับการเขียนแค่ในขอบเขตที่คนอื่นต้องเข้าใจได้
    • ถ้าอย่างนั้นก็ยิ่งสนับสนุนประเด็นหลัก เพราะ การสร้างภาษาธรรมชาติ กับการทำความเข้าใจก็ทับซ้อนกันค่อนข้างมากเช่นกัน
  • น่าประหลาดใจกว่านั้นคือมีคนที่มีประสบการณ์กับภาษาโปรแกรมคิดจริง ๆ ว่าผลลัพธ์แบบนี้อาจออกมาได้
    การทำให้ภาษาโปรแกรมดูภายนอกเหมือนภาษามนุษย์เป็นหนึ่งในข้อผิดพลาดมือใหม่ด้านการออกแบบภาษาที่พบได้บ่อย ดูพาราไดม์ “do what I mean” ของ Perl กับความสับสนหลังจากนั้นได้
    ความแตกต่างสำคัญคือภาษาโปรแกรมใกล้เคียงกับ การประกอบสร้างบางสิ่ง มากกว่าการสื่อสาร เป็นการสร้างสิ่งอย่างนิพจน์คณิตศาสตร์ อัลกอริทึม โครงสร้างข้อมูล สถาปัตยกรรมของคอมโพเนนต์หลายส่วน และด้วยเหตุนี้ ความคิดจำนวนมากระหว่างการเขียนโปรแกรมจึงผูกอยู่กับคุณสมบัติโดยนัยของสิ่งที่กำลังถูกสร้าง มากกว่ารายละเอียดทางไวยากรณ์
    ภาษามนุษย์ก็ทำสิ่งคล้ายกันได้ เช่น สูตรอาหาร เอกสารกฎหมาย นิยามทางคณิตศาสตร์ กติกาบอร์ดเกม คำสั่งสำหรับ LLM แต่ภาษามนุษย์ยังใช้กับรูปแบบการสื่อสารที่มีวัตถุประสงค์ต่างออกไปโดยสิ้นเชิงได้ด้วย
    น่าจะน่าสนใจกว่าถ้าเปรียบเทียบกิจกรรมของสมองระหว่างการอ่านโค้ดกับการอ่าน ภาษามนุษย์ที่ถูกทำให้เป็นทางการ หรือระหว่างการอ่านภาษามนุษย์ที่เป็นทางการกับภาษาที่ไม่เป็นทางการ

    • ในฐานะคนที่รู้และใช้ภาษาโปรแกรมหลายภาษา และรู้และใช้ภาษามนุษย์อยู่บ้างหลายภาษาในระดับต่าง ๆ ผมอยู่ฝั่งที่มองว่าสองอย่างนี้เป็น คนละเรื่องกันโดยสิ้นเชิง
      การเรียนภาษาโปรแกรมคล้ายกับการเรียนทักษะเฉพาะอื่น ๆ และถ้าสนใจก็ยิ่งดี ไม่ใช่เรื่องของสมองโปรแกรมเมอร์เท่าไรนัก ส่วนการเรียนภาษามนุษย์นั้นต่างออกไปโดยสิ้นเชิงและยากกว่ามาก ส่วนใหญ่เกิดขึ้นกึ่งไม่รู้ตัว ทำให้ผลตอบแทนจาก “การเรียน” ในความหมายทั่วไปต่ำมาก
    • หนึ่งในโปรแกรมเมอร์ที่ผลิตผลงานได้น้อยที่สุดเท่าที่เคยร่วมงานด้วยหมกมุ่นกับ Groovy
    • ผมมีประสบการณ์เกือบ 30 ปี และผมอ่านโค้ดเหมือนอ่านภาษามนุษย์
      การนึกภาพโครงสร้างข้อมูลก็ไม่ได้ต่างจากการนึกภาพฉากในหนังสือมากนัก
  • ตามบทความที่ลิงก์ไว้ การอ่านโค้ดกระตุ้นบริเวณสมองที่ใช้อนุมานปัญหาที่ไม่คุ้นเคยอย่างระมัดระวัง
    อีกทั้งยังคาดเดาว่าอาจนำไปใช้ทั่วไปกับคนที่มีประสบการณ์เขียนโปรแกรม 30 ปีไม่ได้ ซึ่งผมเข้าใจว่างานวิชาการจำนวนมากทำกับนักศึกษา แต่การที่กลุ่มทดลองถูกนำไปเทียบกับ การประมวลผลภาษาธรรมชาติ ที่พวกเขามีประสบการณ์มาหลายสิบปีนั้น ไม่ทำให้การเปรียบเทียบนี้ใช้ไม่ได้ไปเลยหรือ?

    • อาจต้องเทียบกับ นักศึกษาปีสอง ที่กำลังเรียนภาษาต่างประเทศที่แปลกมากสำหรับเขา
      ในฐานะโปรแกรมเมอร์ที่เรียนเองซึ่งมีพื้นฐานภาษาศาสตร์เชิงทฤษฎี และเคยสัมผัสภาษาหลายภาษาที่ค่อนข้างต่างจากภาษาแม่ในระดับมหาวิทยาลัย ผลลัพธ์นี้ไม่ได้น่าประหลาดใจนัก ในบางชั้นมีความคล้ายคลึงกันชัดเจน แต่ความคล้ายกันระหว่างภาษามนุษย์กับโค้ดคอมพิวเตอร์มักถูกพูดเกินจริง และดูเหมือนเป็นเศษตกค้างจากภาษาศาสตร์ยุคดั้งเดิมกว่าที่เคยโฟกัสแคบ ๆ ที่ไวยากรณ์
    • อยากรู้จริง ๆ ว่าจะเกิดอะไรขึ้นเมื่อผู้เข้าร่วมทดลองดู codebase ที่คุ้นเคย
      ต่อให้มีโค้ดที่ไม่เคยเห็นมาก่อนอยู่ใน repository ความคุ้นเคยกับสไตล์ แบบแผน และการรู้ว่าโค้ดนั้นประกอบเข้ากับโปรแกรมทั้งหมดอย่างไร น่าจะมีผลใหญ่ต่อวิธีรับรู้
    • ผมเข้าใจว่าถ้ามีประสบการณ์เขียนโปรแกรม 30 ปี บริเวณสมองที่ใช้อนุมานปัญหาที่ไม่คุ้นเคยอย่างระมัดระวังอาจถูกกระตุ้นน้อยลง
      ถ้าไม่คุ้นกับการเขียนโปรแกรม การที่บริเวณสำหรับปัญหาที่ไม่คุ้นเคยถูกเปิดใช้งานก็สมเหตุสมผล น่าสนใจถ้าศึกษาว่าบริเวณนี้เปิดเพราะมันไม่คุ้นเคย หรือว่าแม้มีประสบการณ์แล้วก็ยังเปิดเมื่อจัดการกับสิ่งที่เรียกว่าโค้ด
      เวลาอ่านโค้ด โดยทั่วไปเรามักจัดการกับสิ่งที่ไม่รู้อยู่แล้วตั้งแต่แรก จึงอาจมีความไม่คุ้นเคยอยู่ระดับหนึ่งเสมอ หรือในทางกลับกัน การอ่านโค้ดเองอาจกลายเป็นสิ่งคุ้นเคยจนไม่ทำงานแบบนั้นอีกต่อไป
      ถ้าจะเปรียบเทียบอย่างยุติธรรม ผู้เข้าร่วมควรมีประสบการณ์ทั้งด้านการประมวลผลภาษาธรรมชาติและการเขียนโปรแกรม แต่คนที่คุ้นเคยทั้งสองด้านเท่ากันคงหาได้ยาก สุดท้ายจึงอาจต้องประนีประนอมที่ระดับ “คุ้นเคยกับโค้ดเพียงพอ”
  • นี่แหละคือเหตุผลที่ผมกลัวอนาคตเวลาได้ยินคนพูดว่า “สั่ง AI ด้วยภาษาทั่วไปแล้วมันจะทำให้ตามนั้น”
    ผมไม่อยาก สนทนาด้วยข้อความหรือคำพูดทั่วไป วันละ 8 ชั่วโมง มันคงเหนื่อยมาก ในขณะที่การอยู่กับภาษาโปรแกรม 8 ชั่วโมงเป็นเรื่องสนุก

    • ถ้าอนาคตแบบนั้นมาถึง มันควรใกล้เคียงกับ การ pair programming กับ AI และควรผสมโค้ดที่ AI สร้างกับโค้ดที่คนเขียนได้
      ควรบอกได้เหมือน unsafe ของ Rust ว่า “ตรงนี้ฉันรู้ว่ากำลังทำอะไรอยู่ เพราะฉะนั้นอย่ามาขวาง” จากนั้นให้ AI ตรวจสอบความถูกต้องของส่วนที่คนเขียนด้วยการทดสอบหรือวิธีอื่น
      ตอนนี้เราก็ทำได้ในระดับหนึ่งแล้ว แต่ปัจจุบันเป็นฝ่ายมนุษย์ที่ตรวจสอบโค้ดที่ AI สร้าง และผมมองว่ายังอีกไกลกว่าจะสลับบทบาทกันได้
  • Lex Fridman เพิ่งสัมภาษณ์นักภาษาศาสตร์ Edward Gibson และคุยกันมากเรื่องวิธีที่สมองประมวลผลภาษา
    ในนั้นรวมถึงประเด็นที่ว่าการอ่านโค้ดเผยให้เห็นบริเวณสมองที่แตกต่างจากภาษาอย่างสิ้นเชิงด้วย
    #426 https://lexfridman.com/podcast/
    เท่าที่รู้ Evelina Fedorenko ในงานวิจัยนี้เป็นภรรยาของ Edward

    • น่าเชื่อถือ ตอนประถม วิชาที่ได้คะแนนต่ำสุดคือภาษาฝรั่งเศส และตอนนี้การเรียนภาษาจีนในคอร์สออนไลน์ภาคค่ำของ community college ก็ยังยากกว่าคนวัยเดียวกันมาก แต่ การเขียนโปรแกรมรู้สึกเป็นธรรมชาติเสมอ
      สำหรับผม มันเป็นชุดทักษะที่ต่างกันโดยสิ้นเชิง
    • ช่วงที่เกี่ยวข้อง [link]https://youtu.be/F3Jd9GI6XqE?t=4847
  • ผมทำช่อง YouTube ที่เน้นอ่านโค้ด: https://www.youtube.com/@ants_are_everywhere
    ผมพยายามอ่านและทำความเข้าใจโค้ดของโปรเจกต์โอเพนซอร์สยอดนิยมแบบที่ไม่เคยเห็นมาก่อน ซึ่งคล้ายกับการ sight-reading ดนตรีอยู่บ้าง
    คำอธิบายที่ว่านักวิจัยแทบไม่เห็นการตอบสนองต่อโค้ดในบริเวณภาษา แต่กลับเห็นการทำงานหลัก ๆ ใน multiple demand network ที่ครอบคลุมสมองกลีบหน้าและกลีบข้าง ฟังดูสมเหตุสมผลสำหรับผม เครือข่ายนี้ถูกเรียกใช้ในงานที่ต้องเก็บข้อมูลหลายอย่างไว้ในหัวพร้อมกัน และเกี่ยวข้องกับความสามารถในการทำงานทางจิตหลากหลายแบบ
    แน่นอนว่ามีภาษาอยู่ด้วย แต่เราอาจไม่ได้ใช้ความพยายามมากกับการประมวลผลภาษาตัวมันเอง จึงไม่ปรากฏเป็นสัญญาณ fMRI ผมมักต้องถือหลายอย่างไว้พร้อมกัน เช่น โค้ดทำอะไร ผู้เขียนพยายามจะทำอะไร ภูมิหลังของผู้เขียน ซอฟต์แวร์คล้าย ๆ กันทำงานอย่างไร ฯลฯ
    ผมเคยเรียนคณิตศาสตร์ แต่สิ่งนี้ก็ไม่ได้ให้ความรู้สึกเหมือนอ่านหนังสือหรือทำคณิตศาสตร์เท่าไร

    • นั่นแหละทำไมการถูกขัดจังหวะถึงน่าหงุดหงิดมาก
      การ “โหลด” สิ่งเหล่านั้นขึ้นมาในหัวต้องใช้เวลาพอสมควร และคล้ายกับการ ทรงตัว ที่ต้องคอยรักษาสมดุลไม่ให้ทั้งก้อนพังลงมา
      ถ้าถูกขัดกลางคัน ก็เหมือนเสียสมดุลและทุกอย่างกระจัดกระจาย หลังจากนั้นต้องค่อย ๆ เก็บกลับมาใหม่ ซึ่งเสียทั้งเวลาและแรง ถ้าเกิดแบบนี้ติด ๆ กันหลายครั้งจะอึดอัดอย่างมาก
      Paul Graham พูดถึงเรื่องนี้ในบทความเรื่อง maker schedule กับ manager schedule: (2009) https://paulgraham.com/makersschedule.html
    • สำหรับผม การอ่านโค้ดคือ การอ่านคณิตศาสตร์
      ความรู้สึกเหมือนกันเป๊ะ และรูปแบบการเก็บหลายอย่างไว้ในหัวพร้อมกันก็เหมือนกัน
    • ผู้ป่วยหายากบางรายที่อยู่ในภาวะโคม่าเรื้อรัง เมื่อได้ยากล่อมประสาท zolpidem แล้วฟื้นสติได้ไม่กี่ชั่วโมง ก็อาจแสดงการทำงานของสมองกลีบข้างและสมองกลีบหน้าด้านบนบางส่วน
      ถ้าดูตามมาตรฐานประสาทวิทยาและภาพถ่ายสมองสมัยใหม่ ข้อสรุปก็คือโดยพื้นฐานแล้ว การอ่านโค้ดเหมือนกับ การฟื้นสติจากโคม่าด้วย zolpidem
    • เคยสงสัยว่าความสามารถในการ sight-read ดนตรีกับความสามารถในการเข้าใจโค้ดได้เร็วมีความสัมพันธ์กันไหม
      ตอนเด็กและวัยรุ่นเคยเล่นเครื่องดนตรีอยู่หลายชนิด แต่ไม่ถนัด sight-reading ได้ยินมาว่าความสามารถทางดนตรีกับความสามารถในการเขียนโปรแกรมมักสัมพันธ์กัน แต่ผมคงเป็นนักดนตรีอาชีพไม่ได้แน่ ๆ แทนที่จะเป็นอย่างนั้น ผมกลับสร้างอาชีพที่ดีจากการเขียนโปรแกรมได้
  • ไม่น่าแปลกใจเลย การอ่านโค้ดไม่เหมือนการอ่านร้อยแก้ว ไม่เหมือนการทำคณิตศาสตร์ และใกล้เคียงกับ การประกอบจิ๊กซอว์ในหัว มากกว่า
    การจะเข้าใจว่าโค้ดทำอะไร ต้องเชื่อมโยง แทนค่า และแปลสิ่งจำนวนมากแบบเรียลไทม์ ทั้งฟังก์ชัน สัญลักษณ์ ตัวแปร ประโยค คำอธิบายเชิงนามธรรม ฯลฯ ดังนั้นการอ่านโค้ดจึงอาจซับซ้อนกว่าการเขียนโค้ดขึ้นใหม่ตั้งแต่แรกด้วยซ้ำ

    • รูปลักษณ์ภายนอกก็ต่างกัน ไวยากรณ์และความหมายก็ต่างกันมาก
      ที่จริงจุดร่วมแทบมีแค่ทั้งสองอย่างถูกเรียกว่า “ภาษา” เท่านั้น
    • อาจมองได้ว่าโค้ดเป็นสิ่งตรงข้ามกับภาษา
      เพราะมันคือ ชุดคำสั่งเครื่อง ที่เขียนไว้ให้คอมพิวเตอร์ทำอะไรบางอย่าง และไม่สามารถหรือไม่จำเป็นต้องเป็นอุปมาของสิ่งอื่นเหมือนในบริเวณภาษา
  • สำหรับผม การอ่านโค้ดคล้ายกับการดูรูปชุดเฟืองแล้วถูกถามว่า “เฟือง A หมุนทวนเข็มนาฬิกาหรือตามเข็มนาฬิกา”
    ในแง่ความรู้สึก มันใกล้กับ การวิเคราะห์กลไก มากกว่าการเข้าใจภาษา

  • เรื่องนี้เห็นได้จากตอนอ่านโค้ด ไม่มี เสียงบรรยาย อยู่ในหัว

    • แล้วแต่คน ผมรู้สึกว่ากับโค้ดก็มีเสียงบรรยายเหมือนกัน และถึงจะไม่เหมือนหนังสือเสียทีเดียว แต่ก็มีบางอย่างคล้ายกัน
      เวลาพยายามอ่านโค้ด ถ้ามีเสียงรบกวนพื้นหลังที่ฟังออกเป็นคำพูดหรือเหมือนดนตรีของภาษาที่คุ้นเคย จะทำให้เสียสมาธิและหงุดหงิด ผมพูดไปด้วยขณะโค้ดไม่ได้เหมือนกัน ไม่งั้นพิมพ์จะรวน
      อีกอย่าง ผมชอบภาษาอย่าง Ruby ที่ ใกล้กับประโยคภาษาอังกฤษ มากกว่าอย่างชัดเจน เมื่อเทียบกับภาษาที่มีสัญลักษณ์เยอะอย่าง Rust หรือมีตัวย่อกับโอเปอเรเตอร์เยอะอย่าง Haskell แน่นอนว่านักพัฒนาคนอื่น ๆ คงมีเส้นทางในสมองที่ถูกกระตุ้นต่างกัน
    • ตอนอ่านโค้ด ผมมีเสียงบรรยายในหัว เป็นเสียงเดียวกับตอนอ่านรายงานทางเทคนิคหรือ white paper
      โค้ดที่อ่านไม่ลื่นมักประมวลผลยาก อาจเพราะ จังหวะ ของเสียงบรรยายนั้นสะดุดและไม่ไหลไปเองตามธรรมชาติ
      เวลาผมอธิบายว่าบางอย่างทำงานอย่างไร ก็มักจะตามจังหวะเดียวกับเสียงบรรยายนี้ จึงช่วยให้อธิบายได้กระชับและถ่ายทอดความรู้ได้เร็ว
      อย่างไรก็ตาม มันต่างจากเสียงบรรยายตอนอ่านนิยายอย่างชัดเจน น่าจะเป็นเพราะระหว่างสองอย่างนี้มีหรือไม่มีภาษาทางอารมณ์ต่างกัน อาจคล้ายกับปรากฏการณ์ที่บางคนมีบทพูดภายใน บางคนไม่มี หรือระดับรายละเอียดในการจินตนาการสิ่งของโดยไม่เห็นจริงแตกต่างกัน
    • เรื่องน่าสนุกคือ เสียงบรรยายตอน เข้าใจภาษามือ เหมือนกับตอนเข้าใจภาษาพูด
      คำว่าเหมือนในที่นี้หมายถึงวิธีการทำงานและวิธีที่ “ได้ยิน” เหมือนกัน และแน่นอนว่าไวยากรณ์กับคำศัพท์ก็เป็นไปตามภาษามือที่ใช้ จริง ๆ แล้วสมองบริเวณเดียวกันทำงาน
      สิ่งนี้ดูเหมือนจะหมายความว่าเสียงบรรยายไม่ใช่แค่ “เสียงสะท้อนของเสียง” แต่เป็นกระบวนการทำความเข้าใจเอง เช่นเดียวกับตอนอ่านตัวหนังสือ
    • บทสนทนาภายในของผมไม่เคยเงียบลงเลย
    • ผู้บรรยายในหัวของผมบอกเรื่องพวกนี้: สำหรับอาร์กิวเมนต์เดียวกัน ค่าที่คืนกลับมาเหมือนกันไหม, มีผลข้างเคียงไหม, ผลข้างเคียงนั้นคืออะไร, เรื่องนี้เล่าแบบเป็นอิสระได้ไหม, ตัวแปรถูกใช้ใกล้ตำแหน่งที่ประกาศไหม, ลูปต่าง ๆ ทำสิ่งที่ผมคิดไว้ไหม, เรื่องนี้ถ่ายทอดได้อย่างมีประสิทธิภาพไหม, ป้องกันผลข้างเคียงบางอย่างได้ไหม
      โดยเฉพาะการตัดสินเรื่องลูป ต้องทำซ้ำโดยแก้โค้ดชั่วคราวไปด้วย
  • ส่วนใหญ่ทำงานจากที่บ้าน และเวล coding ก็มักจะเปิดเพลงไว้
    เพราะชอบร้องตามเพลง เลยนั่งอยู่ที่โต๊ะทั้งวัน ร้องเพลงไป coding ไป
    แต่เวลาต้องอ่านอะไรสักอย่าง ทำแบบนี้ไม่ได้เลย เป็นไปไม่ได้ที่จะอ่านบทความไปพร้อมกับร้องเพลงอื่นไปด้วย แต่เวล coding กลับทำได้ง่ายมาก