阿里P9架構師分享從程序員到架構師必備的技能樹 - 台部落

文章推薦指數: 80 %
投票人數:10人

阿里P9架構師分享從程序員到架構師必備的技能樹. 原創 Java高级架构师 2019-05-08 17:49. 我們來講一個故事,一位旅行者路過一個烈日下的工地,所有人都在那兒汗流浹背 ... 請輸入正確的登錄賬號或密碼 註冊 忘記密碼 首頁 java 正文 阿里P9架構師分享從程序員到架構師必備的技能樹 原創 Java高级架构师 2019-05-0817:49 我們來講一個故事,一位旅行者路過一個烈日下的工地,所有人都在那兒汗流浹背地搬磚。

旅行者問第一個人在幹什麼,那人頭也沒擡地回答:“我在搬磚。

” 旅行者問第二個人在幹什麼,這個匆匆擡起頭認真地說:“我在砌牆。

” 旅行者問第三個人在幹什麼的時候,那個人臉上充滿了光彩,很自信地說:“我在蓋聖瑪利亞大教堂。

”這個故事是不是像極了我們從事軟件開發工作的不同階段的不同狀態。

每當聽到從程序員到架構師的書或者文章時,我們總是充滿好奇,想從其中獲取一些觀點亦或是技能點,接下來我們就詳細講講一下,如何從程序員走向架構師。

首先我們定一個基準點:架構師只是功底深厚的程序員,千萬不要成爲不會寫代碼的架構師。

架構師應該是立足於技術和業務之間的中間角色或者平衡點,在針對業務深刻理解的基礎上,針對業務中存在諸多變數,挑選適合的技術架構和技術方案。

可以這樣說,一個架構師工作的好壞決定了整個開發項目的成敗。

開篇的基準點:架構師只是功底深厚的程序員; 程序員從初級、中級、高級再到架構師,是一個不斷經驗積累的過程,但是在這過程中我們常常很迷茫,不僅僅是面對技術繁雜的無力感,更重要的是因爲長期埋沒於代碼世界的浩大的分工體系中,無法看清從業務到系統架構的價值鏈條,無法清楚定位自己在分工體系的位置,處理不好自身與技術、業務的關係所致。

所以在程序員生涯中除了技術實力以外,其它軟實力也不容忽視。

如:主動學習、積累經驗、控制注意力、超越自我。

卓越的程序員 對於一個卓越的程序員來說,編程技能毋庸置疑是很重要的。

但是,除了基本的編程開發能力,其他方面的能力也是體現一個程序員的能力的很重要因素。

比如,問題排查能力、線上運維能力、項目管理能力、協調溝通能力等。

我們先看IT市場對於一個不同階段的程序員的要求: 初級開發工程師 職位要求 綜述:主動性,積極主動,能夠主動了解相關業務需求,在上級的領導和監督下定期完成量化的工作要求; 項目管理:不需要項目管理的能力,具備管理簡單模塊開發任務的時間點。

開發語言技能及架構能力: 能獨立處理和解決所負責的任務; 根據開發進度和任務分配,完成相應模塊軟件的設計、開發、編程任務; 進行程序單元、功能的測試,查出軟件存在的缺陷並保證其質量; 業務理解:根據產品需求PRD理解簡單模塊的業務流程,根據業務流程書寫相應的開發流程,能夠根據自己的理解評估模塊開發的時間點。

影響:能影響同級開發人員,得到項目組認可。

中級開發工程師 職位要求 綜述:獨立性,根據項目具體要求、承擔開發任務,按計劃完成任務目標。

項目管理:具備有一定初級難度的項目(如鏈路較短\模塊複雜較低\風險較小\發佈週期不緊)的PM的經驗和能力。

開發語言技能及架構能力: 理解產品文檔,參與需求評審、需求分析、系統設計; 負責確保項目的進度和質量; 整理和提交相關設計文檔,對負責的功能模塊有自測習慣; 對所負責的模塊有維護責任,有問題及時解決。

業務理解:熟悉自己負責的業務模塊,對業務模塊的流程有獨立的思考,產品設計時能給出合理有效的方案建議; 影響: 能影響項目的成員,是團隊內公認的主力成員之一; 加分項:有良好的分享習慣。

高級開發工程師 職位要求 綜述:自主性,獨當一面,能獨立主導和推動項目及任務,在專業領域具備輔導他人的能力 項目管理:具備有一定中等複雜度的項目(如鏈路較長、模塊複雜度較高、風險較大、發佈週期較緊、技術驅動等)的PM經驗和能力。

開發語言技能及架構能力: 能獨立解決問題,能夠負責重要業務模塊的需求分析及設計實現。

熟悉設計原則,能夠在日常編碼工作中恰當使用,優化原有設計(有實例支撐); 熟悉編程語言、編碼規範、安全規範,具備性能意識,代碼具備高可讀性; 瞭解常用框架背後的原理。

業務理解: 熟悉自己直接負責的業務,對業務產品具有獨立溝通,完善業務需求;並識別方案的風險能力;關注自己參與項目的業務數據; 能夠在所負責的業務及產品上有獨立的見解,能提出合理的建議,更有效的解決業務問題; 影響: 影響項目組或產品線的成員,是項目組或產品線公認的主力人員;範圍:團隊內。

加分項:具備輔導他人的能力和技能,有良好的分享習慣。

根據上面的招聘需求,我們來看看作爲一個開發工程師從初級到架構師,需要哪些技能和非技能的積累,下面我們就從技能和非技能來總結。

一、技術技能樹 二、業務自測 一般的研發流程 在上面職級要求中,對於初級開發工程師的要求就是得到項目組的認可,如何得到項目組的認可呢?不管哪個職級的公司成員,首先要對自己做出的事情負責,上面的流程中發現一個問題,功能開發結束提測後,測試成員進行測試的時候,發現功能不能正常運行,無法開展測試工作。

這自然是不合理的,會影響測試成員對研發成員的信任、還會影響測試成員的工作積極性,信任就類似刷信用卡,當你的信用值逐次降低,其他成員就很難相信你,演化到最後就是不願意和你合作,他們認爲你是一個不靠譜的人。

當然這個問題很容易解決,只要研發這個環節中增加自測流程即可。

優化後流程 關於研發自測這個環節爲什麼我們開始沒有加上?這是因爲,我們一般認爲研發人員對自己開發的模塊進行自測,是應該的,用研發術語來講是默認的,不需要另行強調。

程序猿的工作是團隊協作中的一環,和環上的所有人一樣,都應該對自己所做的工作負責,這樣對於環上的其他人才是公平的、有效的,團隊的整體效率才能提高。

爲了讓研發成員能進行測試,我們還有些問題需要解決: 測試用例範圍問題 被測試環境和測試執行環境的複雜性問題 測試數據準備的問題 測試執行與集成問題 失敗測試用例歸屬問題 這些問題我們就不展開說了,但是業務自測是作爲一個開發工程師必要的職業素養。

三、解決問題能力 解決問題能力不是天生的,自然得靠後天的經驗積累。

我們工作中會遇到各種各樣的問題,比如需要去跟蹤調試產品所產生的bug,又比如說使用第三方組件所遇到的一些問題,再比如說使用一些插件或者IDE所產生的一些編譯問題。

這個時候第一反應不是去別人那裏尋求幫助,而是自己嘗試去看去解決問題。

當遇到阻塞性問題的時候,需要立即排查並處理。

由於是線上的環境,我們在排查問題會有一定的難度,但依舊有一定的方法可尋,一般按照如下步驟進行。

日誌查看 從日誌中查看到報錯的信息,依據這些信息進行問題排查,比如什麼時間、什麼人、操作了什麼、觸發了什麼、產生了什麼結果。

代碼檢查 在日誌無法排查問題的情況下,需要通過代碼來定位。

這需要對代碼有一定的熟悉程度,可以知道用戶的操作是由哪裏的代碼執行的,然後對該塊代碼進行檢查。

代碼檢查的時候需要着重檢查一些邏輯分支語句,同時可以藉助一些工具,例如:FindBugs,AlibabaCodeGuidelines等。

另外,還需要關注一下觸發器之類的隱蔽代碼。

遠程調試 由於代碼是靜態的,而代碼執行是動態的。

靜態代碼的檢查可能並不能檢查出問題,而需要通過線上的環境、數據一併進行檢查。

這時,可以在不影響線上用戶使用的情況下,遠程斷點調試程序。

本地調試 有的系統可能並不方便進行遠程調試,那麼可以嘗試把線上的全部數據(或者關鍵歷史數據)拷貝下來,在本地環境使用線上環境的數據庫,進行調試。

斷點調試是比較直觀的一種檢查錯誤的方式,通過異常信息的日誌,能確定到指定的代碼行,並結合線上的數據,很容易發現問題。

四、學會提問 問問題的能力是一個人的修養,學會提問是一個人成長的必經之路。

尤其是軟件行業的從業者,要保持對技術的鑽研精神,不做伸手黨,問出水平,問出修養! 有禮貌 畢竟誰也沒有義務幫你解決; 問對的人 選擇相關主題的板塊,不要多次發佈相同問題! 主題清晰 問了讓別人不用看描述就知道問題類型和背景,github一般都會對issue做tag標記的。

較差的標題:保存,老實提示系統異常。

較好的標題:在firefox中保存時導致系統異常的兼容性問題求解。

描述要準確 描述機器環境(os,機器配置,版本信息);描述自己的排查方向和相關現象;描述問題的觸發背景(升級了什麼組件/改了什麼);提供復現方法。

描述要客觀 不要加主觀判斷; 描述目標 不是中間的某個步驟step;可能你的方向偏了,實現目標根本就不需要實現這個step 想提高自己解決問題的能力,首先得學會如何提問。

給自己提問或者向別人尋求幫助時。

五、總結 我們日常遇到的問題就類似打怪升級一樣,你解決的問題越多你的能力就會越強,經驗自然也會越來越豐富。

但人的腦袋不可能記住所有事情,將自己遇到的問題沉澱下來對以後自己查閱也有很大的幫助,就不必每次都要去Google,自己也能夠有一個索引庫。

經常自己總結,也能夠提高自己的寫作能力,以後寫文章、ppt總結提煉自然也難不倒你了,也是一舉兩得的事情。

還有你以後求職面試過程中,提及自己這方面的能力的時候,也能夠爲自己面試加分哦。

一個人能產生多大價值取決於他的影響力有多大,之前看到有人在我們內部論壇提問說提高影響力有什麼用?你看看馬雲就能知道有什麼用了,他說一句話比你說上百句都管用,畢竟人家的影響力在那裏。

我們程序員做知識經驗的傳承,不僅能夠提高你自身的影響力,還能夠幫助你提升邏輯思維能力,因爲你需要去總結提煉,你需要將問題梳理清楚,並且要將知識點描述得能夠讓別人更容易接受。

你的經驗雖然是你自己的,但如果你的經驗能夠幫助到別人,那你的價值就不一樣了。

讀者福利 分享免費學習資料 針對於Java程序員,我這邊準備免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料) 爲什麼某些人會一直比你優秀,是因爲他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜!希望讀到這的您能點個小贊和關注下我,以後還會更新技術乾貨,謝謝您的支持! 資料領取方式:加入Java技術交流羣963944895,點擊加入羣聊,私信管理員即可免費領取 如何成爲一個有逼格的Java架構師 怎麼提高代碼質量?——來自阿里P8架構師的研發經驗總結 阿里P8分享Java架構師的學習路線,第六點尤爲重要 每個Java開發者應該知道的八個工具 想面試Java架構師?這些最基本的東西你都會了嗎? 畫個圖來找你的核心競爭力,變中年危機爲加油站 哪有什麼中年危機,不過是把定目標當成了有計劃 被裁員不是寒冬重點,重點是怎麼破解職業瓶頸 發表評論 登录 所有評論 還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布. 相關文章 java線程併發庫   ThreadLocal的使用,,,實際上相當於維護了一個Map,其中以鍵值對的形式,存儲了某一個數據被多個線程訪問所對應的值。

當然這個數據只能有 xinyetonghua 2020-07-0812:36:33 分佈式系統各個節點狀態如何同步?淺談一下 寫在前面:2020年面試必備的Java後端進階面試題總結了一份複習指南在Github上,內容詳細,圖文並茂,有需要學習的朋友可以Star一下! GitHub地址:https://github.com/abel-max/Java-S 毛发旺盛的程序员 2020-07-0812:27:30 ZooKeeper一致性協議ZAB原理,瞭解一下 一致性協議有很多種,比如Paxos,Raft,2PC,3PC等等,在這講一種協議,ZAB協議,該協議應該是所有一致性協議中生產環境中應用最多的了。

爲什麼?因爲它是爲Zookeeper設計的分佈式一致性協議! 1.什麼是 毛发旺盛的程序员 2020-07-0812:27:20 Spring中Transactional失效的解決方案,讓我們一起探討一下 寫在前面:2020年面試必備的Java後端進階面試題總結了一份複習指南在Github上,內容詳細,圖文並茂,有需要學習的朋友可以Star一下! GitHub地址:https://github.com/abel-max/Java-S 毛发旺盛的程序员 2020-07-0812:27:20 太狠了,Spring全家桶筆記,一站式通關全攻略,已入職某廠漲薪18K Spring早已成爲Java後端開發事實上的行業標準,無數的公司選擇Spring作爲基礎的開發框架,大部分Java後端程序員在日常工作中也會接觸到Spring,因此,如何用好Spring,也就成爲Java 毛发旺盛的程序员 2020-07-0812:27:20 java中的NAN和INFINITYjava中的NAN和INFINITY     java中的NAN和INFINITY   java浮點數運算中有兩個特殊的情況:NAN、INFINITY。

1、INFINITY: 在浮點數運算時,有時我們會遇到除數爲0的情況,那java是如何解決的呢? 我們知道,在整型運算中 a318013800 2021-11-2813:09:28 【Java小白菜入門筆記2.2】常用的類和方法 Array Array含有sort、fill、equals、BinarySearch等方法 importjava.util.Arrays; importjava.util.Random; publicclassArra 江户川柯壮 2020-07-0812:39:29 springboot增量打包更新--靜態資源分離打包 springboot部署打包爲jar,一般都是全量打包,jar包的大小通常都是超過100M的,並且在進行一般的頁面html微調、js修改、img替換、css樣式修改時也需要重新打包進行部署;每次微小的調整都需要重新打包就太煩了,一 CNOYG 2020-07-0812:39:29 增加FastDfs多文件存儲路徑 項目需要增加聊天會話功能,涉及到上傳語音圖片等信息。

考慮新增一個目錄,所有相關文件存在一個相同的目錄中。

因此需要對原項目增加一個存儲的路徑。

以前的項目因爲只有一個路徑,且已經運行中。

走了些彎路,僅此記錄操作過程。

nginxversion pengdayong77 2020-07-0812:37:23 JSONArray指定日期的反序列化  JSONArray序列化日期最初用到,這個是全局設置,會有風險。

  String[]dateFormats=newString[]{"yyyyMMdd"};           JSONUtils.getM pengdayong77 2020-07-0812:37:23 java緩存對象,使之不需要每次都從數據庫中獲取,以提高程序性能 直接上源碼,定義一個抽象類,必須實現get方法。

該方法是用來獲取需要緩存的對象的。

  importjava.util.HashMap; importjava.util.Map; /** *用於從數據庫中獲取相應值的緩存類 * pengdayong77 2020-07-0812:37:23 類加載和類實例化 Java程序中對類的使用方式分爲兩類:主動使用和被動使用 主動使用: 創建類的實例 訪問某個類或接口的靜態變量,或者對該靜態變量賦值 調用類的靜態方法 反射 初始化一個類的子類 java虛擬機啓動時被標明爲啓動類的類 從JDK 吃酒忘情殇 2020-07-0812:36:21 大數據入門(七)win10上eclipse使用Hadoop的配置 目錄工具eclipse的Hadoop環境配置參考 系列: 大數據入門(一)環境搭建,VMware15+CentOS8.1配置 https://blog.csdn.net/qq_34391511/article/details/1 33Audrey 2020-07-0812:35:23 Java動態綁定機制經典案列理解 如題,直接帶入案例進行理解Java的動態綁定機制,不多說直接上代碼了。

packageone; publicclassJavaTest{ publicstaticvoidmain(String[]args 柘月十七 2020-07-0812:33:16 阿里年薪破百架構師推薦:鳥哥的Linux私房菜,搭配面試題,真香 在Linux實操的過程中,你是否有過這些疑問: 如何提取日誌中含有關鍵字的指定行,上一行或上幾行? ln做了符號鏈接,對符號鏈接進行權限修改,原文件是否會受到影響? Shell腳本里有很多特殊符號,到底該怎麼用?網上流傳的 毛发旺盛的程序员 2020-07-0812:27:30 J Java高级架构师 24小時熱門文章 最新文章 我們分析了10萬條泄露密碼,發現了這樣的套路 程序員常說的幾個概念,剽一遍你也能懂程序員常說的幾個概念,剽一遍你也能懂 作爲一名程序員,想問問大佬們都是如何進的大廠? 分佈式系統解耦模式:用事件代表時間觸發Cron計劃任務 互聯網架構實踐心得S1E9:架構評審一百問和設計文檔五要素 最新評論文章 加瀨ziq888晴子外約約粉紅白虎一線鮑魚無套內射消費加送原味內衣褲官網:www.sexline998.com ios退款自己親自使用過100%有效進來看看吧 七絕.絕句 七絕.春詞 健康減壓的12個好方法 最近正在研究Liferayportal各種問題-- AdvantagesofgettingassistancefromonlineassignmenthelpAustralia



請為這篇文章評分?