Clojure กับการพิสูจน์ตัวเอง

ผมเคยมีปมในใจอยู่เรื่องหนึ่ง การหัดใช้งานภาษา Clojure จนอยู่ในระดับที่ใช้งานได้อย่างมั่นใจช่วยผมแก้ปมในใจนั้นได้

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

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

หลังจากที่ผมทำงานไปได้ซักพัก ผมเริ่มหาภาษาเขียนโปรแกรมอื่น ๆ มาศึกษา อันเนื่องมาจากเหตุผลหลายอย่างที่ขอยังไม่เล่าในตอนนี้เพราะเดี๋ยวจะออกนอกเรื่องไปไกล ตอนนั้นผมเลือกภาษา Scala เป็นภาษาที่ผมจะหัดเป็นภาษาต่อไป เพราะผมเคยเรียน Functional programming ด้วยภาษา Haskell มาบ้างสมัยเรียนในมหาวิทยาลัยซึ่งผมก็ไม่ค่อยเข้าใจหรอก ที่เลือก Scala เพราะตอนนั้นมันโฆษณาว่ามันเป็นภาษา hybrid ที่รวมทั้งแนวคิด Object-Oritend programming (OOP) และ Functional programming (FP) เข้าด้วยกัน ตอนนั้นผมคิดว่าการเอาสองแนวคิดมารวมกันมันต้องเจ๋งมากๆ เลย ภาษาที่เขียนได้สองแบบก็น่าจะได้เปรียบ ผมโหลดหนังสือ Programming in Scala เถื่อนมาปรินท์อ่าน cover to cover จนจบ เข้าใจบ้างไม่เข้าใจบ้าง พอจบแล้วผมเริ่มหาโจทย์มาหัดเขียน ตอนนั้นผมเลือกหัดเขียนเว็บ โดยผมศึกษา Lift ซึ่งเป็นเว็บเฟรมเวิร์คของ Scala ที่ดังในสมัยนั้น ผลปรากฏณ์ว่าไม่ประสบความสำเร็จ มันยากไป ผมไม่เข้าใจอะไรเลย

ผมไปโหลดวิดีโอสอน Haskell ของ Erik Meijer มาดูหวังว่าจะได้เข้าใจพื้นฐาน FP เพื่อจะเอาไปรวมกับความรู้ OO ที่พอมีอยู่บ้างอาจจะทำให้เข้าใจ Scala ได้มาขึ้น ผมดูวิดีโอถึงเรื่อง Functor แล้วผมก็รู้สึกว่าผมไม่เข้าใจเลย และก็หยุดดูไป

หลังจากนั้นผมได้มีโอกาสทำงานที่ใช้ภาษา Ruby ร่วมกับทีมที่ทำ pair programming กันเป็นประจำ ซึ่งทำให้ผมศึกษาภาษา Ruby ได้อย่างรวดเร็วมาก ตอนนั้นผมคิดว่าทำไม Rails มันเข้าใจง่ายกว่า Lift ขนาดนี้ เพียงแค่เวลาประมาณ 1 ปีผมรู้สึกว่าผมเข้าใจ Ruby มาก ๆ

เมื่อรู้สึกมั่นใจในการเขียนภาษา Ruby แล้ว ผมเริ่มมองหาภาษาต่อไปที่จะศึกษาอีกครั้ง ผมเห็น blog อันหนึ่งมีคนเค้าทดลองเขียนและเปรียบเทียบระหว่างภาษา Scala กับ Clojure ซึ่งในตอนแรกที่ผมอ่าน ผมมั่นใจว่าผลลัพธ์จะต้องออกมาเป็นว่า Scala ดีกว่าแน่นอน แต่ blog นั้นก็ทำให้ผมประหลาดใจเพราะในตอนท้ายผู้เขียนสรุปว่าเค้าชอบภาษา Clojure มากกว่า ตอนนั้นผมคิดว่าภาษา syntax ประหลาดนี่อะนะ ภาษาที่ใช้ syntax เหมือนภาษาที่เกิดตั้งแต่ 40-50 ปีที่แล้วนี่เหรอ จะดีกว่าได้ยังไง ภาษา paradigm เดียวจะดีกว่าภาษา 2 paradigm ได้ยังไง

จุดสำคัญต่อมาที่ทำให้ผมสนใจภาษา Clojure คือมันมีหนังสือที่ชื่อ Joy of Clojure ผมอยากรู้ว่าความ joy นี้มันเป็นอย่างไร แม้กระทั่งภาษา Ruby ที่เค้าบอกว่า optimize for programmer happiness ยังไม่เห็นมีคนเขียนหนังสือ Happy Ruby เลย แล้ว Clojure นี่มันจะ joy ได้ซักขนาดไหน ผมเป็นคนที่แสวงหาความสุขจากการเขียนโปรแกรมอยู่เสมอ อันนี้ก็ขอเก็บไว้เอาไปเขียนได้อีกเรื่องหนึ่งเหมือนกัน ผมตัดสินใจซื้อหนังสือ Joy of Clojure มาอ่าน(รอบนี้ผมซื้อแล้ว😄) ผมอ่านไปได้ประมาณ 1 บทและเปิดข้าม ๆ จนจบเล่ม ผมหาความ joy ไม่เจอ ผมไม่เข้าใจความ joy ของ Clojure ผมไม่เข้าใจ Clojure

ลองนึกย้อนกลับไป ผมพบว่าผมไม่เคยหัดเขียนภาษาไหนได้ประสบความสำเร็จด้วยตัวเองเลย ตั้งแต่ VB, Scala, Haskell มาจนถึง Clojure ภาษาที่ผมเขียนได้อย่างมั่นใจมีแต่ภาษาที่มีคนสอน* อย่างเช่น Java กับ Ruby ผมไม่มีความสามารถในการศึกษาหาความรู้ด้วยตัวเองเหรอ ผมอิจฉาหลาย ๆ คนที่ผมมีโอกาสได้รู้จัก เค้าเหล่านั้นเปลี่ยนอาชีพมาเป็นโปรแกรมเมอร์ทั้ง ๆ ที่ไม่ได้เรียนจบสายคอมพิวเตอร์มา เค้ายังทำได้และเป็นโปรแกรมเมอร์ที่เก่งอีกด้วย ผมทึ่งและอิจฉาในความสามารถของคนกลุ่มนี้มาก ไม่ใช่แค่เรื่องเขียนโปรแกรมเพียงอย่างเดียวผมยังชื่นชมคนที่หัดทำสิ่งยาก ๆ ด้วยตัวเอง (self learner) อย่างอื่น อย่างเช่นการหัดเล่นเครื่องเล่นดนตรีอีกด้วย ผมอยากทำแบบนี้ได้บ้าง ผมอยากพิสูจน์ได้ว่าตัวผมมีความพร้อมที่จะใช้ชีวิตบนโลกนี้ต่อไป โดยไม่ต้องรอให้ใครมาป้อนอะไรให้ ผมอยากที่จะสามารถหัดและทำในสิ่งที่ผมอยากทำ อยากรู้ได้ด้วยตัวเอง

ผมจึงตัดสินใจใช้ภาษา Clojure เป็นการพิสูจน์ตัวเอง เนื่องจากมันมีความต่างและผมรู้สึกว่ามันยากเพียงพอที่ถ้าผมทำได้สำเร็จผมจะมั่นใจว่าผมไม่ได้โกงโดยการเอาสิ่งง่าย ๆ มาหัด ผมซื้อหนังสือ Programming Clojure มาอ่าน ผมทำแบบฝึกหัด 4clojure ซึ่งเป็นแบบฝึกหัดที่ทำให้ผมเริ่มมองเห็นความ joy ในภาษา Clojure โดย ณ เวลานั้นผมชอบเขียนภาษา Ruby มาก หนึ่งในฟีเจอร์ของ Ruby ที่ผมชอบมากที่สุดคือ การใช้งานเมท็อดต่าง ๆ ใน class Enumerable เช่น map, select, inject, group_by และอื่น ๆ อีกมากมาย ซึ่งจริงๆ แล้วมันคือ กลุ่มของเมท็อดที่ได้รับอิทธิพลมาจาก FP ที่พอได้มาทดลองแก้ปัญหาใน 4clojure แล้ว พบว่าสิ่งที่ผมชอบใน Ruby มันเก่งยิ่งกว่าขึ้นไปอีกบน Clojure  ทุกอย่างสั้น กระชับ และเชื่อมต่อกันได้อย่างแนบเนียนมาก และผมก็ติดใจภาษา Clojure ตั้งแต่นั้นเป็นต้นมา

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

•ขณะที่เขียน blog  นี้อยู่ผมนึกขึ้นมาได้ว่าจริง ๆ แล้วก่อนหน้า Clojure มีอีกภาษาหนึ่งที่ผมหัดเขียนเองจนถือว่ามั่นใจระดับหนึ่ง คือ Prolog แต่ตอนนั้นผมได้ใช้ Prolog แค่เพียงเวลาสั้น ๆ ผมจึงยังไม่รู้ไม่มั่นใจว่าตัวเองเข้าใจ Prolog เพียงใด ภาษานี้เลยหายไปจากความคิดในตอนที่ตัดสินใจหัด Clojure

Advertisements

One thought on “Clojure กับการพิสูจน์ตัวเอง

  1. polawat phetra

    มีเพื่อนให้หนังสือ Let over Lambda ของ Doug Hoyte มาเล่มหนึ่ง อ่านยังไงยังไงก็ฝึดไม่เข้าใจ มาเมือต้นเดือนกันยายนนี้หยิบมาอ่านอีกรอบ คราวนี้เข้าใจ(ได้ครึ่งเล่ม)และซาบซึ้งแฮะ

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s