本文章爲《不止代碼》閱讀筆記,本書能夠在阿里技術公衆號中找到,這是一本大牛分享經驗的書,感謝大牛們的分享~前端
1、如何快速成長爲技術大牛 -- 李運華nginx
Do More git
1)熟悉更多的業務,無論是否是你負責的;熟悉更多代碼,無論是否是你寫的程序員
好處:* 需求分析時更加準確,能在需求階段識別風險、影響、難點github
* 處理問題更快,可以快速的判斷問題可能緣由並進行排查處理web
* 方案設計更全面。可以設計出更好的方案面試
2)熟悉端到端。好比你負責web後端開發,可是實際上用戶發起http請求,經過不少步驟到達服務器(例如瀏覽器緩存、DNS、nginx等),服務器通常又會通過不少處理纔到你寫的那部分代碼(路由、權限等),掌握整個流程中的不少系統或者步驟,對綜合水平有很大做用算法
* 方案設計、線上故障處理都須要綜合技術水平spring
3)自學。例如垃圾回收,調優,網絡編程等數據庫
Do Better
例如:* 重複代碼太多,是否能夠引入設計模式?
* 系統性能通常,能否進行優化?
* 目前是單機,若是作成雙機是否更好?
* 版本開發質量不高,是否引入高效的單元測試和集成測試方案?
* 目前的系統太龐大,是否能夠經過重構和解耦改爲三個系統?
* 阿里中間件有一些系統感受咱們也能夠用,是否能夠引入?
Do exercise
1)Learning 要注意系統化,例如JVM原理、Java編程、網絡編程、HTTP協議等等,建議先完整的看完一本書全面的瞭解,而後經過google、視頻、博客有針對性的查有疑問的地方或者一些技巧
2)Try 本身去嘗試搭建一些模擬環境,本身寫一些測試程序
3)Teaching 通過Learning和Trying,能掌握70%左右,但要真正掌握,必定要作到可以跟別人講清楚。
2、畢業 3 年,爲什麼技術能力相差愈來愈大? -- 蟄劍
做者認爲 能力 = 知識 + 邏輯
系統化的知識是在關鍵問題的點的清晰理解的基礎上,逐漸聯繫造成的。
好的邏輯是在知識的實踐和覆盤中創建的。
3、程序員吃的是青春飯?本質上取決於...... -- 毗盧
程序員職業發展分兩個階段:
第一階段:大學畢業 3 到 5 年,主要以學習、積累爲主
* 基礎的Java知識:《Java編程思想》、《Effective Java》
* 高質量代碼進階知識:《重構:改善既有代碼的設計》、《代碼大全》、《編程珠璣》
* 經常使用的主流框架:好比 SSH 相關的《Spring實戰》、《Spring Boot 實戰》、《Hibernate實戰(第2版)》、Apache官網、Spring官網、Hibnate官網、StackOverflow
* 系統設計與算法知識:《系統分析與設計方法》、《設計模式》、《需求分析與系統設計》、《面向對象分析與設計》、《UML用戶指南》、《算法導論》
* 其餘知識:好比數據庫調優、緩存框架、NoSQL數據庫、日誌框架等等
第二階段:大學畢業 5 到10 年 ,成爲團隊貢獻者,而非我的貢獻者
* 對所負責領域的業務特色、發展趨勢、友商競爭分析有很好的洞察,知道業務領域的客戶羣體及其需求,並瞭解其痛點。此時須要學習《資訊的奧祕》、《探索需求》、《系統化思惟導論》、《成爲技術領導者:掌握全面解決問題的方法》。
* 瞭解客戶的需求、企業架構、業務知識,清楚規劃的產品、服務,此時須要學習一些TOGAF、NGOSS、ITIL等業務理論以及業務知識。
* 能清晰且有邏輯性的進行表達與溝通,能將本身對於市場的洞察轉換成業務規劃,爭取到老闆的贊成,包括資金、人力資源等。此時須要學習《金字塔原理》、《博弈論》、《影響力》等。
* 能將業務趨勢、客戶痛點進行業務建模。此時須要學習《領域驅動設計:軟件核心複雜性應對之道》、《實現領域驅動設計》、《企業應用架構模式》、《恰如其分的軟件架構》等。
* 須要具有軟件項目管理的能力,能帶領團隊作技術方案設計、接口設計以及編碼實現等。此時須要學習《PMBOK指南》、《敏捷軟件開發》、《人月神話》、《程序開發心理學》。
* 對於有國際化要求的公司,須要學習英語。
* 須要一個好身體,常常鍛鍊。
* 積極面對團隊磨合的挑戰、技術方案的政治、平臺優先 or 業務優先的博弈、低落的團隊氛圍、我的的低估等等。
4、技術變化那麼快,程序員如何作到不被淘汰? -- 空融
業務、技術與軟件系統的價值鏈:業務就是指某種有目的的工做或者工做項目,業務的目的就是解決人類社會與吃喝住行洗洗相關的領域問題,包括物質的需求和精神的需求,使開展業務活動的主題和受衆都能獲得利益。通俗的講業務就是用戶的痛點,是業務提供方(公司)的盈利點。而技術是解決問題的工具和手段。軟件系統的價值是爲了解決業務問題。
公司依靠軟件系統提供業務服務而創造價值,程序員則是經過構建並持續演進軟件系統服務能力以及業務功能以支撐公司業務發展而創造價值。
軟件系統體現自身價值的方向:
* 業務領域與功能
* 服務能力:系統正確性(程序可以正確標書業務流程,沒有bug)
可用性(能夠 7 * 24 小時 * 365 不間歇工做)
大規模(高併發,高吞吐量)
架構:將人員、技術等資源組織起來以解決業務問題,支撐業務增加的一種活動。具體可從如下角度看:
組織業務:經過探索和研究業務領域的知識,構建自身看待業務的「世界觀」。基於這種認識拆分業務聲明週期,確立業務邊界,構建出了一套解決特定業務問題的領域模型,而且確認模型之間、領域之間的關係與寫做方式,完成裏對業務領域內的要素的組織工做。
組織技術:選用合適的框架、中間件、編程語言、網絡協議等技術工具依據以前設計方案組織起來次年改爲一套軟件系統方案。
組織人員:根據人員按不一樣工種、不一樣職責、不一樣系統進行組織,肯定這些人員之間的協做方式,並關注這個組織系統可否運做良比如如溝通是否順暢、產出是否達到要求、可否按時間完成等。
組織全局,對外輸出:須要關注運行過程當中產生的數據好比業務成功率,系統運行資源佔用數據、用戶反饋信息、業務增加狀況等。
成本與收益:能夠基於成本與收益的關係去思考本身的每一項技能的價值。好比下降軟件構建成本的相關工程技術:項目管理、敏捷開發、單元測試、持續集成、持續構建、版本管理等。
架構目標須要適應業務的發展:仔細衡量正確性、大規模、可用性三者的關係。確保系統是複覈設計需求的,保證系統達到可接受的正確性,爲後續能過快前進打下基礎,爲企業下降構建成本。
正確看待分工:分工是有價值的,將軟件系統生命週期進行拆分(好比開發生命週期、測試生命週期、測試生命週期、用戶訪問生命週期、軟件運維生命週期等),他使得複雜昂貴的任務能夠被簡單、並行、可替換的流水線方式解決。但同時也要關注總體價值,避免增長軟件實施成本。
從價值觸發 - 找尋學習與工做的新思路
明確自身的業務相關主體:找到工做的協做關係網內的業務方和客戶方,進而找到客戶方中找到離本身最近的業務價值點,從也無妨中挖掘更多的資源。甚至能夠按這個思路順着網絡向上或向下挖掘價值鏈條,整合更多的上下游資源以實現更大的價值。
向前一步,爲更大的價值負責:試着轉變思惟,從架構師的角度思考價值問題,看可否將技術貫穿到業務、到用戶、到最終的價值去。
像架構師同樣思考,用價值找尋重心:向架構師那樣全局性思考,把遇到問題進行拆分,把學習到的事務串聯起來,努力構成完整的價值鏈條。
學會鏈接,構建體系:咱們應當樹立自身的知識體系以吸取融合新知識,將鼓勵的概念鏈接起來,造成自身的價值鏈條。
5、加班越久故障越多,如何跳出程序員的惡性循環? -- 冠楠
問題:團隊負載較重的狀況下回出現質量不高的狀況
解決方案:
需求細化:拆分紅最小可交付產出
隨時擁抱用戶:迭代式產出,交付即驗收
重點跟進質量管理和運營
盡全力保證線上發佈成功率
評估的標準:
需求的吞吐量:團隊指定時間內完成的需求數。
需求的平均完成時長
新增缺陷的數量
缺陷平均解決時長
線上發佈的成功率
缺陷的reopen率:缺陷唄reopen的次數與缺陷書目之比
6、如何在阿里技術面試中脫穎而出? -- 宗心
招人的衡量標準:
技能:工做項目經驗,以及解決疑難問題的能力。
潛力:對計算機相關的專業的只是體系是否是完整,基礎是否是紮實,平時是否是喜歡鑽研。
軟實力:包含了性格、執行力、領導力等方方面面,它表明了候選人是否能快速融入團隊,拿到結果,帶領團隊攻城拔寨,激勵和影響身邊的人變的更加優秀等等。
對比標杆:是否比團隊中同一等級中50%的同窗優秀。
面試的方法:
面試不要作的事情:問一些知道性的問題(百度)
問一些特別複雜的問題,好比特別複雜的算法
問一些假設性的問題假設你參加了這個項目
面試應該作的事:
問已經發生的事
問解題思路:好比說,不少同窗說本身作過架構,而後都會講本身作了一個解耦和分層的框架,其實這類框架iOS不少,外部github上就有各類方案。在阿里內部手淘糟踐作的bundle拆分時沉澱的容器規則,天貓開源出去的beeHive,閒魚內部的Xframework,抑或是服務端的spring mvc,其實都實現了IOC,但實現和思路上都有一些差別,到底爲何這麼作是有區別的,這裏面就能夠看出知識廣度,總結和思辨能力,在關鍵路徑上的技術判斷。
少問多聽:儘可能讓應試者本身陳述,而後以學習和交流的心態對陳述中存疑的地方再進行發問。
STAR原則:
處境:在什麼樣的環境下
任務:接到了什麼樣的任務
行動:而後具體怎麼落地
結果:拿到了什麼結果
鑑別方式:
更多的關心 What/How/Why :作了什麼事情,怎麼作,爲何這麼作
細節!細節!細節!
市場須要什麼樣的技術人:
經驗豐富,只是體系完整:經驗能解決實際的問題,另外知識體系可讓你在遇到新的問題時觸類旁通。找到身邊的標杆,向更優秀的同窗學習。
保持良好的習慣,不忘總結和提高:不積跬步無以致千里,貴在堅持積累。好比每週寫週報的時候,想本身這一週到底收穫什麼,最近有研究什麼新的技術或者看到什麼有趣的文章沒有。
7、使用開源項目的正確姿式,血與淚的總結 -- 李運華
軟件開發領域流行的原則:DRY,Don't repeat yourself-不要重複造輪子
選:如何選擇一個開源項目?
聚焦是否知足業務:過早優化是萬惡之源--《UNIX編程哲學》
聚焦是否成熟:1>版本號
2>使用的公司數量
3>社區活躍度:看看社區是否活躍,發帖數,回覆數,問題處理速度等
聚焦運維能力:1>開源方案日誌是否齊全
2>開源方案是否有命令行、管理控制檯等維護工具,可以看到系統運行時的狀況
3>開源方案是否有故障檢測和回覆的能力,例如告警、倒換等。
用:如何使用開源方案?
深刻研究,仔細測試:1>通讀開源項目的設計文檔或者白皮書,瞭解其設計原理
2>覈對每一個配置項的做用和影響,是被出關鍵配置項
3>進行多種場景的性能測試
4>進行壓力測試,連續跑幾天,觀察cpu、內存、磁盤io等指標波動
5>進行故障測試:kill,斷電,拔網線,重啓100次以上、倒換等
當心應用,灰度發佈
作好應急,以防萬一:例如,若是要用MongoDB或者Redis,能夠用MySQL作備份存儲
改:如何基於開源項目作二次開發?
保持純潔,加以包裝:建議不要改動原系統,而是要開發輔助系統:監控,報警,負載均衡,管理等。
發明你要的輪子
8、前端工程師的將來在哪裏?--成曰 詳見文章
一、繼續分化(領域、行業、技術棧)
二、繼續融合(端技術、Web全棧技術、人工智能與端技術)
三、核心不變(計算機科學本質、軟件工程思想與實踐、程序員職業素養)
9、前端Leader如何作好團隊規劃?阿里內部培訓總結公開 -- 劍平 詳見文章
10、一位優秀前端的自我修養 -- 寒泉
能力:
編程能力:就是用代碼解決問題的能力,細分又有調試、算法、數據結構、OS原理等
架構能力:是解決代碼規模的問題,包含了一些意識,好比解耦、接口隔離,也包含人事業務創建抽象模型,也有一些常見的模式,好比經典的MVC,還有設計層面,面向對象、設計模式等等。
工程能力:是解決寫做的問題,當系統規模更大,如何保證幾個高手互相可以配合好?如何保證項目裏水平最差的人不脫後退?包括先後端解耦,模塊化,質量保證,代碼風格,等等。
創建本身的知識體系:
一、尋找線索(列表)
二、創建聯繫
三、分類(圖譜)
四、追本溯源
11、如何成爲一名頂尖的阿里架構師? -- 無葉
架構師的職責:
職責一:全局的技術規劃
職責二:統一的方法 & 規範 & 機制
職責三:完備的基礎構建
職責四:落地的規劃纔是架構
專職架構師的考覈:
考覈一:全局的技術規劃:技術規劃的好壞、全面性、前瞻性
考覈二:統一的方法 & 規範 & 機制:關注對應的產出
考覈三:完備的基礎構建:剋制跨團隊的合做(清晰邊界,共建)
考覈四:落地的規劃纔是架構:緊跟拆解的事情結合實際的組織和業務狀況做出決策
關於實施:
第一:創建「架構語言」:是指產品的業務架構,用例和領域模型;研發的應用架構,組件和時序圖;運維的部署架構等。
第二:創建「認同體」:經過技術能力、知識傳遞、領域組織等方式造成「認同體」,且在其中造成架構體系對應的人員體系。
第三:永遠作服務者:架構師存在的目的是成就研發團隊每個同窗
12、那些技術好書值得一讀再讀?這又一份經典書單 -- 阿里技術
《Effectice Software Testing》
《程序員修煉之道---從小工到專家》
《設計模式之禪》
《Spoken Language Processing:A Guide to Theory,Algorithm and System Development》
《機器學習導論》
《Reinforcement Learning:An Introduction》
《Programming Rust》
《Machine Learning:A Probalilistic Perspective》
《Architecture of a Database System》
十3、阿里技術大牛最愛的「閒書」,你看過多少? -- 阿里技術
《從優秀到卓越》
《爲何精英都是時間控》
《創新者的囧境》
《魔鬼經濟學》
《孫子兵法》
《創造天然》
《浮生六記》