奔向三张,不破不立:一个iOS开发工程师的职业规划思考

简介:   大前天下午快下班那会儿,跟念茜聊了一下各自的工作现状,发现她现在碰到的一些职业规划上的困惑,跟我在一年多前的情况非常相似。而我经过一年多来的不断思考和调整,已经基本明确了自己的职业规划,发展的方向变得越来越清晰,配合我个人较强的执行力,困惑越来越少,事情也正在朝着越来越好的方向发展。念茜和我

f76b1db478231fe09c7d331ed3a9b7a327230b63

  大前天下午快下班那会儿,跟念茜聊了一下各自的工作现状,发现她现在碰到的一些职业规划上的困惑,跟我在一年多前的情况非常相似。而我经过一年多来的不断思考和调整,已经基本明确了自己的职业规划,发展的方向变得越来越清晰,配合我个人较强的执行力,困惑越来越少,事情也正在朝着越来越好的方向发展。念茜和我是iOS开发行业中的普通年轻从业人员,因此我们的困惑具有一定的代表性。今天,我就跟大家说说这两年来我的职业规划心路历程,供大家参考。

  看过书上自序部分的朋友都知道,我从读硕士开始,就已经进入iOS领域了。学生阶段的任务不涉及太多商业运作,几乎是纯技术研究。但毕业后要进入社会,参与市场竞争,不懂一点商业又会比较被动。也就是说,如果我完全按照学校的安排来,可能会跟社会有一定脱节;为了尽早适应社会,就要自己给自己找点跟商业相关的事做。因此我在研二下学期快研三的时候发布了一款iOS短信电话防火墙软件SMSNinja,希望能够通过这个软件搭起一座我与用户交流的桥梁,在服务大众的同时在市场上摸爬滚打,了解一款软件从创意到构思到设计到编码到发布的整个流程,提前接触市场。

在开发SMSNinja的整个过程中,我通过跟大量用户的沟通,无数的邮件、留言交流中,对移动互联网时代的软件开发特点有了初步认识,那就是我要不断地根据用户反馈去调整软件,让它更好用。后来我知道,这个特点有一个更唬人的说法,叫“迭代”。

  毕业之后,我的技术进入了一个瓶颈期。搞越狱开发,class-dump出Objective-C头文件,然后测测私有函数的功能,就可以搞出一两个tweak,被小白喊两声大神了。但搞过越狱开发的朋友一定都有这种体会:当我掌握了class-dump后,这种Objective-C级别的工具只是在墙上开了一扇窗——我能看见更广阔的世界,但窗户太小,我身子出不去,用一句土话说,就是“撑死眼睛饿死屌”,还不如“两耳不闻窗外事,一心只上AppStore”呢。当时那种眼高手低,不上不下的状态非常难受,偶尔被人叫上两句“大神”,听得我如芒在背。当我向DHowett或者rpetrich提问时的答案越来越多地变成“reverse it yourself”时,我下定决心,计划通过半年苦行僧式的修炼,把自己的技术层次提高到汇编级别,在墙上开一扇门,彻底看看外面的世界。

  看到这里,有些朋友可能会觉得,修炼是该修炼,但“苦行僧式”,是不是有点过了?如果你对西方文化有所了解,就会知道,欧洲真正的贵族从小吃过的苦比普通人家老百姓小孩吃过的苦还要多,人家是正儿八经的“吃得苦中苦,方为人上人”,既发达又接地气,牛了比了。咱们模仿不了贵族现在的生活,就模仿模仿人家成为贵族前的生活吧 smile

  一顿猛整,我的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群、论坛和微博都是这个平台的一部分,我提供的就是从入门到精通这整个学习过程的技术支持。这种性质的服务,就是互联网行业常说的“产品”,而不再是传统的“商品”。

  有意思的是,我一开始并不是冲着做产品出书的,而是出书倒逼着我把它打造成了一个产品,这种亲身经历在我脑海里塑造的产品观,绝不是刷微博看两篇所谓的产品文,玩几个概念就能心领神会的。要真有这么简单,“产品经理”这个名词的含义就跟“仁波切”和“平面模特”差不多了 smile

既然是产品,就要迭代和运营;迭代和运营,说白了就是不断改进框架和内容嘛,整得那么玄乎干嘛。有了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开发工程师的职业规划从模糊到清晰的过程,仅供参考。我觉得像我这种奉行技术至上的朋友会很多,但能像我这样在技术积累到一定程度后把技术枷锁去掉,换个角度看问题的朋友就很少了。改革是疼痛的,前景是光明的,祝福每一位工程师都能在不断求索中清楚地找到自己的目标,然后努力实现它。


转载自:http://iosre.com/t/ios/689

作者:沙梓社

作者其他优质文章:

创业系列文章:https://yq.aliyun.com/users/1325193304062540/article

目录
相关文章
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
95 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
4月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
42 0
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
98 2
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
32 3
|
1天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
2天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
9 0
|
2天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
2天前
|
存储 安全 Swift
【Swift 开发专栏】使用 Swift 开发一个简单的 iOS 应用
【4月更文挑战第30天】本文介绍了使用 Swift 开发简单 iOS 待办事项应用的步骤。首先,阐述了 iOS 开发的吸引力及 Swift 语言的优势。接着,详细说明了应用的需求和设计,包括添加、查看和删除待办事项的功能。开发步骤包括创建项目、界面搭建、数据存储、功能实现,并提供了相关代码示例。最后,强调了实际开发中需注意的细节和优化,旨在帮助初学者掌握 Swift 和 iOS 开发基础。
|
10天前
|
iOS开发 开发者 UED
利用SwiftUI构建动态列表:iOS开发的新范式
【4月更文挑战第22天】在本文中,我们将深入探讨如何使用SwiftUI来创建动态列表。SwiftUI是苹果最新推出的用户界面工具集,它允许开发者以声明式的方式描述用户界面,从而简化了代码的复杂性。我们将通过具体的代码实例,展示如何利用SwiftUI的List和ForEach视图来创建动态列表,并讨论其在实际开发中的应用。
12 2