BAT之類的大公司的android程序員跟普通公司的android程序員的技術差距在哪?

做了一年的android開發,感覺自己會的都是一些表面的知識,沒有什麼競爭力,就想去學習一下framework層的相關知識,提高一下技術水平,那怎麼樣才能達到大公司的android程序員的水平,差距是在對android系統的理解的深度上嗎?


正好最近試用期過了,也在幫上家公司的同事修改簡歷。對比BAT這類公司跟普通公司的工程師,其實他們的差距其實本來不大,不管是誰都只是努力地做好自己的事情,只是大公司這類的機會要來得多。

說說差距,主要是:深度、求新

1. 深度。拿我上家公司的同事的簡歷為例,他提到了Android中圖片的動態載入。好傢夥,這是一個比較有難度的問題,至少如果你不懂ClassLoader、一些系統對應的代碼是搞不定的。但是深入地問他:圖片載入框架怎麼解決不同資源ID重複、怎麼檢查對應的系統API是否可用(因為用反射調用了很多系統API,它們不是Public的)、這個方案是怎麼選型的。他都沒有做好回答的準備。大廠裡面因為用戶量大,牽一髮而動全身,每一項新技術的選用,都會經過至少兩個以上方案的對比,還必須拿出對應的數據證明它對性能的改進。而這都是本來能力跟你同一個level的人做的,只不過他們在大廠中不得不去完成,他們有更多的時間深入一項技術,而不是拚命做業務。

2. 求新。這是我來大廠時的感受,新技術會以最快的速度得到傳播,得到應用。大廠內部很鼓勵這樣的事情。在React Native一出來,[天貓就已經在進行改造](如何評價 React Native? - iOS 開發)。Android M一出來,微信的工程師們就已經想好了[流氓方案](Android M doze特性預研)。大廠中求新求變的人很多,你可以看[Android 開發有哪些新技術出現?](Android 開發有哪些新技術出現? - Android 應用)。

最後,你如果想了解非技術上的差距,可以看看[在天貓無線工作是一種什麼感覺](在天貓無線工作是一種什麼感覺? - 匿名用戶的回答)。這個回答基本上比較切合實際。


一.責任感,僅僅一句代碼的問題就會影響千萬上億用戶的使用;

二.快速學習,大公司自己實現中間件、協議相當多,這同時也是學習成本,而且迭代速度相當快;

三.思考.代碼需要一定拓展性,因為可能隨時會接入新的技術,不能自己坑自己啊,因為代碼會經常重構。

當然肯定不是所有都這樣,至少大部分吧。

所以如果你覺得符合,那完全可以進大公司。


牛X的不是一點點啊 你看Bat他們的產品都知道啦 它們全家呢 反正你手機或者電腦裝不下


大廠有專門的大牛研究底層,框架,開源技術,所以業務層的程序員只要專心寫好邏輯就好了, 不一定要專門研究的很深,時間長了,只對本廠的東西熟,換一家就不會寫了。 小廠的要多花時間看看業界新聞,看看良心大廠分享出來的東西,時間長了就可以進大廠當大牛了。


熟練掌握鏈式啟動就可以了


大牛很多,但是也有普普通通天天寫業務邏輯的「碼工」,他們跟小廠碼工的差別在哪裡呢?邏輯性、基於邏輯的溝通能力、做事的靠譜度,出現奇葩碼工的概率遠小於小廠。普通公司的開發人員良莠不齊差距非常大,而大廠的員工水平下限比較高


大公司android項目你合個流都會限制你代碼提交大小、方法數增加限制、變數增加限制,逼著你去優化代碼,去深入思考,當然不思考你也能混過去。大公司的新人有時挺慘,因為沒什麼經驗,上來提交了一行代碼,結果不小心把限制多多搖搖欲墜的程序架子弄塌了,直接被拉到大群里批,受不了的就跑路了,沉澱下來的後來都成為了高級工程師。小公司怎麼快怎麼來,初始累加沒這麼多限制,看起來幹了好多活,也感覺自己很牛逼了,但很多時候卻比較難沉澱下來深入思考。


想了想,還是匿名吧。

我跟你說,你在微博上看到的大廠程序員,只是其中一小部分。而且,大廠程序員普遍能吹。

干過兩家,不告訴你是哪兩家。做內部代碼安全審計。我跟你說,那代碼寫的跟shit一樣。而且因為大廠工資高,普遍沒有上進心。尤其是B。一年兩次調級,調級又不看代碼質量,只看PPT吹NB的水平。我做了什麼什麼,但是做的效果不說,有多少漏洞不說,有多少BUG不說。

尤其是畢業就進了大廠的,更是廢物一堆。反而是小廠的程序員,比較謙虛,而且愛讀書。如果小廠再有一兩個眼界開闊、技術紮實的總監,那更是不得了。


學會了如何開發全家桶應用


新晉移動開發碼農表示覺得自己也挺水的,不過在大公司里學習起來會有很多好的資源,小夥伴們也非常樂意幫助你,加之做的業務對效率和質量要求嚴格這也促使自己去不斷學習,雖然和身邊大牛比還是差距很大,但已感覺漸入佳境。


匿了。

看了大家的吐槽,其實不僅是軟體互聯網公司有這樣的問題,在其他行業也有類似的現象。

我所在公司歸屬電子行業,幾年前海外上市,雖然只是中等規模,但在特定領域技術領先。

先說結論:

大公司的工程師都普遍愛吹,不謙虛,而且有一種莫名的優越感,不願意分享技術,而且技術知識廣度不夠,做事按部就班(在大公司可能是好事),不喜歡承擔責任。

先說一下我自己,因為只待過一家公司,所以認知可能有點片面,僅供大家參考:

本人碩士畢業後就加入這家公司。當時公司剛成立,業界毫無名氣,甚至連個公司主頁都沒有,我拿到offer時一度懷疑自己會不會幹兩個月公司就垮了。後來發現那一年進來的人都是應屆畢業生,原因就是公司根本沒錢招有工作經驗的人,其實人家也不願意到這種小公司來。然後一幫應屆碩士,博士就在幾個4,5十歲的公司創始人帶領之下開始干,中間的過程就不說,小公司狂加班,沒福利什麼的大家都知道的。接下來的幾年,公司依然是小公司,依然只能招應屆生。因為公司小,所以公司的創始人都是直接帶大家做設計,所以個人感覺相對於學校成長還是很快得。工程師之間的關係也都沒覺得有什麼特別,有問題大家一起討論,有新人進來,老人幫忙帶一下,很多人都還是師兄弟,年齡差別也不大,所以都能夠很快融入到一起,不會有什麼隔閡。

直到公司上市前的一兩年。那時候公司開始盈利,然後陸陸續續社招了一些工程師。大部分的工程師都是從行業里的大公司跳過來的。從那個時候起,我發現跟他們的交流變得不是那麼坦誠了。有時候在討論一個技術問題的時候,他們會很驕傲的告訴你他們以前的公司技術指標可以做得多麼多麼牛,但是你問他怎麼做的,他又會故作神秘的告訴你這是機密不方便說。然後你後面發現他最後採用的設計還是參照我們原先的設計方案。有時候你幫他檢查他做的東西的時候,發現他原則性的錯誤,給他指出來後不願意爽快的承認是自己的問題,喜歡東扭西扯找理由。對於系統的理解非常差勁,不願意花時間去把整個系統搞懂,只願意做自己的那塊東西。不願意給同事讚揚和肯定,特別是在領導面前。

不好意思,總結變成了吐槽。當然,我相信我認為是問題的地方,可能恰恰是是他們在大公司的生存之道。大公司可能更希望你能安安心心的做一顆螺絲釘。而且那些去大公司的很多都是最頂級的大學畢業(比如我吐槽的那位是海龜),所以難免心中會有一絲的優越感,當他在大公司做了十年相同的東西後跳槽去一個所有相關技術都要懂的小公司的時候,他應該會受到很大的衝擊。特別是被比自己年齡還小的工程師指正一些看似簡單問題的時候,心裡肯定會不好受。

我一直很慶幸自己畢業那年進了一家小公司(當然還要帶一點點運氣,不是每家公司都能上市的)。除了能跟公司一起成長之外,我不會擔心我換家公司我會不適應,只要這個行業還存在,我就不擔心沒飯吃。

所以,沒進大公司的同學不要擔心,至少你們在不斷充實你們的技術。進了大公司的同學,也還是多利用大公司的資源為自己充電,畢竟你能一直在一家公司待下去的可能性是很小的


差距在工資


你見過比 BAT 的 Android app 更糟糕的 app 嗎?

反正我沒見過。


在 幾個還湊合的廠子混過,說點個人感受吧:1 因為業務場景不一樣,比如大點的廠子自己做中間件,自己的SDK,要求你的擴展性,速度,流暢度,高可用(和伺服器一起配合高可用)等要求高,這些東西在廠里做一段時間後就會有這種意識和思維,後面就會像樓上說的那樣,漸入佳境,或者輕車熟路。2用戶量不一樣,那麼安全性等很多方面要考慮,不過一般來說有自己的安全通用框架神馬的,還有就是用戶量多了可能對各種異常場景的狀態碼的覆蓋,盡量保證任何一種異常情況都是知道異常原因的,莫名其妙的異常情況儘可能的少出現。3有相關的框架可用,對使用的技術有限制。


推薦閱讀:

安卓的進程管理軟體是否科學?
如何解決安卓系統吃內存、侵佔ram的問題?
Android 開發時,如何實現和伺服器的數據同步 ?
Android Studio連接真機沒反應?
Android開發中,有哪些讓你覺得相見恨晚的方法、類或介面?

TAG:程序員 | Android開發 | 大公司 | Android | Android工程師 |