身處小公司,如何在2年內快速突破,拿到大廠offer?|掘金技術徵文

AWeiLoveAndroid發表於2018-09-19

本文是我一個朋友的經歷,謹以此文告訴那些嚮往更好的未來發展而一直努力奮鬥的朋友們。不管你現在身處什麼小公司,都不要氣餒,機會還是有的,只要你敢於拼搏奮鬥,我相信你一定可以成功的。

首先介紹一個我的朋友:我的朋友小王,從小就能吃苦。他是一個不知名的大專畢業的,學歷不算很高,學的計算機專業。從學歷來看,他是沒有優勢的,不是985,也不是211,又不是本科。先行條件他都不具備。那麼究竟它是如何進入阿里的呢?請看下文詳細描述:

我這裡就大概概括了幾點成功祕訣,僅供參考學習:

1、知己知彼百戰百勝

做技術和打仗是差不多的,你時時刻刻準備著開發,就為了上線(上戰場)。首先你要對自己有個明確的認知,你會那些技術,哪些還不理解的。建議多去看看大公司的面試題和麵試要求,看看他們主要技術方向有哪些方面,然後作為參考去鞏固學習。

技術測評這個建議每個月做一次。這個可以由你本人自評,也可以小組內部評價。如果你們公司有明確的kpi考評的話,那麼你可以把測評結果作為kpi的輔助工具。

一般來講,首先有一張很詳細的測評表,測評表主要包括技術分類,每一個技術概要,評分,然後是未來發展方向等方面。通過這個表主要把你的當月所學到的技術,用到的技術點都羅列出來,然後根據掌握程度細分進行評價,然後下一步需要努力的方向,以及技術在專案中的運用等。雖然小公司不具備條件公司給你做技術測評,也可能是獨立開發,沒有小組測評,建議還是做一個個人測評,對你自己的技術有一個更好的瞭解,方便下階段的技術提高和擴充套件。

2、學而時習之,溫故而知新

技術更新很快,可能你今天學了,一段時間沒有用到,明天就忘了。所以我建議不光要學習,更重要的是要多複習,把你學過的東西不斷的去鞏固溫習。

(1)關於做筆記工具選擇:

為了以後可以更好地複習,要養成做筆記的好習慣,如果沒有紙質的日記本,可以用有道雲筆記或者印象筆記之類的記憶工具,輔助你做筆記。

(2)關於思維導圖:

每一次做筆記之後,我們要做一個思維導圖去把筆記整理成目錄,通過它一目瞭然的可以看清楚整個筆記的結構,可以清晰地看到你要複習的關鍵點。思維導圖工具推薦:xmind、ProcessOn線上網站等。

(3)關於做筆記的方式:

關於做筆記不要僅僅是copy原始碼,也不要僅僅是copy別人的部落格,一定要抓住要點去做筆記。比如你查詢一個劉海屏適配,你把別人的部落格全文複製進來,收藏起來以後再去看,這種做筆記的方式是不可取的。你只需要抓住核心關鍵點就可以了,比如它是用的什麼樣的適配,根據什麼適配的,核心程式碼有哪些等等。然後就是之前收藏過哪些類似部落格,做一個綜合分析等,這既是做筆記,也是一種總結和思考。

3、懂得不恥下問,切勿趾高氣揚

技術雖然重要,但是態度更重要。端正態度也許你距離成功也不遠了。

不恥下問這是一種態度,是一種很難的的精神。看到網友的面試經歷提到過:有些大廠出來的人動不動嘴上就掛著我是哪個大廠出來的怎麼怎麼樣,經常炫耀,顯得自己很6的樣子。其實你要問他問題,他還一副高高在上的樣子,愛理不理的。其實可以看出來,雖然這些人身處大廠,但是這種人的態度不是很友好。人都是生來平等的,沒有誰高誰低。今天你在大廠春光得意,明天就被人搞下臺。得意忘形對你自己沒有一點好處,還落得一個不好的名聲。你會的別人不一定會,你不會的但是別人可能會,你要懂得不恥下問,你會發現,通過提問,你居然可以學到更多東西。

除不恥下問之外,同樣的還有一個很好的品質,那就是:謙虛。懂得尊重人,不恥下問的人基本都很謙虛。我那個朋友小王性格就很隨和,很謙虛,一點架子都沒有,戴著個眼鏡,看起來像是讀書人,其實他是一個技術大佬。

4、凡事預則立不預則廢

這裡講的是凡事都要有一個良好的規劃,不管是對工作任務的安排,學習的安排,還是對未來前途的規劃,都需要首先有個規劃。 古話說:“凡事預則立不預則廢”,說的不是沒道理的。你現在身處小公司也沒關係,不要心灰意冷,也不要唉聲嘆氣,工作很忙很累也不要抱怨。

你首先要明確一點就是你的目標是什麼?

如果是混日子,那你基本就沒有什麼好的發展了,程式設計師吃的青春飯大家都理解的,正是學習的好時機你不努力,你對未來沒有規劃,那麼你就算離開了那家公司還是沒有什麼好的發展的(創業或者家裡有礦除外)。

我相信大家都不想混日子的,都想有個更好的發展。那麼你就要從你進公司開始,做了計劃。你現在應該怎麼樣朝著目標前進。你的未來還缺少什麼?有哪些要求是大廠需要的,你需要以後去跟進的?然後你就要制定一個短期計劃,短期內你要實現什麼突破,攻破什麼技術方案,有什麼成果,怎麼運用到專案中。這些你都要做一個計劃表,安排出來,每天抽取一兩個小時去按照計劃學習。

有人會問:“我一個小公司的,我做功能的時間那麼忙?哪有時間安排這安排那的?”其實這是一個誤區。時間是擠出來的,我們每天可以抽取一兩個小時學習吧,上班途中看公眾號,下班途中看書學習,這都是充分利用時間的示例。你去看看一些成功的大佬,他們的工作事情安排都是有計劃的,他們一般不會做無計劃的事。其實你可以在網上發現王健林的作息時間,幾點起床,幾點看書,幾點開會都有明確的安排。雖然我們是一般人,但是我們也可以給自己做一些小目標,從一個個的小目標開始著手去學習。王健林說:“給自己一個目標,賺他一個億試試。”我們當然不可能那麼做,我們可以這麼做:“先努力寫100W行程式碼試試。”

比如你準備學習自定義控制元件。短期一個月之內你可以制定一個目標,研究自定義View的所有有關的API使用。如果沒有學完,那就繼續排期學習。後續當你熟悉之後,你就可以繼續安排一兩個月甚至更長的時間去看View裡面的原始碼,比如繪製流程,渲染機制,事件分發機制等,看看它們是如何進展的。再然後就是怎麼靈活的運用到專案中。

5、不積跬步,無以至千里

技術的發展太快,開發中的需求多樣,你如何快速把你所學的技術用來去開發一個需求,這是一大難題。往往有時候你看到一個需求,但是以你現在的能力還做不了,但是隨著你不斷的學習和積累,以後遇到同樣的需求,你就可以得心應手去做了。這就是一個技術的積累的問題。

另外技術的積累對於解決問題的能力的提升也很重要。當你的技術有了一定的積累的時候,你看到一個bug,你就會不自覺地大斷點除錯,看Debug日誌,看上下文資訊,看各個引數賦值資訊,看程式碼有沒有低階錯誤等多方面去檢查。再比如記憶體洩漏問題,當你使用工具檢測發現有記憶體洩漏時,你正常是不容易發現的,可當你平時學習了記憶體洩漏檢測方式和排查方案,你就會按照一些方案去解決記憶體洩漏,可能方案並不是唯一的,但是通過逐步排查,總會找到問題的根源。這就需要技術的不斷積累和實踐才可以做到。像小公司天天寫業務程式碼,只要上線推廣即可,一般是不太會注重App質量的。但是作為一個程式猿來講,對自己嚴格要求一點,App質量方面也儘可能的去把控一下,就算公司沒要求,你也要自己去嘗試著做這件事,因為這對於一個大型應用是至關重要的,所以你可以從小應用開始著手去鍛鍊積累你的技術。說不定某一天當你的使用者量增長到了幾百萬甚至幾千萬的時候,你有了前面的積累,再去做的話,就會有一些經驗可循了。

比如大廠的App基本上都會用到外掛化你技術。那麼建議首先你去用一下熱門的外掛化框架,拿來之後封裝一下用到專案中。然後就是深入框架的原始碼,結合一些大佬的部落格和相關書籍,試著去分析原始碼,自己做總結,研究實現原理,研究外掛化框架跟java虛擬機器有什麼聯絡,AMS,PMS,Binder機制這些是如何運用的,hook是如何做的。這是一個漫長的過程,看安卓framework原始碼是很痛苦的,需要長久的目標才可以做到。

6、燕雀安知鴻鵠之志

身處小公司也不要灰心,相信自己是可以的。不要因為別人的嘲笑就停止追逐的腳步,別人進了大廠只是比你快了一步而已,有啥可擔心的?你要有足夠強大的內心支撐,你才可以抵擋住外界的質疑。俗話說:“燕雀安知鴻鵠之志?”只要你樹立信心,堅定不移的去做,哪怕專案再小,只要你做的能夠體現出一定的水平,那也是非常可取的。畢竟面試第一步基本都是拿技術說話,不管是基礎的,還是底層的,都不要怕,只要你掌握的足夠多,並且有實戰經驗,下一步就好辦了。

7、見風使舵、順勢而為

技術的發展太快,我們是應該根據時代的發展選擇技術,還是應該按部就班用以前的舊方案,這是一個難題。這個問題應該辯證的去看待。

首先要把基本功練紮實,先從深度上去學習,就像前面所說的要制定計劃,要在技術上有積累。然後我們要在廣度上去橫向擴充,不斷的擴充套件其他的語言技術棧,比如指令碼語言groovy、python;比如js、react、vue等前端技術。

現在的Android開發不像以前的開發那麼簡單了,現在純原生的少,混合開發多,跨平臺框架和工具層出不窮。但是不管怎麼變化,我們一定首先要了解怎麼使用,然後我們要理解核心機制,至於用不用到專案中需要結合專案實際做決定。比如rn前兩年很熱門,裡面無非就是react語法,核心是js橋接。比如Cordova也是用的js開發。所以我們適當的掌握一些前端語言也是有好處的,比如js、html5這些建議學一下,就算不是很精通,能夠寫就可以了。還有react、vue這些框架建議瞭解一下。近兩年小程式也火了一波,熟悉前端技術棧,對於小程式開發是很快上手的,特別是react、vue等前端框架的使用能幫助更好的開發出質量高,好維護的小程式專案,也是值得推薦的。

2017年 Google I/O 大會上,谷歌介紹了Flutter,自此之後眾多Android開發者對此很感興趣,表示上手很容易,學習成本低,效能也不錯,其實也是一個不錯的跨平臺技術,可以嘗試用一下,畢竟它是新出來的,社群還不完善,目前正式版還沒出來,用在專案中會有什麼意想不到的坑無法得知,不過可以自己寫一些小專案玩玩,體驗一下這個技術帶來的便捷和體驗。

8、思想有多遠,就能走多遠

這裡面的思想主要有兩種:技術和管理。

(1)技術層面來講,你想在技術上深耕,必須要對技術有足夠的認知度,不管是深度還是廣度,你都要具備一定的水準。具體技術的要求可以參照大廠面試的要求去提升自己。建議一定要有著架構的思想去看待程式設計。

1.寫程式碼不能懶散,一定要規範去做,嚴格按照Java程式碼規範去做,另外你可以制定一個程式碼準則,哪些需要約束的,哪些需要遵守的都是要有個準則,按照規則去做。
2.一定要有一個文件,不管是介面文件,還是專案文件,或者是專案本身的需求文件之類的。小公司可能比較簡單,很多都是口頭說一下,扭頭就變了。建議一定要有書面的文件做記錄,這麼做的好處:一是為了記錄需求變更,有據可查;二是為了規範流程,減少不必要的溝通、甩鍋和衝突。
3.一定要注重程式碼質量,擴充套件性和穩定性都要兼顧。因為往往一個app的發展會不斷的迭代延續下去,修修改改是很正常的事情,那麼在寫程式碼的時候儘可能的多預留介面和開放的程式碼,方便以後擴充套件。需要熟練掌握常用框架MVP,而MVC和MVVM(谷歌的)一般用的少不推薦,專案中靈活封裝MVP三層結構程式碼。如果是獨立開發,那麼你從專案初期就要確定專案應該如何去組織架構,怎麼分層,需要用到哪些技術?哪些開源庫我可以自己去實現的?哪些需要修改原始碼以便專案使用的?如果是接手老專案,首先也要熟悉業務邏輯,然後就是修改讓程式碼更嚴謹,邏輯更清楚,層次更分明,擴充套件性更好。
4.上面也講過多多學習,學習開源庫的原始碼,學習framework層的原始碼,學習jvm。熟悉底層和原始碼是做架構必備的技能之一,你掌握之後可以有更多的解決途徑。
複製程式碼

(2)管理層面來講,如果你有興趣當了小組長,管理開發組裡面的人,那麼你就一定要多看一些管理的書籍,專業的理論是必備的,如何合理的安排任務,確保任務按時完成,如何提高團隊開發效率,如何帶領團隊技術提升,如何給團隊帶來更多好處(比如專案獎金等),如何承擔該承擔的責任,維護團隊的利益,如何穩定開發組員的情緒,如何應對突發情況,如何應對上下級之間的關係等。這些方面都是需要是瞭解和熟悉的,當你真正的做過管理之後,你才會發現這裡面的門路其實是很複雜的。

9、魚逐水草而居,鳥擇良木而棲

一定要跟著比你厲害的人學習,不管來自哪裡,你身邊如果都是優秀的人,那麼你也差不到哪裡去。有句古話說得好:“魚逐水草而居,鳥擇良木而棲”如果你想去大廠挑戰自我,一定要不斷的去和大廠的人多溝通,哪怕是實習生。多向他們學習如何開發的,團隊管理是怎麼做的,他們需要用的什麼技術等。

多出去走動,多參加一些論壇和技術活動,多認識牛人,多喝同行交流,開拓視野。當你的圈子越來越大的時候,你會發現內推其實也是很容易的。如果有經常寫部落格,寫開源專案或者開公眾號的朋友,那就更好了,可以向他們取經學習一下。這些東西既可以鍛鍊你的文筆,同時也是你個人實力的一個展現的平臺,還可以收到一些打賞,其實也是不錯的選擇,當你真正參與一些有意義有價值的開源專案的時候,其實這個含金量比你寫程式碼相對來說是更高的,所以好好把握,前提是你有足夠多的積累和技術輸出,你開源的東西能夠帶來真正實用型的幫助。


【最後】技術不是唯一賺錢的工具。開發是吃的青春飯,當你年紀大一點,基本都會轉管理路線了,或者有的自己創業了。你除了技術之外,還可以關注一下管理,萬一哪天你進了大廠,剛好缺個組長,你不就有機會可以去試試嗎?

另外面試是多方面因素決定的,比如你的技術、言辭、表情、衣著、以及給人的感覺如何等這麼多因素都有可能影響結果。既然決定要去面試,那就要做好充分的準備,該記住的技術點一定要掌握好,自然發揮就好,大廠也沒有那麼可怕,相信自己,你可以拿到大廠offer的。


本次徵文活動的連結 juejin.im/post/5b923a…

相關文章