轉行計算機專業迷茫的你該怎樣提升自己的專業技能

選擇了計算機專業可能意味著你已經一條腿踏入了I行業,成為一名「預備程序員」。那又要如何

在大學期間打好基礎呢?程序員又需要哪些品質呢?你需要了解程序員必備的「硬技能」與「軟技

能」。

一、程序員成長的必備條件

程序員的工作,說到底就是要編出滿足需求的程序,如果這項工作你做得好,你就發展得好,所

以,程序員的成長,都是圍繞著「編出滿足需求的程序」來展開的。

第一,程序員要了解工作的終極目標是滿足需求。

很多程序員在這一條上就走錯方向了,他們誤以為,程序員的價值就在于把技術玩得神乎其技,于

是,他們腦子里想的,是如何應用各種時髦、炫酷、看起來很牛的技術,而完全忽略了工作的最根

本目的是要滿足需求。


很不幸,這種程序員還不在少數,而且因為這種想法表面上看起來還挺迷惑人,所以很有市場,我

甚至聽過一個初創公司的CTO這樣說:「如果程序員不用最新最牛的技術,那還做這行干嗎?」

他們在工作中就是把各種最新的時髦技術都用上,不出意外,這家初創公司已經倒閉了。

如果你能夠意識到,程序員的工作是要滿足需求,你就已經強過了大部分二吊子的程序員,因為你

看問題的出發點就會不一樣。在做技術選擇的時候,你就會更可能做出正確的選擇。

有的程序員會說,需求滿足不滿足,那是公司的事情,管他呢,我只要學習到最新最酷的技術,公

司倒閉了好歹我還能找到下一份工作。且不說這樣的想法很自私,從「學習的角度說,也是錯

的。我接下來要說下一個程序員成長的必備條件——學習能力。


第二,程序員成長必須要有學習能力。

每個程序員都知道,這個行業有浩如煙海的知識量,且不說層出不窮的編程語言和框架,光是各種

概念和風潮就已經讓人應接不暇了。這個行業的特點就是技術發展快,沒幾年就會有一次革命性變

化,幾年前微服務還只是一個最佳實踐的候選,現在就是開發大型后端應用的標準配置;幾年前整

個行業都在說大數據,這幾年整個行業都在說人工智能.....快速發展的行業,帶來了快速增長的知

識和技術。


那么,我們是應該展現我們的學習能力,把這些都學了嗎?

當然不是!

學習能力的一個很重要組成部分,是知道「哪些需要學,哪些不需要學」,不做區分,什么時髦學

什么,別人鼓吹什么學什么,那就會貪多嚼不爛,最后樣樣都稀松。

為什么我在前面反復強調,程序員應該首先明確自己的領域方向,還有確定自己會在什么類型的公

司工作呢?因為這些選擇將決定什么樣的知識對你是最有價值的。


假設你確定自己的發展方向是移動端開發,服務的公司定位是初創型公司,那么,一個新的手機操

作系統出現,你就應該更加關注,相對地,一個新的機器學習算法,你就沒必要花太多時間了解;

一個快速開發模型出現,你值得關注,相對地,一個超重量級的軟件管理流程,你知道有這么回事

就足夠了。


把學習精力放在和你的方向相關的領域上,你才能獲得最佳的投入產出比,當然,并不是說對和自

己領域無關的東西完全不管不問,從擴大自己知識面的角度來說,你需要了解這些知識點,但是你

不應該被這些東西分散有限的時間。

面對新技術變革的挑戰,抓住自己專屬的領域,傷其十指不如斷其一指,先做到一個領域的專家水

平。


第三,程序員發展要和團隊發展聯系起來。

這個行業,沒有一個人是可以單打獨斗的,你可能覺得自己可以單槍匹馬完成一個項目,但是,你

可以閉上眼睛思考一下,如果你的工作中少了一些同事的支持,你是否真的可以完成?

如果沒有產品經理給你組織明確的需求,你是不是無法開始編程?

如果沒有項目經理給你協調各個部門之間的進度,你是不是無法獲得對應部門的支持?

如果沒有測試人員給你做測試,你是不是也沒有信心讓程序上線?

如果沒有其他程序員給你做代碼審核,你是不是也沒發現潛藏的代碼缺陷?

如果你對上面的問題全都不以為然,覺得你一個人能夠獨立搞定所有的事情,你真的沒必要來讀這

本書,恭喜你,你已經可以成為一個非常獨立的自由職業者了。

不過,對于絕大部分程序員,都應該正視這樣一個現實——你不是一個人在戰斗,你是在一個團隊

中工作。


所以,不光要關注自己的成長,也要關注團隊的成長,當團隊出現問題的時候,要想辦法解決,當

隊友遇到困難的時候,要幫助他們解決。

如果你的團隊發展得不好,你一個人就是有孫悟空的神通,也無法按期把滿足需求的產品推出;如

果團隊發展得好,你哪怕只是像沙和尚一樣跟著取經團隊走,最后也能修成正果。


小結一下,程序員成長的必備條件,根本上就是要明確目的是提供滿足需求的程序,為此,要明白

滿足需求最重要,要正確發揮自己的學習能力,把自己的發展和團隊發展關聯起來。

前面我們已經介紹了程序員的成長,不過,這是基于3年以內工作時間的前提,接下來,我們要把

眼光放長遠一點,來介紹一下在一個更長時間里程序員如何規劃自己的職業生涯。


二、如何確定自己的成長目標?


為了達到成長的目的,必須有針對性地進行訓練,首先要確定自己針對的目標。

請先讓自己回答下面的這些問題:

5年內,我希望自己在這個領域能夠影響到多少人? 3人、10人、100人還是1000人?

這時候可能就有人看不下去了,他們要喊:不要這些虛的,你就直接告訴我,5 年之后怎么讓我的年薪達到 XX 萬元,其他的都不要說。

抱歉,作者只懂提高能力和影響力,不能給你開工資,到底怎么達到這些年薪,在提高能力和影響

力之后都有可能,如果沒有能力和影響力的提升,單純的空想是沒有意義的。


上面說到,關注于對領域知識的了解,代表深度,自己能夠影響多少人,代表廣度。只有在深度和

廣度上都有投入,才能在職業生涯上發展得順利。

這個世界我們無法把握,但是至少能夠把握自己,通過提高自己的能力來實現自己的目標,人的能

力可以分為「硬技能」和「軟技能」兩個方面。


「硬技能」指的是那些外在的、可以量化衡量的技能,我們在學校里學到的大部分課程教育的都是

硬技能,因為這些技能可以通過考試分數來衡量。對于程序員,編程能力就是最重要的硬技能,一

個程序員一天能夠開發一個程序模塊,就比需要一周才開發同樣模塊的程序員硬技能要強,可見,

硬技能是很容易量化衡量的。


「軟技能」指那些內在的、感性的、難以量化衡量的技能,比如專業精神、人際交往能力、領導和

管理能力,我們沒法給一個人的軟技能打分,因為沒有這樣一個量化衡量的方法。

接下來,我們分別介紹如何提高「硬技能」和「軟技能」。


三、如何培養自己的硬技能?

硬技能,對于程序員就是創造軟件相關的專業知識和技能,培養這方面知識,方法其實很簡單,無

論提高任何硬技能,請按照這三個步驟來做:

第一步,確定目標,定義清楚測量自己能力的方法;

第二步,學習對應知識和技能;

第三步,給自己一個測試,看是否達到了目標,如果達到,你就完成了,如果沒有,回到第一步繼

續。


因為硬技能是可以衡量的,所以都可以用這種套路來提高自己。舉個例子,你想要學習Python 語

言,你先確定這個月的目標是要能夠獨立編寫一個游戲,然后你開始學習,每過一周,你就嘗試用

Python編寫一個小游戲,如果能夠完成,代表你的目標達到了,否則,你需要繼續學習。

提高硬技能的方法看似很簡單,但是要做到并不容易,我在知乎上也被無數次問這樣的問題:「我

看了XXX這本書,看到第X章的時候就看不懂了啊!」每次我都試著去了解這些程序員的困難,

最后發現問題根源都是——基礎差。


IT這個行業每一個知識點都是建立在很多其他知識點上的,例如,如果你不理解時間復雜度,你就

不會理解為什么數據庫需要索引,而要理解時間復雜度,你又必須理解算法和數據結構基礎.......依

此類推,實踐中一個小的功能點,要求你懂很多基礎性知識。


要獲得扎實的基礎,最直接的就是接受過計算機專業的本科教育。有很多網上的朋友問我,如果沒

有上過計算機本科怎么辦?很抱歉,我真沒有什么好方法,如果我能夠有一個捷徑可以代替計算機

本科教育,那我也太牛了,計算機本科教育如果能夠這么輕松被替換,也就沒有存在價值了,對

吧?對于想要從事這個行業的小朋友,不要被一時的快感或者利益蒙蔽眼睛,不要在高中畢業甚至

初中畢業的情況下就去參加工作,磨刀不誤砍柴工,請一定至少考一個計算機專業的大學本科,這

樣你才能有一個扎實的基礎。

那只有初中或者高中學歷的人就不能當程序員嗎?當然不是,實際上,我見過一些高中畢業當程序

員的,他們有的很努力,也工作得不錯,但是,他們經歷的辛酸是別人難以想象的,他們的發展天

花板卻是誰都看得到的。


對于已經失去接受計算機專業本科教育的機會的朋友,你也不要灰心,補救的方法也很簡單,你找

到任何一家你心儀的計算機專業院校,打聽清楚他們的專業課程,然后按照他們的課程來學習,這

當然不能和接受全日制教育那么好,但是這是最好的補救辦法。我說過,沒有類似《九陰真經》

《九陽真經》這樣的秘籍,你看完之后就能打通任督二脈,如果你非要說有,那就是計算機本科的

教材,沒有其他捷徑。

有了扎實的計算機基礎之后,接下來就要多實踐,這個行業是一個建立在實踐上的行業,優秀的程

序員只有在實踐中才能培養起來。簡單說,就是少做些無病呻吟的鬼扯,多一些實際創造價值的貢

獻。


提出問題,誰都會;解決問題,就不是誰都能夠做到的了。

根據我的觀察,職業發展良好的程序員,都有一個特點,那就是他們是擅長解決問題的人,而不是

拋出問題讓別人解決的人。


我舉一個非常具體的例子,團隊里代碼質量很差,三天兩頭線上出bug,搞得開發團隊一方面有新

功能的開發壓力,一方面還要抽時間去修線上bug,這時候團隊肯定會有怨言的。

這時候,只會提出問題的人,只會抱怨:「項目一團糟,都不知道怎么辦了。」「大家都沒有干

勁,這樣下去肯定要散?!埂竍ug 越改越多,都不知道為什么還要改?!?/p>

好的問題當然是解決問題的一半,但是,如果單純地提出問題,甚至是以消極態度提出問題,那就

只是添亂。


能夠提出解決辦法的人,會說:「我們把團隊分為兩組,一組集中精力開發新功能,另一組專心修

復線上的bug。」「我們的代碼分支管理可以踩進gitflow的流程,避免代碼提價混亂。」「我們

需要研究分析—下重復出現的bug的類別,針對最多出現的類別進行改進。」

上面的「解決問題的方法」只是一些例子,重點就是,這些方法是針對實際問題的對策,能夠幫助

團隊渡過難關。能夠提出解決辦法并且實施,不光是對自己能力的鍛煉,更重要的是,真正解決問

題的人能夠獲得組織的青睞,獲得更多的晉升機會。


在確定了學習方法、學習態度之后,「硬技能」的培養就是要花時間去反復訓練,沒有任何捷徑,

下面是一些直接的提高硬技能的方法:

1.當你加入一個新項目時,從fix一個bug 入手開始工作,因為你的同事未必有時間幫你過一遍代

碼,而你找得到的文檔往往都是過時或者錯誤的,而fix一個bug是最快速的能讓你熟悉一個項目

代碼的方法。


2當你學習—門新的語言時,用這種語言編一個你每天都會用的程序,比如一個「待辦任務列表」

(Todo List),或者做一個彈珠小游戲,寫這樣的程序的好處是需求非常清晰,因為你已經見過類

似功能無數次了,你不用糾結需求(雖然實際工作中你依然要糾結),你可以心無旁騖地應用你的

編程語言。


3.如果有時間,你寫過的程序,都重新寫一遍,你會發現第二次寫的會和第一次大不一樣,越是不

—樣,越說明你在這期間進步大。


4.每天花一兩個小時來學習工作之外的技術,如果工作緊張騰不出這個時間,那就每周末騰出幾個

小時來學習。


5.不要浪費時間和別人爭論語言或者框架的優劣,把爭論的時間用在實際上手編程上,你不會后

悔。


6.無論如何,給自己定一個目標,每個月不能生產少于1000行代碼,這里說的是新寫的代碼,不

是修改別人的代碼。


7.當你積累了多年的工作經驗,對某一個領域非常熟悉的時候,可以考慮擴展自己的廣度,成為其

他領域的專家,這是讓你擴展影響力的必經之路。


四、如何培養自己的軟技能

相對于硬技能,軟技能在程序員職業發展中的作用更大,為什么這么說呢?因為,硬技能的學習材

料實在太飽和了,各種語言、工具、框架的介紹可以說是長篇累牘地重復,只要你有足夠的時間和

耐心,學好一個硬技能不成問題;與硬技能相反,軟技能的培養是一個很冷門的領域,更多的是靠

程序員在工作和生活中自己去領悟,沒有人給予教導,偶爾能夠開悟掌握軟技能的程序員,就會如

虎添翼。更重要的一點,這個行業里需要的是人與人之間的協作,一個人的硬技能只能做好一個人

的工作,處理人與人之間關系的軟技能卻能讓一個團隊產生合力,達到1+1>2的效果。

我見到過很多程序員,他們覺得技術是一切,有技術就是牛,忽視了軟技能的培養,這就很影響他

們的成長,表現在這些方面:


·只能自己做工作,不能教別人做工作,最后累死自己;

·費好大勁做出的成果,但是表達不出來,團隊和領導看不出這個成果有多重要;

·唯技術至上,看不起技術剛入門的同事,甚至出口不遜,造成矛盾。

這樣的例子數不勝數,相反,軟技能過硬的程序員,即使技術上并不是最強的,職業發展卻會順風

順水,真的,最后人和人之間差距,更多的是軟技能之間的差距。

軟技能是一個比較模糊的范圍,可以包含但是不受限于下面這些能力:

1.表達能力;

2.自我營銷能力;

3.與他人溝通能力;

4.說服他人的能力;

5.組織能力;

6.培訓指導他人的能力;

........


如果要總結上面這些「軟技能」的共同之處,那就是,這些技能都是和「人」打交道,而不是和電

腦、邏輯、程序打交道,所以,「軟技能」的核心,就是和人打交道的能力。


一說到和人打交道,就不得不提「情商」這個概念。情商高的人軟技能就一定高嗎?其實未必,一

個人可以情商很高,但是一到演講的時候就情緒緊張,情商更多的是一個人的為人處世態度,并不

完全代表技能,有一些和人打交道的技能,比如演講能力,依然需要訓練才能獲得。

所以,情商高只是基礎,軟技能依然需要訓練。


程序員這個職業,因為長時間和電腦打交道,而且和電腦打交道就能夠獲得工資,所以往往會讓人

產生錯覺,以為不需要培養和人打交道的能力。


其實啊,軟件開發還是和人打交道的藝術,且不說產品經理、項目經理和程序員之間的溝通是和人

打交道,程序員之間的交流也是和人打交道。前面我說過,要成為更高階的程序員,你的「影響

力」就要擴大,而你所影響的,就是人類啊,所以和人打交道的能力是必修課。

在這里,我們不需要把「軟技能」神秘化,我們可以明確程序員需要提高的軟技能方面,請努力做

到下面這些方面。


1.每一個知識點,能夠解釋得不懂計算機的人也能夠理解,你不一定需要讓對方和你一樣精通,但

是你可以用比喻的方法讓對方理解。


2.你能夠通過演講,把自己的理念傳播出去,為什么要這么做、怎么做,你能夠通過半小時到一小

時的演講說清楚。


3.你能夠讓團隊成員和你交流如沐春風,可以有觀點不一樣,但是不要紅臉吵架。在和人交流的過

程中,請記住卡耐基教誨我們的一句話:「每一個人都希望自己是重要的?!褂涀∵@一點,讓每一

個人都感覺自己重要,你就可以做到每一個人和你的交流都很愉快。

如果你做到了上面三點,你的軟技能已經強過絕大部分程序員,足夠讓你成為資深級別以上的程序

員。


我在微軟工作的時候,有一次一個工號在100之內的資深員工來給我們做培訓,培訓內容覆蓋了硬

技能和軟技能。關于硬技能部分,參加培訓的員工都沒有任何問題,但是當他介紹軟技能培養的時

候,大家就覺得難以把握了,于是,我就問了這位資深前輩一個很具體的問題:「如果我只能做—

件事來提高自己的軟技能,那這—件事應該是什么?」

這位前輩說:「你覺得你日常所能接觸到的人里,誰的軟技能最高?」


我想了想,說:「我們部門門的架構師吧?!?/p>

這位前輩又問我:「為什么你覺得他的軟技能最高?」

我說:「因為他情商高,說話風趣,再復雜痛苦的事情他也能理清楚,所有人都說和他說話總是很

愉快?!?/p>


然后這位前輩就給出建議:「那你就和這個架構師約一個兩個月以后的一對一會議,一個人是肯定

會接受兩個月之后的會議的,然后你就通過和他的接觸,學習他的做事方式,向他看齊。」

后來我按照這位的方式做了,發現這一招真的非常好使,當有了一個明確的榜樣去學習之后,看似

虛無縹緲的軟技能也變得非常具體易學了。


可見,雖然「軟技能」比較軟,難以量化衡量,但是,也有一個對個人來說可以「量化」的培養方

法,這個方法也非常簡單:找到你接觸范圍內的「軟技能」的榜樣,然后努力讓自己變成他那個樣

子。這個榜樣,可能是一個口才很棒的領導,也能是一個情商超高的項目經理,重要的是你認可他

就是你幾年后想要成為的層次,你就可以和他多交流接觸,看他平時都看些什么書,看他平時有什

么編程習慣,看他怎么和別人交流,看他平時怎么處理問題,即使你只學會他的十之四五的本事,

你很快會發現自己已改頭換面,成為大不一樣的人,這時候,你的眼界更高,就可以設立一個新的

榜樣,邁向一個新的臺階。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。