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