สมองคน:สมองกล — ความจำ กับ ช่วงชีวิตและขอบเขตแห่งการรับรู้
อายะตนภายนอก ตา หู จมูก ลิ้น กาย ใจ ยึดโยงมายังอายตนะภายใน รูป รส กลิ่น เสียง สัมผัส ผ่านระบบเส้นประสาทอันซับซ้อน สมองก็สามารถตอบสนองต่อสิ่งเร้าเหล่านั้น เมื่อปรากฏสัญญาณอินพุต ผ่านการประมวลผลก่อเกิดเป็นสัญญาณเอาต์พุต กระบวนการหลักของการมีชีวิตจึงครบถ้วน สมองดำเนินกิจกรรมใดอาศัยความทรงจำ หน่วยประมวลผลของจักรกลใดใดก็อาศัยหน่วยความจำในท่วงทำนองเดียวกัน จากตัวรับรู้ (sensor) ผ่านระบบบัสที่คล้ายเส้นประสาทแทรกซ่านไปทั่วระบบ อาศัยการแลกเปลี่ยนข้อมูลในจังหวะและวิธีการที่เหมาะสม ขั้นตอนวิธี (algorithm) แม้จะซับซ้อนเพียงใดก็กระจ่างชัดว่าจะบรรลุซึ่งการตัดสินตอบโต้ต่อสิ่งเร้านั้นได้ มนุษย์เก็บข้อมูลพึงจำไว้ในรูปแบบของความทรงจำระยะสั้น (Short-Term Memory) ความระยะยาว (Long-Term Memory และความทรงจำโดยนัยยะ (Implicit Memory) ข้อมูลที่ปรับรูปแปรเปลี่ยนไม่ยั่งยืนนับว่าเป็นความทรงจำระยะสั้น ข้อมูลหากมีความสำคัญยิ่งต่อการดำเนินชีวิตจึงพึงเก็บไว้นับนานนั้น จัดเป็นความทรงจำระยะยาว ความทรงจำประเภทอันอาศัยประสบการณ์ในอดีตโดยไม่พึ่งพาการระลึกรู้ซึ่งอยู่ใต้อำนาจแห่งจิตใจ ถือว่าเป็นความทรงจำนัยยะ อาจเรียกได้ว่าเป็นความทรงจำแบบอัตโนมัติ เมื่อมิใช่นักวิเคราะห์จิตจึงมีเจตนาเพียงสะท้อนภาพเค้าเลือนลาง เพื่อสื่อโยงไปให้ถึงหน่วยความจำซึ่งร่วมดำเนินกิจกรรมกับไมโครคอนโทรลเลอร์ ตามคำสั่งที่ถูกโปรแกรมเอาไว้
หน่วยความจำแม้คล้ายเคียงกับความทรงจำ แต่จักรกลแห่งปัจจุบันกาลเพียงแบ่งประเภทด้วยอาศัยคำ สถานะ (state) เหตุที่แปรเปลี่ยนไปตามความหมายแห่งคำ “อนิจจัง” ซึ่งได้แก่ เกิดขึ้น ตั้งอยู่ ดับไป คล้ายวงจรของเหล่าสิ่งมีชีวิต หน่วยความจำที่สามารถบรรจุสิ่งซึ่งมีติดตัวมาตั้งแต่ต้น ดำรงคงตนเฉกเช่นเดิม จวบจนล่วงวัยที่ต้องดับสูญ จัดเป็นหน่วยความจำประเภทที่หากไฟแห่งชีวิตไม่มอดดับ power supply ยังไม่สูญสลาย เรียกว่าเป็น Non-Volatile Memory กับหน่วยความจำที่ประพฤติตรงกันข้าม บรรจุสิ่งใดไว้ครั้นเวลาผ่านสถานการณ์เปลี่ยน ที่เก็บไว้นั้นสามารถผันแปรไปได้ หากยามเชื้อไฟหล่อเลี้ยงชีวิตดับสิ้น ที่เคยมีอยู่ก็ล้วนสาบสูญ แม้สามารถคืนไฟ ปลุกชีวิตขึ้นใหม่ เยี่ยงวิหกเพลิง (Phoenix Bird) ความทรงจำแบบ Volatile Memory นี้กับชีวิตใหม่ก็ไม่หลงเหลือเค้ารางเดิมอยู่เลย ภาวะ เกิดขึ้น ตั้งอยู่ ดับไป คล้ายจบในช่วงชีวิตเดียว เกิดใหม่ ก็ตั้งต้นใหม่
ความทรงจำระยะยาวชั่วชีวิต ความทรงจำที่ไม่ผันแปร คือคำสั่งกำหนดสิ่งอันต้องกระทำ (code) และค่าคงที่ (constant) สองค่าที่ไม่เปลี่ยนค่า คงสภาวะเดิม เกิดใหม่กี่ครั้งก็ยังเป็นเช่นเดิม สมควรจัดเก็บไว้ใน Non-volatile Memory ภายใต้หลากหลายนาม ROM , EPROM , FLASH ส่วน Volatile ใช้เป็นแหล่งอาศัยของอะไรสิ่งอย่างที่สามารถร้อยเปลี่ยนพันแปรที่ถูกขนานนามว่าตัวแปร (variable) อาศัยนามก็เห็นตัวตนนี้ ย่อมถูกจัดเป็นความทรงจำแบบระยะสั้น
คนความจริงเป็นสิ่งมีชีวิตที่ซับซ้อนเหนือการขีดแบ่งชัดเจน ความทรงจำบางอย่างเมื่อเกิดขึ้นแล้วคงอยู่ช่วงเวลายาวนานช่วงหนึ่ง เป็นความทรงจำระยะยาวแบบหนึ่ง ที่เกี่ยวข้องกับทักษะหรือพฤติกรรมที่สามารถดำเนินการได้โดยไม่ต้องคิด ไม่พึ่งพิงความตั้งใจ สมมุติเช่น การขับขี่ยวดยาน พิมพ์สัมผัสบนคีย์บอร์ด หรือการเล่นดนตรีกีฬา ก่อนหน้าไม่สามารถ หากเมื่อสามารถ ทุกการกระทำทุกท่วงท่าที่ร่ายออกมา กลับประทับตราตรึงอยู่เนิ่นนาน เป็นความสามารถที่เกิดจากความเพียรพยายามเรียนรู้ฝึกฝน ซ้ำแล้วซ้ำเล่า จนกระทั่งสมองส่วน ซีรีเบลลั่ม (Cerebellum) และปมประสาทฐาน (Basal Ganglia) สามารถควบคุมการ execute เหล่านั้นได้โดยไม่ต้องการความสนใจอย่างจดจ่อหมกมุ่น ถือเป็นความทรงจำโดยนัยยะ เปรียบได้เป็นความทรงจำโดยอัตโนมัติ กระทั่งไม่พึ่งใส่ใจว่าทำไปได้อย่างไร
อย่างนั้นแล้วสมองกลเล่า ความทรงจำแบบนี้สมควรจัดอยู่ในประเภทใด ผู้ทรงภูมิเอื้อนเอ่ยว่าที่พอจะเทียบเคียงได้คือ Firmware ซึ่งเป็นโปรแกรมที่ฝังลึกอยู่ในฮาร์ดแวร์ เนื่องเพราะมีความเป็นอัตโนมัติเช่นเดียวกับความทรงจำโดยนัยยะ ทำงานโดยไม่ต้องการตั้งค่าหรือคำสั่งจากผู้ใช้ทุกครั้ง เมื่อสมองกลฝังตัวได้ถูกจ่ายพลังงานปลุกชีพขึ้น มันก็เริ่มต้นกระบวนการทำงานโดยอัตโนมัติ ไม่ต้องการคำสั่งการอันซ้ำซากใด เฉกเช่นคนใช้ทักษะที่เคยเรียนรู้มา เปรียบเทียบเยี่ยงนี้ ท่านมีความคิดเห็นโต้แย้งอย่างไร ข้าพเจ้าไม่ เพราะภาพของคำเฟิร์มแวร์พลันชัดเจนเมื่อรับฟังคำผู้ทรงภูมิ สาระสำคัญที่ข้าพเจ้าจักบอกเล่าในคราวนี้ เมื่อเป็นเรื่องของตัวแปร ตัวที่เป็นส่วนประกอบสำคัญของการเป็นโค้ดคำสั่งให้สมองกลดำเนินการแล้ว ปลีกย่อยสงสัยอื่นใดล้วนไม่อยู่ในสายตา ไม่นับว่าเป็นสิ่งควรสะสางในยามนี้
การใช้ตัวแปรของรหัสคำสั่ง มีส่วนสำคัญที่ต้องพิจารณาใส่ใจเพราะส่งผลกระทบต่อโปรแกรมส่วนอื่น ต่อคำสั่งอื่นอื่น ส่วนสำคัญเพียงมีสองประการ ประการแรกคือช่วงชีวิต (life time) อีกประการคือ ขอบเขต (scope)
ช่วงชีวิต หมายความว่ามิเพียงผันแปรค่า แต่ว่าการดำรงอยู่ไม่เป็นนิรันดร์ เห็นควรยึดคำ มรณานุสติ เป็นสรณะ การดำรงตนสามารถคงอยู่ในช่วงเวลาที่อาจจะกระชั้นสั้นเท่าที่จำเป็น หมดคุณค่าก็สูญสลายไปได้โดยปราศจากผลกระทบต่อผู้อื่น สำหรับระบบที่มีหน่วยความจำมากมาย ไม่คล้ายเป็นข้อจำกัด อย่างนั้นก็สามารถเมินเฉยไม่กำจัดให้สิ้นหลังจากหมดคุณค่าแล้ว แต่หากเป็นระบบที่คำว่ามีจำนวนจำกัด เกิดในแทบทุกมิติภายใต้คำทรัพยากร อย่างเช่นระบบสมองกลฝังตัว การทิ้งค้างหลงเหลือแบบไร้ค่า อาจสามารถส่งผลให้ระบบไม่สามารถดำเนินการได้อย่างปกติสุข เพราะการถือครองหน่วยความจำไว้โดยไม่จำเป็น อาจกลับกลายเป็นการทำลายโอกาส ของผู้อื่น ตัวแปรอื่น หากหน่วยความจำหลงเหลือในปริมาณที่ไม่พอเพียง ตัวแปรอื่นใดย่อมไม่สามารถฉกฉวยหน่วยความจำที่ต้องการได้ อย่างนั้นแล้วระบบก็ไม่สามารถดำเนินการต่อได้อีก คำ Memory Allocation Failure มักก่ออาการตระหนกกับผู้เขียนโปรแกรมโดยทั่วไป ด้วยว่าการแก้ไข มีเพียงอาศัยความสามารถขั้นสูง ยังต้องพึ่งพิงความอดทนด้วย หากท่านไม่สามารถลบล้างปัญหาเยี่ยงนี้ได้ กระทั่งฮาร์ดแวร์ที่ท่านใช้ ยังอาจจะถูกพิจารณาถึงความเหมาะสม
ขอบเขต หมายปริมาณไร้สภาพอย่างหนึ่งที่แยกแยะมากน้อยของสภาวะแห่งการรับรู้การมีอยู่ คล้ายเช่น อินฟลูเอนเซอร์ หรือ ยูทูปเบอร์ ที่ระบุขอบเขตแห่งความเป็น ตัวตึง แห่งความยอมรับนับถือ และแห่งความคล้อยตาม ด้วยคำว่า ระดับโลก หรือ ระดับ “แถวบ้านย่านนี้” ขอบเขตในบริบทของตัวแปรของโปรแกรม หมายถึงบริเวณที่โค้ดส่วนอื่นจะสามามารถข้องแวะ หรือเปลี่ยนแปลงแก้ไขตัวแปรนั้น กว้างใหญ่ครอบคลุมอาณาบริเวณขนาดไหน
คำคุ้นเคยพื้นฐานว่า Global และ Local เป็นการกำหนดขอบเขตของตัวแปรซึ่งเป็นสิ่งที่ไม่สามารถละเลยได้หากปรารถนาให้เห็นความจัดเจนในการเขียนโปรแกรม ต่อเรื่องนี้ผู้ทรงภูมิบอกกล่าวว่า
“การกำหนดขอบเขตของตัวแปรในโปรแกรมเป็น global หรือ local เป็นเรื่องที่มีผลกระทบอย่างมากต่อประสิทธิภาพและความเสถียรของโปรแกรม โดยเฉพาะอย่างยิ่งในระบบสมองกลฝังตัว (embedded systems) ที่มีทรัพยากรจำกัด เช่น หน่วยความจำ การประมวลผล และพลังงาน การเลือกใช้อย่างเหมาะสมช่วยให้การพัฒนาโปรแกรมมีความง่ายขึ้น และลดข้อผิดพลาดที่อาจเกิดขึ้นจากการออกแบบที่ไม่เหมาะสม
ตัวแปร global มีลักษณะเด่นคือสามารถเข้าถึงได้จากทุกส่วนของโปรแกรม ซึ่งเหมาะสำหรับข้อมูลที่ต้องการแชร์ระหว่างหลายฟังก์ชัน เช่น สถานะของระบบ (system_mode), ตัวแปรเซ็นเซอร์ที่หลายส่วนต้องใช้งานร่วมกัน (temperature, humidity) หรือตัวแปรค่าคงที่ที่ใช้ทั่วทั้งโปรแกรม (constants) อย่างไรก็ตาม การใช้ตัวแปร global อาจนำไปสู่ข้อผิดพลาดได้ง่าย เช่น การเปลี่ยนค่าที่ไม่ได้ตั้งใจจากฟังก์ชันอื่น ซึ่งยากต่อการตรวจสอบ นอกจากนี้ ตัวแปร global จะถูกจัดสรรหน่วยความจำไว้ตลอดการทำงานของโปรแกรม จึงไม่เหมาะสมในกรณีที่ต้องประหยัดหน่วยความจำในระบบที่มีข้อจำกัด เช่น ไมโครคอนโทรลเลอร์
ตัวแปร local จะมีขอบเขตการทำงานจำกัดอยู่เฉพาะในฟังก์ชันหรือบล็อกที่กำหนด ทำให้สามารถควบคุมการใช้งานได้ง่าย และลดความเสี่ยงจากการเปลี่ยนแปลงค่าที่ไม่ตั้งใจ ตัวแปร local ยังช่วยประหยัดหน่วยความจำ เนื่องจากจะถูกสร้างขึ้นเมื่อฟังก์ชันเริ่มทำงาน และจะถูกปลดปล่อยเมื่อสิ้นสุดฟังก์ชัน เหมาะสำหรับงานที่มีการคำนวณชั่วคราว เช่น การคำนวณผลลัพธ์บางอย่างในฟังก์ชัน หรือการเก็บค่าที่ใช้เฉพาะในรอบการทำงานเดียว อย่างไรก็ตาม หากต้องการแชร์ข้อมูลระหว่างหลายฟังก์ชัน อาจต้องส่งตัวแปรผ่านพารามิเตอร์ หรือใช้ค่าที่คืนจากฟังก์ชัน ซึ่งอาจเพิ่มความซับซ้อนในโค้ด
ในระบบสมองกลฝังตัว ความสำคัญของการเลือกขอบเขตตัวแปรยิ่งทวีความสำคัญ เนื่องจากทรัพยากรที่จำกัด เช่น RAM บนไมโครคอนโทรลเลอร์มักมีขนาดเล็ก และระบบต้องทำงานแบบเรียลไทม์ การใช้ตัวแปร global ที่ไม่จำเป็นอาจทำให้โปรแกรมใช้หน่วยความจำมากเกินไป ขณะที่ตัวแปร local ช่วยเพิ่มความยืดหยุ่นและลดการใช้ทรัพยากรโดยรวม แต่ต้องออกแบบให้สามารถถ่ายทอดข้อมูลที่จำเป็นได้อย่างมีประสิทธิภาพ
การวางแผนจัดการตัวแปรอย่างเหมาะสมจะช่วยให้โปรแกรมมีโครงสร้างชัดเจน ง่ายต่อการอ่าน และบำรุงรักษา ลดข้อผิดพลาดที่อาจเกิดขึ้นจากการจัดการข้อมูลผิดพลาด และเพิ่มประสิทธิภาพในการทำงานของระบบโดยรวม ตัวอย่างเช่น ในโปรแกรมที่มีเซ็นเซอร์หลายตัว การใช้ global variable สำหรับค่าที่เซ็นเซอร์อ่านมา เช่น sensor_data และ local variable สำหรับการคำนวณชั่วคราว เช่น average_temperature จะช่วยให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพและปลอดภัย”
ถ้อยความนี้ข้าพเจ้ามิได้ ตัดแต่ง ต่อเติม เปลี่ยนแปลง หรือปรับปรุง แต่อย่างใด ด้วยเห็นว่าบรรยายความได้รวบรัดเพียงพอจักก่อเกิดอาการกระจ่างในใจ หากเพราะไม่ได้ผูกยึดกับภาษาหนึ่งใด ข้าพเจ้ากำหนดนัดกับตัวเองว่าคราวต่อไป จะขยายความตามกำลังสามารถ โดยยกอ้างตัวอย่างของภาษาไมโครไพทอน ภาษาที่เป็นเป้าประสงค์หลักเป็นสำคัญ
คน ผู้เขียนผู้อ่านโค้ด สามารถเขียน อ่านและเข้าใจโค้ดได้ง่ายขึ้น ทำให้การพัฒนาและบำรุงรักษาโค้ดเป็นไปได้อย่างมีประสิทธิภาพ
===============================================================
“Omnia sub caelo transitoria sunt; oriuntur, consistunt, evanescunt. Re vera, quaestio est, quid valoris intra spatium vitae creaveris.”
“สรรพสิ่งในใต้หล้าล้วนไม่เที่ยงแท้ มีเกิดขึ้น ตั้งอยู่ ดับไป สำคัญที่ว่าในช่วงแห่งชีพ ได้สร้างขอบเขตแห่งคุณค่าใดขึ้นบ้าง”
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Naturvirtus
XIX Novembris MMXXIV