Intro to Design Principles & Architectural Tactics

Design Principles

รูปที่ 1 ภาพร่าง (เครดิตภาพจากเว็บ johnlovett.com)

การแก้ปัญหาเชิงสถาปัตยกรรมและปัญหาในการออกแบบซอฟต์แวร์ถือเป็นทักษะสำคัญของนักออกแบบ, นักวิเคราะห์ระบบ และสถาปนิกซอฟต์แวร์ คนเหล่านี้จำนวนไม่น้อยที่ไม่ได้ให้ความสำคัญกับพื้นฐานเหล่านี้ อาจเพราะไม่ทราบว่าเป็นสิ่งจำเป็น หรืออาจพึงพอใจแก้ปัญหาด้วยเทคโนโลยี, เฟรมเวิร์ก และสิ่งสำเร็จรูปต่างๆ นานา มากกว่า

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

การแก้ปัญหาต้องแก้ที่เหตุ-ไม่ใช่แก้ที่ปลาย แม้การแก้ที่ปลายจะรวดเร็ว แต่ไม่มีทางแก้ให้หายขาด คนจำนวนมากที่ทำงานด้านนี้ เมื่อทำงานไปสักระยะใหญ่ๆ จะพบว่าเมื่อถึงจุดหนึ่งเขาจะไม่สามารถไต่ขึ้นบันไดขั้นสูงๆ ต่อไปได้แล้ว เพราะพื้นฐานความรู้และทักษะที่มีอยู่เปราะบางเหลือเกิน ไม่แน่นพอที่จะ ‘up level’ ได้ คราวนี้ล่ะทั้งเงินเดือนก็อาจจะขึ้นยาก และตำแหน่งหน้าที่ก็อาจจะขึ้นยาก หลายคนทนภาวะกดดันไม่ไหวก็หาทางออกให้ตัวเองง่ายๆ ด้วยการเปลี่ยนสายงาน โดยมากมักหันหัวเปลี่ยนทิศไปสายบริหาร ไม่ก็หันไปทำอาชีพอื่น หรือไปทำธุรกิจอื่นกันไปเลย

หากคุณยังหลงใหล (passion) ในงานออกแบบระบบและสถาปัตยกรรม ต้องการเติบโตไปในสาย ‘specialist’ อย่างแท้จริง ลองทบทวนตัวเองดูครับ ว่าทักษะพื้นฐานการแก้ปัญหาเชิงสถาปัตยกรรมและปัญหาในการออกแบบซอฟต์แวร์ของตนเองนั้น ‘แน่น’ และ ‘แข็ง’ พอไหม? หากไม่หรือยังไม่แน่ใจ ลองมาปรับพื้นฐานกันครับ ไม่ต้องอาย ไม่ต้องกลัว ใครๆ ก็เป็นกันได้ ผมเองยังเคยเป็น ทำงานมาหลายปี วิ่งไล่ล่าเทคโนโลยี เฟรมเวิร์ก ไลบรารี่ต่างๆ จนถึงวันหนึ่งพบว่า “กูจะวิ่งตามมันไปทำไม” เพราะถึงจุดหนึ่งเมื่อวิ่งตามทัน…แต่ดันไม่เข้าใจมันแล้ว ไม่เข้าใจภายในของมันแบบลึกๆ แล้ว เชื่อมโยงกับสิ่งต่างๆ ไม่ได้ ประยุกต์ไม่ได้ จนสุดท้ายพบว่าตนเองพื้นฐาน ‘อ่อน’ เท่านั้นแหละ ที่ผมหยุดเลย ไม่ตามมันแล้ว หันมาปรับพื้นฐานตนเองดีกว่า แน่นและแข็งเมื่อไรค่อยวิ่ง และเมื่อคุณได้เริ่มวิ่งอีกครั้งจะพบว่า… วิ่งสบายกว่าเดิมขึ้นเยอะ และเร็วกว่าเดิมขึ้นมาก จะไล่ตามอะไรก็ไม่ต้องวิ่งไล่มันกระชั้นชิด… แค่ชำเลืองมองก็เข้าใจได้ไม่ยาก… เทคโนโลยีเติบโต ผุดใหม่ เปลี่ยนแปลง… รวดเร็วขึ้น แต่เราจะพบว่า… มันมีรากเหง้าที่มาที่ไป… มาปรับพื้นฐานการแก้ปัญหาเชิงสถาปัตยกรรมและปัญหาในการออกแบบซอฟต์แวร์กันครับ 🙂

ก่อนอื่นเรามาทำความเข้าใจกันคร่าวๆ ก่อน – ก่อนที่ะผมจะพาไปทำความรู้จักกับ Design Principle และ Architectural Tactic ต่างๆ กันใน blog ต่อไปๆ…

Design Principle

  • Design Principle คือ หลักพื้นฐานในการออกแบบ เพื่อให้การออกแบบมีคุณภาพที่ดี แก้ไขปัญหาที่ต้องการได้ถูกประเด็น
  • Design Principle ได้มาจากการศึกษาและสั่งสมประสบการณ์ ลองผิดลองถูก และปรับปรุงทักษะอย่างต่อเนื่อง
  • Design Principle สามารถนำไปประยุกต์ได้ตั้งแต่ระดับการแก้ปัญหาจนถึงการเขียนโค้ด หรือแม้แต่การออกแบบ Test Case
  • Design Principles มีหลายประเภท อาทิ
    • General Design Principles
    • Object-Orientated Design Principles
    • General Architectural Design Principles
    • Software Architectural Design Principles
    • Transaction Design Principles

Architectural Tactic

  • Architectural Tactics คือ ยุทธวิธีในการแก้ปัญหาระดับสถาปัตยกรรม ซึ่งเป็นปัญหาที่มีผลต่อภาพรวม, ส่วนสำคัญของระบบ และประเด็นที่ stakeholder มี concern มากๆ
  • Architectural Tactics จำแนกตามการแก้ไขคุณภาพต่างๆ อาทิ tactic ด้าน performance, tactic ด้าน security เป็นต้น
  • Architectural Tactics มีหลายประเภท อาทิ
    • Availability Tactics
    • Performance Tactics
    • Modifiability Tactics
    • Security Tactics
    • Testability Tactics
    • Usability Tactics

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s