來(lái)源:琴水玉,
www.cnblogs.com/lovesqcc/p/4038423.html
摘要:根據我的開(kāi)發(fā)實(shí)踐及理解,梳理了作為軟件工程師解決現實(shí)問(wèn)題應當具備的基礎技能。
難度:中級。
編程開(kāi)發(fā)本質(zhì)是運用程序和計算機來(lái)解決現實(shí)中的各種問(wèn)題,因此,編程開(kāi)發(fā)人員的才智發(fā)揮載體是計算機或者說(shuō)計算設備,直接武器是程序。程序員用來(lái)進(jìn)行編程開(kāi)發(fā)所需要的技能,歸結起來(lái)主要如下:
1. 理解計算模型和框架: 順序計算、并發(fā)計算 (并行計算、分布式計算); 理解應用所基于的計算模型和框架是非常重要的。傳統應用通?;陧樞蛴嬎?,而現代商業(yè)應用,比如云計算,通?;诜植际接嬎慵軜?; 大規模的科學(xué)計算應用, 比如基因序列計算, 則基于并行計算。
2. 高效的數據處理:熟悉常用數據結構和算法設計,能夠針對計算目標設計高效的數據結構和算法并實(shí)現之, 滿(mǎn)足性能需求。
3. 大容量的數據管理與檢索:至少精通一種主流數據庫, 從數據處理中分離出的一種專(zhuān)門(mén)針對大量應用數據實(shí)時(shí)檢索要求的技術(shù)。
4. 系統底層機制: 進(jìn)程、信號、 內存管理、API 等, 理解相關(guān)概念及實(shí)現,熟悉使用Linux&MacOS&Windows至少一種操作系統。
5. 進(jìn)程的網(wǎng)絡(luò )通信: TCP/IP socket , RPC ,Http , 序列化與反序列化, 熟悉網(wǎng)絡(luò )程序設計的底層原理。
6. 編程語(yǔ)言: 面向過(guò)程、面向對象、腳本語(yǔ)言、函數型、瀏覽器語(yǔ)言等,最好每種類(lèi)型語(yǔ)言掌握一種。
7. 正則表達式:靈活地操作文本和字符串。
8. 代碼閱讀與維護: 能夠讀懂代碼,維護代碼,重構或擴展代碼。
9. 錯誤處理技術(shù): 異常機制、 返回值與全局變量、 直接退出或重續 等; 建造穩固可靠的應用的必要基礎。
10. 網(wǎng)絡(luò )搜索: 尋求有益資源、遠程協(xié)作伙伴及有效解答。
11. 程序質(zhì)量: 保證程序的時(shí)間性能、空間性能、安全性、可靠性、可用性、 可擴展性、可讀性、可維護性、可移植性、用戶(hù)體驗。
12. 設計模式: 解決實(shí)際的設計開(kāi)發(fā)問(wèn)題, 在現有項目的基礎上擴展功能模塊時(shí)應該會(huì )經(jīng)常用到。
13. 系統架構: 用于子系統的設計, 需要項目經(jīng)驗積累。
14. 處理大數據量: 通?;诜植际接嬎慵軜?,比如云計算基礎設施。
15. 選用可靠的工具及軟件庫、包: 首先必須確定具體需求,深入了解各種工具、技術(shù)與框架及其優(yōu)劣,然后根據需求選擇最適合的那種。
16. 診斷和修復計算機或程序的故障: 上網(wǎng)搜索已有解決方案;根據原理進(jìn)行推斷和驗證猜想; 排查縮小范圍; 對比分析; 打印信息。
18. 除了編程的其它使用計算機解決問(wèn)題的技術(shù)和方法: 比如使用現有的軟件。
針對每個(gè)問(wèn)題,將自己掌握的技術(shù)和方法整理出來(lái),并使用示例來(lái)說(shuō)明,基本上就可以了解自己的技術(shù)水平了,同時(shí)亦可備日后用。積微知著(zhù)。人們常說(shuō)的那些“大技能”,其實(shí)可以分解為大量的微技能,而積累越多的微技能,在處理問(wèn)題時(shí)便有了越多的選擇和思考余地。具體而言:
1. 語(yǔ)言: 至少熟悉六種編程語(yǔ)言,掌握兩種編程語(yǔ)言。 “熟悉”是指大量學(xué)習和使用過(guò),“掌握”是指能夠使用該語(yǔ)言 構建大型可靠的軟件系統。 對象式,函數式, 過(guò)程式,客戶(hù)端語(yǔ)言,腳本語(yǔ)言,數據語(yǔ)言。 例如, Java / Scala / Python / C / Shell / JavaScript / SQL ;
2. 工具: 編輯器 IDE 工程構建 版本控制 控制臺 瀏覽器 筆記軟件。 例如 Vim (Sublime) / IntellJ / Maven / Git / Shell / Chrome;
3. 方法: 自頂向下,意圖導引,自底向上; First Right, then Good ; 預先設計, 及早動(dòng)手; 迭代式開(kāi)發(fā)、發(fā)布、反饋和成長(cháng) ; 預估時(shí)間;
4. 風(fēng)格: K&R C , Java 編程規范, 排版整潔,代碼簡(jiǎn)潔無(wú)冗余, 一致, 使用地道表達范式;
5. 模型: 串行, 并發(fā),多進(jìn)程, 多線(xiàn)程, MapReduce , B/S , 異步, 回調,阻塞, 非阻塞,并行,分布式;
6 思想: 結構,控制,過(guò)程, 對象, 函數,聲明, 原語(yǔ), 集合, 組合, 抽象, 封裝,復用,分層,模式,分治,緩存,中斷,數學(xué)性質(zhì);
7. 算法: 分治, 遞歸,動(dòng)態(tài)規劃, 時(shí)空權衡, 貪婪算法,優(yōu)先級算法,迭代改進(jìn),深度遍歷,廣度遍歷,問(wèn)題轉化;
8. 排序: 插入排序, 選擇排序,快速排序, 堆排序, 歸并排序,基數排序,外部排序;
9. 搜索: 順序搜索, 二分搜索, 哈希搜索, 深度優(yōu)先搜索,廣度優(yōu)先搜索,分段并行搜索;
10. 數據結構: 位圖,數組, 鏈表,棧,隊列, 二叉樹(shù), 字符串, 哈希表,圖;Json, XML, 記錄,數據庫; Key-Value 值對集合;非結構化存儲。
11. 文本處理: find , grep, awk, sed, sort, cut, uniq, tr, ls, cat, xargs, 正則表達式;
12. 設計模式: 工廠(chǎng), 單例,原型, 模板,策略, 狀態(tài), 觀(guān)察者, 中介者, 責任鏈, 組合, 命令, 代理,外觀(guān),適配器,裝飾器,迭代器;
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 ;參見(jiàn)《面向模式的軟件架構:并發(fā)與聯(lián)網(wǎng)對象模式》
14. 進(jìn)程與網(wǎng)絡(luò ): ps(pstree), top, kill, crontab, ifconfig, ping, telnet, netstat, tcpdump, ssh, scp, wget, curl, Socket , HTTP ; 任務(wù)管理器 ;
15. 開(kāi)發(fā)框架: Servlet, Spring, Struts, ibatis , Hibernate, Aop, jQuery , Extjs, Bootstrap, Flex ;
16. 常用組件: 日志 , 實(shí)用工具 (字符串, 日期, JSON/XML, HTTP, Email) , 簽名校驗,集合容器,模板引擎,并發(fā)庫,圖表(Highcharts)等 ;
17. 運行容器: apacheHttp , tomcat, jetty, nginx , Docker,JVM, 瀏覽器,集群;
18. 中間件: Tair, Zookeeper, Dubbo, 數據庫連接池,日志服務(wù), 緩存, 定時(shí)任務(wù),可靠消息服務(wù),可靠心跳服務(wù),工作流引擎, 負載均衡 ;
19. 軟件架構: MVCDD (Model – View – Controller – Domain – DB) ;流水線(xiàn),管道與過(guò)濾器; 事件驅動(dòng); 領(lǐng)域建模;以數據為中心的架構;
20. 測試技術(shù): 質(zhì)量風(fēng)險分析,測試數據集, 測試用例,等價(jià)類(lèi)劃分, 分支覆蓋, 域測試,正交表,決策表,狀態(tài)轉換圖,邊界測試, 空測試, 異常測試,漫游測試, 依賴(lài)Mock;單測;接口測試;集成測試;全鏈路壓測;
21. 代碼組織: 頭文件, 類(lèi)文件,包機制,名字空間;
22. 軟件工程: 模塊化, 封裝,面向對象,用戶(hù)故事,迭代開(kāi)發(fā),持續集成,單元測試,CodeReview,驗收測試,持續交付;
23. 測量監控: 性能測量,time ,系統/接口/業(yè)務(wù)指標,錯誤報警;
24. 學(xué)習資源: 開(kāi)源項目,公開(kāi)課,論文,infoq, stackoverflow , blogs, google , baidu;
25. 經(jīng)典書(shū)籍: 參見(jiàn)《計算機專(zhuān)業(yè)及軟件開(kāi)發(fā)推薦書(shū)籍》
看完本文有收獲?請轉發(fā)分享給更多人
關(guān)注「ImportNew」,提升Java技能
聯(lián)系客服