2006/May/08

ฉบับแก้ไขการสะกด เว้นวรรค และเรียบเรียงใหม่บางส่วน
  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 เลย)

ที่มา

มาแฮปปี้เบริดเดย์ย้อนหลังนะคะ(วันที่5 ที่ผ่านมานี้ใช่มั้ยอ่ะคะ)

ขอให้มีความสุขมากๆนะคะ
#1  by  *ゆきめ* At 2006-05-08 20:52, 
> ยูจัง
อ๊ะ ขอบใจจ้า อุตส่าห์มาย้อนหลังให้อีก
#2  by  PaePae At 2006-05-08 20:56, 
วันนี้เป็นวันแรกที่ผมได้มาไล่ source code ที่บริษัท.. มึนตึบ
#3  by  ไอ้แพท.. At 2006-05-08 21:15, 
อ่ะนะ ข้อ 50 นี่เราไม่เคยทำได้เลย ลืมทำทุกครั้งเลยอ่ะ ไป ๆ มา ๆ รวมเป็น version เดียวกันหมดเลย อะจึ๊ย
#4  by  morie At 2006-05-08 21:20, 
ทำ ตรงข้าม กับทุกข้อที่พี่ยกมาเลย

#5  by  Na - th (นัท) At 2006-05-08 21:26, 
ทำงานมานาน

โดนไปกี่ข้อละเนี่ย
#6  by  plynoi แว่วศรี At 2006-05-08 23:01, 
ข้อ 34 เนี่ย ยกเว้นใน loop ได้ไหมอ่ะ
#7  by  kaze At 2006-05-08 23:53, 
ขออนุญาต Copy ไว้ใน Blog นะครับ
#8  by  JoeZine At 2006-05-09 13:10, 
เยี่ยมเรยครับ ชอบครับ

หลายข้อน่าจะ optimize รวมกันได้นะครับ แต่อย่างว่า เข้าใจง่าย ดีกว่า optimize
#9  by  iMenn (58.8.86.72) At 2006-05-09 22:09, 
อาจจะรู้เรื่องไม่หมดทุกข้อ
แต่ข้อสุดท้ายเนี่ย ใช่แน่นอน ^^"
ก่อนจะไม่มีโอกาส save...

p.s. ข้อสามสิบ ขยายความหน่อยนะครับ
#10  by  ch_a_m_p At 2006-05-10 01:01, 
ข้อ 50 แน่นอนเลย... บ้านไฟดับบ่อย =A='
#11  by  irenadra At 2006-05-10 08:26, 
จะเอาไปลองใช้ดู
#12  by  4135's blog At 2006-05-11 02:21, 
ยากจัง






เอ่อ
พี่พี่

อยากจะเปลี่ยนสีพื้นแบคกราวเป็นสีขาวนี่..
ทำยังไงง่า


#13  by  **** * At 2006-05-12 11:29, 
ยิ่งประสิทธิภาพเพิ่ม&#8203; &#8203;ความ&#8203;เข้า&#8203;ใจง่าย&#8203;จะ&#8203;ลดลง&#8203; <-- บางทีก็ไม่จริงนะ

code ห่วยแบบ อ่านยากด้วย ช้าด้วย ก็มีถมไป
#14  by  veer At 2006-05-12 20:35, 
อย่างเช่นใน code ตัวเอง
#15  by  veer At 2006-05-12 20:35, 
ไม่ได้เรียนทางนี้มา แต่ก็กำลังเริ่มศึกษาอยู่ ... แต่ข้อ 50 นี่ ทำตลอดเลย (เอาวะ อย่างน้อยก็ผ่านข้อนึงชัวร์ๆ)
#16  by  gsawa At 2006-05-30 10:01, 
ผมน่าจะได้รู้จัก blog คุณเร็วกว่านี้นะ
#18  by  โก๋สิจ๊ะ At 2006-07-21 19:51, 
ชอบง่ะ ผิดปายกี่ข้อก้อมะรุ้


#22  by   At 2006-08-05 23:31, 

<< Home