Notes & software courses · Free to learn
Aph's Blog
On this page

โปรแกรมรันได้อย่างไร

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

จาก source code ที่คนเขียน สู่ machine code ที่ CPU เข้าใจ — compiler vs interpreter และโปรแกรมแรกของคุณ

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

source code vs machine code

โค้ดที่เราเขียน (เช่น Python, Java) เรียกว่า source code เป็นภาษาที่คนอ่านรู้เรื่อง แต่ CPU เข้าใจแค่ machine code ที่เป็นเลขฐานสอง จึงต้องมี "ตัวกลาง" แปลงให้ ซึ่งมี 2 แบบหลัก

แบบทำงานอย่างไรตัวอย่างภาษา
Compilerแปลทั้งโปรแกรมเป็น machine code ครั้งเดียวก่อนรันC, C++, Go, Rust
InterpreterแปลและรันทีละบรรทัดขณะทำงานPython, JavaScript

เปรียบเทียบ: compiler เหมือนแปลหนังสือทั้งเล่มให้เสร็จก่อนอ่าน (เตรียมนาน แต่อ่านลื่น) ส่วน interpreter เหมือนล่ามที่แปลให้สด ๆ ทีละประโยค (เริ่มได้เลย แต่ช้ากว่าหน่อย)

CompiledInterpreted
ความเร็วตอนรันเร็วกว่าช้ากว่า
เริ่มเขียน/ทดลองต้อง compile ก่อนรันได้ทันที
เหมาะกับงานที่ต้องการประสิทธิภาพสูงเรียนรู้ / ทดลองเร็ว
ทำไมแนะนำเริ่มจาก Python

Python เป็นภาษาแบบ interpreted เขียนแล้วรันได้ทันที ไม่ต้องตั้งค่าซับซ้อน syntax สั้นอ่านง่ายใกล้ภาษาคน เหมาะกับมือใหม่ที่อยากเห็นผลลัพธ์เร็วและโฟกัสที่ตรรกะมากกว่าไวยากรณ์

โปรแกรมแรกของคุณ

โปรแกรมที่ง่ายที่สุดคือสั่งให้คอมพิวเตอร์แสดงข้อความออกหน้าจอ ธรรมเนียมของโปรแกรมเมอร์ทั่วโลกคือเริ่มด้วยการพิมพ์คำว่า Hello, World!

python
# ภาษา Python — บรรทัดเดียวจบ
print("Hello, World!")
# ผลลัพธ์: Hello, World!

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

ลองรันเลยโดยไม่ต้องติดตั้งอะไร

เปิด replit.com หรือ programiz.com/python-programming/online-compiler แล้วพิมพ์โค้ดข้างบนกด Run คุณจะเห็นผลลัพธ์ทันทีในเบราว์เซอร์ ค่อยติดตั้ง Python ลงเครื่องทีหลังก็ได้

ขั้นตอนคร่าว ๆ ตอนรันโปรแกรม Python

  1. เราเขียน source code (ไฟล์ .py) เป็นภาษา Python
  2. Python แปลงเป็น bytecode (ไฟล์ .pyc — ภาษากลางที่กระชับกว่า)
  3. Python interpreter (เรียกว่า Python VM) รัน bytecode ทีละคำสั่ง
  4. สั่งงาน CPU และแสดงผลลัพธ์ออกทางหน้าจอ (output)

นี่คือเหตุผลที่บางครั้งเห็นโฟลเดอร์ __pycache__ โผล่มา — เป็นที่เก็บ bytecode (.pyc) ที่ Python สร้างไว้เพื่อให้รันรอบหน้าเร็วขึ้น ไม่ต้องแปลใหม่

3 ชนิดของ error ที่ต้องแยกให้ออก

เมื่อเขียนโปรแกรมจริง error มี 3 แบบที่ต้องรู้จัก เพราะวิธีแก้ต่างกัน — แยกออกตั้งแต่ต้นช่วยให้ debug เร็วขึ้นมาก (เรื่องนี้ลงลึกในบทถัดไป)

ชนิดเกิดเมื่อตัวอย่าง
Syntax errorเขียนผิดไวยากรณ์ (รันไม่ได้เลย)ลืมวงเล็บ/colon: print("hi"
Runtime errorรันแล้วพังกลางทางหารด้วยศูนย์, เปิดไฟล์ที่ไม่มี
Logic errorรันได้ ไม่ error แต่ผลผิดบวกแทนที่จะลบ — ร้ายสุดเพราะไม่มีสัญญาณเตือน
python
print("hi"      # ❌ Syntax error: ลืมปิดวงเล็บ (รันไม่ได้)

x = 10 / 0       # ❌ Runtime error: ZeroDivisionError (พังตอนรัน)

def average(a, b):
    return a + b / 2   # ❌ Logic error: ลืมวงเล็บ ผลลัพธ์ผิดแต่ไม่ error
# ที่ถูก: return (a + b) / 2
logic error ร้ายที่สุด

syntax/runtime error มีสัญญาณเตือน (โปรแกรมพังหรือฟ้อง) แต่ logic error โปรแกรมรันผ่านสบาย ๆ แค่ให้ผลผิด — จับได้ยากสุด นี่คือเหตุผลที่เราต้องเขียนเทสต์ (เรียนในคอร์สเชิงลึก) เพื่อตรวจว่าผลลัพธ์ถูกต้องจริง

สรุปหัวข้อนี้

  • source code = ภาษาที่คนเขียน, machine code = เลขฐานสองที่ CPU เข้าใจ
  • Compiler แปลทั้งโปรแกรมก่อนรัน (เร็วตอนรัน), Interpreter แปลทีละบรรทัดขณะรัน (เริ่มได้ทันที)
  • Python เป็น interpreted (ผ่าน bytecode .pyc) เหมาะกับมือใหม่ — รันได้ทันที
  • print() แสดงข้อความออกจอ — โปรแกรมแรกคือ Hello, World!
  • error 3 ชนิด: syntax (เขียนผิด), runtime (พังตอนรัน), logic (ผลผิดแต่ไม่ฟ้อง — ร้ายสุด)
แบบฝึกหัด

1) รัน print("Hello, World!") ที่ replit.com 2) เขียนโปรแกรม print แนะนำตัวเอง 2 บรรทัด 3) ลองพิมพ์ผิดดู (เช่นลืมวงเล็บ) แล้วสังเกตว่า error หน้าตาเป็นอย่างไร 4) อธิบายด้วยคำพูดตัวเองว่า compiler ต่างจาก interpreter อย่างไร