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