iOS 2019 隆中對
又到了回首過去,展望未來的時刻。最近密集的企業裁員訊息促使我們重新思考一個問題:如何規劃我們的未來。前有“程式設計師幹到 35 歲就沒人要了”,後有“iOS 開發沒人要了”,真是慘呢。

到底是不是“寒冬”
有人統計後發現,過去每年年底都有人說是寒冬,只是一個月經說法。
也有強者說,我覺得“寒冬”是弱者的說辭,我還是很好找工作的呀。
我覺得上面兩個邏輯都是欠妥的:
我以前用小拳拳錘你胸口,你說疼。我現在用錘子錘你胸口,你說哎呀,疼!!!你以前說疼的時候不怎麼疼,那現在也不疼。
至於“寒冬”是因為你不夠強的邏輯有句老話叫做“站著說話不腰疼”。按照這個邏輯只有南北極才能叫冬天了,非得所有人都覺得冷才能叫冬天?
我覺得招聘的資料可以最直觀的體現現在的行情。100 offer 的資料顯示: 相比於 2017 年,2018 年 Android 程式設計師人均面邀數減少 40%,iOS 程式設計師降幅更高達 57% 。

近乎腰斬,都打五折了你說是不是大減價?
從”稀缺”到“過剩”,再到?
一個行業處在上升的時候,市場上的技術人員肯定是稀缺的。業務需要有人做,不可能等兩年能招到經驗豐富的人才啟動專案。所以初期會有大批的初級從業者湧入,招聘市場的反饋又肯定會慢一拍。不斷的有新人湧入,而且後面的新人的數量也在不斷增加(我國培訓機構的效率真的是沒得說)。供需真正到達平衡點的時候,招聘上游培訓班的人並不知道,還在持續產出。因此在某個時期市場上出現了大量的新手過剩。這是當時廣為流傳的“iOS沒人要了”的起因。

一個崗位一天收到幾百封簡歷的事情大家可能都有耳聞,我說一個我身邊看到的例子,希望能讓大家對當時的情況有一個更好的理解。當時有一個人朋友的朋友想學習 iOS 開發,於是就加了我微信想問諮詢。他在一個 2.5 線城市的一個醫院藥房上班,以他的專業能力在這個行業做下去也沒有什麼上升空間。他一直想找一個機會換一條賽道。當時移動網際網路也正是風口,他又看到那些招聘機構的廣告,培訓幾個月月薪 8000 以上,不乏上萬。對於一個傳統行業的人來說,這是一個很誘人的機會。他找我的原因是糾結是去上海上一個線下的培訓班還是直接上那種線上的培訓班。我說你連程式是什麼都沒概念,花更多的錢去到線下也不會得到什麼本質的提升。先報個初級班先了解一下什麼是程式設計再考慮要不要去線下。
他只是那批找不到開發工作的人的一個縮影,他們期待有一個機會可以通過幾個月的努力,月薪上萬改變人生的軌跡。“浮躁”這個詞可以特別好的表示那個時期的狀態。 也說明了程式設計師真的不是一個完全沒有門檻的職業 。當時肯定有大批的新人找不到工作,然後另謀出路,但是對於真正有志於做程式設計工作的人影響並不大。還是很容易在這些魚龍混雜的人裡脫穎而出,所以當時雖然一邊是論壇上找不到的工作的人的抱怨,另外一邊社群裡卻充滿了“快活”的氣氛。
不久之後一大批跟風創業公司倒閉,這些公司的程式設計師當然也失業了。於是“iOS”開發沒人要了又有了傳播場景。但是依然是大浪淘沙,如果一個程式設計師沒有放棄對技術的追求,他還是可以很快找到下家。但是本來只是因為運氣好找到一個高薪的工作的人,自然是要被市場淘汰的。 死掉的人不會開口說話,我們在網路上不怎麼看到我轉行了不幹 iOS 開發了,不是這件事沒發生。是轉行的這群人沒到網上說,或者他們說了沒進入到我們的圈子裡。我們沒看到,但是它在確確實實的發生著。冷靜的算一算就知道每一波都至少淘汰了幾萬人。
可能沒有下一個“春天”了
那麼現在是怎樣的情況呢?18 年上半年的智慧手機出貨量同比比去年下降了 10% 左右。移動網際網路能滲透的地方都已經滲透了,移動市場的使用者數已經接近飽和了。更重要的訊號是:iPhone 第一次賣不動了。雖然從喬幫主去世以來,大家都說蘋果要完,然而伴隨著一次次的“真香”後蘋果的股價上了萬億。不過隨著 XS 的價格再一次上漲,這次是真的賣不動了。而且在中國的營收下降了一半!!!
過去幾年裡移動網際網路也沒出現新的獨角獸了。本來也許各種“共享”類 app 算一個,但是現在已經明顯都失敗了。互金的 P2P 反而倒閉了一大批。資本都是逐利的,在市場初期可以接受虧損,因為認為後期有盈利的可能。現在行業格局已經確定了,一個公司賺不了錢就是賺不了錢。
那麼最後面臨的情況是,你被裁員了,雖然你有著不錯的技術能力,但是你也未必能找到一個能與之匹配的下家。以前因為不斷有新公司的出現,與之對應就不斷有新崗位放出來。現在市場上新的公司少了,對應的坑也就少了。你要去的更好的位置早就有人坐著了,除非有人退出了才會招一個人補上來。
我來量化一下這種感覺:現在在拉勾上搜杭州 25 - 50 K 的 iOS 崗位只有 4 頁。扣掉一些只是掛著佔位的企業,其實你真正可以投的崗位大概就是 30 個崗位。這些崗位再根據你的個人喜好挑一些公司面試,再到你通過公司的面試,最後你的選擇餘地其實是很有限的。你還要考慮到隨著時間的推移,滿足技術專家能力要求的人會越來越多,但是崗位並不會隨著增多,崗位是根據市場增長走的。
我覺得未來大概就是現在桌面軟體的場景。電腦依然在賣,桌面軟體的開發也有市場。但是你會發現過去幾年裡,用來用去都是那麼幾個軟體。每年又有多少讓人驚喜的桌面軟體出現呢?只不過移動開發的基本面比桌面更大一點。
柳暗花明又一村
算命經常會說若干年後你會有一場大劫,但是你現在可以花 998 讓他做一個法事,這樣可以幫你渡過那個劫。我覺得這句話也適用大多數 iOS 開發:數年後你會有一次主動或者被動的離職。前面我說了,因為市場飽和如果繼續這樣下去不做點什麼找到滿意的工作的概率不太高。下面是我的幾個想法。
硬轉行

移動市場發展了 10 年停止增長,那我換個繼續增長的行業行不行?你還別說,真。。。真的可以。這個思路你唯一需要擔心的是:你完全換了個崗位,你原來的開發經驗有多少的轉換價值。假設你做了 3 年 iOS 開發,然後你自學了一些後端技術,寫了幾個小專案,滿打滿算一年後端的開發經驗。那麼你跟做了一年後端開發應屆畢業生開發能力能拉開多大的差距?好的情況下你原來的開發經驗可以讓你更快的學習後端的技術。比如你有更好的程式碼質量,網路、併發、作業系統相關的你可以學習的更快。雖然你現在後端相當於 1 年經驗,但是兩年後你的技術能力已經相當於三年的後端。這樣雖然初期你要接受薪水下降的預期,但是兩三年後可以追平正常的水準。
值得關注的跨平臺技術:Flutter
立足於現在有的專業,再去奪取一些其他人的底盤把蛋糕做大是一個有效的思路。這就是為什麼各端的人發展到穩定的階段都希望有跨平臺的能力的原因。
JS 是一上手簡單的指令碼語言,各個平臺上又有現成的 JS 引擎。上層使用 JS 描述邏輯,各端提供 native 能力給 JS 引擎,是一個相當可行的跨平臺的方案。這也是現在主流的應用層跨平臺技術模型。但在 RN 釋出了多年後,大家意識到了這個模型的根本性弱點:1. JS 作為一門動態指令碼語言,有著天生的效能缺陷。2. JS 引擎在各端有著不同的實現,如果底層的 JS 引擎 bug 上層的框架除了避開沒什麼辦法,甚至除錯起來都很困難。
所以下一個替代性的框架應該是能把程式編譯成二進位制檔案的靜態語言,各個端的引擎有著強有力的控制能力。Flutter 採用的正是這個技術架構。看好 Flutter 另一個原因是 Flutter 符合谷歌的利益。Flutter 如果要成功,需要谷歌在在各端提供完善的支援,這不是一個小工程。需要數年的不斷投入,如果廠家不能從這個技術中獲得利益那麼這個技術一定發展不長久。谷歌需要一個可以自己控制的開發環境未來可以使用在自家作業系統 Fuchsia 上。
做個和蘋果的對比,使用 Swift 可以開發 iOS 上的應用,也可以基於 AppKit 開發 macOS 上的應用。UIKit 是基於 iOS 提供的 UI 框架,現在為了統一 iOS 和桌面的開發體驗,蘋果未來會推出 UIKit for mac。這樣可以使用同樣的 UI 框架、語言開發兩個平臺的應用。對於谷歌也有著這樣的可能,基於 Flutter 可以是移動端的 UI 框架,也可以是未來 Fuchsia 上的 UI 框架。
Flutter 相比基於 JS 引擎的框架有著更廣闊的前景,能力也更強。我建議大家多關注一下 Flutter 的技術發展,未來說不定是一個很有用的技能點。
全棧
這裡的全棧指的不是什麼什麼都會一點的紙糊全棧,是一專多精的那種。
類比音樂表演裡的兩種角色:
- 一人樂隊。演奏歌曲時一個人同時處理多種樂器。
- 交響樂的作曲家。需要知道各個樂器的特色,然後寫出各個樂器配合的樂譜
我們追求的不是一人樂隊,不是一個專案裡我寫點後端,再寫點前端。而是更高的要求,能理解各個技術棧如何連線,能夠解決系統性的問題。而不是把自己侷限在一個小的細分領域裡。
融合機器學習
2018 年,機器學習終於過了概念的頂點。事實是檢驗真理的唯一標準,技術不能只留在紙面上,流行最後還是要基於能夠確實的提高生產力。雖然機器學習不是宣傳般的包治百病的靈丹妙藥,但是不可否認機器學習在一些領域有著極高的利用價值。
現在機器學習的使用場景一定是與某個細分領域結合,因為不存在一個通用的人工智慧模型。一定是某個業務的從業人員意識到有一個問題用機器學習可以解決的更好,然後使用某個機器學習框架解決問題。是一個自底向上的模式,而不會是自上而下式的。因此在做好了自身的業務領域後,可以多關注一下如何把機器學習的技術結合到現有業務中。
有一些場景機器學習的模型一定會跑在移動裝置上,無論是基於 CoreML 還是 TensorFlowLite。未來機器學習成為 app 核心的賣點後,對這個技術有所瞭解也一定會為你加分不少。