程式設計師如何規劃職業路線?

發表於2018-03-13

社群中並不缺少有關軟體工程師職業發展的文章,甚至可以說是氾濫。很多人都能在這個話題上說兩句,三五年工作經驗的程式設計老鳥也好,架構師也好,技術 VP 也好,CTO 也好,都有各自的看法與實踐經驗。沒有哪一套方法是適用於所有人的,這一套軟體工程師職業發展綱要,也不過是在你踽踽前行的路上,迷茫時可用來參考借鑑。你的核心競爭力,永遠是你的自身實力。切記!

一、專業技能學習捷徑

1、愛上你的編碼神器

眾所周知,軟體工程師要做的工作就是寫程式碼,準確地說,你的目標應該是寫出滿足業務需求並且無法找出 Bug 的程式碼,而不是寫一大堆沒用的文字。既然你的任務是寫出高質量的程式碼,那麼你首先應該訓練的就是打字速度,你需要掌握鍵盤盲打技能,甚至還要愛上你的“編碼神器”,並做到將此工具的用法爛熟於心,閉上眼睛都能正確敲中你想要的快捷鍵。

2、熟悉底層技術原理

當你完全駕馭了計算機的輸入裝置以後,你需要進一步瞭解計算機的內部工作原理,不是讓你把機器大卸八塊,而是你需要全面瞭解計算機的組成結構與工作原理。如果你不是計算機科班出生也沒關係,在網上買一本關於計算機組成原理的書自學即可。你無需做到精通,能全面瞭解即可,因為接下來你需要在程式設計的世界中,慢慢去體會計算機的工作感受,你就是計算機的管理者。

3、深入一門程式語言

好了,現在是時候學習一門程式語言了,最好的選擇是 Java,為什麼呢?原因很簡單,因為市場需求量最大,我敢保證,你學 Java 肯定比學 PHP 更容易找到工作(希望 PHP 程式設計師們淡定一些,其實我始終認為 PHP 是世界上最好的程式語言)。當你在學習 Java 時,首先需要掌握它囉裡吧嗦的程式設計語法,此時沒有什麼比寫一個“Hello World”來得更爽快一些。隨後你需要深刻理解的是 Java 的物件導向概念(每次我說到物件導向,總會被一些單身漢吐槽,其實我想說,物件是可以 new 出來的),這些概念看上去比較虛,但是它們卻能撐起一個強大的軟體架構。所以,在物件導向技術上面花再多功夫都不為過,因為它能訓練我們對業務的抽象能力,就像當初我們學習數學一樣,它能訓練我們的邏輯思維能力。

4、選擇一位對的老師

看書、看視訊、看原始碼、看技術文件,其實這些都是較為低效的學習方法,掌握程式設計技能的捷徑就是拜一位資深的程式設計師為師,你可以尊稱他為“碼神”,記得一定要把他伺候好,讓他願意傳授一些程式設計技能給你,其實也就是一個微笑外加一頓小龍蝦的事情,他就能被你征服。一定要看他寫的程式碼,思考為什麼他會這樣寫,一定要將你不理解的地方記錄下來,並且在下班之前緊緊地抓住他,讓他一次給你講個夠,此時你一定會有一種打通任督二脈的暢快之感。所謂“師傅領進門,修行在個人”,你需要比你師傅更加努力,甚至十倍於他人的付出,才能在程式設計之路上嚐到甜頭。此時你需要學習更加高深的武功,研究更加優秀的原始碼,實踐更有挑戰的專案,還需要花整塊時間,系統地看技術文件以及技術參考書。假如你想成為架構師,不妨看看我所著的《架構探險》這本書,也許它會對你的專業技能有所幫助。

5、樂於分享你的技能

你最好要讓自己變成一位豁達開朗之人,千萬不要吝嗇,一定要懂得分享你所學的專業技能。可以嘗試做點自己的開源專案,並讓這個開源專案變得更加開放,不妨結合開源,寫點技術部落格,並厚著臉皮給你身邊的朋友閱讀。這件事情一定要持之以恆,不要擔心有人吐槽你,你肯定會被吐槽,那是因為大家在關注你,此時你需要更加努力,讓自己變得足夠專業。當你成為真正的“大神”時,就不會有人再吐槽你了,他們只會吐槽自己的技術不如你,此時你將得到的是無限的膜拜和稱讚。相信我,這絕不是奇蹟。在學習專業技能之路上,多一點自信,多一點勤奮,多一點思考,再爭取一點機會,你就會成功。

二、不可或缺的軟技能

1、軟技能 ≠ 務虛

如果將專業技能比喻為“硬技能”,那麼在我們的職場中,與專業性無關的技能就可以歸納為“軟技能”了。但每當我提到軟技能時,難免會讓人誤解為這是“務虛”的一種功夫,我們雖然是“吃軟飯的”(做軟體開發的),但我們卻十分討厭虛偽。沒錯!我也很厭惡虛偽之人,尤其是在職場中遇到這樣的人物,我從心底鄙視他們,但我從來不會和他們發生任何衝突,反而還能和他們愉快地共事,這種本領靠的就是軟技能。

軟體工程師每天都在和機器打交道,機器是沒有感情的,你告訴它是0,它一定不會認為是1。但我們與人打交道卻不一樣,你告訴他是真,他卻可能認為是假。與人打交道,正是軟體工程師們最為欠缺的方面,有些軟體工程師甚至害怕與人交流,害怕在公開場合講話,害怕拋頭露面,害怕做一些組織性的工作。如果你也有以上這些心裡負擔,那麼恭喜你!因為你即將從本文中找到克服這些困難的靈丹妙藥,至少我希望是這樣。

需要強調的是,軟技能是一種職場必備的核心技能,我敢直言,如果缺乏這方面的技能,你的職業生涯將會變得非常糟糕。軟技能包括的方面非常廣泛,溝通、協調、組織、氣場這些都是最基本的軟技能,甚至情商也是一種軟技能,會不會講話,聽不聽得明白,這些都是軟技能。那麼我們不妨先從溝通這項軟技能開始吧,因為我認為他是軟體工程師最重要的軟技能之一。

2、口語流利 ≠ 會溝通

很多人都容易將溝通理解為講話,說一個人語言很流利,很會講話,口若懸河,誇誇其談,其實並非他的溝通能力很強。我認為,溝通可以理解為兩方面,即“溝”和“通”。“溝”指的是你將心中所想很清晰地表達出來給對方聽,考驗的是你的表達能力;“通”指的是讓你確信對方是否真明白你所表達的意思,考驗的是你的傾聽能力。所以,我們很多時候都是在“溝”,往往忽略了“通”,從而形成了“溝而不通”的情況,因此,現在全世界人民都在提倡如何“有效溝通”。還是用一個示例來說話吧。

當領導交給你一項棘手的工作,但你不知道如何開始進行這項工作,此時你應該如何應對當前的挑戰呢?絕大多數人會硬著頭皮去做,他們希望通過自己的努力,可以順利完成任務,但結果往往卻無法讓領導滿意。少數人會主動向領導諮詢,以尋求領導對自己的幫助。此時應該如何與領導對話呢?似乎並非很多人都清楚。下面這段話是我的套路,僅供參考。

我:勇哥(他是我的領導),最近我遇到了一點麻煩的事情,想聽聽您的看法(勾起領導的興趣,讓他認真聽我說下去,記得一定要說“您”,而不是“你”)。

領導:哦?說來聽聽(證明領導此時不忙,他有時間讓我佔用,如果他此時很忙,你應該能感受出來的)。

我:感謝您對我的信任,昨天您交給我一項任務,回到家我一直都在想這項任務,我在想……(一定要對領導表示感激,是他給了我這次鍛鍊自己的機會,並強調我是“回到家”都在思考,而不是隻在在公司裡思考,道理你懂的)

領導:可能是我沒說清楚,你把這項任務想複雜了,其實……(可見這是一位 nice 的領導,跟著他,你能學到很多東西)

我:我還想再清楚一下,您期待這項工作的結果是怎樣的?(一定要明確領導想要的結果,他只會為結果買單)

領導:我希望……(領導娓娓道來,此處省略1萬字,你千萬不要打斷領導的講話,他講累了自然就會停,你只需要認真聽他怎麼講)

我:好的,我明白了,您希望我……(一定要學會複述領導講過的話,而且要用自己的理解來表達,不要當復讀機)

領導:沒錯,就是這樣。(領導表示認可了,此時你應該表示給領導一個微笑,讓他感到欣慰)

我:感謝勇哥!如果我在執行過程中遇到問題,可以再向您請教嗎?(一定要感謝,而且要表現出虛心向領導請教,為下一次求救做好準備)

領導:當然,隨時交流。(你真心拿他當領導,他才會無條件幫助你,你不懂得用好這位領導,那是你自己的損失)

溝通是不是很有趣?其實溝通是一門學問,我們花一輩子時間都在學習,都在改進自己的溝通方式,目的僅為愉快地和身邊的人一起“玩耍”,讓此生感到愉悅。

當你已經掌握了必備的專業技能,也具備了讓你脫穎而出的軟技能,那麼接下來你將思考的是自己該走那條路了,繼續做軟體工程師,還是做軟體工程師的 leader?下面這段話將告訴你答案。

三、正確制定職業路線

1、給自己提幾個問題

首先要澄清的是:我並非職業導師,更不是人生教父,所有的路都由你自己選擇,我的責任是告訴你,我認為行之有效的方法。

當你正走在職場的十字路口徘徊,思考走技術,還是走管理?我的答案只有一個:根據你自己的優勢來決定。合理利用好自己的優勢,會讓自己走的更加順暢,讓自己無怨無悔。還是舉一個例子來說明吧。

前段時間有位朋友在微信上私聊我,他也遇到了這個問題,繼續做技術,還是轉管理?我當時是這樣問他的,但我希望你可以用這樣的方式來問自己。

我:你工作多久了?

朋友:時間不長,寫了10年的程式碼。

我:那相當資深啊,現在還對寫程式碼有激情嗎?

朋友:喜歡寫,週末有時都會宅在家裡寫。

我:那你還在糾結什麼呢?

朋友:我都工作10年了,身邊的人要麼當 CTO,要麼做總監,自己卻還在擼程式碼,我現在到底該不該轉管理?

我:你為什麼會考慮轉管理?說說你在管理上的優勢吧。

朋友:我覺得自己對技術有一定深度,可以幫助團隊解決一些技術難題。

我:如果你團隊中有位小夥伴遇到一個很棘手的技術問題,沒轍了,你會做些什麼?

朋友:擼起袖子,就地幫他解決掉。

我:建議你走技術專家路線,這條路也許更加適合你。

朋友:……

2、轉管理之前,先理解管理

當我們在糾結是否應該轉管理時,不妨首先理解一下什麼是管理?以及什麼是管理者?只有當我們正確理解了這些概念以後,再來思考自己是否具備這樣的特徵,才能順利幫助自己轉型。

管理(management)是協調和監督他人的工作,從而使他人的工作可以有效率且有成效地完成。效率(efficiency)指的是以儘可能少的投入,以獲得儘可能多的產出,效率常常被說成“正確地做事”,即不浪費資源。成效(effectiveness)常常被稱為“做正確的事”,即做那些可以實現目標的工作活動。管理者(manager)就是完成所有管理工作,並使組織目標能夠實現的人。管理者的工作包括計劃(planning)、組織(organizing)、領導(leading)和控制(controlling)四種職能。

以上都是管理學告訴我們的知識,如果你想成為一名管理者,那麼你必須首先正確理解這些概念的真實含義,才能完全駕馭管理者的崗位,否則你會從管理崗位上摔下來,自己一定傷得不輕。

如果你想成為一名優秀的管理者,那麼你需要做些什麼呢?

  • 親自且專業地給團隊激勵。
  • 激勵團隊完成你無法獨立完成的任務。
  • 對問題提供指導和指引。
  • 對團隊的表現給予反饋。
  • 幫助團隊改善績效。
  • 使團隊對組織的改變知情。
  • 改善團隊小夥伴們的生活。

如果團隊和你共事過,那麼團隊應該覺得他們是幸運的,因為你能夠讓他們更加愉快和高效地工作。

寫在最後

不論選擇技術還是管理,在任何時候都不要放棄你的硬技能,因為它是你的“生存之本”,同時你也需要具備強大的軟技能,因為它是你的“發展之源”。

學習硬技能其實是有捷徑的,你無需一味地學習這些知識點,更多的其實是與人交流以及加以應用。軟技能其實是可以訓練的,你只需抓住一切可以抓住的機會,有意識地加以訓練和反思,你就能悟出很多寶貴的經驗。軟體開發是一門藝術,你需要能夠靜得下心,不斷地優化和雕琢你的作品,因此你需要具備工匠精神。如果你想成為一名工匠領袖,那麼你就應該比他人思考得更多、更高、更深、更全面,你需要更多的軟技能。你只有認識到自己的優勢,才能正確地選擇自己的職業路線。

祝你成功!

相關文章