歡迎光臨
每天分享高質量文章

奔向三張,不破不立:一個iOS開發工程師的職業規劃思考

來自:知識小集(ID:iOS-Tips),作者:沙梓社

重讀這篇老文章,收穫依然很多。作者就不用介紹了,《iOS應用逆向工程:分析與實戰》作者,大名鼎鼎的沙梓社。薅稿時,正巧沙大大剛從阿裡離職,準備開始新的徵程,祝福沙大大。

大前天(2015年某天)下午快下班那會兒,跟念茜聊了一下各自的工作現狀,發現她現在碰到的一些職業規劃上的困惑,跟我在一年多前的情況非常相似。而我經過一年多來的不斷思考和調整,已經基本明確了自己的職業規劃,發展的方向變得越來越清晰,配合我個人較強的執行力,困惑越來越少,事情也正在朝著越來越好的方向發展。念茜和我是iOS開發行業中的普通年輕從業人員,因此我們的困惑具有一定的代表性。今天,我就跟大家說說這兩年來我的職業規劃心路歷程,供大家參考。

看過書上自序部分的朋友都知道,我從讀碩士開始,就已經進入iOS領域了。學生階段的任務不涉及太多商業運作,幾乎是純技術研究。但畢業後要進入社會,參與市場競爭,不懂一點商業又會比較被動。也就是說,如果我完全按照學校的安排來,可能會跟社會有一定脫節;為了儘早適應社會,就要自己給自己找點跟商業相關的事做。因此我在研二下學期快研三的時候釋出了一款iOS簡訊電話防火牆軟體SMSNinja,希望能夠透過這個軟體搭起一座我與使用者交流的橋梁,在服務大眾的同時在市場上摸爬滾打,瞭解一款軟體從創意到構思到設計到編碼到釋出的整個流程,提前接觸市場。

在開發SMSNinja的整個過程中,我透過跟大量使用者的溝通,無數的郵件、留言交流中,對移動網際網路時代的軟體開發特點有了初步認識,那就是我要不斷地根據使用者反饋去調整軟體,讓它更好用。後來我知道,這個特點有一個更唬人的說法,叫“迭代”。

畢業之後,我的技術進入了一個瓶頸期。搞越獄開發,class-dump出Objective-C頭檔案,然後測測私有函式的功能,就可以搞出一兩個tweak,被小白喊兩聲大神了。但搞過越獄開發的朋友一定都有這種體會:當我掌握了class-dump後,這種Objective-C級別的工具只是在牆上開了一扇窗——我能看見更廣闊的世界,但窗戶太小,我身子出不去,用一句土話說,就是“撐死眼睛餓死屌”,還不如“兩耳不聞窗外事,一心只上AppStore”呢。當時那種眼高手低,不上不下的狀態非常難受,偶爾被人叫上兩句“大神”,聽得我如芒在背。當我向DHowett或者rpetrich提問時的答案越來越多地變成“reverse it yourself”時,我下定決心,計劃透過半年苦行僧式的修煉,把自己的技術層次提高到彙編級別,在牆上開一扇門,徹底看看外面的世界。

看到這裡,有些朋友可能會覺得,修煉是該修煉,但“苦行僧式”,是不是有點過了?如果你對西方文化有所瞭解,就會知道,歐洲真正的貴族從小吃過的苦比普通人家老百姓小孩吃過的苦還要多,人家是正兒八經的“吃得苦中苦,方為人上人”,既發達又接地氣,牛了比了。咱們模仿不了貴族現在的生活,就模仿模仿人家成為貴族前的生活吧。

一頓猛整,我的IDA和GDB就算入門了。配合彙編手冊,吭哧吭哧地分析上一兩個檔案,馬上就鳥槍換炮,雲開霧散了。跟DHowett和rpetrich的溝通也從單純的發問變成了討論,有了一種平起平坐的趕腳。這個階段我釋出了自己售價最貴(1.99刀)的一款軟體DimInCall,這款軟體的特點是,其工作原理和邏輯如果僅用class-dump是不可能分析清楚的,必須讀彙編。

到目前為止我已靠DimInCall賺到購買一臺新款MacBook Pro所需的錢,完成了“跪求大爺用我的軟體”到“別人花錢買我的軟體”的華麗轉身。這一點在現在看來很重要——雖然我對技術的追求非常純粹,但我沒有忘記在埋頭趕路的時候抬頭看路,嘗試著把自己的技術同市場需求結合起來,不是為了技術而技術。這一點是我觀察到的很多資深技術人員步入的誤區,等會我們會重點提一提。

接下來,就是航哥邀請我參與《iOS應用逆向工程:分析與實戰》的編寫了。寫書的過程本身就是對我苦行僧修煉成果的一個總結和歸納,書本的完成,於我個人來說有2個重大收穫:1. 預期之中,技術升級後得到鞏固,與class-dumper之間的差距開始出現質變;2. 意料之外,我對網際網路“產品”的概念有了切身認識,影響了我的職業規劃。

當我經過近一年的高強度訓練後,技術步入最細粒度的彙編級別,被DHowett冠以“越獄開發界中國首席代表”殊榮,得到越來越多國際同行的認可。而這一點,也為我接下來的行動埋下了伏筆,我先賣個關子,等下再說。

回到我的2個收穫。出書,跟網際網路“產品”,有啥關係?在一般人看來,出書是純傳統行業。傳統商品跟網際網路“產品”,有毛關係!我曾經也這麼認為,但是書出來後,我的觀念發生了變化。傳統商品與網際網路產品的最大不同,在於傳統商品在出售之前,賣方要想方設法向買方推銷;出售之後,賣方迅速對買方愛答不理——5年前,我們買臺電視交完錢,賣方就把該賺的錢都賺了,之後提供的所有售後服務都是賠錢,買方不會享受到太好的售後服務。去下個館子,點完菜就在那坐著乾等上菜,服務員只在上菜時出現,其他時間一個人管5桌,忙得要死,顧客只有以“再不上菜就退掉這個菜”為威脅才能成功召喚服務員,讓人家幫著催催菜。用今天移動網際網路的話說,這叫“使用者體驗不好”。

《iOS應用逆向工程:分析與實戰》雖然是一本紙質書,看似是傳統商品,其實不然。這本書是講技術的,我4年的總結揉吧揉吧形成薄薄一本書,如果你光花上一週時間看上200多頁書就能把我4年的精華給學走,那我也太失敗了。讀者在閱讀完本書,並親身實踐的過程中,一定會碰到大量的問題,嚴格來講,這些問題都是因這本書而起的,作為作者,我該不該負責解決這些問題呢?按照傳統思維,我是可以撒手不管的,反正書已經賣出去了,讓讀者自個兒糾結去吧。但是大家還記得我在初學階段經歷的“撐死眼睛餓死屌”狀態嗎?我是脫離這個狀態了,卻把一大批對這個方向感興趣的朋友給帶入這個狀態,我一個人開溜了,這是大丈夫該做的事兒嗎?

所以就有了QQ群、微博和論壇,三種不同交流形式共享一個標的,就是讓大家有一個溝通的地方。我每天都在這三種平臺上投入大量精力,基本上是有求必應,有問必答,看著它們仨從零開始,逐漸成為了iOS逆向工程方向的領頭羊。這種樣式,與傳統商品已經不同了——與其說是我在賣書,不如說我是在搭建一個以iOS逆向工程為話題的交流平臺,書、QQ群、論壇和微博都是這個平臺的一部分,我提供的就是從入門到精通這整個學習過程的技術支援。這種性質的服務,就是網際網路行業常說的“產品”,而不再是傳統的“商品”。

有意思的是,我一開始並不是衝著做產品出書的,而是出書倒逼著我把它打造成了一個產品,這種親身經歷在我腦海裡塑造的產品觀,絕不是刷微博看兩篇所謂的產品文,玩幾個概念就能心領神會的。要真有這麼簡單,“產品經理”這個名詞的含義就跟“仁波切”和“平面模特”差不多了。

既然是產品,就要迭代和運營;迭代和運營,說白了就是不斷改進框架和內容嘛,整得那麼玄乎幹嘛。有了QQ群、微博和論壇的三管齊下,讀者和作者的溝通變得前所未有地順暢。大家的問題,需求有了傳播渠道,在每天與大家的交流中,我也能潛移默化地瞭解到《iOS應用逆向工程:分析與實戰》存在的問題,比如術多道少,不支援iOS 8等等,給產品的改進提供了明確的方向。一方面,我會吸收教訓,改進書的內容,讓它的邏輯性更強,內容更豐富更易讀。海納百川之後的包容不是一般的小江小湖能夠比擬的,改進之後的書中內容對關鍵問題的重點解釋如此切中要害,直擊問題本質,連國外頂級高手看到後都贊不絕口,大呼過癮。另一方面,我會在親手搭建的平臺上儘量解決各種問題,在這個過程中,QQ群因為留不住內容,所以變成了大家工作生活之餘插科打諢的場所,在這裡你能跟大家聊聊天,扯扯淡;微博因為字數有限,變成了論壇的公告牌,推薦一些有價值的好帖;論壇變成了一個相對純粹的技術交流場合,我們獨有的“乾貨分享區”已經彙集了眾多原創獨家精華帖,為iOS從業人員提供了寶貴的參考資料。

從這些平臺收到的正面反饋來看,對這個產品的改進大方向是正確的,這個產品正變得越來越好——因為前面提到技術提升而得到國際同行的認可,所以《iOS 8應用逆向工程》英文版將由美國CRC Press在全球出版發行,論壇也即將支援雙語,讓中國人能在自己的主場跟國際同行切磋交流,我的產品從此走出國門,邁向國際。在網際網路行業,把國外的東西引進中國的人挺多的,但把中國文化輸出到國外的人太少了,作為其中之一,我很欣慰。我正在親手創造一件能夠載入iOS發展史冊的事,讓“越獄開發界中國首席代表”的玩笑實至名歸,作為中國人的自豪感不禁油然而生。雖然這些服務都是免費的(書也不貴),但誰也不能否認我打造了一個優秀的網際網路產品。

如果這能稱之為一個小小的里程碑,那麼它與我開發SMSNinja,寫書,跟大家密切的溝通交流是分不開的,而這些都是技術以外的——至此,雖然我仍痴迷於技術,但心裡有個感覺越來越明顯:沒有技術是萬萬不能的,但技術不是萬能的。這個感覺看似把技術拉下了神壇,大逆不道,實則不然。良好的產品需要精良的技術做支撐,同時配合各方面因素共同努力,才能完美亮相,技術的價值才能體現。別看這就是簡單一句話,但在我的觀察中,絕大多數技術人員對此無感,“萬般皆下品,唯有技術高”,結果把自己限制在了技術的單行道上,進退兩難,非常被動。接下來,我就進一步談談痴迷於技術的我是如何“破”掉身上的技術枷鎖,輕裝進入全新領域的。

書也出了,平臺也搞了,在這個階段,我的技術層次可以這麼描述:userland級別的逆向工程,基本不存在因為難,而搞不定的東西,一般來說只是時間問題。App開發我不是太熟練,但以我對iOS的理解,花上兩個月的時間瞭解熟悉一下,應該也沒問題。kernel級別的逆向工程,到頂也就是越獄了,曾經是我的終極標的,如果App開發是level1,userland逆向工程是level2,kernel逆向工程是level3,我就是處在2,奔3的路上,同我的年齡一樣。

把越獄作為終極標的,是一個IT技術男/女的再正常不過的想法,這也是許多有追求的IT技術男/女的共同標的,就是把技術搞得登峰造極。但是我這個觀念在今年打造產品之後,產生了微妙的變化。搞IT技術的,一大特點是宅,因為只有跟電腦打交道多了,技術才上的去,所以宅是沒法避免的。但產品逼著我把註意力從技術上移開:我的時間是有限的,要維護論壇,微博,QQ群,還要準備書的升級版,勢必花在技術上的時間就少了,這誤打誤撞地逼我自己在埋頭趕路的同時頻繁地抬頭看路,改變就一點點發生了。

因為我從剛研究iOS開始,就在跟老外打交道,所以在從lv2往lv3過渡的過程中,會經常性地請教國外大牛關於kernel層的一些知識,但iOSkernel的資料少之又少,研究起來非常吃力。直到有一天,有一個大牛,叫Sam Marshall,這哥們正在跟別人一起重寫《Mac OS X Internals: A Systems Approach》,實力非常強。他問我,你幹嘛要研究越獄?

這個問題其實我早就想過,但為了給出一個確切的答案,當時我又好好想了一下,我為啥要研究越獄呢?得出一個結論,就是我對越獄感興趣,想具備挖漏洞和exploit的能力,靠這個能力,應該可以取得不錯的經濟收入,和行業地位,就像紅雪、綠毒、evad3rs(那時盤古、太極還沒出來)一樣。也就是在做感興趣事情的同時,獲得一些物質和精神上的回報,這就是我研究越獄的原動力。然後他就說了,別看現在參與越獄的只有什麼雪,什麼毒的,實際上,安全圈子裡具備越獄能力的人很多,這些已經具備越獄能力的人為什麼不去越獄呢,主要是因為1. 不感興趣;2. 找漏洞和exploit比較耗時間;3. 找漏洞和exploit要靠運氣。尤其是第2點,從我現在所處的lv2到lv3,這個學習階段,起碼要3~5年時間,學成後,還不一定能找到exploitable的漏洞,這又要投入大量精力,還要看運氣。如果我的標的僅僅是“在做感興趣事情的同時,獲得一些物質和精神上的回報”,越獄並不一定是我現階段的最優選擇。

也就是說,仔細思考一下,其實我的標的並不僅僅是越獄本身,還包括越獄帶來的那些東西。但在長期的技術鑽研中,我有一點迷失了,鑽了牛角尖,把途徑和標的搞混了,我以為越獄是我的標的,其實不是,越獄只是我實現標的的途徑之一。註意,這個概念上的混淆,是很多很多技術人員正在犯的錯,就好比在大航海中為了加快船速,在桅桿上負責調整方向的哥們下來跟大夥一起劃槳,結果船偏離了正常航道,最後撞了個稀巴爛還找不到原因,加速自己的滅亡,讓人十分痛心。

因為這個哥們的實力遠在我之上,所以他說的東西不是空穴來風,應該有很大一部分是來自於自己的經驗,有參考價值。然後我就想,360起步時,國內的江民、瑞星、金山,技術儲備應該都比360強,但為什麼現在做安全,幾乎都做不過360了呢?這說明技術或許沒有我想象的那麼重要。這時,我曾經的唯技術論觀點徹底破產,我開始重新審視自己的職業規劃:我的標的是“在做感興趣事情的同時,獲得一些物質和精神上的回報”。因為我感興趣的東西並不僅僅是越獄,而且我的技術已經比絕大多數iOS從業者強了,足夠用了,那麼我是不是可以稍微調轉一點方向,把現在自己的技術充分利用上,結合一些其他的東西,來達到我的標的呢?

如果不越獄,還有什麼能幫助我實現標的呢?我是程式員,天天寫程式;同時我也在做著不賺錢,但我認為夠牛比的網際網路產品,因此我感覺自己能從技術和產品兩個角度出發去多維地考慮問題,具備了一些跨界的思想。我今年28,雖然現在沒什麼錢,但從不覺得自己是屌絲,我的時間和精力就是珍貴的財富。越獄要求我的技術產生質變,而這個階段,把大量的時間投入在技術的質變上,價效比有點低。對於我來說,什麼是價效比相對高的事情呢?我對技術感興趣,本質上是對技術所呈現出來的東西感興趣,用技術做出來的東西得到大家的認可,我就高興。這裡的“東西”,本質就是“產品”,只要這個產品能給大家的生活學習工作帶來一定程度的便利,體現出了價值,技術就有了用武之地,無形的東西化為有形,就有了意義,而這也是我對技術感興趣的根本原因。

想到這一點之後,我就開始重點考慮“產品”這個概念。出書以來,我認識了一些以App為產品,做移動網際網路創業的朋友,他們有的是純粹的為錢,去投機做一個產品,忽悠了投資人的錢,撈一把就撤,無所謂對錯,我不願效仿;而有些人,雖然本身不是從事IT行業的,但抱有“只要這個產品能給大家的生活學習工作帶來一定程度的便利,體現出了價值,技術就有了用武之地,無形的東西化為有形,就有了意義”的想法。他們本身不懂技術,可能只有抽象的概念;技術人員不一定都有好的靈感,但具備製作能力。如果兩者結合,就可能做出好的產品,這個產品不一定是App,可以是網站,可以是硬體,甚至可以是一個PC上的exe,只要確物體現出了價值,它就是一個好的產品。我認識2個比較成功的ceo(一個來自nice一個來自米哈遊),他們都是做好一個App產品,現在公司估值都好幾十億,我覺得他們的共同點就是抓住了“產品”的本質,與我的產品在本質上是一樣的,只是現在的資本市場更加認同他們的產品,所以他們賺到了錢,在市場上佔得一席之地。

到這裡,思路就很清晰了。既然我具備了製作優秀產品的能力,何不調整自己的行進方向,做一個資本市場認可的產品,達到我的標的呢?既然我對iOS這麼熟悉,做個App不是正中下懷?因此2015年,我要在繼續做好自己不賺錢產品的同時,尋求跨界,與不懂技術但有理想的人合作,爭取做出一個賺錢的產品。

“在做感興趣事情的同時,獲得一些物質和精神上的回報”。感興趣的事情和精神上的回報,我已經在iOS逆向工程這個平臺上實現了,現在要在新的產品中進一步考慮物質上的回報,難嗎?很難!但因為我的眼光高,所以對合作伙伴的要求高;同時我的手不低,那麼做出來的東西就是精品。考慮到我已擁有深厚的技術積累和接地氣的產品觀,我認為這個標的並非遙不可及,而且我已經在考察接觸一些非常靠譜的專案和人了,我希望自己能在新的一年裡擁有新的收穫,告訴自己這是真的,這不是夢~

以上就是我這個奔三iOS開發工程師的職業規劃從模糊到清晰的過程,僅供參考。我覺得像我這種奉行技術至上的朋友會很多,但能像我這樣在技術積累到一定程度後把技術枷鎖去掉,換個角度看問題的朋友就很少了。改革是疼痛的,前景是光明的,祝福每一位工程師都能在不斷求索中清楚地找到自己的標的,然後努力實現它。

    贊(0)

    分享創造快樂