ทำไมเราถึงเลือกใช้ Scala

champillon
Billme Venture
Published in
2 min readSep 4, 2018

“แชมป์ คุณลองดูสิ ในแต่ละ Domain ของธุรกิจ มีภาษาเฉพาะ

หมอก็จะมีศัพท์ของหมอ เวลาใช้คุยกันในวงหมอ

นักบัญชีก็จะมีศัพท์ของนักบัญชี เวลาใช้คุยกันในวงนักบัญชี

ซึ่งศัพท์พวกนี้ มันย่อความ และเข้าใจกันเฉพาะในวงนั้นๆ

มันทำให้การสื่อสารสั่นลง และง่ายขึ้น…”

ประโยคนี้ของเจ้านายเก่าอยู่ในหัวผมตลอด 10 ปีที่ผ่านมา…

.

“แชมป์ คุณลองดูสิ ระบบแต่ละระบบย่อมมีวิธีแลกเปลี่ยนข้อมูลระหว่างกัน

ด้วยภาษาที่มีเฉพาะระบบนั้นๆ คุณลองคิดดูว่า

ภาษาของการโอนเงินก็เป็นการโอนเงิน

ภาษาของการกู้เงิน ก็เป็นการกู้เงิน

ซึ่งเวลาระบบจะสื่อสารกัน ก็ใช้ภาษาพวกนี้

แล้วใครที่ฟังแล้วเข้าใจ ก็เอาไปทำตามแค่นั้นแหละ…”

นี่ก็อีกประโยคที่ผ่านมา 10ปี ก่อนที่เราจะมี microservices

และก่อนที่เราจะมี json ซะอีก

.

จำได้ว่า 2 ประโยคนี้ เจ้านายเก่าพูดตอนที่พวกเราอยู่ที่แบงค์

ตอนนั้นผมก็ยังเป็นเด็กจบใหม่ไฟแรงสูงอยู่

และตอนนั้น แบงค์เรากำลังเริ่ม explore SOA ว่าเหมาะไม่เหมาะในการ implement

.

“ผมว่า ESB มันตลกจะตาย มันเอาทุกอย่างมารวมศูนย์ไว้ แล้วมันจะ Scale ยังไง”

“แทนที่ ESB มันจะทำงานเร็ว มันดันมี features อะไรก็ไม่รู้เยอะแยะ จนมันทำงานช้า

Message ระหว่างระบบต้องทำงานเร็วสิ”

ก็เป็นอีกสองประโยคที่เราได้ระหว่าง explore เรื่อง SOA ให้แบงค์ เมื่อ 10 ปีก่อน

.

จนถึงวันนี้ ผมก็กลับไปคุยกับเจ้านายเก่าอีกครั้ง

ตามภาษาหลานชายและคุณอา ที่บ้าเรื่องเทคโนโลยีเหมือนกัน

ผมเอาแผนภาพ microservices ที่ design ที่ Billme ให้แกดู

แล้วก็บอกแกไปว่า desgin นี้ inspired มาจากคำพูดของแกเมื่อ 10 ปีก่อน

แกก็ตอบกลับมาสั้นๆว่า

“โปรแกรมเมอร์คุณต้องเก่งมาก และต้องมีวินัยมาก

ถึงจะทำ Architecture ที่อิสระต่อกันแบบนี้ได้”

“ประโยคพวกนั้น ที่ผมเล่าให้คุณฟัง

ผมเอามาจากตอนผมทำ expert system สมัยก่อนโน้น”

และก็นี่แหละครับ inspired หลักในการออกแบบ Architecture ของผม

.

นอกจากนั้น ก็คงมีภาพเรือ Titanic ของ Jonas Boner

ที่เป็นอีก inspiration ในการออกแบบ Architecture

.

พร่ำมาตั้งนาน เข้าเรื่องซักที

จริงๆ Blog นี้ก็จะมาเล่า ว่าทำไม Billme ถึงเลือกใช้ภาษา Scala

ถ้าใครเข้าใจ aim ของภาษา และพอเดาประโยคด้านบนที่เปิด Blog ได้

คงแทบไม่ต้องอ่าน Blog ที่เหลือตรงนี้ หรืออ่านแค่เอาบันเทิงก็พอ

.

แน่นอนครับ aim ของ Scala คือการสร้าง

“A LANGUAGE THAT GROWS ON YOU”

(คำนี้อยู่ใน บทที่ 1 ของ Programming in Scala

ที่เขียนโดย Martin Odersky)

ซึ่งมันก็อธิบายว่า Scala เป็นภาษาที่โตได้ด้วยคุณ

ก็แปลว่ายิ่งคุณสร้างรูปแบบการเขียนใหม่ๆเข้าไปเท่าไหร่

ภาษาก็จะโตและขยายออกไปตามสิ่งที่คุณสร้าง

แน่นอนว่า Scala เตรียมเครื่องมือ

สำหรับสร้างรูปแบบการเขียนไว้ให้คุณอยู่แล้ว และรูปแบบการเขียนนั้นๆ

ก็จะดูเหมือนมัน Support จาก Native ของ Scala

ซึ่งทำให้เรา define ภาษาใหม่ที่โตมาจากภาษาเดิมได้

ด้วยรูปแบบการเขียนใหม่ๆ

.

แล้วถ้าเราสร้างภาษาได้ มันจะดียังไง???

.

ถ้าใครเคยอ่าน Blog ของ Billme มาบ้างแล้ว

จะคุ้นกับภาพนี้อยู่บ้าง

แต่ถ้ายังไม่คุ้น ผมจะใบ้ให้ด้วยภาพนี้เพิ่ม…

พอใส่ description สีน้ำเงินเข้าไป

ทุกคนเริ่มเข้าใจธุรกิจที่ Billme ทำมากขึ้นจากภาพแรกถูกมั้ยครับ

ดังนั้นภาพด้านบนนี่ เราเรียก Business Architecture ครับ

.

ซึ่งนิยามของ Business Architecture ง่ายๆก็คือ

ดูแล้วเข้าใจว่า เราทำธุรกิจอะไร มีองค์ประกอบอะไรในธุรกิจบ้าง

.

และพอเราเข้าใจองค์ประกอบในธุรกิจ

เราก็สามารถอธิบายศัพท์ที่ใช้ในส่วนย่อยๆของกระบวนการนั้นๆได้

ผมจะยกตัวอย่างให้ดูนะครับ

จะเห็นได้ว่า Code Structure ที่เป็นโครงสร้างของ Projects

ใน Core Services และ Business Services จะดูต่างกัน

เพราะวิธีการทำงานของ Core กับ Business นั้นต่างกัน

Business มุ่งเน้นแค่ CRUD เพื่อให้เกิด What You Do is What You Get

ส่วน Core นั้น มุ่งเน้นการสร้างอะไรซักอย่างเช่น PDF ให้ได้ในเวลาต้องการ

.

เมื่อเราสามารถ แยก Code Structure ที่ต่างกัน

ตามประเภทของ Projects ซึ่งอิงตาม Business Architecture ได้แล้ว

เราก็สามารถใช้ Scala เริ่มสร้าง Structure ใหม่ๆ

เพื่อ wrap Low-Level Code เดิมๆ ที่ต้องเขียนซ้ำกัน

ให้ย่นย่อ Code Structure เดิมของเรา และเขียนได้ง่ายและเร็วขึ้น

โดยที่ยังทำงานเท่าเขียน Low-Level Code เดิมๆ

.

เพราะแน่นอนว่าในแต่ละ Layer ของ Business Architecture ไม่ได้มี Services เดียว

ซึ่งการจะเพิ่ม Services ที่ 2, 3, … และปรับแก้ Services เดิมๆ

ก็จะปรับเปลี่ยนได้เร็ว บน Structure ใหม่ๆ ที่ wrap Low-Level Code เดิมๆไปแล้ว

และทำให้การเปลี่ยนแปลงให้ทันกับจังหว่ะของธุรกิจนั้น เร็วขึ้นด้วย

.

แต่ก็แน่นอนครับ Scala ไม่ใช่ Silver Bullet และไม่ได้เหมาะกับทุกงาน

แต่ถ้ามองว่า ชื่อตัวแปร คือก้อนอิฐแต่ละก้อนใน Software Architecture

แล้วภาษา Scala ก็เพิ่มพลังให้เรา “นิยามก้อนอิฐของเราเองได้”

แต่ก็ใช่ว่าอิฐทุกก้อน จำเป็นต้องถูกนิามขึ้นมาใหม่

.

สวัสดีครับ

.

--

--