ทำไม Apple M1 ถึงเริ่ด – เล่าในมุมมอง software architect

ผมได้อ่านเรื่องราวความเป็นมาและรายละเอียดของชิป M1 ของ Apple แล้วรู้สึกทึ่ง และหมั่นไส้นิดๆ จึงอยากมาเล่าถึงความดีงามของชิป M1 (ส่วนความหมั่นไส้ไว้เล่าช่วงท้าย) ในมุมมอง software architect

จุดเด่นสุดๆ ในมุมมองผมคือ การที่ Apple ออกแบบชิป M1 ในแบบ ‘centralization‘ ซึ่งทาง Apple เรียกแนวคิดนี้ว่า ‘System on Chip (SoC)’ ที่เป็นการรวมส่วนการประมวลผลสำคัญๆ มาไว้ในชิปเดียวกัน โดยการทำงานของแต่ละส่วนการประมวลผลถูกแยกออกอย่างเป็นอิสระกันอีกที ดูได้จากรูปด้านล่าง (รูปจาก https://www.apple.com/th/mac/m1/)

ผมขออธิบายมุมมองผมออกเป็นข้อย่อยๆ ดังนี้นะครับ

  • แต่ละส่วนการประมวลผลทำหน้าที่เฉพาะของตัวเองชัดเจน (high modularity & separation of concerns)
  • มีการออกแบบ communication path เพื่อเชื่อมแต่ละส่วนการประมวลผล ให้แต่ละส่วนเชื่อมต่อ รับ/ส่ง ข้อมูลกันบน shared communication path เดียวกัน และเมื่อทุกส่วนอยู่บนชิปเดียวกันทำให้ระยะทางที่ข้อมูลต้องเดินทางสั้นลง เวลาหน่วง (latency) ในการเดินทางของข้อมูลจึงน้อย จึงทำให้แต่ละส่วนการประมวลผลรับ/ส่งข้อมูลระหว่างกันได้รวดเร็วกว่าสถาปัตยกรรมคอมพิวเตอร์แบบเดิมๆ ที่ฮาร์ดแวร์ส่วนต่างๆ ทั้ง CPU, RAM, GPU (การ์ดจอ) ติดตั้งแยกกันบนเมนบอร์ด การรับ/ส่งข้อมูลระหว่างกันต้องอาศัย bus บนเมนบอร์ด ทำให้เกิด dependency กับประสิทธิภาพของเมนบอร์ดแต่ละรุ่นแต่ละยี่ห้อ ซึ่งส่งผลต่อ stability หรือความเสถียรต่อการรันแอพพลิเคชั่น เช่น การเซ็ตอัพเครื่องคอมพิวเตอร์ 2 เครื่องโดยใช้ CPU, RAM, GPU สเป๊กเดียวกันเป๊ะ แต่ใช้เมนบอร์ดคนละรุ่นกัน จะไม่สามารถรับประกันได้ว่าการรันแอพพลิเคชั่นเดียวกันบน 2 เครื่องจะให้ประสิทธิภาพ เช่น ความเร็ว ได้เท่ากันเสมอไป
  • นอกจากการใช้ communication path ร่วมกันแล้ว แต่ละส่วนการประมวลผลยังใช้ shared memory pool ร่วมกันอีกด้วย ทำให้แชร์ข้อมูลร่วมกันได้สะดวก ต่างจากฮาร์ดแวร์แบบเดิมๆ ที่ข้อมูลต้องวิ่งผ่าน bus บนเมนบอร์ดก่อน
  • ในการประมวลผลอัลกอริธึมด้าน machine learning นั้น การแลกเปลี่ยนข้อมูลกันระหว่าง CPU กับ GPU ถือเป็นเรื่องสำคัญคอขาดบาดตายมากๆ เพราะมีผลต่อ latency มาก หาก latency สูง ก็จะเกิดคอขวด ทำให้การประมวลผลระหว่าง CPU กับ GPU จะช้าไปด้วย
  • ยิ่งข้อมูลมีขนาดใหญ่ หากต้องรับ/ส่งกันผ่าน bus บนเมนบอร์ดแบบฮาร์ดแวร์แบบเดิมๆ ก็จะยิ่งช้า และหากรับ/ส่งข้อมูลไปมากันบ่อยๆ จะยิ่งใช้พลังงานมาก ส่งผลให้ใช้ไฟมากขึ้น หากเป็นโน้ตบุ๊กก็จะกินไฟจากแบตเตอรี่มากนั่นเอง
  • แนวคิดของ pool คือการรวมทรัพยากรที่ใช้ร่วมกันและเข้าถึงบ่อยๆ มาเก็บไว้ที่เดียวกัน ช่วยลด latency จากการ instantiate ข้อมูลเดิมซ้ำๆ บ่อยๆ จึงช่วยเพิ่มความเร็วในการเข้าถึงข้อมูลได้ดี และยังสามารถ จองและจัดสรรปริมาณ ให้เหมาะสมกับปริมาณและความถี่ในการใช้งานโดยแต่ละส่วนการประมวลผล และยังช่วย หมุนเวียนการใช้ทรัพยากร (recycle) ภายใต้ข้อจำกัดของทรัพยากร (resource constraint) อย่างขนาดและปริมาณของฮาร์ดแวร์ที่มีได้อย่างดี
  • ยกตัวอย่างเช่น การใช้ object pool ในงานซอฟต์แวร์ เช่น สมมุติระบบพีควันละ 4 ชั่วโมง มี request เข้ามาเฉลี่ย 1,000 request/วินาที ทุก request ต้องใช้อ็อบเจ็คต์ CommonAppService จะทำให้ต้อง instantiate อ็อบเจ็คต์ CommonAppService ถึง 1,000 (request) x 3,600 (วินาที) x 4 (ชั่วโมง) = 14.4 ล้านอ็อบเจ็คต์!!! แต่หากสามารถคุมอัตรา execution time ของรอบการทำงานของแต่ละ request ให้ สามารถคาดการณ์ได้ เช่นไม่เกิน 1 วินาทีแน่ๆ แบบนี้หากเปลี่ยนมาใช้ pool เพื่อเก็บอ็อบเจ็คต์ ก็จะสร้างอ็อบเจ็คต์ CommonAppService อย่างน้อยเพียง 1,000 อ็อบเจ็คต์!!! ก็พอ เพราะเมื่ออ็อบเจ็คต์ใดถูกใช้งานเสร็จก็ไม่จำเป็นต้องลบทิ้ง (ต้องเช็ก state ก่อนนะ) แค่เอาไปเก็บใน pool ต่อ ไม่ต้อง instantiate ใหม่นั่นเอง แต่สร้างแค่พันนึงมันปริ่มๆ ไป ควรสร้างเผื่อๆ ไว้หน่อย จากตัวอย่างดังกล่าว pool ช่วยลดโอเวอร์เฮดในการ instantiate อ็อบเจ็คต์ และหน่วยความจำในการจัดเก็บอ็อบเจ็คต์ได้มหาศาล ใช้ทรัพยากร (หน่วยความจำ, I/O ฯลฯ) น้อยลงมาก
  • Apple ยังได้ออกแบบชิป M1 ให้แต่ละส่วนการประมวลผลใช้ memory pool ร่วมกันได้ เปรียบเทียบเช่น แต่ละห้องในบ้านมีตู้เสื้อผ้าเป็นของตัวเองเพื่อเก็บเสื้อผ้าของแต่ละคนเอง แต่ก็แชร์ตู้เย็นในห้องครัวร่วมกันได้ เช่น การแชร์ข้อมูลร่วมกันระหว่าง CPU กับ GPU ในชิป M1
  • เมื่อความเร็วโดยรวมในการประมวลผลรวดเร็วปรู๊ดปร๊าดขึ้นมากๆๆๆ ข้อมูลที่วิ่งไปมาระหว่างแต่ละส่วนก็รวดเร็วมหาศาล เปรียบเสมือนน้ำป่าไหลบ่ามารวดเร็ว เพื่อไม่ให้น้ำท่วม ก็ต้องมีแก้มลิงเอาไว้พักน้ำ ไม่อย่างนั้นอาจเกิด missed rate ในการประมวลผลสูงได้ นี่จึงเป็นที่มาของการมี shared cache เพื่อให้แต่ละส่วนใช้ ‘แก้มลิง’ ร่วมกัน ไม่ต้องแยกกันมี cache (แคช) เป็นของตนเองแบบฮาร์ดแวร์แบบเดิมๆ ที่ CPU ก็มี cache เป็นของตนเอง, GPU ก็มี cache เป็นของตนเอง, RAM ก็ยังมี cache เป็นของตนเองอีก อย่างนี้ก็เปลืองสิ เปลืองทั้งการประมวลผลเพื่อจัดการ cache เปลืองทั้งการใช้พลังงาน แล้วฮาร์ดแวร์แต่ละรุ่นยังมีขนาดและความเร็วของ cache แตกต่างกันอีก การคุม latency และความเสถียรจึงยาก
  • แนวคิดของ cache คือการเป็น buffer เพื่อพักข้อมูลชั่วคราว ให้นึกถึงการบวกเลข หากบวกกันแค่ 2 จำนวน เราอาจคิดในใจได้ แต่หากต้องบวกกัน 20 จำนวนอาจต้องพึ่งกระดาษทดเลข ซึ่งเจ้ากระดาษทดเลขนี้ก็คือ cache นั่นเอง
  • การออกแบบแต่ละส่วนการประมวลผลให้ทำงานแยกอิสระกัน เปรียบแล้วเหมือนกับห้องต่างๆ ในบ้านหลังเดียวกัน ที่แชร์บันไดร่วมกัน แชร์ท่อประปาและไฟฟ้าร่วมกัน แชร์ห้องครัวร่วมกัน แชร์ที่จอดรถร่วมกัน แชร์สวนร่วมกัน ขณะที่แต่ละห้องสามารถตกแต่งภายในเป็นอิสระจากกันได้ การพัฒนาเพื่อเพิ่มประสิทธิภาพหรือ customize การประมวลผลแต่ละส่วนจึงเป็นอิสระกัน เพียงแค่ยึด interface เดิมที่แชร์ใช้ร่วมกันกับส่วนอื่นๆ ไว้เหมือนเดิม เป็นการคุม governance ระหว่างส่วนการประมวลผลให้ดี เปิดโอกาสให้เกิด intrinsic modification ภายในแต่ละส่วนได้
  • เมื่อ Apple สามารถออกแบบชิปที่รวบการประมวลผลสำคัญๆ มาไว้ด้วยกัน จึงส่งเสริม product line architecture เพื่อช่วยให้ลดต้นทุนทั้งค่าใช้จ่ายและเวลาในการผลิตผลิตภัณฑ์หลายชิ้นที่ Apple วางแผนจะใช้ชิป M1 ได้ ทำให้ควบคุม stability + variability + compatibility หรือเรียกได้ว่า overall hardware control ได้เป็นอย่างดี แน่นอนเมื่อคุมได้เบ็ดเสร็จขนาดนี้ ในแง่ customer support, technical support, sales support ก็จะง่ายสะดวกและประหยัดขึ้น การออกแบบและผลิตผลิตภัณฑ์ใหม่ๆ ที่จะใช้ชิป M1 ก็จะใช้เวลาน้อยลง เพราะลดการพึ่งพาฮาร์ดแวร์จากผู้ผลิตรายอื่นลง นี่จึงส่งผลต่อราคาผลิตภัณฑ์ที่ใช้ชิป M1 มีราคาถูกลงไปด้วย
  • Apple เพียงทุ่มเทออกแบบสถาปัตยกรรมชิป M1 กำหนดสเป๊กของแต่ละส่วนการประมวลผล แต่… Apple ไม่จำเป็นต้องเสียเวลาและงบประมาณค้นคว้าวิจัยและผลิตฮาร์ดแวร์แต่ละส่วนเองเลย เพียงแค่ซื้อสิทธิบัตรแล้วว่าจ้างผลิต แล้วเน้นคุมสเป๊ก คุมภาพรวม คุมการทำงานร่วมกัน นี่เป็นตัวอย่างที่ดีมากๆ ในด้าน agile product development โดยการมุ่งเน้นไปที่ ‘การออกแบบและคุมสถาปัตยกรรม
  • หนึ่งในหัวใจของ architecture คือ business กับ IT ต้อง align กัน ต้องเดินไปด้วยกัน
อ่านเพิ่มเติม

อาชีพสาย software development ที่กำลังขาดแคลน

อาชีพสาย software development ที่กำลังขาดแคลนและเป็นที่ต้องการสุดๆ จากการสังเกตและสอบถามมา:

  • IT project manager การบริหารโครงการไอทีไม่ใช่ง่าย competency ด้านนี้ฝึกยาก แถม soft skill ยังสำคัญมากๆ ส่วนมากที่พบเจอมักจับพลัดจับผลูมาเป็นบ้าง เขาสั่งให้เป็นบ้าง เป็นด้วยระบบ seniority บ้าง หาคนเก่งด้านนี้จริงๆ ยาก องค์กรขนาดใหญ่จำนวนมากขาดคนด้านนี้มาก โครงการจำนวนมากขึ้นไม่ได้เพราะขาดคนบริหารนี่ล่ะ PM ที่เจอๆ ทุกวันนี้มักทำกันแค่…ประสานงาน, หมกมุ่นอยู่กับ gantt chart, excel วันๆ ก็คอยตามงาน แก้ตัวกับ user/ลูกค้า, วางแผนและ estimate คนเงินเวลาแบบนั่งเทียน แล้วก็วางฟอร์มข่มลูกทีม ทั้งที่ทักษะหลายด้านสู้ลูกทีมยังไม่ได้ ดังนั้นใครอยากมาสายนี้ต้องรักจริง รับรองรุ่งงงงง เงินเดือนก็ดีสุดๆๆๆๆๆ และอีกนิด อาชีพนี้ไม่จำเป็นว่าต้องแก่ก่อนแล้วค่อยเป็น เด็กๆ ก็เป็นได้
  • software architect เป็นอีกตำแหน่งฮอตฮิตที่ขาดแคลน architect ส่วนมากที่เจอตามองค์กรต่างๆ มักเป็นสไตล์ technology architect เสียมาก วันๆ ขลุกและสนุกอยู่แต่กับเทคโนโลยี แต่ architect จริงๆ ต้องมี competency หลายด้านมาก แค่สมองซีกขวาไม่ผ่านก็จบเห่ ใคร balance ทั้งศาสตร์และศิลป์ได้ลงตัวก็มีอนาคตไกล นักเทคนิคจ๋านวนมากมักไปไม่รอดกับตำแหน่งนี้ เพราะ soft skill ต้องแข็งโป๊ก มุมมองต้องดี มองภาพรวมเก่งๆ capture concern สำคัญของ stakeholder ออกมาได้ แล้วหาโซลูชั่นโดนๆ ที่คุ้มค่ามาจับ ความรู้เทคนิคดีตามโลกทัน ออกแบบโซลูชั่นเก่งๆ เพราะ architect ก็คือนักกลยุทธ์ดีๆ นี่เอง อ่านเพิ่มเติม

นักไอที 3 ประเภทที่น่าสนใจ

ปัจจุบันผมทำงานอิสระ จริงๆ ก็ทำงานอิสระมาตลอด เคยทำงานประจำแค่ 2 ปีกว่าเอง ผมเป็นอาจารย์อิสระ ที่ปรึกษาอิสระ และสถาปนิกไอทีอิสระ 🙂 ทำเกี่ยวกับ enterprise architecture, software architecture, non-functional requirement, test case design, test architecture
ผมทำงานด้านไอทีมา 17 ปีละ เริ่มตั้งแต่เรียนอยู่ปี 3 พบเจอองค์กรมาจำนวนไม่น้อย ทั้งภาครัฐ เอกชน แค่ภาคธนาคารก็ไม่ต่ำกว่า 15 ธนาคาร เทเลคอมนี่เจอมาทุกเจ้า บริษัทไอทีที่อยู่ในตลาดหลักทรัพย์แทบทุกรายจนถึงบริษัทเล็กๆ ที่มีพนักงานไม่ถึง 10 คน ได้พบคนอยู่ 3 ประเภทที่น่าสนใจ ได้แก่
  1. คนที่ ‘ทน’ ทำงานไอที ใครให้ทำอะไรก็ทำ ให้ศึกษาอะไรก็ศึกษาไปงั้นๆ ทำงานแบบไม่มี ‘แพชชั่น’ ไร้แรงบันดาลใจ ทั้งยังไม่ชอบเรียนรู้ไม่ชอบอ่านหนังสือ แถม soft skill ก็ย่ำแย่ เพราะคนไอทีคุยกับใครก็ไม่รู้เรื่องวันๆ ใช้แต่สมองซีกซ้าย EQ เลยไม่ค่อยได้เรื่อง คนแบบนี้จะโตไปสายบริหารก็ลำบาก จะไปสาย specialist ก็คงไม่รอด ยิ่งพัฒนาตัวเองต่อไปไม่ได้ นอกจากตำแหน่งไม่ขึ้น เงินเดือนก็ไม่ขึ้นด้วย และอาจถึงขั้นลดลงด้วยซ้ำ สุดท้ายคนประเภทนี้ไม่ถูกบีบจนต้องออกไปจากวงการ ก็ต้องสละชีพตัวเองแทน หรือถ้ายังอยู่รอดต่อไปได้เพราะด้วยหนี้สินและภาระและไร้ที่ไป ก็ต้องทนทำงานไอทีอย่างสนุกสุดเศร้าต่อไป ปล่อยให้เด็กๆ ขึ้นมาเหยียบหัวป่ายปีนไปวันๆ
  2. ผู้บริหารระดับสูงและผู้บริหารไอที ที่ขาดทักษะด้านไอทีและมีวิสัยทัศน์ด้านไอทีที่ย่ำแย่ แทบทุกองค์กรมีผู้บริหารแบบนี้ทั้งนั้น และเป็นจุดอ่อนด้านไอทีขององค์กรทีเดียว คนจำนวนมากมาสนใจไอทีเพราะสนุกกับเทคโนโลยีและอุปกรณ์ทันสมัยต่างๆ นานา แต่หาได้น้อยที่คิดจะศึกษาจริงจังและบริหารได้ดี หลายองค์กรจึงลงเอยด้วยการใช้ไอทีอย่างสุรุ่ยสุร่าย หรือไม่ก็งกสุดตัว แต่หาได้น้อยที่จะใช้ไอทีได้อย่างคุ้มค่าและ ‘พอเพียง’ อย่าให้บอกเลยนะว่ามีที่ไหนบ้าง ภาพเบื้องหน้าที่เห็นจากผลิตภัณฑ์และบริการของเขา กับเบื้องหลังนี่มันอาจคนละเรื่องกันเลยก็ได้ หนำซ้ำพวกผู้บริหารสไตล์ ดร. และนักวิชาการยิ่งเยอะ วันๆ นั่งทำงานบนหอคอยงาช้าง ฝ่าเท้าไม่เคยสัมผัสแม้ยอดหญ้าและไอดิน เจอปัญหาด้านไอทีทีไรก็แก้ด้วยนโยบาย ‘เงินเขาไม่ใช่เงินเรา’ และหลักวิชาการแบบ ‘เห็นช้างขี้ ขี้ตามช้าง’ สำหรับผมทุกปัญหาแก้ได้ด้วยดีไซน์ ดีไซน์ในที่นี้ไม่ใช่แค่การออกแบบ
    อ่านเพิ่มเติม

นิกาย…Agile

Agile เหมือนศาสนา มีคนเปี่ยมล้นด้วยอัตตามาศึกษาเพื่อ ‘เข้าถึง’ จำนวนมาก เข้าถึงแค่ไหนและเข้าใจอย่างไร (สัมผัสได้แค่ไหน) ก็เกิดเวทนา ลามไปจนเกิด ตัณหา (โดยเฉพาะกามตัณหา ได้แก่ ความอยากหรือไม่อยาก) แล้วลามไปยึดมั่นจนเกิดอุปาทาน (ชอบอะไรก็ติดยึดกับสิ่งนั้น ไม่ชอบอะไรก็ติดยึดกับสิ่งนั้น) แล้วคนเหล่านั้นก็ออกมานำเสนอ คิดค้นวิธีและวิถีปฏิบัติ (Agile Method) เขียนตำรา เขียนบทความ ฯลฯ เพราะจากอุปาทานมันทำให้เกิดภพ (สภาวะหรือโลกสมมุติที่ตนสร้างขึ้นมา) แล้วลามไปเกิดเป็นชาติ (มีช่วงเวลา) แล้วสุดท้ายก็ดับสูญ (มรณา)…

ผมเอาเรื่องปฏิจจสมุปบาทมา ‘มอง’ ซึ่งจริงๆ แล้ววงจรของปฏิจจสมุปบาทมี 12 ขั้น… ขั้นแรกสุดเริ่มจาก ‘อวิชชา’ (ความไม่รู้)…

ในอีกชื่อหนึ่งของปฏิจจสมุปบาท เรียกว่า อิทัปปจจยตา หมายถึง สิ่งต่างๆ ล้วนมีผลต่อกันและกัน มีเหตุก็ต้องมีผล ทุกสิ่งล้วนเชื่อมโยงถึงกันหมด ผมชอบเอาเรื่องอิทัปปัจจยตามาคิดควบกับแนวคิด Cross-Cutting Concerns แบบ N มิติ กับแนวคิด Architectural Interfaces เพื่อใช้พิจารณาสิ่งต่างๆ ในงานไอที… สิ่งต่างๆ ในโลกและ ‘เหนือ’ โลกล้วนบูรณาการถึงกันได้หมด

ปัจจุบันนี้ราว Agile มี ‘นิกาย’ แตกยอดออกมามากมาย… ทั้งที่จากอดีตกระทั่งบัดนี้การพัฒนาซอฟต์แวร์ก็ไม่ได้ต่างจากเดิมเท่าใด เพียงปรับจัดรูปแบบให้ชัดเจน หยิบสิ่งที่เคยเป็นนามธรรมในทางหลักวิชาแต่เป็นจริงในทางปฏิบัติมานิยามและเรียนรู้ ‘มัน’ มากขึ้น เพราะสุดท้ายแล้วไม่ว่าโลกจะเปลี่ยนเป็นเช่นไร หลักการพื้นฐาน (Principles) ที่เป็นจริงที่คงอยู่ ตามแนวปรัชญาสัจจะนิยม (Realism) และอัตถิภาวะนิยม (Existentialism) ก็ไม่ได้เปลี่ยนไปจากเดิมเท่าใด

ผมเป็นคนไม่ชอบเข้าวัด ไม่ชอบสวดมนต์ ไม่ชอบวิถีปฏิบัติของชาวพุทธสมัยใหม่ แต่ผมชอบทำบุญ ชอบศึกษาหลักธรรมะ และปริศนาธรรม แต่ไม่กล้าประกาศว่าตนเข้าถึง ‘ธรรมะ’ เช่นเดียวกันกับ Agile ที่ไม่กล้าไปบอกเล่ากับใครมากมาย เพราะผมไม่ได้ ‘ปฏิบัติ’ อย่างมากก็แค่ไปยืนเล่าแนะนำ Agile เบื้องต้น ใครอยากลงลึกก็ไปศึกษาและปฏิบัติกันเอาเอง

ปรับดวงตาให้ ‘โปร่งใส’ พินิจพิจารณาสิ่งนั้น บางทีเราอาจเข้าใจ Agile ได้มากกว่าที่คิดก็ได้

 

ณรงค์ จันทร์สร้อย

๑๐ ธันวาคม พุทธศักราช ๒๕๕๕

10 จุดอ่อนสู่ทุจริตคอร์รัปชั่นในการจัดซื้อ/จัดจ้างโครงการไอที

ผมอยากให้ซอฟต์แวร์พาร์คหรือเนคเทคหรือหน่วยงานไหนก็ได้ มาสนธิกำลังความสามารถช่วยกันรณรงค์ เพื่อลดและแก้ปัญหาทุจริตคอร์รัปชั่นในการจัดซื้อ/จัดจ้างโครงการไอทีในประเทศไทย

ปีหนึ่ง ๆ ผมพบเจอองค์กรต่าง ๆ มากมายทั้งภาครัฐ เอกชน และการศึกษา พบปะทั้งระดับผู้บริหารยันคนทำงาน (โดยเฉพาะการได้พบปะพูดคุยแลกเปลี่ยนกับกลุ่มระดับคนทำงานจริง ยิ่งได้ข้อมูลจริง เพราะพวกเขาอยู่หน้างาน) ในการทำงานของผมได้พยายามนำแนวคิดเศรษฐกิจพอเพียงมาประยุกต์ พยายามเสนอแนวทางการนำแนวคิดนี้มาประยุกต์กับโครงการไอที แต่ก็เหนื่อยหน่ายเพราะเห็นโครงการไอทีบ้านเรามากมายมีแต่ใต้โต๊ะ โกงกิน และเวนเดอร์เจ้าใหญ่ ๆ มีอิทธิพลค่อนข้างมากในการแทรกแซงทั้งองค์กรภาครัฐ เอกชน และการศึกษา ประเทศไทยสูญเสียเม็ดเงินมหาศาลไปกับ:

1) พิศสมัยในความทันสมัยที่เกินจำเป็น..
2) ระบบไอที(รวมถึงไลเซนส์ซอฟต์แวร์)ที่มีมูลค่าเกินความต้องการแต่กลับไม่ครอบคลุมความต้องการ
3) อุปกรณ์ฮาร์ดแวร์ที่ราคาสูงเกินจริงและมีทุจริตใต้โต๊ะกันมหาศาล
4) ระบบ maintenance โดยบริษัทซอฟต์แวร์และเวนเดอร์ที่ขาดบุคลากรที่มีคุณภาพ
5) การที่องค์กรภาครัฐตามก้นเวนเดอร์และอิงกระแสต่างชาติ(โดยเฉพาะสหรัฐอเมริกา)มากไป ขับเคลื่อนสไตล์ข้าราชการและดำเนินงานด้วยวัฒนธรรมแบบราชการเกินไป จนลืมหันมามองตัวเองมาทำความเข้าใจกับวัฒนธรรมไทยและปรับสิ่งเหล่านั้นเข้าหากัน (blend) รวมถึงการสัมผัสและเข้าใจกับ ‘รากหญ้า’ ที่แท้จริง เน้นระดับมหภาคมากเกิน จนลืมสร้างระดับจุลภาคให้แข็งแกร่ง
6) สถาบันการศึกษาที่เป็นธุรกิจมากขึ้น ๆ แต่ขาดบุคลากรอำนวยการสอนที่ครอบคลุมและมีคุณภาพพอเพียงโดยมีจำนวนที่เพียงพอ
7) องค์กรมากมายขาดผู้นำที่มีวิสัยทัศน์ โดยเฉพาะวิสัยทัศน์และความเข้าใจด้านไอทีอย่างดีพอ หรือถ้าไม่มีก็ควรมีผู้ช่วยที่ดีพอ
8) ขาดการบริหารจัดการด้านองค์ความรู้และทรัพยากรมนุษย์อย่างดีพอ ทุกวันนี้นักไอทีมากมายมีเงินเดือนเกินความสามารถ หนักไม่เอาแต่เบาสู้ แถมรักการเรียนรู้น้อยลงทุกที ๆ ใครไม่ชอบด้านเทคนิคก็หนีไปเป็น SA, tester, project manager ฯลฯ แล้วสังคมไอทีก็มีแต่บุคลากรไร้ความสามารถเกลื่อนไปหมด ผมไม่โทษว่าเขาไม่เก่ง แต่โทษการบริหารจัดการ…การกระตุ้นผลักดัน การจัด matching ระหว่าง คน ความรู้ ทักษะ และ งาน ให้เหมาะสมลงตัว
9) กระบวนการจัดซื้อ/จัดจ้างที่ไม่มีคุณภาพ มีทั้งการแทรกแซงจากบุคคลภายในองค์กร(โดยเฉพาะจากระดับสูง) และจากเวนเดอร์ภายนอก มีการกำหนดเกณฑ์ คัดเลือก ติดตาม ตรวจสอบ ที่ไม่มีคุณภาพไม่มีมาตรฐาน ไม่มีการเชื่อมโยงกับภาคกฏหมายอย่างแนบสนิท หน่วยงานด้านนี้จึงเป็นจุดโหว่สำคัญต่อการทุจริตในองค์กรและการได้มาซึ่ง ‘ของ’ ที่ไม่ ‘ดีพอ’ หรือ ‘ดีเกินหรือแพงเกิน’
10) การริเริ่มโครงการไอทีโดยปราศจากการศึกษาวิเคราะห์ความเป็นไปได้ (feasibility study) อย่างดีพอ การทำ TOR ที่ไม่สะท้อนความต้องการแท้จริง(ไม่มีคุณภาพเช่นกัน) และการประมาณการ (estimate) คน เงิน เวลา ด้วยการนั่งเทียน

อ่านเพิ่มเติม

Standard and Guideline for Developer

เป็น guideline คร่าว ๆ เอาไว้ค่อยปรับปรุงให้ละเอียดและชัดเจนขึ้นอีกที เพราะมีคนถามผมเยอะว่าการทำงานระหว่างฝั่งเจ้าของงานกับฝั่งผู้พัฒนาระบบฯ ควรมี ‘อะไร’ บ้างนอกเหนือจากสิ่งที่ทั่ว ๆ ไปคุ้นเคยกัน เพื่อให้การทำงาน งาน และการว่าจ้างมีคุณภาพและประสิทธิภาพ โดยโมเมนตัมโฟกัสไปที่ด้าน development / programming และการจัดการ มากหน่อย ไม่ได้เน้นด้านออกแบบหรือสถาปัตยกรรมฯ นัก และไม่ได้อิงกับหลักการด้าน outsourcing / subcontract management อะไรครับ เอาจากประสบการณ์ล้วน ๆ โดยมานั่งคิดเล่น ๆ ว่าควรมีอะไรบ้างแล้วก็ลิสต์ออกมาครับ

ดังนั้นหากใครมีไอเดียอะไรเชิญเสนอเต็มที่เลยนะครับ ผิด-ถูกอย่างไรตรงไหนหรือมีอะไรเพิ่มจะได้ปรับและเสริม ๆ กันไปครับ 🙂

หากการว่าจ้างพัฒนาระบบฯ สามารถมีครบ 20 ข้อนี้ก็…สุดยอดไปเลย 😆 แฮปปี้กันถ้วนหน้า

และขอแจ้งอีกนิดว่าผมเขียนบทความนี้โดยมีทัศนคติเอนเอียงเข้าข้าง ‘เจ้าของงาน’ มากกว่า ‘ผู้พัฒนาระบบฯ’ นะครับ ^_^ และระหว่างเขียนก็นึกถึงงานที่เจอบ่อย ๆ คือด้าน enterprise architecture / application ดังนั้นบางประเด็นอาจดูขาด ๆ ปริ่ม ๆ และ ล้น ๆ ได้ 🙂

Standard And Guideline For Developer

1. Naming
มาตรฐานและแนวทางสำหรับการตั้งชื่อและระเบียบการตั้งชื่อ เช่น ชื่อคอลัมน์ ตาราง ตัวแปร เมธอด ฟังก์ชั่น คลาส อินเตอร์เฟส ไดเร็กทอรี่ แพ็กเกจ ฯลฯ ซึ่งรวมถึงชนิดตัวแปร นอกจากนี้ควรทำ mapping เช่น ระหว่างชื่อคอลัมน์กับชื่อแอททริบิวต์ เป็นต้น และควรมีเอกสารหรือเว็บเพจอธิบายตัวย่อ ศัพท์เฉพาะ แปลคำไทยเป็นอังกฤษ แปลคำอังกฤษเป็นไทย เป็นต้น

2. Business Logic Separation
มาตรฐานและแนวทางสำหรับการแยกเอกสาร, โค้ด, subsystem, คอมโพเน้นต์ ฯ ในส่วน business logic ให้เป็นอิสระจากซอฟต์แวร์และสภาพแวดล้อมของซอฟต์แวร์ให้มากที่สุด และควรเป็นอิสระจากสภาพแวดล้อมอื่น เช่น ของแอพพลิเคชั่น ทรานแซกชั่นเซิร์ฟเวอร์ และควรแยกส่วนอิมพลีเม้นต์ด้าน business logic ให้เป็นอิสระหรือให้อยู่คนละที่กับอินเตอร์เฟส

อ่านเพิ่มเติม