[MITx: 6.00.1x] Introduction to Computer Science and Programming Using Python (Week 2)

ฺ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.