On this page
โปรแกรมรันได้อย่างไร
จาก 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 เหมือนล่ามที่แปลให้สด ๆ ทีละประโยค (เริ่มได้เลย แต่ช้ากว่าหน่อย)
| Compiled | Interpreted | |
|---|---|---|
| ความเร็วตอนรัน | เร็วกว่า | ช้ากว่า |
| เริ่มเขียน/ทดลอง | ต้อง compile ก่อน | รันได้ทันที |
| เหมาะกับ | งานที่ต้องการประสิทธิภาพสูง | เรียนรู้ / ทดลองเร็ว |
Python เป็นภาษาแบบ interpreted เขียนแล้วรันได้ทันที ไม่ต้องตั้งค่าซับซ้อน syntax สั้นอ่านง่ายใกล้ภาษาคน เหมาะกับมือใหม่ที่อยากเห็นผลลัพธ์เร็วและโฟกัสที่ตรรกะมากกว่าไวยากรณ์
โปรแกรมแรกของคุณ
โปรแกรมที่ง่ายที่สุดคือสั่งให้คอมพิวเตอร์แสดงข้อความออกหน้าจอ ธรรมเนียมของโปรแกรมเมอร์ทั่วโลกคือเริ่มด้วยการพิมพ์คำว่า Hello, World!
# ภาษา Python — บรรทัดเดียวจบ
print("Hello, World!")
# ผลลัพธ์: Hello, World!คำสั่ง print คือการบอกให้ "แสดงผล" สิ่งที่อยู่ในวงเล็บออกมา ลองเปลี่ยนข้อความในเครื่องหมายคำพูดเป็นชื่อตัวเองดู คุณเพิ่งเขียนโปรแกรมแรกสำเร็จแล้ว!
เปิด replit.com หรือ programiz.com/python-programming/online-compiler แล้วพิมพ์โค้ดข้างบนกด Run คุณจะเห็นผลลัพธ์ทันทีในเบราว์เซอร์ ค่อยติดตั้ง Python ลงเครื่องทีหลังก็ได้
ขั้นตอนคร่าว ๆ ตอนรันโปรแกรม Python
- เราเขียน source code (ไฟล์ .py) เป็นภาษา Python
- Python แปลงเป็น bytecode (ไฟล์ .pyc — ภาษากลางที่กระชับกว่า)
- Python interpreter (เรียกว่า Python VM) รัน bytecode ทีละคำสั่ง
- สั่งงาน CPU และแสดงผลลัพธ์ออกทางหน้าจอ (output)
นี่คือเหตุผลที่บางครั้งเห็นโฟลเดอร์ __pycache__ โผล่มา — เป็นที่เก็บ bytecode (.pyc) ที่ Python สร้างไว้เพื่อให้รันรอบหน้าเร็วขึ้น ไม่ต้องแปลใหม่
3 ชนิดของ error ที่ต้องแยกให้ออก
เมื่อเขียนโปรแกรมจริง error มี 3 แบบที่ต้องรู้จัก เพราะวิธีแก้ต่างกัน — แยกออกตั้งแต่ต้นช่วยให้ debug เร็วขึ้นมาก (เรื่องนี้ลงลึกในบทถัดไป)
| ชนิด | เกิดเมื่อ | ตัวอย่าง |
|---|---|---|
| Syntax error | เขียนผิดไวยากรณ์ (รันไม่ได้เลย) | ลืมวงเล็บ/colon: print("hi" |
| Runtime error | รันแล้วพังกลางทาง | หารด้วยศูนย์, เปิดไฟล์ที่ไม่มี |
| Logic error | รันได้ ไม่ error แต่ผลผิด | บวกแทนที่จะลบ — ร้ายสุดเพราะไม่มีสัญญาณเตือน |
print("hi" # ❌ Syntax error: ลืมปิดวงเล็บ (รันไม่ได้)
x = 10 / 0 # ❌ Runtime error: ZeroDivisionError (พังตอนรัน)
def average(a, b):
return a + b / 2 # ❌ Logic error: ลืมวงเล็บ ผลลัพธ์ผิดแต่ไม่ error
# ที่ถูก: return (a + b) / 2syntax/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 อย่างไร