1. 程式人生 > >程式設計師能力矩陣 Programmer Competency Matrix(閱讀分析版)

程式設計師能力矩陣 Programmer Competency Matrix(閱讀分析版)

[譯文]程式設計師能力矩陣 Programmer Competency Matrix

連結:http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm

注意:每個層次的知識都是漸增的,位於層次n,也蘊涵了你需瞭解所有低於層次n的知識。

電腦科學 Computer Science
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
資料結構 不知道陣列和連結串列的差異 能夠解釋和使用陣列,連結串列,字典等,並且能夠用於實際的程式設計任務。 瞭解基本資料結構時間和空間的折中,比如陣列vs 連結串列,能夠解釋如何實現雜湊表和處理衝突,瞭解優先佇列及其實現。 高等的資料結構的知識,比如B-樹、二項堆、斐波那契堆、AVL樹、紅黑樹、伸展樹、跳躍表以及字首樹等。
演算法 不能夠找出一個數組各數的平均值(這令人難以置信,但是我的確在應聘者中遇到過) 基本的排序,搜尋和資料的遍歷和檢索演算法。 樹,圖,簡單的貪婪演算法和分而治之演算法,能夠適度瞭解矩陣該層的含義。 能夠辨識和編寫動態規劃方案,良好的圖演算法知識,良好的數值估算的知識,能夠辨別NP問題等。 Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
程式設計體系 不知道何為編譯器、連結器和直譯器。 對編譯器、連結器、直譯器有基本的瞭解。知道什麼是彙編程式碼以及在硬體層如何工作。有一些虛擬記憶體和分頁知識。 瞭解核心模式vs使用者模式,多執行緒,同步原語以及它們如何實現,能夠閱讀彙編程式碼。瞭解網路如何工作,瞭解網路協議和socket級別程式設計。 瞭解整個程式堆疊、硬體(CPU+記憶體+中斷+微碼)、二進位制程式碼、彙編、靜態和動態連結、編碼、解釋、JIT(just-in-time)編譯、記憶體碎片回收、堆、棧、儲存器編址…
軟體工程 Software Engineering
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
原始碼版本控制 通過日期備份資料夾 VSS和初級的CVS/SVN使用者 熟練地使用CVS和SVN特性。知道如何分支和歸併,使用程式庫補丁安裝特性等 有分散式VCS系統的知識。嘗試過Bzr/Mercurial/Darcs/Git
自動化編譯 只知道在IDE下編譯 知道如何編譯在命令列下編譯系統 能夠安裝一個指令碼構建基本的系統 能夠安裝一個指令碼來構建系統並且歸檔,安裝程式,生成釋出記錄和給原始碼控制中的程式碼分配標籤。
自動化測試 認為所有的測試都是測試員的工作。 能夠編寫自動化的單元測試,能夠為正在編寫的程式碼提出良好的測試用例。 按照TDD (Test Driven Development)方式編寫程式碼。 瞭解並且能夠有效自動化安裝,載入/效能和UI測試
程式設計 Programming
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
問題分解 只有直線式的程式碼,通過複製貼上來複用 能夠把問題分散到多個函式中 能夠想出可複用的函式/物件來解決大題的問題 使用適宜的資料結構和演算法,寫出通用的/面向物件的程式碼來封裝問題的易改變的層面。
系統分解 N想不出比單一的檔案/類更好的層面 如果不在同一平臺或沒采用相同的技術,能夠把問題空間和設計方案分解。 能夠設計跨技術/平臺的系統。 能夠在多個產品線和與外部體系一體化中虛擬化和設計複製的系統。同時也能夠設計支援系統監視、報告、故障恢復等。
交流 不能向同伴表達想法/主意。匱乏拼寫和語法的能力。 同伴能瞭解你在說什麼。有良好的拼寫和語法能力。 能夠和同伴進行高效的交流 能夠使用清晰的方式瞭解和交流想法/設計/主意/細則,能適應每種環境的交流 Thisis an often under rated but very critical criteria for judging aprogrammer. With the increase in outsourcing of programming tasks toplaces where English is not the native tongue this issue has becomemore prominent. I know of several projects that failed because theprogrammers could not understand what the intent of the communicationwas.
同一檔案中程式碼組織 同一檔案中組織沒有依據 按照邏輯性或者易接近的方法 程式碼分塊和對於其他原始檔來說是易於是釋,引用其他原始檔時有良好的註釋 文件頭部有許可宣告,總結,良好的註釋,一致的空格縮排。文件外觀美觀。
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
跨檔案程式碼組織 沒夠想過給程式碼跨檔案組織 相關檔案按資料夾分組 每個物理檔案都有獨立的目的,比如一個類的定義,一個特性的實現等。 程式碼在物理層組織緊密,在檔名上與設計和外觀相匹配,可以通過檔案分佈方式洞察設計理念。
原始碼樹組織 一切都放在一個資料夾內 初步地將程式碼分散進對應邏輯的資料夾。 沒有迴圈依賴,二進位制檔案,庫,文件,構建,第三方的程式碼都組織進合適的資料夾內。 原始碼樹的物理佈局與邏輯層次、組織方式相匹配。可以通過目錄名稱和組織方式洞察設計理念。 The difference between this and the previous itemis in the scale of organization, source tree organization relates tothe entire set of artifacts that define the system.
程式碼可讀性 單音節的名稱(在國內應該是那些類似用漢語拼音命名的習慣) 對檔案、變數、類、方法等,有良好的命名。 沒有長函式、註釋解釋不常規的程式碼,bug修復,程式碼假設。 程式碼假設驗證使用斷言,自然的程式碼流,沒有深層巢狀的條件和方法
防禦性編碼 不知道這個概念 檢查程式碼中所有的引數,對關鍵的假設進行斷言 確保檢查了返回值和使程式碼失敗的異常。 有自己的庫來幫助防禦性程式設計、編寫單元測試模擬故障
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
錯誤處理 只給樂觀的情形編碼 基本的程式碼錯誤處理,丟擲異常/生成錯誤 確保錯誤/異常留在程式中有良好的狀態,資源,連線,記憶體都有被合適的清理。 在編碼之前察覺可能出現的異常,在程式碼的所有層次中維持一致性的異常處理策略,提出整個系統的錯誤處理準則。
IDE IDE大部分用來進行文字編輯 瞭解其周圍的介面,能夠高效地通過選單來使用IDE 瞭解最常操作的鍵盤快捷鍵 編寫自定義巨集
API 需要頻繁地查閱文件 把最頻繁使用的API記在腦子裡 廣闊且深入的API知識。 為了使實際任務中常用API使用更加便捷,編寫過API的上層庫,填補API之間的缺口。 E.g. of API can be Java library, .net framework or the custom API for the application
框架 沒有使用過主平臺外的任何框架 聽過但沒用過平臺下流行的可用框架 在專業的職位中使用過一個以上的框架,通曉各框架的特色。 某框架的作者
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
需求分析 接受給定的需求和程式碼規格 能對規格的遺漏提出疑問 瞭解全面情況,提出需要被規格化的整體範圍。 能夠提出更好的可選方案,根據經驗的浮現給出需求
指令碼 不具備指令碼工具的知識 批處理檔案/shell指令碼 Perl/Python/Ruby/VBScript/Powershell 寫過並且發表過可重用的程式碼
資料庫 認為Excel就是資料庫 知道基本的資料庫概念,規範化、ACID(原子性Atomicity、一致性Consistency、隔離性Isolation、永續性Durability)、事務化,能夠寫簡單的select語句 能夠牢記在執行時必要查詢中設計良好的規範化資料庫模式, 精通使用者檢視,儲存過程,觸發器和使用者定義型別。知道聚集與非聚集索引之間的差異。精通使用ORM(Object Relational Mapping物件關係對映)工具 能做基本的資料庫管理,效能優化,索引優化,編寫高階的select查詢,能夠使用相關sql來替換遊標,理解資料內部的儲存,瞭解如何映象、複製資料庫。知道兩段資料提交如何工作
經驗 Experience
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
專業語言經驗 命令式語言和麵向物件語言 命令式語言,面嚮物件語言和說明型語言(SQL),如果瞭解靜態型別vs動態型別,弱型別vs強型別則有加分 函式式語言,如果瞭解延緩求值,區域性套用函式,延續則有加分 併發語言(Erlang, Oz) 邏輯語言(Prolog)
專業平臺經驗 1 2-3 4-5 6+
專業經驗年齡 1 2-5 6-9 10+
領域知識 沒有該領域的知識 在該領域中曾經至少為一個產品工作過 在同一領域中為多個產品工作過 領域專家。在該領域設計和實現數種產品/方案。精通該領域使用的標準條款和協議
學識 Knowledge
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
工具知識 僅限於主要的IDE(VS.Net, Eclipse等) 知道一些流行和標準工具的備選方案 對編輯器、偵錯程式、IDE、開源的備選方案有很好的瞭解。比如某人瞭解大多數Scott Hanselman的威力工具列表中的工具,使用過ORM工具。 實際地編寫過工具和指令碼,如果這些被髮布則有加分
語言接觸 命令式語言和麵向物件語言 命令式語言、面嚮物件語言和說明型語言(SQL),如果瞭解靜態型別vs動態型別、弱型別vs強型別則有加分 函式式語言,如果瞭解延緩求值、區域性套用函式、continuations (源於scheme中的一種高階控制結構)則有加分 併發語言(Erlang, Oz)邏輯語言(Prolog)
程式碼庫知識 從來沒有查詢過程式碼庫 基本的程式碼層知識,瞭解如果構建系統 良好的程式碼庫工作知識,實現過幾次bug修復或者完成了一些細小的特性 實現了程式碼庫中多個大型特性,能夠輕鬆地將多數特性的需求變更具體化,從容地處理bug修復。
下一代技術知識 從來沒聽說過即將到來的技術 聽說過某領域即將到來的技術 下載過alpha preview/CTP/beta版本,並且讀過一些文章和手冊 試用過預覽版而且實際地構建過某物,如果共享給其他人的話則有加分
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
平臺內部 對平臺內部毫無所知 有平臺基本的內部工作的知識 深度的平臺內部知識,能夠設想平臺如何將程式轉換成可執行程式碼。 編寫過增強平臺或者為其平臺內部提供資訊的工具。比如,反彙編工具,反編譯工具,除錯工具等。
書籍 菜鳥系列,21天系列,24小時系列,蠢貨系列... 《程式碼大全》,《別讓我思考》, 《精通正則表示式》 《設計模式》,《人件》,《程式碼珠璣》,《演算法設計手冊》,《程式設計師修煉之道》,《人月神話》 《計算機程式設計與解釋》,《事務處理:概念與技術》,《計算機程式設計模型》,《計算機程式設計藝術》,《資料庫系統導論》 C.J Date版,《Thinking Forth》 ,《Little Schemer》(沒找到其中譯本)
部落格 聽過但是從來抽不出空去接觸 閱讀一些科技/程式設計/軟體工程的部落格,並且經常的收聽一些播客 維護一些部落格的連結,收集博主分享的有用的文章和工具 維護一個在程式設計方面,分享有個人見解和思考的部落格

原文:

Programmer Competency Matrix

link:http://sijinjoseph.com/programmer-competency-matrix/

Programmer Competency Matrix

Note that the knowledge for each level is cumulative; being at
level n implies that you also know everything from the
levels lower than n.

Computer Science
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
data structures Doesn’t know the difference between Array and LinkedList Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc. Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
algorithms Unable to find the average of numbers in an array (It’s hard to believe but I’ve interviewed such candidates) Basic sorting, searching and data structure traversal and retrieval algorithms Tree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix. Able to recognize and code dynamic programming solutions, good knowledge of graph algorithms, good knowledge of numerical computation algorithms, able to identify NP problems etc. Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
systems programming Doesn’t know what a compiler, linker or interpreter is Basic understanding of compilers, linker and interpreters. Understands what assembly code is and how things work at the hardware level. Some knowledge of virtual memory and paging. Understands kernel mode vs. user mode, multi-threading, synchronization primitives and how they’re implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level programming. Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing…
Software Engineering
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
source code version control Folder backups by date VSS and beginning CVS/SVN user Proficient in using CVS and SVN features. Knows how to branch and merge, use patches setup repository properties etc. Knowledge of distributed VCS systems. Has tried out Bzr/Mercurial/Darcs/Git
build automation Only knows how to build from IDE Knows how to build the system from the command line Can setup a script to build the basic system Can setup a script to build the system and also documentation, installers, generate release notes and tag the code in source control
automated testing Thinks that all testing is the job of the tester Has written automated unit tests and comes up with good unit test cases for the code that is being written Has written code in TDD manner Understands and is able to setup automated functional, load/performance and UI tests
Programming
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
problem decomposition Only straight line code with copy paste for reuse Able to break up problem into multiple functions Able to come up with reusable functions/objects that solve the overall problem Use of appropriate data structures and algorithms and comes up with generic/object-oriented code that encapsulate aspects of the problem that are subject to change.
systems decomposition Not able to think above the level of a single file/class Able to break up problem space and design solution as long as it is within the same platform/technology Able to design systems that span multiple technologies/platforms. Able to visualize and design complex systems with multiple product lines and integrations with external systems. Also should be able to design operations support systems like monitoring, reporting, fail overs etc.
communication Cannot express thoughts/ideas to peers. Poor spelling and grammar. Peers can understand what is being said. Good spelling and grammar. Is able to effectively communicate with peers Able to understand and communicate thoughts/design/ideas/specs in a unambiguous manner and adjusts communication as per the context This is an often under rated but very critical criteria for judging a programmer. With the increase in outsourcing of programming tasks to places where English is not the native tongue this issue has become more prominent. I know of several projects that failed because the programmers could not understand what the intent of the communication was.
code organization within a file no evidence of organization within a file Methods are grouped logically or by accessibility Code is grouped into regions and well commented with references to other source files File has license header, summary, well commented, consistent white space usage. The file should look beautiful.
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
code organization across files No thought given to organizing code across files Related files are grouped into a folder Each physical file has a unique purpose, for e.g. one class definition, one feature implementation etc. Code organization at a physical level closely matches design and looking at file names and folder distribution provides insights into design
source tree organization Everything in one folder Basic separation of code into logical folders. No circular dependencies, binaries, libs, docs, builds, third-party code all organized into appropriate folders Physical layout of source tree matches logical hierarchy and organization. The directory names and organization provide insights into the design of the system. The difference between this and the previous item is in the scale of organization, source tree organization relates to the entire set of artifacts that define the system.
code readability Mono-syllable names Good names for files, variables classes, methods etc. No long functions, comments explaining unusual code, bug fixes, code assumptions Code assumptions are verified using asserts, code flows naturally – no deep nesting of conditionals or methods
defensive coding Doesn’t understand the concept Checks all arguments and asserts critical assumptions in code Makes sure to check return values and check for exceptions around code that can fail. Has his own library to help with defensive coding, writes unit tests that simulate faults
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
error handling Only codes the happy case Basic error handling around code that can throw exceptions/generate errors Ensures that error/exceptions leave program in good state, resources, connections and memory is all cleaned up properly Codes to detect possible exception before, maintain consistent exception handling strategy in all layers of code, come up with guidelines on exception handling for entire system.
IDE Mostly uses IDE for text editing Knows their way around the interface, able to effectively use the IDE using menus. Knows keyboard shortcuts for most used operations. Has written custom macros
API Needs to look up the documentation frequently Has the most frequently used APIs in memory Vast and In-depth knowledge of the API Has written libraries that sit on top of the API to simplify frequently used tasks and to fill in gaps in the API E.g. of API can be Java library, .net framework or the custom API for the application
frameworks Has not used any framework outside of the core platform Has heard about but not used the popular frameworks available for the platform. Has used more than one framework in a professional capacity and is well-versed with the idioms of the frameworks. Author of framework
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
requirements Takes the given requirements and codes to spec Come up with questions regarding missed cases in the spec Understand complete picture and come up with entire areas that need to be speced Able to suggest better alternatives and flows to given requirements based on experience
scripting No knowledge of scripting tools Batch files/shell scripts Perl/Python/Ruby/VBScript/Powershell Has written and published reusable code
database Thinks that Excel is a database Knows basic database concepts, normalization, ACID, transactions and can write simple selects Able to design good and normalized database schemas keeping in mind the queries that’ll have to be run, proficient in use of views, stored procedures, triggers and user defined types. Knows difference between clustered and non-clustered indexes. Proficient in use of ORM tools. Can do basic database administration, performance optimization, index optimization, write advanced select queries, able to replace cursor usage with relational sql, understands how data is stored internally, understands how indexes are stored internally, understands how databases can be mirrored, replicated etc. Understands how the two phase commit works.
Experience
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
languages with professional experience Imperative or Object Oriented Imperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types Functional, added bonus if they understand lazy evaluation, currying, continuations Concurrent (Erlang, Oz) and Logic (Prolog)
platforms with professional experience 1 2-3 4-5 6+
years of professional experience 1 2-5 6-9 10+
domain knowledge No knowledge of the domain Has worked on at least one product in the domain. Has worked on multiple products in the same domain. Domain expert. Has designed and implemented several products/solutions in the domain. Well versed with standard terms, protocols used in the domain.
Knowledge
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
tool knowledge Limited to primary IDE (VS.Net, Eclipse etc.) Knows about some alternatives to popular and standard tools. Good knowledge of editors, debuggers, IDEs, open source alternatives etc. etc. For e.g. someone who knows most of the tools from Scott Hanselman’s power tools list. Has used ORM tools. Has actually written tools and scripts, added bonus if they’ve been published.
languages exposed to Imperative or Object Oriented Imperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types Functional, added bonus if they understand lazy evaluation, currying, continuations Concurrent (Erlang, Oz) and Logic (Prolog)
codebase knowledge Has never looked at the codebase Basic knowledge of the code layout and how to build the system Good working knowledge of code base, has implemented several bug fixes and maybe some small features. Has implemented multiple big features in the codebase and can easily visualize the changes required for most features or bug fixes.
knowledge of upcoming technologies Has not heard of the upcoming technologies Has heard of upcoming technologies in the field Has downloaded the alpha preview/CTP/beta and read some articles/manuals Has played with the previews and has actually built something with it and as a bonus shared that with everyone else
2n(Level 0) n2(Level 1) n (Level 2) log(n) (Level 3) Comments
platform internals Zero knowledge of platform internals Has basic knowledge of how the platform works internally Deep knowledge of platform internals and can visualize how the platform takes the program and converts it into executable code. Has written tools to enhance or provide information on platform internals. For e.g. disassemblers, decompilers, debuggers etc.
books Unleashed series, 21 days series, 24 hour series, dummies series… Code Complete, Don’t Make me Think, Mastering Regular Expressions Design Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man month Structure and Interpretation of Computer Programs, Concepts Techniques, Models of Computer Programming, Art of Computer Programming, Database systems , by C. J Date, Thinking Forth, Little Schemer
blogs Has heard of them but never got the time. Reads tech/programming/software engineering blogs and listens to podcasts regularly. Maintains a link blog with some collection of useful articles and tools that he/she has collected Maintains a blog in which personal insights and thoughts on programming are shared

Thanks to John Haugeland for a
reformatting of it that works much more nicely on the web.


  Programmer Competency Matrix 閱讀後產生的文字

           1 電腦科學 Computer Science方面基礎知識特點:需要大量時間學習、操練、實踐,需要訂一個

              長期提升計劃,每個階段提升哪些東西,循序漸進的提高。基礎東西類似於少林武功,

              要重視根基,要有恆心毅力。 資料結構 主要研究儲存(暫存器、Cache、記憶體、外存、資料型別

              、資料結構、應用資料結構)

              演算法:數學知識、邏輯學、演算法知識、

              程式設計體系: 編譯原理、作業系統、網路協議、計算機原理或計算機體系結構(儲存器、計算器、輸入、輸出、控制器)

           2 軟體工程 Software Engineering方面東西可以短時間提升上來,只要工作中注意這方面,可以在

              工作中短時間內提升起來。
           3 程式設計 Programming:需要大量做專案、做專案時高標準要求、深入思考、挑戰極限,隨著

              專案做的多,多思考,多總結,也可以逐漸提升起來的。

           4 分析問題、解決問題(程式設計 Programming)注意:分析問題、解決問題的能力也是很重要的:

              這塊的能力與數學做題操練類似,沒有捷徑,多分析問題,多解決問題,多歸納總結,

              這方面的能力也可以慢慢提高的。
           5 交流(程式設計 Programming)平時注意中文溝通,提升溝通質量。需要拿出時間提升英文的

             溝通能力,重點閱讀(大量閱讀英文技術資料),其次寫作(郵件、blog、論壇提問等),再其次,

             聽說(能簡單的進行口語對話即可)。
           6 經驗 Experience 隨著時間的積累,慢慢會提高的,注意,領域知識提高。
           7 學識 Knowledge 保持良好的學習能力,指定長期的學習提高計劃,要與實際工作相結合,

              要本著學以致用的原則。


 電腦科學 Computer Science:
         資料結構:n (Level 2)
         演算法:     n2 (Level 1)
         程式設計體系: n2 (Level 1)  編譯原理、作業系統、網路協議、計算機原理或計算機體系結構
 軟體工程 Software Engineering:
         原始碼版本控制: n (Level 2)
         自動化編譯:   n2 (Level 1)
         自動化測試:n (Level 2)
程式設計 Programming:
         問題分解:log(n) (Level 3)
         系統分解:n (Level 2)
         交流:n (Level 2)
         同一檔案中程式碼組織:n (Level 2)
         跨檔案程式碼組織:n (Level 2)
         原始碼樹組織: n (Level 2)
         程式碼可讀性:n (Level 2)
         防禦性編碼:n (Level 2)
         錯誤處理:log(n) (Level 3)
         IDE:n (Level 2)
         API:n2 (Level 1)
         框架:n (Level 2)
         需求分析:log(n) (Level 3)
         指令碼:n2 (Level 1)
         資料庫:n (Level 2)
經驗 Experience :
         專業語言經驗:n2 (Level 1)
         專業平臺經驗:log(n) (Level 3)
         專業經驗年齡:n (Level 2)
         領域知識:n (Level 2)
學識 Knowledge :
         工具知識:n2 (Level 1)
         語言接觸:n2 (Level 1)
         程式碼庫知識:n (Level 2)
         下一代技術知識:n (Level 2)
         平臺內部:n (Level 2)
         書籍:n2 (Level 1)
         部落格:log(n) (Level 3)