程序員有哪些必備技能?
抽象概念
對(duì)于一個(gè)技術(shù)人員來(lái)說(shuō),編程技能是最為基本的能力,它能完成工作中的需求和任務(wù).
除此之外,還有一些其它應(yīng)該具備的基礎(chǔ)技能,這些技能每個(gè)人或多或少都有一點(diǎn),只是平時(shí)沒(méi)有注意,也沒(méi)有刻意研究和學(xué)習(xí),以至于有一種雞湯式的概念,自己覺(jué)得自己不行,或者自己覺(jué)得自己還不錯(cuò).
但是究竟好在哪里,壞在哪里,卻很少有人能夠說(shuō)得清.
日常場(chǎng)景
在程序員的日常生活中,會(huì)有一些極為高頻的場(chǎng)景,在每天我們都會(huì)遇到
- 碰到難以解決的bug或者忘記某個(gè)屬性和方法的時(shí)候,查閱網(wǎng)上的文檔手冊(cè)和博客文章
 - 針對(duì)某個(gè)需求使用網(wǎng)上提供的代碼片段或者第三方庫(kù),如時(shí)間格式化,字符校驗(yàn)等
 - 開(kāi)發(fā)項(xiàng)目后,進(jìn)行單元測(cè)試,有的是測(cè)試專崗,但這和自測(cè)并不沖突,具體看崗位安排和項(xiàng)目周期
 - 上班前拉取最新的代碼,合并,開(kāi)發(fā),下班前提交自己最新的代碼,合并,期間有創(chuàng)建,提測(cè),發(fā)布等版本流程
 - 運(yùn)行項(xiàng)目代碼或者打包給測(cè)試都需要用到構(gòu)建工具,這是基本技能,也有很多值得優(yōu)化和改進(jìn)的地方
 - 開(kāi)發(fā)過(guò)程有三大模塊,功能開(kāi)發(fā),代碼調(diào)試,問(wèn)題排查,能夠快速定位問(wèn)題和解決問(wèn)題是核心技能
 
當(dāng)有些事情我們每天都要重復(fù)去做的時(shí)候,人與人之間的差距就來(lái)了.
具體有多大的差距取決于我們做這些事情的好壞程度,越是高頻越是核心的事物,越應(yīng)當(dāng)不斷去想辦法優(yōu)化和改進(jìn),這樣才能提升每天的效率和質(zhì)量,日積月累,將產(chǎn)生無(wú)窮大的正反饋.
反之,倘若我們一直渾渾噩噩,依靠本能和有限的知識(shí)來(lái)應(yīng)對(duì)這些場(chǎng)景,那么這將是一場(chǎng)無(wú)比疲憊的消耗戰(zhàn),直到再也無(wú)法支撐業(yè)務(wù)場(chǎng)景.
必備技能
上述歸納的行為都可以找到一種或者多種技巧來(lái)更加快速和友好的執(zhí)行,至少可以嘗試把概念化的內(nèi)容轉(zhuǎn)為可量化的方法.
高級(jí)搜索
遇到問(wèn)題的時(shí)候如果定位不到原因或者是解決不了,通常我們會(huì)在搜索引擎上查找答案.
百度一下,未必知道,谷歌可以解鎖更多的內(nèi)容,友情提示,使用英文作為關(guān)鍵字,獲取到的答案質(zhì)量更高一些.
還有一些其他的搜索引擎就不一一列舉了,關(guān)于搜索不只是搜索,還涉及到搜什么,何處搜,如何搜,同樣的問(wèn)題不同的人用不同的關(guān)鍵詞會(huì)得到截然不同的答案,使用一些搜索技巧可以排除劣質(zhì)信息,快速而精準(zhǔn)的獲取想要的內(nèi)容.
知識(shí)體系
編程中不推薦造輪子,很多場(chǎng)景直接使用別人現(xiàn)成的代碼片段和庫(kù)更為方便一些,比如手機(jī)號(hào)校驗(yàn)等,沒(méi)必要自己再花時(shí)間寫一個(gè)正則.
當(dāng)然,有時(shí)候考慮到安全和特殊需求,仍然是有需要自己造輪子的時(shí)候,這個(gè)時(shí)候就比較考驗(yàn)技術(shù)功底,基礎(chǔ)知識(shí)和底層邏輯.
建議平時(shí)構(gòu)建自己的編程體系,常用的內(nèi)容要及時(shí)整理并合理使用,特殊的場(chǎng)景能夠快速適應(yīng),跟上節(jié)奏.
也會(huì)用到一些第三方的庫(kù),快速上手最為核心,尤其是很多文檔都是英文文檔,不一定有系列的教程,這個(gè)時(shí)候就考驗(yàn)英文功能和基礎(chǔ)知識(shí)了.
版本管理
幾乎所有的公司都會(huì)用到版本管理工具,不論是Git還是SVN,或者是其他的工具.
你可以不會(huì)高級(jí)搜索,可以沒(méi)有知識(shí)體系,但是不會(huì)版本管理,結(jié)局還需要說(shuō)嗎?
版本管理幾乎每天都有操作,何時(shí)提交,如何合并,怎樣解決代碼沖突等問(wèn)題都是要熟練掌握的.
里面要學(xué)習(xí)的地方有很多,可以優(yōu)化的地方也有很多,正確使用和提升效率很關(guān)鍵.
構(gòu)建工具
前端的webpack,npm,后端的maven或者gradle都屬于構(gòu)建工具的范疇.
打包輸出,合理設(shè)置依賴,項(xiàng)目?jī)?yōu)化,這些都是本身職業(yè)中必須掌握的基本技能,之所以單獨(dú)列出,是因?yàn)槠浔旧砭褪且粋€(gè)分類領(lǐng)域.
如同版本管理工具一樣,不同的軟件有不同的方式和效果,不論是配置測(cè)試環(huán)境,正式環(huán)境,還是項(xiàng)目本身的設(shè)置,都是有很多需要注意的地方.
代碼調(diào)試
如果是開(kāi)發(fā)占據(jù)了一半時(shí)間,那么調(diào)試就占據(jù)了另一半時(shí)間.
有人調(diào)侃程序員,一半的時(shí)間在寫bug,另外一半的時(shí)間在debug.
遇到問(wèn)題的時(shí)候,第一時(shí)間就是用正確的方式debug,比如斷點(diǎn),比如查看日志,比如其他調(diào)試方法.
熟練的調(diào)試時(shí)是發(fā)現(xiàn)和解決問(wèn)題的最有效的方法,反之,如果代碼調(diào)試的能力一般會(huì)極大的影響開(kāi)發(fā)效率,造成不必要的時(shí)間浪費(fèi)等.
問(wèn)題排查
調(diào)試只是查詢問(wèn)題的方法之一,就拿斷點(diǎn)來(lái)說(shuō),會(huì)斷點(diǎn),查看相應(yīng)的數(shù)據(jù)并不一定能找到問(wèn)題所在.
了解斷點(diǎn)如何設(shè)置,應(yīng)該設(shè)置在哪等就涉及到問(wèn)題排查,是采用斷點(diǎn),還是查看日志,還是選擇別的方式,也是問(wèn)題排查.
問(wèn)題排查是一個(gè)思考方式,怎樣發(fā)現(xiàn)問(wèn)題,為什么沒(méi)能發(fā)現(xiàn)問(wèn)題,才是重點(diǎn),發(fā)現(xiàn)問(wèn)題后如何解決問(wèn)題,也很重要.
一方面取決于經(jīng)驗(yàn)的積累,一方面取決于思考方式,相對(duì)之下,工具的使用就比較弱化.
有些問(wèn)題發(fā)生的時(shí)候,特別能檢驗(yàn)一個(gè)人的能力,分析能力,溝通能力,技術(shù)能力,綜合起來(lái)形成問(wèn)題排查和解決能力.
linux系統(tǒng)
現(xiàn)在技術(shù)越來(lái)越方便,很多框架都十分的成熟,圖形化的開(kāi)發(fā)界面也比較完善,很多人平時(shí)使用window系統(tǒng)開(kāi)發(fā),但是這并不意味著不需要了解linux技巧.
也不能說(shuō)是純粹的linux,而是應(yīng)該指命令行和服務(wù)器系統(tǒng).
很多開(kāi)發(fā)場(chǎng)景都是可以通過(guò)命令行的方式來(lái)開(kāi)發(fā),不論是前端還是后端,還是其他職位,使用命令行都是比較推薦的方式.哪一個(gè)開(kāi)發(fā)效率快,質(zhì)量高,錯(cuò)誤少就采用哪一種,沒(méi)有絕對(duì)的限定.
其次服務(wù)端系統(tǒng)linux也要多多了解,一個(gè)項(xiàng)目的開(kāi)發(fā)到上線,涉及到產(chǎn)品,ui,前后端,測(cè)試,運(yùn)維等等,按道理懂得越全面越是有好處,能夠從全局思考,從技術(shù)角度看,熟悉linux很有必要,許許多多的場(chǎng)景都與之有關(guān),就像上面的額問(wèn)題排查,這涉及到知識(shí)儲(chǔ)備和經(jīng)驗(yàn)值,能夠幫助我們?nèi)娑焖俚亩ㄎ粏?wèn)題.
單元測(cè)試
單元測(cè)試是保證軟件持續(xù)集成和持續(xù)交付的一個(gè)基本前提。
測(cè)試作為一個(gè)大的分類也有很多要學(xué)習(xí)和優(yōu)化的,好的單元測(cè)試可以幫助我們節(jié)省開(kāi)發(fā)時(shí)間,盡早的發(fā)現(xiàn)問(wèn)題.
因?yàn)橛袦y(cè)試崗,所以一定程度上測(cè)試為非必須,我們需要在開(kāi)發(fā)效率不斷的做出選擇.
但從個(gè)人綜合能力上來(lái)說(shuō),測(cè)試是一個(gè)開(kāi)發(fā)人員應(yīng)該具備的基本能力.















 
 
 






 
 
 
 