歡迎光臨
每天分享高質量文章

軟體開發之技能梳理

(點擊上方公眾號,可快速關註)


來源:琴水玉,

www.cnblogs.com/lovesqcc/p/4038423.html

摘要:根據我的開發實踐及理解,梳理了作為軟體工程師解決現實問題應當具備的基礎技能。

難度:中級。

編程開發本質是運用程式和計算機來解決現實中的各種問題,因此,編程開發人員的才智發揮載體是計算機或者說計算設備,直接武器是程式。程式員用來進行編程開發所需要的技能,歸結起來主要如下:

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.   語言: 至少熟悉六種編程語言,掌握兩種編程語言。 “熟悉”是指大量學習和使用過,“掌握”是指能夠使用該語言 構建大型可靠的軟體系統。  物件式,函式式, 過程式,客戶端語言,腳本語言,資料語言。 例如, Java / Scala / Python / C / Shell / JavaScript / SQL ;

2.   工具: 編輯器 + IDE + 工程構建 + 版本控制 + 控制台 + 瀏覽器 + 筆記軟體。 例如 Vim (Sublime) / IntellJ / Maven / Git / Shell / Chrome;

3.   方法: 自頂向下,意圖導引,自底向上; First Right, then Good ; 預先設計, 及早動手; 迭代式開發、發佈、反饋和成長 ; 預估時間;

4.   風格: K&R; C ,  Java 編程規範, 排版整潔,代碼簡潔無冗餘, 一致, 使用地道表達範式;

5.   模型: 串行, 併發,多行程, 多執行緒, MapReduce , B/S , 異步, 回呼,阻塞, 非阻塞,並行,分佈式;

6    思想: 結構,控制,過程, 物件, 函式,宣告, 原語, 集合, 組合, 抽象, 封裝,復用,分層,樣式,分治,快取,中斷,數學性質;

7.   演算法: 分治, 遞迴,動態規劃, 時空權衡, 貪婪演算法,優先級演算法,迭代改進,深度遍歷,廣度遍歷,問題轉化;

8.   排序: 插入排序, 選擇排序,快速排序, 堆排序, 歸併排序,基數排序,外部排序;

9.   搜索:  順序搜索, 二分搜索, 哈希搜索, 深度優先搜索,廣度優先搜索,分段並行搜索;

10.  資料結構:  位圖,陣列, 鏈表,棧,佇列, 二叉樹, 字串, 哈希表,圖;Json, XML, 記錄,資料庫; 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, curl, Socket , HTTP ; 任務管理器 ;

15.   開發框架: Servlet, Spring, Struts, ibatis , Hibernate,  Aop,  jQuery , Extjs, Bootstrap, Flex ;

16.   常用組件: 日誌 ,  實用工具 (字串, 日期, JSON/XML, HTTP, Email) , 簽名校驗,集合容器,模板引擎,併發庫,圖表(Highcharts)等 ;

17.   運行容器: apacheHttp ,  tomcat,  jetty,  nginx ,  Docker,JVM, 瀏覽器,集群;

18.   中間件: Tair, Zookeeper, Dubbo,  資料庫連接池,日誌服務, 快取, 定時任務,可靠訊息服務,可靠心跳服務,工作流引擎, 負載均衡 ;

19.   軟體架構: MVCDD (Model – View – Controller – Domain – DB) ;流水線,管道與過濾器; 事件驅動; 領域建模;以資料為中心的架構;

20.   測試技術: 質量風險分析,測試資料集, 測試用例,等價類劃分, 分支改寫, 域測試,正交表,決策表,狀態轉換圖,邊界測試, 空測試, 異常測試,漫游測試, 依賴Mock;單測;接口測試;集成測試;全鏈路壓測;

21.   代碼組織: 頭檔案, 類檔案,包機制,名字空間;

22.  軟體工程: 模塊化, 封裝,面向物件,用戶故事,迭代開發,持續集成,單元測試,CodeReview,驗收測試,持續交付;

23.  測量監控: 性能測量,time ,系統/接口/業務指標,錯誤報警;

24.   學習資源: 開源專案,公開課,論文,infoq,  stackoverflow , blogs, google ,  baidu;

25.   經典書籍: 參見《計算機專業及軟體開發推薦書籍》

看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

赞(0)

分享創造快樂