程序員有哪些必備技能?

 

原文連接: https://dsx2016.com/?p=613前端

抽象概念

對於一個技術人員來講,編程技能是最爲基本的能力,它能完成工做中的需求和任務.linux

除此以外,還有一些其它應該具有的基礎技能,這些技能每一個人或多或少都有一點,只是平時沒有注意,也沒有刻意研究和學習,以致於有一種雞湯式的概念,本身以爲本身不行,或者本身以爲本身還不錯.webpack

可是究竟好在哪裏,壞在哪裏,卻不多有人可以說得清.程序員

平常場景

在程序員的平常生活中,會有一些極爲高頻的場景,在天天咱們都會遇到web

  • 碰到難以解決的bug或者忘記某個屬性和方法的時候,查閱網上的文檔手冊和博客文章npm

  • 針對某個需求使用網上提供的代碼片斷或者第三方庫,如時間格式化,字符校驗等編程

  • 開發項目後,進行單元測試,有的是測試專崗,但這和自測並不衝突,具體看崗位安排和項目週期後端

  • 上班前拉取最新的代碼,合併,開發,下班前提交本身最新的代碼,合併,期間有建立,提測,發佈等版本流程安全

  • 運行項目代碼或者打包給測試都須要用到構建工具,這是基本技能,也有不少值得優化和改進的地方服務器

  • 開發過程有三大模塊,功能開發,代碼調試,問題排查,可以快速定位問題和解決問題是核心技能

當有些事情咱們天天都要重複去作的時候,人與人之間的差距就來了.

具體有多大的差距取決於咱們作這些事情的好壞程度,越是高頻越是核心的事物,越應當不斷去想辦法優化和改進,這樣才能提高天天的效率和質量,日積月累,將產生無窮大的正反饋.

反之,假若咱們一直渾渾噩噩,依靠本能和有限的知識來應對這些場景,那麼這將是一場無比疲憊的消耗戰,直到再也沒法支撐業務場景.

必備技能

上述概括的行爲均可以找到一種或者多種技巧來更加快速和友好的執行,至少能夠嘗試把概念化的內容轉爲可量化的方法.

高級搜索

遇到問題的時候若是定位不到緣由或者是解決不了,一般咱們會在搜索引擎上查找答案.

百度一下,未必知道,谷歌能夠解鎖更多的內容,友情提示,使用英文做爲關鍵字,獲取到的答案質量更高一些.

還有一些其餘的搜索引擎就不一一列舉了,關於搜索不僅是搜索,還涉及到搜什麼,何處搜,如何搜,一樣的問題不一樣的人用不一樣的關鍵詞會獲得大相徑庭的答案,使用一些搜索技巧能夠排除劣質信息,快速而精準的獲取想要的內容.

知識體系

編程中不推薦造輪子,不少場景直接使用別人現成的代碼片斷和庫更爲方便一些,好比手機號校驗等,不必本身再花時間寫一個正則.

固然,有時候考慮到安全和特殊需求,仍然是有須要本身造輪子的時候,這個時候就比較考驗技術功底,基礎知識和底層邏輯.

建議平時構建本身的編程體系,經常使用的內容要及時整理併合理使用,特殊的場景可以快速適應,跟上節奏.

也會用到一些第三方的庫,快速上手最爲核心,尤爲是不少文檔都是英文文檔,不必定有系列的教程,這個時候就考驗英文功能和基礎知識了.

版本管理

幾乎全部的公司都會用到版本管理工具,不管是Git仍是SVN,或者是其餘的工具.

你能夠不會高級搜索,能夠沒有知識體系,可是不會版本管理,結局還須要說嗎?

版本管理幾乎天天都有操做,什麼時候提交,如何合併,怎樣解決代碼衝突等問題都是要熟練掌握的.

裏面要學習的地方有不少,能夠優化的地方也有不少,正確使用和提高效率很關鍵.

構建工具

前端的webpack,npm,後端的maven或者gradle都屬於構建工具的範疇.

打包輸出,合理設置依賴,項目優化,這些都是自己職業中必須掌握的基本技能,之因此單獨列出,是由於其自己就是一個分類領域.

如同版本管理工具同樣,不一樣的軟件有不一樣的方式和效果,不管是配置測試環境,正式環境,仍是項目自己的設置,都是有不少須要注意的地方.

代碼調試

若是是開發佔據了一半時間,那麼調試就佔據了另外一半時間.

有人調侃程序員,一半的時間在寫bug,另一半的時間在debug.

遇到問題的時候,第一時間就是用正確的方式debug,好比斷點,好比查看日誌,好比其餘調試方法.

熟練的調試時是發現和解決問題的最有效的方法,反之,若是代碼調試的能力通常會極大的影響開發效率,形成沒必要要的時間浪費等.

問題排查

調試只是查詢問題的方法之一,就拿斷點來講,會斷點,查看相應的數據並不必定能找到問題所在.

瞭解斷點如何設置,應該設置在哪等就涉及到問題排查,是採用斷點,仍是查看日誌,仍是選擇別的方式,也是問題排查.

問題排查是一個思考方式,怎樣發現問題,爲何沒能發現問題,纔是重點,發現問題後如何解決問題,也很重要.

一方面取決於經驗的積累,一方面取決於思考方式,相對之下,工具的使用就比較弱化.

有些問題發生的時候,特別能檢驗一我的的能力,分析能力,溝通能力,技術能力,綜合起來造成問題排查和解決能力.

linux系統

如今技術愈來愈方便,不少框架都十分的成熟,圖形化的開發界面也比較完善,不少人平時使用window系統開發,可是這並不意味着不須要了解linux技巧.

也不能說是純粹的linux,而是應該指命令行和服務器系統.

不少開發場景都是能夠經過命令行的方式來開發,不管是前端仍是後端,仍是其餘職位,使用命令行都是比較推薦的方式.哪個開發效率快,質量高,錯誤少就採用哪種,沒有絕對的限定.

其次服務端系統linux也要多多瞭解,一個項目的開發到上線,涉及到產品,ui,先後端,測試,運維等等,按道理懂得越全面越是有好處,可以從全局思考,從技術角度看,熟悉linux頗有必要,許許多多的場景都與之有關,就像上面的額問題排查,這涉及到知識儲備和經驗值,可以幫助咱們全面而快速的定位問題.

單元測試

單元測試是保證軟件持續集成和持續交付的一個基本前提。

測試做爲一個大的分類也有不少要學習和優化的,好的單元測試能夠幫助咱們節省開發時間,儘早的發現問題.

由於有測試崗,因此必定程度上測試爲非必須,咱們須要在開發效率不斷的作出選擇.

但從我的綜合能力上來講,測試是一個開發人員應該具有的基本能力.