มาเขียนแอพ Android ด้วยภาษา Xtend กันเถอะ

อารัมภบท

Xtend เป็นภาษาเขียนโปรแกรมน้องใหม่ที่พัฒนาขึ้นโดยทีม Xtext ภายใต้มูลนิธิ Eclipse (ที่เป็นผู้สร้าง Eclipse ที่เป็น Java IDE ยอดนิยม) โดยมีจุดประสงค์เพื่อที่จะพัฒนาการเขียนโปรแกรมบน Java Virtual Machine ให้ง่ายยิ่งขึ้น สามารถอ่านรายละเอียดเพิ่มเติมได้ที่เวปไซท์ของ Xtend ครับ

ในวันนี้เราจะนำเอา Xtend มาพัฒนาโปรแกรมบน Android กัน อย่างที่น่าจะรู้กันดี โปรแกรมบน Android นั้นจะทำงานอยู่บน Dalvik VM ซึ่งตัวโปรแกรมจะถูกแปลงมาจาก Java Byte Code อีกต่อหนึ่ง ดังนั้นตามหลักแล้วถ้าเรามีโปรแกรมที่คอมไพล์เป็น byte code ได้ก็น่าจะเอามาใช้งานบน Dalvik ได้ไม่ยากนัก

Xtend มีจุดเด่นอยู่ที่ตัวโค๊ดจะถูกแปลไปเป็น Java ก่อนที่จะถูกคอมไพล์เป็น byte code อีกทีด้วย Java Compiler ดังนั้นจึงแน่ใจว่าตัวโปรแกรมจะเข้ากันกับ JVM ได้แน่นอน และสำหรับ Android แล้ว ตัวคอมไพล์เลอร์จะไปเอา byte code มาแปลให้เป็น dalvik byte code อีกต่อนึง

สิ่งที่ควรมี

เนื่องจากว่าคราวนี้จะพูดเน้นไปทางการใช้ Xtend ใน Android มากกว่าจะสอนให้เขียนโปรแกรมที่รันบน Android ดังนั้นผู้อ่านควรมีความรู้ด้านการเขียนโปรแกรมบน Android มาระดับหนึ่ง ไม่เช่นนั้นอาจจะงงได้

และควรจะเข้าไปอ่าน Document ของ Xtend มาบ้าง ไม่เช่นนั้นอาจจะงงได้อีกเช่นกัน

นอกจากนี้ ผู้อ่านควรจะมี Eclipse  อยู่ในเครื่อง และติดตั้ง Android SDK ไว้แล้วด้วยครับ

ขั้นที่ 1 ติดตั้ง Xtend

ในขั้นนี้เราจะเริ่มจากติดตั้ง plugin ของ Xtend ลงไปใน Eclipse การติดตั้งนั้นทำได้ง่ายมากโดการค้นหาคำว่า Xtend ใน Eclipse Marketplace แล้วก็กด Install เท่านั้นเอง (ในรูปมีการติดตั้งเอาไว้แล้วครับ)


เมื่อติดตั้งเสร็จก็ต้องปิดแล้วเปิด Eclipse ขึ้นมาใหม่เพื่อให้ตัว plugin ทำงานครับ

ขั้นที่ 2 สร้างโปรเจคใหม่

ที่จริงเราสามารถแปลงจากโปรเจคที่มีอยู่แล้วก็ได้ แต่เพื่อความสะดวกคราวนี้จะใช้โปรเจคใหม่นะครับ

ก็สร้างเหมือนโปรเจคสำหรับ Android ปรกตินั่นล่ะครับ

ขั้นที่ 3 เริ่มเขียนโค๊ด

ในขั้นนี้เราจะเริ่มลง Code ที่เป็น Xtend จริง ๆ เสียที ใน Demo นี้ผมจะสร้างแค่ Fragment หนึ่งตัวบน Xtend แล้วเพิ่มเข้าใน Activity นะครับ ความจริงแล้วเราสามารถเขียนทั้ง App เป็น Xtend หมดเลยก็ได้ครับ

ผมจะเริ่มจากการเพิ่มคลาสที่เขียนด้วย Xtend ลงไปก่อนนะครับ ก็เลือก New -> Xtend Class ครับ

ขั้นต่อไปก็ใส่รายละเอียดใน Wizard ให้หมดแล้วกด Finish

เราก็จะได้คลาสที่เป็นภาษา Xtend ขึ้นมาหนึ่งตัว ด้วยความที่ Xtend นั้นมีความใกล้เคียงกับ Java มาก ดังนั้นเราก็จะรู้สึกคุ้น ๆ กับคลาสที่มันสร้างขึ้นมาให้

แต่ว่ามันมี Error อยู่ครับ เป็น Error ที่บอกว่าเรายังไม่ได้ import library ของ Xtend เข้ามา Eclipse จะแนะนำวิธีการแก้ไขให้ เราก็แค่ไปคลิกว่าเพิ่ม Xtend library ลงไปใน classpath

แล้วคราวนี้ Error ก็จะหายไปละ

คราวนี้ก็ได้เวลาเขียนโค๊ดแล้วครับ ผมจะสร้างคลาสที่ Derived มาจาก ListFragment ขึ้นมาสักตัว (ในรูปข้างบนผมใส่ Fragment ไว้ แต่ผมเปลี่ยนใจกระทันหัน) แล้วใส่เอาไว้ใน MainActivity เลย

ผมเริ่มจากวางโครงของตัวคลาสโดย override function onActivityCreated กับ onListItemClick ขึ้นมา

บน Xtend นั้นจะใช้ keyword override เป็นตัวบอกว่าเป็นเมธอดที่ override เมธอดใน super class ครับ ข้อที่สำคัญอีกอย่างคือการประกาศเมธอดนั้นไม่จำเป็นต้องใส่ return type ข้างหน้า ตัว compiler จะหาเองว่าฟังก์ชั่นนั้นคืนค่าอะไร (ดูจาก return เป็นหลัก) แต่ถ้ากลัวว่ามันจะหามาผิดเราก็ระบุเองได้เหมือนกัน

ผมจะเริ่มจาก onActivityCreated() ก่อนนะครับ

คงมีคนสงสัยว่า เอ๊ะ ไอ้คลาสนี้มันไม่มีตัวแปรชื่อ listAdapter หรือ activity นี่นา … ครับ นี่คือฟีเจอร์หนึ่งของ Xtend ก็คือ Implicit Property ก็คือ เมธอดที่เป็น getter อย่าง getXXX สามารถถูกเรียกโดยการใช้ การอ้างอิงถึงตัวแปร XXX ได้เลย และเมธอดที่เป็น setter นั้นก็สามารถถูก assign ด้วย operator = ได้เลยเช่นกัน

ดังนั้น ตรงบรรทัดที่ว่า listAdapter = new ArrayListAdapter() เนี่ย จริง ๆ ก็คือการเรียก setListAdapter(new ArrayListAdapter()) นั่นเอง แต่เขียนแบบนี้อ่านง่ายกว่าเยอะครับ

ส่วนตรงที่อ้างอิงถึงตัว resource นั้นเราจะเห็นทั้งเครื่องหมาย :: กับ $ นั้น คือ ถ้าเป็นใน java เราจะใช้ . คั่นทั้งส่วนของ package name, inner class และ static member แต่บน Xtend นั้นจะใช้ $ คั่นเวลาอ้างถึง inner class และ :: สำหรับ package name กับ static member ตรงจุดนี้ผมว่าในอนาคตอาจจะมีการเปลี่ยนแปลงครับ

จากนั้นก็ onListItemClick()

อย่างแรกที่น่าจะเห็นคือ ไม่มี ; ในโค๊ด ครับบน Xtend นั้น ; เป็น optional ใส่ก็ได้ไม่ใส่ก็ได้ ไม่ผิดครับ

สำหรับ method นี้ จะเห็นว่า ตัวแปรค่าคงที่นั้นจะถูกประกาศด้วย keyword val (ส่วน ตัวแปรจะใช้ keyword var) ครับ

ส่วนตรงข้างหลัง val builder = new AlertDialog$Builder นั้นจะเห็นว่ามีเครื่องหมาย => อยู่ เรียกว่า with operator ครับ โดยใช้สำหรับเวลาที่เราต้องเรียกเมธอดของตัวแปรติด ๆ กันหลาย ๆ ครั้ง พอใช้ => แล้วเราสามารถละชื่อตัวแปรตัวนั้นได้ ทำให้ลดความสับสนเวลาอ่านโค๊ดได้มากทีเดียว (ลองนึกภาพเวลาที่เรียกเมธอดบนตัวแปรตัวเดียวกันติด ๆ กันหลาย ๆ ครั้ง แล้วมีบรรทัดหนึ่งที่ไปเรียกตัวอื่นดูนะครับ มันจะงงสุด ๆ เลย)

ส่วนตรงบรรทัดที่เรียก setPositiveButton() นั้น ถ้านึกออก ฟังก์ชั่นนี้มีพารามิเตอร์สองตัวโดยตัวที่สองเป็น interface ที่มี 1 เมธอดที่ชื่อว่า OnClickListener ในกรณีนี้เราสามารถใช้ [ ] หรือ closure แล้วเขียนโค๊ดไปตามปรกติ ตัวคอมไพลเลอร์จะไปหาเองว่า closure นั้นมี type เป็นอะไรเองครับ เรียกได้ว่าสะดวกมากทีเดียว แต่ใช้กับ interface ที่มีหลายเมธอดไม่ได้นะ อันนี้ต้องหาวิธีเลี่ยงเองครับ)

อ้อ ฟังก์ชั่นที่ไม่รับพารามิเตอร์นั้น ไม่ต้องใส่วงเล็บก็ได้ครับ

ถ้ายังงง ๆ ว่าโปรแกรมตรงสองฟังก์ชั่นนี้ทำงานยังไง … ข้างล่างผมมีโค๊ดที่แปลเป็น Java ไว้ให้ ลองอ่านดูครับ

สุดท้ายก็แค่เอา Fragment นี้ไปใส่ใน Main Activity ซะ ผมไม่บอกนะว่าทำไง หาวิธีกันเอง

ขั้นที่ 4 รันโปรแกรม

พอเขียนโค๊ดเสร็จแล้ว ก่อนที่จะรัน … อย่าเพิ่งครับ รันไปตอนนี้ก็เจอ FC แน่ๆ ให้เข้าไปที่ Properties ของโปรเจค แล้วไปที่หมวด Build Path จากนั้นให้สั่ง Export Xtend Library ก่อน

ทีนี้ก็พร้อมที่จะรันแล้ว พอรันขึ้นมาเราก็จะเจอกับหน้าจอแบบนี้ แสดงว่าใช้งานได้แล้ว

แล้วพอจิ้มที่ลิสต์ไอเทมสักอัน ก็จะมี dialog ขึ้นมาครับ แบบนี้

สรุป

สำหรับการนำ Xtend ไปใช้กับโปรเจคที่เป็น Android นั้นเป็นเรื่องง่ายมาก ๆ ครับ โดยมีขั้นตอนดังต่อไปนี้

  1. ติดตั้ง Xtend Plugin ลงไปใน Eclipse 
  2. เพิ่ม Xtend Library ลงไปในโปรเจค
  3. Export Extend Library ในโปรเจค

แค่นี้ ก็เริ่มเขียนโปรแกรม Android ด้วย Xtend ได้แล้วล่ะครับ

แถม

คิดว่าคงมีคนสงสัยว่าโค๊ดข้างบนแต่ละบรรทัดนั้นมีความหมายว่าอย่างไร ผมได้ลองแปลกลับไปเป็น Java ให้ดูเผื่อจะเข้าใจได้ง่ายยิ่งขึ้น โค๊ดนี้ไม่ใช่โค๊ดที่ได้จากการแปลของ Xtend Compiler แต่เป็นการแปลกลับด้วยมือครับผม

โค๊ดที่ได้จากการแปลจาก Xtend นั้นจะไม่สวยขนาดนี้ครับ (นี่สวยแล้วเหรอ ?) แต่ว่ามันก็ไม่ได้มีเอาไว้ให้เราอ่านอยู่แล้วดังนั้นก็คงไม่ต้องสนใจมาก เอาไว้ตอนที่โปรแกรมทำงานผิดพลาดแล้วค่อยไปอ่านดูละกันครับ

ปล. ที่ไม่ลงโค๊ดเป็นตัวหนังสือเพราะจงใจอยากให้อ่านแล้วไปเขียนเองครับ ถ้าก๊อปแปะแล้วมันจะจำไม่ได้น่ะ 😛

[มือใหม่ผู้เชี่ยวชาญ] ปัญหาของคนทำงานในองค์กร

บล๊อกวันนี้เกิดจากการอ่านบล๊อกของฝรั่งคนนึง เป็นเรื่องของการพัฒนาซอฟท์แวร์นี่ล่ะครับ

ในปี 1980 พี่น้องตระกูล Dryfus ได้เสนอโมเดลของการได้รับสกิล โดยพูดถึงเรื่องของการเรียนรู้ กระบวนการ และการฝึกฝน ในโมเดลนี้ได้แบ่งระดับของความสามารถของแต่ละคนออกเป็น 5 ระดับ

1. Novice หรือมือใหม่
2. Advanced Beginner หรือผู้เริ่มต้นที่เริ่มเก่งแล้ว
3. Competent หรือผู้ที่มีความสามารถเพียงพอ
4. Proficient หรือผู้ที่มีความสามารถมาก
5. Expert หรือผู้เชี่ยวชาญ

Eric Dietrich ได้เสนอให้มีความสามารถเพิ่มขึ้นมาอีกระดับนึง โดยเป็นระดับที่แยกออกมาจากสายหลัก เป็นระดับที่พัฒนาขึ้นมาจากระดับ Advanced Beginner แต่ว่าเป็นระดับที่สูงสุดของสายแยก นั่นคือ Expert Beginner

ในโมเดลของ Dryfus นั้นจะวางลำดับความสามารถโดยเเริ่มต้นจากจุดที่ไม่รู้อะไรเลยและทำทุกอย่างตามกฎที่ถูกวางเอาไว้ (Novice) จนกระทั่งสามารถมองภาพรวมทะลุปรุโปร่งและสามารถที่จะทำอะไรได้อย่างเชี่ยวชาญ (Expert) ในระดับที่สอง (Advanced Beginner) นั้นเป็นระดับสุดท้ายที่ยังไม่เข้าใจภาพรวมอะไรทั้งสิ้นและยังคงต้องพึ่งพาอาศัยกฎที่ถูกวางเอาไว้อยู่ ส่วนระดับที่สามนั้นจะเริ่มมองภาพรวมมากขึ้น เป็นจุดที่เริ่มมีความรู้สึกว่ายิ่งรู้ยิ่งไม่เข้าใจ เพราะว่าภาพรวมนั้นมันช่างกว้างใหญ่เหลือเกิน พอเริ่มไปดูตรงนั้นก็จะมีไอ้โน่นไอ้นี่ให้เรียนรู้อีกมากมาย

Expert Beginner ของ Eric ก็คือ คนที่ไม่สามารถพัฒนาตัวเองก้าวจากผู้เริ่มต้นขึ้นมาเป็นคนที่พอจะมีความสามารถ (Competent) ได้ กล่าวคือเป็นคนที่อยู่ในจุดเดิมของตัวเอง ไม่ขึ้นมามองภาพรวม คิดว่าสิ่งที่ตัวเองได้เรียนรู้แล้วคือทุก ๆ อย่าง แล้วก็หยุดพัฒนาตัวเองเอาเสียดื้อ ๆ จากนั้นก็เรียกตัวเองว่า “ผู้เชี่ยวชาญ” ทั้ง ๆ ที่จริง ๆ ก็ทำได้แค่จากกฎที่ถูกวางเอาไว้ก่อนหน้าเท่านั้นแหละ ที่สำคัญคือมักจะมองสิ่งที่ตัวเองไม่รู้ว่าเป็นแค่ของกล้วย ๆ ที่ไม่น่าสนใจ เพราะคิดเอาเองว่าสิ่งที่ตัวเองทำคือทุกสิ่งทุกอย่าง

คนกลุ่มนี้จะรู้เรื่องกฎเกณฑ์หรือวิธีการที่ถูกวางเอาไว้แล้วอย่างชัดเจนและแม่นยำ แต่จะไม่เคยรู้ว่ากฎพวกนั้นถูกสร้างขึ้นมาด้วยเหตุผลอะไร และไม่รู้ว่ากฎที่รู้มาเนี่ยบางทีมันก็ล้าหลังไปจนถึงสมัยพระเจ้าเหาฮ่องเต้มหาราชที่ 2 โน่น

สมมติว่า มีโปรแกรมเมอร์คนหนึ่ง เขาเติบโตมากับ Visual Basic 6.0 ซึ่ง VB6 เป็นทุกสิ่งทุกอย่างที่เขารู้ เขาทำทุกอย่างด้วย VB6 โดยไม่สนใจว่างานที่เขาทำนั้นมันเหมาะสมหรือไม่ 

กฎเกณฑ์ที่ตั้งขึ้นจากผลงานชิ้นหนึ่ง อาจจะไม่สามารถนำไปใช้กับงานอีกชิ้นหนึ่งได้ แต่คนกลุ่มนี้ก็จะยังคงตะแบงใช้แต่วิธีเดิม ๆ ที่ตัวเองเคยรู้มา และสุดท้ายผลลัพท์ที่ได้อาจจะไม่ดีเพราะว่าไม่ได้ปรับเปลี่ยนวิธีตามสถานการณ์และลักษณะฉพาะของผลงานชิ้นนั้น ๆ

สิ่งที่น่ากลัวสำหรับองค์กรก็คือ คนกลุ่มนี้มักจะอยู่กับองค์กร เกาะเก้าอี้ของตัวเองอย่างแน่น เพราะว่าถ้าย้ายไปที่อื่นความรู้และความสามารถของตัวเองก็จะหมดประโยชน์ทันที (ต่างกับ Expert ที่แท้จริงที่สามารถปรับเปลี่ยนวิธีการไปตามลักษณะของโครงการได้ ด้งนั้นย้ายไปไหนก็ทำได้ไม่มีปัญหา) และพอเจอเด็กรุ่นใหม่ๆ ที่มีศักยภาพ น่าส่งเสริม จะมีแนวโน้มว่าคนกลุ่มนี้จะมีพฤติกรรมบางอย่างที่ทำให้เด็กพวกนี้รู้สึกเหนื่อยหน่ายแล้วก็ลาออกไปซะอย่างนั้น ก็จะกลายเป็นว่าในองค์กรก็จะเหลือแต่คนเก่งไม่จริงที่วัน ๆ ก็ทำแค่พยายามรักษาตำแหน่งของตัวเอง กลายเป็นว่าองค์กรก็หยุดพัฒนาไป ก็เหมือนกับคนเป็นโรคมะเร็งนั่นล่ะครับ

อย่างเช่น ถ้าเกิดว่าตาโปรแกรมเมอร์ VB6 ข้างบนได้ขึ้นเป็นระดับหัวหน้า เกิดมีโปรเจคใหม่ที่เป็นเวปแอพลิเคชั่น เขาจะยืนกรานว่า VB6 คือสุดยอดเครื่องมือที่พระเจ้าประทานมา ทั้ง ๆ ที่ลูกทีมส่วนใหญ่พยายามจะเสนอว่ายังมีเครื่องมือที่เหมาะสมกว่าอีกมากในการทำงานชิ้นนี้ ผมเองก็เดาไม่ถูกหรอกว่าถ้าเขียนเวปแอพด้วย VB6 หน้าตาจะเป็นยังไง แต่ก็เดาได้ง่าย ๆ ว่ามันคงเจ๊งไม่เป็นท่าแน่ ๆ

ถ้าผมเจอหัวหน้าแบบนี้ผมคงลาออกทันทีล่ะนะ 555 โชคดีที่ไม่เจอครับ

พุดเรื่องการใช้รถ ใช้ถนน – ลดเรื่องประหลาดใจ/ตกใจให้มากที่สุด

ออกตัวก่อน มุมมองของผมเกี่ยวกับการใช้รถใช้ถนนค่อนข้างจะแตกต่างกับคนไทยในปัจจุบันค่อนข้างมาก ผมจะเป็นคนที่ค่อนข้างรักษากฎระเบียบของตัวเอง คือ ผมจะวางข้อบังคับขึ้นมาจำนวนหนึ่งซึ่งก็จะเพิ่มขึ้นมาจากกฎจราจรขึ้นมาเล็กน้อย ดังนั้นอ่านแล้วอาจจะรู้สึกขัดใจบ้าง แต่ว่าผมจะพยายามอธิบายละกันว่าทำไม

ผมขับรถมานานกว่า 6 ปีแล้ว รถที่ใช้ปัจจุบันเป็น Honda Jazz (2008 SV) อายุสองขวบครับ

ลดเรื่องประหลาดใจ/ตกใจให้มากที่สุด

 ประเด็นนี้เป็นเรื่องของความปลอดภัยล้วน ๆ  ที่จริงบนถนนจะเต็มไปด้วยเรื่องน่าแปลกใจ ทั้งมอเตอร์ไซค์ ทั้งคนเดิมข้ามถนน ทั้งป้ายสัญญาณต่าง ๆ ที่บางทีก็เปลี่ยนไปจนเรางง อุบัติเหตุส่วนใหญ่เกิดจากความประหลาดใจ/ตกใจ ถ้าเราลดเรื่องนี้ไปได้โอกาสที่จะเกิดอุบัติเหตุก็จะลดลงได้มาก

 การข้ามถนน

ข้อแรกที่จะพูดถึงอาจจะไม่เกี่ยวกับคนขับ แต่ก็เกี่ยวกับการใช้ถนน ก็คือ … การข้ามถนน ผมเชื่อว่าวิธีการข้ามถนนที่ถูกต้องคือ “เดินข้ามถนน” เท่าที่สังเกตคนไทยมักจะ “วิ่ง” ข้ามถนน ซึ่งเป็นเรื่องที่อันตรายมาก เพราะว่าการวิ่งข้ามถนนนั้นคนขับรถจะประมาณตำแหน่งของตัวคนข้ามได้ยาก และส่วนใหญ่ก็จะตกใจด้วย บางคนเลือกที่จะขับรถให้ผ่านทางข้ามให้เร็วที่สุดเพราะกลัวว่าจะมีคนข้ามถนน ซึ่งก็เป็นเรื่องที่น่ากลัวขึ้นไปอีก

เมื่อมีรถจอดให้ข้ามถนน เราควรจะเดินข้ามด้วยความระมัดระวัง เพราะบางครั้งก็มีเฉพาะรถเลนซ้ายที่จอดให้ ค่อย ๆ หาจังหวะข้ามไปอย่ากลัวว่าคนขับจะหงุดหงิด (เขาหงุดหงิดชัวร์อยู่แล้ว เพราะว่าการขับรถมันเป็นเรื่องน่าหงุดหงิด) ถ้าเราวิ่งข้ามเลยรถที่มาจากเลนถัด ๆ ไป จะมองเราไม่เห็น และพอเห็นบางทีก็สายเกินไปแล้ว กลายเป็นความคนข้ามถนนไปสร้างความเดือดร้อนให้คนขับรถโดยการเสียสละตัวเองเอาตัวเข้าไปชนรถ (ซะงั้น)

ที่แย่ที่สุดคือ ล้มกลางถนน อันตรายมาก เพราะมุมมองคนขับรถนั้นจะมองไม่เห็นคนที่ล้มอยู่กลางถนน คุณจะโดนรถชนแบบไม่มีการชะลอ และโอกาสตายจะสูงขึ้นอีกโข

ดังนั้น ค่อย ๆ ข้ามถนน ถ้ารถไม่ให้เราไปก็ปล่อยเขาไปก่อน อย่าใจร้อน ที่สำคัญข้ามตรงทางข้ามครับ

หยุดรถให้คนเดินข้ามตรงทางข้าม

สืบเนื่องจากหัวข้อข้างบน การหยุดรถให้คนข้ามถนนนั้นเป็นการลดปัญหาที่เกิดจากคนข้ามถนนวิ่งตัดหน้ารถเรา เมื่อเราเห็นว่าข้างหน้ามีทางแยกก็ควรจะชะลอรถ และถ้าเราอยู่ในเลนซ้ายสุดหรือขวาสุด ก็ดูซะหน่อยว่ามีคนกำลังจะข้ามถนนหรือไม่ ถ้ามีก็หยุดรถ “ก่อนถึงเส้น” นะครับ ให้เขาข้ามไป

สิ่งหนึ่งที่คนไทยมักจะกลัว ไม่ใช่การที่จะมีคนข้ามถนนตรงหน้าหรือไม่ แต่เป็น “กลัวว่าคันหลังจะไล่” หรือเปล่า อันที่จริงคันหลังเป็นอะไรที่เราไม่ต้องแคร์มากเลยถ้าเขาอยู่ในเลนเดียวกับเรา สิ่งที่เราควรกังวลคือข้างหน้ามากกว่า เดี๋ยวจะพูดถึงว่าทำไม

ข้อควรระวังอย่างหนึ่ง คือ บางครั้งถ้าเราเห็นคันหน้าหยุดทั้ง ๆ ที่ถนนโล่ง ๆ (คนขับบางคนมองทะลุกระจกรถคันหน้าครับ ผมก็มอง) “อย่าแซง” โดยเด็ดขาด ถ้าคันหน้าหยุดให้หยุดดูก่อนว่าคันหน้าหยุดทำไม เพราะถ้าคุณไม่ชะลอแล้วแซงเลย แล้วข้างหน้ารถคันหน้ามีคนกำลังข้ามถนน โอกาสที่คุณจะได้กระทำการฆาตกรรมคนเดินข้ามถนนมันก็สูงมากทีเดียว

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

เป็นผู้นำที่ดี เป็นผู้ตามที่ดี

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

สิ่งหนึ่งที่คนไทยชอบทำ เวลาที่จะขับรถตรงไปบนสี่แยก คือ เปิดไฟฉุกเฉิน (หรือบางคนเรียก ไฟผ่าหมาก ซึ่งแค่เรียกก็ผิดแล้ว) เป็นเรื่องที่อันตรายมากเช่นกันครับ เพราะบางครั้งคันหลังไม่รู้ว่าคุณต้องการอะไร ถ้ารถคุณมีอะไรมาบังไฟเลี้ยวข้างซ้าย คันหลังจะเห็นแค่ไฟเลี้ยวข้างขวา เขาจะคิดว่าคุณเลี้ยวขวาและอาจจะแซงซ้ายเพื่อที่จะขับตรงไป (และกลับกัน) ซึ่งในความเป็นจริงคุณกำลังจะขับตรงไป ก็อาจจะไปจ๊ะเอ๋กันตรงกลางได้ นอกจากนั้นแล้วยังเป็นการหลอกรถที่อยู่ทั้งทางฝั่งตรงข้าม ทางซ้ายและทางขวาว่ากำลังจะเลี้ยวไปในฝั่งของตน ทำให้ตัดสินใจผิดได้อีกด้วย เรียกได้ว่าเปิดไฟทีเดียวหลอกรถได้หมดทั้งสี่ทาง

กรณีที่ควรเปิดไฟฉุกเฉินมีอยู่แค่กรณีเดียวครับ คือ จอดอยู่บนไหล่ทาง แล้วเปิดเพื่อเตือนรถคันหลังที่ตามมาว่ารถคุณจอดหยุดนิ่งอยู่ อันที่จริงไฟฉุกเฉินเป็นไฟที่ใช้ขอความช่วยเหลือครับ เปิดไว้เพื่อแจ้งให้รถฉุกเฉินที่ตามมารู้ว่ารถคุณอยู่ที่ตรงไหนเท่านั้นเอง นี่เป็นสาเหตุว่าทำไมไฟฉุกเฉินมันถึงเรียกว่า “ไฟฉุกเฉิน” และอยู่ห่างจากพวงมาลัยรถมากขนาดนั้น

อ้อ ตอนถอยรถนี่ จริง ๆ ก็ไม่จำเป็นครับเพราะว่ารถมีไฟถอยอยู่แล้ว แต่บางทีผมก็เปิดน่ะ ลืมตัว 😛

ในขณะที่ตอนที่เราเป็นผู้ตามเราก็ควรตามอย่างเรียบร้อย อย่าไปไล่บี้คันหน้า อย่าไปเปิดไฟไล่ เราต้องเคารพการตัดสินใจของคันหน้าครับ เพราะเขาจะเห็นสถานการณ์ที่อยู่ตรงหน้าได้มากกว่าเรา ถ้าเห็นเขาชะลอแล้วเราเกิดหงุดหงุดขับแซงขึ้นไปอาจจะเจอดีได้ครับ (เห็นบ่อยแล้ว)

ไม่ได้บอกว่าเราไม่สามารถแซงคันหน้าได้เลยนะครับ แต่ก่อนจะแซงก็ดูเสียหน่อยว่าปลอดภัยหรือยัง ปรกติถ้าคันหน้าไม่ขับช้าจริง ๆ (ขับ 45กม./ชม.บนถนนโล่ง ๆ เลนขวาสุด) หรือไม่ขับกวนประสาทจริง ๆ ผมจะไม่แซงครับ ก็จะปล่อยเขาขับนำไปเรื่อย ๆ ถ้าเขาคิดว่าเขาขับช้าเกินไปส่วนใหญ่เขาจะเร่งขึ้นหรือปล่อยให้เราแซงเองครับ ดังนั้นไม่ต้องห่วง ขับไปเถอะ

ที่จริง ขับตามหลังสบายกว่าขับนำหน้าครับ

รักษากฎจราจร ปฎิบัติตามเครื่องหมายบังคับ และป้ายจราจรต่าง ๆ

เรื่องนี้ที่จริงมันฟังดูปรกติมาก แต่คนไทยเนี่ยทำอยู่ไม่ถึง 50% ของเครื่องหมายบังคับทั้งหมดหรอกครับ เอาง่าย ๆ สีดำขาวที่วาดบนฟุตบาทเนี่ยมีความหมายว่าอะไรคนเกือบครึ่งไม่รู้นะ (ผมก็จำไม่ค่อยได้ 555)

ที่เจอบ่อยที่สุดคือการเปลี่ยนเลนเข้าผ่านเส้นทึบ ก็คือ ละเมิดเส้นทึบ นั่นล่ะครับ เส้นทึบเนี่ยมันบอกว่าเราไม่ควรเปลี่ยนเลนในจุดนั้น (ยกเว้นในกรณีสุดวิสัย) เพราะว่าการเปลี่ยนเลนตรงนั้นอาจจะทำให้เกิดอันตรายได้ เช่น การเปลี่ยนเลนในโค้ง ที่เราไม่เห็นว่าตรงจุดที่ออกจากโค้งนั้นปลอดภัยหรือไม่ ถ้าเราใช้สมาธิกับการเปลี่ยนเลนมากเกินไปก็อาจจะเกิดอุบัติเหตุขึ้นได้

ที่บ่อยพอ ๆ กันคือ สัญญาณลูกศรบนพื้น เข้าใจว่าค่อนข้างยากที่จะสังเกต แต่ถ้าเราขับรถด้วยความเร็วตามที่กฎหมายกำหนด การสังเกตสัญญาณลูกศรบนพื้นที่ไม่ได้ยากเย็นอะไรครับ ตรงนี้จะช่วยลดการสร้างความประหลาดใจให้กับรถคันที่อยู่เลนข้าง ๆ เพราะเขาจะคาดหวังว่า ถ้าเลนข้าง ๆ เขามีลูกศรบังคับไปในทิศทางไหน รถคันทีอยู่ในเลนนั้นก็จะต้องไปทางนั้น ดังนั้น อย่าไปสร้างความประหลาดใจให้กับคนอื่นครับ ไม่เช่นนั้นจะกลายเป็นรถเรานี่ล่ะที่จะเป็นอันตราย

ที่เจอกับตัวคือที่แยกสุนทรโกษาเนี่ยมันเป็นสามแยกที่เลนซ้ายสุดบังคับเลี้ยวซ้าย (ผ่านตลอดด้วย) ส่วนอีกสองเลนที่เหลือบังคับเลี้ยวขวา แต่รถคันที่อยู่เลนซ้ายสุดเกินครึ่งมักจะเลี้ยวขวา อาจจะด้วยสาเหตุที่ว่าเลนขวามันแน่นคนต่อคิวเยอะ หรือเขาคิดว่าเขาจะเลี้ยวซ้ายหลังออกจากแยกก็แล้วแต่ แต่คนที่อยู่ในเลนที่สองเขาก็คิดว่าเขาอยู่เลนนี้เพราะเขาจะเข้าเลนซ้ายสุดเพื่อจะเลี้ยวซ้ายเหมือนกัน ดังนั้นจะเกิดจังหวะจ๊ะเอ๋กันตอนที่ไฟเขียวเลี้ยวขวาขึ้นประจำ ๆ ครับ (ผมมักจะเบียดรถพวกเลนซ้ายนี่ออกไปเลย ถ้าไปตามหลังก็เลี้ยวเข้าไปโรงไม้ซะ) ดังนั้นดีที่สุดคือ ถ้าจะเลี้ยวขวา ก็อยู่เลนที่มีลูกศรเลี้ยวขวาซะ อาจะจต้องต่อคิวนานหน่อยแต่เราก็ไม่ได้ไปโกงคนอื่นใช่ไหมครับ ?

แต่ถ้าเราอยู่ผิดเลนแล้วเข้าไม่ได้ ไม่ว่าจะมีรถอยู่ในเลนข้าง ๆ เยอะมาก หรือว่าเป็นเส้นทึบ ก็ต้องบอกว่า … ขับตรงไปแล้วค่อยหาทางวกกลับมาเป็นทางเลือกที่ดีที่สุดครับ บางคนอาจจะมีเหตุผลว่า รีบ หรือต้องทำเวลา ก็อยากจะบอกแค่ว่าจุดหมายของการเดินทาง คือ ไปให้ถึงที่หมายครับ ถ้าคุณมีจุดหมายแค่ว่าต้องการทำความเร็วคุณอาจจะไปไม่ถึงจุดหมายเลยก็ได้

ผมเองก็เคยหลง อยู่ผิดเลนเหมือนกัน ตอนนั้นจำได้เลยว่าเป็นงานมีทติ้งของ Blognone (Contributor’s Party) ปี 2011 แถวห้าแยกลาดพร้าว ผมบอกเพื่อนว่าเสร็จจากตรงนี้ผมจะไปรับ ปรากฎว่าผมดันอยู่ผิดเลน แทนที่จะไปทางพหลโยธินอย่างที่ตั้งใจ ดันไปอยู่เลนที่บังคับเลี้ยวขวาเข้าวิภาวดีรังสิตครับ ใช้เวลาอีกเกือบชม.กว่าจะวกกลับมาได้ เพื่อนผมนี่งอนตลอดทางเลยครับเพราะต้องเสียเวลารอเป็นชม. (จนตอนนี้ผ่านไปปีกว่าแล้วก็ยังไม่รู้ว่าหายโกรธหรือยังเนี่ย …) ผมงี้แบบเหงื่อตกตลอดทาง ยังเสียใจไม่หายเลยเนี่ยป่านนี้แล้ว 55

แต่ถามว่าถ้าผมเลือกที่จะฝืนเบียดเข้าไปทางซ้ายเพื่อให้ตรงไปพหลโยธินได้ ผมก็จะเสี่ยงการที่จะถูกตำรวจเรียก (ไม่ต่ำกว่า 30 นาที) อาจจะเกิดอุบัติเหตุ (ไม่ต่ำกว่า 3 ชม. ครั้งล่าสุดที่ผมเจออุบัติเหตุที่วิภาวดีรังสิตนี่ผมรอเกือบ 4 ชม.กว่าเรื่องจะจบครับ) หรือแม้กระทั่งผมอาจจะโดนรถใหญ่ชนเสียชีวิตคา Airbag ไปเลยก็ได้

ผมเชื่อว่า ทำให้คนรอชม.นึง ดีกว่าทำให้เขาไม่มีโอกาสจะได้รออีกครับ

วันนี้จบแค่นี้ก่อนแล้วกัน ถ้าวันหน้าผมนึกอะไรออกอีกจะมาเขียนอีกครับ อย่าลืมนะครับ อย่าสร้างเรื่อง Surprise บนถนน เพราะมันอาจจะเป็นครั้งสุดท้ายที่คุณได้ทำมัน