Sign in

Part of 10306103 หลักการเขียนโปรแกรมเบื้องต้น (Fundamentals of Programming)

2026-10-22 · updated 2026-10-30 · 18 min read

บทที่ 14 จริยธรรมทางวิชาการและความซื่อสัตย์ในการพัฒนาโค้ด

ShareFacebookXLinkedInLINE

แผนบริหารการสอนประจำบทที่ 14

บทนี้ว่าด้วยจริยธรรมทางวิชาการ (academic integrity) และความซื่อสัตย์ในการพัฒนาโค้ด ซึ่งเป็นบทที่เน้นแนวคิดและการปฏิบัติมากกว่าการเขียนโค้ดจำนวนมาก โดยอธิบายว่าความซื่อสัตย์คือการไม่นำผลงานของผู้อื่นมาเป็นของตน การจำแนกการคัดลอกที่ไม่เหมาะสมออกจากการศึกษาแนวทางแล้วพัฒนาเป็นโค้ดของตนเอง การพัฒนาโค้ดด้วยความเข้าใจของตนเองจนอธิบายการทำงานได้ทุกบรรทัด และการอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วย เช่น เว็บ ตัวอย่างโค้ด หรือเครื่องมือปัญญาประดิษฐ์ (AI) อย่างโปร่งใส เนื้อหาต่อยอดจากการจัดการสตริงในบทที่ 8 และมาตรฐานการเขียนโค้ดในบทที่ 13 โดยนำหลักการวนอักขระในสตริงมาพัฒนาโปรแกรมตัวอย่างหนึ่งด้วยความเข้าใจของตนเอง บทนี้ตอบ CLO4 ที่ระบุถึงการพัฒนาโค้ดด้วยความเข้าใจของตนเองและความซื่อสัตย์โดยตรง

ผลลัพธ์ข้อความหลักฐานCLO
LLO14.1อธิบายหลักจริยธรรมทางวิชาการและความซื่อสัตย์ในการพัฒนาโค้ด และจำแนกการคัดลอกที่ไม่เหมาะสมงานข้อ 1 (ปฏิบัติการที่ 14 Lab B)CLO4
LLO14.2พัฒนาโค้ดด้วยความเข้าใจของตนเอง โดยศึกษาแนวทางจากแหล่งอื่นแล้วเขียนใหม่พร้อมอธิบายการทำงานงานข้อ 2 (ปฏิบัติการที่ 14 Lab A)CLO4
LLO14.3อ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วย (รวมถึงเครื่องมือ AI) อย่างซื่อสัตย์และโปร่งใสงานข้อ 3 (ปฏิบัติการที่ 14 Lab A/B)CLO4

CLO ที่เกี่ยวข้อง (ข้อความจากหลักสูตร):

  • CLO4 พัฒนาโค้ดด้วยความเข้าใจของตนเอง หลีกเลี่ยงการคัดลอกจากแหล่งอื่นโดยไม่ศึกษา เพื่อให้ผลงานถูกต้องและมีความซื่อสัตย์

บทที่ 14 เป็นจุดตรวจ CLO4 ระยะที่ 3 ต่อจากบทที่ 1 และ 7 ซึ่งให้ข้อเสนอแนะเท่านั้น ใบงาน C14-WS01 มี 30 คะแนน คิดในหมวดความซื่อสัตย์ 5% ไม่รวมในหมวดใบงานบทที่ 1–13

CLO4 สรุปผลแบบถ่วงน้ำหนัก เป้าหมาย 60% เพื่อสะท้อนผลการเรียนรู้เท่านั้น ไม่เป็นเงื่อนไขผ่านรายวิชา และไม่ทำให้ได้เกรด I โดยอัตโนมัติ

ระเบียบ บทลงโทษ และนโยบาย AI เฉพาะของมหาวิทยาลัยหรือหลักสูตรต้องใช้แหล่งอ้างอิงจริง แยกกระบวนการดังกล่าวออกจากการให้คะแนนหลักฐานตามรูบริกนี้

วิธีสอน

  1. ตั้งคำถามนำว่าการนำโค้ดของผู้อื่นมาส่งโดยไม่เข้าใจต่างจากการศึกษาตัวอย่างแล้วเขียนใหม่ด้วยความเข้าใจอย่างไร เพื่อเปิดประเด็นเรื่องความซื่อสัตย์และนำเข้าสู่หลักจริยธรรมทางวิชาการ
  2. อธิบายหลักจริยธรรมทางวิชาการและความซื่อสัตย์ แล้วจำแนกการคัดลอกที่ไม่เหมาะสมออกจากการศึกษาแนวทางแล้วอ้างอิง พร้อมเชื่อมโยงกับระเบียบความซื่อสัตย์ของหลักสูตรที่ผู้สอนเตรียม
  3. สาธิตขั้นตอนการพัฒนาโค้ดด้วยความเข้าใจของตนเอง คือศึกษาแนวทาง เขียนใหม่ด้วยคำของตน และอธิบายการทำงานได้ทุกบรรทัด โดยใช้โปรแกรมนับสระเป็นตัวอย่างที่ต่อยอดจากการวนอักขระในบทที่ 8
  4. อธิบายการอ้างอิงแหล่งที่มาและการแจ้งการใช้เครื่องมือช่วยอย่างโปร่งใส ทั้งเว็บ ตัวอย่างโค้ด และเครื่องมือ AI ด้วยการเขียนคอมเมนต์ระบุแนวทางและแหล่งที่ศึกษา
  5. มอบหมายให้ลงมือปฏิบัติตามใบงาน ทั้งการพัฒนาโปรแกรมด้วยความเข้าใจและการวิเคราะห์สถานการณ์จริยธรรม โดยกำหนดจุดตรวจระหว่างทางเพื่อให้ข้อมูลป้อนกลับทันที

สื่อการเรียนการสอน

  • เครื่องคอมพิวเตอร์ที่เข้าถึงแพลตฟอร์มการเรียนของรายวิชาสำหรับเขียน คอมไพล์ และรันโปรแกรมภาษา C (มาตรฐาน C11) บนเว็บ
  • เอกสารประกอบบทที่ 14 และสไลด์สรุปหลักจริยธรรมทางวิชาการ การพัฒนาด้วยความเข้าใจ และการอ้างอิง
  • ไฟล์โปรแกรมตัวอย่าง ch14_vowels.c และชุดสถานการณ์กรณีศึกษาสำหรับ Lab B
  • ระเบียบและแนวปฏิบัติด้านความซื่อสัตย์ของมหาวิทยาลัยและหลักสูตร (ผู้สอนเตรียม)

การวัดผลและการประเมินผล

กำหนดส่ง: งานข้อ 1–3 ภายใน 23:59 น. ของวันก่อนวันปฏิบัติการในสัปดาห์ที่ 15 ส่วนชุดฝึกท้ายบทและแบบฝึกหัดวัดความเข้าใจของบทนี้ ภายใน 23:59 น. ของวันก่อนวันบรรยายในสัปดาห์ที่ 15 ดูวันที่จริงของตอนเรียนได้ในห้องเรียนออนไลน์ (มติผู้สอน 28 ต.ค. 2569)

ข้องานหลักฐานผลลัพธ์CLO
1วิเคราะห์ชุดสถานการณ์ว่าการกระทำใดเหมาะสมหรือไม่เหมาะสมด้านความซื่อสัตย์ พร้อมเหตุผลและแนวทางที่ถูกต้องเอกสารวิเคราะห์สถานการณ์LLO14.1CLO4
2ศึกษาแนวทางโปรแกรมหนึ่ง แล้วเขียนใหม่ด้วยความเข้าใจของตนเอง พร้อมคอมเมนต์อธิบายการทำงานไฟล์ซอร์สโค้ด + ผลการรันLLO14.2CLO4
3ระบุแหล่งที่มาและเครื่องมือช่วย (รวมถึง AI) ที่ใช้ในงานของตนอย่างโปร่งใสคอมเมนต์อ้างอิงในไฟล์ + เอกสารวิเคราะห์LLO14.3CLO4

หลักฐานและคะแนนใบงาน C14-WS01 (30 คะแนน)

งานข้อ 1–3 ให้คะแนนแยกกันตามหลักฐานที่มี แม้โปรแกรมยังคอมไพล์ไม่ผ่าน ก็ตรวจคำอธิบายและการอ้างอิงได้ ไม่ใช้ข้อใดเป็นด่านปิดการให้คะแนนอีกข้อ

งานผลลัพธ์คะแนนเต็ม
1 วิเคราะห์สถานการณ์LLO14.110
2 พัฒนาและอธิบายโค้ดLLO14.210
3 บันทึกที่มาและความช่วยเหลือLLO14.310

รูบริก LLO14.1: วิเคราะห์สถานการณ์ (0–10)

ใช้บัตร A–F ในบทนี้ ให้คะแนนรายองค์ประกอบแล้วรวม ไม่ให้คะแนนจากการกล่าวโทษหรือความเห็นว่าบุคคลใดเป็นคนดีหรือไม่ดี

องค์ประกอบวิธีให้คะแนนจากหลักฐานเต็ม
จำแนกตามข้อเท็จจริงและข้ออนุญาตA–F ข้อละ 0.5 เมื่อแยกได้ถูกต้อง รวมถึงระบุว่ายังตัดสินไม่ได้เมื่อข้อมูลไม่พอ3
เหตุผลที่ตรวจสอบได้A–F ข้อละ 0.5 เมื่อยกข้อเท็จจริงหรือข้ออนุญาตรองรับ ไม่เติมข้อสันนิษฐานเป็นข้อเท็จจริง3
แนวทางดำเนินการข้อละ 1 สำหรับการตรวจข้ออนุญาตเพิ่ม การแก้ไข/อ้างอิง และการขอคำชี้แจงอย่างเป็นธรรม3
สรุปข้อจำกัด1 เมื่อแยกสิ่งที่รู้กับสิ่งที่ยังต้องตรวจได้; 0.5 เมื่อระบุได้บางส่วน; 0 เมื่อไม่มี1

รูบริก LLO14.2: พัฒนาและอธิบายโค้ด (0–10)

องค์ประกอบวิธีให้คะแนนจากหลักฐานเต็ม
วิธีคิดก่อนโค้ดinput/output ตัวนับ เงื่อนไขหยุด และการตรวจสระ ข้อละ 0.52
ผลงานและผลทดสอบคอมไพล์ได้ 1; นับตัวเล็ก/ใหญ่ได้ 1; ตรวจสตริงว่างและอักขระที่ไม่ใช่สระได้อย่างละ 0.53
อธิบายการทำงานไล่ค่าได้ตรงโค้ด 1; อธิบายลูป/เงื่อนไขได้ 1; อธิบายผลคืนและข้อจำกัดได้ 1 ให้ 0.5 เมื่อถูกบางส่วน3
ปรับแก้อย่างมีเหตุผลระบุจุดที่แก้หรือเสนอเปลี่ยนกรณีทดสอบ 1; คาดผลและเทียบหลักฐานหลังปรับ 1 ให้ 0.5 เมื่อครบเพียงบางส่วน2

รูบริก LLO14.3: อ้างอิงและรายงานความช่วยเหลือ (0–10)

องค์ประกอบวิธีให้คะแนนจากหลักฐานเต็ม
ระบุที่มาให้ตรวจตามได้แหล่ง/ผู้จัดทำ 1; ชื่อหรือหัวข้อ 1; URL หรือบท/หน้า/รุ่น 1 ให้ 0.5 เมื่อข้อมูลนั้นมีแต่ยังตามได้ไม่ชัด3
แยกบทบาทความช่วยเหลือระบุส่วนที่รับความช่วยเหลือ 1; อธิบายบทบาทเว็บ/บุคคล/AI ตามที่ใช้จริง 1; แยกส่วนที่ปรับเอง 1 ให้ 0.5 เมื่อชัดบางส่วน3
ความสอดคล้องกับงานเชื่อมบันทึกกับโค้ดหรือคำตอบที่ส่ง 1; อธิบายวิธีตรวจความถูกต้องของสิ่งที่นำมาใช้ 1 ให้ 0.5 เมื่อมีหลักฐานบางส่วน2
รายงานขอบเขตตามจริงระบุสิ่งที่ทดสอบแล้ว 1; แยกสิ่งที่ยังไม่ตรวจหรือข้อจำกัด 1 ให้ 0.5 เมื่อชัดบางส่วน2

ทุกองค์ประกอบให้ 0 เมื่อไม่มีหลักฐานรองรับ ใช้ครึ่งคะแนนตามที่ระบุเท่านั้น หากไม่ใช้แหล่งภายนอกหรือ AI ให้บอกขอบเขตงานและวิธีพัฒนาของตนตามจริง ใช้หลักฐานนั้นประเมินได้เต็ม ไม่บังคับให้ใช้เครื่องมือ

ตรวจจากชิ้นงาน คำอธิบาย ผลทดสอบ และบันทึกที่ผู้เรียนจัดทำเฉพาะงานนี้ ไม่เรียกดูบทสนทนา AI ส่วนตัว ประวัติการกดแป้นพิมพ์ หรือบัญชีส่วนตัว ไม่ใช้ความคล้ายของโค้ดหรือการพูดติดขัดเพียงอย่างเดียวตัดสินความซื่อสัตย์

คะแนนสะท้อนหลักฐานการเรียนรู้ ไม่ใช่คำตัดสินคุณธรรม เมื่อหลักฐานไม่พอ ให้ระบุส่วนที่ขาดและให้ผู้เรียนชี้แจงด้วยข้อเขียนหรือวาจาโดยใช้คำถามและเกณฑ์เดียวกัน

คะแนนหมวดความซื่อสัตย์ = คะแนน C14-WS01 / 30 × 5 โดยแต่ละ LLO มีคะแนนเต็ม 10 ไม่มีด่านผ่าน/ไม่ผ่าน และไม่เพิ่มคะแนนซ้ำในหมวดใบงานบทที่ 1–13

CLO4 สรุปผลแบบถ่วงน้ำหนัก เป้าหมาย 60% เพื่อสะท้อนผลการเรียนรู้เท่านั้น ไม่เป็นเงื่อนไขผ่านรายวิชา และไม่ทำให้ได้เกรด I โดยอัตโนมัติ

ใช้รูบริกนี้กับงานที่ประกาศเกณฑ์ก่อนส่ง ไม่แปลงผลผ่าน/ไม่ผ่านเดิมเป็นคะแนนย้อนหลังโดยอัตโนมัติ ผู้สอนต้องตรวจหลักฐานและบันทึกคะแนนตามเกณฑ์ที่ประกาศ

ดูคะแนนและข้อเสนอแนะได้ที่หน้า “คะแนนของฉัน” การแก้ไขและส่งช้าใช้ประกาศกำหนดส่งของรายวิชาที่แจ้งก่อนส่งงาน ไม่ใช้สิทธิส่งแก้จนวันส่งเกรดแบบด่านผ่าน/ไม่ผ่านเดิม

เฉลยจะเปิดในชั้นเรียนหลังทุกคนทำเสร็จ

บทนำ

การพัฒนาโปรแกรมที่ดีไม่ได้วัดจากการที่โปรแกรมทำงานถูกต้องเพียงอย่างเดียว แต่ยังขึ้นกับว่าผลงานนั้นเกิดจากความเข้าใจและความซื่อสัตย์ของผู้พัฒนาเองหรือไม่ จริยธรรมทางวิชาการ (academic integrity) คือการทำงานด้วยความซื่อสัตย์ ไม่นำผลงานของผู้อื่นมาเป็นของตน และให้เครดิตแก่แหล่งที่มา บทที่ 8 ได้แนะนำการจัดการสตริงและการวนอักขระ และบทที่ 13 ได้แนะนำมาตรฐานการเขียนโค้ดและการใส่คอมเมนต์ บทนี้นำทั้งสองเรื่องมาใช้แสดงให้เห็นว่าการศึกษาแนวทางจากแหล่งอื่นแล้วพัฒนาเป็นโค้ดของตนเองพร้อมอ้างอิงนั้นต่างจากการคัดลอกโดยไม่ศึกษาอย่างไร ตั้งแต่หลักจริยธรรม การพัฒนาด้วยความเข้าใจของตนเอง การอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วย ไปจนถึงกรณีศึกษาและแนวปฏิบัติที่ดี

หลักความซื่อสัตย์และการพัฒนาด้วยความเข้าใจของตนเองในบทนี้เป็นพื้นฐานของบทที่ตามมา โครงงานบูรณาการในบทที่ 15 ต้องส่งมอบผลงานที่พัฒนาด้วยความเข้าใจของตนเองและอ้างอิงแหล่งที่มาอย่างโปร่งใส บทนี้จึงเป็นการเตรียมความพร้อมทั้งด้านแนวคิดและการปฏิบัติด้านความซื่อสัตย์

สิ่งที่ได้จากบทนี้ใช้ต่อในบท
หลักจริยธรรมทางวิชาการและการจำแนกการคัดลอกที่ไม่เหมาะสมบท 15 (โครงงานบูรณาการ)
การพัฒนาโค้ดด้วยความเข้าใจของตนเองบท 15 (โครงงานบูรณาการ)
การอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วย (รวมถึง AI) อย่างโปร่งใสบท 15 (โครงงานบูรณาการ)

ความรู้พื้นฐาน เครื่องมือ และรุ่นซอฟต์แวร์

บทนี้ต้องใช้คอมไพเลอร์ภาษา C และโปรแกรมแก้ไขข้อความหรือ IDE และต้องมีความรู้เรื่องการวนอักขระในสตริงจากบทที่ 8 รวมถึงมาตรฐานการเขียนโค้ดและการใส่คอมเมนต์จากบทที่ 13 ตารางด้านล่างแสดงรุ่นที่ใช้ตรวจชุดสอนฉบับนี้ แยกจากบันทึกตัวอย่างเดิมซึ่งระบุ GCC 13.3.0

เครื่องมือรุ่นที่ทดสอบหน้าที่
คอมไพเลอร์ GCC6.3.0 (MinGW-w64 Windows), 12.2.0 (Debian Linux)ตรวจโปรแกรมตัวอย่างของชุดสอนฉบับนี้
มาตรฐานภาษาC11 (-std=c11)กำหนดไวยากรณ์ภาษา C ที่ใช้อ้างอิง
⚠️Warning

บันทึกตัวอย่างเดิมระบุ GCC 13.3.0 บน Linux ส่วนชุดสอนฉบับนี้ตรวจซ้ำด้วยเครื่องมือตามตาราง ไม่อ้างว่าได้รันรุ่นเดิมซ้ำ หากใช้คอมไพเลอร์หรือระบบปฏิบัติการอื่น ผลการแสดงข้อความภาษาไทยอาจต่างกันเล็กน้อย แต่ซอร์สโค้ดภาษา C มาตรฐานใช้ได้เหมือนกัน ส่วนระเบียบและแนวปฏิบัติด้านความซื่อสัตย์ที่อ้างถึงเป็นหลักการทั่วไป ระเบียบและบทลงโทษเฉพาะของมหาวิทยาลัยและหลักสูตรต้องให้ผู้สอนเติมแหล่งอ้างอิงจริง

วิธีใช้ชุดสอนบทที่ 14

เชื่อมจาก บทที่ 13 มาตรฐานโค้ดและการจัดการเวอร์ชัน ว่าไฟล์ที่อ่านง่ายและมีประวัติยังต้องบอกที่มาอย่างตรงไปตรงมา บทนี้ฝึกแยกสิ่งที่รู้ ข้ออนุญาต และหลักฐานของสิ่งที่รายงาน

เริ่มจากอ่านเงื่อนไขงาน แล้ววิเคราะห์กรณีสมมติ อธิบายโปรแกรมของตน และทำบันทึกที่มาควบคู่กับผลตรวจ งานหลักยังเป็น Lab A–B และ LLO14.1–14.3 ไม่เพิ่มข้อบังคับใช้ AI หรือเผยแพร่บทสนทนาออนไลน์

ใบงานเป็นตารางสำหรับคัดลงสมุดหรือเอกสาร เว็บไซต์ไม่ได้รับคำตอบหรือบันทึกการใช้เครื่องมือให้อัตโนมัติ ใช้เฉพาะชื่อและข้อมูลสมมติในการอภิปราย ไม่ใช้เรื่องของเพื่อนที่ระบุตัวได้เป็นกรณีสาธารณะ

ใบงาน 1: อ่านข้อตกลงของงานก่อนตัดสิน

ความซื่อสัตย์เกี่ยวข้องกับทั้งความจริงของที่มาและข้ออนุญาตของงาน ถ้าโจทย์ห้ามรับร่างคำตอบ การเขียนอ้างอิงภายหลังไม่ได้เปลี่ยนให้ร่างนั้นได้รับอนุญาต และการอธิบายโค้ดได้ก็ไม่ลบข้อกำหนดที่ห้ามไว้

ประเด็นที่ต้องตรวจประกาศหรือโจทย์ฉบับใดข้อความที่เกี่ยวข้องสิ่งที่อนุญาตสิ่งที่ยังต้องถาม
งานเดี่ยวหรืองานกลุ่ม
ปรึกษาแนวคิดได้แค่ไหน
ใช้ตัวอย่างโค้ดได้หรือไม่
ใช้ AI ช่วยบทบาทใดได้บ้าง
ต้องเปิดเผยความช่วยเหลือแบบใด

เติมจากประกาศจริงพร้อมวันที่หรือรุ่นเอกสาร ไม่เติมจากความเคยชินของวิชาอื่น ถ้าไม่มีข้อความชัด ให้ระบุว่า “ยังไม่พบข้อกำหนด” และถามผู้สอนก่อนใช้ความช่วยเหลือส่วนนั้น ไม่สรุปว่าไม่มีประกาศเท่ากับอนุญาตทุกอย่าง

ACM Code of Ethics ข้อ 1.3 เน้นการรายงานอย่างซื่อสัตย์และไม่บิดเบือนนโยบายองค์กร ใช้เป็นกรอบอภิปราย ไม่ใช้แทนประกาศหรือกระบวนการพิจารณาของมหาวิทยาลัย

14.1 จริยธรรมทางวิชาการและความซื่อสัตย์

ระดับที่ 1: จริยธรรมทางวิชาการ (academic integrity) คือการทำงานด้วยความซื่อสัตย์ ไม่นำผลงานของผู้อื่นมาเป็นของตน และให้เครดิตแก่แหล่งที่มาที่ใช้ ความซื่อสัตย์ในการพัฒนาโค้ดจึงหมายถึงการที่ผลงานสะท้อนความเข้าใจและความพยายามของผู้พัฒนาเองอย่างแท้จริง

ระดับที่ 2: การคัดลอกโค้ดจากแหล่งอื่น เช่น จากเพื่อน จากเว็บ หรือจากตัวอย่างสำเร็จรูป โดยไม่ศึกษาและไม่อ้างอิง แล้วนำมาส่งเป็นผลงานของตน ถือว่าไม่เหมาะสม เพราะผลงานไม่ได้สะท้อนความเข้าใจของผู้ส่ง สิ่งนี้ต่างจากการศึกษาแนวทางจากแหล่งอื่นแล้วพัฒนาเป็นโค้ดของตนเองพร้อมระบุแหล่งที่ศึกษา ซึ่งอาจเป็นการเรียนรู้ที่ซื่อสัตย์เมื่อทำตามข้ออนุญาตของงานและเงื่อนไขแหล่งด้วย หลักสำคัญคือการอ้างอิงที่ถูกต้องและการลงมือทำความเข้าใจด้วยตนเอง ไม่ใช่การนำผลงานสำเร็จของผู้อื่นมาแอบอ้าง ทั้งนี้ระเบียบและบทลงโทษที่เป็นทางการให้อ้างอิงตามระเบียบความซื่อสัตย์ของมหาวิทยาลัยและหลักสูตรที่ผู้สอนจัดเตรียม

ระดับที่ 3: ในเชิงวิชาชีพ ความซื่อสัตย์ส่งผลต่อความน่าเชื่อถือของผู้พัฒนาและผลงานโดยตรง ผู้ที่ส่งงานซึ่งไม่ได้เข้าใจจริงจะไม่สามารถดูแล แก้ไข หรือต่อยอดผลงานนั้นได้เมื่อเกิดปัญหา และเมื่อทำงานร่วมกับผู้อื่น ความไว้วางใจจะลดลงหากพบว่าผลงานไม่ได้มาจากความเข้าใจของตน การรักษาความซื่อสัตย์ตั้งแต่ขั้นเรียนรู้จึงเป็นรากฐานของความเป็นมืออาชีพในระยะยาว

คำถามตรวจความเข้าใจ 14.1: การคัดลอกโค้ดจากเพื่อนโดยไม่เข้าใจ ต่างจากการศึกษาตัวอย่างแล้วเขียนใหม่พร้อมอ้างอิงอย่างไร

กิจกรรมบัตรสถานการณ์: แยกข้อเท็จจริงจากข้อสันนิษฐาน

อ่านบัตรสมมติทีละใบ ระบุสิ่งที่เกิดขึ้นจริง สิ่งที่ยังขาด และขั้นถัดไปก่อนตัดสิน ให้ใช้คำว่า “ต้องตรวจข้ออนุญาตเพิ่ม” เมื่อข้อมูลไม่พอ แทนการบังคับเลือกอนุญาตหรือผิดทันที

บัตรข้อเท็จจริงที่กำหนดคำถามสำหรับผู้เรียน
Aโจทย์ให้ปรึกษาแนวคิดได้ ผู้เรียนคุยเรื่องลูปแล้วต่างคนเขียนและบันทึกบทบาทหลักฐานใดแสดงว่าทำตามขอบเขต
Bโจทย์ให้ทำเอง ผู้เรียนรับไฟล์เพื่อน เปลี่ยนชื่อ และแจ้งว่าเขียนทั้งหมดเองข้อความใดไม่ตรงกับที่มา
Cอ่านเว็บแล้วเขียนใหม่ มีอ้างอิง แต่ยังไม่ทราบว่างานอนุญาตให้ใช้ตัวอย่างหรือไม่ข้อมูลใดต้องตรวจเพิ่ม
Dงานอนุญาต AI เสนอกรณีทดสอบ ผู้เรียนใช้ AI ร่างทั้งฟังก์ชันบทบาทที่ใช้ตรงขอบเขตหรือไม่
Eผู้เรียนรันสองกรณีแล้วเขียนว่าทุกอินพุตผ่านหลักฐานรองรับคำใดได้จริง
Fโค้ดสองฉบับคล้ายกัน ผู้ตรวจยังไม่ได้รับคำอธิบายหรือที่มาควรตรวจอะไรตามกระบวนการก่อนสรุป

แบ่งกลุ่มให้แต่ละคนเป็นผู้พัฒนา ผู้ตรวจ และผู้ตั้งคำถาม ผลัดกันยกเหตุผลจากข้อเท็จจริงที่กำหนด ห้ามเพิ่มข้อเท็จจริงที่ช่วยคำตอบของตนโดยไม่ประกาศว่าเป็นสมมติฐาน

14.2 การพัฒนาโค้ดด้วยความเข้าใจของตนเอง

ระดับที่ 1: การพัฒนาโค้ดด้วยความเข้าใจของตนเองคือการเข้าใจหลักการและเหตุผลของโค้ดก่อนเขียน ไม่ใช่การจดจำหรือคัดลอกรูปแบบมาใช้โดยไม่ทราบว่าแต่ละส่วนทำงานอย่างไร

ระดับที่ 2: ขั้นตอนที่ซื่อสัตย์ประกอบด้วยสามขั้น ขั้นแรกคือศึกษาแนวทางจากแหล่งที่น่าเชื่อถือ เช่น เอกสารประกอบหรือตัวอย่างในบทก่อน เพื่อเข้าใจหลักการ ขั้นที่สองคือเขียนโค้ดใหม่ด้วยคำและโครงสร้างของตนเอง แทนการคัดลอกบรรทัดต่อบรรทัด และขั้นที่สามคืออธิบายการทำงานของโค้ดได้ทุกบรรทัด หากมีส่วนใดที่อธิบายไม่ได้ แสดงว่ายังไม่เข้าใจจริงและควรกลับไปศึกษาเพิ่ม ตัวอย่างในบทนี้คือการศึกษาหลักการวนอักขระในสตริงจากบทที่ 8 แล้วพัฒนาโปรแกรมนับสระขึ้นเองด้วยความเข้าใจ

ระดับที่ 3: ประโยชน์ของการพัฒนาด้วยความเข้าใจของตนเองคือทำให้แก้ไข ต่อยอด และรับผิดชอบผลงานได้จริง เมื่อโปรแกรมมีข้อผิดพลาดหรือต้องเพิ่มความสามารถใหม่ ผู้ที่เข้าใจโค้ดของตนจะทราบว่าต้องแก้ส่วนใดและแก้อย่างไร ต่างจากผู้ที่คัดลอกมาโดยไม่เข้าใจซึ่งจะติดขัดทันทีที่ต้องเปลี่ยนแปลง ความเข้าใจจึงเป็นเงื่อนไขของทั้งความซื่อสัตย์และคุณภาพของผลงานตามเจตนาของ CLO4

คำถามตรวจความเข้าใจ 14.2: เหตุใดการเข้าใจโค้ดของตนเองจึงสำคัญต่อการแก้ไขและต่อยอดผลงาน

ใบงาน 2: อธิบายวิธีคิดก่อนดูบรรทัดโค้ด

สำหรับ Lab A กำหนดให้ “สระ” หมายถึงตัวอักษรอังกฤษ a, e, i, o, u ทั้งตัวพิมพ์เล็กและใหญ่ ไม่ใช่การแยกพยางค์ เสียงอ่าน หรือสระทุกภาษา ข้อความต้องเป็นสตริง C ที่มีอักขระปิดท้ายและอ่านได้ครบ

คำถามที่ต้องตอบด้วยคำของตนคำอธิบายหลักฐานหรือกรณีตรวจ
ข้อมูลเข้าและผลคืนคืออะไร
เริ่มตัวนับที่เท่าไร เพราะอะไร
เหตุใดจึงหยุดเมื่อพบอักขระปิดท้าย
ตัวพิมพ์ใหญ่ถูกนับตรงไหน
ช่องว่างและตัวเลขมีผลอย่างไร
ขอบเขตใดยังไม่รองรับ

ปิดตัวอย่างแล้วเขียนขั้นตอนด้วยภาษาธรรมชาติ จากนั้นเขียนโค้ดตามขั้นตอน ตรวจผล และอธิบายจุดที่แก้ ไม่ใช้เพียงการจำบรรทัดเป็นหลักฐานทั้งหมด และไม่เขียนว่า “ไม่เคยใช้ความช่วยเหลือ” ถ้าเคยใช้จริง

หากอธิบายบางส่วนยังไม่ได้ ให้ระบุจุดที่ต้องทบทวนและกลับไปศึกษา การพูดติดขัดหรือโค้ดคล้ายตัวอย่างเพียงอย่างเดียวไม่เพียงพอให้สรุปที่มาของผลงาน ต้องพิจารณาหลักฐานและกระบวนการของรายวิชาร่วมกัน

ตัวอย่างประกอบ: ไล่การนับแล้วเทียบกับคำอธิบาย

ไฟล์ vowel_trace.c แสดงการตัดสินใจทีละตำแหน่งของข้อความสมมติ Ai x ก่อนรันให้คาดค่าตัวนับหลังแต่ละตำแหน่ง ตัวอย่างนี้ช่วยตรวจความเข้าใจ ไม่ใช้ผลจากการคัดลอกแล้วรันเป็นหลักฐานว่าเขียนเอง

C
/* vowel_trace.c : chapter 14 demonstration, not a claim of student authorship */
#include <stdio.h>
 
int is_english_vowel(char ch)
{
    return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
           ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
 
int main(void)
{
    const char text[] = "Ai x";
    int count = 0;
 
    for (int i = 0; text[i] != '\0'; ++i) {
        const int matched = is_english_vowel(text[i]);
        count += matched;
        printf("index=%d char=[%c] matched=%d count=%d\n",
               i, text[i], matched, count);
    }
    printf("vowels=%d\n", count);
    return 0;
}
ตำแหน่งอักขระคาดว่าจะนับหรือไม่ตัวนับหลังรอบผลที่รันจริง
0A
1i
2ช่องว่าง
3x

อธิบายว่าฟังก์ชันคืน 0 หรือ 1 ได้อย่างไร และเหตุใดจึงบวกค่าที่คืนได้ ทดลองเปลี่ยนข้อความเป็น y, AEIOU และสตริงว่างในสำเนาแยก แล้วเขียนว่าการเปลี่ยนนี้ตรวจความเข้าใจส่วนใด

ตัวอย่างประกอบ: รายงานผลตรวจตามที่รันได้จริง

ไฟล์ vowel_evidence.c รวมกรณีที่กำหนดคำตอบไว้ก่อน เทียบผลจริงแล้วคืนสถานะไม่เป็นศูนย์เมื่อผิด ตัวอย่างตรวจเฉพาะตัวอักษรอังกฤษที่ระบุ ไม่อ้างว่ารองรับภาษาไทยหรือ Unicode ทุกแบบ

C
/* vowel_evidence.c : chapter example; record the sources actually used */
#include <stdio.h>
 
int is_english_vowel(char ch)
{
    return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
           ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
 
int count_english_vowels(const char text[])
{
    int count = 0;
    for (int i = 0; text[i] != '\0'; ++i) {
        count += is_english_vowel(text[i]);
    }
    return count;
}
 
struct VowelCase {
    const char *text;
    int expected;
};
 
int main(void)
{
    const struct VowelCase cases[] = {
        {"", 0},
        {"Education", 5},
        {"AEIOU", 5},
        {"aeiou", 5},
        {"rhythm", 0},
        {"A1 e!", 2},
        {"Queue", 4},
        {"12345", 0}
    };
    const int case_count = (int)(sizeof cases / sizeof cases[0]);
    int failed_count = 0;
 
    for (int i = 0; i < case_count; ++i) {
        const int actual = count_english_vowels(cases[i].text);
        const int ok = actual == cases[i].expected;
        printf("case=%d expected=%d actual=%d %s\n",
               i + 1, cases[i].expected, actual, ok ? "PASS" : "FAIL");
        if (!ok) {
            ++failed_count;
        }
    }
    printf("failed=%d\n", failed_count);
    return failed_count == 0 ? 0 : 1;
}

คอมไพล์เป็นไฟล์แยกเพื่อไม่สับสนกับ Lab A เดิม และบันทึกรุ่นเครื่องมือ ข้อมูลที่ใช้ ผลจริง และข้อจำกัด ก่อนคัดข้อความ PASS ไปอ้างต้องยืนยันว่าตรงกับซอร์สฉบับที่ส่ง

BASH
gcc -std=c11 -Wall -Wextra -Wpedantic vowel_trace.c -o vowel_trace
gcc -std=c11 -Wall -Wextra -Wpedantic vowel_evidence.c -o vowel_evidence
./vowel_trace
./vowel_evidence

คำสั่งรันนี้ใช้รูปแบบเชลล์ Linux/macOS หากใช้ PowerShell กับ GCC ให้สร้างชื่อที่ลงท้าย .exe แล้วรัน .\vowel_trace.exe และ .\vowel_evidence.exe ตามไฟล์ที่สร้าง

การตรวจแปดกรณีผ่านสนับสนุนคำว่า “ผ่านแปดกรณีที่ระบุ” ไม่ใช่ “ถูกทุกกรณี” ถ้าฉบับใดยังไม่รันให้บันทึกว่ายังไม่รัน การแก้ข้อมูลทดสอบให้เข้ากับบั๊กโดยไม่มีเหตุผลจากโจทย์ไม่ใช่การยืนยันความถูกต้อง

14.3 การอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วย

ระดับที่ 1: การอ้างอิงคือการให้เครดิตแก่แหล่งที่ใช้ศึกษาหรือเครื่องมือที่ช่วยในการพัฒนา เพื่อให้ผู้อ่านทราบว่าส่วนใดของผลงานได้แนวทางมาจากที่ใด

ระดับที่ 2: แนวปฏิบัติที่ซื่อสัตย์คือการเขียนคอมเมนต์ระบุแนวทางหรือแหล่งที่ศึกษาไว้ในโค้ด เช่น ระบุว่าศึกษาหลักการจากบทใดหรือเอกสารใด และการแจ้งการใช้เครื่องมือช่วยอย่างโปร่งใส ไม่ว่าจะเป็นเว็บ ตัวอย่างโค้ด หรือเครื่องมือปัญญาประดิษฐ์ (AI) การแจ้งควรระบุว่าใช้เครื่องมือใด ใช้ในส่วนใด และผู้พัฒนาได้ตรวจสอบและเข้าใจผลลัพธ์นั้นด้วยตนเองหรือไม่ นโยบายการใช้เครื่องมือ AI ที่เป็นทางการให้อ้างอิงตามระเบียบของมหาวิทยาลัยและหลักสูตรที่ผู้สอนจัดเตรียม

ระดับที่ 3: ความโปร่งใสเป็นส่วนหนึ่งของความซื่อสัตย์ทางวิชาการ การอ้างอิงไม่ได้ทำให้การคัดลอกกลายเป็นเรื่องที่ยอมรับได้ในทุกกรณี แต่เป็นการแสดงที่มาของแนวทางอย่างตรงไปตรงมา ผู้พัฒนายังต้องเข้าใจและรับผิดชอบโค้ดที่ส่งเสมอ แม้จะได้แนวทางมาจากแหล่งอื่นหรือใช้เครื่องมือช่วย การแจ้งที่มาอย่างครบถ้วนจึงช่วยแยกการเรียนรู้ที่ซื่อสัตย์ออกจากการแอบอ้างผลงาน

คำถามตรวจความเข้าใจ 14.3: ควรบันทึกการใช้เครื่องมือช่วย เช่น เว็บหรือ AI อย่างไรจึงเรียกว่าซื่อสัตย์และโปร่งใส

ใบงาน 3: บันทึกที่มาให้ผู้อ่านตามต่อได้

แยกแหล่งความรู้ที่อ่าน ส่วนโค้ดที่นำมาใช้ และข้อเสนอจากเครื่องมือ ไม่ใส่ชื่อผู้เขียนหรือวันที่ที่หาไม่พบ ถ้าไม่มีวันที่ให้บอกว่าไม่ปรากฏและระบุวันที่เข้าถึงตามรูปแบบที่ผู้สอนใช้

แหล่งหรือเครื่องมือชื่อหน้าและที่อยู่ใช้กับส่วนใดศึกษาแนวคิด/นำโค้ดมา/รับข้อเสนอสิ่งที่ตรวจเอง
เอกสารบทเรียน
เอกสารฟังก์ชันภาษา C
ตัวอย่างโค้ดภายนอก ถ้ามี
ความช่วยเหลืออื่นที่ใช้จริง

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

ACM ข้อ 1.5 เน้นการให้เครดิตและเคารพเงื่อนไขผลงาน ใช้เป็นหลักคิดว่าต้องตรวจทั้งที่มาและข้ออนุญาต การใส่ลิงก์อ้างอิงเพียงอย่างเดียวไม่ตอบเงื่อนไขการใช้ของทุกแหล่ง

ใบงาน 4: เปิดเผยบทบาท AI ตามการใช้จริง

ใช้ตารางนี้เมื่อข้อกำหนดงานอนุญาตบทบาทนั้นก่อน หากไม่ได้ใช้ AI ให้ระบุว่าไม่ได้ใช้ในงานฉบับนี้ ไม่เติมชื่อเครื่องมือเพื่อให้ดูค้นคว้ามากขึ้น และไม่ใช้ข้อความตัวอย่างเป็นรายงานเหตุการณ์ที่ไม่ได้เกิด

รายการบันทึกจากสิ่งที่ใช้จริง
ชื่อเครื่องมือและวันที่ใช้
บทบาทที่โจทย์อนุญาต
สิ่งที่ถามหรือขอให้ช่วยโดยสรุป
ข้อเสนอที่นำมาใช้กับส่วนใด
สิ่งที่ไม่รับหรือแก้ พร้อมเหตุผล
วิธีตรวจและกรณีที่รันเอง
จุดที่ยังไม่แน่ใจ

การขอให้อธิบาย error, เสนอกรณีทดสอบ และร่างฟังก์ชันเป็นคนละบทบาท ต้องแจ้งตามที่ทำจริง ถ้าข้อเสนอผิด ให้บันทึกว่าผิดตรงใดและตรวจอย่างไร ไม่รายงานเพียงว่าเครื่องมือบอกว่าทำงานได้

แนวทาง UNESCO เรื่อง GenAI ในการศึกษาและวิจัย เสนอการใช้ที่ให้มนุษย์เป็นศูนย์กลางและคุ้มครองข้อมูล ใช้ประกอบการอภิปราย ไม่ใช่นโยบายอนุญาต AI ของรายวิชานี้

14.4 กรณีศึกษาและแนวปฏิบัติ

ระดับที่ 1: ในการเรียนและการทำงานจริงมักพบสถานการณ์ที่ต้องตัดสินว่าการกระทำใดเหมาะสมหรือไม่เหมาะสมด้านความซื่อสัตย์ การแยกแยะได้อย่างถูกต้องช่วยให้ปฏิบัติตนได้อย่างมั่นใจ

ระดับที่ 2: สถานการณ์ที่พบบ่อยมีหลายลักษณะ เช่น การนำโค้ดของเพื่อนมาส่งโดยไม่เข้าใจ ซึ่งไม่เหมาะสม การศึกษาตัวอย่างจากเว็บแล้วเขียนใหม่ด้วยความเข้าใจพร้อมระบุแหล่งที่ศึกษา ซึ่งเหมาะสมเมื่ออยู่ในขอบเขตที่งานอนุญาตและทำตามเงื่อนไขแหล่ง และการใช้เครื่องมือ AI ช่วยร่างโค้ดแล้วนำมาตรวจสอบ ทำความเข้าใจ และแจ้งการใช้อย่างโปร่งใส ซึ่งเหมาะสมเมื่อปฏิบัติตามนโยบายของหลักสูตร การร่วมมือกันเรียนรู้ เช่น การอภิปรายแนวทางร่วมกัน ต่างจากการคัดลอกคำตอบของกันและกันมาส่ง

ระดับที่ 3: แนวปฏิบัติที่ดีสำหรับงานเดี่ยวคือพัฒนาผลงานด้วยความเข้าใจของตนเองและระบุแหล่งที่ศึกษา ส่วนงานกลุ่มคือแบ่งงานอย่างชัดเจน ร่วมกันเข้าใจทุกส่วน และระบุบทบาทของสมาชิกอย่างตรงไปตรงมา จุดที่มักเข้าใจผิดคือการคิดว่าการอ้างอิงทำให้คัดลอกได้ทุกกรณี และการสับสนระหว่างการร่วมมือเรียนรู้กับการคัดลอกคำตอบ หลักที่ยึดได้คือผลงานต้องสะท้อนความเข้าใจของผู้ส่งและแจ้งที่มาอย่างโปร่งใสเสมอ

คำถามตรวจความเข้าใจ 14.4: การร่วมมือกันเรียนรู้ต่างจากการคัดลอกคำตอบของกันและกันมาส่งอย่างไร

14.5 กรณีศึกษาต่อเนื่อง: ความช่วยเหลือแบบใดและต้องเปิดเผยอะไร

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

หลักอ้างอิงในส่วนขยายนี้คือ ACM Code of Ethics โดยเฉพาะความซื่อสัตย์ การเคารพผลงานผู้อื่น ความเป็นส่วนตัว และคุณภาพงาน เป็นกรอบอภิปรายวิชาชีพ ไม่ใช่ระเบียบลงโทษหรือนโยบาย AI ของมหาวิทยาลัย หากโจทย์รายวิชาระบุข้ออนุญาตไว้ ต้องใช้ข้อกำหนดนั้น และสอบถามผู้สอนเมื่อไม่ชัด

14.5.1 กรณีที่หนึ่ง: อ่านคู่มือแล้วเขียนฟังก์ชันเอง

ผู้เรียนอ่านเอกสารเรื่อง strcmp แล้วเขียนโปรแกรมค้นหารหัสสมมติด้วยตนเอง การเรียนจากเอกสารเป็นกิจกรรมปกติ แต่เมื่ออธิบายแหล่งความรู้ควรระบุว่าศึกษาสัญญาฟังก์ชันจากที่ใด จุดที่ควรอธิบายได้คือเหตุใดตรวจผลเท่าศูนย์ และเหตุใดไม่ใช้ == เปรียบเทียบเนื้อหาสตริง

ถ้าคัดโค้ดตัวอย่างมาบางส่วน ต้องเปิดเผยส่วนที่นำมาใช้และตรวจเงื่อนไขการใช้ของแหล่งนั้น การเพิ่มชื่อแหล่งอ้างอิงไม่ได้เปลี่ยนโค้ดที่คัดมาให้เป็นงานที่คิดเองทั้งหมด และไม่ได้รับรองว่าโจทย์ประเมินอนุญาตให้คัดมาใช้

14.5.2 กรณีที่สอง: เปลี่ยนชื่อตัวแปรของคำตอบจากเพื่อน

ผู้เรียนได้รับคำตอบทั้งโปรแกรมแล้วเปลี่ยน sum เป็น total พร้อมจัดย่อหน้าใหม่ การเปลี่ยนผิวหน้าไม่ได้เปลี่ยนที่มาของวิธีแก้ ถ้าแบบฝึกหัดกำหนดให้ทำเอง การส่งโดยอ้างว่าเป็นงานตนเองยังไม่ตรงกับความจริง

แนวทางที่เหมาะคือหยุดก่อนส่ง เปิดเผยความช่วยเหลือที่ได้รับ และกลับไปอธิบายโจทย์กับเขียนส่วนที่ต้องทำเองตามข้ออนุญาตของผู้สอน ไม่พยายามทำให้เครื่องมือตรวจความคล้ายมองไม่เห็น เป้าหมายการเรียนคืออธิบายและพัฒนาวิธีแก้ได้ ไม่ใช่เพียงทำให้รูปร่างไฟล์ต่าง

14.5.3 กรณีที่สาม: ใช้ AI แล้วบอกว่าผ่านทุกการทดสอบ

หากเครื่องมือเสนอโปรแกรมและกล่าวว่า “ทดสอบแล้ว” ผู้ส่งยังต้องรันและตรวจในบริบทของตนเอง ไม่ควรอ้างผลที่ไม่มีหลักฐาน หากตนรันเพียงสองกรณี ให้บอกสองกรณีที่รันจริงและข้อจำกัดที่เหลือ ไม่แปลงคำกล่าวของเครื่องมือเป็นผลทดลองของตน

เมื่อรายวิชาอนุญาตให้ใช้ AI ควรบันทึกบทบาท เช่น ช่วยอธิบายข้อความคอมไพเลอร์ เสนอกรณีทดสอบ หรือเสนอร่างโค้ด พร้อมระบุสิ่งที่ตรวจและแก้เอง รูปแบบการเปิดเผยให้เป็นไปตามที่ผู้สอนกำหนด การเขียน disclosure ไม่ได้ทำให้การใช้ที่โจทย์ห้ามกลายเป็นอนุญาต

14.6 แยกสิทธิ์ใช้ผลงาน การอ้างอิง และข้ออนุญาตในการประเมิน

สามคำถามนี้เกี่ยวข้องกันแต่ไม่แทนกัน ประการแรกแหล่งผลงานอนุญาตให้นำมาใช้ภายใต้เงื่อนไขใด ประการที่สองผู้ส่งบอกที่มาและส่วนที่นำมาใช้ตรงหรือไม่ ประการที่สามงานประเมินนี้อนุญาตให้ใช้ความช่วยเหลือประเภทนั้นหรือไม่ หากตอบเพียงว่ามีลิงก์อ้างอิง ยังตอบอีกสองคำถามไม่ได้

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

ตารางเป็นกรอบตั้งคำถาม ไม่ใช่คำวินิจฉัยข้อกฎหมายของใบอนุญาตใด หากเจอเงื่อนไขที่ตนไม่เข้าใจ ควรเลือกแหล่งที่มีเงื่อนไขชัดหรือขอคำแนะนำ ไม่แต่งชื่อผู้เขียน วันที่ หรือใบอนุญาตเพื่อทำรายการอ้างอิงให้ดูครบ

14.6.1 ตัวอย่างบันทึกความช่วยเหลือที่มีสาระ

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

หากไม่ใช้เครื่องมือใด ก็ไม่ต้องเติมชื่อเครื่องมือเพื่อให้ดูมีการค้นคว้า และหากยังไม่ทดสอบกรณีใด ให้บอกว่ายังไม่ทดสอบ ความซื่อสัตย์รวมถึงการสื่อสารข้อจำกัดและความไม่แน่ใจอย่างตรงไปตรงมา ไม่ใช่เพียงไม่คัดลอกคำตอบ

14.7 ความเป็นส่วนตัว หลักฐาน และเวิร์กช็อปอภิปราย

14.7.1 อย่าเปลี่ยนข้อมูลผู้เรียนจริงเป็นข้อมูลตัวอย่างโดยพลการ

เมื่อขอความช่วยเหลือเรื่องโปรแกรมคะแนน ใช้ชื่อ Sample-A รหัส 0017 และคะแนนสมมติได้ ไม่จำเป็นต้องส่งรายชื่อนักศึกษาจริงทั้งห้องให้บริการภายนอก การลบชื่อแต่เหลือรหัสที่เชื่อมกลับได้อาจยังไม่ตัดความเสี่ยง ควรลดข้อมูลให้เหลือสิ่งที่ต้องใช้ทำซ้ำปัญหา

ภาพหน้าจอก่อนส่งควรตรวจว่ามีอีเมล โทเคน รหัสผ่าน หรือข้อมูลคนอื่นติดมาหรือไม่ หากพบให้สร้างข้อมูลจำลองและจับภาพใหม่ ไม่แก้ภาพให้แสดงผลการทดสอบที่ไม่เคยเกิด การปกปิดข้อมูลส่วนบุคคลกับการแต่งหลักฐานเป็นคนละเรื่องและต้องรักษาความจริงของผลไว้

14.7.2 เวิร์กช็อปสี่บทบาท

ให้ผู้เรียนผลัดกันเป็นผู้พัฒนา ผู้ตรวจงาน ผู้ให้ความช่วยเหลือ และผู้รับผลกระทบ ใช้สามกรณีข้างต้นตั้งคำถามว่า ข้อเท็จจริงที่รู้คืออะไร ข้อมูลใดยังขาด ใครต้องรับผิดชอบส่วนใด และก่อนส่งควรทำอะไรเพิ่ม หลีกเลี่ยงการตัดสินจากความคล้ายเพียงตัวชี้วัดเดียวโดยยังไม่รับฟังคำอธิบายและหลักฐานตามกระบวนการของรายวิชา

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

งานสุดท้ายให้เลือกโค้ดของตนหนึ่งฟังก์ชัน อธิบายข้อมูลเข้า ขอบเขต ผลคืน และเหตุผลของกรณีทดสอบโดยไม่อ่านคำตอบสำเร็จรูป หากยังอธิบายไม่ได้ ให้ใช้จุดนั้นวางแผนเรียนเพิ่ม การยอมรับช่องว่างความเข้าใจพร้อมแก้ไขเป็นพฤติกรรมการเรียนรู้ที่ควรฝึกก่อนโครงงานบูรณาการ

ใบงาน 5: สร้างข้อมูลจำลองก่อนขอความช่วยเหลือ

สมมติต้องขอให้ช่วยหาบั๊กการค้นหารหัส ใช้รายการที่สร้างขึ้นใหม่ เช่น SAMPLE-A และ SAMPLE-B กับค่าทดลอง ไม่คัดข้อมูลผู้เรียนจริงมาเปลี่ยนแค่ชื่อ แล้วถือว่ากลายเป็นข้อมูลจำลองทันที

สิ่งที่เตรียมส่งจำเป็นต่อการทำซ้ำหรือไม่ข้อมูลจำลองที่ใช้แทนสิ่งที่ตรวจในภาพหรือไฟล์
ชื่อและรหัสจริง
อีเมลหรือข้อความสนทนา
ข้อความ error ที่เกี่ยวข้อง
ซอร์สส่วนที่ทำให้เกิดปัญหา
รหัสผ่านหรือโทเคน

อธิบายว่าทำไมข้อมูลจำลองยังทำให้เกิดบั๊กเดียวกัน แล้วจับภาพผลทดลองใหม่ตามที่เกิดจริง อย่าแก้ข้อความผลลัพธ์ในภาพเพื่อให้ดูผ่าน การตัดข้อมูลที่ไม่จำเป็นออกกับการแต่งผลทดสอบเป็นคนละเรื่อง

ACM ข้อ 1.6 กล่าวถึงการคุ้มครองความเป็นส่วนตัวและลดโอกาสระบุตัวกลับ ใช้เป็นกรอบให้เลือกข้อมูลที่จำเป็น ไม่ใช้ข้อสรุปว่าเปลี่ยนชื่อแล้วหมดความเสี่ยงเสมอ

14.8 ตัวอย่างเปรียบเทียบ: รายงานความก้าวหน้าที่ตรงหลักฐาน

ทีมสมมติพัฒนาโปรแกรมค้นหารหัสและรันผ่านกรณีพบข้อมูลแล้ว แต่ยังไม่ทดสอบชุดว่าง ข้อความว่า “ระบบค้นหาทำงานครบแล้ว” ทำให้ผู้รับเข้าใจว่ากรณีสำคัญผ่านทั้งหมด ข้อความที่ตรงกว่าคือ “ทดสอบการพบรหัสในชุดสามรายการแล้ว ยังต้องตรวจกรณีไม่พบและชุดว่าง” ซึ่งบอกทั้งความก้าวหน้าและสิ่งที่ค้าง

ความซื่อสัตย์ไม่ได้หมายความว่าต้องทำงานได้สมบูรณ์ทุกครั้ง แต่ต้องไม่ซ่อนข้อจำกัดสำคัญของสิ่งที่ส่ง หากพบว่าผลรายงานสลับชื่อกับคะแนน ต้องแจ้งและแก้ก่อนใช้ประเมิน ไม่จัดหน้ารายงานให้ดูเรียบร้อยเพื่อกลบปัญหาข้อมูล

อีกกรณีผู้ช่วยเสนอให้ตัดข้อมูลจริงบางแถวออกเพื่อให้ค่าเฉลี่ยตรงกับตัวอย่าง การแก้ข้อมูลให้เข้ากับคำตอบที่ต้องการไม่ใช่การดีบัก ต้องตรวจว่าข้อกำหนด ข้อมูล หรือสูตรส่วนใดผิดตามหลักฐาน หากใช้ข้อมูลสมมติเพื่อทำซ้ำปัญหา ต้องระบุว่าเป็นข้อมูลสมมติ ไม่อ้างว่าเป็นผลจากการใช้งานจริง

ข้อความที่คลุมเครือสิ่งที่ควรเปิดเผยเพิ่ม
ทดสอบหมดแล้วทดสอบกรณีใด ด้วยเวอร์ชันใด และเหลืออะไร
เขียนเองส่วนใดเขียนเองและใช้ความช่วยเหลือใดตามที่อนุญาต
ไม่มีข้อมูลส่วนบุคคลใช้ข้อมูลจำลองจริงหรือยังเหลือตัวระบุที่เชื่อมกลับได้
ใช้โค้ดเปิดได้แหล่งใด มีเงื่อนไขใด และงานนี้อนุญาตหรือไม่

การอภิปรายควรแยกการตั้งข้อสงสัยออกจากข้อสรุปเรื่องตัวบุคคล การพบโค้ดคล้ายกันเป็นข้อมูลให้ตรวจต่อ ไม่ใช่ใบอนุญาตเผยแพร่ชื่อหรือตัดสินลงโทษนอกกระบวนการของรายวิชา บทนี้ฝึกพิจารณาหลักฐานและความรับผิดชอบ โดยไม่สร้างบทลงโทษใหม่

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

ใบงาน 6: เปลี่ยนคำกล่าวอ้างให้ตรงหลักฐาน

เปรียบเทียบถ้อยคำกับสิ่งที่มีจริง ถ้าข้อมูลไม่พอให้ลดขอบเขตคำกล่าวอ้างหรือบอกสิ่งที่ยังต้องตรวจ ไม่สร้างผลรัน บทสนทนา แหล่งอ้างอิง หรือภาพหน้าจอขึ้นย้อนหลังเพื่อให้เอกสารดูครบ

ข้อความตั้งต้นหลักฐานที่มีจริงข้อความที่ตนเขียนใหม่สิ่งที่ยังต้องทำ
รองรับทุกภาษาตรวจ Education และ AEIOU
ทดสอบหมดแล้วรันสองกรณีในเครื่องเดียว
ไม่ใช้ความช่วยเหลือรับข้อเสนอกรณีทดสอบจาก AI
เป็นงานตนทั้งหมดดัดแปลงโค้ดตัวอย่างบางส่วน
ไม่มีปัญหาแล้วคอมไพล์ผ่าน แต่ยังไม่รัน

ทำบันทึกสั้นโดยมีสี่ส่วน: งานฉบับใด สิ่งที่ยืนยันแล้ว ข้อจำกัด และขั้นถัดไป ผู้ตรวจควรตามจากคำกล่าวอ้างไปยังซอร์สหรือผลจริงได้ โดยไม่ต้องเดาว่ารายงานหมายถึงไฟล์ใด

14.9 อ่านโค้ดที่ผิดและทำความเข้าใจข้อความวินิจฉัย

ตัวอย่างต่อไปนี้เป็นโค้ดฝึกแยกจากงานที่ต้องส่ง แสดงข้อผิดพลาดที่สัมพันธ์กับเนื้อหาบท พร้อมข้อความวินิจฉัยจริง วิธีอ่าน และฉบับแก้ คำว่า diagnostic ใช้รวมข้อความ error, warning และ note จึงไม่ควรเรียกทุกบรรทัดว่า error หรือถือว่าการไม่มี error แปลว่าโปรแกรมถูกตามโจทย์

ที่มาของ log: ผู้เขียนทดสอบด้วย GCC 11.4.0 บน Ubuntu ผ่าน Linux environment เมื่อ 24 ตุลาคม 2569 ใช้ C11 และตัวเลือกดังนี้ ชื่อไฟล์ เลขบรรทัด คอลัมน์ ถ้อยคำ และคำเตือนที่เปิดใช้อาจต่างจากแพลตฟอร์มการเรียน นักศึกษาไม่จำเป็นต้องเปลี่ยนเครื่องมือหรือการติดตั้งตามชุดทดสอบของผู้เขียน

TEXT
-std=c11 -O0 -Wall -Wextra -Wpedantic -Wformat=2 -fdiagnostics-color=never -fmessage-length=0

ข้อความรูปแบบ bad.c:5:17 อ่านว่าไฟล์ bad.c บรรทัด 5 คอลัมน์ 17 ส่วน ^ และ ~ ช่วยชี้บริเวณที่ตรวจพบ จุดนี้อาจเป็นปลายเหตุจากบรรทัดก่อนหน้า error ทำให้การสร้างโปรแกรมล้มในกรณีนั้น warning เตือนความเสี่ยงแม้คำสั่งสร้างอาจจบสำเร็จ และ note ให้บริบท เช่น declaration เดิม ต้องอ่านคู่กัน (GCC: Diagnostics)

ตัวอย่างที่ผิด 1: คัดลอกจุดเรียกแต่ไม่มีฟังก์ชันที่อ้างถึง

ประเภท: ข้อผิดพลาดขณะเชื่อมโยงโปรแกรม

ตัวอย่างจำลองสถานการณ์นำจุดเรียกจากแหล่งช่วยเหลือมาใช้โดยยังไม่ตรวจ implementation prototype ที่มีอยู่ไม่ได้ทำให้ฟังก์ชันนับสระเกิดขึ้น และการเขียนชื่อแหล่งอ้างอิงไม่ทำให้โค้ดเชื่อมโยงสำเร็จ ต้องตรวจทั้งความครบของโปรแกรมและการอ้างอิงจริง

โค้ดที่ผิด — ไม่ใช้แทนฉบับแก้

C
#include <stdio.h>
int count_vowels(const char text[]);
int main(void)
{
    printf("vowels=%d\n", count_vowels("AEIOU"));
    return 0;
}

คำสั่งสร้างและข้อความที่ได้จริง

TEXT
gcc -std=c11 -O0 -Wall -Wextra -Wpedantic -Wformat=2 -fdiagnostics-color=never -fmessage-length=0 bad.c -o bad
TEXT
/usr/bin/ld: /tmp/cczGNfQY.o: in function `main':
bad.c:(.text+0x13): undefined reference to `count_vowels'
collect2: error: ld returned 1 exit status

สถานะจบของคำสั่งสร้างที่ตัวเก็บผลอ่านได้: 1 คำสั่งล้มและไม่ได้รัน executable ของตัวอย่างนี้ การรันไฟล์เก่าที่อาจค้างจาก build ครั้งก่อนจะไม่ใช่หลักฐานของโค้ดปัจจุบัน

อ่านข้อความว่าแจ้งอะไรและผิดอย่างไร

undefined reference to count_vowels หมายถึงยังไม่มีนิยามที่ linker ใช้งานได้ ไม่ได้พิสูจน์ว่าเกิดการทุจริตหรือว่าโค้ดมาจากแหล่งใด ข้อสรุปด้านความซื่อสัตย์ต้องอิงหลักฐานการทำงานและนโยบายจริงแยกจาก diagnostic ทางเทคนิค

โค้ดที่แก้แล้ว

C
#include <stdio.h>
int count_vowels(const char text[])
{
    int count = 0;
    for (int i = 0; text[i] != '\0'; ++i) {
        char ch = text[i];
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
            ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
            ++count;
        }
    }
    return count;
}
int main(void)
{
    printf("vowels=%d\n", count_vowels("AEIOU"));
    return 0;
}

เหตุผลของการแก้และสิ่งที่ต้องตรวจซ้ำ

เพิ่ม implementation ที่เข้าใจและอธิบายได้ ทดสอบกรณีตัวพิมพ์ใหญ่ เล็ก ไม่มีสระ และข้อความว่าง พร้อมระบุแหล่งและบทบาทความช่วยเหลือที่ใช้จริง ไม่แต่งแหล่งอ้างอิงหรืออ้างว่าทดสอบผ่านโดยยังไม่ได้รัน

ผลตรวจฉบับแก้จริง: คอมไพล์ด้วยตัวเลือกเดิมและเพิ่ม -Werror เพื่อให้ชุดทดสอบผู้เขียนไม่ยอมรับ warning ไม่มีข้อความวินิจฉัยและคำสั่งสร้างจบด้วยสถานะ 0 จากนั้นรันได้ stdout ดังนี้ และ stderr ว่าง

TEXT
vowels=5

ตัวอย่างที่ผิด 2: อ้างว่าทดสอบครบแต่กรณีตัวพิมพ์ใหญ่ยังล้ม

ประเภท: ข้อผิดพลาดที่ชุดทดสอบรายงาน

compiler ยอมรับฟังก์ชันที่นับเฉพาะสระตัวพิมพ์เล็ก แต่ข้อกำหนดตัวอย่างรับทั้งสองแบบ test ด้วย AEIOU จึงเปิดเผยส่วนที่ยังขาด ถ้าเคยทดลองเพียง aeiou จะยังไม่มีหลักฐานของ uppercase

โค้ดที่ผิด — ไม่ใช้แทนฉบับแก้

C
#include <stdio.h>
int count_vowels(const char text[])
{
    int count = 0;
    for (int i = 0; text[i] != '\0'; ++i) {
        char ch = text[i];
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') ++count;
    }
    return count;
}
int main(void)
{
    int actual = count_vowels("AEIOU");
    printf("%s expected=5 actual=%d\n", actual == 5 ? "PASS" : "FAIL", actual);
    return actual == 5 ? 0 : 1;
}

คำสั่งสร้างและข้อความที่ได้จริง

TEXT
gcc -std=c11 -O0 -Wall -Wextra -Wpedantic -Wformat=2 -fdiagnostics-color=never -fmessage-length=0 bad.c -o bad

ไม่มีข้อความวินิจฉัยจาก compiler ในการทดลองนี้ ทั้ง stdout และ stderr ว่าง การไม่มีข้อความเป็นผลที่สังเกต ไม่ใช่การรับรองความถูกต้องของโปรแกรม

สถานะจบของคำสั่งสร้างที่ตัวเก็บผลอ่านได้: 0 ขั้นสร้างสำเร็จ จากนั้นจึงตรวจพฤติกรรมขณะรันหรือใช้ชุดทดสอบตามประเภทข้างต้น

ผลจากการรันฉบับผิด

stdout:

TEXT
FAIL expected=5 actual=0

stderr ว่าง ไม่มี runtime diagnostic จากระบบในการทดลองนี้ ต้องใช้การเทียบผลกับข้อกำหนดเป็นหลักฐาน

สถานะจบที่ตัวเก็บผลอ่านได้: 1

ผลตามข้อกำหนดที่ใช้เทียบ:

TEXT
PASS expected=5 actual=5

อ่านข้อความว่าแจ้งอะไรและผิดอย่างไร

FAIL expected=5 actual=0 เป็นข้อความที่ชุดทดสอบในโค้ดพิมพ์ ไม่ใช่ข้อความ compiler expected คือผลตามข้อกำหนด actual คือค่าจากฟังก์ชัน การออกด้วยสถานะ 1 ทำให้ระบบทดสอบแยกความล้มเหลวได้ ไม่ใช้เพียงการมองว่ามีข้อความบนหน้าจอ

โค้ดที่แก้แล้ว

C
#include <stdio.h>
int count_vowels(const char text[])
{
    int count = 0;
    for (int i = 0; text[i] != '\0'; ++i) {
        char ch = text[i];
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
            ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') ++count;
    }
    return count;
}
int main(void)
{
    int actual = count_vowels("AEIOU");
    printf("%s expected=5 actual=%d\n", actual == 5 ? "PASS" : "FAIL", actual);
    return actual == 5 ? 0 : 1;
}

เหตุผลของการแก้และสิ่งที่ต้องตรวจซ้ำ

เพิ่มเงื่อนไข uppercase แล้วรัน test เดิมโดยไม่เปลี่ยน expected การรายงานความก้าวหน้าต้องระบุกรณีที่ลองจริงและข้อจำกัด ไม่สรุปว่าระบบถูกทั้งหมดจาก test เดียวและไม่ลบกรณีล้มเพื่อทำให้รายงานดูผ่าน

ผลตรวจฉบับแก้จริง: คอมไพล์ด้วยตัวเลือกเดิมและเพิ่ม -Werror เพื่อให้ชุดทดสอบผู้เขียนไม่ยอมรับ warning ไม่มีข้อความวินิจฉัยและคำสั่งสร้างจบด้วยสถานะ 0 จากนั้นรันได้ stdout ดังนี้ และ stderr ว่าง

TEXT
PASS expected=5 actual=5

ลำดับการอ่าน log เมื่อลองโปรแกรมของบทนี้

  1. ระบุว่าเกิดในขั้น compile, link, run หรือ test และแยกข้อความจากระบบออกจากข้อความที่โปรแกรมพิมพ์เอง
  2. อ่าน diagnostic แรกกับบริบทบรรทัดก่อนหน้า แล้วใช้ note เพื่อเทียบ declaration หรือชนิดข้อมูล อย่าแก้ทุกข้อความตามลำดับโดยไม่หาสาเหตุร่วม
  3. แก้ทีละสาเหตุ สร้างโปรแกรมใหม่ และตรวจว่ากำลังรันผล build ใหม่ การเติมวงเล็บ ปิด warning หรือลบ test อาจทำให้ log เงียบโดยยังผิดโจทย์
  4. ใช้ข้อมูลเดิมที่ทำให้ผิดทดสอบซ้ำ แล้วเพิ่มกรณีขอบเขตที่สัมพันธ์กับบท การรันจบสถานะศูนย์เพียงครั้งเดียวไม่แทนการตรวจข้อกำหนดครบถ้วน

ความหมายตามภาษาอ้างจากร่างมาตรฐาน C11 โดยข้อความ diagnostic เฉพาะถ้อยคำเป็นของเครื่องมือที่ใช้ ไม่ได้กำหนดให้ compiler ทุกตัวพิมพ์เหมือนกัน (WG14 N1570, GCC: Warning Options)

ปฏิบัติการที่ 14 จริยธรรมทางวิชาการและความซื่อสัตย์ในการพัฒนาโค้ด

ปฏิบัติการนี้แบ่งเป็นสองส่วน ส่วนแรกฝึกพัฒนาโปรแกรมด้วยความเข้าใจของตนเอง โดยศึกษาแนวทางการวนอักขระในสตริงจากบทที่ 8 แล้วเขียนโปรแกรมนับสระขึ้นใหม่พร้อมคอมเมนต์ระบุแหล่งที่ศึกษา ส่วนที่สองเป็นกิจกรรมวิเคราะห์สถานการณ์จริยธรรมที่ไม่ต้องรันโค้ด เพื่อฝึกจำแนกการกระทำที่เหมาะสมหรือไม่เหมาะสมพร้อมให้เหตุผล ทั้งสองส่วนทำแยกกันได้ แต่ควรทำตามลำดับเพื่อให้เห็นทั้งการปฏิบัติที่ซื่อสัตย์และการตัดสินสถานการณ์ด้วยหลักเดียวกัน

ℹ️Note

ไฟล์ซอร์สโค้ดในปฏิบัติการนี้ให้ตั้งชื่อเป็นภาษาอังกฤษแบบ snake_case และบันทึกไว้ในโฟลเดอร์ของผู้เรียนเอง คำสั่งคอมไพล์ในเอกสารนี้ทดสอบด้วย gcc 13.3.0

Lab A: ศึกษาแล้วเขียนใหม่ด้วยความเข้าใจ

สถานการณ์ ต้องการพัฒนาโปรแกรมนับจำนวนสระภาษาอังกฤษในข้อความ โดยศึกษาหลักการวนอักขระในสตริงจากบทที่ 8 ก่อน แล้วเขียนโปรแกรมขึ้นใหม่ด้วยความเข้าใจของตนเอง พร้อมใส่คอมเมนต์ระบุแนวทางและแหล่งที่ศึกษา เพื่อฝึกการพัฒนาที่ซื่อสัตย์และการอ้างอิงอย่างโปร่งใส

เป้าหมาย ฝึก LLO14.2 และ LLO14.3 คือพัฒนาโค้ดด้วยความเข้าใจของตนเองพร้อมอธิบายการทำงาน และระบุแหล่งที่ศึกษาในคอมเมนต์อย่างโปร่งใส

ขั้นปฏิบัติ

  1. ศึกษาหลักการวนอักขระในสตริงจากบทที่ 8 คือการวนจากอักขระแรกจนพบอักขระปิดท้ายสตริง '\0' เพื่อให้เข้าใจแนวทางก่อนเขียน
  2. สร้างไฟล์ชื่อ ch14_vowels.c ด้วยโปรแกรมแก้ไขข้อความหรือ IDE แล้วเขียนโปรแกรมด้วยคำและโครงสร้างของตนเอง โดยจัดย่อหน้า 4 ช่องว่างและใส่คอมเมนต์ส่วนหัวที่ระบุแหล่งที่ศึกษา
C
/*
 * ch14_vowels.c : นับสระภาษาอังกฤษในข้อความ
 * แนวทาง: ศึกษาหลักการตรวจอักขระจากบทที่ 8 (การวนอักขระในสตริง)
 *         ตัวอย่างของบทเรียน ผู้เรียนต้องบันทึกแหล่งและบทบาทที่ใช้จริง
 */
#include <stdio.h>
 
int count_vowels(const char text[]) {
    int count = 0;
    for (int i = 0; text[i] != '\0'; i++) {
        char ch = text[i];
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
            ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
            count++;
        }
    }
    return count;
}
 
int main(void) {
    char message[] = "Education";
    printf("ข้อความ: %s\n", message);
    printf("จำนวนสระ: %d\n", count_vowels(message));
    return 0;
}
  1. คอมไพล์และรันด้วยคำสั่ง
BASH
gcc -std=c11 -Wall ch14_vowels.c -o ch14_vowels
./ch14_vowels

ผลที่บันทึกในตัวอย่างเดิม (ชุดสอนฉบับนี้ตรวจซ้ำด้วย GCC ตามตาราง)

TEXT
ข้อความ: Education
จำนวนสระ: 5

ฟังก์ชัน count_vowels วนอักขระในสตริงตามหลักการจากบทที่ 8 โดยวนจากดัชนีแรกจนพบอักขระปิดท้ายสตริง '\0' แต่ละรอบจะนำอักขระมาเทียบกับสระทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ด้วยเงื่อนไข if หากตรงกับสระตัวใดจะเพิ่มตัวนับ count เมื่อข้อความคือ "Education" ซึ่งมีสระคือ E, u, a, i, o รวมห้าตัว โปรแกรมจึงรายงานจำนวนสระเท่ากับ 5 คอมเมนต์ส่วนหัวระบุว่าศึกษาแนวทางจากบทที่ 8 ซึ่งเป็นการอ้างอิงแหล่งที่ศึกษาอย่างโปร่งใส

ตัดสินใจเอง A.1 ดัดแปลงโปรแกรมให้รับข้อความของตนเอง แล้วอธิบายการทำงานของแต่ละส่วนด้วยคำของตนเองในคอมเมนต์ พร้อมคงคอมเมนต์ส่วนหัวที่ระบุแหล่งที่ศึกษา เพื่อยืนยันว่าพัฒนาและเข้าใจโค้ดด้วยตนเอง

ผลลัพธ์ที่คาดหวัง A.1 โปรแกรมคอมไพล์ผ่านไม่มีการแจ้งเตือนและรายงานจำนวนสระของข้อความที่เลือกได้ถูกต้อง พร้อมคอมเมนต์ที่อธิบายการทำงานได้เอง (ผลที่คาดว่าจะเห็นสำหรับข้อความที่ผู้เรียนเลือกเอง ยังไม่ได้ทดสอบในเอกสารนี้ เพราะขึ้นกับข้อความของแต่ละคน)

จุดตรวจ A โปรแกรมคอมไพล์ผ่านไม่มีการแจ้งเตือนและรันได้ผลถูก ผู้พัฒนาอธิบายการทำงานของโค้ดได้ทุกบรรทัด มีคอมเมนต์ส่วนหัวระบุแหล่งที่ศึกษา และโค้ดมีการจัดย่อหน้าตามมาตรฐาน

ปัญหาที่พบบ่อย

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

เปิดหลังผู้เรียนพัฒนาด้วยตนเองแล้ว

Lab B: วิเคราะห์สถานการณ์จริยธรรม

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

เป้าหมาย ฝึก LLO14.1 และ LLO14.3 คือจำแนกการคัดลอกที่เหมาะสมหรือไม่เหมาะสมพร้อมเหตุผล และเข้าใจการอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วยอย่างโปร่งใส

ขั้นปฏิบัติ

  1. อ่านสถานการณ์ต่อไปนี้ทีละกรณี
    • สถานการณ์ที่ 1: นำไฟล์โค้ดของเพื่อนมาส่งเป็นงานของตน โดยเปลี่ยนเพียงชื่อตัวแปร และอธิบายการทำงานไม่ได้
    • สถานการณ์ที่ 2: ศึกษาตัวอย่างแนวทางจากเว็บ แล้วเขียนโปรแกรมขึ้นใหม่ด้วยความเข้าใจของตนเอง พร้อมใส่คอมเมนต์ระบุแหล่งที่ศึกษา
    • สถานการณ์ที่ 3: ใช้เครื่องมือ AI ช่วยร่างโครงโปรแกรม แล้วนำมาตรวจสอบ ทำความเข้าใจทุกบรรทัด และแจ้งการใช้เครื่องมือในเอกสารประกอบตามนโยบายของหลักสูตร
    • สถานการณ์ที่ 4: สมาชิกกลุ่มศึกษาร่วมกันอภิปรายแนวทางแก้โจทย์ แล้วต่างคนต่างเขียนโปรแกรมของตนเองด้วยความเข้าใจ
  2. พิจารณาข้ออนุญาตของงานร่วมกับแต่ละสถานการณ์ แล้วตัดสินพร้อมเหตุผล หากข้อมูลไม่พอให้ระบุสิ่งที่ต้องตรวจเพิ่มก่อนสรุป
  3. ให้เหตุผลประกอบการตัดสิน และเสนอแนวทางที่ถูกต้องสำหรับสถานการณ์ที่ไม่เหมาะสม

ตัดสินใจเอง B.1 ยกสถานการณ์จากประสบการณ์การเรียนหรือการทำงานของตนเองมาหนึ่งกรณีที่เกี่ยวข้องกับความซื่อสัตย์ในการพัฒนาโค้ด แล้วอธิบายว่าการกระทำนั้นเหมาะสมหรือไม่ พร้อมเสนอแนวปฏิบัติที่ซื่อสัตย์

ผลลัพธ์ที่คาดหวัง B.1 ได้สถานการณ์หนึ่งกรณีพร้อมการจำแนกที่สอดคล้องกับหลักความซื่อสัตย์ และแนวปฏิบัติที่ถูกต้อง (ผลที่คาดว่าจะเห็นสำหรับสถานการณ์ที่ผู้เรียนยกเอง ยังไม่มีเฉลยตายตัว เพราะขึ้นกับประสบการณ์ของแต่ละคน ผู้สอนประเมินจากความสมเหตุสมผลของเหตุผล)

จุดตรวจ B จำแนกแต่ละสถานการณ์ได้ถูกต้อง ให้เหตุผลที่สอดคล้องกับหลักความซื่อสัตย์ และเสนอแนวทางที่ถูกต้องสำหรับกรณีที่ไม่เหมาะสม

ปัญหาที่พบบ่อย

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

เปิดหลังผู้เรียนวิเคราะห์ด้วยตนเองแล้ว

ใบงานขยาย Lab B: ตรวจเหตุผลและแก้ไขอย่างโปร่งใส

ใช้บัตรสถานการณ์ A–F เขียนข้อเท็จจริง ข้ออนุญาตที่รู้ สิ่งที่ยังต้องตรวจ และทางเลือกก่อนส่ง อย่าสร้างบทลงโทษหรือข้อกล่าวหาต่อบุคคลจริงจากกิจกรรมนี้

กรณีข้อเท็จจริงข้อกำหนดที่อ้างได้ข้อมูลที่ยังขาดแนวทางก่อนส่ง
A หรือ B
C หรือ D
E หรือ F

ถ้าพบว่าตนส่งคำอธิบายที่มาหรือผลตรวจไม่ตรง ให้เก็บฉบับเดิมไว้ตามช่องทางที่รายวิชากำหนด แจ้งส่วนที่คลาดเคลื่อน แก้รายงาน และขอแนวทางผู้สอน ไม่เสนอให้ซ่อนหรือลบหลักฐานเพื่อให้ตรวจไม่พบ

ให้เพื่อนตรวจเหตุผลแทนการตรวจแค่คำว่าเหมาะสมหรือไม่เหมาะสม หากยังไม่ทราบนโยบาย ให้ระบุเงื่อนไขที่ทำให้ข้อสรุปเปลี่ยน การอธิบายสิ่งที่ไม่รู้ตรง ๆ มีสาระกว่าการเดาว่าทุกกรณีได้รับอนุญาต

ใบงานปิดบท: ชุดหลักฐานของงานที่ส่ง

รวบรวมซอร์สที่อธิบายได้ ผลที่รันจริง บันทึกแหล่งที่มาและเครื่องมือที่ใช้ และเอกสารวิเคราะห์ Lab B ตามงานข้อ 1–3 เดิม ไม่ต้องส่งบทสนทนาส่วนตัวทั้งหมดหรือเผยแพร่งานสู่สาธารณะเพื่อพิสูจน์ความซื่อสัตย์

หลักฐานไฟล์หรือส่วนที่อยู่ตรงกับฉบับส่งหรือไม่สิ่งที่ยังค้าง
โปรแกรมและคำอธิบาย Lab A
ผลรันและกรณีตรวจ
ที่มาและบทบาทความช่วยเหลือ
การวิเคราะห์ Lab B

ตรวจออกจากบทหกข้อ: อ้างอิงแทนข้ออนุญาตได้หรือไม่, อ่านคู่มือกับนำคำตอบมาส่งต่างกันอย่างไร, รายงานบทบาท AI อย่างไร, หลักฐานใดยืนยันผลตรวจ, ทำไมเปลี่ยนชื่อไม่พอให้เป็นข้อมูลจำลอง และควรทำอย่างไรเมื่อพบรายงานคลาดเคลื่อน

นำบันทึกที่มา ขอบเขต และผลตรวจไปใช้กับ บทที่ 15 โครงงานบูรณาการ โดยคง LLO และใช้แผนคะแนนแบบถ่วงน้ำหนักตามมติ 30 ต.ค. 2569

เก็บกวาด

เมื่อจบปฏิบัติการ ให้ลบไฟล์ปฏิบัติการที่สร้างจากการคอมไพล์ (เช่น ch14_vowels) และเก็บเฉพาะไฟล์ซอร์สโค้ด .c พร้อมเอกสารวิเคราะห์สถานการณ์ไว้ เพื่อให้โฟลเดอร์งานสะอาดและมีเฉพาะสิ่งที่ต้องส่ง

สรุป

บทนี้อธิบายหลักจริยธรรมทางวิชาการและความซื่อสัตย์ในการพัฒนาโค้ด เริ่มจากความหมายของความซื่อสัตย์ว่าคือการไม่นำผลงานของผู้อื่นมาเป็นของตนและการให้เครดิตแก่แหล่งที่มา พร้อมจำแนกการคัดลอกที่ไม่เหมาะสมออกจากการศึกษาแนวทางแล้วพัฒนาเป็นโค้ดของตนเอง ต่อด้วยการพัฒนาโค้ดด้วยความเข้าใจของตนเองสามขั้น คือศึกษาแนวทาง เขียนใหม่ด้วยคำของตน และอธิบายการทำงานได้ทุกบรรทัด ซึ่งช่วยให้แก้ไข ต่อยอด และรับผิดชอบผลงานได้จริง จากนั้นคือการอ้างอิงแหล่งที่มาและการแจ้งการใช้เครื่องมือช่วย ทั้งเว็บ ตัวอย่างโค้ด และเครื่องมือ AI อย่างโปร่งใส และปิดท้ายด้วยกรณีศึกษาและแนวปฏิบัติสำหรับงานเดี่ยวและงานกลุ่ม ปฏิบัติการในบทนี้ให้พัฒนาโปรแกรมนับสระด้วยความเข้าใจพร้อมอ้างอิง และวิเคราะห์สถานการณ์จริยธรรม หลักเหล่านี้ตอบ CLO4 โดยตรงและเป็นพื้นฐานของการส่งมอบผลงานอย่างซื่อสัตย์ในบทถัดไป

สิ่งที่ส่งต่อไปยังบทถัดไป

สิ่งที่ส่งต่อค่า/รูปแบบใช้ในบท
หลักจริยธรรมทางวิชาการและการจำแนกการคัดลอกที่ไม่เหมาะสมผลงานต้องสะท้อนความเข้าใจของผู้ส่งและให้เครดิตแหล่งที่มาบท 15 (โครงงานบูรณาการ)
การพัฒนาโค้ดด้วยความเข้าใจของตนเองศึกษาแนวทาง เขียนใหม่ด้วยคำของตน อธิบายได้ทุกบรรทัดบท 15 (โครงงานบูรณาการ)
การอ้างอิงแหล่งที่มาและการใช้เครื่องมือช่วยคอมเมนต์ระบุแหล่งที่ศึกษา และแจ้งการใช้เว็บ/ตัวอย่างโค้ด/AI อย่างโปร่งใสบท 15 (โครงงานบูรณาการ)

สรุปคำสั่ง

คำสั่งหน้าที่
gcc -std=c11 -Wall ch14_vowels.c -o ch14_vowelsคอมไพล์ซอร์สโค้ด ch14_vowels.c เป็นไฟล์ปฏิบัติการ พร้อมเปิดการแจ้งเตือน
./ch14_vowelsรันไฟล์ปฏิบัติการที่คอมไพล์แล้ว

แบบฝึกหัดท้ายบท

ตอนที่ 1 ฝึกทบทวน (15 ข้อ ตรวจคำตอบให้ทันที)

ตอนที่ 2 แบบฝึกหัดเขียนตอบ (5 ข้อ)

กลุ่ม ก (เข้าใจ)

  • ก1 (LLO14.1) จงอธิบายความต่างระหว่างการคัดลอกโค้ดโดยไม่ศึกษากับการศึกษาแนวทางแล้วเขียนใหม่ด้วยความเข้าใจพร้อมอ้างอิง และเหตุใดกรณีหลังจึงถือว่าซื่อสัตย์
  • ก2 (LLO14.3) จงอธิบายว่าควรแจ้งการใช้เครื่องมือช่วย เช่น เว็บหรือเครื่องมือ AI ในการพัฒนาโค้ดอย่างไรจึงเรียกว่าโปร่งใส

กลุ่ม ข (ประยุกต์)

  • ข1 (LLO14.2) จงศึกษาแนวทางของโปรแกรมภาษา C หนึ่งเรื่องจากบทก่อน แล้วเขียนโปรแกรมขึ้นใหม่ด้วยความเข้าใจของตนเอง พร้อมใส่คอมเมนต์ส่วนหัวระบุแหล่งที่ศึกษา แล้วคอมไพล์และรันให้ได้ผลจริง
  • ข2 (LLO14.3) จากโปรแกรมในข้อ ข1 จงเขียนบันทึกสั้นแจ้งแหล่งที่ศึกษาและเครื่องมือช่วยที่ใช้ พร้อมระบุว่าได้ตรวจสอบและเข้าใจผลลัพธ์ด้วยตนเองอย่างไร

กลุ่ม ค (วิเคราะห์)

  • ค1 (LLO14.1) จากสถานการณ์ที่สมาชิกกลุ่มส่งไฟล์โค้ดเดียวกันทั้งกลุ่มเป็นงานเดี่ยว จงวิเคราะห์ว่าเหมาะสมหรือไม่ด้านความซื่อสัตย์ พร้อมเหตุผล และเสนอแนวปฏิบัติที่ถูกต้องสำหรับการทำงานร่วมกัน

การศึกษาค้นคว้าเพิ่มเติม

  1. ศึกษาแนวทางการจัดการสตริงและอักขระเพิ่มเติมจาก Kernighan และ Ritchie (1988) แล้วทดลองพัฒนาโปรแกรมประมวลผลสตริงของตนเองขึ้นใหม่ด้วยความเข้าใจ พร้อมคอมเมนต์ระบุแหล่งที่ศึกษา
  2. ทบทวนข้อกำหนดด้านการจัดการสตริงและอักขระของภาษา C ตามมาตรฐาน ISO/IEC 9899:2011 เพื่อเข้าใจพฤติกรรมของการวนอักขระจนพบอักขระปิดท้ายสตริงที่ใช้ในโปรแกรมตัวอย่าง
  3. ศึกษาระเบียบและแนวปฏิบัติด้านความซื่อสัตย์ทางวิชาการของมหาวิทยาลัยและหลักสูตรที่ผู้สอนจัดเตรียม แล้วสรุปแนวปฏิบัติที่ควรยึดในการพัฒนาและส่งมอบผลงานของรายวิชานี้

เอกสารอ้างอิง

International Organization for Standardization. (2011). ISO/IEC 9899:2011 — Information technology — Programming languages — C. ISO.

Kernighan, B. W., & Ritchie, D. M. (1988). The C programming language (2nd ed.). Prentice Hall.

ตำราหลักภาษาไทยของรายวิชา. (ผู้สอนเติมรายละเอียดบรรณานุกรม — เพิ่มตามมติผู้สอน 21 ต.ค. 2569).

แหล่งปฐมภูมิที่ตรวจประกอบการปรับปรุง 23 ตุลาคม 2569

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

By Watcharin Sarachai