ทุกวันนี้คอมพิวเตอร์มันเก่งมากในการประมวลผลซอฟต์แวร์ แต่มันยังไม่ถึงจุดที่มันจะสร้างซอฟต์แวร์เองได้ ดังนั้น มนุษย์เลยยังคงต้องรับผิดชอบเป็นผู้สร้างซอฟต์แวร์อยู่
ในงานสร้างซอฟต์แวร์โดยเฉพาะซอฟต์แวร์ขนาดใหญ่ มักจะต้องแบ่งงานกันทำ เพราะทำคนเดียวไม่ได้ มันเสร็จช้า และก็อาจจะไม่ประณีตในหลาย ๆ เรื่อง ดังนั้น แบ่งกันทำดีกว่า
ปรกติแล้วการสร้างซอฟต์แวร์ถ้ามีคนพอ จะแบ่งงานออกเป็น 3 ส่วนใหญ่ ๆ คืองาน Management งาน Functional และงาน Technical
ทีนี้เรามาสมมติว่าเราเป็นผู้อำนวยการสร้างกันดีกว่า โดยสมมติให้เราคิดคำนวณตัดสินใจแบบคอมพิวเตอร์ คือสมมติว่าเรามีโครงการสร้างซอฟต์แวร์อยู่โครงการนึง ตั้งงบประมาณไว้ที่ 2,100,000.00 บาท จุดประสงค์ของงบประมาณ คือเอามาจ่ายให้กับคนที่ทำงาน ซึ่งโครงการนี้ต้องการทำให้เสร็จภายใน 30 วัน โดยให้ใช้คนเพียง 3 คนแบ่งกันทำงานทุกวัน ตามตำแหน่ง Management, Functional และ Technical และแต่ล่ะคนทำงานได้เพียงหน้าที่เดียวเท่านั้นตลอดทั้งโครงการ
ในฐานะเราเป็นผู้อำนวยการสร้าง เราก็หวังว่าเราจะใช้คนให้เหมาะสมกับงาน เพื่อให้ได้ประสิทธิผลที่สูงสุด โดยพิจารณาจากคะแนนรวมของตำแหน่ง Management, Functional และ Technical ซึ่งคะแนนของแต่ล่ะตำแหน่ง ก็ได้จากคะแนนทักษะแต่ล่ะแบบของคนทำงานทั้ง 3 คนอีกทอดหนึ่ง
พอดีว่าคนทำงานที่มีให้เลือกมันน้อย ก็เลยมีให้เลือกมาแค่ 3 คนซึ่งมีอายุไล่เลี่ยกัน และแต่ล่ะคนก็มีทักษะ Management, Functional และ Technical แตกต่างกันไปตามภาพข้างล่างนี้ ดังนั้น ลองมาคิดดูกันดีกว่าว่า คนไหนควรจะทำตำแหน่งอะไร เพื่อให้ผลรวมของคะแนนในการคัดเลือกมีมากที่สุด ซึ่งผลรวมมากสุดที่เป็นไปได้ คือ 30 คะแนน
และที่สำคัญ คนไหนที่ได้ทำตำแหน่ง Management เราจะให้เป็นหัวหน้าผู้ควบคุมโครงการในครั้งนี้
จากภาพจะเห็นว่านาย กอ มีทักษะแยกประเภทและทักษะโดยรวมมากกว่า นาย ขอ และ นาย คอ!!!
จะเห็นว่าปัญหานี้เป็นปัญหาที่ต้องใช้เวลาในการคำนวณซึ่งอยู่ในคลาส Factorial คือถ้าเราจะเลือกคนมาทำ Management ก็จะมีตัวเลือก 3 คน พอต้องมาเลือกคนทำ Functional ก็จะเหลือตัวเลือกแค่ 2 คน เพราะเลือก Management ไปแล้วคนนึง และสุดท้ายก็จะเหลือคนมาทำ Technical แค่คนเดียว เพราะอีก 2 คนถูกเลือกให้ทำ Management กับ Functional ไปแล้ว
ดังนั้น ถ้าเราจะต้องหาว่าผลรวมไหนดีที่สุด เราก็ต้องคำนวณหาในทุกกรณี ซึ่งก็ต้องใช้เวลาในการคำนวณเท่ากับ 3 x 2 x 1 = 3! = 6 รูปแบบนั่นเอง
และเพื่อให้เห็นภาพชัดขึ้น เรามาค่อย ๆ คำนวณกันดีกว่า ค่อย ๆ ทำทีล่ะกรณี เพราะโจทย์นี้มันง่าย ทำแค่ 6 ครั้งก็ได้คำตอบ แต่ถ้าให้ทำมากกว่านี้ก็ไม่ไหวเหมือนกัน ตามภาพด้านล่างนี้
จากภาพข้างบนจะเห็นว่า การจัดหมู่ที่ดีที่สุดสำหรับโจทย์นี้คือ การให้นาย ขอ เป็นหัวหน้าทำตำแหน่ง Management ให้นาย คอ ทำตำแหน่ง Functional และนาย กอ ทำตำแหน่ง Technical เหตุผลเพราะการจัดหมู่รูปแบบนี้ ให้ผลคะแนนที่ดีที่สุดคือ 20 คะแนน
โดยปรกติแล้วตามราคาตลาด ผลตอบแทนของ Management จะต้องคูณ 2.3 เท่า ส่วนของ Functional จะต้องคูณ 1.2 เท่า และของ Technical ไม่คูณอะไรเลย
ดังนั้น ถ้าให้ค่าตอบแทนวันล่ะ 15,000 บาท ด้วยการจัดหมู่แบบนี้นาย ขอ จะได้ค่าตอบแทนวันล่ะ 15,000 x 2.3 บาท ส่วนนาย คอ จะได้ค่าตอบแทนวันล่ะ 15,000 x 1.2 บาทและส่วนนาย กอ จะได้ค่าตอบแทนวันล่ะ 15,000 บาท
ถ้าเราไม่มองด้วยทฤษฎีเกม ซึ่งว่าตามจริงแล้วโจทย์นี้ก็คำนวณแบบทฤษฎีเกม คือ คำตอบไหนให้ผลตอบแทนมากที่สุดก็เลือกคำตอบนั้น และเราก็กำลังคำนวณโดยการสวมบทบาทเป็นคอมพิวเตอร์ เราจะพบว่าในฐานะผู้อำนวยการสร้าง ดูเหมือนเราจะไม่ค่อยยุติธรรมกับนาย กอ ซักเท่าไหร่ เพราะจริง ๆ แล้วนาย กอ เก่งกว่าใคร ๆ แต่เรากลับให้นาย กอ เป็นลูกน้องคนที่เก่งน้อยกว่า แถมให้นาย กอ ได้ค่าตอบแทนน้อยกว่าใคร ๆ อีก
ครับ โลกมันเป็นแบบนี้แหล่ะ เพราะในฐานะผู้อำนวยการสร้าง เราต้องสนใจเป้าหมายเป็นหลัก การจัดทีมแบบไหน จัดหมู่แบบใด แล้วมันให้ผลลัพธ์ที่ดีที่สุด เราก็ต้องเลือกแบบนั้น ดังนั้น ปัญหาที่แก้ได้โดยวิธีการคำนวณทางคอมพิวเตอร์ มันก็อาจจะทำให้เกิดปัญหาทางสังคมศาสตร์ขึ้นมาแทนก็เป็นได้
สำหรับโจทย์นี้ถ้าเราจะแก้ปัญหาทางสังคมศาสตร์ เราอาจจะต้องใส่ประจุเพิ่มให้กับคนที่มีทักษะ Management และ Functional เพื่อให้เวลาคำนวณในทางคอมพิวเตอร์ จะได้มีน้ำหนักเหมาะสมมากขึ้น แต่ในบางครั้งการทำแบบนั้นอาจจะไม่ถูก เพราะมันขึ้นกับงานในแต่ล่ะโครงการ บางโครงการจุดสำคัญก็อาจจะอยู่ตรงตำแหน่ง Technical ดังนั้น การเปลี่ยนเป็นให้ค่าตอบแทนกับตำแหน่ง Technical โดยการคูณค่าตอบแทน 2.3 เท่า แล้วไปลดตัวคูณค่าตอบแทนในตำแหน่งอื่นน่าจะเหมาะสมกว่า