Hardware
น้องๆ หลายคนอาจจะคิดว่าการเขียนโปรแกรมมันยากเย็นแสนเข็ญ ต้องจบ Computer Engineer หรือ Software Developer เท่านั้นถึงจะทำได้ แต่จริงๆ แล้วมันไม่ยากอย่างที่คิดนะ สมัยผมทำร้านเน็ต SiamCafe.net (ตั้งแต่ปี 2540 กว่าๆ) ก็ไม่ได้จบอะไรมาเลย อาศัยครูพักลักจำ ถามพี่ๆ ในวงการ แล้วก็ลองผิดลองถูกเอา
บทความนี้จะมาแนะนำน้องๆ ที่อยากเริ่มต้นเขียนโปรแกรมจากศูนย์ โดยเน้นไปที่เรื่อง Hardware เป็นหลัก เพราะ Hardware มันจับต้องได้ เห็นผลลัพธ์ชัดเจน ทำให้เราเข้าใจหลักการทำงานของโปรแกรมได้ง่ายขึ้นเยอะเลย
น้องๆ ลองนึกภาพตามนะ ถ้าเราเริ่มเขียนโปรแกรมที่มันซับซ้อนมากๆ เช่น Web Application หรือ Mobile App เราอาจจะงงว่าโค้ดที่เราเขียนมันไปสั่งอะไรที่เครื่องกันแน่ แต่ถ้าเราเริ่มจาก Hardware ง่ายๆ เช่น LED, Button, หรือ Sensor เราจะเห็นผลลัพธ์ของการทำงานของโค้ดได้ทันที ไฟติด, ไฟดับ, ค่า Sensor เปลี่ยนแปลง... มันทำให้เราเข้าใจว่าโค้ดที่เราเขียนมันไปควบคุม Hardware เหล่านั้นยังไง
ที่สำคัญคือ การเข้าใจ Hardware มันทำให้เราเข้าใจพื้นฐานของการทำงานของ Computer ด้วยนะ เพราะ Computer มันก็คือ Hardware ที่ถูกควบคุมด้วย Software นั่นเอง
Arduino คืออะไร? มันคือบอร์ดไมโครคอนโทรลเลอร์ขนาดเล็ก ราคาไม่แพง ใช้งานง่าย เหมาะสำหรับมือใหม่ที่อยากเริ่มต้นเขียนโปรแกรมควบคุม Hardwareมากๆ
สมัยผมเริ่มเล่น Arduino ใหม่ๆ ก็งงๆ เหมือนกัน แต่พอได้ลองทำตาม Tutorial ใน Internet ไปเรื่อยๆ ก็เริ่มเข้าใจหลักการทำงานของมัน ทีนี้ก็เริ่มสนุกละ อยากจะต่อ Sensor อะไร อยากจะควบคุม Motor อะไร ก็ทำได้หมด
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Code ข้างบนนี้เป็น Code พื้นฐานที่ใช้กระพริบไฟ LED บนบอร์ด Arduino นะครับ ลองเอาไปใส่ใน Arduino IDE แล้ว Upload ดู จะเห็นว่าไฟ LED บนบอร์ด Arduino กระพริบ
Raspberry Pi คืออะไร? มันคือ Single-Board Computer (SBC) ขนาดเล็ก ที่มี CPU, RAM, และ Storage ในตัว พูดง่ายๆ ก็คือมันเป็นคอมพิวเตอร์เครื่องหนึ่งนั่นแหละ แต่มีขนาดเล็กกว่า และราคาถูกกว่า
สมัยก่อนตอนผมทำร้านเน็ต SiamCafe Blog ผมเคยเอา Raspberry Pi มาทำเป็น Server สำหรับจัดการ User Account ด้วยนะ ใช้งานได้ดีเลยทีเดียว
| คุณสมบัติ | Arduino | Raspberry Pi |
|---|---|---|
| ประเภท | Microcontroller | Single-Board Computer |
| CPU | ช้ากว่า | เร็วกว่า |
| RAM | น้อยกว่า | มากกว่า |
| Storage | น้อยกว่า (ใช้ Flash Memory) | มากกว่า (ใช้ SD Card) |
| Operating System | ไม่มี | มี (Linux) |
| ราคา | ถูกกว่า | แพงกว่า |
| ความซับซ้อน | ง่ายกว่า | ซับซ้อนกว่า |
| เหมาะสำหรับ | งานควบคุม Hardware ง่ายๆ | งานที่ต้องการประมวลผลสูง, งาน Network |
จากตารางจะเห็นว่า Arduino เหมาะสำหรับงานควบคุม Hardware ง่ายๆ ที่ไม่ต้องใช้การประมวลผลมากนัก ส่วน Raspberry Pi เหมาะสำหรับงานที่ต้องการประมวลผลสูง หรือต้องทำงาน Network
Python คืออะไร? มันคือภาษาโปรแกรมระดับสูง ที่เน้นความง่ายในการอ่านและเขียน ทำให้เป็นที่นิยมในหมู่นักพัฒนาโปรแกรมมือใหม่
Python มี Library เยอะแยะที่ช่วยให้เราเขียนโปรแกรมควบคุม Hardware ได้ง่ายขึ้น เช่น RPi.GPIO สำหรับควบคุม GPIO บน Raspberry Pi หรือ PySerial สำหรับสื่อสารกับอุปกรณ์ผ่าน Serial Port
import RPi.GPIO as GPIO
import time
# Set GPIO numbering mode
GPIO.setmode(GPIO.BCM)
# Define GPIO pin for LED
led_pin = 18
# Set LED pin as output
GPIO.setup(led_pin, GPIO.OUT)
try:
while True:
GPIO.output(led_pin, GPIO.HIGH) # Turn LED on
time.sleep(1) # Wait for 1 second
GPIO.output(led_pin, GPIO.LOW) # Turn LED off
time.sleep(1) # Wait for 1 second
except KeyboardInterrupt:
GPIO.cleanup() # Clean up GPIO on exit
Code ข้างบนนี้เป็นตัวอย่างการใช้ Python ควบคุม LED บน Raspberry Pi นะครับ ต้องติดตั้ง Library RPi.GPIO ก่อนนะครับ (pip install RPi.GPIO)
หวังว่าบทความนี้จะเป็นประโยชน์สำหรับน้องๆ ที่อยากเริ่มต้นเขียนโปรแกรมจากศูนย์นะครับ อย่ากลัวที่จะลองผิดลองถูก และอย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog ด้วยนะครับ มีอะไรดีๆ อีกเยอะเลย
สมัยผมทำร้านเน็ตฯ มีน้องคนนึงเขียนโปรแกรมคิดเงินค่าชั่วโมง ตัวแปรชื่อ a, b, c เต็มไปหมด อ่านแล้วงงเต็ก! แนะนำว่าตั้งชื่อให้มันสื่อหน่อย เช่น price_per_hour, time_spent, total_cost จะดีกว่าเยอะ อ่านง่าย เข้าใจง่าย แก้บั๊กง่ายกว่ากันเยอะครับ
// แบบไม่ดี
int a = 10;
int b = 60;
int c = a * b;
// แบบดี
int price_per_hour = 10;
int time_spent = 60;
int total_cost = price_per_hour * time_spent;
อย่าคิดว่าโค้ดเราเขียนเอง เราจะเข้าใจไปตลอดกาล! พอผ่านไปซัก 3 เดือน กลับมาอ่าน โห... นี่มันโค้ดใครวะเนี่ย! เขียน comment อธิบายหน่อยว่าตรงนี้ทำอะไร ทำไมถึงทำแบบนี้ จะช่วยชีวิตตัวเองในอนาคตได้เยอะเลยครับ
// คำนวณราคารวม
int total_cost = price_per_hour * time_spent; // ราคารวม = ราคาต่อชั่วโมง * จำนวนชั่วโมงที่ใช้
อย่าเขียนทุกอย่างไว้ในฟังก์ชันเดียว! แบ่งเป็นฟังก์ชันย่อยๆ ให้มันทำงานเฉพาะอย่าง จะทำให้โค้ดดูเป็นระเบียบ อ่านง่าย และนำกลับมาใช้ใหม่ได้ (reuse) สมมติว่ามีฟังก์ชันคำนวณราคา, ฟังก์ชันแสดงผล, ฟังก์ชันรับค่า ก็แยกๆ มันออกจากกันซะ
// ฟังก์ชันคำนวณราคารวม
int calculate_total_cost(int price_per_hour, int time_spent) {
return price_per_hour * time_spent;
}
// ฟังก์ชันแสดงผล
void display_cost(int total_cost) {
System.out.println("ราคารวม: " + total_cost);
}
Debugger คือเพื่อนแท้ของโปรแกรมเมอร์! เวลาเจอ error อย่ามัวแต่เดา ลองใช้ debugger ไล่ดูทีละบรรทัดว่าค่าตัวแปรเป็นอะไร ทำไมมันถึงเป็นแบบนี้ จะช่วยให้แก้บั๊กได้ไวขึ้นเยอะมากๆ สมัยก่อนไม่มี debugger นี่นั่ง debug กันตาเหลือกเลย
โลกมันเปลี่ยนไปแล้วน้อง! ความรู้ด้านโปรแกรมมิ่งมันสำคัญมากขึ้นเรื่อยๆ ไม่ว่าน้องจะทำอาชีพอะไร ถ้ามีความรู้ด้านนี้ติดตัวไว้ มันจะช่วยให้ชีวิตง่ายขึ้นเยอะมากๆ แถมยังเป็นทักษะที่ตลาดต้องการตัวสุดๆ ด้วยนะ iCafeForex ก็ต้องใช้โปรแกรมเมอร์เก่งๆ ทั้งนั้น
อันนี้แล้วแต่ความชอบเลยน้อง! แต่ถ้าให้แนะนำ Java, Python, JavaScript เป็นภาษาที่ได้รับความนิยมและมี Community ใหญ่ เรียนแล้วมีเพื่อน มีคนช่วยเยอะ แต่ถ้าชอบทำเว็บ ก็เริ่มที่ HTML, CSS, JavaScript เลย
ไม่จำเป็นต้องเก่งขนาดนั้น! แค่มีความรู้พื้นฐานก็พอแล้ว พวกบวกลบคูณหาร ตรรกะง่ายๆ ที่เหลือค่อยๆ เรียนรู้ไปพร้อมกับการเขียนโปรแกรมก็ได้ ผมเองก็ไม่ได้เก่งเลข แต่ก็เขียนโปรแกรมได้สบายๆ
เยอะแยะเลยน้อง! Coursera, Udemy, YouTube มีคอร์สฟรีเยอะแยะให้เลือกเรียน หรือจะลองเข้าไปดูที่ SiamCafe Blog ก็ได้ เผื่อมีบทความดีๆ ที่เป็นประโยชน์
อย่าท้อ! ทุกคนเคยเป็นมือใหม่กันทั้งนั้น สำคัญคือต้องฝึกฝนอย่างสม่ำเสมอ พยายามทำโจทย์ง่ายๆ ก่อน แล้วค่อยๆ เพิ่มความยากขึ้นเรื่อยๆ ถ้าติดตรงไหนก็อย่ากลัวที่จะถาม หาเพื่อน หา Mentor ช่วยกันแก้ปัญหา
การเขียนโปรแกรมมันเหมือนกับการเรียนรู้ภาษาใหม่ ต้องใช้เวลาและความอดทน แต่ถ้าตั้งใจจริง ยังไงก็ทำได้แน่นอน เริ่มจากสิ่งเล็กๆ ทำไปเรื่อยๆ แล้วน้องจะพบว่ามันสนุกกว่าที่คิดเยอะเลย! ขอให้สนุกกับการเขียนโปรแกรมนะครับ!