Wednesday, January 24, 2007

โปรแกรมเมอร์กับการเมือง

ไม่อยากใช้คำว่า "การเมือง" เลยเพราะมันกว้างไปหน่อย
การเมืองในที่นี่ หมายถึง สถานะ ความสัมพันธ์ระหว่างองค์กร ในแง่ อำนาจการต่อรอง

ช่วงนี้ผมได้รับคำขอร้องให้ช่วยแก้ไข application หนึ่ง
การแก้ไขนี้เกิดขึ้นเพราะ application ที่ต้องส่งมอบ ของบริษัทอีกบริษัทหนึ่งมันส่งมอบไม่ได้
(บริษัทที่ไม่ได้เป็นพวก developer ก็มักจะเป็นอย่างนี้แหล่ะ ไม่ค่อยจะอ่าน spec ให้ดีก่อน
,ส่วน spec ราชการก็สุดๆเหมือนกัน คลุมๆเหมาๆ)
แน่นอนในแง่การเมือง บริษัทฯผมมีอำนาจต่อรองในมือสูงมาก
แต่ทางบริษัทฯผมก็เลือกวิธีสบายๆ ก็คือไม่ได้ลูกเล่นอะไร อะไรพอช่วยได้ก็จะช่วยทำให้
แต่ถ้ามากไปก็ไม่ทำ (เพราะมันไม่ได้ตังค์)

การทำงานร่วมกัน ก็มีอยู่ 3 กลุ่ม
ผม, IBM, บริษัท A (บริษัทที่ส่งมอบไม่ได้)
ผมทำงานกับ IBM มาสักพัก ไม่เกิดปัญหาอะไร
งานในส่วนเขา แต่เขาทำไม่ได้
ผมพอจะทำอันไหนให้ได้ ก็ช่วยทำไป

มาวันนี้ บริษัท A หาโปรแกรมเมอร์ได้
ก็เลยต่อสายให้คุยประสานงานกับผม
คุยครั้งที่ 1 มาถึงคุณท่านก็สั่งเลย ผมจะทำอย่างนี้, ขอ file นี้, ขอ file นั้น
ผมพยายามอธิบาย แต่มันก็ไม่ค่อยจะยอมฟัง
สุดท้ายผมก็หาทางอธิบายได้ว่า solution ไม่ใช่อย่างที่คุณคิดหรอก มันง่ายกว่านั้น
จบการคุยครั้งที่ 1 ด้วยความตระหงิดๆของผม

คุยครั้งที่ 2 มาอีกหรอบเดิม ผมทำอย่างนี้แล้ว คุณทำอย่างนี้นะ
มาเป็นชุด ผมก็พยายามอธิบายเงื่อนไขให้ฟัง
มันก็ไม่ยอมฟัง สุดท้ายต้องตวาด "เงียบแล้วฟังผมพูด"
ได้ผลหน่อย ยอมฟังบ้าง
แต่ยอมได้ไม่นาน ก็เริ่มสั่งกลับมาอีกแล้ว
สุดท้ายผมก็ฟิวส์ขาด บอกไปว่า "ผมไม่คุยกับคุณแล้ว"
แล้วขอคุยกับ project manager แทน

ประเด็นจริงๆที่จะบอก ก็คือ ไม่ใช่ว่า programmer คนนั้นพูดไม่รู้เรื่อง
,ประเด็นเขามี, ความรู้เขามี
แต่สิ่งที่เขาขาดก็คือ การฟัง และท่าทีในการร่วมมือ
รวมทั้ง sense ในระดับภาพรวมด้วยว่า ขณะนี้ทิศทางการเมืองเป็นอย่างไร

หลังจากโมโหอยู่พักใหญ่ (ผ่านไป 4 ชั่วโมง ก็เริ่มส่งสัยว่าทำไมต้องโมโหด้วยวะ
สงสัยต่อม ego แตก) ก็นั่งดับโมโหด้วยการแก้โปรแกรม แล้วก็ส่งไปให้บริษัท A ซะ

เรื่องนี้สอนให้รู้ว่า "ผมเป็นโคนันทวิศาล"

Related link from Roti

Tuesday, January 23, 2007

Bug ข้าม Application

วันนี้ระบบที่ deploy production เกิดทำงานผิดผลาดขึ้นมา
ลูกค้าแจ้งว่า วันที่ที่แสดงในหลายๆหน้าจอ แสดงวันที่ผิดปี
ยุ่งหล่ะสิ ระบบนี้ไม่ใช่พึ่งใช้งานด้วย ใช้งานมาไม่ต่ำกว่า 2 เดือนแล้ว
โชคดีที่มี fallback, ระบบสำรอง ก็เลยปิดระบบใหม่บังคับให้ user ไปใช้ระบบเก่าไปก่อน

หลังจากนั่นค้นหา changeset ว่าเมื่อคืน มีใคร deploy อะไรใหม่ๆลงไปบ้าง,
ทดสอบระบบที่ test server, ทดสอบระบบที่เครื่องตัวเอง
กว่าจะหาสาเหตุเจอ ก็ผ่านไป 4 ชั่วโมง

สาเหตุนั้นน่าสนใจมาก ตรงประเด็นที่ว่า
เรามักจะมี assumption ว่า bug เกิดที่ระบบใด ส่วนที่ผิด ก็ควรจะอยู่ในระบบนั้น
แต่ bug ตัวนี้ดันเกิดจาก application อีกตัว ที่พึ่ง deploy ขึ้นไปเมื่อวาน
ภายในมัน set locale ให้เป็น "th"
โชคร้ายที่ application เก่า เรามี assumption ในการเขียนว่า
locale เป็น "en"
เมื่อ deploy บน virtual machine เดียวกัน ก็เลย conflict กัน

Related link from Roti

Monday, January 22, 2007

malbolge

malbolge เป็น programming language ตัวหนึ่ง
สิ่งที่น่าสนใจก็คือ มันถูกออกแบบมาให้ใช้งานได้ยาก (designed to be difficult)
ภาษานี้ถูก design ในปี 1998
แต่โปรแกรม helloworld ตัวแรก ถูก solve ได้ในปี 2000

ถ้าอยากรู้ว่ามันยากอย่างไร ลองดูการเขียน helloworld ได้ที่นี่ malbolge: hello world
ตัวโปรแกรม ยกมาให้ดู สำหรับคนที่ขี้เกียจตาม link
(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm

(perl กรุณาชิดซ้ายด้วย)

สำหรับ implement ที่ยกมา คนเขียนเขาเขาต้องใช้ lisp ช่วยคำนวณก่อน
จากนั้นจึงค่อย generate code มันออกมา
แต่มีอยู่คนหนึ่ง (Antwon) เขา claim ว่า
I beat Malbolge with a stick and mastered its secrets.

แต่เขาก็ไม่ได้เปิดเผยเคล็ดลับนั้นออกมา

Links malbolge in wikipedia

Related link from Roti