← กลับหน้าหลัก
💻

หลักการเขียนโปรแกรม

1. Logic Tracing: การไล่สายการทำงาน

ทักษะที่สำคัญที่สุดในการทำข้อสอบพาร์ทคอมพิวเตอร์คือการ Trace Code:

🎯 จุดออกสอบบ่อย: โจทย์ตัวอย่าง: x = 5; y = 2; x = x + y; y = x - y; x = x - y; สรุปค่า x และ y คือเท่าใด? (คำตอบ: x=2, y=5 นี่คือการสลับค่าตัวแปรโดยไม่ใช้ตัวแปรพัก)
  • Short-circuit Logic: ในเงื่อนไข && (AND) ถ้าตัวหน้าเป็นเท็จ เครื่องมือจะไม่เช็คตัวหลังเลย
  • Pre-increment vs Post-increment: ++i (บวกก่อนใช้) vs i++ (ใช้ก่อนค่อยบวก)
  • Ternary Operator: (Condition) ? True_Val : False_Val (เช่น x > 5 ? 'Big' : 'Small')

2. โครงสร้างข้อมูล (Data Structures)

ความรู้เรื่องการจัดเก็บข้อมูลในหน่วยความจำ:

Structureลักษณะเด่น (Access Pattern)ตัวอย่างการใช้งาน
StackLIFO (Last In First Out)ปุ่ม Undo, การเรียกฟังก์ชัน (Call Stack)
QueueFIFO (First In First Out)คิวพิมพ์เอกสาร (Printer Spooler), บัตรคิว
ArrayIndex-based Access, Contiguous Memoryเก็บรายการที่มีขนาดแน่นอน เข้าถึงเร็ว O(1)
Linked ListDynamic memory (Node linking)รายการที่เพิ่มลบตรงกลางบ่อยๆ ไม่ต้องจองที่ติดกัน
Tree (Binary Search Tree)Left < Node < Rightการค้นหาข้อมูลแบบ Binary Search
GraphNodes & Edgesแผนที่ GPS, Social Network Connection

3. การเขียนโปรแกรมเชิงวัตถุ (OOP) - Deep Dive

การออกแบบโค้ดเพื่อให้จัดการง่ายและยืดหยุ่น (Reusability):

  • Class vs Object: Class คือแบบร่าง (Blueprints), Object คือสิ่งที่สร้างตามร่างนั้น (Instance)
  • Constructor: ฟังก์ชันพิเศษที่ทำงานทันทีเมื่อสร้าง Object เพื่อกำหนดค่าเริ่มต้น
  • Interface: สัญญาใจที่ระบุว่า Class ต้องทำอะไรได้บ้าง (Method signature) แต่ไม่ได้ระบุว่าทำอย่างไร
  • Abstract Class: คลาสที่สร้าง Object โดยตรงไม่ได้ ต้องมีลูกมาสืบทอดไปทำต่อ
🎯 จุดออกสอบบ่อย: พึงระวัง: Overloading (ชื่อเหมือน พารามิเตอร์ต่าง - Compile Time Poly) vs Overriding (ชื่อเหมือนสืบทอดจากพ่อมาเขียนใหม่ - Runtime Poly)

4. Algorithm & Complexity

การวัดประสิทธิภาพของโปรแกรมด้วย Big O Notation:

  • O(1): คงที่ (เร็วที่สุด) - เข้าถึง Array ด้วย Index, Hash Map lookup
  • O(log n): เร็วมาก - Binary Search (ตัดครึ่งข้อมูลเรื่อยๆ)
  • O(n): เส้นตรง - การ Loop หาข้อมูลใน List 1 รอบ
  • O(n^2): กำลังสอง - Nested Loop (Loop ซ้อน Loop) เช่น Bubble Sort
  • O(n log n): ดีที่สุดสำหรับการ Sort (Merge Sort, Quick Sort)

5. Software Development Life Cycle (SDLC)

วงจรการพัฒนาระบบ:

  • Requirement Analysis: เก็บความต้องการ
  • Design: ออกแบบ UI/DB
  • Implementation: เขียนโค้ด (Coding)
  • Testing: ทดสอบ (Unit, Integration, UAT)
  • Maintenance: บำรุงรักษา
🎯 จุดออกสอบบ่อย: Agile vs Waterfall: Waterfall ทำทีละขั้นย้อนกลับไม่ได้, Agile ทำเป็นรอบๆ (Sprint) ยืดหยุ่นกว่า

6. Flowchart และ Pseudocode - การออกแบบ Algorithm

Flowchart คือแผนภาพการทำงานของโปรแกรม ใช้สัญลักษณ์มาตรฐานแทนการทำงานแต่ละขั้นตอน เป็นเครื่องมือในการวางแผนก่อนเขียนโค้ดจริง

สัญลักษณ์รูปร่างความหมายตัวอย่างการใช้
Terminalวงรี/มนจุดเริ่มต้น (Start) หรือ จุดสิ้นสุด (End)เริ่มโปรแกรม, จบโปรแกรม
Processสี่เหลี่ยมผืนผ้าการประมวลผล/คำนวณsum = a + b, count = count + 1
Decisionสี่เหลี่ยมขนมเปียกปูน (Diamond)ตัดสินใจ (มี 2 ทางออกคือ Yes/No)if x > 10 ?, while count < 5 ?
Input/Outputสี่เหลี่ยมคางหมูรับข้อมูลเข้า/แสดงผลออกInput: รับค่า A, Output: แสดง result
Connectorวงกลมเล็กจุดเชื่อมต่อ (เมื่อ Flowchart ยาวเกินหน้า)ต่อไปหน้า 2
Flow Lineลูกศรทิศทางการทำงานลูกศรชี้ลง = ทำต่อ

Pseudocode คือการเขียนอธิบายขั้นตอนของโปรแกรมด้วยภาษาที่มนุษย์อ่านเข้าใจง่าย ไม่ต้องใช้ไวยากรณ์ของภาษาโปรแกรมจริง

  • ตัวอย่าง Pseudocode หาค่ามากที่สุด:
  • 1. START
  • 2. READ a, b, c
  • 3. IF a > b AND a > c THEN max = a
  • 4. ELSE IF b > c THEN max = b
  • 5. ELSE max = c
  • 6. PRINT max
  • 7. END
🎯 จุดออกสอบบ่อย: จุดออกสอบบ่อย: ข้อสอบมักให้ Flowchart มาแล้วถามว่า Output คืออะไร หรือให้หา Error ใน Flowchart

7. ระบบเลขฐาน (Number Systems)

คอมพิวเตอร์ใช้ระบบเลขฐานสอง (Binary) ในการเก็บและประมวลผลข้อมูล การแปลงเลขระหว่างฐานเป็นทักษะพื้นฐานที่ต้องรู้

ระบบฐานฐานตัวเลขที่ใช้ตัวอย่างการใช้งาน
Binary (ฐานสอง)20, 11010₂ = 10₁₀การทำงานภายในของ CPU, Memory
Octal (ฐานแปด)80-712₈ = 10₁₀สิทธิ์ไฟล์ใน Linux (chmod 755)
Decimal (ฐานสิบ)100-910₁₀ใช้ในชีวิตประจำวัน
Hexadecimal (ฐานสิบหก)160-9, A-F0A₁₆ = 10₁₀รหัสสี (#FF0000), MAC Address

วิธีแปลง Decimal เป็น Binary: หารด้วย 2 เรื่อยๆ จนได้ 0 แล้วอ่านเศษจากล่างขึ้นบน

  • ตัวอย่าง: แปลง 13₁₀ เป็น Binary
  • 13 ÷ 2 = 6 เศษ 1
  • 6 ÷ 2 = 3 เศษ 0
  • 3 ÷ 2 = 1 เศษ 1
  • 1 ÷ 2 = 0 เศษ 1
  • อ่านจากล่างขึ้นบน: 1101₂ = 13₁₀

วิธีแปลง Binary เป็น Decimal: คูณแต่ละหลักด้วย 2 ยกกำลัง (เริ่มจาก 0 ทางขวา)

  • ตัวอย่าง: แปลง 1101₂ เป็น Decimal
  • 1×2³ + 1×2² + 0×2¹ + 1×2⁰
  • = 8 + 4 + 0 + 1 = 13₁₀
⚠️ ข้อควรระวัง: ระวัง! Hexadecimal ตัวอักษร A=10, B=11, C=12, D=13, E=14, F=15 เช่น 1F₁₆ = (1×16) + 15 = 31₁₀

8. Sorting Algorithms - อัลกอริทึมการเรียงลำดับ

การเรียงลำดับข้อมูลเป็นปัญหาพื้นฐานที่สำคัญในวิทยาการคอมพิวเตอร์ มีหลายวิธีที่มีประสิทธิภาพต่างกัน

AlgorithmหลักการทำงานTime Complexity (Worst)SpaceStable?
Bubble Sortเปรียบเทียบคู่ที่อยู่ติดกัน สลับถ้าผิดลำดับ ทำซ้ำจนเรียงหมดO(n²)O(1)Yes
Selection Sortหาค่าน้อยสุดในส่วนที่เหลือ นำมาวางไว้ตำแหน่งแรกO(n²)O(1)No
Insertion Sortหยิบตัวใหม่ไปแทรกในตำแหน่งที่ถูกต้องในส่วนที่เรียงแล้วO(n²)O(1)Yes
Merge Sortแบ่งครึ่งเรื่อยๆ แล้วรวมกลับโดยเรียงไปด้วย (Divide & Conquer)O(n log n)O(n)Yes
Quick Sortเลือก Pivot แบ่งเป็นส่วนน้อยกว่า/มากกว่า แล้วทำซ้ำO(n²) แต่เฉลี่ย O(n log n)O(log n)No
Heap Sortสร้าง Heap แล้วดึงค่า max/min ออกมาเรื่อยๆO(n log n)O(1)No

ตัวอย่าง Bubble Sort ทีละขั้นตอน: เรียง [5, 3, 8, 1]

  • รอบที่ 1: [5,3,8,1] → [3,5,8,1] → [3,5,8,1] → [3,5,1,8] (8 ลอยไปท้าย)
  • รอบที่ 2: [3,5,1,8] → [3,5,1,8] → [3,1,5,8]
  • รอบที่ 3: [3,1,5,8] → [1,3,5,8]
  • ผลลัพธ์: [1, 3, 5, 8] ✓
🎯 จุดออกสอบบ่อย: Stable Sort คือ: ถ้ามีค่าเท่ากัน 2 ตัว ลำดับก่อน/หลังจะยังคงเหมือนเดิมหลังเรียง เช่น (3a, 3b) ยังคงเป็น (3a, 3b)

9. Searching Algorithms - อัลกอริทึมการค้นหา

การค้นหาข้อมูลเป็นอีกหนึ่งปัญหาพื้นฐานที่พบบ่อย มีหลายวิธีตั้งแต่ง่ายไปจนถึงซับซ้อน

Algorithmหลักการข้อกำหนดTime Complexity
Linear Searchค้นหาทีละตัวจากต้นจนเจอไม่ต้องเรียงก่อนO(n)
Binary Searchตัดครึ่งข้อมูลไปเรื่อยๆ จนเจอต้องเรียงก่อน (Sorted)O(log n)
Hash Table Lookupคำนวณตำแหน่งจาก Key โดยตรงต้องสร้าง Hash Table ก่อนO(1) เฉลี่ย

ตัวอย่าง Binary Search: หาเลข 7 ใน [1, 3, 5, 7, 9, 11, 13]

  • รอบที่ 1: กลาง = 7 (index 3), ตรงเลย!
  • ถ้าหา 11:
  • รอบที่ 1: กลาง = 7, 11 > 7 ไปหาฝั่งขวา [9, 11, 13]
  • รอบที่ 2: กลาง = 11, เจอ!
  • Binary Search เร็วมากเพราะตัดข้อมูลออกครึ่งหนึ่งในแต่ละรอบ
⚠️ ข้อควรระวัง: ระวัง! Binary Search ใช้ได้เฉพาะกับข้อมูลที่เรียงแล้วเท่านั้น ถ้ายังไม่เรียงต้อง Sort ก่อน

10. ประเภทของภาษาโปรแกรม

ภาษาโปรแกรมมีหลายระดับและหลายประเภท แต่ละแบบมีข้อดีข้อเสียต่างกัน

ระดับ/ประเภทลักษณะตัวอย่างข้อดี/ข้อเสีย
Low-Level (ระดับต่ำ)ใกล้เครื่อง อ่านยาก เร็วมากMachine Code, Assemblyเร็ว แต่เขียนยาก
High-Level (ระดับสูง)ใกล้มนุษย์ อ่านง่าย ต้องแปลงPython, Java, C#เขียนง่าย แต่ช้ากว่า Low-Level
Compiledแปลงทั้งไฟล์เป็น Machine Code ก่อนรันC, C++, Go, Rustเร็วตอนรัน แต่ต้อง Compile ก่อน
InterpretedแปลงทีละบรรทัดขณะรันPython, JavaScript, Rubyพัฒนาเร็ว แต่รันช้ากว่า Compiled
Structuredเน้นโครงสร้าง Sequence, Selection, LoopC, Pascalเป็นระเบียบ แต่ไม่ยืดหยุ่น
Object-Oriented (OOP)เน้น Object, Class, EncapsulationJava, C++, Pythonยืดหยุ่น Reusable
Functionalเน้น Function ไม่มี Side EffectHaskell, Erlang, LispPredictable แต่เรียนยาก
Scriptingภาษาสคริปต์สำหรับงาน AutomationBash, PowerShell, Pythonเขียนเร็ว ใช้งานเร็ว
🎯 จุดออกสอบบ่อย: จำ: Compiler แปลงทั้งไฟล์ครั้งเดียว (เช่น .c → .exe), Interpreter แปลงทีละบรรทัดขณะรัน (เช่น Python)

11. Error Handling และ Exception

ข้อผิดพลาด (Error) ในโปรแกรมมีหลายประเภท การเข้าใจและจัดการ Error เป็นทักษะสำคัญ

ประเภท Errorเกิดตอนไหนตัวอย่างวิธีแก้ไข
Syntax Errorตอน Compile/Parseลืมปิดวงเล็บ, พิมพ์คำสั่งผิดแก้ไวยากรณ์ให้ถูก
Runtime Errorตอนโปรแกรมทำงานหารด้วยศูนย์, เข้าถึง Array นอกขอบเขตใช้ Try-Catch ดักจับ
Logic Errorโปรแกรมรันได้ แต่ผลผิดสูตรคำนวณผิด, เงื่อนไขผิดDebug ด้วย Print หรือ Debugger
Semantic Errorความหมายไม่ตรงใช้ตัวแปรผิดตัวอ่านโค้ดทบทวน Logic

Try-Catch-Finally: โครงสร้างการดักจับ Exception

  • try { ... }: ส่วนที่อาจเกิด Error
  • catch (Exception e) { ... }: ส่วนที่ทำงานเมื่อเกิด Error
  • finally { ... }: ส่วนที่ทำงานเสมอ ไม่ว่าจะมี Error หรือไม่ (เช่น ปิดไฟล์)
  • throw: สร้าง Exception ขึ้นมาเอง
⚠️ ข้อควรระวัง: Syntax Error ตรวจจับได้ก่อนรัน (Compile Time), แต่ Logic Error ตรวจจับยาก เพราะโปรแกรมรันได้แต่ผลผิด!

12. โครงสร้างข้อมูลขั้นสูง (Advanced Data Structures)

เจาะลึกโครงสร้างข้อมูลที่ซับซ้อนขึ้นเพื่อการใช้งานเฉพาะทาง:

Structureลักษณะเด่นการประยุกต์ใช้
Hash Tableใช้ Key-Value pair, เข้าถึงข้อมูลเร็วมาก O(1)Dictionary ใน Python, Map ใน Java, Caching
Graphประกอบด้วย Node (จุด) และ Edge (เส้นเชื่อ)Social Network, ระบบนำทาง GPS, Network Topology
Heap (Priority Queue)ต้นไม้ที่ Node พ่อแม่ค่ามากกว่า/น้อยกว่าลูกเสมอระบบจัดลำดับงาน (Scheduler), Dijkstra Algorithm
Trie (Prefix Tree)ต้นไม้ที่เก็บตัวอักษรเพื่อค้นหาคำระบบ Autocomplete, Spell Checker
🎯 จุดออกสอบบ่อย: Hash Collision: เกิดเมื่อ Key ต่างกันแต่ได้ Hash Value เดียวกัน แก้ไขด้วย Chaining (ต่อ List) หรือ Open Addressing (หาช่องว่างถัดไป)

13. การเขียนโปรแกรมเชิงวัตถุเชิงลึก (OOP Deep Dive)

ทำความเข้าใจ 4 เสาหลักของ OOP อย่างละเอียด:

  • 1. Encapsulation (การห่อหุ้ม): ซ่อนข้อมูล (Private) และให้เข้าถึงผ่าน Method (Public Getter/Setter) เพื่อความปลอดภัย
  • 2. Abstraction (ความเป็นนามธรรม): ซ่อนความซับซ้อน แสดงเฉพาะสิ่งที่จำเป็น (เช่น ขับรถโดยไม่ต้องรู้กลไกเครื่องยนต์)
  • 3. Inheritance (การสืบทอด): การส่งต่อคุณสมบัติจากแม่สู่ลูก (Reusability)
  • 4. Polymorphism (การพ้องรูป): ชื่อเดียวกันแต่ทำงานต่างกัน (Overloading/Overriding)

Design Patterns: รูปแบบการแก้ปัญหาที่ใช้บ่อย เช่น Singleton (สร้าง Object เดียว), Factory (โรงงานสร้าง Object), Observer (แจ้งเตือนเมื่อข้อมูลเปลี่ยน)

14. พื้นฐาน Functional Programming

แนวคิดการเขียนโปรแกรมที่กำลังนิยม เน้นฟังก์ชันทางคณิตศาสตร์:

  • Pure Function: ฟังก์ชันที่ input เหมือนเดิมต้องได้ output เหมือนเดิมเสมอ และไม่มี Side Effect (ไม่แก้ค่าภายนอก)
  • Immutability: ข้อมูลสร้างแล้วห้ามแก้ไข (ถ้าจะแก้ให้สร้างใหม่) ช่วยลด Bug ในระบบทำงานขนานกัน (Concurrency)
  • Higher-Order Function: ฟังก์ชันที่รับฟังก์ชันอื่นเป็นพารามิเตอร์ หรือส่งคืนฟังก์ชัน (เช่น map, filter, reduce ใน JavaScript/Python)

15. การจัดการเวอร์ชันด้วย Git (Version Control)

เครื่องมือสำคัญสำหรับโปรแกรมเมอร์ยุคใหม่ในการบันทึกประวัติการแก้ไขโค้ด:

คำสั่ง Gitความหมายการทำงาน
git initเริ่มต้นสร้าง Folder .git เพื่อเริ่มเก็บประวัติ
git add .เลือกไฟล์เลือกไฟล์ทั้งหมดเข้าสู่ Staging Area สาหรับเตรียมบันทึก
git commit -mบันทึกบันทึกการเปลี่ยนแปลงอย่างเป็นทางการพร้อมข้อความอธิบาย
git pushส่งขึ้นส่งโค้ดจากเครื่องเราไปเก็บที่ Server (เช่น GitHub)
git pullดึงลงดึงโค้ดล่าสุดจาก Server ลงมาที่เครื่องเรา
🎯 จุดออกสอบบ่อย: Branching: การแตกสาขาโค้ดเพื่อพัฒนาฟีเจอร์ใหม่โดยไม่กระทบโค้ดหลัก (Master/Main)

16. พื้นฐานการพัฒนา API (Application Programming Interface)

ตัวกลางที่ให้โปรแกรมคุยกันเอง:

หัวข้อREST APIGraphQL
รูปแบบข้อมูลJSON (ส่วนใหญ่)JSON
Endpointมีหลาย URL ตาม Resource (เช่น /users, /posts)มี URL เดียว (/graphql)
การขอข้อมูลได้ข้อมูลตามที่ Server กำหนดให้ (อาจมาก/น้อยเกินไป)ขอเฉพาะ Field ที่ต้องการได้ (Flexible)
Methodใช้ HTTP Method (GET, POST, PUT, DELETE)ใช้ Query/Mutation

17. ระดับการทดสอบซอฟต์แวร์ (Software Testing Levels)

  • 1. Unit Testing: ทดสอบหน่วยย่อยที่สุด (เช่น ฟังก์ชันเดียว) โดย Developer
  • 2. Integration Testing: ทดสอบการทำงานร่วมกันของหลายๆ module
  • 3. System Testing: ทดสอบทั้งระบบว่าทำงานถูกต้องตาม Requirement หรือไม่
  • 4. UAT (User Acceptance Testing): ให้ผู้ใช้จริงทดสอบเพื่อตรวจรับงาน