程序员自我修养1:能力矩阵
生活随笔
收集整理的這篇文章主要介紹了
程序员自我修养1:能力矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序員自我修養1:能力矩陣
資料來自與網絡整理,僅供學習參考,不用于商業用途
請注意,每個級別的知識都是累積的。在 n級意味著您還了解,若低于n的水平,說明還需要努力學習,掌握
前言
程序員能力矩陣可以一定程度上反應自己當前的能力水平,同時也給自己一個努力的方向,讓自己找到要努力的方向和目標。
本文可供大家檢測自己目前所在的能力水平,同時也方便大家制定自己下一步需要努力的方向,使自己早日稱為優秀的程序員,資深專家
Part1: 計算機科學
chart1: 數據結構
1. 級別說明
- 2n(Level 0):不知道Array和LinkedList之間的區別
- n2(Level 1):能夠在實際編程任務中解釋和使用數組,鏈接列表,字典等
- n(Level 2):了解基本數據結構的空間和時間權衡,數組與鏈接列表的關系,能夠解釋如何實現哈希表并可以處理沖突,優先級隊列及其實現方式等。
- log(n)(Level 3):了解高級數據結構,例如B樹,二項式和斐波那契堆,AVL /紅黑樹,Splay樹,跳過列表,嘗試等
chart2: 算法
1. 級別說明
- 2n(Level 0):無法找到數組中數字的平均值
- n2(Level 1):基本的排序,搜索和數據結構遍歷和檢索算法
- n(Level 2):樹,圖,簡單的貪婪以及分而治之算法,能夠理解該矩陣級別的相關性
- log(n)(Level 3):能夠識別和編程動態編程解決方案,具有圖形算法的豐富知識,具有數值計算算法的豐富知識,能夠識別NP問題等
chart3: 系統編程
1. 級別說明
- 2n(Level 0):不知道什么是編譯器,鏈接器或解釋器
- n2(Level 1):基本了解編譯器,鏈接器和解釋器。了解什么是匯編代碼以及它們在硬件級別如何工作。關于虛擬內存和分頁的一些知識。
- n(Level 2):了解內核模式與用戶模式,多線程,同步原語及其實現方式,能夠讀取匯編代碼。了解網絡如何工作,了解網絡協議和套接字級別的編程。
- log(n)(Level 3):了解整個編程堆棧,硬件(CPU +內存+高速緩存+中斷+微代碼),二進制代碼,匯編,靜態和動態鏈接,編譯,解釋,JIT編譯,垃圾回收,堆,堆棧,內存尋址
Part2: 軟件工程
chart1: 源代碼版本控制
- 2n(Level 0):按日期備份文件夾
- n2(Level 1):Git / SVN等代碼管理工具初始用戶
- n(Level 2):熟練使用Git或SVN功能。知道如何分支和合并,使用修補程序設置存儲庫屬性等
- log(n)(Level 3):分布式VCS系統的知識。已經嘗試過Bzr / Mercurial / Darcs / Git
chart2: 構建自動化
- 2n(Level 0):只知道如何從IDE構建
- n2(Level 1):知道如何從命令行構建系統
- n(Level 2):可以設置腳本來構建基本系統
- log(n)(Level 3):可以設置腳本來構建系統,還可以建立文檔,安裝程序,生成發行說明并在源代碼管理中標記代碼
chart3: 自動化測試
- 2n(Level 0):認為所有測試都是測試人員的工作
- n2(Level 1):編寫了自動化的單元測試,并針對要編寫的代碼提出了良好的單元測試用例
- n(Level 2):以TDD方式編寫代碼
- log(n)(Level 3):了解并能夠設置自動化的功能,負載/性能和UI測試
Part3: 程序設計
chart1: 問題分解
- 2n(Level 0):只有帶有復制粘貼的直線代碼才能重復使用
- n2(Level 1):能夠將問題分解為多種功能
- n(Level 2):能夠提出解決整個問題的可重用功能/對象
- log(n)(Level 3):使用適當的數據結構和算法,并提供通用/面向對象的代碼,這些代碼封裝了可能會發生變化的問題的各個方面
chart2: 系統分解
- 2n(Level 0):無法在單個文件/類的層次上思考
- n2(Level 1):只要位于相同的平臺/技術中,便能夠打破問題空間并設計解決方案
- n(Level 2):能夠設計跨越多種技術/平臺的系統
- log(n)(Level 3):能夠可視化和設計具有多個產品線并與外部系統集成的復雜系統。還應該能夠設計運營支持系統,例如監視,報告,故障轉移等
chart3: 協作交流
- 2n(Level 0):無法向同伴表達想法/想法。拼寫和語法不佳。
- n2(Level 1):同行可以理解所講的內容。良好的拼寫和語法
- n(Level 2):能夠與同齡人有效溝通
- log(n)(Level 3):能夠以明確的方式理解和交流思想/設計/思想/規范,并根據上下文調整交流
chart4: 文件中的代碼組織
- 2n(Level 0):文件中沒有組織的證據
- n2(Level 1):代碼按邏輯或可訪問性分組
- n(Level 2):代碼分為多個區域,并通過引用其他源文件得到了很好的注釋
- log(n)(Level 3):文件具有許可證標頭,摘要,注釋良好,一致的空格使用情況。該文件應該看起來很漂亮
chart5: 跨文件的代碼組織
- 2n(Level 0):不考慮跨文件組織代碼
- n2(Level 1):相關文件被分組到一個文件夾中
- n(Level 2):每個物理文件都有獨特的用途,例如一種類定義,一種功能實現等。
- log(n)(Level 3):物理級別的代碼組織與設計緊密匹配,并且查看文件名和文件夾分布可深入了解設計
chart6: 源樹組織
- 2n(Level 0):一切都在一個文件夾中
- n2(Level 1):將代碼基本分離到邏輯文件夾中
- n(Level 2):沒有循環依賴項,二進制文件,庫,文檔,內部版本,第三方代碼都組織到適當的文件夾中
- log(n)(Level 3):源樹的物理布局與邏輯層次結構和組織匹配。目錄名稱和組織提供了對系統設計的見解
chart7: 代碼可讀性
- 2n(Level 0):單音節名稱
- n2(Level 1):文件,變量類,方法等的好名字
- n(Level 2):沒有長函數,注釋說明異常代碼,錯誤修復,代碼假設
- log(n)(Level 3):使用斷言來驗證代碼假設,代碼自然地流過-沒有條件或方法的深層嵌套
chart8: 防御性代碼
- 2n(Level 0):不懂這個概念
- n2(Level 1):檢查所有參數并在代碼中聲明關鍵假設
- n(Level 2):確保檢查返回值,并檢查可能失敗的代碼周圍的異常
- log(n)(Level 3):有自己的庫來幫助進行防御性編碼,編寫模擬故障的單元測試
chart9: 錯誤處理
- 2n(Level 0):只編碼良好的情況
- n2(Level 1):圍繞可能引發異常/生成錯誤的代碼進行基本錯誤處理
- n(Level 2):確保錯誤/異常使程序保持良好狀態,正確清理了資源,連接和內存
- log(n)(Level 3):在發現可能的異常之前,在所有代碼層中維護一致的異常處理策略的代碼,以及整個系統異常處理的準則
chart10: IDE
- 2n(Level 0):通常使用IDE進行文本編輯
- n2(Level 1):知道他們圍繞界面的方式,能夠通過菜單有效地使用IDE
- n(Level 2):了解大多數常用操作的鍵盤快捷鍵
- log(n)(Level 3):編寫了自定義宏
chart11: API
- 2n(Level 0):需要經常查找文檔
- n2(Level 1):內存中使用最頻繁的API
- n(Level 2):豐富而深入的API知識
- log(n)(Level 3):編寫了位于API頂部的庫,以簡化常用任務并填補API中的空白
chart12: 構架
- 2n(Level 0):尚未在核心平臺之外使用任何框架
- n2(Level 1):聽說過但未使用該平臺的流行框架
- n(Level 2):已經以一種專業的身份使用了多個框架,并且對框架的習慣非常熟悉
- log(n)(Level 3):框架的作者
chart13: 要求
- 2n(Level 0):將給定的要求和代碼規范化
- n2(Level 1):在規范中提出有關遺漏案件的問題
- n(Level 2):了解完整圖片并提出需要指定的整個區域
- log(n)(Level 3):能夠根據經驗為給定要求提出更好的替代方案和流程
chart14: 腳本編寫
- 2n(Level 0):不懂腳本工具
- n2(Level 1):批處理文件/ shell腳本
- n(Level 2):Perl / Python / Ruby / VBScript / Powershell
- log(n)(Level 3):編寫并發布了可重用的代碼
chart15: 數據庫
- 2n(Level 0):認為Excel是數據庫
- n2(Level 1):了解基本的數據庫概念,規范化,ACID,事務并可以編寫簡單的選擇
- n(Level 2):能夠設計良好且規范化的數據庫架構,同時牢記必須運行的查詢,熟練使用視圖,存儲過程,觸發器和用戶定義的類型。知道聚簇索引和非聚簇索引之間的區別。熟練使用ORM工具
- log(n)(Level 3):可以進行基本的數據庫管理,性能優化,索引優化,編寫高級選擇查詢,能夠用關系sql代替游標用法,了解如何在內部存儲數據,了解如何在內部存儲索引,了解如何進行鏡像,復制等。了解兩階段提交的工作方式
Part4: 經驗
chart1: 具有專業經驗的語言
- 2n(Level 0):命令式或面向對象
- n2(Level 1):命令式,面向對象和聲明式(SQL),如果他們了解靜態類型與動態類型,弱類型與強類型以及靜態推斷的類型,則將獲得額外的好處
- n(Level 2):如果他們了解懶惰的評估,計算,連續性,則可以提供實用的額外獎勵
- log(n)(Level 3):并發(Erlang,Oz)和邏輯(序言)
chart2: 具有專業經驗的平臺
- 2n(Level 0):1 年
- n2(Level 1):2-3 年
- n(Level 2):4-5 年
- log(n)(Level 3):6 年+
chart3: 多年專業經驗
- 2n(Level 0):1 年
- n2(Level 1):2-5 年
- n(Level 2):6-9 年
- log(n)(Level 3):10 年+
chart4: 領域知識
- 2n(Level 0):不了解領域
- n2(Level 1):已在域中開發至少一種產品
- n(Level 2):在同一個域中從事多種產品的研究
- log(n)(Level 3):領域專家。在領域中設計并實施了多種產品/解決方案。精通標準術語,該領域中使用的協議
Part5: 知識
chart1: 工具知識
- 2n(Level 0):限于主要IDE(VS.Net,Eclipse等)
- n2(Level 1):了解流行和標準工具的一些替代方法
- n(Level 2):對編輯器,調試器,IDE,開源替代品等有很好的了解。知道Scott Hanselman的電動工具清單中大多數工具的人。已使用ORM工具
- log(n)(Level 3):實際編寫了工具和腳本,如果已經發布,則可以增加獎勵
chart2: 接觸到的語言
- 2n(Level 0):命令式或面向對象
- n2(Level 1):命令式,面向對象和聲明式(SQL),如果他們了解靜態類型與動態類型,弱類型與強類型以及靜態推斷的類型,則將獲得額外的好處
- n(Level 2):如果他們了解懶惰的評估,計算,連續性,則可以提供實用的額外獎勵
- log(n)(Level 3):并發(Erlang,Oz)和邏輯(序言)
chart3: 代碼庫知識
- 2n(Level 0):從未看過代碼庫
- n2(Level 1):代碼布局的基本知識以及如何構建系統
- n(Level 2):良好的代碼基礎知識,已經實現了一些錯誤修復,也許還有一些小功能
- log(n)(Level 3):已在代碼庫中實現了多個重要功能,并且可以輕松可視化大多數功能或錯誤修復所需的更改
chart4: 即將到來的技術知識
- 2n(Level 0):尚未聽說即將推出的技術
- n2(Level 1):聽說過該領域即將出現的技術
- n(Level 2):已下載alpha預覽/ CTP / beta并閱讀了一些文章/手冊
- log(n)(Level 3):玩過預覽,并實際制作了一些東西,并且作為獎勵與其他人分享
chart5: 平臺內部
- 2n(Level 0):零知識平臺內部
- n2(Level 1):具有平臺內部工作原理的基本知識
- n(Level 2):對平臺內部有深入的了解,可以可視化平臺如何采用程序并將其轉換為可執行代碼
- log(n)(Level 3):具有編寫的工具來增強或提供有關平臺內部的信息。例如反匯編器,反編譯器,調試器
chart6: books
- 2n(Level 0):釋放系列,21天系列,24小時系列,假人系列
- n2(Level 1):代碼完成,不要讓我思考,掌握正則表達式
- n(Level 2):設計模式,人員軟件,編程珠,算法設計手冊,實用程序員,神話人月
- log(n)(Level 3):計算機程序的結構和解釋,概念技術,計算機程序設計模型,計算機程序設計藝術,數據庫系統,作者:C。J. Date,Thoughtingthth,Little Schemer
chart7: blogs
- 2n(Level 0):聽說過,但沒有時間
- n2(Level 1):閱讀技術/編程/軟件工程博客,并定期收聽播客
- n(Level 2):維護一個鏈接博客,其中包含他/她收集的一些有用的文章和工具
- log(n)(Level 3):維護一個博客,在其中分享有關編程的個人見解和想法
總結
以上是生活随笔為你收集整理的程序员自我修养1:能力矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重新启动SQLSever服务
- 下一篇: [转]PSP使用指南之- 系统升级(降级