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

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

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

  • Introduction
  • Knowlege Management
    • Declarative knowledge = Statements of fact. เช่น ค่า PI = 3.14 / เก้าอี้มีสมุดสีแดงวางอยู่ เป็นต้น
    • Imperative knowledge = A recipe or “how-to” ซึ่ง Recipe ผมชอบคำนี้ อาจารย์เปรียบเปรยได้ดีเลยครับ จริงมัน คือ ขั้นตอนการทำงาน (Algorithm) ครับ
  • Fixed & Stored Program
    • Fixed Program - ทำงานเฉพาะอย่าง ทำมาเฉพาะเจาะจงให้ประมวลผลงานอย่างเดียว เช่น ทำมาเพื่อคิดเลข / ทำมาเพื่อคำนวณวิถีของจรวด (จริง น่าจะมองว่าเป็น SW ที่มาเจาะจงกับ HW)
    • Stored Program - ทำได้หลายอย่างเลย แล้วแต่เราสั่งให้มันทำอะไร เอาง่ายๆ เราต้องเขียนโปรแกรมบอกเครื่อง
  • Basic Computer Architecture ตามรูปดีกว่าครับ

    • A program counter The computer executes the instructions mostly in a linear sequence, except sometimes it jumps to a different place in the sequence.
  • Turing บอกถ้ามีการทำงานพื้นฐาน(Primitives Operation) เช่น การ Shfit Bit/ AND / OR / NOT เป็นต้น เราสามารถประมวลทุกๆปัญหาได้บนโลก ถ้ามีปัญหาที่ต้องสร้าง Operation ใหม่ เราสามารถเพิ่มได้ โดยการทำ Abstract Data Type (เขียน Function ใหม่ และเรียกพวก Primitives Operation ด้านใน ถ้าใช้เครื่องเรียนพวก Assembly หรือ LC-3 ลองนึกดูว่า ถ้าต้องการหาเลขยกกำลัง มีขั้นตอนอะไรบ้าง)
  • Aspect of Language
    • Syntax - ตรงตามโครงสร้างพื้นฐาน เเช่น ประโยคที่ดีควรมีประธาน + กริยา + กรรม
    • Static Semantics - ตรงตามกฏเกณฑ์ ถ้าในภาษาอังกฤษ เป็นพวก Grammar ครับ ดู Syntax ว่าถูกตามกฏไหม
    • Semantics - ดูความหมายและ ซึ่งบอกที่ประโยคเดียวกัน อาจจะตีความได้หลายแบบ แต่สำหรับ Computer ต้องตีความได้แบบเดียวเท่านั้นครับ
  • แนวคิดการคิดโปรแกรมภาษา Python หลักๆ มีเรื่อง
    • Data Type - int, boolean, float และ string (ตัวหลังเน้นเยอะเลย)
    • Statement - คำสั่งต่างฟ
    • Opreation - การ + - * / และพวก Logic ต่างๆ อย่าง AND, OR
    • Control Flow - IF-ELSE
    • Iteration - พวก for while
    • ฺBasic I/O - input กับ print
    • และอื่นๆ
  • สำหรับการเขียนโปรแกรม อันนี้เค้าให้ผ่านตัว แต่ผมยังไม่ได้ลง 555 พยายามลองใช้ตัว Editor ที่ทำใน Term Proj ตอนเรียน ป โท ผมพบข้อจำกัดของ Editor ของ ตัวเองเยอะมากครับ พยายามลองงมๆ แก้ให้มันแก้ขัดไปก่อน แต่ก็มีปัญหาใหม่มาครับ โดยข้อจำกัดต่างๆ ผมมีเขียนสรุปไว้ ดังนี้

    • ไม่มีหน้าจอ แบบ Interactive แนวพวก Command Line ครับ เวลาจะลองอะไร ต้องเขียน Code เต็ม Complile และ Run อีกทีครับ
    • Code Format ปัญหาที่สำคัญของภาษา Python คือ การจัดเยื้ยง
    • Syntax Check ยังขาดครับ บางอย่างมันควรรู้ตั้งแต่แรกครับ ไม่ใช่มารู้ผลเอาตอน Complie
    • การ Bypass ค่าบางอย่าง เช่น โจทย์บอกว่าให้อ่านข้อมูลจากตัวแปร S โดยที่คุณไม่ต้อง initial ค่าอะไร ตัว Grader เป็นคนจัดการยัดค่าให้ และทดสอบกับ Test Case ครับ
  • เลยใช้สลับกับ Online Editor ของ repl.it ครับ ผมว่ามันเจ๋งดี มีให้ตัว Debug กับตัว Command Line ให้ใช้ด้วย
  • Guess and Check
    • Guess - ถ้ามองง่ายๆ มัน คือ การ Brute Force ครับ แต่พลังการคิดประมวลผลของเครื่องจักรมันทำได้ดีกว่าคนครับ
    • Check - เอาตัว Recipe หรือ Agorithm มาช่วยตรวจสอบครับ
    • NOTE: หาเรารู้ Declarative Knowledge บางอย่าง เราสามารถทำให้โปรแกรมของเรา มีประสิทธิภาพ(Efficiency) มากขึ้นได้ครับ

สำหรับ Execise ใน week แรกเยอะอยู่ครับ ผมใช้วิธีเปิด 2 จอ จอแรกเปิดโจทย์ สแกนไว้ก่อน อีกจอดู Video ครับ ถ้าคิดว่าอันไหนใช่ ก็ทำไปด้วยเลยครัย ส่วนตัว Problem Set จากที่ลองทำ ผมยอมรับว่าตกม้าตาย อะไรที่มันคิดว่าดูง่าย อย่างข้อที่ 1 และ 2 ผมทำแป๊บๆเสร์จ แต่ข้อสุดท้ายนี่และ ไปคิดเยอะ เสียเวลาไปต่อคำต้้งนาน พอได้ไปข้างนอก กินข้าว แล้วกลับมา จริงๆ เรานับจุด Start และ End จากนั้นนำมา subString ก็จบแล้ว ด้านล่างนี้เป็น Code ที่ผมเขียนปรับปรุงใหม่ครับ

#หา String ทีมีลำดับของตัวอักษรมากที่สุด เช่น azcbobobegghakl พบว่ามีอักษรที่เรียงติดต่อกันตามลำดับ คือ beggh
#ตัวแปร s ตัว Grader ทำหน้าที่ยัดค่ามาให้
count = 0
maxcount = 0
result = 0

for char in range(len(s) - 1):
    if (s[char] <= s[char + 1]):
        count += 1
        if count > maxcount:
            maxcount = count
            result = char + 1
    else:
        count = 0
startposition = result - maxcount
print('Longest substring in alphabetical order is:', s[startposition:result + 1])

ผมพยายามเขียน Blog ให้ได้ครบทุก Week นะครับ ตอนนี้ขอตัวไปลงตัว Anaconda ก่อน ถ้าใครสนใจลองตามมาเลยครับ MITx's 6.00.1x! Introduction to Computer Science and Programming Using Python


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.