ในโลกของการพัฒนาซอฟต์แวร์ระดับองค์กร มีเรื่องราวไม่กี่เรื่องที่สามารถจับจินตนาการของคนได้เหมือนกับการย้ายภาษาการเขียนโปรแกรมที่กินเวลาหลายปี Bellroy บริษัทที่รู้จักจากกระเป๋าสตางค์บางและอุปกรณ์การเดินทาง ได้ดำเนินโครงการนำ Haskell มาใช้ในวงการอีคอมเมิร์ซที่ถือว่าท้าทายที่สุดเรื่องหนึ่งอย่างเงียบๆ สิ่งที่เริ่มต้นจากการเปลี่ยนผ่านอย่างค่อยเป็นค่อยไปจาก Ruby on Rails นั้นยืดเยื้อมาจนเข้าสู่ปีที่เจ็ด ซึ่งเผยให้เห็นทั้งความท้าทายและรางวัลของการใช้การเขียนโปรแกรมเชิงฟังก์ชันในระดับขนาดใหญ่
บล็อกทางเทคนิคของบริษัทเพิ่งจะเปิดเผยรายละเอียดเกี่ยวกับแนวทางใหม่ของพวกเขาในการจัดการระบบ API ระยะไกลโดยใช้ free applicatives และ handle pattern แต่เรื่องราวที่แท้จริงอยู่ที่บริบทกว้างๆ ของการเดินทางสู่ความเป็นเลิศของ Haskell ตลอดเจ็ดปี
เส้นทางยาวไกลจาก Ruby สู่ Haskell
เรื่องการย้ายระบบของ Bellroy เริ่มต้นด้วยแนวทางที่ดูเหมือนจะปฏิบัติได้จริง นั่นคือการรักษารหัส Ruby เดิมไว้ ในขณะที่ค่อยๆ ย้ายฟังก์ชันการทำงานไปยัง Haskell เมื่อสามารถเพิ่มมูลค่าที่มีความหมายได้ อย่างไรก็ตาม กลยุทธ์นี้นำไปสู่ผลที่คาดไม่ถึง เมื่อบริษัทจ้างนักพัฒนาที่เน้น Haskell เพิ่มขึ้น ความรู้เชิงสถาบันเกี่ยวกับ Ruby ก็ค่อยๆ จางหายไป ชั้นของนามธรรมที่ออกแบบมาอย่างดีในฐานรหัส Ruby ของพวกเขากลายเป็นสิ่งที่ผู้แสดงความคิดเห็นรายหนึ่งบรรยายว่าคือปริศนาทางโบราณคดี
การย้อนรอยเพื่อดูว่าชิ้นส่วนของโค้ดทำอะไรจริงๆ โดยเฉพาะการดำเนินการที่ซับซ้อน มีหลายขั้นตอน และมีผลข้างเคียง กลายเป็นฝันร้าย
กรอบเวลาเจ็ดปีทำให้หลายคนในชุมชนนักพัฒนาประหลาดใจ บางคนตั้งคำถามว่าสิ่งนี้แสดงถึงการย้ายระบบที่ดำเนินการอย่างจริงจังตลอดทั้งช่วงเวลาหรือไม่ หรือเพียงสะท้อนว่าไมโครเซอร์วิสบางส่วนยังคงทำงานได้ดีใน Ruby โดยไม่มีเหตุผลทางธุรกิจที่เร่งด่วนพอสำหรับการแปลงเปลี่ยนในทันที ความจริงดูเหมือนจะเป็นส่วนผสมที่ซับซ้อนของทั้งสองอย่าง โดยความไม่สามารถเข้าใจได้ที่เพิ่มขึ้นของรหัส Ruby สืบทอด ทำให้การผลักดันไปสู่การนำ Haskell มาใช้อย่างสมบูรณ์เร่งตัวขึ้น
วิวัฒนาการของ Technical Stack ของ Bellroy
- Stack เดิม: Ruby on Rails
- Stack ปัจจุบัน: Haskell พร้อม Nix สำหรับ builds/deployment
- ระยะเวลาในการย้ายระบบ: 7 ปี (ยังดำเนินการอยู่)
- รูปแบบ Functional Programming หลัก: Free applicatives, handle pattern, domain-specific languages
การเขียนโปรแกรมเชิงฟังก์ชันในสถานที่ที่ไม่คาดคิด
การเปิดเผยว่าบริษัทผลิตกระเป๋าสตางค์และอุปกรณ์เสริมมีพนักงานพัฒนาที่มีความรู้การเขียนโปรแกรมเชิงฟังก์ชันระดับสูง ก่อให้เกิดความประหลาดใจอย่างกว้างขวาง ตามที่สมาชิกในชุมชนหนึ่งระบุไว้ รู้สึกแปลกที่รู้ว่าร้านอีคอมเมิร์ซ/ร้านขายกระเป๋าสตางค์มีพนักงานที่มีความรู้การเขียนโปรแกรมขั้นสูงกว่าสถาบันการเงินส่วนใหญ่
สแต็กทางเทคนิคของ Bellroy ไม่ได้มีแค่ Haskell แต่ยังมี Nix สำหรับการจัดการการสร้างและปรับใช้ ซึ่งทำให้พวกเขาอยู่ในแนวหน้าของการนำการเขียนโปรแกรมเชิงฟังก์ชันมาใช้ในวงการอีคอมเมิร์ซ ทีมพัฒนาที่ตั้งอยู่ใน Melbourne ได้ยอมรับเทคโนโลยีเหล่านี้ไม่ใช่เพื่อการฝึกหัดทางวิชาการ แต่เป็นโซลูชันเชิงปฏิบัติสำหรับปัญหาธุรกิจจริง
แนวทางของบริษัทในการจัดการระบบ API ระยะไกลเป็นตัวอย่างของจิตวิญญาณนวัตกรรมของพวกเขา โดยการใช้ free applicatives ซึ่งเป็นแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันที่สร้างต้นไม้ไวยากรณ์ของการดำเนินการ พวกเขาสามารถจัดกลุ่มและเพิ่มประสิทธิภาพคำขอ API ได้ ในขณะที่ยังคงรักษาความสามารถในการทดสอบและประสิทธิภาพไว้ Handle pattern ให้ความสามารถเหมือนการ注入การพึ่งพา ทำให้โค้ดสามารถทดสอบได้และเป็นแบบแยกส่วนมากขึ้น
ประโยชน์ทางเทคนิคของแนวทางของ Bellroy
- การวิเคราะห์แบบคงที่ของคำขอ API ก่อนการดำเนินการ
- โอกาสในการรวมกลุ่มและเพิ่มประสิทธิภาพคำขอ
- การทดสอบที่ดีขึ้นผ่านการบันทึก/เล่นซ้ำคำขอ
- การแยกส่วนที่เกี่ยวข้องได้ดีขึ้นผ่านรูปแบบ handle
ปฏิกิริยาจากชุมชนและการอภิปรายทางเทคนิค
การตอบสนองจากชุมชนการเขียนโปรแกรมได้เน้นทั้งความชื่นชมและความสงสัย บางคนตั้งคำถามถึงความฉลาดของการสร้างภาษาเฉพาะโดเมนภายใน Haskell โดยถามว่าทำไมนักพัฒนาไม่ใช้ Haskell โดยตรง บางคนปกป้องแนวทางนี้ โดยชี้ให้เห็นว่า DSLs ช่วยให้เกิดการวิเคราะห์แบบคงที่และโอกาสในการเพิ่มประสิทธิภาพที่การดำเนินการ IO โดยตรงไม่สามารถให้ได้
ผู้แสดงความคิดเห็นรายหนึ่งจับแก่นแท้ของการอภิปรายไว้ได้ว่า การสร้าง DSLs ที่เชี่ยวชาญและถูกจำกัดเป็นรูปแบบทั่วไปและมีประโยชน์สำหรับผู้ที่เขียน Haskell (หรือภาษา FP ใดๆ ที่มี ADTs จริงๆ) ความสามารถในการตรวจสอบและจัดการคำอธิบายการคำนวณก่อนการดำเนินการให้ประโยชน์คล้ายกับนิพจน์ทั่วไปในการประมวลผลสตริง—ซึ่งเป็นแนวทางเชิงประกาศที่เปิดโอกาสให้เพิ่มประสิทธิภาพและการวิเคราะห์
การอภิปรายทางเทคนิคยังกล่าวถึงข้อจำกัดด้วย ตามที่นักพัฒนารายหนึ่งระบุ applicative functors ไม่สามารถแสดงการพึ่งพาระหว่างการคำนวณได้—เมื่อผลลัพธ์ของการเรียก API หนึ่งกำหนดการเรียกครั้งต่อไปที่จำเป็น แนวทางแบบ monadic จึงกลายเป็นสิ่งจำเป็น ข้อจำกัดนี้แสดงถึงทั้งขีดจำกัดและคุณลักษณะของการออกแบบ ที่ส่งเสริมให้นักพัฒนาโครงสร้างโค้ดเพื่อให้สามารถทำงานขนานได้สูงสุด
ไฮไลท์ปฏิกิริยาจากชุมชน
- ความประหลาดใจต่อความรู้ FP ขั้นสูงในบริษัทอีคอมเมิร์ซ
- การถdebateเกี่ยวกับการสร้าง DSL เทียบกับการใช้ภาษาโดยตรง
- คำถามเกี่ยวกับความเป็นไปได้ทางเศรษฐกิจของการย้ายระบบระยะยาว
- คำชมคุณภาพผลิตภัณฑ์ควบคู่ไปกับการอภิปรายทางเทคนิค
ผลกระทบทางธุรกิจจากการเลือกทางเทคนิค
เหนือความสง่างามทางเทคนิคคือเรื่องราวทางธุรกิจที่น่าสนใจ ความสามารถของ Bellroy ในการดึงดูดและรักษานักพัฒนาที่สามารถทำงานกับแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันขั้นสูงได้ บ่งชี้ว่าพวกเขาได้สร้างวัฒนธรรมทางวิศวกรรมที่ไม่เหมือนใคร สำนักงานใหญ่ใน Collingwood ประเทศออสเตรเลีย ได้กลายเป็นศูนย์กลางของความเชี่ยวชาญด้านการเขียนโปรแกรมเชิงฟังก์ชันโดยไม่คาดคิด โดยผู้แสดงความคิดเห็นชาวออสเตรเลียรายหนึ่งระบุว่า การเขียน Haskell ใหม่ n ปี เป็นสิ่งที่ปกติที่สุดเกี่ยวกับพวกเขา
กรอบเวลาในการย้ายระบบทำให้เกิดคำถามเกี่ยวกับเศรษฐศาสตร์ของการเปลี่ยนผ่านดังกล่าว การรักษาฐานรหัสคู่เป็นเวลาเจ็ดปีต้องใช้การลงทุนที่สำคัญ แต่การเติบโตอย่างต่อเนื่องและความเป็นเลิศของผลิตภัณฑ์ของ Bellroy บ่งชี้ว่าพื้นฐานทางเทคนิคสนับสนุนวัตถุประสงค์ทางธุรกิจของพวกเขา ผลิตภัณฑ์กระเป๋าสตางค์ของพวกเขาได้รับความนิยมจากลูกค้าอย่างเหนียวแน่น โดยผู้แสดงความคิดเห็นหลายรายชื่นชมคุณภาพและความทนทานของผลิตภัณฑ์โดยธรรมชาติ
การเดินทางของบริษัทแสดงให้เห็นว่าความเป็นเลิศทางเทคนิคสามารถกลายเป็นข้อได้เปรียบทางการแข่งขันได้อย่างไร แม้สำหรับธุรกิจที่โดยทั่วไปไม่เกี่ยวข้องกับการพัฒนาซอฟต์แวร์ล้ำสมัย ตามที่ผู้แสดงความคิดเห็นรายหนึ่งสังเกต สิ่งที่น่าขันอย่างหนึ่งเกี่ยวกับซอฟต์แวร์คือ สิ่งสวยงามสามารถเกิดขึ้นจากสถานที่ที่ไม่คาดคิดที่สุดได้
อนาคตของการเขียนโปรแกรมเชิงฟังก์ชันในอีคอมเมิร์ซ
ประสบการณ์ของ Bellroy ให้ข้อมูลเชิงลึกที่มีค่าสำหรับบริษัทอื่นๆ ที่กำลังพิจารณาการเปลี่ยนผ่านที่คล้ายกัน กรอบเวลาเจ็ดปีชี้ให้เห็นว่าการย้ายระบบอย่างค่อยเป็นค่อยไปและขับเคลื่อนด้วยมูลค่าสามารถประสบความสำเร็จได้ แต่ก็เน้นย้ำถึงความเสี่ยงของการสูญเสียความรู้สืบทอด ความสำเร็จของพวกเขากับ Haskell และ Nix สาธิตให้เห็นว่าเทคโนโลยีการเขียนโปรแกรมเชิงฟังก์ชันสามารถขับเคลื่อนระบบอีคอมเมิร์ซในโลกจริงได้อย่างมีประสิทธิภาพ
การใช้ free applicatives อย่างสร้างสรรค์ของบริษัทสำหรับการจัดการ API แสดงให้เห็นว่าแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันสามารถแก้ปัญหาธุรกิจจริงได้อย่างไร โดยการสร้างคำอธิบายการคำนวณเป็นโครงสร้างข้อมูลที่สามารถวิเคราะห์และเพิ่มประสิทธิภาพก่อนการดำเนินการ พวกเขาบรรลุทั้งประโยชน์ด้านประสิทธิภาพและความสามารถในการทดสอบที่ดียิ่งขึ้นผ่านการบันทึกและเล่นซ้ำคำขอ
ในขณะที่ภูมิทัศน์การพัฒนาซอฟต์แวร์ยังคงวิวัฒนาการต่อไป การเดินทางของ Bellroy นำเสนอกรณีศึกษาที่น่าสนใจในการสร้างสมดุลระหว่างความเป็นเลิศทางเทคนิคกับความเป็นประโยชน์ทางธุรกิจ ความเต็มใจของพวกเขาในการแบ่งปันทั้งความสำเร็จและความท้าทาย มีส่วนช่วยให้ความรู้ที่มีค่าแก่ชุมชนการเขียนโปรแกรมในวงกว้าง สาธิตให้เห็นว่าโค้ดที่สวยงามและผลิตภัณฑ์ที่ประสบความสำเร็จสามารถเกิดขึ้นจากสถานที่ที่ไม่คาดคิดได้จริงๆ
อ้างอิง: Free applicatives, the handle pattern, and remote systems
