หลักการเขียนโปรแกรม 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 เลย)


อ้างอิง

 

ว่าด้วย Basic Cocoa Training@Fortune จัดโดย ThaiMacDev.com

อบรมไปก็เกือบเดือน กว่าจะกลับมาเขียนต่อได้ -_- งานเยอะครับตอนนี้ T_T


ออกจากพิษณุโลกประมาณเที่ยงคืนกว่า ๆ จริง ๆ แล้วว่าจะไปตั้งแต่เช้าวันศุกร์แต่ว่าติดเรียน เลยต้องไปดึก ๆ กว่าจะถึงก็เกือบเช้า ไปนอนที่ห้องเพื่อนพี่กั่งก่อนสัก 3 – 4 ชั่วโมง แต่ว่าดันเหนื่อยเกิน เลยตื่นมา 9.30 น. พอดี ตอนนั้นเซงเลย เลยรีบ move ด้วยความรวดเร็วถึงที่อบรมก็ 10 โมงกว่า ๆ พอดีเข้าไป ยังไม่เริ่มอบรม ก็ค่อยยังชั่ว เฮ้อ …….. ซึ่งบรรยากาศโดยรวมทั้งหมดถึงว่าดีถึงดีมาก เพราะส่วนใหญ่เป็นคนที่มีความสนใจจริง ๆ และอยู่ในสายงานด้านการพัฒนาซอฟต์แวร์กันทุกคน ซึ่งทุกคนก็ผ่านประสบการณ์การออกแบบ, พัฒนา และดูแลซอฟต์แวร์น่าจะทุกคน ซึ่งก็มีหลาย ๆ คนรวมถึงผมด้วยที่ไม่ได้จับแม็คในการเขียนซอฟต์แวร์รวมไปถึงบางคนก็ไม่เคยใช้มาก่อน (แบบผม) ซึ่งท่านวิทยากร คือ อ.เดฟ ก็สอนได้เข้าใจกันแทบจะทุกคน ในรูปแบบการทำงานที่เข้าใจง่าย โดยในวันแรกก็เข้าส่วนของพื้นฐานกันก่อน เช่น ความรู้เบื้อต้นของ Cocoa Framework, แนวการพัฒนาแบบ OOP ใน Cocoa, การออกแบบซอฟต์แวร์แบบ MVC และการแนะนำเรื่องของระบบ NextStep (ซึ่งเป็นเหมือนรุ่นพ่อของ Mac OS X หรือ Darwin) ซึ่งเป็นเหมือนการทวบทวน และได้ความรู้ใหม่ ๆ ไปในตัว โดยเรื่องของการ coding นั้นในวันแรกไม่ค่อยได้ coding เท่าไหร่ อย่าง hand-on ตัวแรกที่ให้ทำก็ไม่มีให้ coding สักบรรทัด ซึ่งถือว่าเป็นการเริ่มต้นการอบรมที่ดีมาก ๆ ที่เป็นการนำจุดเด่นของการพัฒนาบน Cocoa Framework มาบอกในอันดับต้นซึ่งทำให้เราเห็นภาพว่า OOP นั้นมัน send/receive message ของแต่ละ object กันอย่างไร ซึ่งทำให้การออกแบบ OOP แบบเดิม ๆ นี่เด็ก ๆ ไปเลย

โดยในวันแรกนั้นมีการพูดถึงการเขียน code บนพื้นฐานของภาษา Objective-C ซึ่งมีผู้เข้าอบรมหลาย ๆ ท่านก็ได้แลกเปลี่ยนความคิดเห็นกันกับ อ.เดฟ และท่านอื่น ๆ ว่ามันแตกต่าง และใช้งานดีหรือไม่ดีอย่างไรเมื่อเทียบกับภาษาและ Framework อื่น ๆ ซึ่งทำให้ได้มุมมองที่กว้างและสนุกไปอีกแบบ ซึ่งในวันแรกไม่ได้เขียน code อะไรมากนัก เพราะส่วนใหญ่จะ preview Framework อย่าง Cocoa, ภาษา Objective-C และทำความเข้าใจหลักของ MVC เสียมากกว่า

มาวันที่สอง นี่ coding เพียบและมันกว่าเดิม โดยรวมคือเป็นลักษณะ workshop มากกว่าวันแรกอย่างมากเลยหล่ะ แต่ก็ยังคงเขียน code ในจำนวนบรรทัดที่น้อยกว่าที่เคยเขียนมาในงานที่ทำเหมือน ๆ กัน โดยเฉพาะงานอย่าง Binding เนี่ยเห็นชัดมาก ;)

งานนี้เรียนมันมาก แค่เรื่องไปเอา concept อย่าง OOP ในระดับมองทุกอย่างใน software เป็น World (แบบ Sim City หรือ The Sim) และ MVC ที่ในมหาวิทยาลัยสอนไม่ครบก็คุ้มแล้วคร้าบบบบบบบบ ส่วน Objective-C และการเขียนใน Cocoa Framework น่าจะเป็น Case Study ในการทำ Application ในอนาคตได้มากเลย

 

ตามล่าหา SVN Hosting ….

ตอนนี้ทำ Project Software ที่ต้องทำงานเป็นทีม ตอนนี้ทำงานกันอยู่ 2 คน ปัญหาหลักคือ พอเอา Source Code ที่มีไปลองเขียน แล้วต่างคนต่างแก้ มันกลายเป็นว่า Source Code ที่ทำมันไปคนละทิศคนละทางไป และการจัดการเป็นไปได้ยาก แถมด้วยถ้าแก้แล้ว Save ไปๆ มาๆ แล้ว Code ที่ใส่ลงไปใหม่ดันมีปัญหา ไม่เข้ากับ Code ตัวอื่น ๆ หรือ Function ใหม่ไม่เข้ากับ Function เดิม และจำเป็นต้องย้อนกลับไปใช้ Code เดิมที่แก้ มันทำให้การกลับไปใช้ตัวเดิมเป็นไปได้ยาก เพราะส่วนใหญ่ไม่ได้ Backup ไว้ ซึ่งลำบากลำบนอย่างมาก

ทางแก้ของปัญหาหานี้คือใช้ระบบ Control Version System หรือ CVS นั้นเอง ส่วนเรื่อง CVS มันเป็นยังไงหาใน Google เอาแล้วกันนะครับ สำหรับคนที่สนใจ เว็บไทยหลาย ๆ เว็บก็มีพูด ๆ ไว้ และในปัจจุบันนั้น ระบบ SVN หรือ SubVersioN นั้นเอง โดยมีข้อดีมากกว่า CVS พอสมควรเลย ซึ่งผมต้องการหา Hosting ที่รองรับ SVN ซึ่งของคนไทยนี่หาไม่เจอเลย แล้ว Hosting ที่เช่าอยู่ก็ไม่มี Mod ของ Apache นี้ลงอยู่ในเครื่อง มันเลยต้องตามล่าหาของ Free ใช้ไปก่อน โดยไปเจอ http://opensvn.csie.org/  เข้าซึ่งตอนนี้กำลังทดสอบอยู่ว่า มันจะ ทำอะไรได้บ้างและระบบมีความเสถียรพอหรือไม่ เพราะเดี่ยวซวยเวลาจะ Update หรือ Commit แล้วมันล่มเดี่ยวจะมีปัญหาเอา

ส่วนตอนนี้ในเครื่องก็มี SVN อยู่ใช้กับงานหลาย ๆ อย่างเหมือนกัน เพราะว่าข้อดีในการ Reversion นี่หล่ะทำให้เราเขียนโปรแกรมแล้วไม่ต้องกลัวว่า Function เก่าที่เราเขียนไป และตัวใหม่ที่เขียนเพิ่มมันจะหายหรือมีปัญหา โดยเราสามารถกลับไปใช้ตัวเก่าได้ และรวมไปถึงมันช่วยจัดการอะไร ได้หลายๆ อย่างเลยหล่ะ เดี่ยวว่าง ๆ จะมาสอนการติดตั้ง SVN บน Windows ให้ได้ใช้กัน ;)

 

สุดมันกับ A* Search Algorithm -_-“

ตอนนี้งานค่อนข้างเยอะเลย -_-" เรียน Software Engineering แล้วทำ Term Project ที่เป็นระบบแผนที่ ตอนนี้หา Algorithm ที่มาใช้ในการค้นหาเส้นทางที่ดีที่สุด และเหมาะสมที่สุด หาไป หามา ก็ได้ A* (A-Star) Search Algorithm ซึ่งเป็น graph search algorithm ที่ค่อนข้างจะเข้าท่ามาก คิดโดย Peter Hart, Nils Nilsson และ Bertram Raphael ในปี 1968 แม้ว่าจะไม่เคยเรียนมาก่อน ก็ด้วยเหตุการณ์จำเป็น เลยต้องศึกษาเอาไว้ เดี่ยวทำระบบไม่ได้แล้วจะยุ่ง

โดย A* เนี่ย มันเป็น Algorithm ที่ใช้ในการหาเส้นทางที่ดีที่สุด (บอกไปแล้วจะบอกทำไมอีกหว่า -_-") คือมันจะมีทั้งหมด 3 ส่วนที่ทำให้เส้นทางต่าง ๆ นั้นถูกตัดสินใจให้ใช้ หรือไม่ให้ใช้โดย

  1. Heuristic : คือค่าสำหรับการตัดสินใจในการผ่านจุดใด ๆ โดยให้เกณฑ์เป็นตัวเลข
  2. Cost : คือค่าใด ๆ ที่บ่งบอกถึงค่าใช้จ่าย หรือระยะเส้นทางที่ใช้เวลา หรืออะไรก็แล้วแต่ ที่ทำให้เส้นทางนั้นเหมาะสมต่อการใช้หรือไม่ โดยให้เกณฑ์เป็นตัวเลข
  3. Priority : เป็นค่าที่ได้จาก Heuristic + Cost จะได้เป็นค่า Priority ออกมา โดยจะเป็นตัวบ่งบอกว่าเส้นทางดังกล่าวนั้นเหมาะสมที่จะผ่านหรือไม่ โดยวัดจากตัวเลข

เรากำหนดให้

  • Heuristic = H
  • Cost = C
  • Priority = F

โดยตัวอย่างนี้เรากำหนดจุดเริ่มต้นคือ S และจุดหมายปลายทางคือ G

  • เส้นสีเหลียงคือเส้นทางที่ดีที่สุด
  • เส้นสีส้มคือเส้นทางที่น่าจะเป็นไปได้
  • สีเขียวคือจุดปลายทาง
  • สีน้ำเงินคือจุดเริ่มต้น
  1. S มีค่าคือ H:12,C:0,F:12 โดยมีจุดเชื่อมต่อสองจุดคือ A และ B
  2. เราเลยตัดสินใจว่าจะทำการทดสอบว่าเส้นทางไหนมี Priority น้อยที่สุดในกลุ่ม (ในที่นี้คือ 2 ตัวเลือกคือ S-B และ S-A ) ซึ่งมีค่าดังต่อไปนี้ S-B มีค่า H:5,C:8,F:13 และ S-A H:5,C:10,F:15
  3. ในตอนนี้เราตัดสินใจได้แล้วว่าเราจะไป S-B เพราะมีค่า F น้อยที่สุดในกลุ่ม เมื่อถึง S-B แล้วก็ทำการทดสอบเส้นทางอีกครั้งโดยมีจุดเชื่อมต่อ 2 จุดที่ต่อกับ B คือ D และ G เราก็จะได้ค่าที่ B-D และ B-G คือ S-B-D มีค่า H:2,C:16,F:18 และ S-B-G H:0,C:24,F:24 แต่เรายังมีค่าเก่าของ SA อยู่คือ H:5,C:10,F:15 ซึ่งเราต้องเอามาคิดด้วยก็จะได้ 3 ตัวเลือก โดยในตัวเลือกครั้งนี้นั้น S-A มีค่า F น้อยที่สุดในกลุ่ม (มีตัวเลือก 3 ตัวเลือกนะ อย่าลืมหล่ะ ไม่ใช่ 2 ) และ G นั้นมีการเชื่อต่อกับเส้นทางอื่น ๆ อยู่แสดงว่าน่าจะมีเส้นทางที่มีความเป็นไปได้ว่าจะดีกว่า S-B-G ด้วย
  4. เมื่อถึง S-A แล้วก็ทำการทดสอบเส้นทางที่เชื่อมต่อกับ A ซึ่งมีเส้นทางอยู่ 2 เส้นทางคือ C และ G ก็จะได้ S-A-C ที่มีค่า H:5,C:12,F:17 และ S-A-G ที่มีค่า H:0,C:20,F:20 เราอย่าลืมว่าเรามีค่าเก่าอยู่อีก 2 ตัวคือ S-B-D มีค่า H:2,C:16,F:18 และ S-B-G H:0,C:24,F:24 แต่ S-B-G นั้นมีค่ามากที่สุด และยังมีจุด G ซึ่งซ้ำกับ S-A-G ที่มีค่าน้อยกว่า เราเลยตัดทิ้งไปเพราะจุดหมายปลายทางคือ G ซึ่งเราต้องการหาค่าเส้นทางที่ไปถึง G ที่น้อยที่สุดเท่านั้นจึงตัด S-A-G ทิ้งไป โดยในที่นี้ ค่า F ของ S-A-C นั้นน้อยที่สุดในกลุ่ม เราก็เลือกให้เดินต่อไปที่ S-A-C โดย S-A-G นั้นยังมีเส้นทางอื่นที่เชื่อต่อแสดงว่าน่าจะมีเส้นทางที่ดีกว่าอยู่
  5. เมื่อถึง S-A-C เรามีเส้นทางอยู่ 2 เส้นคือ E และ G โดยที่ S-A-C-E นั้นมีค่า H:2,C:15,F:17 และ S-A-C-G  นั้นมีค่า H:5,C:21,F:26 และค่าที่เหลืออยู่คือ S-B-D มีค่า H:2,C:16,F:18 และ S-A-G H:0,C:20,F:20 โดยที่ค่า F ของ S-A-C-E นั้นน้อยที่สุดในกลุ่มทั้ง 4 ตัวเราก็จะเลือกเดินไปที่ E และ S-A-C-G ก็ต้องนำออกจากกลุ่มด้วยเพราะ S-A-G นั้นมีค่า F น้อยกว่า
  6. โดยเมื่อถึง E แล้ว เส้นทางมีเส้นเดียวคือเส้น S-A-C-E-G ซึ่งมีค่า H:0,C:17,F:17 ซึ่งน้อยกว่า SBD H:2,C:16,F:18 และ S-A-G มีค่า H:0,C:20,F:20 เราก็จะเลือกเส้นทาง S-A-C-E-G เป็นเส้นทางที่ดีที่สุดในการเดินทางจาก S ไปถึง G โดยใช้ Priority ที่ 17, Cost ที่ 17 และ Heuristic ที่ 0

Animation สามารถทดลองเล่นได้ที่ JSearch demo ครับ
ซึ่งวิธีการ A* นั้นส่วนใหญ่จะใช้ในการเดินทางของ AI ในเกมส์ต่าง ๆ โดยหลักการนี้มีเขียนไว้ที่ Game Character Path Finding in Java โดยใช้ในการเขียนการค้นหาคู่ต่อสู้ในแผนที่ของเกมส์โดยใช้ Heuristic ที่เปลี่ยนแปลงไปโดยตลอด และเส้นทางที่น่าจะเป็นไปได้ หรือใช้ระยะทางในการกำหนดค่าของ Cost ในการค้นหาศัตรูด้วย ส่วน Code นั้นเดี่ยวขอเวลาเขียนก่อน ตอนนี้ได้ Idea เท่านั้น -_-"

 

Framework , Library , Platform, Architecture และ AJAX

ผมมีคำถามที่ไม่เข้าใจ ให้ช่วยแนะนำแนวทาง ดังนี้ครับ
1. framework คืออะไร เกี่ยวข้องกับ library ไหม
2. แพลตฟอร์มกับสถาปัตยกรรมต่างกันอย่างไร
3. AJAX คืออะไรครับ

Framework นั้นใน Software development เป็นการสร้างโครงสร้างของ software project ที่สามารถรวบรวม และพัฒนาสิ่งต่าง ๆ ได้ โดยที่ framework นั้นจะมีโปรแกรมสนับสนุน (IDE), library, scripting language และซอฟต์แวร์อื่นๆ ที่ช่วยในการพัฒนา ตัวอย่าง Framework ก็ Eclipse ที่เป็น Java Framework จาก IBM, NetBeans จาก Sun Microsystems, Microsoft .NET จาก Microsoft, Ruby On Rails สำหรับเขียน Ruby, Cocoa จาก Apple Computer ฯลฯ ส่วนถ้าใน Hardware development เป็นพวกการรวมกันของระบบ เช่น SuperComputer ที่ต้องใช้ Hardware เฉพาะที่เข้ากันได้, Macintosh ที่ต้องใน CPU ที่ออกแบบมาเฉพาะสำหรับการทำงานร่วมกับ Mac OS เป็นต้น
ซึ่งในส่วนของ Framework ที่เป็น Software development นั้น บางครั้งก็สามารถแยกย่อยได้เป็น 2 ส่วนคือ Runtime และ SDK (Software Develop Kits) ซึ่ง Runtime นั้นเป็นการทำให้ซอฟต์แวรที่พัฒนาจาก SDK สามารถทำงานได้ โดยที่ไม่ต้องลง SDK ทั้งหมด ถ้าคิดง่ายๆ คือ SDK เป็น super set ของ Runtime อีกที

Library เป็นการรวมกันของ subprogram ที่ช่วยในการพัฒนาซอฟต์แวรต่าง ๆ ถ้าใน c/c++ ก็พวก stdio, iostream, string ฯลฯ ซึ่งเราต้อง include ถ้าใน java ก็พวก import ต่างๆ เช่น swing อะไรพวกนี้เข้ามาใน code ของเราเพื่อช่วยให้เราไม่ต้องเขียนในส่วนนั้น ๆ ตัวอย่างเช่นใ น MFC ที่สามารถ include Library พวก win32 เข้ามาเพื่อสร้าง GUI ในภาษา visual c++, visual basic

Architecture เป็นศาสตร์ และศิลปของการออกแบบสิ่งของ และโครงสร้างต่าง ๆ โดยมุ่งเน้นในความเป็นกลางของระบบที่เข้ากันได้ในแต่ละรายละเอียด ทั้ง Software และ Hardware

Platform เป็นรายละเอียดต่างๆ ที่นำมารวมกันของ framwork (ทั้ง hardware หรือ software) ที่ยินยอมให้ทำงานได้ ซึ่งมันเป็นการรวมกันของ Computer architecture, operating system หรือ programming language และรวมไปถึง runtime library ตัวอย่างเช่น Wintel เป็นการรวมกันของ Intel x86 หรือ compatible hardware และ Windows operating system, Macintosh เป็นการจัดจำหน่วยบน platform ของ Apple Computer hardware และ Mac OS operating system และพวก video game console ต่าง ๆ พวก xbox, ps(1,2,3) game cube ฯลฯ

AJAX หรือ Asynchronous JavaScript and XML นั้นเอง ซึ่งมันทำงานโดยใช้

  • HTML/XHTML/CSS เพื่อแสดงผล
  • Document Object Model ทำการส่งค่า html และทำงานโดยผ่าน JavaScript เพื่อทำการแสดงผลแบบ dynamic ให้กับ HTML/XHTML/CSS มากขึ้น
  • XMLHttpRequest เพื่อทำการส่งข้อมูลเข้า และออก web server เพื่อประมวลผล

Web browser ที่สนับสนุนคือ

  • Apple Safari 1.2 ขึ้นไป
  • Konqueror ทุกรุ่น
  • Microsoft Internet Explorer (and derived browsers) 4.0 ขึ้นไป
  • Mozilla Firefox (and derived browsers) 1.0 ขึ้นไป
  • Netscape 7.1 ขึ้นไป
  • Opera 7.6 ขึ้นไป
  • ฯลฯ ในอนาคต

ซึ่งจริงๆ แล้วเป็น Technology ที่ใช้ใน Outlook Web Access อยู่แล้ว ซึ่งทำงานผ่าน Microsoft Exchange Server โดยทำงานบน Microsoft Internet Explorer 4.0 ต่อมาในปี 2005 นั้น Google ก็เอามาใช้ใน Google Groups, Google Maps, Google Suggest และ Gmail
ถ้าไล่ตามลำดับแล้ว จากขนาดใหญ่ไปเล็กก็ไล่จาก
Platform -> Architecture -> Framework -> Library -> AJAX