Life is like riding a bycicle, if you want to keep balance that you must keep moving.
开头引用爱因斯坦的一句名言,记忆中是我写在大学计算机组成原理扉页上的
2014
毕业季
人虽毕业,但依旧迷茫,对于我来说,未来就像一张白纸,不知道该在上面写些什么内容
求职
在这迷茫不知所措中跟着茫茫的应届生大军挤进了人才市场,从7月到9月,一直在入职与离职之间动荡,最后在一家网络公司干了一个月以后赋闲在家,也正是这一段的动荡不定,让我自己知道了自己最终要找什么样的工作,要向哪个方向发展
再次求职
休整一个月之后,利用这一个月的时间想了很多事情,也顺便参加了一次11月份的软考(最后也是当了炮灰)以后,重新开始了求职,自己的目标是当一名程序员,还记得去北京的XX锋培训机构做了考察,经过在整个培训班的一圈考察之后我决定不参加培训班,自学成才,记得那时候自己也没有苹果电脑,光是折腾黑苹果就折腾了差不多快一个多月,好不容易在我的那个惠普G42上跑起来了Xcode,虽然显卡没驱动,屏幕上各种白条,各种不兼容,好在是我能用OC运行一个Hello world了,那时候真是开心坏了,有了一定的OC基础以后就投了几个iOS实习生岗,然后等了大概1周左右陆续收到了面试邀请,因为面试的是实习生,自然也就没想着要工资,那时候目的也很明确,就是想找个公司,能有个苹果电脑,真实的开发环境,工作的同时还能继续学习,就这样开始了我的iOS开发之路
2015
iOS开发之路
刚入职的时候我只是接触过一点点的oc语法,会写一两个NSLog,甚至连页面间的导航传值都不知道怎么弄,然后,你猜然后怎么招,我们直接开始学习swift了,没错就是14年刚刚发布的swift,当时还是1.0版的,语法非常简单易学,于是乎没用了几天就掌握了个差不多,最让我惊讶的是入职一周之后第二周就发配云南出差去了,把我这个连半瓶子都不满的新人直接发配到甲方现场开发,当时也真是觉得老板心大的很,后来去了发现也还好,当时那个项目也很简单,就是调了几个接口去数据显示出来,虽然啥也不会,但是硬啃了两天还是弄明白了,不就是个发http请求嘛,搞明白了怎么做这些个需求以后就是根据人家甲方要求挨个实现需求了,这样过了2个月以后我们出差结束,回到了公司。后来呢,发生了一件事证明这种线上新项目用swift这个新语言有多么的坑,swift发布了1.2版本,整个项目全部飘红,当时看的头都大
于是乎每次swift更新一个新版本都是噩梦一般的经历。
后来呢,这个项目不知怎么滴就黄了,然后老板说他没有拿到甲方的开发款,我们呢也只有那么一丢丢的实习工资,人心惶惶的,最后大家一个个都另谋高就了,好像那个公司最后也凉凉了。
在这家公司的经历可以说是给了我很多锻炼学习的机会,让我真正踏上了iOS开发之路
第一次跳槽
5月份请辞以后就立马开始投简历找工作,于是乎只有半年不到的开发经历的我拿着自己自学的时候做的几个新闻类的app就去面试了,由于上家公司自己是实习生的身份待了半年,对工资什么的也没有太多要求,于是乎当时3.5k的工资(其实现在我也只有5k,三线小城市,有活干就很满足了)就把我给忽悠进去了,刚入职接手的是一个OC编写的o2o(那个时候o2o这个概念还挺火的)便民类APP,这个项目之前是外包给一家外包公司做的,接手了以后我就发现一个令我震惊的事情,整个项目上百个页面全部放在了一个storyboard里面,对于当时的我,整个人是蒙圈的,如果我要修改一个按钮对应的事件,那么光是打开这个sb文件就要3分钟左右(公司配的n年前的一款macbookpro,还是17寸的那种),要是运行一下项目那个速度也是让人崩溃的,由于自己比较菜,每天都有不懂的问题,解决不了的bug,比如为什么我明明给这个属性赋了值,却怎么都传不到下一个界面呢,苦思冥想一下午以后发现原来我赋的那个值就是一个nil,也是那时候学会了断点调试,后来老板给了我之前那家外包公司开发人员的联系方式,我就开始各种烦那个开发人员,在这个过程中也学到了不少之前不会的东西,比如用纯代码布局,通知机制,代码块,代理回调等等,总之这个项目也让我学习到了很多东西,嗯,没错,这个项目后来也黄了,但是我这次并没有离开这家公司,我们又开始了一个新的项目。
又一个新项目
由于公司本身是金融公司,之前做o2o那个项目只是一次尝试,失败以后还是回归了公司本身业务,所以这次的项目是一个帮助用户进行资金管理的APP,管理的方式很简单,通过读取用户手机短信,然后通过后台配置的解析规则解析各大银行的业务通知短信,来实现资金管理的功能,由于iOS本身系统限制,语法读取用户短信内容,也就直接砍掉了这个功能,iOS客户端里只有很基本的用户登录注册和资讯浏览功能,项目上线以后并没有多少用户去用,所以这个项目后来做完也就没有再去管了。
这一年也就这样结束了,也是这样的一年我的iOS开发之路才刚刚开始。
2016
这一年基本上是原地踏步的一年,没有跳槽没有升职,更没有加薪,不过倒是追到了白富美(现在已经是老婆了),哈哈。
第一个蓝牙配件相关的项目
16年年初当时公司开始了一个蓝牙POS机的项目,简单讲就是手机通过蓝牙连接一个银行卡刷卡器,使用蓝牙进行银行卡数据传输,然后手机APP解密银行卡加密数据之后与后台服务器做业务交互,比如查询银行卡余额,同名银行卡转账,年初我们只用了两个多月时间就把项目上了线,为什么这么快,因为其实这个蓝牙就和传统POS机业务是一样的,而且公司本身有传统POS机业务,所以POS业务那块还是用原有系统,只是接入了一个蓝牙POS机管理平台,然后把蓝牙POS机的SDK接入APP(管理平台和SDK都是直接从POS机厂商那里买来的),我们只稍做了业务调试就上线了,后来才知道当时那么着急上线是想抢先一步占领一部分市场。这个项目全程使用苹果企业账号发布,纯粹是为了绕过苹果的审核加快发布速度,而且一直在用一个发布测试包的第三方平台来发布生产包,内部曾经提过要做一个公司自己的安装包发布平台,可是做后台的那哥们儿只是说了句“知道了”以后就再也没有了音信,我也只能是“呵呵”了之。16年的下半年,在APP里加入了手机充话费、机动车违章代缴费以及一个二维码扫码购物的功能,这几个功能中要吐槽的是手机充话费和机动车违章缴费,这俩功能居然是APP前台受理订单,然后后台业务部门手动去办理业务,出现的情况就是用户充个话费要一天的时间,没错你没听错,要一天,有时候业务员漏了单,可能一天都不够用,至于说为什么单量那么大,因为便宜,支付宝、微信充100优惠几分钱,我们优惠1元,也算是为了圈用户无所不用其极了;违章代缴费那个就更搞笑了,用户在APP上录取了违章罚单信息,车辆信息以后,后台业务员带着罚单编号和车辆信息跑到交警队去排队交罚款,我记得那会还有出现过给交错罚款的情况……
总之这一年呢就是围绕着这个蓝牙POS机项目缝缝补补,挖坑填坑,守着一天三变的需求,领着一天三顿饭的工资,原地小踏步的一年,这也导致下一年做出了一个重要的决定。
2017
经历了上一年的浑浑噩噩,17年年初下定决心不再继续之前那种原地转圈的工作了,于是乎,又一次辞职,这次辞职一方面是因为公司的各种项目疲软无力,另一方面之前招我进来的部门老大也离职,而且入职两年公司都没有和我主动签订劳动缴纳社保公积金等,彻底对公司不抱希望了,我离职没多,之前的同事们也相继都离开了那家公司。
又一次的选择
这次依旧是iOS工程师,入职到了现在所在的公司,当时面试我的就是现在的部门经理,是很懂技术的那种项目经理,面试的时候就了解到他曾经也是做过很多项目的,从后端到前端再到游戏开发都做过,所以就毫不犹豫的选择了这里。
17年2月入职,接手的是一个智能健身设备(也是通过蓝牙连接手机)的项目,我入职以后得第一件事就是把原有的项目重构,甚至重写,我拿到手以后得代码几乎无法正常运行,闪退就是家常便饭,所以,重写整个项目就成了第一要务,由于有之前蓝牙POS机的项目经验,重写这个项目也算是轻车熟路,不同的是这个项目的硬件是自主研发的,搞硬件的那帮人没有封装SDK,直接通过发送16进制数与硬件通信,我只能自己把那堆16进制命令封装到了一个工具类里,充当了临时的SDK。
一个月后,我把项目中有的功能全部重写完毕,交给项目经理测试使用,修改了一部分bug并测试通过以后就拿去给boss安装演示了,之后boss提出了一系列的改进需求建议,虽说只是建议,但是我们都是领人家工资的人,人家说什么我们当然就要做什么了,于是乎就开始修改需求,需求修改完之后我对项目也做了相应的修改,然后又拿去给boss演示,演示完之后呢又是改需求……
17年这一年就在改需求,确认需求,开发,再改需求,再确认需需求,开发……之中度过了。
在这一年的往往复复的需求修改、重写代码中,我也收获了很多,接触到了以前没有接触过的东西,比如写了很多sql数据查询语句(只是在APP端本地进行数据库进行增删改查),研究了DLNA多媒体投屏技术(这是曾经的需求之一,后来由于投屏稳定性不好,就舍弃掉了)。
17年底,开始接触ReactNative开发,也就有了下一年的故事。
2018
2018年主要使用Facebook开源的ReactNative进行跨平台开发,从原生转向RN的过程一开始非常的痛苦,各种红屏报错几乎是把我虐的体无完肤,经过了好几次从入门到放弃的过程,最后还是坚持了下来,理解了RN的运行原理,并且还学习了不少安卓开发的知识,还学习了在linux服务器上部署node.js项目(RN热更新服务器code-push-server),这个过程中基本全靠自学+搜索引擎,可以说是一点点摸着石头过河,有时候遇到一个问题一周都解决不了,只有自己各种尝试,各种搜索。
总结一下用了RN一年的感受
优点:
- 只要学会了RN的编写语法以及各种工具的配合使用,就可以进行跨平台开发;
- 热重载,解决了原生开发项目规模变大以后编译时间长的烦恼
- 热更新,主要解决苹果AppStore审核周期长,速度慢的问题,有时候还会被拒,不过现在苹果的审核周期已经缩短到了一天
- 丰富的第三方开源组件,活跃的开源社区氛围,为解决遇到的问题提供了便利的条件
我认为的不好的地方:
- 原生开发的同学要是转RN一开始可能会比较痛苦,不过也就是一点点的阵痛期,适应了以后还好
- APP在调试模式下运行非常慢,卡顿,特别是连接上调试器之后会更加的慢,打包成release包之后体验和原生无异
- 第三方组件坑还是比较多的,经过我这段时间的探索,大部分的坑都能在Github中的issue里找到相对应的解决方法
- 一入RN深似海,从此正点下班是路人,为啥,因为你还有没填完的坑
结语
2014年大学毕业到现在,工作4年,一直坚持在写代码,从一个程序小白成长到了能够独挡一面,也算是一种成功吧,自己鼓励自己一下,同时,感谢能够看到这里的你,共勉,一起进步!本人文笔一般,写的不好见谅,自己随心写的,没有专门构思,用了一周左右时间回忆自己过去的4年时间,一边回忆一边写的,只求能够让和我有相似经历的人能够产生共鸣,人生就是要不断地向前走,不论是物质上的,还是精神上的,总之,今天不迈开腿向前走,那么明天再回头看现在的你就是在原地踏步。
如果有ios或者是RN方面的问题可以一起交流