Oz’s Blog

กรกฎาคม 7, 2007

Art of Software Engineering

Filed under: Art of Software Engineering — siroz @ 1:18 pm

ผมคิดอยู่นาน ว่าจะตั้งชื่อ category ใหม่นี้ ว่าอย่างไรดี กว่าจะมาลงตัวที่ชื่อ “Art of Software Engineering”
ใน category นี้ ผมตั้งใจว่าจะเขียนถึง แง่มุมบางอย่าง ของ Software Engineering ที่ไม่ได้เรียน ไม่ได้สอนกันในห้องเรียน
เนื่องจากว่า ถ้ามองกลับหลังไปแล้ว หลายๆ อย่างที่ผมปฏิบัติ และยึดถือเป็นหลักการนั้น ไม่ได้เรียนรู้มาจากห้องเรียน (ไม่ได้หมายความว่า ผมโดดเรียนจนไม่ได้ความรู้อะไรเลยนะ)
แต่เป็นสิ่งที่เรียนรู้มาจากคนรอบข้าง (รุ่นพี่) และด้วยประสบการณ์ ในการลงมือทำงานจริงๆ
แง่มุมที่ว่านี้ คือ การมองในมุมของศิลป์ ในการสร้าง การพัฒนาซอฟต์แวร์

ก่อนจะเล่าอะไรต่อ ขอพูดถึง ที่มาก่อน ว่าทำไมถึงใช้ชื่อนี้
ด้วยความเห็นส่วนตัวของผม (ย้ำว่า ส่วนตัว ไม่จำเป็นต้องถูกต้อง โปรดใช้วิจารณญาณในการรับชม) .. ผมจะมองว่า การสร้างซอฟต์แวร์ (Software Construction) นั้น ไม่ว่าจะเป็นการวิเคราะห์ ออกแบบ การเขียนโค๊ด การทดสอบ ฯลฯ นั้น ต้องใช้ทักษะ ความสามารถ ที่เป็นส่วนผสมระหว่าง วิทยาศาสตร์ (science) และศิลปะ (art)
มาถึงตรงนี้ ย่อมต้องมีข้อกังขาแน่นอน เพราะ เราเชื่อ (หรือถูกทำให้เชื่อ) กันมาตลอดว่า ความรู้ทางคอมพิวเตอร์ และซอฟต์แวร์นั้น เป็นเรื่องทางวิทยาศาตร์
ใครจะเรียนทางสายนี้ ก็ต้องเรียนมัธยมปลายมาทางสายวิทยาศาสตร์ ต้องเรียนฟิสิกส์ เรียนเคมี มา
ดังนั้น ผมคงจะต้องหาหลักฐานสนับสนุนเสียหน่อย

ผมจึงหาว่า มีใครบ้างที่คิดแบบนี้ .. ปรากฏว่า มีคนคิดอย่างนี้ จำนวนไม่น้อยที่เดียว
ที่น่าสนใจ คือ Blog entry ของ Jim Waldo ในหัวข้อ Software Engineering and the Art of Design ซึ่ง พูดถึงประเด็นเดียวกันนี้เลย
คุณ Jim ได้เสนอ idea ที่ว่า การเรียนในห้องเรียน (ซึ่งเค้ารวมถึงทั้งระดับปริญญาตรี และปริญญาโท … และแอบเหน็บ Ph.D. เป็นนัยๆ) ว่ายังไม่สามารถ สร้างคนให้พร้อมที่จะออกมาทำงานในด้าน Software Development ได้ทันที
โดยเขาให้เหตุผลว่า ในการเรียนในห้องเรียนนั้น สามารถให้ความรู้ในเชิงของศาสตร์ได้เพียงด้านเดียว ส่วนทางด้านศิลป์นั้น เป็นสิ่งที่ต้องฝึกฝนผ่าน apprenticeship กับผู้ที่มีความเชี่ยวชาญ (เทียบง่ายๆ กับ Jedi ในเรื่อง Star Wars ที่ Padawan หรือ Jedi ฝึกหัด ต้องฝึกโดยติดตาม Jedi Knight หรือ Jedi Master ในฐานะอาจารย์ แบบตัวต่อตัว เพื่อฝึกฝน ซึมซับ ทักษะจากอาจารย์ ก่อนที่จะได้เป็น Jedi Knight เต็มตัว)

ใน Blog entry นั้น พูดถึงหลายๆ ประเด็นที่น่าสนใจ เช่น การที่คุุณ Jim เขามองว่าการออกแบบซอฟต์แวร์นั้น เป็นศิลปะ เพราะไม่มีวิธีการใด ที่ใช้ได้ผลแน่นอนกับทุกๆ คน ต่างคนก็ต่างมีวิธีที่ดีและเหมาะสมกับตัวเองต่างๆ กันออกไป
อีกประเด็นที่น่าสนใจคือ การที่ Software Engineering ในยุคหลังๆ นี้ ให้ความสำคัญ กับ process จนมองข้ามความสามารถของตัวบุคลากร จากที่เราจะเห็นได้จาก SPI (Software Process Improvement) ส่วนใหญ่ จะอยู่บนพื้นฐานความเชื่อที่ว่า หากมี process ที่ชัดเจน มีประสิทธิภาพ แล้วจะสามารถสร้าง work product ที่ดีออกมาได้ โดยมอง resource ที่เป็นตัวบุคคลเป็นตุ๊กตา ที่สามารถใช้้ทำงานได้ ตาม process ที่วางไว้
ซึ่ง คุณ Jim ได้อ้างอิงถึง งานเขียนของ Frederick P. Brooks, Jr. ที่ชื่อ The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition ซึ่งเป็นข้อมูลจากการศึกษาที่แสดงว่า Software ที่มีการ design ที่ดี นั้นมาจาก designer ที่มีความสามารถ มิใช่มาจาก process แต่อย่างใด
ที่พูดอย่างนี้ ไม่ใช่ว่า process นั้นไม่จำเป็น แต่ว่า นอกจากที่เราจะมี process ที่ดีแล้ว ความสามารถของบุคลากร นั้นก็เป็นสิ่งที่จำเป็นเช่นกัน (ผมคงได้มีโอกาสเขียนถึงประเด็นนี้ ในอนาคต)

กลับมาเข้าสู่ประเด็นหลักดีกว่า
ตอนนี้ ผมแน่ใจแล้วว่า มีคนคิดอย่างผมเช่นกัน แสดงว่า แนวความคิดนี้ ก็คงไม่ผิด หรือไร้สาระไปเสียทั้งหมด
ในประเด็นของ apprenticeship ที่คุณ Jim กล่าวถึงนั้น ผมเห็นด้วยอย่างมากเลยทีเดียว เพราะ ผมเคยเองก็เคยอยู่ในสถานะแบบนั้น
ในช่วงปีแรกๆ ของการทำงานของผม ผมได้มีโอกาสร่วมงานกับรุ่นพี่หลายๆ คน ที่ได้ทำให้เห็นว่า ชิ้นงานที่ดีเป็นอย่างไร การทำงานแบบเป็นระบบเป็นอย่างไร
ถึงแม้ว่า ผมจะมีโอกาสอยู่ในสถานะ “เด็กฝึกหัด” แบบนั้น ได้เพียงไม่กี่ปี แต่ก็ทำให้หลังจากนั้นมา ผมสามารถที่จะเรียนรู้จากคนรอบข้าง หรือสิ่งที่พบในงาน ได้ในหลายๆ แบบ
เพราะนอกจาก จะเรียนรู้จากตัวอย่างที่ดีแล้ว … การเรียนรู้จากตัวอย่างที่ไม่ดี ก็มีประโยชน์เช่นกัน
เหมือนกับบางครั้ง ที่ได้ตั้งคำถามตัวเองว่า เราได้เรียนรู้อะไรจากความผิดพลาดของตัวเอง และ เราได้เรียนรู้อะไรจากความผิดพลาดของผู้อื่น
(ตราบใดที่เรารู้จักแยกแยะถูก/ผิด การตกลงไปอยู่ในบ่อขี้ ก็ทำให้เราสามารถเรียนรู้อะไรได้เช่นกัน)
ซึ่งถ้าไม่ได้มีโอกาสได้เห็นตัวอย่างที่ดี ในช่วงแรกๆ ของการทำงาน ผมก็อาจจะไม่มีทางแยกถูก แยกผิดได้เลย และอาจจะยึดถือปฏิบัติอะไรผิดๆ มาตลอด
(เช่น การนั่งแช่บ่อขี้อย่างมีความสุข)

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

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

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

13:09 นาฬิกา
7 กรกฎาคม 2550

11 ความเห็น »

  1. ป๋าอ๊อดของเรา…ยังเจ๋งเหมือนเคยนะพี่ ^^

    ความเห็น โดย Sunnie — กรกฎาคม 7, 2007 @ 7:20 pm

  2. ต้องให้รออีกกี่เดือนเนี้ยะ เหอ ๆ

    ความเห็น โดย dto — กรกฎาคม 7, 2007 @ 10:51 pm

  3. management มันก็เป็นศิลปะแต่ไหนแต่ไรแล้วนี่ครับ

    ผมว่าเรามองว่ามันวิทยาศาสตร์ เพราะว่า programmer ส่วนใหญ่แค่อยากจะเขียนโค้ดมากกว่า ไม่ได้อยากจะเป็นผู้บริหาร

    http://www.softwarebyrob.com/archive/2007/07/06/Why_Good_Developers_Promoted_into_Unhappiness.aspx

    ผมคิดว่างั้นน่ะนะ

    ความเห็น โดย chakrit — กรกฎาคม 8, 2007 @ 6:20 pm

  4. ผมคงไม่ “แตะ” เรื่องของ management ครับ

    จริงๆ แล้ว ผมอยากจะ focus ที่เรื่องของ design มากกว่า ที่จะเป็น Software Engineering กว้างๆ
    แต่ว่า อีกใจหนึ่งก็อยากจะเขียนเรื่องอื่นๆ ด้วย (construction, testing, requirements etc.)
    เลยขอตั้งชื่อ “ตีขรุม” ไว้ก่อน

    เรื่องเวลาเนี่ย .. ต้องรอกันไปครับ
    แต่รับรอง ได้อ่านกันก่อนได้เลือกตั้งแน่นอน (ไม่ว่าจะได้เลือกตั้งเมื่อไหร่ก็ตาม)

    ความเห็น โดย siroz — กรกฎาคม 9, 2007 @ 7:35 pm

  5. เป็นหัวข้อที่น่าติดตามครับ ไว้จะอ่านและแสดงความเห็นเป็นระยะๆให้ครับ

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

    ความเห็น โดย นายข้าวโพดหวาน — กรกฎาคม 23, 2007 @ 7:38 pm

  6. ขอบคุณครับ🙂

    ความเห็น โดย siroz — กรกฎาคม 23, 2007 @ 7:54 pm

  7. 1. Software Engineering คือ

    2. ปัจจัยที่ส่งผลให้การพัฒนา Software ล้มเหลว คืออะไร

    3. คุณภาพของ Software วัดจากอะไร

    อยากทราบอะคะ ช่วยตอบที……

    ความเห็น โดย iicez ka — ตุลาคม 25, 2007 @ 8:31 pm

  8. คำถาม เหมือนออกมาจากการบ้าน หรือข้อสอบเลย
    แต่ละข้อที่ถาม ตอบกันได้เป็นหนังสือเป็นเล่มๆ เลยครับ .. ยังไงลอง search หาจาก Internet ดู น่าจะหาคำตอบได้ไม่ยากครับ

    ความเห็น โดย siroz — ตุลาคม 30, 2007 @ 7:39 pm

  9. ดีค่ะ ดิฉันพึ่งเข้ามาชมเว็บนี้ เห็นอาจารย์เขาแนะนำมาเพื่อให้ดิฉันได้ศึกษา
    ยังงัยขอเป็นส่วนหนึ่งได้ไหมค่ะ เพราะตอนนี้เรียนวิทยาการคอมพิวเตอร์แต่เรียนไม่เก่งเลย จึงอยากมีคนให้ปรึกษาบ้างค่ะ ขอบคุณค่ะ

    ความเห็น โดย tutah — พฤศจิกายน 5, 2007 @ 10:57 am

  10. ยินดีต้อนรับครับ .. อ่านแล้วมีอะไร พูดคุย ถาม หรือเสนอแนะได้ครับ

    ความเห็น โดย siroz — พฤศจิกายน 6, 2007 @ 1:31 pm

  11. software engineeing process(sep) มันมีกระบวนการอะไรบ้างค่ะ พอดีอาจารย์ให้หา และให้ออกไปอธิบาย พร้อมกับการออกแบบ sep ที่เป็นของตัวเองด้วยค่ะ เลยอยากทราบว่า sep เนี่ยมันประกอบไปด้วยอะไรบ้าง ขอบคุณค่ะ

    ความเห็น โดย tutah — พฤศจิกายน 12, 2007 @ 9:47 am


RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

สร้างเว็บไซต์หรือบล็อกฟรีที่ WordPress.com.

%d bloggers like this: