วันจันทร์ที่ 30 พฤษภาคม พ.ศ. 2554

นักพัฒนาซอฟแวร์

นักพัฒนาซอฟต์แวร์ (software developer) คือบุคคลที่เกี่ยวข้องกับกระบวนการวิศวกรรมซอฟต์แวร์เช่นในการออกแบบ การวางแผนพัฒนา ซึ่งขอบเขตงานจะกว้างกว่าการเขียนโปรแกรม โดยอาจมีส่วนร่วมในระดับทั้งโครงงาน แทนการดูแลส่วนของชิ้นงาน ซึ่งในกลุ่มนี้อาจรวมถึงโปรแกรมเมอร์ฟรีแลนซ์

นักพัฒนาซอฟแวร์

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


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


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


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


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


หน้าที่


1.นักวิศวกรรมข้อกำหนด (requirement engineer) มีหน้าที่วิเคราะห์ ชี้แจงโจทย์ปัญหาที่ซอฟต์แวร์จะต้องการ โดยสรุปให้เห็นคุณลักษณะซอฟต์แวร์ที่ต้องการ ขอบเขตหน้าที่ที่ซอฟต์แวร์ควรทำ ทบทวนความครบถ้วนของข้อกำหนดและความถูกต้องตามวัตถุประสงค์ ฯลฯ ในกรณีที่เป็นข้อกำหนดของซอฟต์แวร์ประเภทที่เสริมระบบงานธุรกิจ ผู้ที่ทำหน้าที่นี้เรียกว่า นักวิเคราะห์ระบบ (system analyst) โดยมีหน้าที่ศึกษาระบบงาน ขั้นตอนในการทำงาน ลักษณะข้อมูลที่ส่งต่อในแต่ละขั้นตอน และสอบถามความต้องการของผู้บริหาร หรือผู้ที่จะใช้ระบบ ฯลฯ แต่สำหรับกรณีที่เป็นข้อกำหนดซอฟต์แวร์สำเร็จรูป เพื่อจำหน่ายให้แก่บุคคลทั่วไป ผู้ที่ทำหน้าที่นี้จะต้องศึกษาความต้องการของตลาดด้วย
2.นักวิเคราะห์องค์ความรู้ (Knowledge engineer) มีหน้าที่สอบถาม และรวบรวมองค์ความรู้จากผู้เชี่ยวชาญในสาขาต่างๆ เพื่อให้ทราบถึงกฎเกณฑ์ (rule) ต่างๆ และวิธีวินิจฉัยปัญหาในสาขานั้นๆ องค์ความรู้นี้มักจำเป็นต้องมีในการพัฒนาซอฟต์แวร์ที่จำลองการทำงานของผู้เชี่ยวชาญ (Expert system) หรือระบบช่วยตัดสินใจ (Decision support system)
3.นักออกแบบระบบ (designer) มีหน้าที่วางแนวทาง รายละเอียดขั้นตอน และวิธีการทำงานซอฟต์แวร์ เพื่อให้สามารถทำงานได้ตามข้อกำหนด รวมถึงการออกแบบวิธีประสานงานระหว่างคนกับคอมพิวเตอร์ ออกแบบวิธีจัดระเบียบข้อมูลในฐานข้อมูล ออกแบบหน้าจอแนวทางนำเสนอข้อมูลที่เป็นรูป เสียง บทความ ภาพเคลื่อนไหว ฯลฯ
4.นักวิจัย (researcher) ในกรณีที่นำซอฟต์แวร์มาใช้แก้โจทย์ปัญหาที่ปัจจุบันยังไม่ทราบวิธีที่จะสั่งให้คอมพิวเตอร์แก้ให้เรา หรือทำแทนเรา เช่น วิธีที่ทำให้ซอฟต์แวร์อ่านลายมือภาษาไทยออก ผู้ที่ออกแบบระบบได้สำเร็จมักเป็นนักวิจัย (researcher) ที่ต้องคิดค้นวิธีการใหม่ๆ ไม่ใช่นักออกแบบระบบซอฟต์แวร์ธรรมดา
5.นักเขียนโปรแกรม (Programmer) หรือโปรแกรมเมอร์ ทำหน้าที่เขียนซอฟต์แวร์ หรือชุดคำสั่งให้คอมพิวเตอร์ทำงานตามที่ได้ออกแบบไว้
6.นักทดสอบคุณภาพระบบ (tester) มีหน้าที่จัดทำกรณีทดสอบ เพื่อทดสอบและประเมินคุณภาพของโปรแกรม ซึ่งรวมถึงความถูกต้องประสิทธิภาพ ฯลฯ ตามที่ระบุในข้อกำหนดของซอฟต์แวร์
7.ผู้ประเมินคุณภาพการใช้งานของระบบ (usability engineer) ทำหน้าที่ตรวจสอบความสะดวกในการใช้งานของซอฟต์แวร์ ซึ่งสามารถทำได้ตั้งแต่เริ่มต้นออกแบบซอฟต์แวร์
ความจำเป็นจองบุคลากรแต่ละตำแหน่งจะขึ้นอยู่กับประเภท ขนาด และความซับซ้อนของซอฟต์แวร์ บางซอฟต์แวร์อาจไม่จำเป็นต้องมีบุคลากรครบดังที่กล่าวมานี้ บางซอฟต์แวร์อาจต้องการผู้เชี่ยวชาญเพิ่มเติม อย่างไรก็ตาม ทีมงานพัฒนาซอฟต์แวร์ยังต้องประสานงานกับบุคคลอื่น เช่น ผู้บริหารบริษัทซอฟต์แวร์ ผู้ใช้ซอฟต์แวร์ผู้บริหารองค์กรที่ว่าจ้างให้พัฒนาซอฟต์แวร์ ฯลฯ



ไม่มีความคิดเห็น:

แสดงความคิดเห็น