The Wrong Abstraction

Chanon Yaklai
level11th
Published in
1 min readDec 31, 2020

Ref : https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction

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

duplication is far cheaper than the wrong abstraction.

จากประโยคด้านบน …

ลองยกตัวอย่างจริงๆ แบบจับต้องได้แล้วกันนะครับอ่านเพลินๆ

สมมติผมเปิดร้านขายรองเท้าชื่อร้าน “บาทา” ผมเปิดร้านรองเท้านี้มานานพอสมควรพอที่จะได้รับกำไร รับรู้รายรับรายจ่ายของร้าน ทำระบบเก็บสต็อกสินค้าของร้าน ลูกค้าก็รู้จัก มีทั้งลูกค้าประจำ และ ลูกค้า ขาจรผ่านไปมาเป็นปกติ

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

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

ผลสรุปคือ …. (คิดเอาเองนะครับ 555+)

“the wrong abstraction”

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

งั้นเราทำยังไงดี ???

prefer duplication over the wrong abstraction

ใช่ครับ … ไปหาที่เช่าร้าน แล้ว เปิดร้านใหม่ ที่ชื่อว่า “ทาทา เบอร์เกอร์” อาจจะอยากให้มีความเป็น Signature ของตัวเองนะ เลยมีคำว่า “ทา” ติดมาหรือจะเป็นชื่ออื่นก็ได้ อาจจะเอาระบบที่เราคุ้นชินมาแล้ว มาใช้ เช่น ระบบสต็อกสินค้า อาจจะใช้แบบเดิมก็ได้, ระบบการคิดเงิน ,ระบบการจ้างงาน ก็อาจจะใช้เหมือนเดิมได้ หรือแม้แต่ ผู้รับเหมาที่ตกแต่งร้านรองเท้า เค้าอาจจะมาตกแต่งร้าน เบอร์เกอร์ให้เราก็ได้

สรุปคือ สร้างร้านใหม่ แต่ใช้ระบบจากร้านรองเท้ามาบริหาร เอาเฉพาะส่วนที่มันใช้ได้ด้วยกันจริงๆมาก็พอ

ถ้าลองนึกตัวอย่างง่ายๆ กับเรื่องรอบๆ ตัว ก็เช่นรถยี่ห้อ Harrier กับ Toyota ครับ … รถเหมือนกัน บางชิ้นส่วนใช้ชิ้นส่วนเดียวกันโรงงานผลิตอาจจะคนละโรงงานกัน แต่ ระบบการผลิตภายในโรงงานอาจจะเหมือนกัน

“This is right duplication.”

คำถามคือ เอ้ยยย การสร้างร้านใหม่มันถูกกว่าการที่เอา 2 ร้านมารวมกันจริงๆ เหรอ ??? คำตอบคือ … มันอาจจะแพงในช่วงแรกครับไหนต้องทำสัญญาเช่าร้านจ้างช่างมาตกแต่งภายใน นู้นนี่นั่นมากมาย แต่ ถ้าเจ๊งแค่ร้านเดียวเรายังทำมาหากินร้านที่ยังอยู่ได้นะครับ แต่ถ้าเอามารวมกัน ถ้าเจ๊งทั้ง 2 ร้านเลยละ ???

prefer duplication over the wrong abstraction.

อ้าวววว … แต่ถ้าไม่เจ๊งล่ะ ถ้าดันทำได้จริงๆ เบอร์เกอร์ก็ขายดี รองเท้าก็ขายได้

คำตอบคือ ….

“in real life you have to weight between wrong abstraction and duplication”

สุดท้ายมันไม่ใช่ว่าเราจะทำแบบไหนดีกว่ากันครับ
จริงอยู่ถ้าต้องเลือกในทาง Programming ก็แนะนำให้ duplication over the wrong abstraction ครับ แต่ในความเป็นจริงคือ

ถ้าเราจะ Wrong abstraction จริงๆ อยากให้รู้ว่าเรากำลัง Wrong อยู่แปลว่าเรามั่นใจได้ว่า ต่อให้กลับมาแก้ function นี้ หรือ module นี้ เรามันจะแก้ได้อย่างง่ายดายเพราะ Code มัน Explicitly(รู้ได้อย่างแน่ชัดว่า Codeใน Scope นี้ทำงานอย่างไร)

ถ้าเราจะ Duplication จริงๆ ก็คือ เรา Duplication เพราะคิดว่ามันไม่เหมือนกัน หรือ จริงๆ มันคล้ายกัน แต่มันไม่เหมือนกันไม่ว่าด้วย Context อื่นๆ จากการมาเรียก function นี้ หรือ แต่ถ้ามั่นใจว่ามันเหมือนกันจริงๆ การ Duplication ก็เป็นการสิ้นเปลืองพลังงานของเราทั้งการเขียนและการอ่าน อาจจะรวมไปถึงการ Compile ด้วย :)

จบล่ะ 31 Dec 2020

Happy New Year , Happy Coding ครับ

--

--

Chanon Yaklai
level11th

I'm founder of GamingIdea.com | Part-time lecturer KU@Dept.Computer Engineering, KMUTT@Dept.Media Technology and KMUTT@Dept.Industrial Education and Technology