Software Bundle สิ่งที่ถูกมองข้าม และคนไทยจำนวนมากยังคงใช้ของไม่มีลิขสิทธิ์

ผมว่าคนไทยไม่ได้มองกันที่ Software ที่ bundle มาให้มากนักเพราะว่าเราหาโปรแกรมที่งานคล้ายกันที่มี function ใช้งานมากกว่า ได้ง่ายกว่าในเมืองนอกหลายเท่านัก ทำให้เราไม่ได้เห็นคุณค่า ที่ราคา notebook แพง กว่าในหลายๆ ยี่ห้อ เกิดจากตัว software OS ที่ราคาก็ 4,000 บาทกว่าๆ แล้วในรุ่น windows xp home หรือ ราคาเกือบ 10,000 ในรุ่นที่ใช้ windows xp pro และยังไม่รวมถึงโปรแกรม utility ที่แถมมาในด้านการใช้งานทั้งโปรแกรมด้านความบันเทิงต่างๆ โปรแกรมจัดการระบบขอตัว notebook แต่ละรุ่นเอง หรือแม้แต่โปรแกรมแก้ไขปัญหาในระดับ OS ล้วนแล้วแต่มีมูลค่าทางเงินทั้งสิ้น

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

ผมเคยเสนอราคา Software ต่อคนที่ผมจ้างไป 10,000 คุณรู้ไหมเค้าตอบกลับมาว่าอย่างไร เค้าว่า “ทำไมแพงจัง คุณแค่ พิมพ์ๆๆๆ ตามที่ผมร่างหน้าตาไว้ คิดนิดหน่อยเอง ผมว่าให้คุณหมดแล้วเนี่ย หน้าตาของโปรแกรมน่ะ สูตรก็มีให้ ด้วย” ซึ่งผมตอบกลับไปว่า ” งั้นหน้าตาตอน output ผมทำให้คุณได้ภายใน 1 ชม เหมือนเปี้ยบเลย แต่โปรแกรมทำงานให้คุณไม่ได้นะ ผมขอค่าทำ 100บาท ” เค้าเงียบครับ งานเขียนโปรแกรมไม่ใช่ว่าจะทำให้เหมือนๆ ที่ร่างแล้วเสร็จมันต้องมีการวางโครงสร้าง วางระบบ มีการทดสอบหาข้อบกพร่อง ซึ่งในตอนนี้ผมกลับคิดว่า windows เป็นโปรแกรม os ที่ดี มาก ถึงแม้คุณๆ จะว่ามันมี bug ให้เห็นตลอดเวลาผมว่านั้นไม่ใช้ข้อผิดพลาด แต่ผมกลับคิดว่ามันคือข้อบกพร่องของการทำงานที่ไม่เกิดขึ้นตอนทำการทดสอบโปรแกรมก่อนออกสู่ตลาดมากกว่าซึ่งถ้าไม่มีผู้ประสงค์ชั่วๆ (หรือหวังดีประสงค์ร้าย ถ้ารู้ว่ามันผิดพลาดก็บอกผู้ผลิตโดยตรงเพื่อปิดข้อบกพร่องก็จบแล้ว แค่นี่มันทำเป็น worm และทำให้ชาวบ้านเค้าเดือดร้อนไปทั่ว) หรือทำให้โปรแกรมทำงานไม่ได้ ข้อบกพร่องเหล่านั้นก็ไม่ทำงาน (อย่าง w32blater ) และไม่เกิดผลเสียต่อผุ้ใช้มากมายเท่าวันนี้ อย่าลืมว่า windows มีส่วนแบ่งทางการตลาดในตลาด os ถึง 95 % นั้นหมายความว่า os นี้ต้องเป็นที่โจมตีของเหล่าผู้ไม่หวังดีอยู่แล้วเพราะว่าด้วยมูลค่าในตลาดที่มากทำให้ผู้ไม่หวังดีสร้างความเสียหายได้มากทีเดียว และถ้าไปเทียบกับ linux ใช่ว่าจะไม่มีความบกพร่อง มีครับแต่ไม่เป็นข่าวหรือเป็นข่าวแค่ในวงของเค้าเท่านั้น unix ซึ่งด้วยตัวมันแล้วเป็นระบบที่เก่าแก่มาก และเป็นระบบที่ผู้ใช้ต้องชำนาญในการใช้งานคอมพิวเตอร์เท่านั้น หรือมีความรู้พอตัวถึงจะทำงานกับ unix ได้ดี นั้นทำให้ระบบไม่ถูกโจมตี หรือพบข้อบกร่องได้ง่ายเท่า windows และ unix นั้น ในบางวันต้องส่ง patch ออกมาแก้ไขหลายครั้งหลาย version เหมือนกันครับ เพราะว่าบางครั้งคนที่เขียนโปรแกรมเสริมเหล่านั้นพบข้อผิดพลาดที่เพิ่งเขียนลงไปไม่นานก็รีบออก patch ออกมาทันทีเพราะกลัวระบบอื่นๆ ที่ใช้โปรแกรมของตัวเองจะเสียหายครับ

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

เครื่องผมแม้จะมีเถื่อนบ้างแท้บ้างแต่พยายามใช้้อันที่ฟรี หรืออันที่พอจะจ่ายเงินได้ ผมใช้ windows xp pro oem ของแท้ ผมใช้ nod32 ของแท้ ผมใช้ ms office acadamic licence หรือแม้แต่ ใช้ firegraphic ทำงานเหมือนกับ acdsee แต่เป็น opensource แท้ ฯลฯ เพื่อจะได้ชินกับสิ่งเหล่านี้ ผมเป็นโปรแกรมเมอร์ที่เพิ่งเกิด แต่ความรู้สึกไม่ต่างจากโปรแกรมเมอร์ที่โดนก็อปๆ ไปหลายๆ คน

 

ลักษณะการทำงานเป็นทีม

คำถาม ทีมเราได้ทำการไปแข่งคอมพิวเตอร์ สมาชิกในทีมมี 3 คน … แต่ computer เครื่องเดียว .. โดยให้เวลา 5 ชั่วโมง ซึ่งมีปัญหาอยู่ 8 ข้อ ควรจะทำยังไงดี?

ส่วนใหญ่จะคิดว่า

1) แบ่งกันทำคนละข้อ หรือไม่ก็ 2) สุมหัวกันคิดให้หมดทุกข้อ

ซึ่งทั้งสองแบบมันไม่ใช่การทำงานเป็นทีม และถ้าจะทำได้นั้นคนในทีมจะต้องมีพวกอัจฉริยะอยู่ด้วย

ซึ่งมันไม่มีจริงหรอก เอางี้นะ ปกติเรามีสามคนใช่มั้ย? เราทำแบบนี้

1) คนที่มองปัญหาเก่งที่สุด รู้ algorithm มากที่สุด แม่น data structure มากที่สุด จะเป็นคนนั่งอ่านปัญหา วิเคราะห์ปัญหา … จากนั้นเมื่อได้แล้ว จะเรียกคนที่สอง มาทำงานต่อ

2) คนที่สอง ก็คือ คนที่แม่น library ที่สุด แม่น feature ต่างๆ ใน programming language ที่ใช้ที่สุด เมื่อฟังจากคนแรก แล้วก็จะนั่ง implement idea, algorithm, data นั้นลง และเนื่องจากมี com เครื่องเดียว ดังนั้นการ debug จึงต้องทำ “นอกจอ” เพื่อไม่ให้เสียเวลา

3) คนที่สาม คือ debugger ที่จะเอามาจากการ printout และมาทำการ core dump เพื่อมานั่งวิเคราะห์

ซึ่งถ้า “แบ่งๆ กัน -> สุดท้ายนะ มันแก้ได้แต่ข้อง่ายๆ พอข้อยากๆ จะตายหมด เพราะว่า บางคน คิดออก แต่ว่าไม่รู้ feature ของภาษาที่ใช้มากพอ พอเอามา debug ก็ ช่วยกันไม่ได้ เพราะว่าแต่ละคนเขียนต่างกัน”

หรืออย่าง “สุมหัวกันทำ -> ทะเลาะกันก่อนจะได้ลงมือเขียน แย่ง keyboard กัน แล้วมาทะเลาะกันตอน debug ฯลฯ มันไม่ใช่ team work”

มันแค่ทำงาน “ด้วยกัน” ไม่ใช่ทำงาน “ร่วมกัน”

ตัวอย่าง

นาย A จะอ่านปัญหา ทำการวิเคราะห์ และจะมาอธิบายให้ นาย B ฟัง และนาย C จะฟังด้วย เพื่อให้รับรู้ algorithm

จากนั้น นาย B จะไปพิมพ์ implement ให้เร็วที่สุด ให้ได้ working program ที่คิดว่าเร็วที่สุดเท่าที่จะเร็วได้ เพราะว่าในตอนนี้ นาย B เป็นคนเดียวที่จำ standard c++ ได้มากที่สุด ใช้ stl ได้ทั้งหมดโดยไม่ต้องเปิดอะไรเลย

นาย C จะมานั่งดูด้วย เพื่อให้เห็นวิธีที่นาย B เขียนอะไรบ้าง จากนั้น compile, run test .. แน่นอนว่าไม่ work ก็จะจะทำการ print เอา source code และ memory core dump จาก printer ส่วนกลางออกมา

นาย C จะมานั่ง debug ไล่ core จากนั้น นาย B ก็จะไปฟังการวิเคราะห์ปัญหาข้อใหม่จาก นาย A ซึ่งจะสามารถวิเคราะห์ปัญหาได้อย่างอิสระ ไม่ต้องยุ่งกับเรื่อง implementation และอาจจะช่วย debug บ้างนิดหน่อย

นาย B ไม่ต้องคิดมากเรื่องการแก้ปัญหา หรือว่า debug เท่าไหร่

นาย C ไม่ต้องคิดแก้โจทย์ แต่ว่าต้องแก้ปัญหาในโปรแกรมที่ นาย B เขียน

แบบนี้สิ คือการทำงานเป็นทีม

ซึ่งการแบ่งโจทย์ไปคิดคนละข้อ หรือการสุ่มหัวกันคิด –> นี่เค้าเรียกการแบ่งหน้าที่ด้วยเหรอ จริงไหม

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

หน้าที่ของ programmer คืออะไร
1) วิเคราะห์ปัญหา
2) เขียนโปรแกรม
3) แก้โปรแกรม

…….. มันควรจะเป็นแบบนี้