Latest

เร็วแค่ไหนก็ไร้ค่า ถ้าไปผิดทาง

เร็วแค่ไหนก็ไร้ค่า ถ้าไปผิดทาง

อีกบทเรียนที่ผมได้จากหนังสือ Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency ของ Tom DeMarco คือ ทำไมองค์กรใหญ่ ๆ ถึงยึดมั่นกับ Efficiency กันนัก Efficiency คืออะไร? Efficiency แปลว่า "ประสิทธิภาพ" ยกตัวอย่างเช่น

By Chokchai Phatharamalai
กฎของจั๊วะ

กฎของจั๊วะ

ปีนี้ที่อายุ 44 ผม Reflect ตัวเอง และพบว่าหลักการใช้ชีวิตของผมได้มาจากหนังสือ The Seven Habits of Highly Effective People เยอะมาก ใน Habit ทั้ง 7 นี้จะมีเกร็ดเล็กเกร็ดน้อยที่ผมไปศึกษามา แล้วค่อย ๆ เติมเข้าไปเพื่อทำให้ Habit นั

By Chokchai Phatharamalai
วงจรชีวิตในมุมมอง Existentialism และศิลปะแห่งการล้มเหลวในราคาถูก

วงจรชีวิตในมุมมอง Existentialism และศิลปะแห่งการล้มเหลวในราคาถูก

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

By Santi
วนเวียนแต่ไม่วนลูป: เมื่อชีวิตคือฟังก์ชัน Recursion และการเดินทางสู่พื้นที่ปลอดภัย

วนเวียนแต่ไม่วนลูป: เมื่อชีวิตคือฟังก์ชัน Recursion และการเดินทางสู่พื้นที่ปลอดภัย

ในโลกที่หมุนไปด้วยอัตราเร่งอย่างทุกวันนี้ หลายครั้งเรามักพบว่าตัวเองติดอยู่ท่ามกลางความสับสนยุ่งเหยิง ปัญหาบางอย่างในชีวิตไม่ได้มาในรูปแบบที่เรียบง่าย แต่กลับซ้อนทับกันเป็นชั้น ๆ เหมือนกล่องของขวัญใบยักษ์ที่พอเปิดเข้าไป ก็

By Santi
ขยายกิจการองค์กร

ขยายกิจการองค์กร

อีกบทเรียนที่ผมได้จากหนังสือ Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency ของ Tom DeMarco คือมุมมองใหม่สำหรับการเติบโตของบริษัท ตลอดมา ผมมักจะต่อต้านการแก้ปัญหางานไม่ทันด้วยการเพิ่มคน เพราะการเพิ่มคนเป็นกลยุทธ์ระดับองค์กร แต่งานไม่ทั

By Chokchai Phatharamalai
เมื่อ “Rewrite” เอาไม่อยู่: ถึงเวลาที่ซอฟต์แวร์สถาปนิกต้อง “Rework”

เมื่อ “Rewrite” เอาไม่อยู่: ถึงเวลาที่ซอฟต์แวร์สถาปนิกต้อง “Rework”

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

By Santi
Fundamental of Software Architecture: Architecture คือศิลปะของการตัดสินใจที่ทำให้ระบบอยู่ต่อได้

Fundamental of Software Architecture: Architecture คือศิลปะของการตัดสินใจที่ทำให้ระบบอยู่ต่อได้

ขอจดโน๊ตที่ไปเรียนวิชา Fundamental of Software Architecture กับพี่รูฟมาค่ะ นี่แค่ day1 555555+ คำว่า Architecture ไม่ได้เริ่มต้นจากโลกของซอฟต์แวร์ แต่มีรากมาจากโลกของการก่อสร้าง เมือง อาคาร และ civil engineering มายาวนานมาก ก่อนที่เราจะเอาคำนี้มาใช้กับ software architecture ในภายหลัง สิ

By Thanthiya Phatharamalai
จากห้องทำงานของนักปรัชญา สู่หน้าจอของ Developer: เมื่อแนวคิด Kierkegaard ปลดล็อกการพัฒนา Software

จากห้องทำงานของนักปรัชญา สู่หน้าจอของ Developer: เมื่อแนวคิด Kierkegaard ปลดล็อกการพัฒนา Software

ลองจินตนาการถึงสถานการณ์ที่คุณกำลังเผชิญในโปรเจกต์ซอฟต์แวร์ปัจจุบัน: ทีมของคุณต้องการความเร็วเพื่อปล่อยฟีเจอร์ใหม่ให้ทันตลาด (Living Forward) แต่ในขณะเดียวกัน โค้ดเก่าที่เต็มไปด้วยหนี้ทางเทคนิค (Technical Debt) ก็กำลังฉุดรั้งให้ทุกอย่างช้

By Santi
Software Engineering กับ Harness Engineering: 10x หรือ Technical Debt

Software Engineering กับ Harness Engineering: 10x หรือ Technical Debt

ลองนึกภาพร้านก๋วยเตี๋ยวเจ้าเก่าที่ขายดีมา 20 ปี วันดีคืนดีพี่มาวินมารีวิวลง TikTok แล้วลูกค้าทะลักเข้ามา 10 เท่า เตาเดิม หม้อเดิม พนักงานเท่าเดิม แต่ Order เพิ่มเป็น 10 เท่า หัวข้อ

By Boonsong Srithong
The Software Factory: เมื่อแคลคูลัสและสมการ s=vt ตัดสินความอยู่รอดของโปรเจกต์ซอฟต์แวร์

The Software Factory: เมื่อแคลคูลัสและสมการ s=vt ตัดสินความอยู่รอดของโปรเจกต์ซอฟต์แวร์

ในโลกของการบริหารโปรเจกต์ซอฟต์แวร์ เรามักจะหลงรักแผนงานที่สวยงามบนหน้าจอ เราตื่นตาตื่นใจกับ Gantt Chart ที่ลากเส้นต่อกันอย่างเป็นระเบียบ และเรามักจะทึกทักเอาเองว่า ถ้าเรามีจุดเริ่มต้นที่ดี มีทีมงานที่มีความเร็ว (Velocity) และมีระยะเวลาที่กำหนดไว้ ทุกอย่างจะเดินไปถึงเป้

By Santi
Imperative กับ Declarative

Imperative กับ Declarative

ในโลกของการเขียนโปรแกรม มันจะมีคำว่า imperative กับ declarative มันคืออะไรแล้วมันทำให้การเขียนโปรแกรมของเราเปลี่ยนไปยังไง มาลองถอดบทเรียนกัน เริ่มจากแปลตรงๆ * Imperative (How): ต้องสั่งทีละขั้นตอนว่าต้องทำอย่างไร (เหมือนการบอกทางแบบละเอียด: เลี้ยวซ้าย 100 เมตร, เลี้ยวขวา...) * Declarative (What): บอกแค่ว่าผลลัพธ์

By Prayoch Rujira
คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

ในปี 2546 นักศึกษาคณะวิทยาศาสตร์ที่เรียนอยู่ที่ศูนย์รังสิตมาตลอดแบบผม ได้มีโอกาสเข้าเมืองไปเรียนที่ธรรมศาสตร์ ท่าพระจันทร์ เป็นครั้งแรก นอกจากจะตื่นตาตื่นใจกับของอร่อยมากมายรอบมหาวิทยาลัยแล้ว บรรยากาศที่ศูนย์ท่าพระจันทร์มันมีมนต์ขลังแปลก ๆ ตัวผมได้

By Chokchai Phatharamalai
เมื่อ Rust’s Default Trait พบกับปรัชญา Essentialism

เมื่อ Rust’s Default Trait พบกับปรัชญา Essentialism

ในฐานะโปรแกรมเมอร์ เรามักหมกมุ่นอยู่กับการเปลี่ยนแปลง (Mutation) เราสนใจว่า State จะไหลจาก A ไป B อย่างไร แต่เรามักลืมตั้งคำถามที่สำคัญที่สุดคำถามหนึ่ง: “ก่อนที่สิ่งนี้จะกลายเป็นสิ่งนั้น… มัน ‘เป็น’ อะไรมาก่อน?” นี่ไม่ใช่แค่คำถามเชิงตรรกะ แต่มันคื

By Santi
ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

Specification

ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

บ่อยครั้งที่ผมได้ยินน้อง ๆ ออดส์ทีม (ODT) เล่าว่า งานที่ทำอยู่ไม่ท้าทายเลย เพราะเพียงได้รับ Specification มาจาก System Analyst (SA) หรือ Tech Lead ที่เป็นพนักงาน แล้วน้องก็มีหน้าที่เขียนโค้ดตามนั้นไปอย่างเดียว บ่อยครั้งที่น้องเห็นวิธีการที่ดีกว่าในการแก้ปัญหานี้ แต่พอเสนอไอเดียไปก็ไม่ได้รับการรับฟัง

By Chokchai Phatharamalai
อัตลักษณ์ที่ถูกพันธนาการ: เมื่อ Rust Closures สะท้อนตรรกะแห่งการครอบครอง

อัตลักษณ์ที่ถูกพันธนาการ: เมื่อ Rust Closures สะท้อนตรรกะแห่งการครอบครอง

ในโลกของ Rust “ความอิสระ” เป็นเพียงภาพลวงตา เพราะทุกการขยับเขยื้อนของข้อมูลล้วนมีพันธนาการที่เรียกว่า Ownership กำกับอยู่เสมอ หากเราเปรียบฟังก์ชันทั่วไปเป็นเหมือนคนแปลกหน้าที่เดินผ่านมาแล้วจากไป Closures ก็คงเป็นเหมือน “เงา” ที่ไม่ได้อยู่โดดเดี่ยว แต่มั

By Santi
Test Scenario vs Test Case แยกไม่ออกสักที? มาดูตัวอย่างง่ายๆ กัน

Test Scenario vs Test Case แยกไม่ออกสักที? มาดูตัวอย่างง่ายๆ กัน

QA Knowledge Series 5 นาทีกับบทความนี้ จะเปลี่ยนวิธีเขียน test document ของคุณไปตลอดกาล — เพราะ QA หลายคนเขียน Test Case ได้คล่อง แต่พอถามว่า Test Scenario คืออะไร ก็ตอบว่า "เหมือนกันนั่นแหละ" ถ้าคุณเคยถูกถามว่า "Test Scenario กั

By Tipticha Chanhom
You Are What You Implement: เมื่อ Traits นิยามตัวตนของ Object ผ่านปรัชญา Existentialism

You Are What You Implement: เมื่อ Traits นิยามตัวตนของ Object ผ่านปรัชญา Existentialism

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

By Santi
The Stoic Programmer: เขียนโค้ดอย่างไรให้ใจไม่พัง

The Stoic Programmer: เขียนโค้ดอย่างไรให้ใจไม่พัง

ในมหานครที่ฉาบด้วยแสงนีออนและความโกลาหลของข้อมูล เหล่าโปรแกรมเมอร์มักจะติดอยู่ในวงจรของการพยายามควบคุมสิ่งที่ควบคุมไม่ได้ เราภาวนาให้ Network ไม่ล่ม เราอ้อนวอนให้ User ใส่ Input ที่ถูกต้อง และเราเจ็บปวดเมื่อระบบ panic! พังทลายลงต่อหน้า แต่นักคิดสโตอิก (Stoic) เมื่อสองพันปีก่อนไม่

By Santi
เมื่อ Rust อ่าน Foucault: การสถาปนา “ระบอบแห่งความจริง” ผ่าน Exclusive Reference

เมื่อ Rust อ่าน Foucault: การสถาปนา “ระบอบแห่งความจริง” ผ่าน Exclusive Reference

ในโลกของการเขียนโปรแกรม เรามักมองว่าภาษาเป็นเพียงเครื่องมือ (Tooling) แต่สำหรับผู้ที่คลุกคลีกับภาษา Rust จะรู้ดีว่าภาษานี้มี “ปรัชญา” บางอย่างที่ฝังรากลึกอยู่ภายใต้ไวยากรณ์ที่เคร่งครัด โดยเฉพาะเรื่องการจัดการหน่วยความจำที่ไม่ได้มองว่าเป็นแค่เรื่องทางเทคนิค แต่

By Santi
The Borrowed Window: มายาแห่งการครอบครองในกรงขังของหน่วยความจำ

The Borrowed Window: มายาแห่งการครอบครองในกรงขังของหน่วยความจำ

ในระเบียบอันเคร่งครัดของ Rust… การเป็นเจ้าของ (Ownership) คือพันธนาการ ข้อมูลทุกชุดต้องมีนายทาสที่คอยควบคุม และเมื่อสิ้นสุดอำนาจ ทุกอย่างจะถูกทำลายทิ้งอย่างไร้ความเมตตา แต่นี่คือความจริงที่โปรแกรมเมอร์ส่วนใหญ่หวาดกลัว: การครอบครองคือภาระ และยิ่งคุณถือครองมากเท่าไหร่

By Santi
Tuple: ปรัชญาของการปูเสื่อ และศิลปะแห่งการไม่ตั้งชื่อ

Tuple: ปรัชญาของการปูเสื่อ และศิลปะแห่งการไม่ตั้งชื่อ

ในโลกของการเขียนโปรแกรม เรามักถูกสอนให้เป็น “นักจัดระเบียบ” เราสร้างคลาส สร้าง Struct ตั้งชื่อตัวแปรให้สื่อความหมาย (Clean Code) แต่บางครั้ง ความเคร่งครัดที่มากเกินไปอาจกลายเป็นพันธนาการที่ทำให้ Code ของเราอุ้ยอ้ายโดยไม่จำเป็น 1. Naming Fatigue: ภาระของการมีตัวตน ลองนึกภาพคุณได้

By Santi
The Art of Early Return: วินัยแห่งการ “คัดออก” เพื่อสมองที่โล่งกว่าเดิม 10 เท่า

The Art of Early Return: วินัยแห่งการ “คัดออก” เพื่อสมองที่โล่งกว่าเดิม 10 เท่า

ในโลกของการพัฒนาซอฟต์แวร์ เรามักจะถูกสอนให้เป็นคนรอบคอบ ให้คิดถึงความเป็นไปได้ให้ครบทุกด้าน แต่บ่อยครั้งที่ “ความรอบคอบ” นั้นกลับกลายเป็นกับดักที่สร้างความซับซ้อนจนเราเองก็รับมือไม่ไหว วันนี้ผมอยากจะหยิบยกปรัชญาหนึ่งที่ผมพบจากการเขียนโปรแกรม โดยเฉพาะในภาษาอย่าง Rust ซึ่งมันไม่

By Santi
The Logic Trap: เมื่อ “ความถูกต้อง” กลายเป็นอาวุธที่ทำลายทีมซอฟต์แวร์

The Logic Trap: เมื่อ “ความถูกต้อง” กลายเป็นอาวุธที่ทำลายทีมซอฟต์แวร์

ในโลกของการพัฒนาซอฟต์แวร์ เราถูกสอนให้เทิดทูน Logic เป็นพระเจ้า เราใช้เหตุผลในการคัดเลือก Stack, ใช้ความถูกต้องในการทำ Code Review และใช้ตัวเลขในการวาง Roadmap แต่เคยสงสัยไหมครับ? ทั้งที่เราพูดเรื่องที่ “ถูกต้อง” และเป็น “ความจริง” ทุกประการ ทำไมผลลัพธ์ในห้องประชุ

By Santi
Change Management ต้องทำไหมนะ แล้วทำตอนไหน

Change Management ต้องทำไหมนะ แล้วทำตอนไหน

เนื่องจากช่วงนี้ได้ทำงานกับลูกค้าที่มีการเปลี่ยนแปลงทาง scope ของงานเยอะมาก อารมณ์แบบตอน baseline เป็นแบบนึง พอจะเลือกงานมาทำจริงๆ เรียกว่าเปลี่ยนไปตาม strategy ขององค์กรเลยก็ว่าได้ ในฐานะที่เราเป็นกลุ่มนักพัฒนา ที่ยังจำเป็นต้องควบคุมงบประมาณ กำหนด scope และต้องตอบให้ได้ว่า

By Thanthiya Phatharamalai