程式設計師進階:怎麼成為一個軟體架構師?
作者:程式設計小丫
來源:CSDN部落格
序:的確沒想到隨手寫的東西有那麼多的回覆,不管怎樣還是挺高興的。在這裡謝謝大家的關注了。其實做了這麼多年的技術腦子裡總會跳出很多的想法,但很少有時間靜下來仔細地思考思考,寫寫部落格也算是一種自我歸納和總結吧。
“軟體架構師”這個名詞也不知是什麼時候進入我的腦中的,不過一直就很疑惑,總覺得和軟體的Team Leader之間有些糾纏不清。不過以我的觀點來看,軟體架構師除了沒有行政上的職責以外,與Team Leader也並無二致了,也就是一個軟體團隊的核心設計者和決策人。
我可以把一個軟體研發工作者的從業經歷大致劃分為3個階段
第一階段是新手期
這個階段的典型特徵是容易被新技術的華麗外表所迷惑。當在網上看到一種新技術的介紹或者心得,立即產生了大量腎上腺素的分泌,幹什麼都想用一用,如果這時有人跟他說你的這項工作用這個不合適的話,要是性子急的人估計就直接開始罵娘了,性子緩些的也會想盡理由說服你使用這個新東西,實在沒辦法的話,吃不下東西睡不著覺也想另找個地方用一下。
新手時期的程式設計師對需求和應用環境的掌控能力還不強,但卻往往信心爆棚地認為自己寫的程式碼有多麼優雅高效。當問題出現時,大多數人的反應就是:“怎麼可能!在我的機器上執行的好好的!”。不管看了多少書,學習了多麼高效的演算法,實際的工作中需求和環境始終是變化萬端的。其實我也很不明白為什麼那麼多的技術類書籍往往都帶有或多或少的炒作成份,往往誇大某方面的優勢,而對缺點卻往往一帶而過,同時,相對思想演算法講解、技術介紹類的書籍,針對具體專案研發例項進行技術選型講解的書真的少之又少,或許這也從側面反應了寫書人很多,真正做研究的卻很少吧。
新手期程式設計師的不成熟還體現在團隊表現上,當一個問題提交給新手,當跟蹤別人的程式碼段時,經常會丟手不管,還理直氣壯地說“我這塊沒問題”,殊不知問題都沒有查清楚,你又怎知不是你的問題呢?在團隊研發中,我一向堅持入口點解決問題的原則,只要問題的入口點在你這裡,就必須全程跟蹤查到底,問題查出來了,再通知相關人員進行程式修正。團隊的程式設計師雖然分工不同,但每個人必須對他人的程式和演算法有清楚的認識和了解,因為大家是在同一個環境下工作,雖然程式碼有分工,可是操縱的卻是相同的裝置和資源。獨善其身在團隊開發中是最要不得的想法。
第二階段是中級程式設計師階段
這個階段的程式設計師對技術、和工具的選擇已經審慎了很多,可以根據具體的需求來選擇需要採用的技術,可以寫出詳細的需求調研報告並提出設計方案,優點、缺點分析得清晰明瞭。在應用層面也有較強的全域性理解力,在團隊中也具有相當的協作能力,因此具備較強的解決問題的能力。
中期的程式設計師雖然在應用層面上已經相當嚴謹,但在系統層面的掌控力卻並不強。應用系統也並非獨善其身,她和網路環境、使用方法、硬體環境、作業系統、地點、時間等等諸多因素有著千絲萬縷的聯絡。在少量使用者的中底端研發中,如越來越多的呈幾何級數增長的資訊管理系統中,系統掌控力並非必須的能力。但在一個高階高併發量,被大量應用於不同環境的軟體產品,系統掌控力就是不可或缺的能力。這種能力我認為大部分取決於知識面,工作越多,經驗越豐富,就越能對不同的應用環境有著敏銳地感覺和判斷。
大多數中階段程式設計師限於行業,對語言的依賴還是很強,比如搞資訊系統的和搞微控制器的、搞網路、路由器交換機的,由於系統層面不同,專精和對語言的理解都不甚相同。
第三階段是高階程式設計師/分析師/架構師階段
進入這個階段的前提是多年的工作經驗,廣闊的知識面和對系統底層到高層的全面認識,已經使其進入了無語言無工具的層次。也就是能任何清楚地感知每種程式語言的優劣、使用範圍、編碼禁忌,對一個大型工程能有最全面的瞭解,在選擇語言和確定技術方案的時候不會被自己對語言或技術工具的偏好(或者根本已經無所偏好)所影響,真正明白了其實別管是神馬語言、神馬技術,歸根到底咱們的物件還不是CPU、記憶體、硬碟和網路,該做的事情一件都不能少,所謂的技術框架是對初級程式設計師用的,真正高階了不研究個清楚透徹都不敢讓你進來。即使對同一種語言,在不同的作業系統中,如Visual C++和Unix C、AIX XLC、GNU G++等等的區別,以及不同版本之間的區別也瞭如指掌。
這個階段很難達到是由於對作業系統層面的清晰瞭解,相信一個初級程式設計師一路走來,大部分工作都是在Team Leader的規範和引導下完成的,每人都必須做好自己的工作,雖然在應用層面必須顧全大局,但系統層面的問題相對就難以接觸了。如果不是對技術有著強烈的渴求和一定的綜合能力,系統層面的工作經驗將很難與你有緣。這就好比一個當外科醫生的,其實做手術並不像很多人想象中那樣難,一般看個幾次,基本上也就差不多了,如果得到機會實際操作一下,不單是可以積累大量的經驗,自信心方面的收穫也是無法估量的。但是,動手術責任重大,機會不是人人都有的。技術工作者其實還是很幸福的,畢竟工作經驗的取得相對於當醫生還是容易的多。
高階階段一定需要有團隊的開發和管理經驗,一個軟體團隊好比一個樂隊,每個人對曲目的理解都不同,雖然司職不同的樂器,沒有指揮家也會弄得一團糟。軟體團隊的每個人對語言、業務、能力的理解都不一樣,交流方式也有別,同時他們操作著相同的系統和資源,如果Team Leader不做好規劃,後果肯定可想而知。豐富的經驗和敏銳的觸覺神經足以判斷出團隊成員的編碼風格和技術選擇偏好,能以足夠的經驗和理由說服其拋棄自己的感情偏好,從而很好地完成自己的工作。
這種能力有點類似於行政的管理,但實際上卻是有明顯的不同的,這種管理基於的是實際的豐富經驗和充足的理由,絕對不可以將行政管理中的排隊觀念帶入,如果2個人意見相左,就必須爭論,爭不下去了回家想清楚理由再爭,甚至直到時間來證明一切,不能說這次你聽我的,下次我聽你的,技術工作是絕對的,最好的、最適合需求的方案永遠只有一個,如果你覺得“都可以”,只能說對行業和需求還沒有吃透。
高階程式設計師是經常會對需求說“No”的人,對行業的深入認識和對系統及應用全域性的把握能力使他具有真正指導使用者的能力,規範使用者的工作、思想並用計算機這個工具真正對行業產生引領作用。高階架構師能深入認識管理和技術的關係,管理上出現的問題一定要在管理上解決,工作經驗不多的使用者或者程式設計師往往會把管理上產生的問題拋給軟體系統,導致系統越來越複雜,維護成本迅速增長,而管理上的問題卻依然存在。
但有一個現狀是,往往使用者提需求都直接提給負責程式的程式設計師,小公司估計直接就和程式設計師聯絡了,大點的也由一個其實並不怎麼懂技術的所謂“客戶經理”協調轉發,而並非經過設計師和架構師的同意,因為他們可能現在已經在研發別的專案了。那麼使用者的需求是否合理,是否符合當初設計的初衷,往往初級的程式設計師並不知曉或有不同理解和偏好。雖然這也是實際情況所限,很難做的更好,但這也造成了很多系統的持續發展力很低,而許多使用者也處於資訊不對等的弱勢地位,也只好將就算了。
總結
最後,技術和社會是緊密聯絡在一起的。社會的進步發展決定了需求和技術的發展,一個對技術發展有著敏銳感覺的架構師必須對社會有著深刻的認識。一個良好的團隊必須有新老交替才能不斷進步,老人要捨得帶新人。“要讓一部分人先富起來,然後先富的帶動後富的,最終達到共同富裕。”這是我們上學時學到的話吧,不過要是先富的儘想著向前看,根本沒把後富的放在眼裡,那這個團隊也好、社會也好,也就沒多大的持續發展力了。
其實我倒是認為現在真正的大富豪還是有不少知民間疾苦的,頂層的和基層的都還能瞭解屁民們的生活,不瞭解的是中間層,他們整天生活在富庶小康的溫床,經常會提及一些好高騖遠、不切實際的想法,而對那些為底層人民謀福利的事情嗤之以鼻,甚至諷刺為“用先進的技術做愚蠢的事情”,目的僅僅是為了譁眾取寵和彰顯自己的遠見卓識。
先寫到這裡了,其實我自己也在為成為一個真正的架構師而奮鬥,一家之言,難免有所偏差,不過還是那句話,“我們一直在努力”。
版權申明:內容來源網路,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝。
-END-
相關推薦
程式設計師進階:怎麼成為一個軟體架構師?
作者:程式設計小丫 來源:CSDN部落格 序:的確沒想到隨手寫的東西有那麼多的回覆,不管怎樣還是挺高興的。在這裡謝謝大家的關注了。其實做了這麼多年的技術腦子裡總會跳出很多的想法,但很少有時間靜下來仔細地思考思考,寫寫部落格也算是一種自我歸納和總結吧。 “軟體架構師”這個名詞也不知是什麼時候
【今日薦文】三十五年經驗分享:程式設計師進階八法
如果你的目標僅僅是提高自己,那麼很容易實現,但是如果你的目標是成為一個偉大的程式設計師,那麼這就不簡單了。 很多人都願意說,我想變得更好,但是更好是什麼卻很模糊,而且人們也不知道該怎麼樣去做。 時間到了,提高你的程式設計技能,認真+嚴肅,走起! 我在這裡分享八法
程式設計師進階之演算法練習:LeetCode專場
歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由落影發表 前言 LeetCode上的題目是大公司面試常見的演算法題,今天的目標是拿下5道演算法題: 題目1是基於連結串列的大數加法,既考察基本資料結構的瞭解,又考察在處理加法過程中的邊界處理; 題目2是求陣列出現頻率前k大的數字,考察思維能
某外包程式設計師吐槽:我一個外包公司員工,你拿阿里價值觀壓我?
對於很多大型公司而言,除了正式員工之外,還會有一些第三方員工,也被稱為外包員工。他們雖然在該公司工作,但並不是該公司的員工,而是和外包公司簽訂合同後派駐到該公司工作,不過考勤和工作任務同正式員工一樣,需要聽從安排。像華為阿里騰訊之類的公司,都有外包員工的存在。無獨有偶,一名阿里外包程式設計師在網路論
Java程式設計師進階架構師其實並不難,關鍵在於選擇。
很多人做java開發2,3年後,都會感覺自己遇到瓶頸。什麼都會又什麼都不會,如何改變困境,為什麼很多人寫了7,8年還是一個碼農,工作中太多被動是因為不懂底層原理。公司的工作節奏又比較快,難有機會學習架構原理,也沒人教,所以這個時候,學習架構原理,擴充套件思維,對自己以後職業生涯尤為重要。 同樣公
程式設計師吐槽:在一個不到五千人的網際網路小廠,年底裁員比京東更狠
一名程式設計師在某網際網路公司工作,到年底卻遇到了裁員,於是吐槽了一番:年底遇到了跟京東一樣的待遇,裁員,在一個不到5000人的網際網路小廠,不同的是,我們公司裁員的指標是20%比京東更狠。現在hr讓我自動提離職申請,說這個月的考勤自由,有點焦慮,有點慌。各位大佬,遇到這種情況是怎麼處理的呢?
阿里某程式設計師吐槽:帶一個名校畢業小弟,水平太差態度還有問題!
如今科技發展迅速,可能我們沒有及時的跟上學習就會被這個社會所落在後面,尤其是從事一些技術水平要去很高的崗位尤其突出。而評判一個人技術水準高低的標準或許學歷就是最主要和最符合實際的了。大多數公司在招聘員工時都會比較看中求職者的學歷,不少跟上更是靠著一張學歷的高低來
海歸碩士程式設計師吐槽:回國一個月都沒找到工作,懷疑自己書白讀了
海歸碩士,按理說這學歷已經很光鮮了,然而回國一個月面了很多網際網路大廠,卻沒有拿到一個offer,這著實讓人有些難堪,於是吐槽稱是國內現在不認可海歸學歷了嗎?畢業之前也在微軟實習過,按理說能力不成問題,但就是不知道為何面不上。面對這名海歸碩士的吐槽,一石激起千層浪,廣大網友紛紛議論起來。 &nb
iOS 程式設計師進階架構師必備的 6項 硬技能!這些你都知道嗎?
前言: 之前很多人問過我這麼個問題,說怎樣才能成為一名高階iOS工程師?我覺得這是一個很好的話題,技術人的職業規劃不管如何發展,總歸是一個從初級到高階的過程,不要妄想從初級一步跨越到架構師、CTO,產品經理 之類的職位,所以高階工程師這個過渡階段顯得就很重要了,那麼今天就來
小程式開發進階:如何實現直播連麥
我們上週做了一場免費線上直播課,聲網Agora 研發工程師張乾澤分享了小程式直播元件的特點、實現小程式間連麥的方法,以及需要注意的產品化難題等乾貨。本文將為沒能觀看到直播,又正在做小程式開發的朋友們回顧一下演講內容,以及直播觀眾們提出的那些問題。(文末有視訊回顧地址,大家可配合觀看)
Java程式設計師進階架構師難嗎?不,那是你沒找對方法
很多人做java開發2,3年後,都會感覺自己遇到瓶頸。什麼都會又什麼都不會,如何改變困境,為什麼很多人寫了7,8年還是一個碼農,工作中太多被動是因為不懂底層原理。公司的工作節奏又比較快,難有機會學習架構原理,也沒人教,所以這個時候,學習架構原理,擴充套件思維,對自己以後職業生涯尤為重要。 同樣公
java程式設計師進階之路需要的學習過程
其實本來真的沒打算寫這篇文章,主要是LZ得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來。LZ自己當初面試完以後,除了記住一些聊過的知識點以外,具體的內容基本上忘得一乾二淨,所以寫這篇文章其實是很有難度的。 但是,最近問LZ的人實
JAVA-程式設計師進階之路
自己大學期間學習的是軟體工程,從需求分析到專案上線整套流程都接觸過,大二就開始接觸java,但是沒有好好把握。大把時間虛度在lol裡面了。已經在工作的我,作為一個菜鳥程式設計師,自己也有一
伊始--淺談C++程式設計師進階歷程(一)
最近看了一篇《回答阿里社招面試如何準備,順便談談對於Java程式猿學習當中各個階段的建議》,心中有一些感觸。 在看這篇文章前幾周,還挺迷茫的。不知不覺也工作了很久,雖然在上班期間,每天或多或少地都在寫程式碼,但是很多都是僅僅增加熟練度,或者說是將別人現有的
Java程式設計師進階全過程
學習Java,書籍是必不可少的學習工具之一,尤其是對於自學者而言。廢話不多說,下邊就給大家推薦一些Java進階的好書。 第一部分:Java語言篇 1.《Java程式設計規範》 適合物件:初級、中級 介紹:這本書的作者是被譽為Java之父的James Gosling,入門
公司中 C和C++程式設計師進階之路
從一次考試說起。 2010年10月份,綜合部邀請我給新入職3個月的員工草擬考試試題,這些同事大部分在公司做的實習,算起來至少也有5、6個月的工作經驗了吧。 試題的內容,是針對日常需要面對的問題出的案例,比如,查詢檔案、修改下許可權等,其中最後20分題,就是按要求在螢幕
程式設計師會不會成為一個高危行業?
近日一個“被毒妻逼死的天才程式設計師”的新聞搞得沸沸揚揚,各抒已見,百家爭鳴。我作為一名出身於程式設計師的老IT人感到非常地痛心疾首,世界那麼大,我想發嘮叨。如果硬是要問我的觀點,我還真說不清楚,真不能片面地看這個問題,我只能表達我的同情與悲哀。原來只是以為這是一個吃青春飯的
ASP.NET 高階程式設計師進階之路——快捷鍵篇
引言:我們都知道快捷鍵使用得熟,將極大的提高我們的開發效率。可是我發現許多開發人員老喜歡用滑鼠去點,不擅長使用快捷鍵。 1、VS常用快捷鍵 這個我們記住開發中常用的就可以了。 F4:開啟屬性面板。
程式設計師進階之路(C、C++、Java、Python經典書籍及學習順序)
程式設計師進階之路 初級: 《計算機程式的構造和解釋》 C語言: 1.《C語言程式設計:現代方法:第2版》 2.《C Primer Plus 第五版》 3.《C程式設計語言(第2版·新版)》 4.《C和指標》 5.《C專家程式設計》 6.《C 陷阱與缺陷》 7.《資料結構C
【JVM】程式設計師進階JVM(一)——Java記憶體區域
一、前言 這篇部落格起,小編會向一個更加深層次、逼格滿滿的區域進發——JVM。 可以說JVM不是一個新鮮的東西,但是做java的都會了解JVM,都聽過JVM。有的時候我們寫的程式碼執行跟JVM也有關係。 二、JVM介紹