致剛入職場的你 - 程式設計師的成長筆記

gdutxiaoxu發表於2019-04-02

前言

我們經常在網上會看到這樣的文章,你的同齡人正在如何。這是典型的販賣焦慮的文章。的確,現階段,剛畢業幾年的年輕人,面臨車,房子等,有時候壓力挺大的。但你過度焦慮的話,每天生活在恐慌當中,你會發現你生活過得一團糟。對比一下,很多國家的底層平民,典型如印度,一點不焦慮,樂天知命,反正永遠上升不了,得過且過。所以,適度的焦慮也許是成長的代價,我們要把握好一個度。

有時候,我也經常在想,到了30 多歲,我自己會是怎樣的?是繼續奮鬥在一線寫程式碼,還是做技術架構,或者轉行,創業等等。說句實話,我現在也是一臉懵逼,未來是怎樣的,我也不確定。但有一點可以確定的,我一直在追求更完美的自己,提高自己的核心競爭力。

今天,站在我的角度,一起來聊聊職場技術人的成長曆程。在我看來,以下幾個方面尤為重要。

  1. 自學能力
  2. 覆盤總結能力
  3. 技術素養

自學能力

剛開始實習的時候,以為工作了,技術就可以突飛猛進,因為想著有人帶了。等到工作了,才發現還是 too young,too simple。

在工作中,遇到不懂得,90% 的問題需要你自己解決的。相信工作中的人都深有體會,第一:同事也有自己的任務需要完成,不可能你一碰到問題,就想著會有人幫你解決。第二:工作中,每個人都會有自己的分工,有時候遇到的問題,往往是特定場景的問題,如果之前沒有遇到過,一時之間也很難幫你解決。頂多提供一種思路。

因此,自學能力真的很重要。具體來說,表現在以下幾點。

第一:善用搜尋引擎

說句實話,技術遇到的問題,只要不是最新的,80% 的問題都可以通過搜尋引擎找到相應的解決方案。記得,我剛入職場的時候,有一段時間,遇到問題的時候,第一時間總會問身邊的同事有沒有遇到這樣的問題。等他們比較空閒的時候,一般會跟你講解,忙的時候,也是叫你去百度或者 google 搜一下。

當然,搜尋的話也有一些技巧。這裡就不展開說了,建議大家多用 Google,Github,StackFlow。

第二:學會舉一反三

平時工作中遇到的難題,不要僅僅停留在表面,要通過現象去分析背後的原因。比如說,開發的時候遇到滑動衝突,通過搜尋引擎在網上找到相應的解決方案了。這是第一步,但還不夠,我們不僅要知道解決方案,更重要的是要了解為什麼要這樣解決?有沒有更好的解決方案。

如果我們僅僅停留在抄的層面上,bug 稍微變化一下,下次你還是解決不了。因為工作中遇到的 bug 總是千奇百怪的,但十之八九,掌握了原理,解決思路都是差不多的。

第三: 形成自己一套解決問題的思路

解決問題的思路,這個跟工作經驗有一定的關聯。資深的工程師,遇到問題的時候,對比普通的工程師,往往能較快定位到問題根源。這跟個人的積累和經驗有空,一時之間很難找到適當的例子說明。也許這就是隻可意會,不可言傳吧。

那我們平時開發中遇到的 bug,你的解決思路一般是怎樣的?

這種一般分幾種型別的 bug。第一: crash 的話一般比較容易解決,一般從堆疊可以看出資訊,再結合程式碼或者搜尋引擎可以定位到問題。

第二種:邏輯錯誤的 bug。這種型別的 bug,我們要先定位到大概的程式碼,再結合 log,看是哪裡出錯了。但有時候,使用者反饋回來的 bug,往往不是不是必現的,是偶現的。這時候,就需要一步步分析了。


覆盤總結能力

總結對於每一個人來說都非常重要,這點是毋庸置疑的。

相信大家也經常遇到這樣的場景。

  1. 這種型別的 bug 我以前遇到過,但一時半會不知道怎麼解決了。
  2. 我以前明明是這樣寫的,沒問題啊。
  3. 這種功能我以前做過,找了半天,找不到以前的程式碼了。

剛開始實習的時候,這種情況我經常發生。仔細想來,一般有以下原因。

第一:人的記憶性是有限的,不可能記住所有的東西
第二:沒有及時總結

還記得這句俗話嗎?好記性不如爛筆頭。平時我們看文章,或者跟別人探討,覺得某些觀點挺正確的。但事後就是想不起來,這是為什麼呢?這是因為我們只停留在表層,沒有真正轉化為自己內在的東西。你記性好,當時記住了。但你能保證十天,一個月,一年之後,你還記得住嗎?

做筆記的難得之處,是你的思考過程。當你著手記筆記的時候,你的大腦在思考,我要怎樣用簡短通俗的語言記錄下來。這在無形之中加深了你的印象。一段時間後,即使你忘記了,但當你回看以前的筆記的時候,我們往往會吸收地很快。

當然,我也不贊同一味地死記硬背。生活中的瑣事那麼多,不可能事事都記錄下來。挑選那些你覺得重要的,有感觸的即可。

那可能有部分問就會問了,什麼是重要的?這裡我發表以下我的看法。

  1. 開發中需要經常用到的。這些你肯定需要記住,不可能說每一次你需要用到,再去搜尋,這樣效率多低。
  2. 第二,一些疑難雜症。針對某些特定場景的 bug 或者需要注意的。

人的一生也是一樣,是一連串的故事組成的。我們的一生,究其到底,不過是所有經歷事情的總和。我們的昨天和今天,決定了我們的明天。就像種瓜得瓜種豆得豆一樣。

我們有時候就是有這樣的一種錯誤,覺得今的事情不用總結,以後需要用到的時候,以前所有的認知會自然而然得回來。這是,這只是我們找的一個藉口,為自己的懶惰的一個藉口。其實我們心裡明白,今天的總結會對明天有著莫大的幫助,但是懶惰總能戰勝我們的理性。


技術素養

前面這兩步做好了,在所在的技術領域專心工作幾年,不敢說你成為一名技術大神,但至少成為一名高階,資深工程師。

什麼是技術素養呢?

在我看來,包括以下幾個方面。

第一方面:技術深度和技術廣度。

作為一名技術人,技術還是最重要的。它是我們的專業技能,也是我們謀生的重要技術。

技術深度,簡單來說就是你在技術領域的鑽研程度。假設有 A,B,C,D 四個領域,我們在 A 領域有很深的鑽研和造詣,碰到 A 領域的疑難雜症,我們基本能很快地解決,這就是技術深度。而你如果 A,B,C,D 四個領域都有一定的瞭解,這就是技術廣度。

那怎樣平衡好這兩者之間的關係呢?

個人的看法是如果你想往技術發展,先鑽研某個領域,爭取有較高的造詣,之後再橫向發展,瞭解其他的領域,做到有一技之長,這將形成你獨特的優勢。

因為你在 A 領域有較深的造詣之後,你將有一定的不可代替性,這就是價值。而且,現在大公司分工明確,很多時候需要的是專才,而不是什麼方面都懂一點的人。當然,我不是不建議大家全面發展,只是說,先鑽研某個領域,再想其他領域擴充。

第二方面:大局觀

大局觀,簡單來說,就是看待事物的視野和角度。具體到技術人來說,主要是技術棧,技術方向的選擇,以及業務方向的洞察。

一個技術團隊的領導,往往需要有較好的大局觀。
主要表現對於各技術棧的選擇和比較、架構設計模式的考慮、設計策略等。一個良好的架構,往往能夠以最小的代價應對變化無窮的需求。同時,注意:架構的選擇,需要結合業務場景,脫離業務場景來談架構都是耍流氓。

業務能力的洞察,主要是指結合業務和技術,能夠做出合適的判斷,要清楚當下那些任務優先順序別比較高,做什麼事情收益最高。技術與業務是分不開的,在很多情況下,技術是服務於產品的。任憑你技術做牛,效果做得再酷炫,效能做得再好,產品沒人用,那就沒什麼卵用。因為在這裡,你的技術產生不了任何價值,而公司說到底,就是一個盈利機構,你覺得可能一直燒錢下去嗎?

當然,對於產品天馬行空,異想天開的想法,我們也要懂得合理拒絕,不能由產品牽著鼻子走。

舉一個例子,去年 去年“網傳中國平安產品經理與開發因「根據手機殼顏色改變app主題」需求打架一事”,這反映了一個公認的事實,程式設計師或多或少與產品經理存在著某些矛盾。最好的解決方案是,技術人懂點產品思維,產品懂點技術,考慮問題多從對方的角度出發。


總結

說到底,就是要培養自己的核心競爭力,形成自己獨特的優勢。而如何確立自己的競爭力,就需要我們逐步培養,技術深度,技術廣度,業務洞察能力等。做好每一項,都不是一件 easy 的事情。尤其是技術深度,業務洞察能力。後面有時間,再單獨寫文章與大家探討技術深度的問題,因為我現在也不是有特別深的理解,哈哈。

記住,職場中,做好自己本職工作的同時,請記住要培養自己的核心競爭力。公司只是你工作的一個平臺,不是你的全部。你離開了這家公司,你還能瀟灑地生活嗎?

以上僅屬個人意見,某些地方有些紙上談兵,不喜輕噴。

Android 技術人

掃一掃,歡迎關注我的公眾號。如果你有好的文章,也歡迎你的投稿。

相關文章