Technical Breadth (ความกว้างทางเทคนิค)
ต่างจากนักพัฒนา ที่ต้องมี technical depth (ความลึกทางเทคนิค) จำนวนมากเพื่อทำงานของตนได้ software architect ต้องมี technical breadth (ความกว้างทางเทคนิค) จำนวนมากเพื่อมองสิ่งต่างๆ จากมุมมองเชิง architecture technical depth คือการมีความรู้เชิงลึก ในภาษาโปรแกรม แพลตฟอร์ม framework ผลิตภัณฑ์ ฯลฯ ตัวใดตัวหนึ่งโดยเฉพาะ ในขณะที่ technical breadth คือการรู้เพียงเล็กน้อย เกี่ยวกับสิ่งต่างๆ จำนวนมาก
เพื่อให้เข้าใจความแตกต่างนี้ได้ดีขึ้น ลองพิจารณา knowledge pyramid ที่แสดงใน รูปที่ 2-2 มันครอบคลุมความรู้เชิงเทคนิคทั้งหมดในโลก ซึ่งแบ่งออกได้เป็นสามระดับ ได้แก่ สิ่งที่คุณรู้ , สิ่งที่คุณรู้ว่าคุณไม่รู้ และ สิ่งที่คุณไม่รู้ว่าคุณไม่รู้
Figure 2-2. The pyramid representing all knowledge
สิ่งที่คุณรู้ รวมถึงเทคโนโลยี framework ภาษา และเครื่องมือที่นักเทคโนโลยีใช้ในการทำงานประจำวัน (เช่น โปรแกรมเมอร์ Java ที่รู้จัก Java) พวกเขาเก่ง หรือแม้แต่เป็นผู้เชี่ยวชาญในสิ่งเหล่านี้ทั้งหมด สังเกตว่าความรู้ระดับนี้ (แทนด้วยส่วนบนของพีระมิด) เป็นระดับที่เล็กที่สุดและมีสิ่งต่างๆ น้อยที่สุด เพราะนักเทคโนโลยีส่วนใหญ่ต้องเลือกพื้นที่ ที่จะพัฒนาความเชี่ยวชาญ ไม่มีใครเป็นผู้เชี่ยวชาญในทุกอย่างได้
สิ่งที่คุณรู้ว่าคุณไม่รู้ (ส่วนกลางของพีระมิด) รวมถึงสิ่งที่นักเทคโนโลยีรู้เพียงเล็กน้อยหรือเคยได้ยินมา แต่มีประสบการณ์หรือความเชี่ยวชาญ น้อยมากหรือไม่มีเลย ตัวอย่างเช่น นักเทคโนโลยีส่วนใหญ่ เคยได้ยิน ชื่อ Clojure และรู้ว่ามันเป็นภาษาโปรแกรมที่มีพื้นฐานจาก Lisp แต่เขียนซอร์สโค้ดใน Clojure ไม่เป็น ความรู้ระดับนี้ใหญ่กว่าระดับบนมาก เพราะคนเราสามารถคุ้นเคยกับสิ่งต่างๆ ได้มากกว่าที่จะพัฒนา ความเชี่ยวชาญได้
สิ่งที่คุณไม่รู้ว่าคุณไม่รู้ เป็นส่วนที่ใหญ่ที่สุดของ knowledge pyramid มันรวมถึงเทคโนโลยี เครื่องมือ framework และภาษาทั้งหมด ที่จะเป็น solution ที่สมบูรณ์แบบสำหรับปัญหาหนึ่งๆ ถ้าเพียงแต่นักเทคโนโลยีที่พยายามแก้ปัญหานั้นรู้ว่า solution เหล่านี้มีอยู่ เป้าหมายในสายอาชีพของทุกคนควรเป็นการย้ายสิ่งต่างๆ จาก สิ่งที่คุณไม่รู้ว่าคุณไม่รู้ ไปยังพื้นที่ที่สองของพีระมิด คือ สิ่งที่คุณรู้ว่าคุณไม่รู้ และเมื่อความเชี่ยวชาญกลายเป็นสิ่งจำเป็น ก็ย้ายสิ่งต่างๆ จากส่วนกลางของพีระมิดขึ้นไปยังส่วนบน คือ สิ่งที่คุณรู้
ในช่วงต้นของสายอาชีพนักพัฒนา การขยายส่วนบนของพีระมิด ( รูปที่ 2-3 ) หมายถึงการได้รับความเชี่ยวชาญที่มีคุณค่า อย่างไรก็ตาม สิ่งที่คุณรู้ ก็เป็นสิ่งที่คุณต้อง รักษาไว้ ด้วย ไม่มีอะไรหยุดนิ่งในโลกซอฟต์แวร์ ถ้านักพัฒนากลายเป็นผู้เชี่ยวชาญด้าน Ruby on Rails ความเชี่ยวชาญนั้นก็จะไม่คงอยู่ถ้าพวกเขาละเลย Ruby on Rails ไปสักหนึ่งหรือสองปี การรักษาสิ่งต่างๆ ให้อยู่ที่ส่วนบนของพีระมิดต้องใช้เวลาลงทุนเพื่อรักษาความเชี่ยวชาญไว้ ส่วนบนนี้แทน technical depth ของแต่ละคน คือสิ่งที่พวกเขารู้ดีจริงๆ
Figure 2-3. Developers must maintain expertise to retain it
อย่างไรก็ตาม ธรรมชาติของความรู้เปลี่ยนไปเมื่อนักพัฒนาเปลี่ยนผ่านสู่บทบาทสถาปนิก คุณค่าส่วนใหญ่ของสถาปนิกอยู่ที่ การมีความเข้าใจ กว้างขวาง เกี่ยวกับเทคโนโลยีและวิธีใช้มันแก้ปัญหาเฉพาะเจาะจง ตัวอย่างเช่น มันดีกว่าสำหรับสถาปนิกที่จะรู้ว่ามี solution อยู่ห้าแบบสำหรับปัญหาหนึ่งๆ มากกว่าที่จะมีความเชี่ยวชาญเดี่ยวๆ ในแค่แบบเดียว ส่วนที่สำคัญที่สุดของพีระมิดสำหรับสถาปนิก คือส่วนบน และ ส่วนกลาง ส่วนกลางแทรกซึมลึกลงไปในส่วนล่างมากแค่ไหนแทนความ กว้าง ทางเทคนิคของสถาปนิก ดังแสดงใน รูปที่ 2-4
Figure 2-4. How much someone knows about a topic is technical depth, and how many topics someone knows is technical breadth
สำหรับสถาปนิก breadth สำคัญกว่า depth เพราะสถาปนิกต้องตัดสินใจให้ capability สอดคล้องกับข้อจำกัดทางเทคนิค ความเข้าใจที่กว้างขวางเกี่ยวกับ solution ที่หลากหลายจึงมีคุณค่า ดังนั้น สำหรับสถาปนิก แนวทางที่ฉลาดคือการเสียสละความเชี่ยวชาญที่ยากลำบากกว่าจะได้มาบางส่วน แล้วใช้เวลานั้นขยาย portfolio ของตัวเอง ดังแสดงใน รูปที่ 2-5 ความเชี่ยวชาญบางด้านจะยังคงอยู่ อาจเป็นด้านเทคโนโลยีที่สนุกเป็นพิเศษ ในขณะที่ด้านอื่นๆ ก็เสื่อมถอยไปอย่างมีประโยชน์
Figure 2-5. Enhanced breadth and shrinking depth for the architect role
Knowledge pyramid ของเราแสดงให้เห็นว่าบทบาทของ architect และ developer แตกต่างกันโดยพื้นฐานมากแค่ไหน นักพัฒนาใช้เวลาทั้งสายอาชีพขัดเกลาความเชี่ยวชาญ การเปลี่ยนผ่านไปสู่บทบาทสถาปนิก หมายถึงการเปลี่ยนมุมมองนั้น ซึ่งหลายคนพบว่ายาก สิ่งนี้นำไปสู่ dysfunction ที่พบบ่อยสองอย่าง อย่างแรก สถาปนิกพยายามรักษาความเชี่ยวชาญในหลายๆ ด้าน แต่ไม่ประสบความสำเร็จในด้านไหนเลย และทำงานหนักจนเหนื่อยล้าไปในระหว่างนั้น อย่างที่สอง มันปรากฏออกมาในรูปของ stale expertise (ความเชี่ยวชาญที่ล้าสมัย) ความรู้สึกผิดๆ ว่าข้อมูลที่ล้าสมัยของคุณยังคงล้ำสมัยอยู่ เราเห็นสิ่งนี้บ่อยๆ ในบริษัทใหญ่ ที่นักพัฒนาผู้ก่อตั้งบริษัทย้ายไปเป็นผู้นำ แต่ยังคงตัดสินใจด้านเทคโนโลยีโดยใช้เกณฑ์เก่าแก่ (ดู “Frozen Caveman Antipattern” )