核心競爭力最早由普拉哈拉德和加里·哈默爾兩位教授提出,通常認為核心競爭力,即企業或個人相較於競爭對手而言所具備的競爭優勢與核心能力差異,說白了就是你的優勢,而且最好是獨一無二的的優勢,這就是核心競爭力。
那麼程式設計師的核心競爭力是怎樣的呢?一名優秀的程式設計師肯定有以下的幾種能力:
1.編程能力
這個毋庸置疑,做為一名程式設計師,能寫代碼、寫高質量的代碼,可以說是基本功,離開了這個,就像無根之木,無源之水,談再多也沒用。這個可以和公司內的高手學,私下利用業餘時間豐富理論知識,多看一些開原始碼,從模仿到動手嘗試、再創新。
2.分析解決問題的能力
本質上來說,老闆請你來都是來解決問題的,你能解決問題,才能體現你的價值,才有加薪的籌碼。
一個項目、一個任務,或者一個bug,都可以看做是一個問題,你是否能夠快速的分析情況,脫離表象找到問題的根源,或者把一個大問題分解成若干可以處理的小問題,並在規定的時間內解決它,可以說是考量你技術水準的重要唯一標準。
這種能力如何培養呢?
兩種途徑:
(1).豐富的行業經驗,你經歷的多了,自然就會知道該怎麼處理了,俗話說沒吃過豬肉還沒見過豬跑嘛,大概就是這個意思。
(2).有意識的學習一些方法論,鍛鍊自己的結構化思維,不僅僅是對工作,對生活的方方面面,都挺有用的。推薦關注一下劉未鵬的《暗時間》,是專為程式設計師寫的方法論,他本身也是一名程式設計師。一些厲害的PM,基本上不摸代碼了,但是聽手下人說一下情況,還是能快速的找到根結,離不開他們的從業經驗和系統的思維方法。
3.良好的工作態度
不同的公司有不同的文化氛圍,有比較看重的價值觀。且以為對於程式設計師來說,最重要的一個態度,就是不能湊合。一般的程式設計師在發現問題以後,東試試西試試,能解決問題就行了,但是優秀的程式設計師覺得不會妥協,一定會試圖去分析產生問題的原因,根本的解決方法,甚至要去看Linux內核代碼也毫不妥協。
4.自我學習的能力
眾所周知,程式設計師是一個很苦逼的職業,技術更新日新月異,產品換代更是以月為單位計,不學習如何能長久?
這裡的學習又分為兩大塊,一塊為技術知識的學習,包括編程技能,基本原理,算法結構以及與工作環境密切相關的知識,另外值得特別一提的是經典開原始碼的學習,這是成為高手的必經之路;
另一塊為產品知識、行業動態的學習,國內一般情況是寫代碼比較好或者比較久的人,就開始帶團隊,如果沒有這方面的積累,就會比較困難,另外就算一門心思做技術,多了解一些也有利於加深對需求、功能的理解,不是什麼壞事。
5.溝通能力
聽說讀寫都很重要,對新手來說聽和說尤其值得注意。
聽是說一個任務下來,要聽清楚問題是什麼,需求是什麼,有什麼條件,聽清楚了再動手。說是要表達有條理,說的清楚來龍去脈,說的清楚解決問題的思路。有些工作了好幾年的程式設計師,連一個複雜點的問題是怎麼回事,都說不清楚,東一下西一下,一點邏輯結構都沒有,很明顯他的思路就是混亂的。
這裡還要補充提兩點,一個是問,不清楚的一定要問,不要裝,其實你進公司做三天事,你大概是個什麼水平,什麼樣的思維模式,你的領導就一清二楚了,裝也沒用。
另一個是反饋,一件事領導交待給你,你要在關鍵結點給他反饋,告訴他做的怎麼樣了,有什麼困難,下一步準備怎麼做,需要什麼支持等等。不要等到領導來問,才告訴他你有什麼問題搞不定,我不知道別人怎麼樣,反正我對這種情況是深惡痛絕的,這樣搞兩次以後,我基本上就不會把很關鍵的任務交給這個人了。
6.不斷總結歸納
對一個問題,一類問題,以及不同類型的問題,善於歸納整理,不斷反思自己的問題,即便是不出bug的代碼,你經過一段時間去回頭看,也有很多思考不正確不合理的地方,有很多優化點,如果你覺得自己的代碼一向牛逼,毫無破綻,那你一定是原地踏步,毫無進展。
工作經驗需要日積月累,但有些人工作3年就超越了那些工作10年的人,工作年限並不能代表你的工作能力,只有不斷增強自己的核心競爭力才能在公司處於一個至關重要的崗位,薪資才能快速增長。
對於軟體開發人員來說,通常,他們職業發展有幾個選擇:專注於技術,成為技術專家;轉型到技術型銷售、技術支持等;所以要想走得遠一點,必須有一項本領是過人的。 隨著技術成長,從技術性管理到高級管理。這是大家都看得清楚的方向,也都在向這些方向的金字塔尖努力。但是無論那個方向都要學會多讀書。
程式設計師要根據本身的基本素質、技術能力選擇開發層次,由低到高,逐步發展。 也是一名程式設計師本身具備相應素質的循序漸進的發展軌跡,包括很強的技術背景和綜合管理才能等素養,這也就是所謂『兩條腿走路』的職業規劃發展路線。」如果這樣的話,我相信你總有一天能達到自己的理想標準。
學習、學習、再學習
程式設計師是一種既具備藍領特質,常常又被人認為是白領,通過它還可以轉化成金領的職業。那如何從一個碼農到引領行業技術變革的領袖,關鍵是程式設計師要不斷的提升自己的核心競爭力,要不斷的進行學習和自我升級,一萬小時的投入能夠讓人變成專家,而以下幾點會讓程式設計師更加高效的學習。
精通兩種語言
沒有錯,這裡明確指的就是兩門,是要有不同內涵的兩門,其中一門是要主流的,關鍵還要都精通。要求就這一些,原因如下所述:不同語言有不同的思想內涵,如java是靜態的、面向對象的, Python是動態的,C是面向過程的,R語言的向量化思想很重要。一個精通了java的程式設計師往往寫Python、R效率會很低,因為他寫出來的都是基於java思想的邏輯。所以一定要掌握語言的精髓,學習兩門不同內涵語言有助於你舉一反三,增強學習能力,其中一門主流語言會讓你更容易找工作而生存下來,另外主流語言通常是最經典、最完善、最嚴謹的語言。而人的精力是有限的,語言大多又是相通的,兩門足矣。
掌握計算機基礎原理
基礎包括計算機組成原理,不同平台的作業系統,資料庫內部機制等,要深刻理解一段程序在計算機內轉化成0和1是怎麼運行的。往往在程序開發和運行過程中出現的性能瓶頸,罕見的異常或是某些難以重現的bug,都是因為缺乏對於計算機整個體系的基礎知識而無法下手解決。因此不要忽視大學裡學過的一些知識,要與實際工作進行聯繫。
經歷完整的項目或產品周期
年輕的程式設計師們在社會複雜的氛圍中容易浮躁而頻繁的跳槽換工作,這種行為是極度不可取的。這會讓你失去經歷完整項目或產品周期的機會,從而使你一直重複某些環節的工作。有些問題是無法在開發的初期遇到,有些問題甚至要到程序運行了幾年後才會暴露出來。事實上在職場中,一個在同一項目歷經幾年的程式設計師是受歡迎的,因為他知道所有做項目、做產品會碰到的任何困難與問題。
熟悉設計原理及思想
要寫出好的程序就要時刻遵循軟體設計思想,雖然這個是架構師和設計師的工作,但是一個優秀的程式設計師應該具備這樣的能力,不僅可以有助於你理解設計的思路,也可以在局部程序的編寫過程中發揮的淋漓精緻,從而使軟體變得擴展性強、維護性高。具體做法是多讀懂一些設計模式的書,多看懂一些架構巧妙精細的開源軟體,再聯繫實際工作中的軟體程序,和你周圍的資深程式設計師、設計師、架構師多做討論,這一系列的化學反應足以讓你迅速成長。
訓練思維邏輯
程序歸根到底體現的還是人的思維邏輯,是計算機按人的想法進行執行的指令集。因此程式設計師就好比是一個指揮官,寫程序就好比是作戰指揮,思路清晰、考慮周詳非常重要。程式設計師每周可以利用周末做一些幫助邏輯訓練的程序題、算法題,甚至可以是數學題。貴在堅持,長此以往,程式設計師對於具體需求建模的敏感度、效率會大大加強,寫出的程序簡單而有效。
總結
上述提到的幾點只是幫助程式設計師找到努力的方向,關鍵還是需要程式設計師去實踐、去學習。付出了多少汗水,終究會有多少回報,所以提升核心競爭力的關鍵還是不斷去學習、學習、再學習。