เจาะลึก Software Engineer

มีหลายคนสงสัยนะว่า วิทยาการคอม วิศวกรรมคอม วิศวกรรมซอฟต์แวร์ต่างกันอย่างไร 
ผมขอนิยามมันสั้นๆดังนี้

วิทยาการคอม = คอม + Math 
วิศวกรรมคอม = คอม +ไฟฟ้า
วิศวกรรมซอฟต์แวร์ = กระบวนการผลิตซอฟต์แวร์

แต่วันนี้เราจะมาเจาะลึกกันว่าวิศวกรรมซอฟต์แวร์คืออะไรและเรียนอะไรบ้าง

หลายๆคนคงจะเห็นนิยามตาม Wiki มาเยอะสินะ งั้นลองอ่านนิยามของ IEEE ดูบ้างผมไม่เก่งภาษาอังกฤษ ไม่แปลให้นะครับ

IEEE’s definition software engineering can be defined as the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; 
that is, the application of engineering to software.

ในกระบวนการผลิตซอฟต์แวร์เราสามารถแบ่งออกมาได้ 4 layers นั้นคือ

Software Engineer = Quality Focus+Process +Methods +Tools

Layers
  1. Quality Focus => คุณภาพจะสอดคล้องกับ Process ถ้ากระบวนการดี คุณภาพก็จะดีด้วย ซึ่งมีหลายด้านมาก ยกตัวอย่างเช่น
     1.1 Correctness => ความถูกต้องของระบบ
     1.2 Maintainability => บำรุงรักษาได้ดีไหม เมื่อเสียหาย
     1.2 Integrity => ความมั่นคง มีความเสถียรไหมม
     1.3 Usability => ใช้ง่ายรึปร่าว

จริงๆมีอีกเยอะนะ อยู่ในเรื่องของ Software Architect quality attributes

2. Process => การพัฒนาซอฟต์แวร์ให้ตรงตามเวลา, มีการวางโครงร่างที่สำคัญในแต่ละขั้นตอนเพื่อให้โครง(SDLC)การเสร็จทันเวลาที่คาดหวังไว้อย่างมีประสิทธิภาพ เพราะการที่จะให้งานมีคุณภาพจะต้องผ่านกระบวนการที่ดี

3. Methods => เป็นความรู้เทคนิคในการพัฒนาซอฟต์แวร์ ดังนี้

3.1 Requirment analysis => การวิเคราะห์ความต้องการ ถามว่าทำไมต้องวิเคราะห์นะหรอ เพราะว่าบางทีลูกค้าไม่สามารถให้ความต้องการที่แท้จริงกับเราได้ในการพัฒนา เราจึงต้องมีเทคนิคต่างๆ จากนั้นพอได้ ความต้องการแล้ว ก็ต้องวิเคราะห์เพื่อไปพัฒนาซอฟต์แวร์อีกนะ เพื่อดูว่าจะเป็นไปได้ในการทำหรือไม่ ถ้าไม่เห็นภาพ ลองดู การสไลด์เลื่อนหน้าจอของ i-phone สิ มันถูกออกแบบให้สไลด์ได้ในมือเดียว สะดวกจริงๆ เขารู้ได้ยังไงนะว่าคนชอบแบบนี้

3.2 Design modelling => การใช้ diagram ออกแบบระบบ วางสถาปัตรกรรม

3.3 Program construction => เป็นเรื่องของการเขียนโค้ดอย่างไรให้คนอื่นเข้าใจง่าย บำรุงรักษา ไม่เกิดการผูกมัด แก้แล้วไม่พัง สามารถต่อเติมได้ง่าย

3.4 Testing and support => การทดสอบว่าผลลัพท์ออกมาตรงที่คาดหวังไว้หรือไม่
 การทวนสอบพัฒนาออกมาแล้วตรงกับ requirment ที่กำหนดไว้หรือไม่

4. Tools => การเลือกใช้เครื่องมือ(automated)ในการพัฒนาให้มีความรวดเร็วขึ้นในการพัฒนา (ถ้ามันช้าลงอย่าไปใช้ครับ)


วิศวกรรมซอฟต์แวร์ ม.อ. ภูเก็ต เรียนอะไรบ้าง

กฎในการบรรยายของผม

อธิบายเฉพาะวิชาแกนวิศวกรรมซอฟต์แวร์
1 รูป สำหรับ 1 วิชา
3 ข้อสำหรับอธิบาย
OBJECT-ORIENTED PROGRAMING

วิชาหัวใจของเด็ก Soften ตั้งใจวิชานี้แล้วจะสบาย

เรียนรู้พื้นฐาน OOP ของ JAVA

ถ้าอยากเทพให้อ่านหนังสือของ Dr.วรีศักด์ ซึ่งถาวร มี 3 เล่ม 120บท และมี Topic อื่นๆที่ไม่ได้เรียนในห้อง (Thead, Buffer, Socket)

OBJECT-ORIENTED ANALY&DESIGN

การออกแบบซอฟต์แวร์โดยใช้ diagram หลายประเภท

เรียนรู้พื้นฐาน SDLC ทำให้เขียนโปรแกรมเป็นระเบียบมาก วิชาจุดเด่น Soften

โปรเจคให้ทำซอฟต์แวร์ขึ้นมาตัวนึง แต่ไม่เสร็จเพราะเยอะและไม่มีประสบการณ

ADVANCED OBJECT-ORIENTED PROGRAMING

วิชาตัวต่อของ OOP

เรียนหลายๆเรื่องของ java เช่นการสร้าง Report, GUI, Network program

LAB สนุกดี cheak point ไม่ทันอดได้คะแนน เน้นค้นคว้าด้วยตัวเอง อยากให้ทุกLAB เป็นแบบนี้

COMPONENT-BASED SW DEVELOP

การเขียนโปรแกรมให้เชื่อมต่อกันอย่างมีระเบียบ

ได้แยกระบบงาน การใช้ซ้ำ ลดใยแมงมุม

เรียนแรกๆก็งง ว่าหน้าตาโค้ด Component เป็นยังไง

SOFTWARE ARCHITECTURE

เรียนการออกแบบต่างๆในซอฟต์แวร์ ทุกๆอย่างมีเหตุผลในการออกแบบ

ได้รู้จัก Qulity แต่ละด้าน ได้ทำเกม Tertis ด้วย

Design pattern ได้เขียนโค้ดด้วย วิชานี้ทำให้เขียนโค้ดโดยมีแบบแปลนแก้ปัญหาให้

SOFTWARE REQUIRE SPECIFI &MGT

เทคนิคในการหาความต้องการที่แท้จริงของลูกค้า

เขียน Software document ให้ทำงานเป็นทีม

เนื้อหาไม่เยอะ ซึมซับองค์ความรู้ง่าย

SOFTWARE CONSTRUCTION&MAIN

เทคนิคในการเขียนโค้ด(ex.การตั้งชื่อตัวแปร, ฟังก์ชั่น, reduct depandency, refactoring)

การบำรุงรักษาหลังจากการขาย

ได้รู้ว่าให้เพิ่มเข้าไปแทนที่จะแก้ไข้ลดการกระทบของระบบ

SW VERIFICATION &VALIDATION

ได้เรียนภาษา B-event วิชานี้เป็นมากกว่าเขียน Test เพราะมีทั้ง ทวนสอบและทดสอบ

รุ่นผมตัดเกรดอิงกลุ่มเพราะคะแนนเฉลี่ยทุกคนน้อยมาก

ได้รู้จัก Formal Method

SOFTWARE PROJECT MANAGEMENT

อาจารย์จากบริษัท เป็น PM ประสบการณ์เยอะ ชอบเล่าการทำงานจริง (ชอบฟังมากๆ)

ได้รู้ว่าต้อง จัดสรร คนเวลา ให้ดี ทุกวินาทีมีค่า LAB ได้รู้จัก Tool หลายๆตัว (ลูกทีมในบริษัทอาจารย์สอน)

วิชานี้มันเยี่ยมไปเลยหล่ะ โปรเจคให้จำลองสถานการณ์จัดโครงการซอฟต์แวร์

SW PROCESS IMPROVEMENT

ได้รู้จักมาตรฐานต่างๆเช่น CMI

วิชานี้เน้นกระบวนการ QC QA เพราะว่ามาตรฐานมาจากกระบวนการที่ดี

อาจารย์จากบริษัท เน้นดีสคัตในคลาส

พิเศษ วิชาเลือกที่ผมชื่นชอบมากที่สุด
SP IN INFO ENG I (Compettive Programing)

เขียนโปรแกรมเชิงแข่งขัน ต้องมีพื้นฐานโปรแกรมมิ่งที่ดีมากถึงจะเรียนได้

ได้เรียนเรื่องกราฟทั้งเทอม เรื่องอื่นๆไม่ทัน

ชอบวิชานี้ LAB ยากแก้โจทย์จาก UVA สอนใช้ STL containers

เรียนกับภาคคอมอยู่ 10 กว่าคน

ทั้งนี้ที่กล่าวมาเป็นหลักสูตร พ.ศ 2553 ตอนนี้ก็มีการเปลี่ยนแปลงอยู่ทุกปี

และล่าสุดก็มีการก่อตั้ง วิทยาการคอมพิวเตอร์ ก็ต้องดูกันต่อไปว่าจะมีการเปลี่ยนแปลงอะไรบ้าง

ถ้าบทความนี้ผิดตรงไหนก็บอกด้วยนะครับ เพิ่งหัดเขียน