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