ฺBlog ตอนนี้การเรียนใน Week ที่ 2 แล้วครับ ซึ่งเปิดมาครั้งแรก โอ้ววววววว การบ้านน้อยดี พอเปิดไปบทถัดไปเท่านั้นแหละ "ชีวิตแค่โดนทำร้าย 5555"
สำหรับ Week นี้ ในบทแรกเป็นการทบทวนของเก่ามากกว่าครับ ตั้งแต่ if-else ไปจนถึงแนวคิดของ Guess ^ Check ซึ่งแนวคิดมันมีปัญหาที่ว่ามันช้ามากก หาทุกกรณีที่เป็นไปได้ครับ ตอนนี้มันมีวิธีที่เร็วกว่าไหม แต่ต้องรู้จักกับ Keyword พวกนี้ก่อนครับ
- Approximate Solutions - เราไม่ได้ต้องการวิธีการที่มันตรงแป๊ะ มันอาจจะมีวิธีการที่เร็วกว่า แต่ความแม่นยำลดลงไป ตัว Approximate มันหมายถึง การประมาณการ ถ้าในศัพท์ของวิชา Algorithm ที่ผมเคยเรียนมา คือ Optimal Solution ครับ
- Bisection Search - มันเป็นแนวคิดของแบ่งแยก และพิชิต (Divide & Conqure) ครับ โดยเราต้องอยู่จุดเริ่มต้น(Lower) และจุดสิ้นสุด(Upper) ที่เป็นไปได้ จากนั้นแบ่งหาที่ละครึ่ง (Bi section) ตัดไปเรื่อยๆ จนได้ค่าที่ใกล้เคียง (Approximate)
- ถ้าในตัวอย่างของผู้สอน เค้ายกเรื่องการหาค่า root ครับ ตาม Code เลย
- จากนั้นมาลงลึกตัว Float และ Faction ครับ โดยมองว่าตัวเครื่องคอม มันรู้จักแทนค่าตัวเลขได้อย่างไร ตอนนี้ใช้แนวคิดของเลขฐาน 2 ครับ
- แต่ถ้าใช้ตัวแปรประเภท Float ให้ระวังเรื่อง floating-point rounding error
หลังจากจบบทแรกไป จะบอกว่ารู้พวกพื้นฐาน ถ้าใน Week ที่แล้วมัน คือ หัวใจ (Core Elements) บทถัดมาเรียกว่าอะไร เป็นการแทนปัญหาของรอบตัวเรา โดยการ
- Decomposition - แบ่งปัญหา/โจทย์ให้มันเล็กลง
- Abstraction - ให้มันอยู่ในที่ที่ควรอยู่ และรู้เท่าที่ควรรู้ (Scope)
โดยในบทนี้ การทำ Decomposition & Abstraction เน้นตัว
- function ครับ ใน Python ใช้ keyword def ครับ
- มุมมองการจัดการปัญหา เราสามารถ Decomposition(แยก) งานชิ้นใหญ่ ออกมาเป็น Function ซึ่งเพิ่ม Abstraction แล้ว ตรงนี้เราพบว่า มันมี Code ส่วนนึงที่ทำซ้ำบ่อยๆ ปกติเราวิธีการ Iteration
- Iteration - ทำมันซ้ำอีกครั้ง (วน Loop) ไปสิ
- Recursion - แบ่งงานเล็กลงไปอีกสิ แล้วค่อยมารวมผลลัพธ์ และมีตัวอย่างหลากหลายแบบครับ ไม่เน้น Recursion กับปัญหาของทางคณิตศาสตร์อย่างเดียวครับ พยายามเอาเรื่องอื่นๆ มาด้วย เพื่อให้ผู้เรียนเห็นภาพ แม้ว่าจะเป็นการรู้จากลอง Debug Code
- Iteration & Recursion มันมีจุดที่เหมาะสมใช้งานนะครับ
- file - อันนี้ผมว่า เค้าแบ่งหัวข้อไ้แปลกดี ถ้าเป็นหนังสือสอน Programming ในไทย เรื่องนี้จับลงบทสุดท้าย 5555 แต่หลังเรียนจบแล้ว มันโอเค เพราะเรื่อง file เค้าสอนใน 2 มุมมอง
- Source Code ที่แยกเป็นสัดส่วนชัดเจน เช่น เรื่องการคำนวณตัวเลยพื้นฐาน แยกไปไฟล์ python ของ math เป็นต้น
- กับอื่นแันที่เราน่าจะรู้กัน คือ การจัดการกับ Textfile ครับ
ใน Week นี้มี Problem Set มาให้ลอง 2 กลุ่มใหญ่ ได้แก่
- Polysum - จุดนี้ โจทย์ไม่ยากครับ แต่ผมชอบโจทย์ข้อที่ 2 มากครับ มันเป็นการทำ Code Review ครับ โดยเราต้อง Upload Code ของเรา และจากนั้นระบบเราลองดู Code ชาวบ้านที่ส่งเข้ามา และลองให้คะแนนคนอื่น และกลับมาประเมินตัวเราเองครับ ซึ่งหลังจากดูของคนอื่นแล้ว สำหรับการประเมินมีตัว 3 ตัว ได้แก่
- Commented Code - Comment เท่าที่จำเป็นครับ ถ้า Code มันอธิบายสื่ออยู่แล้ว ก็ไม่ต้องใส่ครับ
- Variable Names - ตั้งให้รู้ว่าทำอะไร
- Modularity and Dead Code - ดูความเป็นสัดส่วนของ Code แยกพวก if ชัดเจนไหม หรือมี Code ที่ไม่ได้ใช้ (Dead Code) หรือป่าว สำหรับหัวข้อนี้ หลักๆ ผมโดนพวกการจัดเยื้อง เพราะ ไม่ได้ใช้ IDE ตามที่เค้าแนะนำ บางครั้งต้องมากด space เองครับ
- Finance - คำนวณยอดบัตรเครคิดครับ โจทย์สนุกดีครับ ในแต่ละ Level เพิ่มความยาก และบังคับนำเนื้อหาที่เรียนมาใช้ให้ครบ ข้อสุดท้ายงงแท้ ตอนแรกมืนๆว่าเอาตัว Bisection Search มาใช้ยังไง แต่พอทำได้แล้ว ว้าวว จากแบบเดิม 5 นาที มันเหลือไม่เกิด 5 วินาทีครับ
- ตัว Grader มี Feature อย่างการ inject ค่าลงในตัวแปรแล้ว ยังมีการจับเวลาการประมวลผลด้วยครับ เพื่อที่ดูวาเรามีการใช้ Bisection Search จริง หรือป่าว (ถ้าใครจะโกงแอบดู Test Case แล้ว Return ตาม Input ก็ไม่ได้นะครับ ระบบมีการ Random ด้วย)
- ได้ลอง Feature ตัว repl.it มีใช้ Reference พวก Libary มาให้ใช้งานด้วยครับ ดีเลย
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.