軟件開發之技能梳理
編程開發本質是運用程序和計算機來解決現實中的各種問題,因此,編程開發人員的才智發揮載體是計算機或者說計算設備,直接武器是程序。程序員用來進行編程開發所需要的技能,歸結起來主要如下:
1. 理解計算模型和框架 : 順序計算、并發計算 (并行計算、分布式計算); 理解應用所基于的計算模型和框架是非常重要的。傳統應用通常基于順序計算,而現代商業應用,比如云計算,通常基于分布式計算架構; 大規模的科學計算應用, 比如基因序列計算, 則基于并行計算。
2. 高效的數據處理 :熟悉常用數據結構和算法設計,能夠針對計算目標設計高效的數據結構和算法并實現之, 滿足性能需求。
3. 大容量的數據管理與檢索 :至少精通一種主流數據庫, 從數據處理中分離出的一種專門針對大量應用數據實時檢索要求的技術。
4. 系統底層機制 : 進程、信號、 內存管理、API 等, 理解相關概念及實現,熟悉使用Linux&MacOS&Windows至少一種操作系統。
5. 進程的網絡通信 : TCP/IP socket , RPC ,Http , 序列化與反序列化, 熟悉網絡程序設計的底層原理。
6. 編程語言 : 面向過程、面向對象、腳本語言、函數型、瀏覽器語言等,最好每種類型語言掌握一種。
7. 正則表達式 :靈活地操作文本和字符串。
8. 代碼閱讀與維護 : 能夠讀懂代碼,維護代碼,重構或擴展代碼。
9. 錯誤處理技術 : 異常機制、 返回值與全局變量、 直接退出或重續 等; 建造穩固可靠的應用的必要基礎。
10. 網絡搜索 : 尋求有益資源、遠程協作伙伴及有效解答。
11. 程序質量 : 保證程序的時間性能、空間性能、安全性、可靠性、可用性、 可擴展性、可讀性、可維護性、可移植性、用戶體驗。
12. 設計模式 : 解決實際的設計開發問題, 在現有項目的基礎上擴展功能模塊時應該會經常用到。
13. 系統架構 : 用于子系統的設計, 需要項目經驗積累。
14. 處理大數據量 : 通常基于分布式計算架構,比如云計算基礎設施。
15. 選用可靠的工具及軟件庫、包 : 首先必須確定具體需求,深入了解各種工具、技術與框架及其優劣,然后根據需求選擇最適合的那種。
16. 診斷和修復計算機或程序的故障 : 上網搜索已有解決方案;根據原理進行推斷和驗證猜想; 排查縮小范圍; 對比分析; 打印信息。
18. 除了編程的其它使用計算機解決問題的技術和方法 : 比如使用現有的軟件。
針對每個問題,將自己掌握的技術和方法整理出來,并使用示例來說明,基本上就可以了解自己的技術水平了,同時亦可備日后用。積微知著。人們常說的那些“大技能”,其實可以分解為大量的微技能,而積累越多的微技能,在處理問題時便有了越多的選擇和思考余地。具體而言:
1. 編程語言: 至少熟悉六種編程語言,掌握兩種編程語言。 “熟悉”是指大量學習和使用過,“掌握”是指能夠使用該語言 構建大型可靠的軟件系統。
一種過程式,一種對象式,一種函數式, 一種聲明式, 一種客戶端語言,一種腳本語言。 例如, C / Java / Scala / SQL / JavaScript / Python ;
2. 編程工具: 至少一種編輯器,一種IDE, 一種項目構建工具, 一種版本控制工具, 一種控制臺。 例如 Vim / Eclipse / Maven / Git(SVN) / Shell (cygwin);
3. 編程方法: 自頂向下,意圖導引,自底向上; First Right, then Good ; 預先設計, 及早動手; 迭代式開發、發布、反饋和成長 ; 預估時間;
4. 編程風格: K&R C , Java 編程規范, 排版整潔,代碼簡潔無冗余, 一致, 使用地道表達范式;
5. 編程模型: 串行, 并發, 多進程, 多線程, MapReduce , B/S , 異步, 回調,阻塞, 非阻塞;
6 編程思想: 過程式, 對象式, 函數式,聲明式, 原語, 集合, 組合, 抽象, 封裝,復用,分層,模式, 分治,緩存,中斷,數學性質;
7. 常用算法: 分治, 遞歸,動態規劃, 時空權衡, 貪婪算法,優先級算法,迭代改進,深度遍歷,廣度遍歷,問題轉化;
8. 排序: 插入排序, 選擇排序,快速排序, 堆排序, 歸并排序,基數排序,外部排序;
9. 搜索: 順序搜索, 二分搜索, 哈希搜索, 深度優先搜索,廣度優先搜索,分段并行搜索;
10. 數據結構: 位圖,數組, 鏈表,棧,隊列, 二叉樹, 字符串, 哈希表,圖; Mysql, 數據庫設計; Key-Value 值對集合;非結構化存儲。
11. 文本處理: find , grep, awk, sed, sort, cut, uniq, tr, ls, cat, xargs, 正則表達式;
12. 設計模式: 工廠, 單例,原型, 模板,策略, 狀態, 觀察者, 中介者, 責任鏈, 組合, 命令, 代理,外觀,適配器,裝飾器,迭代器;
13. 應用模式: WrapperFacade, Component Configurator, Interceptor, Extension Interface, Reactor, Proactor, Asyn Completion Token, Acceptor-Connector, Strategized Locking, Thread-Safe Interface, Double-Checked Locking Optimization, Active Object, Monitor Object, Half-Sync/Half-Async, Leader/Followers, Thread-Specific Storage ;參見《面向模式的軟件架構:并發與聯網對象模式》
14. 進程與網絡: ps(pstree), top, kill, crontab, ifconfig, ping, telnet, netstat, tcpdump, ssh, scp, wget, Socket , HTTP ; 任務管理器 ;
15. 開發框架: Servlet, Spring, Struts, ibatis , Hibernate, Aop, jQuery , Extjs, Bootstrap, Flex ;
16. 常用組件: 日志(common-logging) , 實用工具 (字符串, 日期, JSON/XML, HTTP, Email) , 簽名校驗,集合容器,模板引擎,并發庫,圖表(Highcharts)等 ;
17. 運行容器: apacheHttp , tomcat, jetty, nginx , Docker,瀏覽器;
18. 中間件: Tair, Zookeeper, Dubbo, 數據庫連接池,日志服務, 緩存, 定時任務,可靠消息服務,可靠心跳服務,工作流引擎, 負載均衡 ;
19. 軟件架構: MVC ; view-controller- service - dao (api) - db ;流水線,管道與過濾器; 事件驅動; 領域建模;
20. 測試技術: 質量風險分析,測試數據集, 測試用例,等價類 劃分, 分支覆蓋, 域測試,正交表,決策表,狀態轉換圖,邊界測試, 空測試, 異常測試,漫游測試, 依賴Mock;
21. 代碼組織: 頭文件, 類文件,包機制,名字空間;
22. 軟件工程: 模塊化, 封裝,面向對象,用戶故事,迭代開發,持續集成,CodeReview,驗收測試,持續交付;
23. 測量技術: 性能測量,time ;
24. 學習資源: 開源項目,公開課,論文,infoq, stackoverflow , blogs, google , baidu;
25. 經典書籍: 參見《 計算機專業推薦書籍 》
轉載請注明出處。謝謝 :)