แนวคิดในการพัฒนาโปรแกรมที่น่าสนใจ (จริงๆ ก็มีมานานแล้วละนะแต่ยังไม่ค่อยบูมในบ้านเราซักเท่าไหร่นัก)

Extreme Programming

    <p class="MsoNormal"><span style='font-size: 14pt; font-family: "Angsana New"'>อีกหนึ่งในทางเลือกของการการพัฒนา</span> Application <span style='font-size: 14pt; font-family: "Angsana New"'>ที่ยึดหลักง่ายๆ 4 อย่างด้วยกันคือ </span>simplicity, communication, feedback and courage<br><br><span style="color: #ff3300">Simplicity:</span> <span style='font-size: 14pt; font-family: "Angsana New"'>ทำทุกอย่างให้ง่ายที่สุด ปรัชญาการเขียนโปรแกรมแบบ </span>KISS (<span style='font-size: 12pt; font-family: "Times New Roman"'>Keep It Simple and Sequential</span>) <span style='font-size: 14pt; font-family: "Angsana New"'>คือหัวใจของการพัฒนาโปรแกรมแบบ </span>XP. <span style='font-size: 14pt; font-family: "Angsana New"'>ให้นำหลักการนี้ไปใช้กับทุกๆ ส่วนของโปรแกรม</span></p>    <p class="MsoNormal"><span style="color: #ff3300">Communication:</span> <span style='font-size: 14pt; font-family: "Angsana New"'>การสื่อสาร ตีความได้หลายๆทาง สำหรับโปรแกรมเมอร์คือการ</span> coding <span style='font-size: 14pt; font-family: "Angsana New"'>ที่ดี </span>comment <span style='font-size: 14pt; font-family: "Angsana New"'>ที่ดี แต่</span>!!<span style='font-size: 14pt; font-family: "Angsana New"'> การเขียนโค๊ดที่อธิบายตัวมันเอง(</span>Self-documenting<span style='font-size: 14pt; font-family: "Angsana New"'>) อยู่แล้วดีที่สุด (การตั้งชื่อ </span>Method, Variable <span style='font-size: 14pt; font-family: "Angsana New"'>ที่สื่อความหมาย ไม่ควรตั้งชื่อตัวแปรแบบลอยๆ เช่น</span> int x int y<span style='font-size: 14pt; font-family: "Angsana New"'>)</span><span style='font-size: 14pt; font-family: "Angsana New"'>การทำ </span>unit test <span style='font-size: 14pt; font-family: "Angsana New"'>ก็เป็นอีกทางหนึ่งในการควบคุมการสื่อสารให้ตรงกัน (แก้ไขโค๊ดยังไงก็ต้องได้ผลลัพธ์เหมือนเดิม)</span></p>    <p class="MsoNormal"><span style="color: #ff3300">Feedback:</span> <span style='font-size: 14pt; font-family: "Angsana New"'>มีวงจรการพัฒนารอบละสั้นๆ เพื่อให้ลูกค้าได้ทำการตรวจสอบ ให้ตรงตามความต้องการและที่</span>user <span style='font-size: 14pt; font-family: "Angsana New"'>พึงพอใจ เพื่อไม่ให้มีการเสียเวลาในการปรับ </span>requirement <span style='font-size: 14pt; font-family: "Angsana New"'>ที่มีการพัฒนามานานโดยที่</span> user<span style='font-size: 14pt; font-family: "Angsana New"'>ไม่เคยเห็น</span> Application<span style='font-size: 14pt; font-family: "Angsana New"'> จริงเลย แล้วไม่พอใจหลังจากทำการส่งมอบ ต้องเสียเวลาในการแก้ไข ในบางครั้งอาจจะถึงขั้นต้อง แก้ไขทั้ง </span>module <span style='font-size: 14pt; font-family: "Angsana New"'>เป็นต้น (ขั้นตอนนี้เหมือนกับการพัฒนาโปรแกรมแบบ </span><a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Agile</a> <span style='font-size: 14pt; font-family: "Angsana New"'>)</span></p>    <p class="MsoNormal"><span style="color: #ff3300">Courage:</span> <span style='font-size: 14pt; font-family: "Angsana New"'>ความกล้าที่จะเปลี่ยนแปลง โดยเฉพาะหลักการ </span>pair programming <span style='font-size: 14pt; font-family: "Angsana New"'>ที่ดูเผินๆแล้วจะเหมือน </span>productivity <span style='font-size: 14pt; font-family: "Angsana New"'>จะหายไปครึ่งหนึ่ง เพราะใช้โปรแกรมเมอร์ถึงสองคนในการทำงานเดียวกัน อีกทั้งการพัฒนาโปรแกรมแบบ </span>Simplicity <span style='font-size: 14pt; font-family: "Angsana New"'>ที่อาจจะฝืนความรู้สึกของโปรแกรมเมอร์ไปบ้าง</span></p>    <p style="text-indent: 36pt" class="MsoNormal"><span style='font-size: 14pt; font-family: "Angsana New"'>โดยที่ขั้นตอนการพัฒนาแบบ </span><a href="http://www.extremeprogramming.org/rules.html" target="_blank">Extreme programming</a>  <span style='font-size: 14pt; font-family: "Angsana New"'>จะเริ่มจากการซอย </span>requirement <span style='font-size: 14pt; font-family: "Angsana New"'>ให้เป็นหน่วยย่อยๆ ที่สุดพร้อมประเมินเวลาที่จะต้องใช้ในการพัฒนาหน่วยนั้นๆ (ในช่วงแรกๆ อาจจะยังประเมินไม่ถูกต้องนักแต่หลังจากชินแล้วจะง่ายขึ้น) แล้วเขียนใส่แผ่นกระดาษแข็งตัดเป็นการ์ด (เรียกว่า </span>user stories<span style='font-size: 14pt; font-family: "Angsana New"'>) ให้ </span>user <span style='font-size: 14pt; font-family: "Angsana New"'>เลือกว่าชิ้นไหนมีความสำคัญมากกว่า</span> (More priority) <span style='font-size: 14pt; font-family: "Angsana New"'>เพื่อทำการพัฒนาขึ้นมาก่อน </span></p>  <p style="text-indent: 36pt" class="MsoNormal"><span style='font-size: 14pt; font-family: "Angsana New"'>จับคู่โปรแกรมเมอร์เพื่อทำการพัฒนาหน่วยย่อยนั้นๆ (</span>Module, Function, Method) <span style='font-size: 14pt; font-family: "Angsana New"'>โดยเมื่อพัฒนาเสร็จแล้วให้ </span>user <span style='font-size: 14pt; font-family: "Angsana New"'>ตรวจสอบเมื่อพึงพอใจแล้วให้ </span>user <span style='font-size: 14pt; font-family: "Angsana New"'>เลือก </span>user stories <span style='font-size: 14pt; font-family: "Angsana New"'>ชิ้นใหม่ขึ้นมา จับคู่โปรแกรมเมอร์ใหม่แล้วพัฒนาต่อไปจนจบ</span></p>    <p class="MsoNormal"> <br><strong><span style='font-size: 14pt; font-family: "Angsana New"; color: red'>หลักการเขียนโปรแกรมแบบ </span><span style="color: red">Extreme programming</span></strong><strong><span style='font-size: 14pt; font-family: "Angsana New"; color: red'> (</span><span style="color: red">Simplicity</span></strong><strong><span style='font-size: 14pt; font-family: "Angsana New"; color: red'>)</span></strong></p>  <p class="MsoNormal"><span style='font-size: 14pt; font-family: "Angsana New"'><span> </span></span><span>           </span><span style='font-size: 14pt; font-family: "Angsana New"'>จะต้องเขียน </span><a href="http://en.wikipedia.org/wiki/Unit_test" target="_blank">Unit test </a> <span style='font-size: 14pt; font-family: "Angsana New"'>ก่อนที่จะพัฒนาโปรแกรม!!! เพื่อเป็นการตรวจสอบ </span>Module <span style='font-size: 14pt; font-family: "Angsana New"'>ของเราว่าทำงานได้อย่างถูกต้อง และเพื่อให้ง่ายในการตรวจสอบเมื่อมีการแก้ไขโค๊ดโดยบุคคลอื่นๆ (เพราะเราใช้โปรแกรมเมอร์สองคนในการพัฒนา 1</span> module <span style='font-size: 14pt; font-family: "Angsana New"'>ถ้าไม่มีการคุมกรอบไว้จะทำให้การแก้ไขโค๊ดเป็นไปอย่างยากลำบาก เนื่องจากกลัวว่าแก้แล้วจะทำงานผิดพลาด ถ้าเรามี</span> <a href="http://en.wikipedia.org/wiki/Unit_test" target="_blank">unit test</a>  <span style='font-size: 14pt; font-family: "Angsana New"'>โปรแกรมเมอร์ที่มาแก้ไขจะสามารถตรวจสอบได้ด้วยตนเองจนพอใจ) หรือแม้กระทั่งตัวเราเองเมื่อเวลาผ่านไปนานมากๆ (จนตัวโปรแกรมเมอร์ที่พัฒนาเองอาจจะลืมไปแล้ว) เรียกกระบวนการนี้ว่า </span><a href="http://en.wikipedia.org/wiki/Test_Driven_Development" target="_blank">test-driven development</a> </p><p class="MsoNormal"><br><span style='font-size: 14pt; font-family: "Angsana New"'>อ้างอิง</span></p>  <p class="MsoNormal">Java™ Extreme Programming Cookbook</p>  <p class="MsoNormal">By Eric M. Burke, Brian M. Coyner</p>