การคิดเชิงคำนวณ
แนะนำใหม่| English | ความหมาย |
|---|---|
| computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ | การคิดเชิงคำนวณ |
| abstraction/əbˈstrækʃn/ | การ추่น |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | การแยกย่อย |
| pattern recognition/ˈpætn ˌrekəɡˈnɪʃn/ | การจดจำรูปแบบ |
| algorithm/ˈælɡərɪθəm/ | อัลกอริทึม |
| function/ˈfʌŋkʃn/ | ฟังก์ชัน |
| module/ˈmɒdjuːl/ | โมดูล |
| sub-problem/sʌb ˈprɒbləm/ | ปัญหาย่อย |
| procedure/prəˈsiːdʒə/ | ขั้นตอน |
| structure chart/ˈstrʌktʃə tʃɑːt/ | แผนภาพโครงสร้าง |
แผนที่ที่บิดเบี้ยวอย่างจงใจ
- ในปี 1931 แฮรรี่ เบ็ก นักวาดภาพประกอบ unemployed ได้วาดแผนที่ใหม่ของระบบรถไฟใต้ดินลอนดอน
- เขาทิ้งภูมิศาสตร์จริงทิ้งไป: ทุกเส้นทางกลายเป็นเส้นตรงและทุกสถานีมีระยะห่างเท่ากัน
- แผน地圖นี้ "ผิด" แต่ใช้งานง่ายทันที ทุกแผนที่รถไฟใต้ดินทั่วโลกตอนนี้ลอกแบบมาทั้งหมด
- เบ็กเก็บไว้เพียงสิ่งที่ผู้โดยสารต้องการ: สถานีและวิธีการเชื่อมต่อกัน นั่นคือ การคิดเชิงคำนวณ ก่อนที่คอมพิวเตอร์จะเกิดขึ้น
การคิดเชิงคำนวณคืออะไร
- ชุดเครื่องมือทางความคิดสำหรับการวิเคราะห์ปัญหาและออกแบบโซลูชันที่คอมพิวเตอร์สามารถรันได้
- ซิลแลบัสนามมันสองอย่าง: การห่อหุ้ม (abstraction) และ การแยกย่อย (decomposition)
- อีกสองอย่างสนับสนุน: การจดจำรูปแบบ และการออกแบบ อัลกอริทึม
การห่อหุ้ม (Abstraction)
- การห่อหุ้ม คือการคง คุณสมบัติหลัก ของปัญหาไว้และ ละเว้นรายละเอียดที่ไม่เกี่ยวข้อง เพื่อให้ได้โมเดลที่ง่ายขึ้น
- แผนที่รถไฟใต้ดินรักษาไว้เฉพาะสถานีและเส้นทางและตัดภูมิศาสตร์ออก
- ชื่อตัวแปรซ่อนที่อยู่หน่วยความจำ; ฟังก์ชันซ่อนบล็อกโค้ดไว้ đằngหลังชื่อ; คลาสเก็บไว้เฉพาะแอททริบิวต์ที่ระบบต้องการเท่านั้น

การห่อหุ้มเก็บไว้เฉพาะคุณสมบัติหลักของปัญหาและตัดรายละเอียดที่ไม่เกี่ยวข้องออก
Abstraction หมายถึง:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Abstraction ลดปัญหาให้อยู่ที่แก่นแท้ การแยกย่อยเป็นส่วนย่อยเรียกว่า Decomposition
แผนที่รถไฟที่เก็บสถานีและเส้นทางแต่ตัดภูมิศาสตร์จริงออก เป็นตัวอย่างของ Abstraction
Difficulty 1/5 · 100 coins + a small bonus on first completion today
มันเก็บสิ่งที่สำคัญ (สถานี, เส้นทางเชื่อมต่อ) ทิ้งส่วนที่เหลือไว้ — ตรงกับหน้าที่ของ Abstraction พอดี
จุดประสงค์และประโยชน์
- จุดประสงค์: เพื่อสร้างโมเดลปัญหาที่ง่ายขึ้นซึ่งมีแต่รายละเอียดที่จำเป็นต่อการแก้ปัญหาเท่านั้น
- ประโยชน์: ปัญหาเข้าใจได้ง่ายขึ้นและเขียนโปรแกรมได้ง่ายขึ้น; โปรแกรมมีขนาดเล็กกว่าและเขียนและทดสอบได้เร็วขึ้น; โมเดลเดียวกันสามารถใช้ซ้ำได้กับปัญหาที่คล้ายคลึงกัน
- ผู้สอบถามหาจุดประสงค์และประโยชน์ แยกต่างหาก ต้องจำทั้งสองอย่าง
เลือก ทุก ประโยคที่เป็นประโยชน์ของ Abstraction
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Abstraction ตัด รายละเอียดออก ดังนั้นการเก็บรายละเอียดทั้งหมดจึงขัดแย้งกับมัน และไม่ได้กล่าวถึงฮาร์ดแวร์ ประโยชน์จริงสามประการคือการเข้าใจ, ขนาด/ความเร็วในการพัฒนา, และการนำกลับมาใช้ใหม่
ตัวอย่างวิธีทำ: โมเดลเชิงนามธรรม
- ร้านกาแฟจัดเก็บข้อมูลสำหรับลูกค้า每张 loyalty card: ID, ชื่อ, ที่อยู่บ้าน, อีเมล, เบอร์โทรศัพท์มือถือ, วันเกิด, คะแนนสะสม, และวันที่เยี่ยมชมล่าสุด
- โมดูลใหม่ส่งอีเมล voucher ไปยังลูกค้าที่ไม่ได้เข้ามาใช้บริการเป็นเวลา 30 วัน ข้อมูลใดที่มันต้องการ?
- ต้องการ: ID (เพื่อค้นหาข้อมูลลูกค้า), อีเมล (เพื่อส่ง), ชื่อ (เพื่อปรับข้อความให้ส่วนบุคคล), วันที่เยี่ยมชมล่าสุด (เพื่อเลือกใครได้รับ)
- ไม่ต้องใช้: ที่อยู่บ้าน, เบอร์โทรศัพท์มือถือ, วันเกิด, คะแนนสะสม การละเลยสิ่งเหล่านี้ คือ การห่อหุ้ม
โมดูล voucher-email ในตัวอย่างที่หาคำตอบต้องการสิ่งใดบ้าง? เลือก ทุก ข้อที่ถูกต้อง
Difficulty 2/5 · 140 coins + a small bonus on first completion today
อีเมลที่จะส่ง, วันที่มาเยือนล่าสุดเพื่อเลือกผู้ที่มีสิทธิ์, และ ID用于ค้นหาข้อมูลลูกค้า ที่อยู่ไปรษณีย์และวันเกิดไม่เกี่ยวข้องกับการส่ง '-', Voucher ทางอีเมล ดังนั้นโมเดลนามธรรมของโมดูลนี้จะตัดสิ่งเหล่านั้นทิ้งไป
การแยกย่อย (Decomposition)
- การแยกย่อย หมายถึง แบ่งปัญหาใหญ่ออกเป็นปัญหาย่อยๆ ที่แก้ได้ง่ายกว่า
- หาส่วนหลัก → แบ่งแต่ละส่วนเป็นงานย่อย → หยุดเมื่อแต่ละส่วนเล็กพอที่จะเขียนโค้ดได้โดยตรง → แก้ไขและรวมเข้าด้วยกัน
- ปัญหาย่อยแต่ละอันกลายเป็น โมดูล ของโปรแกรม: ** Procedure** หรือ Function

การแยกย่อยโปรแกรมออกเป็นโมดูลและ submodule
Decomposition หมายถึง:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Decomposition แบ่งงานใหญ่ออกเป็นงานย่อยขนาดเล็กที่แก้แยกกันได้
ปัญหาย่อยแต่ละอันที่เกิดจากการแยกย่อยกลายเป็นโมดูลโปรแกรม: procedure หรือ ____
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คำนิยามในหลักสูตรระบุชัดเจน: Decomposition นำไปสู่แนวคิดของ Program module — ซึ่งคือ procedure หรือ function
ตัวอย่างวิธีทำ: โปรแกรมจองที่นั่งโรงภาพยนตร์
- โรงภาพยนตร์ที่มีหลายจอต้องการโปรแกรมที่ช่วยให้ลูกค้าจองที่นั่ง
- ShowFilms() แสดงรายการภาพยนตร์, จอฉาย, และเวลาเริ่ม
- ChooseSeats() แสดงแผนผังที่นั่ง, รับตัวเลือกของลูกค้า และตรวจสอบว่าที่นั่งว่างหรือไม่
- TakePayment() คำนวณราคา, ประมวลผลบัตรเครดิต, และพิมพ์ตั๋ว
- สามโมดูล, แต่ละอันเล็กพอที่จะออกแบบ เขียนโค้ด และทดสอบได้ด้วยตัวเอง
จับคู่แต่ละส่วนของการออกแบบระบบจองหนังโรงกับสิ่งที่มันคือ
Difficulty 2/5 · 140 coins + a small bonus on first completion today
สามโมดูล แต่ละตัวทำงานเพียงอย่างเดียว และมี structure chart แสดงว่าพวกมันเชื่อมโยงกันอย่างไร
ทำไมต้องแยกย่อย? คำตอบสำหรับข้อสอบ 3 คะแนน
- ปัญหาย่อยแต่ละส่วนมีขนาดเล็กพอที่จะ ออกแบบ เขียนโค้ด และทดสอบได้โดยอิสระ
- นักเขียนโปรแกรม不同的人 สามารถทำงานบนโมดูลที่ต่างกันพร้อมกันได้
- โมดูลที่มีอยู่แล้ว หรือฟังก์ชันในไลบรารี สามารถ นำกลับมาใช้ใหม่ได้ และการหาข้อผิดพลาดก็ง่ายกว่าเพราะมันอยู่ใน โมดูลเดียว
- แผนภาพของการแยกย่อยคือ แผนภาพโครงสร้าง (structure chart) (หัวข้อ 12)
หลักฐานสี่ประการ
- การแยกย่อย (Decomposition): แยกปัญหาออก การจดจำรูปแบบ (Pattern recognition): สังเกตสิ่งที่ซ้ำซ้อน เพื่อให้วิธีแก้หนึ่งวิธีครอบคลุมหลายส่วน
- การนามธรรม (Abstraction): ตัดรายละเอียดที่ไม่จำเป็นออก การออกแบบอัลกอริทึม (Algorithm design): เขียนวิธีแก้ปัญหาทีละขั้นตอน
- ในทางปฏิบัติคุณจะใช้ตามลำดับนี้ประมาณหนึ่งรอบ แล้ววนกลับ来做多次
แก้ปัญหาด้วยวิธีการทางคอมพิวเตอร์
ผ่านขั้นตอน基石ทั้งสี่ตามลำดับที่คุณจะใช้ — แยกปัญหาออก, หาสิ่งที่ซ้ำกัน, ตัดส่วนที่ไม่จำเป็นออก, แล้วเขียนขั้นตอน
จับคู่แต่ละ基石ของการคิดเชิงคำนวณกับความหมายของมัน
Difficulty 2/5 · 140 coins + a small bonus on first completion today
基石ทั้งสี่ — แยกย่อย, จดจำรูปแบบ, นามธรรม, แล้วออกแบบอัลกอริทึม
เรียงลำดับขั้นตอนการคิดเชิงคำนวณให้เป็นตรรกะ
Difficulty 3/5 · 200 coins + a small bonus on first completion today
แยกย่อย, หาสิ่งที่ซ้ำ, ตัดจนเหลือแก่นแท้, แล้วเขียนขั้นตอน
อย่าสับสนระหว่างกัน
- การนามธรรม ตัดรายละเอียด; การแยกย่อย แบ่งปัญหา "การแตกออกเป็นชิ้นเล็กๆ" ไม่ใช่คำอธิบายของการนามธรรม
- คำตอบแบบ "อธิบาย" ต้องบอก วิธีการ ไม่ใช่แค่คำเดียว: บอกว่าอะไรถูกแยก ออกเป็นอะไร และแต่ละส่วนกลายเป็นอะไร
- เชื่อมโยงคำตอบกับ สถานการณ์ คำตอบเรื่องการแยกย่อยที่ไม่เคยกล่าวถึงระบบสต็อกโรงภาพยนตร์หรือร้านค้า จะเสียคะแนน
ในคำถาม "อธิบายการแยกย่อย" คำตอบที่ไม่เคยกล่าวถึงสถานการณ์ (ร้าน, โรงหนัง) ก็ยังสามารถได้รับคะแนนเต็มได้
Difficulty 1/5 · 100 coins + a small bonus on first completion today
เกณฑ์การให้คะแนนจำกัดคำตอบทั่วไป: ข้อสอบควบคุมสต็อกล่าสุดระบุว่า "สูงสุด 2 หากไม่กล่าวถึงการควบคุมสต็อก" ระบุโมดูลและข้อมูลเฉพาะของสถานการณ์นั้นๆ
คุณเข้าใจแล้ว
- การนามธรรม = เก็บสิ่งสำคัญ ทิ้งรายละเอียดที่ไม่เกี่ยวข้อง → โมเดลที่ง่ายขึ้น
- การแยกย่อย = แบ่งปัญหามหาศาลเป็นปัญหาย่อย → แต่ละส่วนจะกลายเป็น Procedure หรือ Function
- ประโยชน์ของการแยกย่อย: ออกแบบ/เขียนโค้ด/ทดสอบแยกกัน กระจายงาน ใช้โมดูลซ้ำได้ หาข้อผิดพลาดเร็วขึ้น
- อธิบายโดยใช้ชื่อโมดูลและข้อมูลของสถานการณ์นั้นๆ เสมอ