Category Archives: Computers and Internet

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

ผมกับ Amazon Customer Service

กำลังมีปัญหาสั่งของจาก taobao แล้วยังไม่ได้รับ เลยทำให้นึกถึงเหตุการณ์ที่นี้ที่เกิดขึ้นเมื่อ 2 ปีที่แล้ว ช่วงนั้นผมมีโอกาสได้ไปทำงานจากอ๊อฟฟิศของบริษัทที่ซานฟรานซิสโกเป็นระยะสั้น ๆ เพื่อนร่วมงานของผมที่สิงคโปร์ฝากผมซื้อ Kindle และเอากลับไปให้เค้า ด้วยเหตุผิดพลาดนิดหน่อยจึงทำให้ผมได้มีปฏิสัมพันธ์กับฝ่ายบริการลูกค้าของ Amazon อย่างน่าสนใจ เลยอยากจะจดและเล่าให้ฟังก่อนจะลืมมันไปมากกว่านี้ โดยเนื้อหาส่วนมากนำมาจาก email โต้ตอบกันที่ผมยังเก็บไว้อยู่บวกกับสิ่งที่ผมจำได้ อาจจะมีคลาดเคลื่อนและผิดพลาดไปบ้างนะครับ

ผมซึ่ง ณ​ ตอนนั้นไม่มีบัตรเครดิตได้ไปซื้อ Amazon Gift Card และใช้ในการสั่ง Kindle โดยให้มันไปส่งที่อ๊อฟฟิศเพราะบางช่วงเวลาที่ไม่อยู่ที่ที่พักจะไม่มีคนรอรับของ

วันที่ 17 ก.ค.
ผม: สั่ง Kindle ผ่านทางเว็บไซต์ของ Amazon

วันที่ 18 ก.ค.
ระบบ Amazon: แจ้งว่าของได้ถูกส่งออกแล้ว

วันเสาร์ที่ 20 ก.ค.
ระบบ Amazon: แจ้งว่าของได้ถึงมือผู้รับแล้ว

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

วันจันทร์ที่ 22 ก.ค.
ผมไปถึงอ๊อฟฟิศแล้วไม่พบของ ถามใครก็ไม่เห็นผมเลยทำการโทรไปที่ Amazon Customer Service ต่อไปนี้ขอเรียกย่อ ๆ ว่า ACS นะครับ
10:?? – ผม: โทรไปหา Amazon จำเนื้อหาที่คุยไม่ได้ แต่เค้าบอกให้ลองเช็คจากเว็บไซต์ของผู้นำส่งคือ USPS (ไปรษณีย์สหรัฐฯ) ดู
10:58 – ผม: เข้าไปที่ support website ของ Amazon เพราะว่ารอบแรกรู้สึกว่าคุยไม่รู้เรื่อง ถ้าพิมพ์เอาน่าจะง่ายกว่า ผมบอกเค้าไปว่าทางเว็บไซต์ของ USPS บอกว่าของส่งถึงมือผู้รับแล้ว
11:25 – ACS: ส่ง email มาสรุปการสนทนาทางโทรศัพท์ และบอกผมมาว่าให้ผมรอของถึง 5 โมงเย็น ถ้าไม่ได้รับเค้าจะทำการ refund ให้
13:17 – ACS (คนละคน): ตอบที่ผมเข้าไปถามในเว็บไซต์บอกว่าในกรณีนี้เค้าคิดว่าของน่าจะหายแล้ว เค้าตั้งใจจะส่งของมาให้ใหม่แต่พบว่าที่อยู่ของผมมีการเปลี่ยนแปลง* เค้าจึงทำการ request สำหรับการ refund ให้แล้วโดยจะใช้เวลา 2 – 3 วัน ถ้าสั่งใหม่แล้วอยากได้ ship ด่วนใน 1 วันฟรี ให้กดลิงค์นี้…

*ช่วงที่ผมหาของไม่เจอ ผมไป update address นิดหน่อยตรง zipcode โดยแก้ไข block code (code ประจำช่องถนน) จำไม่ได้ว่าทำให้ละเอียดขึ้นหรือลดออก (เข้าใจว่าไม่ต่างกัน)

13:33 – ผม: ตอบเค้ากลับไปว่าผมไม่อยากได้ refund เพราะไม่รู้ว่าจะได้เมื่อไหร่ และกำลังจะออกนอกประเทศในวันที่ 27 แล้วกลัวจะสั่งใหม่ไม่ทัน ช่วยส่งเป็นของใหม่มาให้เลยได้มั้ย ตามที่อยู่ที่เขียนไปให้นี้
15:11 – ระบบ Amazon: แจ้งมาว่า refund สำเร็จ*

*ตรงนี้ผมเข้าใจว่าเพราะเป็น gift card เลยทำการ refund ได้เร็วมาก

15:26 – ผม: ผมตอบกลับไปว่าผมได้รับ refund แล้ว สั่งใหม่ไปแล้วด้วย ไม่ต้องการ ship ฟรี 1 วัน (เพราะตอนนั้นอยู่ในช่วง trial  ของ Amazon Prime ได้ของเร็วอยู่แล้ว)
16:17 – ACS: ตอบผมกลับมาว่า refund ไปแล้ว แก้ไขไม่ได้ให้ผมสั่งใหม่เอง
18:32 – ACS: ตอบกลับมาว่า รับรู้ว่าผมได้รับการ refund และสั่งใหม่แล้ว

วันอังคารที่ 23 ก.ค.
ช่วงสาย ๆ จำเวลาแน่นอนไม่ได้ เพื่อนร่วมงานผมเอา Kindle มาให้บอกว่ามันอยู่ในตู้ไปรษณีย์บริษัท*

* ด้วยความที่ Kindle มันเล็กมากจนใส่ในกล่องไปรษณีย์ของบริษัทประจำตึกได้ (อยู่ในห้องที่รวมตู้รับจดหมาย ๆ ของคนที่อยู่ในตึกนั้น) คนส่งซึ่งเป็นไปรษณีย์ของสหรัฐฯจึงสอดไว้ในตู้เลย

14:11 – ผม: ติดต่อไปที่ support ว่าเจอของแล้ว ขอให้ cancel order ใหม่และไม่ต้อง refund ให้ผมด้วย
17.07 – ACS: ตอบมาว่าไม่ทันแล้วของออกไปแล้ว ก็แค่ไม่ต้องรับของ ของก็จะกลับไป

วันพุธที่ 24 ก.ค.
10:54 – ผม: ตอบกลับไปว่าผมได้ refuse ของตามที่แนะนำแล้ว
11:27 – ACS: ตอบกลับมาว่าโอเค ได้ทำการ refund ให้แล้ว
11:32  – ผม: ตอบกลับไปว่าผมไม่ต้องการ refund ไปอ่านดูการสนทนาก่อนหน้านะ
12:55 – ACS: ตอบกลับมาว่ายกเลิกการ refund แล้ว

เรื่องราวเหมือนจะจบลงแค่นี้ แต่แล้ว

วันที่ 10 ส.ค.
8:55 – ระบบ Amazon: ได้รับของที่คุณคืนมาแล้ว จะทำการ refund ให้
9:25 – ระบบ Amazon: ทำการ refund เรียบร้อย

ผม: Orz

โดยความขี้เกียจที่ต้องไปค้นข้อมูลการสนทนาออกมาอธิบาย และอีกส่วนนึงก็คิดว่าจนถึงตอนนี้ผมคงใช้ค่าแรง man hour ของทีม support ของ Amazon เกินกว่าราคาเครื่อง Kindle ประมาณ $100 ไปแล้ว ถ้ายิ่งตอบกลับไปอีกก็ยิ่งเสียเวลาเค้าไปอีก ยิ่งถ้าเรา request เข้าไปด้วยเหตุการณ์แปลกๆ ที่เค้าไม่เคยเจอเค้าก็จะทำอะไรผิดพลาดเสียเวลาไปกันใหญ่ ผมก็เลยเก็บเครดิตนั้นไว้ แล้วก็เอาไป shopping ของอื่นซะเลย 😀

สิ่งที่ผมได้เรียนรู้จากเรื่องนี้

  • Support policy ของ Amazon สร้างความมั่นใจให้แก่ลูกค้าได้ดีมาก
  • ระบบ support ของเค้ายังมีช่องโหว่อยู่ พอมีหลายคนสลับกันมา อ่าน/ตอบ issue ทำให้เกิดความสับสน โดยเฉพาะการเจอ case แปลกๆ อย่างเช่น การคืนของและไม่ขอ refund

วิดีโอสอนเขียนโปรแกรมด้วยภาษา Python

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

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

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

ขอขอบคุณพี่ปิงและทีมที่สร้างวิดีโอชุดนี้ขึ้นมาท่านอื่น ๆ ด้วยครับ

closure, FP และ OOP

เมื่อวานนี้พูดถึงคำนิยามของ closure ไป วันนี้ผมจะนำมันมาใช้สร้างโค้ดที่มีลักษณะคล้ายโค้ดจากภาษา Object-oriented programming (OOP) ให้ดูครับ

เริ่มต้นด้วยโค้ด OOP บน Ruby ก่อน

class Prepend
  def initialize(start_word)
    @start_word = start_word
  end

  def prepend_for(end_word)
    @start_word + " " + end_word  # Not idiomatic Ruby but should be more familiar for other languages user
  end
end

hello = Prepend.new("Hello")
hello.prepend_for("Tap") # => "Hello Tap"
hello.prepend_for("OOP") # => "Hello OOP"

ผมทำสร้างคลาส Prepend ซึ่งมี constructor method ที่รับพารามิเตอร์ 1 ตัวคือคำแรก (start_word) เก็บไว้เป็น instance variable และสร้างเมท็อด prepend_for ที่รับพารามิเตอร์หนึ่งตัวคือคำท้าย (end_word) นำคำแรกและคำท้ายต่อกัน

Continue reading

1 เดือนกับ tech meetup ใน San Franscisco

มีโอกาสได้มาใช้ชีวิตอยู่ที่ San Francisco เมืองที่มี startup อยู่เต็มไปหมดแบบนี้ เลยขอโอกาสตระเวนเที่ยว office ของบริษัทต่างๆ ด้วยการไปร่วมงาน tech meetup ที่ใช้สถานที่ของบริษัทเหล่านั้นจัดซะหน่อย เป็นกิจกรรมที่ทั้งได้เที่ยว ได้มื้อเย็นฟรี และได้ความรู้ด้วย

Patrick Huntz – Apache ZooKeeper and the Fallacies of Distributed Computing at Airbnb

ได้เปิดหูเปิดตาว่า ZooKeeper คืออะไร หลังจากได้ยินชื่อมานานแล้ว สรุปมันคือ data store ที่เน้น high-availability เป็นสำคัญ ที่น่าสนใจคือเค้าบอกว่ามันไม่เหมาะกับการเป็นทั้ง database และ key-value store เพราะมันไม่เหมาะสำหรับรับ high-traffic เลย เลยรู้สึกว่า use case มันจำกัดมากๆ

สิ่งที่เค้าใช้นิยม implement บน ZooKeeper คือ server configuration management ซึ่งเท่าที่ดูแล้วต้องเป็นระบบที่ใหญ่พอสมควรทีเดียวถึงจะเริ่มมีประโยชน์ ต้องประมาณจัดการ box ของ service ประเภทเดียวกัน 10 กว่า server ขึ้นไป ไม่อย่างนั้นก็น่าจะยังไม่คุ้มกับ overhead ที่ต้อง setup และ maintain

เป็นงานจัดงาน tech talk คร้ังสุดท้ายใน office เก่าของเค้าพอดีก่อนจะย้ายไปที่ใหม่ office มีการจัดมุมนั่งคุยแปลกๆ น่าสนใจอยู่เยอะ แต่ด้วยความที่ก่อนเข้างานเค้าให้เซ็นเอกสารว่าจะไม่ถ่ายรูปหรือนำงานที่เห็นภายในออกไปเผยแพร่ข้างนอก เลยไม่กล้าถ่ายรูปมาเลย

Continue reading

โยนโน้ตบุ๊คเก่าทิ้ง

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

เมื่อ 2 วันก่อนเปิดเครื่องขึ้นมาเตรียมไปทิ้ง พบว่าลง Mint ไว้อยู่ ก็ทำงาน zero fill main harddisk ไป แต่ได้ทำแค่รอบเดียวเพราะขี้เกียจเอาไปต่อกับเครื่องอื่น เนื่องจาก OS ใช้ไม่ได้แล้วหลังจากโดน zero fill

สถานที่ทิ้งคือ ศูนย์ Starhub ชั้น B2 Plaza Singapura โดยทาง Starhub เค้าไปต้ังถัง e-waste ไว้ตามศูนย์บริการกระจายไปทั่วประเทศ หาดูได้จากลิงค์นี้ http://www.starhub.com/corporate/csr/starhubgreenmovement.html ประทับใจมากครับ ถ้ามีโอกาสย้อนเวลากลับไปได้ตอนมาสิงคโปร์ใหม่ ๆ จะไปเป็นลูกค้า Starhub

ไปถึงก็เจอถังแบบนี้

Continue reading

เล่าถึง presentation Optimizing for Happiness by Github founder

แอบตกยุคนิดหน่อย เพิ่งจะมีโอกาสนั่งดู presentation เก่าพอสมควรซัก ปีกว่าๆ 2 ปีได้ ที่ชื่อว่า Optimizing for Happiness โดย Tom Preston-Werner  หนึ่งในผู้ก่อนตั้ง Github ซึ่งเค้ามาพูดถึงการบริหารงานบริษัทที่เค้ายึดหลักความสุขเป็นสำคัญ

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

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

ถ้า search หาหัวข้อการพูดนี้ จะพบว่ามี 2 เวอร์ชั่น อันนึงพูดที่ Startup School จัดโดย YC อีกอันพูดที่คอนเฟอเรนซ์ Ruby ที่อาเจนตินา สไลด์ของอาเจนตินาอยู่ที่นี่ครับ

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

ขอยกช็อตหล่อๆ ช่วงท้ายเวอร์ชันอาเจนตินามาให้อ่านกันนะครับ

เค้าจะพิสูจน์ว่าบริษัทที่จะเจริญเติบโตไปได้อย่างดี ต้อง Optimizing for Happiness

OPTIMIZING FOR HAPPINESS = INVESTING IN HUMANS

INVESTING IN HUMANS = A HAPPY TEAM

A HAPPY TEAM = A GREAT PRODUCT

A GREAT PRODUCT = HAPPY UESRS

HAPPY UESRS = PAYING CUSTOMERS

PAYING CUSTOMERS = MORE MONEY

MORE MONEY = A BETTER ABILITY TO OPTIMIZE FOR HAPPINESS

ใครสนใจเนื้อหาเต็มๆ ก็ลองไปดูไปฟังกันนะครับ

บริษัทไหนทำได้แบบนี้ แล้วหาคนทำงานไม่ได้ เอาผมไปทำงานด้วยเลยเอ้า!