當前位置:
首頁 > 科技 > 十年一顧,iOS與Android 這樣改變了我們

十年一顧,iOS與Android 這樣改變了我們

關鍵時刻,第一時間送達!

2017,頂著劉海的 iPhone X 帶著「史上升級變動最大」的 iOS 11,依然碎片化嚴重的 Android 帶著「更快、更強大、更安全」的 8.0 來到我們面前,忽思十年初,那個觸屏的、沒有物理鍵盤的智能手機驚艷了我們,但連個複製粘貼功能都沒有的時光。

回首一顧,從 2007 到 2017,從諾記的 Symbian、摩托羅拉的 Linux、蘋果的 iOS、微軟的 Windows Phone、三星的 Tizen 到 Google 的 Android 等,移動操作系統也曾百花齊放,但經過十年廝殺各自蠶食,格局已相當明朗,只剩下了 iOS 和 Android 兩大巨頭。

在這之下,是大勢所趨給我們每一個投身到移動互聯網浪潮里的開發者所帶來的人生軌跡的改變。

去年此時,千播大戰正在進行,VR/AR 風頭無量,街頭巷尾皆可聞 AI。而相應地,原生的 iOS、Android 開發有了明顯趨於飽和的跡象,令無數的開發者產生了技術選擇的迷茫。而今年,有人說,移動開發已經是「明日黃花」,而有的人則認為是到了「精深」的清洗,以及無處不在的結合。

因此,在最新的 10 月期《程序員》封面報道「iOS & Android 10 年」中,我們特別組織了數十位開發者,通過十年改變回顧以及當下、未來,敞開心扉地聊聊自己曾經歷的或苦或甜的移動歲月,將他們的經驗分享給大家,希望能夠幫助所有正在進行移動應用開發的朋友們,在新的技術趨勢下,走出屬於自己的更好的開發之路。同時,也歡迎大家在留言里分享自己的十年開發故事。

浮生多變化,萬事有盈虛。十年一憶,我們共同走向下一個十年。

初入社會

2010 年夏初,三五個同學一行搭乘一輛破舊小麵包,第一次踏上了上海這片土地。也許是要「入境檢查」,小麵包並沒有帶我們進入大上海,只是把我們放在了安亭與上海交界處的安檢口。在武警戰士簡單的盤問之後,我們一行人步行通過安檢口,終於踏上了無數次在影視劇里出現過的「上海灘」。一番周折,當晚來到了早已聯繫好的求職公寓。我不願再去描述那所謂的求職公寓,畢竟對於我這種輕微潔癖症「患者」來說,那樣的環境實在無法忍受。如果非得描述,我只能用慘絕人寰來形容了。

像我這種在大學裡不學無術的人,找工作註定是個艱難的過程;任何公司都不願意招聘一個什麼都不會,且看不出任何潛力的野雞大學應屆畢業生。有些事本以為忘了,可一提筆卻又嗖嗖地衝到眼前。不記得是第幾次無功而返後,又一次來到一家小公司面試,做完面試題後公司老闆坐在了我對面,用充滿不屑又鄙視的語氣告訴我面試題答得有多差勁,他們公司隨隨便便一個人做出來的成績都遠高於我。也許是覺得自己話說得太重了,臨走時那位老闆勸我放棄這行,認為我不適合做開發。之後的很多個傍晚,走在公寓旁的小道上,在那泛黃昏暗的燈光籠罩下,我總用那句「陽光總在風雨後」來默默地激勵自己。其實,這又算得了什麼風雨,種瓜得瓜罷了。

最終,經過一個多月的折騰,我找到了份 Salesforce 的開發工作,可又在兩個多月後草草收場,灰溜溜地離開。怪不得別人,是我沒能融入那個團隊。於是,在同學的幫助下,我再一次踏上了找工作的征程,一如既往地不順利,但在最後卻又幸運地應聘上了一家 10 來人小公司的 Android 開發崗位。

是機遇還是陷阱?

這份工作給我帶來了極大的興趣,儘管公司並沒有其他人從事 Android 開發,更沒有人帶我。可我在一周的自學後竟然成功地開發出一款簡單的計算器 App。我從沒有像那時那般歡欣雀躍,從沒有像那時那樣熱愛我所從事的工作。在那裡,雖沒有人指導我 Android 方面的知識,卻有 iOS 部門的同事兼好夥伴廣祿教我一些技術方面的通用知識,並且認識了我迄今為止在上海最好的朋友 Lydia。然而這些沒有辦法讓我忘記微薄的薪資難以維繫生活所需的現實問題。當時的我出於對 Android 開發的極大熱情,在業餘時間開發了許多的個人 App,天氣、卸載工具、動態壁紙等各類 App 開發了個遍。毫不矯情地說,Android 開發這份工作給我在這座陌生的城市帶來了莫大的安慰,並讓我得以在這座城市生存下來。

我並非是個完全吃不了苦的人,只不過,上海的夏天住在一個十幾層樓高、三面全是玻璃的陽台里絕對是一種煎熬(前面沒有提及,在第一次找到了工作後,我就搬出了求職公寓,以每月 550 元的價格租了個陽台作為我的棲身之地)。熱得沒辦法就只能在客廳里坐著,等到半夜陽台里涼快些後再回去睡覺。住在對面的室友看我可憐,偶爾會叫我去那邊乘涼。住的如此,吃的就更馬虎了。中午在公司和同事們吃十幾塊的午餐,晚上就只能和工地上的大叔們一樣吃小區里八塊錢的盒飯了。在這樣的日子裡,我迫切地需要賺更多的錢。違法亂紀的事肯定是不能做的,我這體格即使想做也沒這本事。

在一次機緣巧合之下,我了解到了可以在 App 內植入廣告賺錢。於是 App 植入廣告成為了我當時獲取額外收入的唯一途徑。功夫不負有心人,經過我一段時間的運營,收入節節攀升,特別是在接入當時比較火的 Push 廣告後,廣告收入更是一路攀升到每月 3W+,並且持續了一年多的時間。彼時是 2011 年夏末,距離開始工作也就一年時間。當時的我覺得那是莫大的幸運,廣告收入和到手 2000 出頭的月薪比起來簡直就是天文數字。

然而現在看來,這件事絕對是我工作至今遇到了最大的坑。沒錯,這就是個巨坑!在此後的兩年多時間裡,我變得有點膨脹了。在本該瘋狂汲取知識的時間裡,每天都想著怎麼賺取更多的廣告收入。每天叫醒我的不再是 Android 開發的熱情,而是廣告平台的收入走勢圖。那段日子裡,我每天都會在凌晨一點之後睡覺,為的就是能夠知道當日的總收入數據,第二天早上又會早早地爬起來看看半夜又有多少收入入賬。

就這樣,工作前三年的黃金時間算是浪費了大半,直到後面一次和同學一起去盛大面試碰壁後,我才算醒悟過來。所以現在的我常會對身邊的小夥伴說,工作的前期對我們來說,收穫最大的不是每月的薪水,而是我們在工作中收穫、成長了什麼。而對於我,在前三年的工作中,我收穫的成長太少太少。

當下與未來

工作第七個年頭的我,在公司擔任 Android 團隊 Leader,業務開發已經慢慢從我的工作中剝離,取而代之的是要更多地考慮團隊未來技術的發展、團隊階梯的搭建、人員的培養、工作的安排等等。在此前撰寫的《安居客 Android 項目架構演進》一文中,我曾提到我們 Android 團隊正在做項目的模塊化重構,到十月初會初步完成這個工作。模塊化之後緊接著要做的便是插件化,雖說開源世界已經有了成熟的解決方案,但這涉及到了諸多如 Binder、AIDL、ActivityManagerService、PackageManagerService 以及 App 的安裝等知識。這對當前團隊是一次絕好的歷練機會。現在,我們採用了很多開源庫,從開源世界獲益良多,後面還會推動團隊也為開源世界貢獻一部分自己的力量。

都說上一個十年是移動互聯網的十年,下一個十年是 AI 十年。或許 AI 全面介入我們的生活可能還需要二十年、三十年,但這一定是未來的趨勢。我對人工智慧是充滿信心的,所以對於 Python 不太了解的我剛學完了 Pyhton 的一些基礎知識,也在了解學習一些機器學習的相關知識。

也許我並不會去從事相關工作,但對於大趨勢的了解卻必不可少。況且我也相信未來任何行業都會和 AI 產生交集,不了解人工智慧就沒法更好地展開工作。同時,我也在學習一些心理學和經濟學課程,以便更好地了解這個世界,更好地融入這個社會。在未來對於我們技術人來說,硬知識和軟技能皆是必不可少的。 未來充滿未知,內心也滿是焦慮,但我對未來卻是盲目自信的。

我從之前對智能設備一無所知的小白,到體驗過無數智能設備的過來人;從只知 Hello World 的學生到解決無數 Android 開發問題的工程師;從 naive 到 sometimes naive。從一開始因為對 Android 基礎知識的不甚理解,做了很多愚蠢的實現,踩了很多坑;到後面入了 Android 相機這一大坑,兼容性問題導致始終無法達到想要的最佳體驗,仍然沒有看到盡頭……

當前,我正在進行圖像、視頻相關應用的開發,不僅僅關注普通應用層的開發技能,對圖像視頻領域的內容也有了更多的關注。最近從零學習移動端的 OpenGL ES 相關知識,基於相機模塊的動效、濾鏡有了更多的理解。同時,也在關心並學習人工智慧、機器學習相關的知識,希望能夠跟上節奏,掌握一些基礎知識,並嘗試在項目上進行落地實踐。

至於將要到哪裡去,我也不知道,同樣有很多困惑,不知道堅持的是否要繼續堅持,也不知道該放棄的是否早該放棄。2011 年 6 月畢業找工作之前,目標很明確,我要加入移動浪潮,從事 Android 應用開發。面對實習機會、面臨 Offer 的選擇時都很容易做出判斷並為之興奮。而作為應屆生在加入 HTC 時,雖然薪水很低卻很有衝勁,為自己在最好的 Android 手機廠商工作感到高興。但是在快滿兩年時萌生去意,一心只想去一線互聯網公司。

很幸運在 2013 年加入鵝廠,頭半年感覺寫了超過前兩年的代碼,頭兩年又感覺不知疲倦地在提升自己的編碼技能,寫了很多代碼,也寫了很多 Bug,修復了很多 Bug,寫了很多技術文章,做了很多分享,認識了很多圈內有趣有才華並超努力的小夥伴。最近兩年相比之下低調了許多,有故避鋒芒的原因,也有自己遇到瓶頸後調整心態,適應團隊的需要,不再只關注自己的成長,多了對產品、團隊的正向積極思考。

有人說:人生不可能一直是一條上升的曲線,會有高潮也會有低谷。在有些階段很容易直接看到顯著的成績,但是同樣在很多看似非直接增長的階段,重複訓練,非抱怨堅持,專註團隊貢獻,收穫的則是更加成熟的心態。如今已是我在鵝廠的第五個年頭了,吐露自己的真實工作感想,勉勵自己繼續前行,也希望對同行有所幫助!

從業至今,我從一個職業程序員轉變為一個獨立開發者;從高效率解決命題的程序員思維,轉變為創造性滿足需求的開發者思維;從一個只對技術感興趣的極客,轉變為探索世界發展規律的思考者。

在移動行業摸爬滾打多年,犯過的最大一個錯誤就是 —— Mobile First。「移動」本質上只是一種形態,一條路徑,一個解決方案,而不是趨勢的內在本質。如果被 Mobile First 綁架了思維,則很可能在快速變化的發展中迷失方向。當我徹底擺脫了這一思維束縛後,才認識到過去十年的「Mobile」本質上是在充分發揮手眼協調的交互形態下,對信息接收和響應效率的一個優化實踐。從這個認知出發,未來我們還可以進一步調動和挖掘更多交互形態對上述效率的補充和再平衡。

當前,我正在重新思考信息社會的基本生產關係,試圖從深層次理解「付費」、「盜版」和「共享」交織下信息時代的價值根基。技術上,關注和研究去中心化和社會工程學在互聯網環境的實踐。

也希望能夠做一個跟隨自己內心疑問的思考者,把積累多年的開發技能和運作經驗運用於實踐自己的思考。同時,想分享給其他立志成為獨立開發者的同學,除了掌握人機溝通的計算機語言之外,建議選修經濟學和心理學。前者讓你理解驅動這個世界的運行規律,後者讓你通曉左右這個世界的複雜人心,掌握它們,你就擁有了守護麻瓜世界的魔法。

我畢業於 2012 年,也正是在這個時間前後,Android 手機井噴式發展,國內外各大廠商都投入了大量的資源來研發手機。在國內,Android 市場需求越來越大,這也導致了各大公司對程序員的需求越來越大。在那個時候,Android 程序員比較稀少,物以稀為貴,薪資也水漲船高。

在 2012 年下半年,我正式成為了一名 Android 程序員,接觸 Android 的一剎那,我覺得喜歡它。可能是由於我比較喜歡做有界面的東西,而 Android 開發剛好契合了這一點。我花了一個月時間入門,然後就開始在公司里寫代碼了。 後來,我來到了北京,開始了自己的 Android 學習的旅程,我瘋狂地學習、在 CSDN 寫博客,短時間內,我的 Android 開發水平有了一定提高。再後來,我做了一些開源,還寫了一本書《Android 開發藝術探索》。

而在學習技術的過程中,大家都是從新手一步步來的,最開始我也犯了一些錯誤。雖然現在回想起來非常好笑,但是當時的確是不會啊!其中,有兩個問題印象比較深刻,一個是 View 的滑動衝突,早期時學習資料比較匱乏,也找不到很好的學習途徑,所以我從網上下了一個側滑菜單的 Demo。但是這個 Demo 有問題,如果在內容區域放一個 ListView,就會有滑動衝突,Demo 的作者解決不了這個問題,我自己查了很多書和資料也解決不了,那個時候這個問題真的很難,後來經過仔細鑽研才解決了這個問題。

另一件事情就比較搞笑了,我在剛接觸 Android 時,認為 Runnable 等同於線程,所以 View.post(runnable) 這個 API,我就以為這個 Runnable 會跑在子線程中。後來我才知道其實這個 Runnable 是運行在主線程度的。

到如今,我已經做了 5 年的 Android,應用開發和架構等也都接觸過了,現在的計劃除了繼續 Android 開發之外,還需要多了解其他東西,畢竟廣度也是很重要的。

其實深度和廣度從來都不是互斥的,一個比較好的狀態是:精通 1-2 個領域,其他領域都懂一點。但在優先順序上,深度比廣度更重要,深度決定專業程度,而廣度決定著你的技術視野。大家做技術,當深度達到一定程度後,就需要加深廣度了。或者說你覺著自己廣度還行,那可能就需要補補深度了。

十年前,我還在讀高中,當時用的手機是波導,作為學生最常用的通訊手段是飛信+簡訊,至今我還備份著當時的簡訊記錄。後來讀了大學,有了第一部智能手機 E71。工作之後開始使用 Android 和 iPhone。至今還能記住 Symbian 以及後來的 Android 和 iOS 初見時給我的驚艷,同時也感謝這些劃時代的操作系統,我現在才能有一份不錯的工作。

回首自己的移動之路,印象最深的是實習時剛接觸 C++,用 iterator 遍歷 list 的時候沒有判斷 end,那個時候 NDK 開發調試極其麻煩,基本全靠日誌定位問題,導師幫我排查到凌晨 3 點找到原因後才回家。

記憶猶新主要有兩點原因 —— 有些 Bug 往往是很低級的錯誤導致,以及很感激我導師的耐心和 nice。

當前,我正在進行移動終端的跨平台開發,而下一步,希望自己能夠繼續深造現有技術,同時也不斷地去了解前沿技術。儘管編程語言可能會慢慢不流行,現有技術未來可能也會過時,但不論世界怎麼改變,不變的是編程思想,保值的是技術思維。

所以,接觸一個技術領域一定要觸及這個領域的本質,取其精華。在不斷深挖現有技術的前提下,也要不斷了解前沿技術,防止被時代拋棄。

我從小菜鳥變成了拿著保溫杯的老菜鳥,從不認為自己是別人所說的大神。求知若渴,大智若愚,始終對技術懷有敬畏的心態。但進入行業至今,忽略了很多技術之外的東西。有時間做開源項目,卻沒有多給家裡打幾個電話;有時間看書,卻沒時間和朋友多聚一聚;有時間寫博客,卻沒時間和同事鍛煉身體。

最近的我,正在 Android 技術邊界上補充自己,比如 Groovy、Python、Java 語言實現原理等。而關注比較多的,還有 AR 應用開發相關的技術,比如 OpenGL、Unity 等等,因為我相信基於 AR 圖像處理技術未來將會越來越普遍。

除了技術之外,還在考慮在其他方面提高自己的能力,比如演講能力、溝通及管理能力等,作為一個程序員這也是必須要趟的坑。

我從不盲目地追逐最新的技術,而是關注計算平台的發展,比如,PC 到現在的移動開發平台再到之後的 AR 平台。

其實在剛進入這個行業一兩年時,是真正困惑技術人員的階段,到底要不要堅持現有的技術?要不要學習新技術?在我看來 BAT 對各個評級的要求是非常具有參考性的,也就是在哪個階段我們應該達到什麼樣的目標和能力。比如,阿里 P7 就要求在某個領域要有專家級水平、五年工作經驗及跨團隊的協作能力,P8 就要求管理過 20 人以上的團隊,及引領行業發展的技術能力,也就是說,如果沒有在一個領域有專家級水平和跨團隊的管理經驗是不可能到 P8 評級。

所以,我建議,做一項技術最好就要做到專家水平,對比 P7。然後再考慮往其他相近技術領域擴展,也方便提升跨領域團隊的管理能力。

差不多十年前,Android 開始公測,出於對 Google 的喜愛,我在第一時間開始學習,並參與了隨後 Google 舉辦的 Android 開發全球挑戰賽(ADC),那時,離第一台搭載 Android 系統的手機 G1 發布還有一年多。

雖然比賽沒拿到獎金,但這份經歷讓我機緣巧合地走進了移動互聯網的大門,順理成章地開始做移動開發、研究移動技術、寫技術書籍、做 App Store、做各種各樣的移動 App。就像站在了一個新世界的門口,感受著移動時代一步步迎面而來。感謝 iOS 開啟了移動時代的大門,感謝 Android 讓這個時代極速成長,親歷這一切,是個有趣的經歷。

十年前,大家對移動互聯網的面貌充滿疑惑,還在激烈地爭論 Android 是否可以戰勝 Symbian,一個 Java 做成的系統怎麼可能在手機上跑流暢;開發中,需要花大量的時間來優化網路性能,因為大部分手機都還停留在 2G 時代;設計上,需要研究各種外設下的移動應用交互,因為除了觸屏,硬鍵盤、軌跡球都還是主流;手機上每一個位元組的內存都極為珍稀,即便是那時最好的手機,內存也只能論 M 來計數。

後來在豌豆莢,我們花很多時間去研究如何讓 PC 可以更穩定地和手機連接,因為 PC 還是用戶主要上網、獲取移動應用的場所;然後,我們開始在手機上做下載庫,為了最大化地節約流量,做預取、增量包;我們還會自己做網路庫、推送服務、插件方案,花了很多精力做這些現在看上去是造輪子的事情,當時,還都只能靠自己。

這些技術積累,在當年都值得津津樂道,而時至今日,卻是鮮有用武之地。很多技術完全不需要了,很多實現方式可以被更好的移動系統、開源庫所取代。如果說,在移動互聯網時代有什麼最印象深刻,應該是這個時代的軟硬體技術的進步都實在太快,永遠別想躺在溫床上吃老本。

十年中,我在 Windows、Symbian、Android、iOS 都做過開發,可以想見,在將來,還會不斷有新的平台出現,等待我們去探尋。

從技術趨勢來看,新平台開發的硬技能門檻越來越低,以前你不懂寄存器,不懂文件系統,沒有紮實的數學功底,都沒法從事開發。而今,編程語言越來越接近自然語言,三五行代碼就能落地一個漂亮的交互,一個小程序就能跑個複雜的機器學習。對於開發者而言,更有價值的地方源自於軟技能的不斷積累,樂於學習和了解新的技術趨勢,可以持續地去新的平台上構建產品,研究新技術的各種可能性;善於去了解產品的全貌,以便設計更符合未來需求變更的技術框架;能夠把代碼表述得清晰準確,讓維護的成本不斷減少,有更多的精力去嘗試新的機會,諸如此類。

這個行業最有趣也最有挑戰的事情,就是每天去面對新的事物,保持專註,保持好奇,也許是最好面對下一個移動時代的最佳態度。

十年時間是一個很長的跨度了。十年前我才大二,和老婆雖是同班,但也不過點頭之交,而現如今都已經拖家帶口了。十年前滿大街都是諾基亞,我也完全沒有想過自己以後會進入到移動開發的領域。而隨後到來的移動和智能手機大潮,給這個世界帶來的改變遠遠快於以前。能夠進入引領這個時代的行業,可以說是十分幸運的事情。這十年來的經歷,對我來說,不管是觀察世界的眼界,還是對待人生的態度,都有了升華,也明白了很多擔當。雖然我也只是一個普普通通的開發者,但是我始終相信通過自己的努力,可以讓這個世界變得更好,哪怕只有那麼一點點。

而說到刻骨銘心的坑,在移動應用的世界裡,其實很難犯什麼大錯,頂多可能就是程序崩潰需要強制更新,不會存在什麼刪庫跑路的情況。不過要說起來的話,那就是早期有些時候會有些自負。一方面是年輕,恃才氣傲,覺得自己已經很了不起;另一方面是怎麼看周圍的同伴或同事都覺得不夠給力。其實明明自己做的事情並沒什麼技術含量,偶然的成功大多也是團隊努力的成果,自己的力量真的十分有限。而好在最近在審視過去的時候有主動意識到這點,這可能會對我之後的人生產生很大影響。

現在的我,正埋頭專心踏實工作,另外也在業餘時間純粹由於興趣在看一些機器學習的東西。專業之外就是在帶娃這場漫長的戰役中打好輔助位的角色,負責「買雞買眼」。

移動開發雖然餘波猶在,但顯然資本最狂熱的時期已經過去。於個人而言希望繼續專註技術,雖然不一定是移動領域,但可能還是會進行相關的工作。之前有一段時間很多朋友會問,除了 iOS 之外還需要學些什麼?可以看出很多朋友會對此有憂慮,所以我想給出的答案是:還需要學會學習。沒有什麼是一成不變的,特別是技術方面,日新月異,用不了幾年就會改天換地。但是持續一生不斷地學習,以及堅持不懈的人生態度,將幫助你永遠站在時代的前頭。

在做移動開發之前,我是一個伺服器端 Java 工程師。從來沒有想過一台智能手機能夠引起整個互聯網行業產生巨大的變化。現在,移動互聯網已經深入每一個人生活中的方方面面,我也成為了移動開發者中的一員。

回首過往,我曾經一度認為 HTML5 技術可以取代原生的開發方案。但是就像 Facebook 的 CEO Mark Zuckberg 說的那樣,這是 Facebook 曾經犯下的最大錯誤。一個技術方案的成熟需要時間,或許未來 HTML5 可以統領移動開發領域,但是至少過去不是,最近幾年也不是。

在移動互聯網的影響下,教育也是一個被改變得翻天覆地的行業,我現在在猿輔導公司負責小猿搜題的產品技術,我們希望用技術改變中國的教育行業,讓學生的學習效率更高,並且打破教育資源在地域上的不平衡。

未來無論多麼美好,都是當下努力的結果。移動互聯網經歷了最好的一個十年,未來的下一個十年,它會更加成熟,好的機會同樣會有,但是不會像剛開始的十年那樣滿地都是。於自己而言,我希望能夠在教育這個方面做到足夠好,打造一家成功的上市公司。

很榮幸在移動浪潮剛到來時就進入了 iOS 領域,移動開發改變了我對很多技術的看法。Apple 每年都會為了推動許多新的技術標準而在 App Store 審核上提出「霸道」的條款,但是回過頭來看,確實推動了新技術標準的落地,為技術發展鋪平了道路。Apple 時常在技術發展中扮演著「革新者」的角色,無論是全鏈路 HTTPS、IPv6 支持、64-bit 支持、ECN 擴展協議等,這也在改變著我對這些技術的理解。

另一方面,每年 WWDC 都會有新的技術出現,幾乎每年都必須強制適配 App,包括 SDK 介面、Swift 語法等。這種看似「不平滑」的升級策略,也透露著 Apple 對技術發展大刀闊斧的革新氣魄。同時也要求開發者及時更新自己的知識體系,也正因如此,強化了我學習新技術的意識。

回首我的移動開發之路,印象頗為深刻的,是有一次遇到一個問題,緊急修復後發版本,之後又在另外的地方出現了類似的錯誤。在上一次修復時,只是遇到問題處理問題,沒有做到相似問題排查,也沒有思考如果規避類似問題的長效機制。聽說日本有的軟體公司,如果修復 Bug,必須同時找出類似的錯誤才允許合併代碼,這就是保證軟體質量很有效的方式。

當前,我正在做些 iOS 領域的基礎服務,希望能夠為更多開發者提供更簡單的方式,來提高開發效率,提升 App 的性能、質量,提供更多的最佳實踐。

對於我們所有的應用開發者,技術不能只學皮毛,不能抱著「夠用、會用就行」的態度。Little knowledge is dangerous!追求卓越,對技術細節做到刨根問底。

畢業之後一開始從事的是 Java 後台開發,適逢移動開發如日中天及公司業務需要,遂轉入 iOS 開發。算起來已有 5 年,也可算一個老司機了。

iOS 開發最大的一個感受是寬度大於深度,得緊跟蘋果的步伐,不斷去吸收新的東西,研究每個 iOS 版本的變化。從 MRC 到 ARC,從 Autoresizing 到 Autolayout,從頂部狀態欄放開到 iPhone X 的「劉海」,從指紋識別到面部驗證,從搖一搖、語音識別到增強現實、機器學習,無一不要快速學習,迅速吸收,融入到具體的功能開發中去。

印象中踩過最大的坑莫過於 Block 回調中野指針的問題,估計這也是當前眾多 iOS App 崩潰的主要原因之一。雖然這個問題對於一眾老司機來說很容易跳過去,但是新手上路者能不跌進去的很少。

我在 58 同城進行開發已經三年多了,主要負責主 App 開發。期間經歷了 iOS 開發主流框架的演變,從最開始的 Hybrid 框架為主要模式到現在的純 Native 開發的主要模式,並且最近兩年融合了 React Native 的相關技術。在框架的演變過程中,一方面是技術的影響,另一方面是各業務線並行開發的需要。目前主要負責的內容一個是 React Native 在 iOS 端的接入及相關底層技術支持;另一方面致力於形成一個鬆散耦合的架構,以更好地支持業務線的並行研發。

移動開發的本質在於前端,是與用戶接觸得最近的開發,所以開發出用戶體驗最好的 App 一直是我的目標。但與此同時,隨著硬體設備的沉浮與大前端開發的興起,也倒推著我不斷去接觸大前端領域的各項技術,在技術的變革潮流中不掉隊,不落伍。這也是我向同行一起共勉的一個目標。

我是 2008 年開始進入移動開發行業的,到現在也差不多十年了。有幸見證並參與了移動行業的興「衰」,讓我有機會不斷地學習和折騰各種前沿技術。但感觸最大的是:在智能手機盛行以後出生的那一代人已經把手機變成生活的一部分,遇到想看的動物就說在手機上 Google 一下,看到任何屏幕都想點擊,拖拉和縮放。 做開發要折騰各種新技術,每天都或多或少地掉進一些坑,但踩過的坑都很快地通過 Google 和 Stack Overflow 解決了(Stack Overflow oriented programming)。如果連官方文檔都解決不了的問題也通過問題的拆解和分離等步驟慢慢迎刃而解。

目前,我主要在學習和應用 Kotlin,並把它應用到公司的 Android App 里,慢慢地用 Kotlin 來替換原有的 Java 代碼。和三年前把原有的 iOS App 從 Objective-C 轉換到 Swift 一樣,也遇到不少坑,但過程很具挑戰性。

談到規劃,我目前還是專註於移動開發,主要是 Swift 和 Kotlin 在原生 App 上的應用。我的興趣點是如何通過設計來驅動開發,快速地開發出具有良好用戶體驗的 App,這也是我之前開發 IBAnimatable 開源項目的原因。同時也在學習和折騰各種技術,包括 React Native、VR、AR、AI、區塊鏈等等,為下一個計算平台做準備。公司里的同事問我有什麼經驗可以分享,我一般都說「Get yourself ready, wait for opportunities」。假如工作上不做 AI,而我對這方面感興趣,那就去 Coursera 把相關的課程學習一下,找相關的項目或工作機會,隨時為下一波計算浪潮準備。當然,現在 AI 已經進入應用階段,不是下一波了。

之前一直做 C++ 和 Windows 底層的開發工作,後來由於一次工作需要有了第一次接觸 iOS 和 Objective-C,記得彼時還是 iOS 4+黑蘋果的時代,一直到現在的 iOS 11,可以說實現了從最初的一名 Windows C++開發者到移動平台開發者的轉變。

而進入移動應用開發行業,我先後開發過 iOS、Android、BB10、Windows Phone 項目,記得以前有一個大型 iOS 項目要求上層 Objective-C 編寫、中間層使用 Objective-C++編寫,底層 C++編寫跨平台庫。當時負責中間層和底層庫的開發,國內 iOS 項目的資料還非常少,大部分都是英文的,於是,編寫底層 time 庫和線程庫一點點地啃著英文。

現在的我,正在 iOS 框架架構、核心公共庫、性能分析優化等方面前行著。而將來,一方面希望接觸新鮮技術和思想,把它們變成有價值的代碼真正跑起來,同時也希望可以多貢獻分享出一些優秀的開源庫。

-------- 熱聞回顧 --------


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

人工智慧這麼火,這 12 款工具你怎麼能不知道!
寫了 15 年代碼,我終於總結出提升 10 倍效率的三件事
在程序員眼裡,馬雲 1000 億的大業敗給了王者榮耀 100 個月工資的獎金

TAG:CSDN |