Tag Archives: Haskell

กำลังจะอ่าน Maybe Haskell

กำลังจะเริ่มอ่านหนังสือเล่มนี้ http://maybe-haskell.com/ ไม่คิดมาก่อนว่าจู่ๆ จะซื้อหนังสือ Haskell มาอ่าน แต่ไปหลงพลัง marketing ของคนเขียน จากบทสัมภาษณ์ใน podcast นี้ http://giantrobots.fm/137

เค้าเล่าว่าหนังสือเล่มนี้เล่า Haskell ในวิธีที่ต่างจากเล่มอื่นโดยพยายามอธิบายถึง Functor, Applicative และ Monad ซึ่งผมรู้สึกว่าตรงกับความต้องการพอดี

ส่วนตัวมีความหลังฝังใจกับ Functor นิดหน่อยสมัยพยายามเรียน Haskell เมื่อ 5 ปีที่แล้ว ตอนนั้นเรียนจาก video ชุดนี้ http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals จำได้ว่าเข้าใจเนื้อหาโดยตลอด จนกระทั่งถึงเรื่อง Functor ที่ไม่เข้าใจเลยทำให้เลิกดู video ต่อไป เลยคาดหวังว่าหนังสือเล่มนี้จะแก้เรื่องที่ค้างใจนี้ได้

อีกแรงจูงใจหนึ่งที่อยากศึกษา Haskell ช่วงนี้ เพราะตั้งแต่ต้นปีมานี้ เริ่มเขียน Clojure ในงานมากขึ้น แล้วเริ่มรู้สึกว่าในบางจุด code maintain ยาก สาเหตุหนึ่งน่าจะเป็นเพราะแบ่ง pure function กับ state ได้ไม่ค่อยดี เลยคิดว่าถ้าได้ศึกษา Haskell ดูวิธีการจัดวาง code ที่แยก side-effect ออกซักหน่อย อาจจะพอได้ไอเดียในการจัดวาง code ใน Clojure มากขึ้น

ถ้ามีโอกาสอ่านได้อ่านจนจบแล้วผลลัพธ์เป็นยังไง จะมาเล่าให้ฟังอีกทีครับ

ปล. ถ้าใครสนใจหนังสือเล่มนี้ ใน podcast page มี link สำหรับลด 50% ด้วยครับ

Advertisements

สไตล์ของ parallel programming ในปัจจุบัน

ชี้แจง: จากคำทักท้วงของหลายๆ ท่าน พบว่าจริงๆ แล้ว blog นี้ควรจะชื่อว่า concurrent programming ไม่ใช่ parallel programming อ้างอิงจากคำศัพท์ที่เค้านิยมใช้กันครับ ขออภัยที่ให้ข้อมูลที่ผิดมา ณ​ ที่นี้ด้วยครับ

เมื่ออยู่ในยุคที่การพัฒนาความเร็วของฮาร์แวร์คอมพิวเตอร์เป็นไปด้วยการเพิ่ม core ของ CPU การเขียนโปรแกรมแบบ single thread ก็มีความสามารถไม่เพียงพอต่อการใช้ทรัพยากรของเครื่องให้คุ้มค่าอีกต่อไป เพราะโปรแกรมที่เขียนนั้นจะสามารถใช้งาน CPU ได้เพียงแค่ core เดียว วิธีการเขียนโปรแกรมที่ทำให้สามารถประมวลผลมากกว่า 1 สิ่งต่อหนึ่งช่วงเวลา เพื่อจะได้กระจายงานไปให้แต่ละ core ประมวลผลได้พร้อมๆ กัน เป็นแขนงหนึ่งของ การเขียนโปรแกรมแบบขนาน (parallel programming)

การเขียนโปรแกรมแบบขนานแบบหนึ่งที่เป็นที่นิยมที่สุดในหลายๆ ปีที่ผ่านมา คือ การเขียนโปรแกรมแบบ multi-threading คือการสร้าง thread ขึ้นมาเพื่อทำการประมวลผลแยกจากโปรแกรมหลัก แต่ปัญหาของการเขียนโปรแกรมแบบ multi-threading คือ เป็นการเขียนโปรแกรมที่ต้องการความชำนาญสูง เพราะโปรแกรมอาจจะเกิด race condition หรือ dead lock ได้ง่ายหากเขียนอย่างไม่รอบคอบเพียงพอ ซึ่งส่งผลให้เกิดบั๊กที่หาสาเหตุได้ยาก ทำให้การพัฒนาโปรแกรมเป็นไปได้ช้าและอาจเกิดความผิดพลาดสูง การเขียนโปรแกรมในสไตล์อื่นๆ ที่พยายามทำให้เขียนโปรแกรมแบบขนานได้ง่ายขึ้นจึงได้รับความนิยมมากขึ้นตามลำดับ

Continue reading

[Presentation Summary] Running a Startup on Haskell

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

วันนี้เริ่มต้นด้วย presentation นี้ครับ Running a Startup on Haskell

  1. ผู้พูดเป็น CTO mailrank เป็น startup เล็กๆ อยู่
  2. เขียน Desktop App ด้วย C# เพราะมันจำเป็นต้องเป็น Windows App และไม่ใช้ F# เพราะเค้ายังไม่มั่นใจในความรู้ .Net ของเค้า เลยเลือกสิ่งที่ popular
  3. Backend เขียนด้วย Haskell เพราะถนัด
  4. ก่อนมาทำที่นี่ เค้าเขียน Real World Haskell
  5. เค้ายังเป็นคนเขียน Mercurial: The Definitive Guide ด้วย แต่บริษัทเค้าใช้ Github นะ
  6. บริษัทเค้าเขียน library Haskell ใหม่เองเยอะมาก ผิดจากบริษัท startup ที่ยังไม่ใหญ่มากที่เคยเห็น ที่มักจะเลือกใช้ library ที่มีอยู่มากกว่าจะลงไปเขียนเอง
  7. ในช่วงแรกใช้ data store เป็น Riak
  8. แต่ต่อมาเปลี่ยนเป็น MySQL
  9. การเปลี่ยนใช้เวลาแค่ 2 วัน เพราะตอนเขียน Riak มีสังหรณ์อยู่แล้วว่าอาจจะต้องเปลี่ยน
  10. มีพูดถึงการรับคนว่าการที่มีคนที่บอกว่าเขียน Haskell, Scala, Clojure หรือ Erlang ได้ คนๆนั้นควรค่าที่จะสนใจ เปรียบเทียบกับคนที่มี C# ใน resume ว่ามันไม่ได้บอกอะไรเลย เค้าบอกว่าในยุคหนึ่ง Python ก็บอกได้ แต่ตอนนี้ไม่แล้ว slide

จำได้แค่นี้ ถ้าสนใจมากกว่านี้ เชิญติดตามกันเองครับ

Update: โปรดักของบริษัทคงไม่ได้ออกสู่สาธารณะชนแล้วนะครับ เพราะเค้าโดน Facebook ซื้อตัวไปแล้ว จากข่าวนี้ Founders Of Email Sorting Startup MailRank Head To Facebook