งามหน้าไหมเนี่ย

จาก รมว. ICT คนใหม่กับวิสัยทัศน์ต่อโอเพ่นซอร์ส ทำให้เกิดกระแสต่าง ๆ ด้านลบอย่างมากในตัว รมว. ในรัฐบาลชุดเฉพาะกิจชุดนี้ แม้จะเป็นรัฐบาลที่มาทำงานเพียงแค่ 1 ปี (หวังไว้อย่างนั้น) แต่การที่ท่านออกมาแสดงวิสัยทัศน์ที่หักดิบ และรุนแรงมากต่อกระแสการพัฒนาซอฟต์แวร์โอเพ่นซอร์ส ออกแนวพูดไม่คิด (และคาดว่าคงไม่ได้คิดอีกหลายอย่างแน่ ๆ ) ข่าวนั้นเร็วมากจนถึงขนาดเข้าเว็บ Digg และ Slashdot ตามไปอ่านได้

ข่าวต้นเรื่อง – U-TURN AT ICT MINISTRY
Digg – Open-Source condemned by Thai Minister
Slashdot –  Thai IT Minister Slams Open Source

คราวนี้หล่ะ ซวยหล่ะท่าน เตรียมตัวแก้ตัวกันไป -_-‘

แต่ที่แน่ ๆ เว็บ Digg กับ Slashdot จะโดน favicon.ico หรือเปล่าหว่า T_T ถ้าพรุ่งนี้เข้าไม่ได้ก็ทำใจได้เลยนะท่าน ๆ ทั้งหลาย

Update[1] จดหมายเปิดผนึก ถึง รมว. กระทรวง ICT


Update[2]

ด้วยเหตุนี้ทำให้มีการแสดงความคิดเห็นในที่ต่าง ๆ มากมาย โดยในแต่ละเว็บที่ได้กล่าวมานั้นมีนำหนักของเนื้อหาขนาดไหน จะอธิบายเพิ่มเติมดังนี้

เว็บ Digg เป็นเว็บ social bookmarking และ blog bookmarking ที่ใหญ่มาก และมีข่าวที่เร็วกว่า Google News มาก (จากผลการวิจัยของสำนักข่าวแห่งหนึ่ง)

เว็บ Slashdot ( หรือสั้นว่า /. )เว็บรวมข่าวสารต่าง ๆ ที่มี Technology Geek ต่าง ๆ มากมาย มาร่วมกันแชร์ความรู้และแสดงความคิดเห็นอย่างเปิดกว้าง ซึ่งน่าจะใหญ่ที่สุดในโลกแล้ว

ส่วน Blognone เว็บรวม Technology Geek ที่ใหญ่ที่สุดในไทย (ณ.ตอนนี้คงถือว่าใหญ่มาก) โดยผู้ ร่าง "จดหมายเปิดผนึก ถึง รมว. กระทรวง ICT" คือคุณ thep ก็เป็นหนึ่งในผู้ผลักดัน OpenSource ในไทย และอยู่ในทีมพัฒนาระบบภาษาไทยใน linux ด้วย

ส่วนตอนนี้เว็บ Exteen เว็บ Blog Provider ที่ใหญ่ที่สุดในไทย ก็มีการแสดงความคิดเห็นใน Blog อย่างกว้างขวางมาก

นี่ยังไม่รวม IT Geek อื่น ๆ ในไทยอีกหลายเว็บ ที่เริ่มเอาข่าวนี้ไปเผยแพร่กันแล้ว ซึ่งรวมไปถึงเว็บบอร์ดที่ใหญ่ที่สุดในไทยอย่าง Pantip.com ที่มีการแสดงความคิดเห็นกันอย่างมากมายในหลาย ๆ ห้อง

โดยวิสัยทัศน์นี้ทำให้มีผลกระทบต่อสังคม OpenSource ในไทยอย่างมาก

คงต้องรอดูกันต่อไป ว่าจะมีอะไรเกิดขึ้น

หลักการเขียนโปรแกรม 50 ข้อ

เห็นว่าน่าสนใจและดีมาก ๆ เลยนำมาลง (ช่วงนี้รู้สึกว่าตูไม่ได้เขียนเองเท่าไหร่เลยนะ -_-")

  1. โปรแกรมแบบพอเพียง (ทำอะไรให้เล็กที่สุดเท่าที่เป็นไปได้)
  2. ทำสิ่งธรรมดาให้ง่าย ทำสิ่งยากให้เป็นไปได้
  3. จงโปรแกรมโดยนึกว่าจะมีคนมาทำต่ออย่างแน่นอน
  4. ระเบียบ กฎข้อบังคับ เชื่อถือไม่ได้ถ้ามีเพียงหนึ่งโมดูลไม่ปฏิบัติตาม
  5. ตัดสินใจให้ดีระหว่างความชัดเจน (Clearance) กับการขยายได้ (Extensibility)
  6. อย่าเชื่อมั่น Output จากโมดูลอื่น ถึงแม้เราจะเป็นคนเขียนเอง
  7. ถ้าคนเขียนยังเข้าใจได้ยาก แล้วคนอ่านจะเข้าใจได้ยากกว่าแค่ไหน
  8. ค้นหาข้อมูลสามวันแล้วทำหนึ่งวัน หรือจะทำสามวันแล้วแก้บั๊กตลอดไป
  9. จงสร้างเครื่องมือ ก่อนทำงาน
  10. อย่าโทษโมดูลอื่นก่อน โดยเฉพาะถ้าโมดูลอื่นเป็น OS และ Compiler
  11. พยายามทำตามกฎ แต่ถ้ามีข้อยกเว้น ต้องมีอย่างหลีกเลี่ยงไม่ได้ ให้ประกาศและตะโกนให้ดังที่สุด
  12. High Cohesion Loose Coupling (ยึดเกาะให้สูงสุดในโมดูล และเกาะเกี่ยวกับโมดูลอื่นให้น้อยที่สุด)
  13. ให้สิ่งที่เกี่ยวข้องกันยิ่งมากอยู่ไกล้กันมากที่สุด
  14. อย่าเชื่อโดยไม่พิสูจน์
  15. อย่าลองทำแล้วคอมไพล์ดู ถ้าเราไม่ได้คาดหวังผลลัพธ์อะไรไว้ (อย่างเช่นปัญหา index off by one)
  16. จงกระจายความรู้เพราะนั่นคือการทำ Unit Test ระดับล่างสุด (ระดับความคิด)
  17. อย่าเอาทุกอย่างใส่ใน UI เพราะ UI คือส่วนที่ Unit Test ได้ยาก
  18. ทั้งโปรเจ็กต์ควรไปในทางเดียวกันมากที่สุด (Consistency)
  19. ถ้ามีสิ่งที่ดีอยู่แล้ว จงใช้มัน อย่าเขียนเอง ถ้าจำเป็นต้องเขียนเอง ให้ศึกษาจากข้อผิดพลาดในอดีตก่อน
  20. อย่ามั่นใจเอาโค้ดไปใช้จนกว่าจะ Test อย่างเพียงพอ
  21. เอาโค้ดที่ Test ไว้ที่เดียวกันกับโค้ดที่ถูก Test เสมอ
  22. ทุกครั้งที่แก้ไขโค้ดให้รัน Unit Test ทุกครั้ง
  23. จงใช้ Unit Test แต่อย่าเชื่อมั่นทุกอย่างใน Unit Test เพราะ Unit Test ก็ผิดได้
  24. ถ้าต้องทำอะไรที่ซ้ำกันมากกว่าหนึ่งครั้ง ก็เพียงพอแล้วที่จะแยกโค้ดส่วนนั้นออก
  25. ทำให้ใช้งานได้ก่อน แล้วค่อย Optimize และถ้าไม่จำเป็น อย่า Optimize
  26. ยิ่งประสิทธิภาพเพิ่ม ความเข้าใจง่ายจะลดลง
  27. ใช้ Design Pattern ที่เป็นที่รู้จักจะได้คุยกับใครได้รู้เรื่อง
  28. อย่าเก็บไว้ทำทีหลัง ถ้ายังไงก็ต้องทำ
  29. Multithreading ไม่ใช่แค่การเพิ่มประสิทธิภาพ แต่มันมาพร้อมกับ Concurrency, Deadlock, Isolation Level, Hard to Debug, Undeterministic Errors
  30. จงทำอย่างโจ่งแจ้ง
  31. อย่าเพิ่มเทคโนโลยีโดยไม่จำเป็น เพราะนั่นทำให้โปรแกรมเมอร์ต้องวุ่นวายมากขึ้น
  32. จงทำโปรเจ็กต์ โดยคิดว่าความเปลี่ยนแปลงเกิดขึ้นได้เสมอ
  33. อย่าย่อชื่อตัวแปรถ้าไม่จำเป็น เดี๋ยวนี้ IDE มันช่วยขึ้นเยอะแล้ว ไม่ต้องพิมพ์เอง แค่ dot มันก็ขึ้นมาให้เลือก
  34. อย่าใช้ i, j, k, result, index, name, param เป็นชื่อตัวแปร
  35. ทำโค้ดที่ต้องสื่อสารผ่านเครือข่ายให้คุยกันน้อยที่สุด
  36. แบ่งแยกดีๆ ระหว่าง Exception Message ในแต่ละเลเยอร์ ว่าต้องการบอกผู้ใช้ หรือ บอกโปรแกรมเมอร์
  37. ที่ระดับ UI ต้องมี Catch All Exceptions เสมอ เพื่อกรอง Exception ที่ลืมดักจับ
  38. ระวังคอลัมน์ Allow Null ใน Database ให้ดี ค่ามัน Convert ไม่ได้
  39. อย่าลืมว่า Database เป็น Global Variable ประเภทหนึ่ง แต่ละโปรแกรมที่ติดต่อเปรียบเหมือน Multithreading ดังนั้นกฎของ Multithreading ต้องกระทำเมื่อทำงานกับ Database
  40. ระวังอย่าให้ logic if then else ซ้อนกันมากๆ เพราะสมองคนไม่ใช่ CPU จินตนาการไม่ออกหรอกว่ามันอยู่ตรงไหนเวลา Debug (ถ้ามากกว่าสามชั้นก็ลองคิดใหม่ดูว่าเขียนแบบอื่นได้มั้ย)
  41. ระวังอย่าให้ลูปซ้อนกันมากๆ ไม่ใช่แค่เรื่องความเร็วอย่างเดียว เวลา Debug เราคิดตามมันไม่ได้ (ถ้าเกินสามชั้นก็ไม่ไหวแล้ว)
  42. อย่าใช้ Magic Number ในโค้ด เช่น if( controlingValue == 4 ) เปลี่ยนไปใช้ Enum ดีกว่า เป็น if( controlingValue == ControllingState.NORMAL ) เข้าใจง่ายกว่ามั้ย
  43. ถ้าจะเปรียบเทียบ String ให้ Trim ซ้ายขวาก่อนเสมอ
  44. คิดหลายๆ ครั้งก่อนใช้ Trigger
  45. โปรแกรมเมอร์คือห่วงโซ่สุดท้ายของมลพิษทางความซับซ้อน ดังนั้นหา Project Leader ดีๆ แล้วกัน
  46. มนุษย์ฉลาดกว่าคอมพิวเตอร์ การเขียนโปรแกรมก็คือการสอนให้คอมพิวเตอร์ฉลาดได้เหมือนเรา (มนุษย์ฉลาดกว่าคอมพิวเตอร์จริงๆ นะ)
  47. จงควบคุมคอม มิใช่ให้คอมควบคุมเรา เราต้องสั่งให้คอมทำงาน ไม่ใช่ให้เราทำงานตามคอมสั่ง
  48. อย่าปล่อยให้ข้อจำกัดของคอม มาจำกัดความคิดของเรา (คอมไม่ดีเปลี่ยนเครื่องเลย :-D)
  49. ยอมรับความคิดของผู้อื่น แต่อย่าออกจากกรอบของตนเอง
  50. หมั่น Save โปรแกรมไว้อย่าสม่ำเสมอ ก่อนที่จะไม่มีโอกาส Save (จะให้ดี Save เป็นแต่ละ Version เลย)


อ้างอิง