บุคลากรด้านซอฟต์แวร์
การวิเคราะห์ของแบรี่ บีม (Barry Boehm ; ๑๙๘๘) จากประสบการณ์เกี่ยวกับโครงการพัฒนาซอฟต์แวร์ต่างๆ มากว่ายี่สิบปี พบว่า คุณภาพของบุคลากร ที่พัฒนาซอฟต์แวร์ โดยเฉพาะคุณภาพของหัวหน้าโครงการที่รู้จักพิจารณาว่า เรื่องใดมีความสำคัญ หรือมีความเสี่ยงสูง แล้วทำสิ่งนั้นก่อน สามารถจะบ่งบอกถึงความสำเร็จของโครงการ และคุณภาพของซอฟต์แวร์ได้ ในขณะที่วิธีการพัฒนา หรือเครื่องมือที่ใช้จำเพาะแบบ ไม่สามารถรับประกันได้ว่า การใช้วิธีจำเพาะแบบนั้น จะส่งผลให้ซอฟต์แวร์มีคุณภาพเสมอ ผลการศึกษาของนายเคอร์ติส (B. Curtis : ๑๙๘๘) และนายแอนดรู โนแลน (Andrew J. Nolan : ๑๙๘๘) ยืนยันได้ว่า ปัจจัยของความสำเร็จในการพัฒนาซอฟต์แวร์อยู่ที่การมีบุคคลที่มีคุณภาพในทีมงาน
ดังนั้น มนุษย์จึงเป็นกลไกสำคัญในการพัฒนาซอฟต์แวร์ในปัจจุบัน การพัฒนาซอฟต์แวร์ขนาดใหญ่ ไม่ใช่จะมีเฉพาะโปรแกรมเมอร์เท่านั้น แต่จำเป็นต้องมีทีมงานมาช่วยพัฒนาด้วย
ทีมงานพัฒนาซอฟต์แวร์
อาจจะประกอบด้วยบุคลากรหลายตำแหน่ง ซึ่งมีหน้าที่และคุณสมบัติต่างๆ กัน ดังต่อไปนี้
ผู้บริหารอาวุโส (senior manager) เป็นผู้กำหนดสาระสำคัญของโครงการพัฒนาซอฟต์แวร์
หัวหน้าโครงการ (project manager) มีหน้าที่บริหารโครงการ จัดทีมงาน ประสานการทำงานแบบทีม ติดตามผลงาน ให้กำลังใจ เข้าใจปัญหาในการบริหารงาน ทั้งด้านบุคคล และเทคนิค ในการวิเคราะห์สถานการณ์ต่างๆ ลำดับความสำคัญของเรื่องที่จะต้องทำ และปรับแนวทางการดำเนินงาน ให้เหมาะสมกับสถานการณ์ได้
นักวิศวกรรมข้อกำหนด (requirement engineer) มีหน้าที่วิเคราะห์ ชี้แจงโจทย์ปัญหา ที่ซอฟต์แวร์จะต้องการ โดยสรุปให้เห็นคุณลักษณะซอฟต์แวร์ที่ต้องการ ขอบเขตหน้าที่ที่ซอฟต์แวร์ควรทำ ทบทวนความครบถ้วนของข้อกำหนด และความถูกต้องตามวัตถุประสงค์ ฯลฯ ในกรณีที่เป็นข้อกำหนดของซอฟต์แวร์ประเภทที่เสริมระบบงานธุรกิจ ผู้ที่ทำหน้าที่นี้เรียกว่า นักวิเคราะห์ระบบ (system analyst) โดยมีหน้าที่ศึกษาระบบงาน ขั้นตอนในการทำงาน ลักษณะข้อมูลที่ส่งต่อในแต่ละขั้นตอน และสอบถามความต้องการของผู้บริหาร หรือผู้ที่จะใช้ระบบ ฯลฯ แต่สำหรับกรณีที่เป็นข้อกำหนดซอฟต์แวร์สำเร็จรูป เพื่อจำหน่ายให้แก่บุคคลทั่วไป ผู้ที่ทำหน้าที่นี้ จะต้องศึกษาความต้องการของตลาดด้วย
นักวิเคราะห์องค์ความรู้ (Knowledge engineer) มีหน้าที่สอบถาม และรวบรวมองค์ความรู้จากผู้เชี่ยวชาญในสาขาต่างๆ เพื่อให้ทราบถึงกฎเกณฑ์ (rule) ต่างๆ และวิธีวินิจฉัยปัญหาในสาขานั้นๆ องค์ความรู้นี้มักจำเป็นต้องมีในการพัฒนาซอฟต์แวร์ ที่จำลองการทำงานของผู้เชี่ยวชาญ (Expert system) หรือระบบช่วยตัดสินใจ (Decision support system)
นักออกแบบระบบ (designer) มีหน้าที่วางแนวทาง รายละเอียดขั้นตอน และวิธีการทำงานซอฟต์แวร์ เพื่อให้สามารถทำงานได้ตามข้อกำหนด รวมถึงการออกแบบวิธีประสานงานระหว่างคนกับคอมพิวเตอร์ ออกแบบวิธีจัดระเบียบข้อมูลในฐานข้อมูล ออกแบบหน้าจอแนวทางนำเสนอข้อมูลที่เป็นรูป เสียง บทความ ภาพเคลื่อนไหว ฯลฯ
นักวิจัย (researcher) ในกรณีที่นำซอฟต์แวร์มาใช้แก้โจทย์ปัญหา ที่ปัจจุบันยังไม่ทราบวิธี ที่จะสั่งให้คอมพิวเตอร์แก้ให้เรา หรือทำแทนเรา เช่น วิธีที่ทำให้ซอฟต์แวร์อ่านลายมือภาษาไทยออก ผู้ที่ออกแบบระบบได้สำเร็จ มักเป็นนักวิจัย (researcher) ที่ต้องคิดค้นวิธีการใหม่ๆ ไม่ใช่นักออกแบบระบบซอฟต์แวร์ธรรมดา
นักเขียนโปรแกรม (Programmer) หรือโปรแกรมเมอร์ ทำหน้าที่เขียนซอฟต์แวร์ หรือชุดคำสั่ง ให้คอมพิวเตอร์ทำงานตามที่ได้ออกแบบไว้
นักทดสอบคุณภาพระบบ (tester) มีหน้าที่จัดทำกรณีทดสอบ เพื่อทดสอบ และประเมินคุณภาพของโปรแกรม ซึ่งรวมถึงความถูกต้อง ประสิทธิภาพ ฯลฯ ตามที่ระบุในข้อกำหนดของซอฟต์แวร์
ผู้ประเมินคุณภาพการใช้งานของระบบ (usability engineer) ทำหน้าที่ตรวจสอบความสะดวก ในการใช้งานของซอฟต์แวร์ ซึ่งสามารถทำได้ตั้งแต่เริ่มต้นออกแบบซอฟต์แวร์
ความจำเป็นจองบุคลากรแต่ละตำแหน่ง จะขึ้นอยู่กับประเภท ขนาด และความซับซ้อนของซอฟต์แวร์ บางซอฟต์แวร์อาจไม่จำเป็นต้องมีบุคลากรครบดังที่กล่าวมานี้ บางซอฟต์แวร์อาจต้องการผู้เชี่ยวชาญเพิ่มเติม อย่างไรก็ตาม ทีมงานพัฒนาซอฟต์แวร์ยังต้องประสานงานกับบุคคลอื่น เช่น ผู้บริหารบริษัทซอฟต์แวร์ ผู้ใช้ซอฟต์แวร์ผู้บริหารองค์กรที่ว่าจ้างให้พัฒนาซอฟต์แวร์ ฯลฯ
ปัจจุบัน การพัฒนาบุคลากรด้านซอฟต์แวร์ ในประเทศไทย ยังคงให้ความสำคัญต่อการพัฒนาโปรแกรมเมอร์มากที่สุด คือ สอนให้เขียนชุดคำสั่ง ในแต่ละภาษาคอมพิวเตอร์ไปเลย แต่ค่อนข้างจะละเลยผู้ที่วิเคราะห์ข้อกำหนดของซอฟต์แวร์ ผู้ที่ออกแบบซอฟต์แวร์ และผู้ที่ทดสอบซอฟต์แวร์ โดยมักสรุปให้หน้าที่ทั้งหมดเป็นของโปรแกรมเมอร์
นอกจากนี้ ประเทศไทยยังมีปัญหาในการเลื่อนขั้นบุคลากรด้านซอฟต์แวร์ โดยมักจะเลื่อนขั้นโปรแกรมเมอร์ที่อาวุโส ให้เป็นนักวิเคราะห์ระบบ หรือหัวหน้าโครงการ ซึ่งที่จริงแล้ว ถือว่า ผิดหลักเกณฑ์อย่างมาก เพราะมีคุณสมบัติที่ไม่เหมาะสม เนื่องจากโปรแกรมเมอร์ส่วนใหญ่ มักเป็นคนเก็บตัว ชอบอยู่หน้าจอคอมพิวเตอร์ และมีความเชี่ยวชาญด้านเทคนิคมาก แต่นักวิเคราะห์ระบบต้องมีมนุษย์สัมพันธ์ดี รู้จักสอบถาม ส่วนหัวหน้าโครงการต้องเป็นผู้ที่มีความสามารถสูง ในการวางแผน และบริหารงานบุคคล การเลื่อนขั้นเช่นนี้ อาจทำให้องค์กรต้องสูญเสียโปรแกรมเมอร์ที่ดี และได้นักวิเคราะห์ระบบที่ไม่เหมาะสมมาแทน
ที่กล่าวมาทั้งหมดนี้ เป็นการอธิบายให้เข้าใจ หลักการเบื้องต้นในการพัฒนาซอฟต์แวร์เท่านั้น การพัฒนาซอฟต์แวร์ยังจะต้องมีกิจกรรมเสริมอีกมาก ได้แก่ การประเมินค่าใช้จ่ายของโครงการ การประเมินเวลาที่ต้องใช้ การวัดคุณภาพของขั้นตอนการทำงาน การวัดคุณภาพผลงาน ฯลฯ การพัฒนาอุตสาหกรรมซอฟต์แวร์ให้เจริญรุ่งเรืองได้ในประเทศไทย จึงไม่ใช่เรื่องง่ายอย่างที่หลายคนคิด แต่ถ้าสามารถสร้างศักยภาพในส่วนนี้ได้ อุตสาหกรรมซอฟต์แวร์ก็จะเป็นอุตสาหกรรม ที่ช่วยส่งเสริมเศรษฐกิจของประเทศไทยได้อย่างมาก
อุปกรณ์ที่ใช้จัดเก็บซอฟต์แวร์และข้อมูลที่ซอฟต์แวร์ใช้: ฮาร์ดดิสก์ (Hard disk)
อุปกรณ์ที่ใช้จัดเก็บซอฟต์แวร์และข้อมูลที่ซอฟต์แวร์ใช้: แจซดิสก์ (Jaz disk)
อุปกรณ์ที่ใช้จัดเก็บซอฟต์แวร์และข้อมูลที่ซอฟต์แวร์ใช้: ซิปดิสก์ (Zip disk)