ศาสนาโปรแกรมเพื่อชีวิตที่ดีกว่า ?

เปิดหัวข้อมาหลายคนอาจจะงง มันมาขายความเชื่อหรือขายฝันอะไรหรือเปล่า 55555

จริงๆ เป็นการบ่นของตัวผมเอง ซึ่งแต่ก่อนมักจะบ่นลงเฟส แต่หัวข้อนี้ยาวเลยมาเขียน blog บ่นแทน กันเพื่อนๆด่า และเผื่อมีประโยชน์กับคนหลงมาอ่านบ้าง

เกริ่นก่อน ผมเองเป็นโปรแกรมเมอร์ newbie เลเวลกากเพิ่งทำงานมาปีกว่า ที่มักจะ panic กับสิ่งที่ตัวเองเลือกหรือเริ่มเรียนตลอดเวลา (เฉพาะในเชิง programming)

เพราะอะไรถึงรู้สึกแบบนั้น?

  1. อย่างที่รู้ๆ กันว่าศาสตร์แห่ง programming มันมาไวไปไวมาก trend ของภาษาหรือ framework ใหม่ๆ เราไม่รู้จะเลือกทางไหน(แน่นอนของใหม่มัน”มักจะ”ดีกว่าของเก่าเสมอๆ ซึ่งดีกว่ายังไงขอติดไว้ก่อนให้นึกซะว่าผมพูดว่าดีกว่าลอยๆ)
  2. ผมรู้สึกตัวเอง out หรือตกยุค เวลามีเทคโนโลยีใหม่ๆมามีแต่คนพูดถึง และผมไม่มีความรู้ในด้านนั้น ซึ่งบางทีในแง่ความเป็นจริงความรู้เทคโนโลยีที่ผมกำลังใช้งานอยู่เป็นสิ่งที่ยังใช้งานกันแพร่หลาย คนใช้กันเยอะกว่าความรู้ใหม่ด้วยซ้ำ
  3. ผมรู้สึกสกิลการเรียนรู้ผมค่อนข้างต่ำ ผมรู้สึกด้อยกว่าคนอื่นไม่สามารถเรียนเรื่องๆนึงแล้วยัดใส่หัวได้เร็ว วันนึงเต็มที่ที่รับไหวประมาณ 4–5 ชม ต่อวันก็เต็มกลืนแล้ว(อันนี้คือเสาร์ อาทิตย์ หรือวันหยุดนะ วันธรรมดาที่ไปทำงานนี่ 1 ชั่วโมงครึ่งก็เก่งละ ปล.ไม่นับเรื่องที่ได้เรียนจากที่ทำงานนะ) อาจจะเพราะอ่อนภาษาด้วยกำลังพยายามอยู่
  4. ผมเคยมีความเชื่อว่า “จงเลือกเทคโนโลยีที่ดีที่สุดที่เข้ากับงาน” (มันก็ไม่ผิดแต่ปัจจุบันไม่คิดแบบนั้นแล้ว 555) โดยไม่เจียมตัวเองในด้านความรู้เลย

เล่าย้อนความ

ประมาณสองเดือนก่อนผมมีโอกาสได้อ่านบทความๆนึง ที่แชร์ๆกันมาตามเฟสคือ hype-driven-development อ่านจบแล้วรู้สึกได้ว่า เชดเข้นี่มันกรูนี่หว่า 555555555555555 แถมตอนจบยังมีประโยค “hype is stronger with young developers” โอ้ยกรุมัน programmer ขั้นกากเดน ไม่มีประสบการณ์ กระแดะตามของใหม่ไปเรื่อย (มีเคสตัวอย่างของตัวเองอยู่ว่างๆเดี๋ยวมาเขียนลงอีกที)

ซึ่งอ่านจบก็สงสัยว่าทำไมเป็นแบบนั้น ?

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

ขอยกเคสๆนึงมาเล่า

ประมาณปีก่อนตอนผมเข้ามาทำงาน ผมโดน assign งานให้เขียน angular เพื่อทำหน้า web แยกออกมาให้เข้าใช้งานกับ RESTful API ซึ่งจริงๆช่วงนั้น Vue, React ก็เริ่มมาแล้วแต่ยังไม่เปรี้ยงปร้างเท่าปัจจุบัน และ angular 2 ยัง beta อยู่ ตอนที่เพิ่งเข้ามาทำงานส่วนตัวเคยเขียนแต่พวก PHP(cake) หรือ node framework(sails) หรือ java(JSP) มาก่อน frontend framework เป็นอะไรที่ใหม่สำหรับผม ผมเลยไม่ได้มีคำถามกับการเลือก tools เท่าไหร่คนอื่นฟันมาแล้วว่าดีก็ว่าตามกัน ซึ่งช่วงแรกๆ ตอนที่หัด angular และทำงานไปเรื่อยๆ ก็มีความสุขดีจนกระทั่งตัว web มันเริ่มใหญ่และละเอียดอ่อน

ผมเริ่มไม่มีความสุขกับการเขียน angular

เพราะหลักการ การ bind data ใน angular 1 ค่อนข้างมีปัญหาและละเอียดอ่อน (บางทีอาจเพราะผมศึกษามันก่อนใช้งานไม่มากพอ) ซึ่งการส่งผ่าน data ไปที่ directive ถ้าส่งค่าไปใน directive และต้องการเปลี่ยนค่าภายหลัง ค่านั้นๆต้องอยู่ในรูปแบบ attribute ของ object ซึ่งจะ bind กับ ค่าธรรมดาที่ไม่ใช่ attribute ก็ได้แต่ต้องไม่ไปอยู่ซ้อนใน ng-if หรือ ng อื่นๆ อีกที (แน่นอน project แรกของความรู้ใหม่ แล้ว design pattern ไว้แล้วเพิ่งมารู้เรื่องนี้ทีหลัง เละเกือบทั้ง web แถมตัว web ยังไปเอา monarchUI มาใช้แล้วโดน customize แหลกลาญอีก assets รกๆ เต็มไปหมด ปัจจุบันก็ยังคงไม่ได้แก้เขียนใหม่ Y.Y)

นอกจากผมจะเขียนตัว web angular แล้วผมยังเขียนตัว RESTful API ด้วย node, mongo ซึ่งจากการสังเกตุตัวเองช่วงนั้นกลับกลายเป็นว่าผมมีความสุขกับการเขียน backend มากกว่าไปซะงั้น จนมีงาน web อีก project ให้ทำ ผมเริ่มคิดว่าผมต้องปฎิวัติตรงนี้ ผมตัดสินใจเปลี่ยนจาก angular เป็น angular2 ทำไมถึงเลือก? ผมดูแล้วว่าปัญหา แยก directive เป็น component ของ angular ใน angular2 ได้กำจัดปัญหานั้นไปแล้ว ส่วนทำไมไม่เลือก Vue, React เหตุผลอาจจะฟังดูงี่เง่า แต่คือผมไม่สามารถอธิบายให้คนในทีมเข้าใจได้ว่า Vue กับ React มันดีกว่า angular ยังไง ซึ่งตอนนั้น บทความที่ให้น้ำหนักในเรื่องนี้มันก็พอมีอยู่บ้าง แต่แน่นอนด้วยชื่อ angular ที่เหมือนเดิมการเปลี่ยนเลขเวอร์ชั่น มันทำให้คนในทีมรู้สึกปลอดภัยกว่า ทั้งๆที่จริงๆแล้ว ทั้ง concept และวิธีเขียนมันไม่เหมือนเดิมเลย

หลังจากเขียน angular2 ผมทำผิดพลาดครั้งใหญ่ ผมไม่สามารถ handle งานที่ใช้ความรู้หลายๆด้านให้ออกไปได้ดีได้ เพราะตอนนั้นผมต้องแก้ web เดิมที่ใช้ angular1 นั่งแก้ backend แทรก ทำให้งานที่ใช้ angular2 ของผมไม่เสร็จไปตามเวลา

แต่หลังจากงานเสร็จ ผมรู้สึก happy กับ angular2 ผมรู้สึกมันแยก component เป็นสัดส่วน code ที่ผมเขียนเองมันอ่านง่าย มันสามารถ reuse ได้ด้วยตัว component ของมันเอง เวลาจะเอาไปใช้ที่อื่น มันเขียนเป็น micro service มากขึ้นเยอะ (จริงๆ อาจจะไม่ดีก็ได้ใครจะรู้ แต่ผมมีความสุขกับมันระดับนึง)

อ่าวมีความสุขขึ้นก็ดีแล้ว แล้วไหนบอก panic?

ผมรู้สึกตัวเองเลือกผิดตอนผมไปเล่าให้คนอื่นฟังว่าผมใช้ angular2,4นะ กลุ่มคนที่ใช้ React ก็จะบอกว่า angular2,4 มันห่วย มันเป็น typescript ทำไมต้องเรียนภาษาเพิ่มอีกภาษาเพื่อเขียนมันด้วย แถม angular ไม่มี Product ที่ Google ใช้งานจริงแต่ React พิสูจน์ตัวเองด้วย facebook แล้วแถม TDD กำลังจะตาย ??????

ให้ทายฟังจบผมรู้สึกยังไง? แน่นอนด้วยความ hype ส่วนตัวกลับบ้านกรุนั่งอ่าน React เลยจ้า ผลลัพธ์เป็นยังไงนะเหรอ? 5555 อ่านได้ไม่เท่าไหร่ก็เลิกอ่านเพราะรู้สึกมีสิ่งสำคัญกว่านั้นต้องศึกษา

ขอเล่าอีกเคสนึงสั้นๆ ให้มันดูเยอะขึ้นหน่อย

functional programming ผมจำได้ว่าผมเข้าใจคำนี้ครั้งแรกตอนไปกินข้าวกับพี่ที่รู้จัก ที่เดอะสตรีทโดยก่อนหน้านี้เคยได้ยิน concept ของ high-order function ของ javascript มาบ้าง โดยพี่เค้าบอกว่า functional programming มันกำลังมา อีกห้าปีถ้ายังไม่มีความรู้ด้านนี้ นายตกงานแน่นอน ด้วยประโยคในตอนนั้นทำให้ผมก้าวเข้าสู้ความ hype เต็มตัว distributed, immutability, scaleable โอ้โหนี่มัน keyword ของความ hype ชัดๆ 555555 โอเคมันก็ไม่ได้ผิดหรือดูแย่ขนาดนั้น แต่ทำไมผมรู้สึก panic นะเหรอ? เอาง่ายๆเลย ผมศึกษามันทั้งหมดไม่ทันคนอื่น…

เคยรู้สึกกังวลมั้ย เราจะเลือกเรียนอะไรดี เราจะเลือกใช้อะไรดี แล้วเราควรจะใช้มันไปนานแค่ไหน?

เป็นสิ่งที่ผมยังคงกังวลเสมอมา แล้วก็มีพี่ที่รู้จักส่งคลิปๆนึงมาให้ดู RailsConf2017 มันคือ Keynote โดย David Heinemeier Hansson ที่คนเค้าเกลียดกันทั่วบ้านทั่วเมืองนั้นแหละ 5555 แต่โอเคหลังจากที่ผมดูผมรู้สึกว่าแนวคิดของเค้าในแง่นี้ก็ดี เอามาประยุกต์ให้เข้ากับเราได้ ถึงแม้จะรู้สึกว่าเค้าพูดเพื่อบอกให้คนใช้ Rails ต่อไปก็เถอะ โดยตา DHH บอกให้เวลาเราเลือกที่จะเรียนอะไรให้เราดูว่า เทคโนโลยีนั้นๆ ให้ value กับอะไร (เช่น Rails บอกว่า เพื่อให้ programmer มีความสุขในการ program , python มี Zen of python) แล้วตัวเราเองให้ value กับอะไรในแง่ของ programming คือประมาณว่าถ้าเราอยากมีความสุขในการ program แล้ว rails มันยังรักษาและปรับปรุง value นี้ไปเรื่อยๆ เราก็ควรจะใช้ rails ไปเรื่อยๆ จนกว่า value เราจะ “เพิ่มขึ้น” หรือ ”เปลี่ยนไป” จน rails ไม่ตอบโจทย์ เราควรจะทำให้เหมือนที่เรานับถือศาสนา เรายึดถึอตามแนวคิดของศาสนา(อันนี้ผมอาจจะไม่เห็นด้วยหมด แต่ขอยกตัวอย่างที่ผมได้แนวคิดมาละกัน) โดยส่วนตัวแล้วผมไม่ได้กระตือรือล้นนับถือศาสนาอะไรเป็นพิเศษ ยังนับถือศาสนาพุทธอยู่เพราะพ่อแม่มีความสุขถ้าผมนับถือ แต่ก่อนผมเคยให้ value กับตรงนี้ว่าทำบุญสะสมบุญเยอะๆ จะได้ขึ้นสวรรค์ แน่นอนแนวคิดนี้ไม่ผิด แต่แนวคิดผมเปลี่ยนไปตอนไหน? ตอนที่ผมรู้สึกว่า ผมไม่สามารถเชื่อใจพิธีกรรมทางศาสนาของวัดบางวัดได้ บางอันกลายเป็นโบถส์ ที่หรูเกินความจำเป็น ผมกับค้นพบว่า ผมไม่ได้เชื่อเรื่องสวรรค์ แต่การช่วยเหลือคนอื่นมันทำให้ผมรู้สึกมีความสุขขึ้นจากความสัมพันธ์ที่เกิดขึ้นจากจุดที่ผมช่วยเหลือ (สังเกตุมั้ยว่า value ผมเปลี่ยนไปถ้ามองในเชิง programming แน่นอนถึงจุดที่คุณควรจะเปลี่ยน technology แล้ว) ตา DHH ก็ยกคำพูดของใครสักคนผมจำไม่ได้มาอีกว่า ถ้า value มันเปลี่ยนกันบ่อยๆ ในระยะเวลาสั้นๆ สิ่งนั้นมันก็ไม่สามารถเรียกว่า value ที่เรายึดถือได้ ซึ่งการมี value ของตัวเองไม่ตามสังคมจะทำให้เราไม่ต้องกระเสือกกระสน ศึกษาสิ่งใหม่ๆ ที่ประเคนมาทุกวัน แต่ศึกษาแค่ที่เราไหวตามตัวที่เรายึดถือ value ของมันก็พอ :)

หลังจากดูแล้วหาย panic มั้ย ความ hype หายไปหรือเปล่า?

บอกตามตรงว่าผมก็ยังคง panic กับมันอยู่แต่ก็พอจะมีอะไรให้ยึดถือมากขึ้น ไม่งั้นก็จะจับฉ่ายไปจับไอ้นู้นไอ้นี่ แบบแปปๆพอรู้สึก panic แล้วก็ปล่อยไปจับอันใหม่ ซึ่งตรงนี้ต่างหากที่เสียเวลาของแท้ ส่วนความ hype นั้นเป็นนิสัยเสีย 5555 ล่าสุดเดือนก่อนพยายามหา ภาษาใหม่มาเรียน เพราะตอนแรก functional อ่าน concept ไม่จบดียังไม่ได้ลงลึกขนาดรู้เรื่องจริงๆ ก็ไม่มีเวลาอ่านต่อเลยลังเลจะเอาอันไหนดี clojure หรือ จะไป procedural แบบ go เลยดี ไปอ่านเจอข้อความนึงใน stackoverflow มั้ง บอกว่า clojure แม้ performance จะสู้ไม่ได้ แต่มัน change my life และทำให้เค้าสนุกกับการเขียนโปรแกรมมากขึ้น (โดนขายอีกละ เลยลองไปทางนี้ดู 555)

ปล. มีเรื่องที่ตา DHH ยกตัวอย่างอาหารบุฟเฟต์ มาด้วยซึ่งผมก็เห็นด้วย เวลาเราไปกินอาหารบุฟเฟต์ เราก็จะชิมอันที่เราอยากกินก่อน แล้วถ้ามันติดใจเราค่อยกินมันจริงจัง แน่นอนเราไม่สามารถกินมันจริงจังมันทุกอย่างได้ ซึ่งบางทีสิ่งที่คุณเลือกมันก็ไม่ได้ตอบโจทย์ของคนส่วนใหญ่ แต่ถ้ามันตรงกับ value ของคุณทำไมคุณถึงจะไม่มีความสุขละ? :P