AAR: ส่งการบ้านครบแล้ว ให้เกรดตัวเองเสียหน่อย


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

ซอฟท์แวร์แต่ละตัวมีประวัติการพัฒนาผาดโผนแตกต่างกันไปครับ ผมจะเล่าให้ฟังพอเป็นกระสัย เพราะถ้าให้เล่าจริงๆ ในรายละเอียดผมเล่าได้เป็นเล่มหรือถ้าให้เล่าด้วยการพูดก็ต้องจองเวลามาตราฐานกันตั้งแต่ 9.00-16.30 น. เป็นอย่างน้อย

ก่อนอื่นต้องบอกก่อนว่าภาษาที่เราใช้ในการพัฒนาซอฟท์แวร์ทั้งสามตัวคือภาษา Python ซึ่งเป็นภาษาที่เราชอบมาก แต่เป็นภาษา “underdog” ไม่ค่อยได้รับความสนใจจาก “mainstream” เท่าที่ควร ทำให้มีหลายประเด็นในการใช้งานภาษานี้ที่เราต้องพัฒนาซอฟท์แวร์พื้นฐานมาประกอบ แต่ด้วยความที่ภาษา Python ออกแบบไว้ดีมากทำให้เราสามารถบรรลุวัตถุประสงค์ได้อย่างรวดเร็วและค่อนข้างจะ “bug-free” เมื่อเทียบกับโปรแกรมที่พัฒนาด้วยภาษาอื่นที่ตัวภาษาออกแบบไว้ไม่ได้รัดกุมเท่ากับภาษา Python

นอกจากนั้น software engineering methodology ที่เราใช้ในการพัฒนาซอฟท์แวร์ทั้งหมดอยู่ภายใต้กรอบแนวความคิดใหญ่ที่ชื่อว่า Agile Software Development ทำให้ซอฟท์แวร์ของเรา “สด” และดูเหมือน “ไม่เสร็จ” แต่ก็ให้ใช้แล้ว แต่ด้วยธรรมชาตินี้ของ Agile Software Development เรากลับได้ Software ที่ “usable” และ “evolve” ไปพร้อมกับการใช้งาน เรียกได้ว่าเราคงความ “สด” ของซอฟท์แวร์ไว้ได้ตลอดการใช้เราก็บรรลุในวัตถุประสงค์ของการใช้ Agile Software Development แล้ว

ภาษา Python และ Agile Software Development ยังไม่มีหนังสือในภาษาไทยวางขายในท้องตลาดทำให้เรามีความคิดที่จะเขียนหนังสือเกี่ยวกับสองสิ่งนี้ แต่ก็ไม่รู้จะใช้เวลาไหนเขียน เพราะเรายังมีซอฟท์แวร์ที่วางแผนไว้และรอพัฒนาอยู่อีกหลายตัวด้วยกัน ไหนจะเรื่องสอนหนังสืออีก สำหรับผมเองบางครั้งผมก็ลืมๆ ไปเหมือนกันว่างานที่กินเงินเดือนเป็นหลักอยู่ทุกวันนี่มันงานสอนหนังสือ (นี่หว่า) แต่ก็ยังใจชื้นที่นักศึกษา (บางส่วน) ชอบใจที่อาจารย์ผู้สอนมีผลงานให้เห็นเป็นตัวตน ผมบอกนักศึกษาว่าอาจารย์มหาวิทยาลัยนั่นเหมือนพระนั่นล่ะ พระมีสายเทศน์กับสายปฎิบัติ อาจารย์ก็มีสายสอนกับสายวิจัย และเป็นเรื่องปกติที่อาจารย์สายวิจัยมักสอนไม่รู้เรื่อง เพราะไม่ชอบสอน มีอะไรก็ไล่ให้ไปลองทำเองเสมอ ถือว่าความรู้เกิดขึ้นได้ลึกซึ้งก็ด้วยการปฎิบัติ การอธิบายเล่าได้ก็เพียงผิวๆ เท่านั้น ไม่ถนัดอธิบายว่างั้นเถอะ

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

สาเหตุที่พัฒนาได้เร็วนั้นก็เพราะ FeedSpring เป็นซอฟท์แวร์ที่ไม่ซับซ้อนเท่าไหร่ครับ แถมเป็น Desktop Application อีกต่างหาก สำหรับเราแล้ว Desktop Application นี่พัฒนาง่ายกว่า Web Application ครับ เป็นความถนัดส่วนตัว และถ้าจะให้เกรดสำหรับ FeedSpring นั้น ผมขอให้เกรด A ครับ สาเหตุที่ได้ A เพราะโจทย์มันง่าย

ส่วนซอฟท์แวร์ตัวต่อไปคือ MemeExpress ที่ใช้กับ GotoKnow.org นี่ล่ะ ที่จริงแล้วสิ่งที่เราเสนอ สคส. ในตอนต้นคือการนำ WordPress มาแปลเป็นภาษาไทย แต่เรามีความเห็นว่าเราต้องการพัฒนาซอฟท์แวร์ที่ออกมาจากประเทศไทยมากกว่าใช้ซอฟท์แวร์ต่างชาติ นอกจากนั้นเรายังมีความหวังไว้สูงว่าเราอยากจะให้ซอฟท์แวร์ที่ออกจากประเทศไทยได้ไปตีซอฟท์แวร์ต่างชาติบ้าง หลังจากประเทศเราใช้ซอฟท์แวร์จากต่างชาติเป็นหลักมาโดยตลอด แล้วเราก็ยังภาคภูมิใจกับการ “ได้ใช้” ซอฟท์แวร์จากต่างชาติอีกต่างหาก

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

ด้วยความต้องการที่จะสร้าง “มุมมองใหม่” ในการใช้ซอฟท์แวร์ให้เกิดขึ้นในประเทศไทย เราจึงตัดสินใจพัฒนา MemeExpress ขึ้นมาภายใต้กรอบเวลาหนึ่งเดือนที่ สคส. ให้สำหรับการแปล WordPress แน่นอนครับ เราทำไม่ทัน แต่เราก็ขอยืดเวลาด้วยความเข้าใจอันดีของ สคส. จนกระทั่งได้ MemeExpress มาใช้กับ GotoKnow.org ใช้เวลาไปทั้งหมดสามเดือนเต็มๆ แต่เราก็ยังไม่ได้หยุดพัฒนาเพียงแค่นั้นครับ เราพัฒนา MemeExpress ไปอย่างต่อเนื่องสอดคล้องกับ Agile Software Development Methodology

อย่างไรก็ตาม MemeExpress ยังเปิดให้ download ไปใช้ไม่ได้ เพราะโค้ดมีความซับซ้อน (Complexity) เกินไป เราต้องลดความซับซ้อน (Refactoring) ออกมามากกว่านี้ถึงจะเปิดให้ใช้ได้ มิฉะนั้นเราจะดูแลไม่ไหวในการพัฒนาอย่างต่อเนื่อง

ความซับซ้อนของ MemeExpress เกิดจากความพยายามสร้าง Web Development Framework ที่เลียนแบบ Desktop Development Framework (นั่นคือเราพยายามสร้าง Framework ที่ทำงานแบบเดียวกับ ASP.net สำหรับ Python) ซึ่งปรากฎผลว่ายิ่งทำก็ยิ่งซับซ้อนและยากต่อการดูแลเป็นอย่างยิ่ง

แต่ความผิดพลาดเป็นบทเรียนเพื่อนำมาซึ่งความสำเร็จครับ เราเห็นว่า Framework ที่เราพัฒนานั้นซับซ้อนเกินไป และเราเรียนรู้ว่าการพัฒนา web development model เลียนแบบ desktop development model นั้นไม่เหมาะเป็นอย่างยิ่ง เราจึงพัฒนา Framework ใหม่ชื่อว่า Usable Web Framework (UWFW) ซึ่งมีขนาดเล็กและใช้ง่าย และเราได้ใช้ Framework นี้ในการพัฒนา PlanetMatter ซึ่งเป็นซอฟท์แวร์ตัวล่าสุดที่เราเพิ่งเผยแพร่

UWFW ยังไม่ได้เผยแพร่อย่างเป็นทางการครับ แต่ใครสนใจสามารถดูได้ในโค้ดของ PlanetMatter เราจะใช้เวลาอีกหน่อยในการทำให้ใช้ง่ายขึ้นและเขียนคู่มือประกอบ แล้วค่อยเผยแพร่ให้ใช้อย่างทั่วไป UWFW ถือได้ว่าเป็น by-product ของการพัฒนาซอฟท์แวร์ให้แก่ สคส.

ในช่วงเวลาที่เราพัฒนาซอฟท์แวร์ทั้งหมดนี้ ก็ได้มี Web Development Framework หลายต่อหลายตัวออกมาเผยแพร่ในอินเตอร์เน็ทเช่นเดียวกันครับ แต่เราไม่ใช้เพราะ “ไม่ได้พัฒนาในประเทศไทย” เราพยายามใช้สิ่งที่ไม่ได้พัฒนาในประเทศไทยให้น้อยที่สุดครับ

ด้วยความซับซ้อนเกินความจำเป็นในการออกแบบโค้ดของเราใน MemeExpress ทำให้ผมขอให้เกรดซอฟท์แวร์ตัวนี้แค่ C ครับ แค่ผ่านเพราะใช้งานกับ GotoKnow.org ได้ แต่ยังมีเรื่องต้องจัดการอีกเยอะทีเดียวกว่าจะเผยแพร่ให้ใช้โดยทั่วไปได้

แต่ PlanetMatter ซึ่งเราเพิ่งเผยแพร่ล่าสุดนั้น ตรงกันข้ามกับ MemeExpress อย่างฟ้ากับดินทีเดียวครับ เรียกได้ว่าสิ่งที่เราผิดพลาดจากการออกแบบ MemeExpress นั้นเป็นบทเรียนที่เรานำมาใช้ในการออกแบบ PlanetMatter ได้อย่างดีทีเดียว

PlanetMatter เป็นซอฟท์แวร์ออกแบบได้ดีและโค้ดมีขนาดเล็กมากเมื่อเทียบกับสิ่งที่ทำได้ นอกจากนี้ยังได้ by-product ออกมาอีกสองตัวได้แก่ UWFW ที่กล่าวข้างต้นและ uOPML ซึ่งเป็น generic Python module ที่ใช้ในการจัดการไฟล์ประเภท OPML โค้ดของ PlanetMatter (ที่มี UWFW และ uOPML) ออกแบบได้ดีและมีขนาดเล็กจนผมเชื่อว่าถ้าได้ไปสอนวิชา Web Development อีก (ผมเคยสอนวิชานี้เมื่อสองปีที่แล้ว ปัจจุบันได้ยกวิชานี้ให้อาจารย์เข้าใหม่ท่านหนึ่ง) ผมสามารถใช้โค้ดของ PlanetMatter ให้นักศึกษาใช้เรียนได้เลย เพราะโค้ดมีขนาดเล็ก แต่ครอบคลุมหัวเรื่องต่างๆ ที่เกี่ยวข้องกับ Web Development จากรากฐาน (from scratch) ไว้หมด ด้วยโค้ดที่ดีที่จะพัฒนาต่อเนื่องได้อย่างสบายใจเช่นนี้ เราขอให้เกรด PlanetMatter เป็น A ครับ

เราใช้ PlanetMatter กับเว็ปไซต์สามแห่งด้วยกันในขณะนี้ได้แก่ ThaiMatter.org, PlanetHCI.org, และ PlanetKM.org ต้องขอเรียน สคส. ไว้ก่อนว่า PlanetHCI.org และ PlanetKM.org นั้นเป็นเว็ปไซต์ของเราเองนะครับ ไม่ได้อยู่ในโครงการ เราขอเป็นเว็ปของเราเพราะเป็น “labor of love” (ที่ทำด้วยความชอบในความรู้) ที่เราวางแผนจะดูแลไซต์เหล่านี้ตลอดไปแม้จะสิ้นสุดโครงการกับ สคส. ไปแล้วก็ตาม

ส่วน ThaiMatter.org นั้นเป็นของ สคส. ครับ แต่คุณประโยชน์ที่แท้จริงของ PlanetMatter ไม่ได้อยู่ที่การใช้กับ ThaiMatter.org (หรือ PlanetHCI.org/PlanetKM.org) แต่จะอยู่ที่หน่วยงานต่างๆ ได้นำไปใช้ในการทำ “planet site” ของตัวเอง ตัวอย่าง “planet site” ที่จะเกิดขึ้นได้แก่ planet.psu.ac.th หรือ planet.nu.ac.th เป็นต้น เราจะกล่าวถึงประโยชน์และการใช้งาน “planet site” ในบันทึกแยกต่างหากอีกครั้งหนึ่งครับ

สรุปแล้วสำหรับซอฟท์แวร์ทั้งสามตัว เราได้เกรด A (FeedSpring), C (MemeExpress), และ A (PlanetMatter) สำหรับ A ตัวแรกเราได้เพราะโจทย์ง่าย ส่วน C นั้นได้เพราะโค้ดซับซ้อนเกินไปจนยังเผยแพร่ไม่ได้แต่ก็ยัง (อุตส่าห์) ใช้กับ GotoKnow.org ได้ ส่วน A ตัวสุดท้ายได้อย่างภาคภูมิใจ เฉลี่ยแล้วเราได้ B+ ครับ ถือว่าผ่านแต่ยังไม่เข้า Dean’s List และยังไม่สมควรได้เสื้อสามารถ

ไว้เราเผยแพร่โค้ดของ MemeExpress แล้วผมจะไปขอเสื้อสามารถตัวหนึ่ง ผมใส่เบอร์ XL นะครับ ผมอ้วน

คำสำคัญ (Tags): #agile#software#development
หมายเลขบันทึก: 7638เขียนเมื่อ 20 พฤศจิกายน 2005 23:07 น. ()แก้ไขเมื่อ 21 มิถุนายน 2012 14:10 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (5)

ขอขอบคุณ และขอเป็นกำลังใจค่ะ  กำลังจะ download ไปทดลองใช้แล้วค่ะ

 ผมได้รู้จักเว็บผ่านทางทีวีนะครับ ก็เลยเข้ามาดู น่าสนใจดีครับผม

แต่ผมมีความเห็นแย้งหน่อยนึงหน่ะครับ ใน blog นี้ตรงที่ 

"Web Development Framework หลายต่อหลายตัวออกมาเผยแพร่ในอินเตอร์เน็ทเช่นเดียวกันครับ แต่เราไม่ใช้เพราะ “ไม่ได้พัฒนาในประเทศไทย” "

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

web framework หลาย ๆ ตัวที่ออกมาใหม่ก็เป็นการศึกษาข้อดีข้อเสียของ framework เดิม ๆ และเพิ่มส่วนที่คิดว่าขาด หรือแก้ไขส่วนที่คิดว่าบกพร่อง ทำให้ได้ frameworkที่ดีขึ้นเรื่อย ๆ ในมุมมองของการมองปัญหาและแก้ปัญหาที่ตั้งขึ้นมาของ framework นั้น ๆ  ผมก็อยากทราบความเป็นมาเป็นไปในแนวคิดการพัฒนางานนี้หน่ะครับ ท่านอาจารย์อาจจะหยิบ framework ดัง ๆ ที่ใช้กันอยู่สัก 2 - 3 ตัวมาเพื่ออธิบายตัวอย่างโจทย์และวิธีการแก้ปัญหาของเขา และอธิบายปัญหาในมุมมองของท่านอาจารย์ และวิธีการออกแบบเพื่อแก้ปัญหานั้น จะช่วยให้ได้รู้จักงานชิ้นนี้และแนวโน้มในการพัฒนาต่อไปและให้ความเข้าใจได้ดีมาก ๆ ครับ

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

 

ขอบคุณที่ติดตามครับ แต่ให้การบ้านผมเยอะจัง ทำไม่ทันครับ ;-)

แต่ไว้มีเวลาผมจะแนะนำ framework อื่นๆ ที่น่าสนใจนะครับ ถ้าคุณวีถ้าใช้ framework ตัวไหนอยู่ผมอยากเชิญชวนว่ามาเขียนแนะนำที่ GotoKnow.org ที่นี่มี programmers ที่ทำงานในองค์กรต่างๆ จะติดตามอ่านเยอะทีเดียว

สำหรับ framework ของเราชื่อ UWFW ตอนนี้อยู่ใน source ของ PlanetMatter เท่านั้น ลอง download มาอ่านดูนะครับ อยู่ที่ planetmatter/pm/pmlib/uwfw/ เป็น light-weight framework ที่ "work" สำหรับเรา

ในที่สุดแล้วเราก็จะมี document ของ UWFW แน่นอนครับ แต่ตอนนี้คงต้องอาศัยอ่าน source ไปก่อน

หมายเหตุว่าเราไม่ได้ใช้ UWFW กับ GotoKnow.org ใน version นี้นะครับ แต่เราจะใช้กับ version ต่อไป

งานที่เราทำตอนนี้เขียนด้วย Python ทั้งหมดครับ ดู source ของ FeedSpring กับ PlanetMatter แล้วถ้ามี patch ก็ส่งมาได้เลยด้วยความยินดีครับ

ใช้ซอฟแวร์ไทยก็ดีนะครับ แต่ trac นี่เป็นของไทยหรือปล่าวอ่ะ  :P แซวเล่นๆนะครับ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท