Computer

2005/Oct/18

แหม.. เรื่องนี้ค่อนข้างใหม่สำหรับเราเพราะเราไม่ค่อยได้ใช้มากเท่าไหร่ในการทำงาน แต่ก็ค่อนข้างมั่นใจว่าโปรแกรมเมอร์หลายคนในบ้านเราก็ไม่ค่อยรู้จักกันมากนัก (จริงๆ ก็ดูเอาจากเพื่อนๆ ตัวเองนั่นแหละ --"-- ) และตอนนี้จำเป็นต้องทำ presentation เกี่ยวกับไอ้เรื่องนี้ซะด้วยสิ ไหนๆ ก็ไหนๆ แล้ว เลยเอามาเล่าสู่กันฟังดีกว่าเนอะ ใครอยากเสริมอะไรตรงไหน ว่ากันมาได้เลยนะคะ (แต่ให้เดาบล็อกวันนี้ต้องเป็นอันที่ไม่ค่อยมีคนอ่านแน่ๆ ฮะๆ)

Extreme Programming (XP) ถือกำเนิดขึ้นช่วงประมาณปี 1990 มีชายผู้หนึ่งนามว่า Kent Beck พยายามคิดค้นวิธีที่จะสร้างโปรแกรมดีๆ ออกมา (และ bug น้อยๆ) ก็ได้ช่วยกันคิดกับเพื่อนอีกคนคือ Ward Cunningham ว่าอยากให้มันเป็นแนวความคิดที่ง่ายๆ แต่มีประสิทธิภาพสูง ใครๆ ก็สามารถทำได้ จึงร่วมกันทำโปรเจ็คอันนึงและก่อให้เกิดการโปรแกรมแบบ Extreme Programming ขึ้นมา

การเขียนโปรแกรมโดยถือทางแบบ XP นี้ มีหลักการย่อยๆ อยู่นิดเดียว

1. Pair Programming ก็คือการเขียนโปรแกรมเป็นคู่หรือเป็นกลุ่มนั่นเอง (แต่เป็นกลุ่มคงทะเลาะกันตาย เป็นคู่ดีกว่าเนอะ)
2. Test-Driven Development ซึ่งคือ การเขียนโปรแกรมโดยมีการ test ก่อนโปรแกรมทีหลัง (ฟังแล้วงงๆ)

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

ลองคิดดูว่า ถ้าเราโปรแกรมคนเดียว คิดคนเดียว ออกแบบคนเดียว ต่อให้เดินทางมาผิด เราก็จะไม่รู้ว่าผิดตั้งแต่ตรงไหน และจะไม่รู้จนกระทั่ง เราเจอทางตันหรือ error ตัวแดง สิ่งที่จำใจต้องทำก็คือ การรื้อโค้ด การแก้ แก้ แก้ แก้ จนโค้ดมันเริ่มมั่ว แก้ตรงนั้น กระทบตรงนี้ สรุป.. ก็ต้องใช้เวลาแก้นานอยู่ดี --"-- การทำ pair-programming จะช่วยให้ลดความเสี่ยงตรงนี้ลงได้มากทีเดียว

อีกสิ่งหนึ่งที่ควรทราบคือ การโปรแกรมโดยใช้หลักการ Test-driven development (TDD) เป็นการโปรแกรมโดยมีการทำ test เป็นสิ่งที่ช่วยนำไปสู่เป้าหมายที่เรากำหนด (abstract จัง อ่านเองยังไม่รู้เรื่อง) มีคนให้คำจำกัดความโปรแกรมที่ใช้วิธี TDD เขียนว่า CLEAN CODE THAT WORKS ความหมายก็ตรงตัว คือ โปรแกรมที่เรียบง่ายและทำงานได้สมบูรณ์ วิธีการเขียนโปรแกรมแบบ TDD มีหลักการดังนี้

เมื่อเราลิสต์สิ่งที่เราต้องการออกมา (interface, features, functions/methods,...)

1. เขียนเทสต์ออกมาเพื่อที่จะเทสต์สิ่งที่อยู่ในลิสต์ (ทีละอันก่อน)
2. compile/run โปรแกรมและมันก็จะเทสต์ไม่ผ่าน (ก็ยังไม่ได้เขียนอะไรเลยอ่ะ ผ่านก็ผีหลอกแล้ว)
3. เขียนโค้ดง่ายๆ เข้าไป (เน้นว่าง่าย) ถ้าเป็น function จะ return ค่าคงที่หรืออะไรก็ได้เข้าไปก่อนก็ได้ ขอแค่ให้ test ผ่านก็พอ
4. จากนั้นก็ run โปรแกรมซึ่งก็ควรจะผ่าน
5. กลับไปดู function หรือโค้ดใดๆ ที่เพิ่งแก้ไปในข้อ 3 เขียนมันให้สมบูรณ์แล้วจึง compile ใหม่ (และก็ควรจะผ่าน) ถ้ามันเป็น function ที่ซับซ้อนมากนัก ก็แตกออกมาให้ย่อยลงมาอีกหน่อย จากนั้นก็ย้อนกลับไปทำที่ข้อ 1 โดยก้าวไปสู่ข้อที่ 2 ในลิสต์ของเราที่ทำไว้

สมมติว่าเราจะเขียนโปรแกรมเครื่องคิดเลขง่ายๆ ขึ้นมา แค่บวก ลบ คูณ หารได้ก็พอ อย่างแรกที่ต้องทำคือเขียนเทสต์

public class MyApp() {
public MyApp() {
plus(1,2);
}
}

จากข้างบน เราเริ่มจากเขียนเรียก interface ที่เราอยากมี(เมื่อโปรแกรมเสร็จ) และก็ compile ซึ่งก็จะไม่ผ่านเพราะมันไม่มี method Plus() ซักหน่อย --"-- ก็ทำตามข้อ 3 เขียนโค้ด

public class MyApp() {
public MyApp() {
plus(1,2);
}

public plus(int i, int j) {
return 0;
}

}

ใส่ function นั้นเข้าไปแล้ว return อะไรซักอย่างออกมาก่อนก็ได้ compile ผ่านและกลับไปเขียนโค้ดให้สมบูรณ์ ได้ออกมาเป็นว่า

public class MyApp() {
public MyApp() {
plus(1,2);
}

public plus(int i, int j) {
int sum = 0;
sum = i + j;
return sum;

}
}

ก็จะเป็นการสมบูรณ์(ในระดับหนึ่ง)สำหรับ method Plus() หาต้องการให้มันเช็ค null หรือค่าอะไรได้มากกว่านี้ก็ทำการเพิ่มเทสต์เข้าไปและเริ่มต้นวงจรใหม่ที่ข้อ 1 ทำอย่างนี้ไปเรื่อยๆ จนทำ feature ต่างๆ ในลิสต์จนครบ การเขียนเทสต์ย่อยๆ ขึ้นมาแต่ละข้อนั้น ก็ทิ้งไว้และเขียนเพิ่มไปเรื่อยๆ จนกว่าคิดว่าเทสต์ข้อนั้นไม่จำเป็นต้องมีแล้วหรือเป็นการเทสต์ซ้ำกับข้ออื่น ก็ให้ลบได้

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

ตัวอย่างที่เคยอ่านจากหนังสือของ Kent Beck ชื่อหนังสือ Test-Driven Development ตรงตามตัวเลย เค้ามีตัวอย่างการเขียนจากไม่กี่บรรทัดอย่างที่ยกตัวอย่างให้ดู เขียนไปเรื่อยๆ จนสร้าง super class สร้างinterface สร้างอะไรต่างๆ เป็นเรื่องเป็นราว สิ่งที่คนใช้ TDD ควรรู้เป็นอย่างดีก็ได้แก่การทำ OOP และหลักการ programming ต่างๆ ทั้งหลายนั่นเอง (อันนี้แหละที่ย๊ากยาก) ดังนั้น การทำ TDD จึงควรทำเป็น pair-programming ด้วย (ลำพังเดี๊ยนคนเดียว ไปไม่รอดแน่)

ข้อดีมากๆ ของการทำ XP คือนั่นแหละ CLEAN CODE THAT WORKS โปรแกรมที่ใครอ่านก็เข้าใจง่าย (เกิดใครมาเอาไปทำต่อ จะได้ไม่งงตาแตก) และทำงานได้ตรงอย่างที่เราต้องการอยากให้ทำ การทำ TDD จะเป็นการออกแบบโปรแกรมออกมาในเชิง Top-Down คือ design ออกมาจากผลลัพธ์ที่เราอยากจะได้ สิ่งที่ได้ออกมาก็จะตรง requirement มากกว่า และโค้ดก็จะไม่รกรุงรัง

โดยส่วนตัวแล้ว เราเคยลองเฉพาะ pair-programming ยังไม่เคยใช้ TDD เขียนโปรแกรมเลย แต่เดี๋ยวคงจะต้องได้ทำแล้วแหละ (โดนบังคับ แงๆ) จริงๆ มีเรื่องราวอีกเยอะที่อยากพูดเกี่ยวกับ TDD แต่แค่นี้ก็แทบไม่มีคนเข้ามาอ่านแล้วกระมัง (ーー;)ถ้ามีคนสนใจ ไว้เดี๋ยวจะกลับมาเขียนใหม่ละกันนะจ้ะ ~♪

2005/Sep/20

เริ่มต้นชื่อเรื่องมาก็น่าเบื่อสำหรับบางคน แต่จริงๆ รู้ไว้ก็ดีเหมือนกันนะ.. เผื่อวันนึงจำเป็นต้องสอบมาไว้ประดับบารมี(หรืออาจจะโดนบังคับให้สอบ อย่างเราเป็นต้น -"- )

  • Microsoft Certified Architect Program
    อันนี้ชื่อก็บอกว่าสำหรบวิศวกรผู้ออกแบบระบบ คนสอบจะต้องมีความเข้าใจเรื่องเกี่ยวกับ network และกลไกของ software และระบบต่างๆ ที่เกี่ยวข้อง
  • MCDST
    ย่อมาจาก Microsoft Certified Desktop Support Technicians ผู้สอบจะต้องมีความสามารถทั้งในด้านเทคนิกและซัพพอร์ตลูกค้า (แหม.. ตามชื่อเลยเนอะ) ใบประกาศนี้ต้องสอบวิชาบังคับ 2 วิชา และจะให้ดีควรมีใบประกาศวิชาเกี่ยวกับ soft skill (เช่นพวกใบประกาศการอบรมภาษาอังกฤษ เป็นต้น)
  • MCLC
    ย่อมากจาก Microsoft Certified Learning Consultant เป็นใบประกาศใหม่ มีไว้สำหรับผู้ที่ต้องการเป็นผู้ให้คำปรึกษาเกี่ยวกับการออกแบบ การพัฒนาระบบบนระบบปฏิบัติการ Windows
    สำหรับใบประกาศอันนี้ ไม่ค่อยรู้เรื่องเหมือนกันอ่ะ อิๆ
  • MCSA
    ย่อมาจาก Microsoft Certified Systems Administrators สำหรับผู้ดูแลระบบซึ่งต้องดูแลรวมไปถึงการรักษาความปลอดภัยของระบบด้วย มีให้เลือกว่าจะสอบแบบระบบ Windows Server 2003 หรือ Windows 2000 วิชาที่สอบก็จะเกี่ยวกับการติดตั้ง การดูแล การรักษา การป้องกันและแก้ไขปัญหาที่อาจเกิด

    สำหรับ Windows Server 2003 จะต้องสอบวิชาบังคับ 3 วิชา วิชาเลือก 1 วิชา และอัพเกรดอีก 1 วิชา ในขณะที่ Windows 2000 ไม่ต้องสอบวิชาอัพเกรด
  • MCSE
    ย่อมาจาก Microsoft Certified Systems Engineers สำหรับเหล่านักวิศวกรคอมพิวเตอร์อีกแล้วครับท่าน แต่ใบนี้จะเฉพาะเจาะจงลงไปถึงชนิดของ OS เลย ต้องเลือกว่าจะสอบอันไหน (Windows 2003 Server หรือ Windows 2000) ผู้สอบจะต้องเป็นผู้มีความสามารถในการออกแบบ infrastructure ของระบบทั้งระบบได้

    สิ่งที่หรูหราของใบประกาศชนิดนี้คือ นอกจากต้องสอบให้ผ่านถึง 7 วิชาแล้ว (บังคับ 6 เลือก 1) ก็ต้องสอบอัพเกรดให้ผ่านอีก 2 วิชา (สรุปคือ ต้องรู้หมดทุก OS แหละนะ) แต่ Windows 2000 ไม่มีสอบอัพเกรด จะกลายเป็นสอบวิชาบังคับ 5 วิชาเลือก 2
  • MCDBA
    ย่อมาจาก Microsoft Certified Database Administrators ก็ตรงตามชื่อเลย มีไว้เพื่อเหล่านักพัฒนา database โดยเฉพาะ ผู้สอบควรสามารถออกแบบ พัฒนา และรักษาฐานข้อมูล (และแน่นอน ควรรู้และใช้ Microsoft SQL Server ให้เป็นอย่างยิ่ง)

    ใบประกาศนี้ต้องสอบให้ผ่าน 4 วิชา (บังคับ 3 เลือก 1) และเลือกเอาว่าต้องการสอบอ้างอิง Microsoft SQL 7.0 หรือ Microsoft SQL 2000 Enterprise Edition และมีให้เลือกอ้างอิง OS ตัวใดตัวหนึ่งระหว่าง Windows 2003 Server หรือ Windows 2000 Server
  • MCT
    ย่อมาจาก Microsoft Certified Trainers ที่เป็นสำหรับผู้ต้องการมีใบประกาศเป็นเทรนเนอร์ในคอร์สต่างๆ เกี่ยวกับด้าน IT (เฉพาะในสาขาของ Microsoft)

    จะสอบใบประกาศนี้ คุณจะต้องมีใบประกาศของ Microsoft อันไดอันหนึ่งในลิสต์เหล่านี้อย่างน้อย 1 ใบหรือใบประกาศ Microsoft Business Solutions ก็ได้ จากนั้นก็ร่างความสามารถอันล้ำลึกที่ซ่อนอยู่เขียนไปพร้อมส่งใบสมัครไปที่ Microsoft (เค้าว่างั้น) แล้วเค้าก็จะพิจารณาเองอ่ะมั๊ง อิอิ.. อันนี้ไม่แน่ใจแฮะ..
  • MCAD
    ย่อมาจาก Microsoft Certified Application Developers เป็น certificate ที่โปรแกรมเมอร์หลายคนน่าจะมีไว้ (เอาไว้กันผี เอ้ย.. เอาไว้บ่งบอกความถนัดของตัวเอง) ส่วนใหญ่จะรวมไปถึงเทคโนโลยี Microsoft .NET เราสามารถเลือกได้ว่าจะสอบแบบ Visual Basic หรือ C# และเลือกเอาว่าต้องการจะ focus ไปในด้าน web-based application หรือ window-based application

    Certificate อันนี้จะต้องสอบให้ผ่าน 3 วิชา (บังคับ 2 เลือก 1)
  • MCSD
    ย่อมาจาก Microsoft Certified Solution Developers ซึ่งสิ่งที่สอบก็จะคล้ายกับ MCAD แต่จะมีสอบเพิ่มอีก 2 วิชา คือ Developing and Implementing Windows-based Applications และ Developing XML Web Services and Server

    คนสอบ Certificate นี้นอกจากจะรู้การพัฒนา software แล้วยังต้องรู้ว่าควรออกแบบยังไงให้ดี สามารถพัฒนาได้ง่ายและมีความยืดหยุ่นในการพัฒนา สรุปคือ Certificate นี้ต้องสอบให้ผ่าน 5 วิชา (บังคับ 4 เลือก 1)
  • Microsoft Office Specialist
    อันนี้ชื่อบอกเลย ว่าเป็น Certificate สำหรับ Office Desktop software ซึ่งก็ได้แก่เหล่าตระกูล Microsoft Office ทั้งหลาย แต่อย่าคิดว่าง่ายนะจ้ะ.. ลองมาใช้กันจริงๆ แล้ว แหม.. มันก็มีอะไรเยอะแยะไปหมด จำกันไม่หวาดไม่ไหว คนจะสอบอันนี้ได้คงต้องรู้ shortcut และ trouble shooting ของโปรแกรมทั้งหมดเลยเนอะ (ไม่เคยสอบเหมือนกัน)

Certificate ที่เราต้องสอบก็คือ MCSD ซึ่งสอบ 5 วิชา (≧_≦) บ้าไปแล้ว.. คนขยัน(น้อย) อย่างชั้น จะสอบได้ไหมนี่ ตอนนี้ก็กำลังเสาะแสวงหาที่เรียนซึ่งก็เล็งๆ ไว้อยู่เหมือนกัน แต่ก็ต้องดูด้วยว่าจะเรียนได้เมื่อไหร่ ถ้าใครคิดอยากจะไปสอบก็บอกกันได้นะจ้ะ จะได้มีเพื่อนเรียน (แบบว่า.. ถ้าไม่เข้าใจจะได้มีคนถามง่ะ อิอิ)

ตอนนี้แว้บมาบอกเรื่องราวเกี่ยวกับเจ้าตัว Certificate ของไมโครซอฟต์เท่านี้ก่อน ไว้มีอะไรใหม่ๆ จะกลับมาเล่าให้ฟังนะจ้ะ