- การทดลองเรียน Python พบว่า ความสามารถทางภาษาและความสามารถในการแก้ปัญหาเป็นตัวทำนายความเร็วในการเรียนรู้ได้ดีที่สุด แสดงให้เห็นว่าการเริ่มต้นเขียนโค้ดอาจใกล้เคียงกับการเรียนภาษามากกว่าคณิตศาสตร์
- นักวิจัยรับสมัครผู้เข้าร่วม 42 คนให้เรียน 10 บทเรียนในคอร์ส Learn Python ของ Codecademy และเปรียบเทียบแบบทดสอบก่อนเรียน แบบทดสอบย่อย และงานสุดท้ายของผู้ที่เรียนจบ 36 คน
- ผลสัมฤทธิ์ในการเรียนส่วนใหญ่ขึ้นอยู่กับ การแก้ปัญหาและความจำขณะทำงาน แต่ความเร็วในการเรียนรู้ได้รับอิทธิพลร่วมกันจากความสามารถทางปัญญาทั่วไปและความถนัดทางภาษา
- ความถนัดทางภาษาอธิบายความแตกต่างของความเร็วในการเรียน Python ได้เกือบ 20% ขณะที่แบบทดสอบคณิตศาสตร์ก่อนเรียนอธิบายความแตกต่างของความเร็วได้เพียง 2% และไม่มีความสัมพันธ์กับผลสัมฤทธิ์
- การสั่นแบบเบตาใน EEG ขณะพักก็เกี่ยวข้องกับการเรียนรู้ที่เร็วขึ้นและความรู้ด้านโปรแกรมมิงที่มากขึ้นด้วย แต่ความสัมพันธ์เชิงเหตุผลและกลไกการทำงานยังไม่ชัดเจน
ความสามารถที่ทำนายการเรียน Python
- งานวิจัยของนักวิจัยจาก University of Washington เห็นว่า ความสามารถทางภาษาและความสามารถในการแก้ปัญหาเป็นตัวทำนายความเร็วในการเรียน Python ได้ดีที่สุด
- งานวิจัยนี้ตีพิมพ์ใน Scientific Reports และเปรียบเทียบว่าผู้เข้าร่วมเรียนรู้การเขียนโปรแกรมได้เร็วและดีเพียงใดผ่านแบบทดสอบพฤติกรรมและการวัดกิจกรรมของสมอง
- จุดตั้งต้นคือสมมติฐานว่าการเรียนภาษาโปรแกรมอย่าง Python หรือ Java อาจคล้ายกับการเรียนภาษาธรรมชาติอย่าง French, Spanish, Chinese มากกว่าที่คิด
การออกแบบงานวิจัยและวิธีวัดผล
- มีการรับสมัครผู้เข้าร่วมทั้งหมด 42 คนให้เรียนคอร์สเขียนโค้ดออนไลน์ “Learn Python” ของ Codecademy
- คอร์สประกอบด้วย 10 บทเรียน บทละ 45 นาที
- ผู้เข้าร่วมที่ทำงานวิจัยจนจบมี 36 คน
- ก่อนเรียนออนไลน์ ผู้เข้าร่วมทำแบบทดสอบก่อนเรียนหลายรายการ
- ความสามารถทางคณิตศาสตร์
- ความจำขณะทำงาน
- การแก้ปัญหา
- ความสามารถในการเรียนภาษาที่สอง
- ระหว่างเรียน มีการติดตามความเร็วในการเรียนรู้และผลงานด้วยแบบทดสอบย่อยที่รวมอยู่ในซอฟต์แวร์ออนไลน์
- เมื่อจบงานวิจัย มีการทำแบบทดสอบและงานเขียนโค้ดเพิ่มเติมเพื่อตรวจสอบความรู้ด้านการเขียนโค้ดโดยรวม
ปัจจัยที่แยกความเร็วในการเรียนรู้และผลสัมฤทธิ์
- ผู้เข้าร่วมแสดงผลลัพธ์แตกต่างกันทั้งในด้านความเร็วในการเรียน Python และความสามารถด้านโปรแกรมมิงสุดท้าย
- การเรียน Python ได้ ดีเพียงใด ขึ้นอยู่กับความสามารถทางปัญญาทั่วไปเป็นหลัก
- ความสามารถในการแก้ปัญหา
- ความจำขณะทำงาน
- การเรียน Python ได้ เร็วเพียงใด อธิบายได้จากทั้งความสามารถทางปัญญาทั่วไปและความถนัดทางภาษา
- ความถนัดทางภาษาคิดเป็นเกือบ 20% ของความแตกต่างด้านความเร็วในการเรียน Python
- ผลคะแนนแบบทดสอบคณิตศาสตร์ก่อนเรียนอธิบายความแตกต่างด้านความเร็วในการเรียนได้เพียง 2% และไม่มีความสัมพันธ์เลยกับการเรียน Python ได้ดีเพียงใด
- จากผลลัพธ์นี้ การเรียนเขียนโค้ดพึ่งพา ความสามารถทางภาษามากกว่าความสามารถเชิงคณิตศาสตร์
หลักฐานที่ EEG ช่วยเสริมและข้อจำกัด
- ผู้เข้าร่วมได้รับการวัด EEG ขณะพักก่อนเริ่มเรียนออนไลน์
- EEG เป็นวิธีวัดกิจกรรมสมองจากรูปแบบไฟฟ้าที่บันทึกผ่านกะโหลกศีรษะ
- กิจกรรมไฟฟ้าขณะพักมีหลายรูปแบบ หนึ่งในนั้นคือกิจกรรมไฟฟ้าช้าที่เรียกว่า การสั่นแบบเบตา
- งานวิจัยก่อนหน้านี้เคยเชื่อมโยงระดับการสั่นแบบเบตาที่สูงขณะพักกับความสามารถในการเรียนภาษาที่สอง
- ในงานวิจัยนี้ ระดับการสั่นแบบเบตาที่สูงก็เกี่ยวข้องกับการเรียนรู้ที่เร็วขึ้นและความรู้ด้านโปรแกรมมิงที่มากขึ้นเช่นกัน
- อย่างไรก็ตาม ยังไม่ชัดเจนว่าการสั่นแบบเบตาเชื่อมโยงกับผลลัพธ์การเรียนรู้อย่างไร จึงจำเป็นต้องมีงานวิจัยเพิ่มเติม
ผลต่อการศึกษาด้านโปรแกรมมิงและอคติเดิม
- ผลการวิจัยสนับสนุนมุมมองว่า ความสามารถทางภาษาเป็นปัจจัยสำคัญในการเรียนโปรแกรมมิง อย่างน้อยก็ในการเรียน Python และความสามารถทางคณิตศาสตร์ไม่ได้ทำนายความเร็วในการเรียนหรือผลสัมฤทธิ์ได้อย่างชัดเจน
- โปรแกรมมิงมักถูกมองว่าเป็นสาขาที่ “เข้มข้นด้านคณิตศาสตร์” แต่งานวิจัยนี้ทำให้ต้องกลับมาทบทวนสมมติฐานเก่าเกี่ยวกับเงื่อนไขตั้งต้นของการเรียนโปรแกรมมิง
- บางสาขาต้องการทั้งความสามารถทางคณิตศาสตร์และโปรแกรมมิง แต่ไม่ได้หมายความว่านั่นคืออาชีพโปรแกรมมิงส่วนใหญ่ที่เป็นไปได้
- การกำหนดให้นักศึกษาวิทยาการคอมพิวเตอร์ทุกคนต้องเรียนคณิตศาสตร์ขั้นสูงดูไม่จำเป็นเมื่อพิจารณาจากผลวิจัยนี้ และความยืดหยุ่นของข้อกำหนดด้านคณิตศาสตร์อาจช่วยการรับสมัครและการรักษานักศึกษาไว้ได้
- ในสถานการณ์ที่โปรแกรมมิงกลายเป็นเงื่อนไขตั้งต้นของหลายอาชีพ แม้จะไม่ใช่ “คนสายคณิตศาสตร์” ก็อาจเป็นคนที่เหมาะกับวิทยาการคอมพิวเตอร์ได้
ความเห็นเกี่ยวกับความหลากหลายและวิธีการสอน
- ผู้หญิงมักรู้สึกว่าตนเองไม่เข้ากับภาพลักษณ์ของ “โปรแกรมเมอร์คอมพิวเตอร์แบบทั่วไป”
- โดยเฉลี่ยแล้ว เด็กผู้หญิงมีแนวโน้มจะมีความสามารถทางภาษาสูงกว่าเด็กผู้ชาย และหากความสามารถทางภาษาทำนายความสามารถในการเรียนโปรแกรมมิง ผู้หญิงก็อาจมีชื่อเสียงว่าเขียนโปรแกรมได้ดีมากขึ้น
- การเชื่อมโยงโปรแกรมมิงกับความสามารถทางภาษาอย่างชัดเจน และการเสนอทางเลือกการศึกษาที่ไม่ต้องใช้คณิตศาสตร์ขั้นสูง อาจช่วยปรับปรุงความหลากหลายได้
- ทางเลือกแบบ บูตแคมป์ที่กำลังได้รับความนิยมอย่างรวดเร็วสามารถนำผู้เข้าร่วมไปสู่อาชีพด้านโปรแกรมมิงได้โดยไม่ต้องบังคับให้เรียนแคลคูลัส
- บทวิจารณ์จากเพื่อนร่วมวงการมองว่าการสอนโปรแกรมมิงอาจเอนเอียงไปทางโจทย์ที่เน้นคณิตศาสตร์ เช่น การคำนวณจำนวน Fibonacci หรือการเขียนอัลกอริทึมจัดเรียง และโจทย์ที่สร้างสรรค์และมุ่งเน้นภาษามากขึ้นอาจช่วยให้นักเรียนจำนวนมากขึ้นเรียนรู้ได้ดีขึ้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าอ่าน论文จริง ๆ จะเห็นว่าชื่อเรื่องค่อนข้างเป็น คลิกเบต และผลการวิจัยก็ถูกพูดเกินจริงไปมาก
กลุ่มตัวอย่างเล็กมาก มีผู้ทำเสร็จเพียง 36 คนเท่านั้น และความสามารถทางคณิตศาสตร์อยู่ที่ R²=.27 ส่วนภาษาอยู่ที่ประมาณ R²=.31
จากนั้นจึงใช้การถดถอยแบบขั้นตอนเพื่อคำนวณสัดส่วนความแปรปรวนที่อธิบายได้ แต่ผลที่ออกมาดูเหมือนว่าความสามารถทางคณิตศาสตร์แทบไม่มีส่วนเลย โดยแทบจะละเลยผลก่อนหน้าไป เหตุผลคือสองตัวแปรมีความแปรปรวนร่วมกันราว 10% และการถดถอยแบบขั้นตอนเป็นแบบโลภ ตัวแปรที่ถูกใส่เข้ามาก่อนจึงดึงส่วนนี้ไป
ต่อให้ใส่แบบทดสอบภาษาที่คล้ายกันเพิ่มอีกหนึ่งตัว ก็อาจออกมาว่ามีส่วนอธิบายความแปรปรวนเฉพาะตัวแทบไม่มีเช่นกัน
ค่าที่วัดได้ก็มีสัญญาณรบกวนสูงทั้งหมด ไม่ว่าจะเป็นผู้ประเมินที่เป็นมนุษย์ เวลาในการทำเสร็จ ฯลฯ แต่ไม่มีความพยายามจะจัดการเรื่องนี้
หากใช้ Steiger test กับค่าที่นำเสนอเพื่อดูว่า “การเรียนรู้ภาษามีนัยสำคัญกว่าความสามารถทางคณิตศาสตร์” จะได้ p-value 0.772 ซึ่งไม่มีนัยสำคัญเลย
สุดท้ายแล้ว ความสามารถทางคณิตศาสตร์อธิบายความแปรปรวนได้ 27% และความสามารถทางภาษาอธิบายได้ 31% เพียงแต่หลังจากเพิ่มตัวแปรที่สัมพันธ์กันเข้าไป ส่วนอธิบายเฉพาะตัวของความสามารถทางคณิตศาสตร์จึงลดเหลือ 2% เท่านั้น
การที่เส้นถดถอยมีความชันเป็นบวกก็ดูเหมือนจะได้รับอิทธิพลมากจากตำแหน่งของค่าผิดปกติ ส่วนกราฟกระจายของความถนัดทางภาษา อย่างน้อยก็มองเห็นด้วยตาว่ามีความสัมพันธ์ที่เพิ่มขึ้นไปทางขวาบนระหว่างสองตัวแปร
ผมมองว่าโค้ดที่ดีไม่ได้จบแค่การแก้ปัญหาได้ แต่แก้ด้วยวิธีที่ อ่านง่ายและถูกทำให้เป็นโมดูล
ส่วนการแก้ปัญหาในการเขียนโค้ดต้องใช้ความสามารถทางคณิตศาสตร์ ส่วนการจัดโครงสร้างต้องใช้ความสามารถในการเขียน โค้ดที่เละเทะจะทำให้อ่านซ้ำหรือขยายในภายหลังได้ยาก และขัดขวางการแก้ปัญหาเอง
การพิสูจน์ทางคณิตศาสตร์ยาว ๆ ก็ต้องใช้ความสามารถในการจัดโครงสร้างเช่นกัน แต่ในคณิตศาสตร์ดูเหมือนจะมี “การกระโดดครั้งใหญ่” หรือแนวคิดที่ซับซ้อนโดยเนื้อแท้ ซึ่งยากจะไปถึงได้ด้วยทักษะการเขียนเพียงอย่างเดียวมากกว่า
ในทางกลับกัน การเขียนโปรแกรมมี “ขั้นตอนเล็ก ๆ” จำนวนมาก ดังนั้นแม้จะไม่ได้ฉลาดมาก หากมีความพากเพียร ค่อย ๆ สร้างทีละคอมโพเนนต์ และไม่ให้มี dependency มากเกินไป ก็สามารถสร้างโปรแกรมที่น่าประทับใจได้
ในความเป็นจริง เวลาส่วนใหญ่มักหมดไปกับการอ่านฐานข้อมูลและสคีมาของอินเทอร์เฟซเพื่อทำความเข้าใจการทำงาน มากกว่าการจัดการเชิงคณิตศาสตร์
แม้จะมีข้อยกเว้นอย่างเกมเอนจิน แต่แม้แต่กราฟิก 3D หลายกรณีก็ไม่จำเป็นต้องใช้เกินช่วงต้นของพีชคณิตเชิงเส้น
โค้ดที่ไม่ได้แบ่งเป็นโมดูลมักอ่านง่ายกว่าและเร็วกว่า และในภาษาระดับต่ำหรือภาษาที่ต้องจัดการหน่วยความจำเอง บางครั้งทางออกที่ดีที่สุดหรือถูกต้องอาจอยู่ห่างไกลจากความอ่านง่าย
ความอ่านง่ายขึ้นอยู่กับคนอ่าน และต้องหลีกทางให้ข้อกำหนดเชิงรูปแบบ
โดยส่วนตัว ผมชอบฟังก์ชันที่ยาวแต่จัดระเบียบดี และถูกทำให้เป็นโมดูลเพียงเท่าที่จำเป็นขั้นต่ำเท่านั้น ขอบเขตของไฟล์และบริบทของฟังก์ชันใหม่ ๆ หรือ การสลับบริบท เป็นแหล่งความซับซ้อนและบั๊กที่ใหญ่ที่สุดในการบำรุงรักษาและขยายงานสำหรับผม
การทำให้เป็นโมดูลเพิ่มขอบเขตเหล่านี้ ซ่อนความซับซ้อน และทำให้ปัญหาเชิงโครงสร้างขององค์กรยากต่อการให้เหตุผลและแก้ไข ฟังก์ชันยาว ๆ อาจอ่านยากกว่าในตอนแรก แต่ผมมองว่ามันสร้างแบบจำลองทางความคิดที่ชัดเจนกว่า และนำไปสู่ทางออกที่ดีกว่า
สิ่งที่ซับซ้อนโดยตัวมันเอง แตกต่างจากสิ่งที่มีปฏิสัมพันธ์กับอย่างอื่นอย่างซับซ้อน ดูใกล้เคียงกับเครื่องมือเฉพาะกิจในบทพิสูจน์มากกว่าวัตถุอเนกประสงค์
คำพูดที่ว่า “การเขียนโปรแกรมมีขั้นตอนเล็ก ๆ จำนวนมาก” อธิบายได้ดี ผมมักคิดว่าหน่วยความจำใช้งานระดับปานกลางอาจเป็นประโยชน์เสียด้วยซ้ำสำหรับโปรแกรมเมอร์ที่เขียนโค้ดที่บำรุงรักษาได้
เพราะถ้าจำไม่ได้ว่าเขียนอะไรไปเมื่อ 3 นาทีก่อน ก็จะไม่สามารถปล่อยโค้ดสปาเกตตีที่ยังทำงานได้ออกมาได้ แน่นอนว่านี่เป็นสมมติฐานที่เข้าข้างตัวเองอยู่พอสมควร
การหลีกเลี่ยง dependency ที่ไม่จำเป็นระหว่างคอมโพเนนต์ และการวิเคราะห์ปัญหาเพื่อหาส่วนที่แยกออกจากกันได้ก็เช่นกัน
สิ่งที่น่าหงุดหงิดเวลา ensinar programação คือแรงกดดันที่ต้องรักษาท่าทีว่า “ทุกคนต้องเรียนเขียนโปรแกรมได้แน่นอน” อยู่เสมอ
หลายคนที่พยายามเรียนโปรแกรมมีแรงจูงใจที่สับสนหรือผิดตั้งแต่ต้น และการพัฒนาทักษะอื่นอาจมีประสิทธิภาพกว่ามาก นี่ไม่ใช่ปัญหาเรื่องชนชั้นนำ แต่หมายความว่าแม้แต่ผมเองก็อาจทำบางอย่างที่คนอื่นทำได้อย่างเป็นธรรมชาติไม่ได้
ความพยายามในการทำหารยาวในหัวคล้ายกับความพยายามในการไล่ตามโค้ดสปาเกตตีที่เข้าใจยาก
เราอาจทำหารในใจได้เร็วและเก่งขึ้น แต่ก็อาจไม่มีวันเข้าใจทฤษฎีบทมูลฐานของแคลคูลัส
มีคนที่เก่งในการคุ้ยโค้ดขยะอยู่จริง และเพราะได้รับเงินก็เลยจำเป็นต้องเก่งขึ้น แต่ก็ยังคลุมเครือว่าเขาเก่งขึ้นในส่วนไหนของการเขียนโปรแกรมกันแน่
หากรู้สึกว่าในงานมีแต่การฝึกแบบหารยาวในใจ ผมจะหางานใหม่เสมอ ถ้าต้องแลกกับการตามไม่ทัน ต่อให้ได้เงินมากแค่ไหนก็ไม่คุ้ม
แม้งานวิจัยของ Prat et al. (2020) จะเสนอว่าในการเรียน Python ความถนัดทางภาษาเป็นตัวทำนายที่ดีกว่าความสามารถด้านตัวเลข แต่ก็ควรอ่านอย่างระมัดระวัง เพราะอาจถูกทำให้เรียบง่ายเกินไปได้ง่าย
สิ่งที่งานวิจัยวัดคือ ความสามารถด้านตัวเลขเชิงใช้งาน ในการแก้โจทย์ตัวเลขในชีวิตประจำวัน ซึ่งค่อนข้างต่างจากคณิตศาสตร์ขั้นสูงที่มักเชื่อมโยงกับการเขียนโปรแกรม เช่น ตรรกะเชิงรูปแบบ นามธรรมเชิงสัญลักษณ์ และภาษารูปแบบ
สิ่งที่สำคัญต่อการเข้าใจ recursion, type inference และการออกแบบอัลกอริทึม ไม่ใช่เลขคณิตพื้นฐาน แต่เป็นความสามารถเชิงนามธรรมแบบนี้มากกว่า ดังนั้นการที่ความสามารถด้านตัวเลขเชิงใช้งานมีพลังทำนายต่ำในงานวิจัยนี้ ไม่ได้หมายความว่าการให้เหตุผลทางคณิตศาสตร์เชิงลึกไม่เกี่ยวข้องกับการเขียนโปรแกรม
อีกทั้งภาษาที่ใช้ศึกษาเป็น Python ซึ่งออกแบบมาให้อ่านง่ายและใกล้เคียงภาษาธรรมชาติ อาจเป็นประโยชน์ต่อคนที่มีความสามารถทางภาษาสูง แต่ผลอาจไม่สามารถเหมารวมไปถึง C, Lisp หรือ Haskell ที่มีความหนาแน่นเชิงสัญลักษณ์และตรรกะสูงกว่าได้
ภาษาและคณิตศาสตร์ไม่ใช่ขั้วตรงข้ามกัน แต่มีฐานทางการรู้คิดร่วมกัน เช่น working memory, executive attention และการประมวลผลโครงสร้างลำดับชั้น ประเด็นสำคัญไม่ใช่ว่าฝ่ายไหน “ชนะ” แต่คือทั้งสองอย่างปฏิสัมพันธ์และเติมเต็มกันอย่างไรในบริบทการเขียนโปรแกรมที่ต่างกัน
วงวิชาการพยายามทำให้หลายแง่มุมของการเขียนโปรแกรมเป็นเชิงรูปแบบมาหลายสิบปีแล้ว แต่ดูเหมือนยังไม่เข้าใจข้อเท็จจริงที่ว่าความสัมพันธ์ระหว่างบัณฑิตวิทยาการคอมพิวเตอร์กับโปรแกรมเมอร์เชิงนวัตกรรมมีต่ำ
ในโลกจริง คนจำนวนมากที่สร้างผลงานได้เรียนรู้ recursion ผ่านช่วงเวลาแบบ “อ๋อ เพราะอย่างนี้ถึงมี recursion สินะ” เมื่อชนกำแพงด้วยวิธีอื่น ไม่ใช่เพราะไปศึกษานามธรรมเชิงสัญลักษณ์ denotational semantics หรือทฤษฎีชนิดข้อมูล
ความจริงที่น่าอึดอัดคือ การเขียนโปรแกรมเชิงวิชาชีพและเชิงนวัตกรรมแทบทั้งหมดไม่ได้ใช้คณิตศาสตร์ขั้นสูงภาคบังคับในหลักสูตรปริญญา
ผมมองว่าความโหดของการศึกษาแบบนี้คงอยู่ได้มากเพราะแนวคิด “ฉันทำมาแล้ว เธอก็ต้องทำ” และ บทบาทการเฝ้าประตูทางวิชาการ
เมื่อคุณเขียนโปรแกรมได้ดีมากจนเข้าสู่ช่วงที่มีผลิตภาพสูงสุดในชีวิต มันจะรู้สึกเหมือนภาษา คุณจะสามารถแสดงออกได้เหมือนพูดออกมาเฉย ๆ
ผลการศึกษานี้ค่อนข้างสมเหตุสมผลสำหรับผม ผมเป็นคนอ่านได้ดีมากและอ่านเร็วเสมอมา และความสามารถนี้มีประโยชน์มหาศาลต่อเส้นทางอาชีพโปรแกรมมิง
คะแนน SAT คณิตศาสตร์ของผมอยู่ที่ 710 ซึ่งก็โอเค แต่ SAT ภาษาในช่วงปลายทศวรรษ 1990 ได้เต็ม 800
ตอนเริ่มโปรเจกต์ปริญญาโทเรื่องเครือข่ายเซ็นเซอร์ไร้สาย อาจารย์ที่ปรึกษาพิมพ์ซอร์สโค้ด TinyOS ออกมาให้ แล้วบอกให้ผมไปศึกษาหนึ่งสัปดาห์ จากนั้นถ้าคิดว่าเข้าใจพอแล้วค่อยกลับมา
ประสบการณ์นั้นหล่อหลอมผมมาก และหลังจากนั้นทุกครั้งที่เข้าร่วมโปรเจกต์ใหม่ ผมก็มักใช้เวลาอ่านโค้ดและพยายามทำความเข้าใจว่าทั้งหมดประกอบเข้าด้วยกันอย่างไร
ตอนนี้ผมเป็น senior web developer และยังทำคณิตศาสตร์ได้ไม่เกินระดับพื้นฐานที่จำเป็นในชีวิตประจำวันเท่าไรนัก แต่ด้วยประสบการณ์ทำงานบริการอาหาร 18 ปี เลยประมาณเปอร์เซ็นต์ได้ค่อนข้างเร็ว
โปรแกรมเมอร์ที่เก่งที่สุดที่ผมเคยทำงานด้วยยังคงมี ความคิดเชิงภาษา ที่แข็งแรง พวกเขาใช้ได้หลายภาษาแม้ไม่จำเป็น หรือมีประวัติอ่านวรรณกรรมยาก ๆ มาอย่างยาวนาน
อย่างน้อยก็มีไหวพริบเฉพาะตัวแบบเมตาค็อกนิทีฟและเมตาลิงกวิสติก
ผมคิดว่าตอนนี้ก็ยังเป็นแบบนั้น แต่เมื่อเส้นทางปริญญาและอาชีพแพร่หลายขึ้น ก็ยิ่งสังเกตเห็นในธรรมชาติได้ยากขึ้น แถมในความเป็นจริง ความสามารถด้านการออกแบบและการอธิบายที่ดีจำเป็นบ่อยกว่าการสร้างอัลกอริทึมจากศูนย์มาก แต่เมื่อ optimize เพื่อ LeetCode ก็ย่อมทำให้สมองสายคณิตศาสตร์ได้เปรียบโดยธรรมชาติ
แต่ผมแย่และไม่ชอบคณิตศาสตร์ เวลาอ่านข้อความคณิตศาสตร์ส่วนใหญ่ ผมรู้สึกเหมือนเป็น dyslexia
ตอนประถมผมทำได้ดี แต่เมื่อเนื้อหาเริ่มเน้นสมการ สิ่งนามธรรม และเรื่องที่ไม่รู้ว่าจะเอาไปใช้ตรงไหน มากกว่าอัลกอริทึม ผมก็หงุดหงิดท้อใจอย่างรวดเร็ว
ในทางกลับกัน การเขียนโปรแกรมกลับเป็นธรรมชาติและเรียนรู้ได้ง่าย ตอนเรียนหัวข้อที่ว่า “ยาก” อย่าง pointers หรือ recursion จริง ๆ แล้วมันง่ายมากเสียจนผมใช้เวลานานกว่าในการกล่อมตัวเองว่า “มันไม่น่าจะง่ายขนาดนี้ ต้องมีอะไรที่เราพลาดไปแน่ ๆ”
ในทุกที่ทำงาน ผมมักเป็นคนรับปัญหา “ยาก” หรือปัญหา “low-level”
เวลาต้องอ่านคณิตศาสตร์ ผมจะเข้าใจได้ก็ต่อเมื่อเปลี่ยนทุกอย่างให้เป็นขั้นตอน และทำให้ค่าตัวอย่างไหลผ่านขั้นตอนเหล่านั้นพร้อมดูว่ามันส่งผลต่อกันอย่างไร ต้องเปลี่ยนทั้งหมดให้เป็น อัลกอริทึม
ความพยายามที่จะสื่อความหมายด้วยสมการและพิสูจน์ไม่ค่อยเข้ากับผม ผมต้องเปลี่ยนขอบเขตระหว่างสัญลักษณ์ทุกตัวให้เป็นขั้นตอนแล้วเดินตามทีละก้าว ถึงจะพอเข้าใจ
ผมคิดว่าการเขียนโปรแกรมเข้ากับผมเพราะโดยปกติวิธีที่เราเจอและเรียนรู้มันเน้นอัลกอริทึมเป็นหลัก และมีรูปแบบการแสดงออกทางคณิตศาสตร์แบบอื่นน้อยกว่ามาก บริบทของความหมายของตัวแปรและ routine ก็มีมากกว่าก้อนสัญลักษณ์ล้วน ๆ มาก
ถ้าจะบอกว่า Perl เป็น line noise แล้วงานเขียนคณิตศาสตร์ควรเรียกว่าอะไร เมื่อเทียบกับคำเพ้อเจ้อบริสุทธิ์ของสาวก Cthulhu ที่จิตพัง Perl ยังเป็นสิ่งที่ชัดเจนที่สุดในโลก
ปัญหาคือภาษาที่มีไวยากรณ์แบบคณิตศาสตร์ สไตล์นิยมที่ใช้ตัวแปรตัวอักษรเดียวและประกาศสมการเพื่อทำงานนั้นอ่านยาก และผมอ่าน Haskell ไม่ไหวจริง ๆ
แนวคิดยาก ๆ แบบเดียวกันอย่าง monad หรือ type class ถ้าดูในภาษาที่ธรรมดากว่านี้จะง่าย แต่พอพยายามเรียนผ่าน Haskell ผมไปต่อไม่ได้เลย แม้แต่โปรแกรมระดับ fizzbuzz ที่เขียนด้วย Haskell ก็ยังใช้เวลานานกว่าจะเข้าใจ
คะแนนฝั่งภาษาของผมสูงกว่ามาก และผมก็สร้างอาชีพ software engineering ที่ยอดเยี่ยมมาได้จากการใช้หลายภาษาร่วมกันในโปรเจกต์มืออาชีพขนาดใหญ่ของบริษัทใหญ่ที่ใคร ๆ ก็น่าจะรู้จัก
สิ่งที่เรียกว่า “สมองแบบภาษา” หรือ “สมองแบบคณิตศาสตร์” จะตั้งอยู่ไม่ได้ เว้นแต่จะมีการทดลองแสดงให้เห็นว่าเซลล์ประสาทที่เกี่ยวข้องถูกแบ่งออกเป็นสองบริเวณที่ไม่ทับซ้อนกันและรับผิดชอบภาษาและคณิตศาสตร์แยกกัน
ตัวคณิตศาสตร์เองก็เป็น ภาษารูปแบบ ที่มนุษย์สร้างขึ้น และแม้จะเริ่มจากนิยามและสัจพจน์ของตรรกะกับทฤษฎีเซต แต่นิยามและสัจพจน์เหล่านั้นก็ต้องถูกให้มาก่อนด้วยภาษามนุษย์อยู่ดี
นักคณิตศาสตร์ที่ชำนาญอ่านทฤษฎีบทที่เขียนด้วยอักษรกรีกบนกระดานเหมือนอ่านภาษาอังกฤษธรรมดา ซึ่งชี้ให้เห็นว่าพวกเขาคิดถึงมันเหมือนภาษาอังกฤษทั่วไป
แน่นอน หากต้องการ ก็อาจนึกภาพแทนเชิงทัศน์ที่มีโครงสร้างสมสัณฐานกับภาษานั้นขึ้นมาในใจได้
คำว่า “สมองแบบภาษา” กับ “สมองแบบคณิตศาสตร์” เป็นเพียงเรื่องแต่งที่มีประโยชน์ และในทางปฏิบัติไม่สำคัญว่ามันเป็นก้อนเนื้อคนละส่วนกันจริงหรือไม่
ถึงอย่างนั้น คนส่วนใหญ่น่าจะเห็นตรงกันว่าการแก้ปัญหา การถ่ายทอดความคิดออกมาเป็นคำพูด และการถ่ายทอดความคิดออกมาเป็นคณิตศาสตร์เป็นทักษะที่ต่างกันมาก
ดังคำของ Henri Poincaré ที่ว่า “กวีนิพนธ์คือศิลปะของการตั้งชื่อสิ่งเดียวกันด้วยชื่อต่างกัน ส่วนคณิตศาสตร์คือศิลปะของการตั้งชื่อสิ่งต่างกันด้วยชื่อเดียวกัน” สุดท้ายผมมองว่ามันใกล้เคียงกับความสามารถในการตั้งชื่อให้ดี โดยเฉพาะกับนามธรรม
แต่จากประสบการณ์ของผม SAT เมื่อ 20 ปีก่อน ส่วนภาษาก็มีเรื่องนามธรรมอย่างอุปมาอุปไมยเยอะ และคณิตศาสตร์ก็คล้ายกัน ผมเคยสอบครั้งหนึ่งได้ภาษา 660 คณิต 650 แทบไม่ต่างกัน
Oliver Sacks เคยเขียนถึงผลข้างเคียงอันพิสดารของการบาดเจ็บทางสมอง
เราอาจทดลองทำให้สมองหลายส่วนของนักคณิตศาสตร์หรือนักเขียนบาดเจ็บก็ได้ แต่การกระตุ้นประสาทหรือการทำให้สมองบางบริเวณชาอาจแสดงอะไรบางอย่างได้เช่นกัน
ข้ออ้างนี้แปลกในหลายแง่ ผมไม่คิดว่ามีสิ่งที่เป็นตัวตนจริง ๆ อย่าง “สมองแบบภาษา” หรือ “สมองแบบคณิตศาสตร์” แต่ขณะเดียวกัน คนจำนวนมากก็ไม่รู้ว่าคณิตศาสตร์คืออะไร และหลักฐานนั้นอาจกลับถูกมองว่าสนับสนุน “สมองแบบคณิตศาสตร์” ได้ด้วย
คณิตศาสตร์ไม่ใช่การคำนวณ แต่เป็นเรื่องของ แพตเทิร์น เมื่อเข้าเรื่องพีชคณิต เราอาจคิดว่า “ทำไมคณิตศาสตร์ถึงมีตัวอักษร?” แต่เมื่อไปไกลกว่านั้น เราจะเริ่มคิดว่า “ทำไมคณิตศาสตร์ถึงมีตัวเลข?”
โศกนาฏกรรมใหญ่ของการศึกษาคณิตศาสตร์คือการเน้นการคำนวณมากเกินไป หัวข้อที่มีประโยชน์อย่างทฤษฎีกลุ่ม คอมบินาทอริกส์ กราฟ ทฤษฎีเซต และทฤษฎีหมวดหมู่มีพื้นฐานที่เด็ก ๆ ก็เข้าใจได้ แต่กลับไปสอนกันก็ต่อเมื่อเรียนเอกคณิตศาสตร์ระดับปริญญาตรีหรือบัณฑิตศึกษา
หัวข้อเหล่านี้มีความลึกมหาศาล แต่หลายส่วนที่ช่วยจัดรูปแบบวิธีคิดนั้นเด็ก ๆ ก็เข้าใจได้ ตัวอย่างเช่น ผมแนะนำ Visual Group Theory[0]
คณิตศาสตร์เป็นเรื่องของนามธรรม แต่น่าแปลกที่เรากลับเก็บมันไว้จนถึง “ช่วงท้ายเกม”
ผมพูดได้อย่างมั่นใจว่าเมื่อเข้าใจสิ่งเหล่านี้แล้ว การเรียนรู้จะเร็วขึ้นและส่งผลลึกซึ้งต่อวิธีคิด เพียงแต่ต้องยอมรับนามธรรมนั้นอย่างจริงใจ และไม่จำกัดตัวเองว่ามันเป็นเพียงเครื่องมือที่ใช้กับงานเฉพาะบางอย่างเท่านั้น
หลายคนลำบากกับโจทย์ปัญหาแบบข้อความ แต่ต่อให้เป็นสถานการณ์ชวนขำที่ญาติ Throckmorton จะซื้อแตงโม 500 ลูก สุดท้ายมันก็เป็นส่วนหนึ่งของการเชื่อมคณิตศาสตร์เข้ากับความจริง
เหตุผลที่คณิตศาสตร์ “ขั้นสูง” ทำให้ผมเรียนรู้เร็วขึ้นคือคณิตศาสตร์ในระดับนั้นสอนเรื่องนามธรรม หรือก็คือวิธีคิด แม้จะไม่ได้เขียนสมการก็ช่วยได้อย่างมหาศาล
จริง ๆ แล้วคณิตศาสตร์ไม่ใช่การเขียนสมการ แต่เมื่อเรื่องซับซ้อนขึ้น สมการช่วยได้มาก จึงใช้มัน
[0] https://www.youtube.com/watch?v=UwTQdOop-nU&list=PLwV-9DG53N...
ตัวอย่างเช่น ผมไม่เคยได้ยินว่ามทริกซ์เป็นนามธรรมที่มีประโยชน์ หรือเป็นการเขียนย่อเพื่อแทนสมการเชิงเส้น
เช่นเดียวกับที่จำนวนจินตภาพเป็นนามธรรมที่ถูกประดิษฐ์ขึ้นเพื่อให้การคำนวณบางอย่างง่ายขึ้น
ถ้าได้เรียนจากมุมมองว่านามธรรมเหล่านั้นมีหน้าตาอย่างไรและทำไมจึงมีประโยชน์ ก็คงจะดี
“ในชั่วโมงดนตรี เราหยิบกระดาษบรรทัดห้าเส้นออกมา พอครูเขียนโน้ตบนกระดาน เราก็คัดลอกมันหรือย้ายคีย์ไปอีกคีย์หนึ่ง ต้องเขียนกุญแจเสียงและเครื่องหมายประจำกุญแจให้ถูกต้อง และครูก็เข้มงวดมากว่าเราระบายหัวโน้ตตัวดำจนเต็มหรือไม่ ครั้งหนึ่งผมตอบโจทย์โครมาติกถูก แต่ไม่ได้คะแนนเพราะหางโน้ตชี้ผิดทิศ”
https://en.m.wikipedia.org/wiki/A_Mathematician%27s_Lament
ผมเองก็เคยเรียนพีชคณิตนามธรรมด้วยตัวเอง แล้วพบว่าความสามารถในการเรียนรู้และการให้เหตุผลเร็วขึ้น
โดยพื้นฐานมีสี่สาย สายหนึ่งจบพีชคณิต 1 ตอน ม.6 อีกสายเรียนตรีโกณมิติใน ม.6 อีกสายก็ไปถึงตรีโกณมิติเหมือนกันแต่ไม่มีพรีแคลคูลัส และมีเพียงสายสุดท้ายที่ไปถึงตรีโกณมิติและพรีแคลคูลัส
ห้องสุดท้ายนี้ยังถูกแบ่งย่อยอีก บางคนเรียนแค่พรีแคลคูลัส บางคนเรียนแคลคูลัส 1 และสอบ AP Calculus AB หรือ IB Math SL ส่วนกลุ่มที่เล็กกว่านั้นสอบ AP Calculus BC หรือ IB Math HL
ในรุ่นของผม นักเรียนที่สอบ AP Calculus AB มีประมาณ 20 คน จากผู้จบการศึกษา 500–600 คน
แค่สำนวนว่า “ความสามารถทางภาษาและความสามารถในการแก้ปัญหา” ก็เป็นสัญญาณเตือนแรกแล้ว ชื่อเรื่องกลับเปลี่ยนให้เป็นปัญหาเรื่องภาษาอย่างเดียว
ค่อนข้างชัดเจนว่าความสามารถในการแก้ปัญหาเกี่ยวข้องกัน แต่เรื่องภาษานั้นไม่ชัดเจนนัก
ผมเขียนโปรแกรมมาแทบทั้งชีวิต แต่ไม่คิดว่าตัวเองพูดเก่ง ความสามารถทางภาษาก็พอใช้ และคงคาดหวังให้เรียนภาษาธรรมชาติใหม่ได้ยาก
ดังนั้นผมจึงสงสัย และเมื่อดูงานวิจัย ก่อนอื่น “คณิตศาสตร์” ถูกเปลี่ยนเป็น ความสามารถเชิงตัวเลข ไปแล้ว ผมคิดว่าการเขียนโปรแกรมใกล้เคียงกับพีชคณิตมากกว่า แต่ถึงอย่างนั้นก็ยังเข้มงวดน้อยกว่าและดีบักง่ายกว่า
การวัดความสามารถเชิงตัวเลขในงานวิจัยนี้เป็นมาตรวัดแบบ Rasch ที่ประเมินคำถามด้านความสามารถเชิงตัวเลข 18 ข้อจากหลายมาตรวัด แล้วเลือก 8 ข้อที่ทำนายได้ดีที่สุด
อีกทั้งงานวิจัยนี้ก็เป็นข้อมูลเมื่อ 5 ปีก่อนแล้ว
ถ้าแก้ปัญหาได้ แต่ไม่สามารถอธิบายได้ว่าอะไรคือปัญหา และทำไมวิธีแก้นั้นจึงแก้ปัญหาได้ ก็คงเรียกว่าเป็นนักแก้ปัญหาที่ดีได้ยาก
คนที่อธิบายปัญหาได้ดีแต่คิดวิธีแก้ไม่ออก ยังดีกว่าโปรแกรมเมอร์จำนวนมากในโลกนี้แล้ว และผมอยากทำงานด้วยมากกว่าคนที่โยนคำตอบมาเฉยๆ โดยไม่มี “กระบวนการแก้”
ที่จริง หากไม่มีความสามารถในการอธิบายเช่นนั้น ก็ยากแม้แต่จะเข้าใจว่าการแก้ปัญหาในความหมายดั้งเดิมคืออะไร
ในบริบทนี้ ความคิดสร้างสรรค์อาจเป็นความสามารถในการจัดกรอบปัญหาใหม่ให้อยู่ในรูปแบบที่เข้าถึงได้ง่ายขึ้น ในหลายกรณี การวางกรอบแบบนั้นบ่งชี้ถึงวิธีแก้ที่ชัดเจน หรือชุดวิธีแก้ที่มีจุดแลกเปลี่ยนที่ชัดเจน
ผมเห็นความสัมพันธ์ที่ค่อนข้างน่าสนใจระหว่างคนที่เรียนเขียนโปรแกรมได้ดี กับคนที่เก่ง spelling bee ภาษาอังกฤษ
ดูเหมือนจะคล้ายกันตรงที่ต้องทำตามกระบวนการแบบอัลกอริทึม ขณะเดียวกันก็ต้องเก็บเรื่องเล่าและข้อยกเว้นของกฎที่เข้าใจยากจำนวนมากไว้ในหัว
สมองของผมดูเหมาะกับการเก็บและดึงข้อมูลประเภทนี้ออกมาใช้ และสิ่งนี้ก็มีความสัมพันธ์สูงกับสิ่งอย่างอินเทอร์เฟซ CLI และโครงสร้างคำสั่งที่แปลกๆ ด้วย
ผมมองอย่างหนักแน่นว่าการนิยาม “สมองสายภาษา” กับ “สมองสายคณิตศาสตร์” เป็น ทวิภาวะเทียม และเป็นประสาทวิทยาศาสตร์มั่วๆ
คณิตศาสตร์เองก็เป็นภาษาอย่างหนึ่ง คือชุดสัญลักษณ์ที่สร้างขึ้นเพื่อแสดงแนวคิด
งานวิจัยนี้ให้ความรู้สึกเหมือนพยายามพูดสิ่งที่คนส่วนใหญ่รู้อยู่แล้วว่า ถ้ามีความสนใจ แรงผลักดัน และโอกาส ใครๆ ก็เป็นโปรแกรมเมอร์หรือนักคณิตศาสตร์ที่ดี หรือเป็นอะไรก็ได้
มีหนังสือน่าสนใจเล่มหนึ่งชื่อ “Duel at Dawn” ที่แสดงให้เห็นการเปลี่ยนแปลงของภาพรับรู้ทางสังคมต่อเหล่านักคณิตศาสตร์ และต่อเนื่องไปถึงนักวิทยาการคอมพิวเตอร์
ภาพลักษณ์สมัยใหม่ที่ค่อนข้างเพิ่งเกิดขึ้นไม่นาน คืออัจฉริยะสันโดษที่มีความสามารถโดยกำเนิดเหนือมนุษย์และแปลกแยกในการจัดการตัวเลขกับข้อมูล บางครั้งถึงขั้นมีนัยว่าเป็นออทิสติก ตัวอย่างตายตัวก็อย่าง “Sheldon Cooper” จากรายการทีวี “the big bang theory”
แต่นั่นไม่จริง
ไม่มีใครเกิดมาพร้อมความสามารถเหนือมนุษย์ในการทำอะไรสักอย่างได้ดีเลิศ คนที่ทำอะไรได้ดีมาก คือคนที่พยายามอย่างหนักมากเพื่อทำสิ่งนั้นให้ดี ไม่ว่าภาพรับรู้ของคนอื่นจะเป็นอย่างไร
ตอนแรกผมวิจารณ์งานวิจัยจากการอ่านแค่บทความ แต่หลังจากกวาดตาดูบทความวิชาการที่ถูกอ้างอิงจริงๆ แล้ว ก็ปรับคำวิจารณ์เฉพาะเจาะจงบางส่วน อย่างไรก็ตาม ตัวบทความวิชาการเองยังดูไม่เกิน ข้อโต้แย้งเชิงสุพันธุศาสตร์ ที่อ่อนแอซึ่งห่อหุ้มด้วยศัพท์จิตวิทยาและสถิติ
บทความนี้ชวนให้เข้าใจผิดอย่างรุนแรง ถึงขั้นแทบอยากบอกว่าเกือบมีเจตนาร้าย
ตัวงานวิจัยเองบอกว่า การให้เหตุผลแบบลื่นไหลและความจุของหน่วยความจำใช้งานอธิบายได้ 34%, ความถนัดทางภาษา 17%, กำลังย่านเบตาและโลว์แกมมาของ EEG ขณะพัก 10%, และความสามารถเชิงตัวเลข 2%
แต่ตรงนี้กลับถือว่าความสามารถทางคณิตศาสตร์เท่ากับความสามารถเชิงตัวเลข งานวิจัยเองก็สื่อเป็นนัยเช่นนั้น แต่ผมไม่เห็นด้วยในระดับพื้นฐาน
ผมมองว่าความสามารถทางคณิตศาสตร์ใกล้เคียงกับ การให้เหตุผลแบบลื่นไหล มากกว่าความสามารถเชิงตัวเลขอย่างมาก