軟件開發工程師的職業發展無非兩大類:一是作「官」,從事管理工做;二則繼續從事技術工做。對於後者,軟件架構師(software architect)是不少軟件開發工程師追求的理想崗位。在這我想談一談軟件架構師所需的幾大能力和一些特質,以便讀者能更好地規劃本身的職業發展。
1)須要很好的邏輯思惟能力。對於軟件開發工程師來講,因爲大多從事編程工做,因此很容易覺得本身的邏輯思惟沒有問題,足以知足軟件架構師一職所需。實則否則!就個人觀察,很多工做近十年的工程師仍存在思惟不清的問題。主要表如今和他討論問題時,你問他A,他回你B,且很容易跑題和抓不住重點。軟件架構師在工做中須要「咬文嚼字」地理解文字和溝通,此時清晰的思惟就是關鍵。
2)須要很強的概念(括)能力。軟件架構師在不少情形下是管理層與工程師之間的橋樑,除了掌握技術細節,還要對技術細節進行必定的抽象歸納使管理層理解問題所在,以便管理層恰當地參與決策。此外,軟件架構師在平常工做中也會面臨各類各樣的技術問題,良好的概念能力有助於把握住問題的本質,從而有效率和效果地解決問題。
3)須要熟練運用UML(Unified Modeling Language,統一建模語言)的能力。軟件架構師因爲須要從事大量文字描述性的技術工做,不可避免地須要藉助圖,而UML就是一種較通用和接受程度較高的圖形化建模語言。軟件架構師對於UML的掌握,不能只侷限於明白各類圖型的意義,還得能熟練地查閱UML規範,以便精準地瞭解各類術語和圖型的含義,從而實現對模型的精確表達。記住,「好圖賽過千言萬語」,圖要好就得追求表達的精確性,這就離不開對UML的精準掌握。
4)須要很強的業務能力。對於系統架構師(system architect),業務能力可能包括對行業規範的熟悉、對組織結構和客戶關係的清晰瞭解和研發流程的深入理解等。對於開發架構師(development architect)業務能力則可能包含對行業規範的理解、對開發環境(編程語言、開發平臺與框架、開發流程等)的熟悉和很強的軟件查錯能力等。
5)須要較強的組織能力(含溝通)。軟件架構師在平常工做中須要作很多的協調工做,包括組織技術會議的召開和帶領團隊攻堅,這些都須要必定的組織能力。拿組織會議來講,有些工程師不喜歡在會議以前進行事先準備和與相關人員進行允分溝通,而是喜歡開會時事無鉅細地討論,這勢必形成會議低效。面對這樣的會議,軟件架構師須要很好地判斷是終止會議從新安排呢,仍是繼續進行。若是繼續進行就得在會議中很好地掌控會議的話題和節奏,並依據本身的概念能力讓與會者更有效地達成共識。
6)勇於承擔責任。軟件架構師在很多情形下是技術層面的決策者,他必須勇於「拍板」,這就要求他承擔起相應的責任。固然,責任的承擔不能「人有多大膽,地有多大產」那樣,而應創建在本身的職業素養和能力之上。軟件架構師若是不敢於承擔責任,那就容易形成開發工做開展不下去的局面。
7)面對挑戰的勇氣。其實,這一點對於每個職場人士都很重要,但對於軟件架構師尤其重要。與軟件開發工程師相比,軟件架構師所面臨問題的複雜度更高,既會有技術因素,也會有人爲因素。解決這些問題有時是很大的挑戰,也讓人以爲痛苦。有挑戰就意味着其中必定蘊涵着其中存在可收穫的內容,每克服一次咱們的能力就得到了提升。在面對挑戰時,我喜歡對本身說「沒有痛苦就沒有成長」;也會設想本身在面對挑戰的環境中工做了一年、幾年後將會有多大的收穫啊!這種設想會給咱們的職業發展帶來更大的想象空間,使得本身面對挑戰時更具耐心、信心和勇氣。
如何得到前面所說起的一些能力相信是讀者比較關心的,個人回答是「須要時間和堅持」。有些能力的得到不是簡單地掌握技術知識就好了,而是須要必定的人生閱歷,好比概念能力就是這樣的。對於開發軟件架構師,若是要設計出一個好的軟件架構,除了接觸和學習已有的出色設計外,還得須要必定的行業積累和很好的概念能力。對於概念能力,我認爲它是依託於生活的,這就須要時間。這種理解也解釋了爲何業內流傳着成爲軟件架構師得30歲之後才更可能。
至於堅持,它一樣很重要。一我的的能力是有限的,很難作到這個也懂那個也會。某種程度上,所掌握知識的廣度對於咱們的職業發展是有益的,但這是基於咱們在某一方面很精這一前提的。要精於某一方面,就必定離不開在同一領域的不斷堅持。堅持意味着咱們在那個領域會碰到更多的問題和作更多的思考,這是成爲領域專家的惟一途徑。
或許有讀者會問,在這些能力中爲何沒有談及文檔編寫能力呢?緣由不是由於它不重要,相反,這是軟件架構師所需具有的最基本能力之一。其實,文檔編寫能力考驗的是前面提到的邏輯思惟、概念和運用UML的能力。一個說話沒有障礙的人,只要具有這三大能力就必定能寫出好的技術文檔。在平常工做中,若是某人不喜歡寫文檔、或認爲寫文檔不重要,那是由於這三大能力還不過關的緣故。也正因如此,我建議工程師不要想固然地覺得「只要會寫代碼,文檔編寫能力並不重要」。若是這樣想,那麼軟件架構師一職也就離咱們遠去了。