程序员的鄙视链
我们的生活中存在格式各样的鄙视链。
电视剧鄙视链:英剧>美剧>日剧>韩剧>港剧>台剧>内地剧>泰剧;
足球联赛鄙视链:西甲>英超>德甲>意甲>法甲>中超>中甲;
手机鄙视链:iPhone> 小米> 杂牌智能机>非智能机
……
程序员同样存在鄙视链:C/C++工程师>Java工程师>C#工程师;iOS工程师>Android工程师>Windows Phone工程师;做后端>做前端>做美工……
可能在很多人看来,做UI是个没有技术含量的苦力活:重复、琐碎、没完没了;做好了,功劳不是你的;做不好,责任全在你;是很多人避之不及的事情。
然而,在我看来任何事物存在肯定是有其自身的价值和意义的。
曾经在国企呆了三年,在这三年中,我做过各种岗位、各种工作:主攻开发,写过C#、Java,会点silverlight、HTML、CSS、JavaScript,还写过sql;还顺带做过测试、产品、实施;甚至还有段时间翻译各种技术文档、合同,写各种ppt、技术文档、画各种流程图……
虽然这三年学的东西很杂,没有特别擅长的,我都不好意思说我做过。但唯一学会的一件事是:不以自己的喜好、经验来判断某一岗位、某一工作的价值,学会以一种包容的心态去平等的看待所有。
因为任何一种岗位、任何一种工作,入门,很简单,但精通,却很难。
所以,我接下了iPad项目,尽自己最大的努力做到最好。做iPad项目已有三个月,在这个过程中,收获很多。
虽然做了一些重复工作,但重复的工作是必要的,只有在重复的过程中不断的思考、不断的改进,才能完成从量变到质变的飞跃。好比吃了5个包子才饱,不吃前面4个包子,直接吃第五个包子是不可能吃饱的。
不识庐山真面目,只缘身在此山中
以前,在团队中总是负责某个模块或某个功能的开发,所有的关注点都在自己负责的模块或者功能上,很少去了解其他模块或功能。而事实上,你眼中的项目其实只是冰山一角而已。
image而做iPad项目其实正好提供了一个契机,让你可以去梳理整个项目的架构、UI、代码、配置。让你的思维不再局限于眼前的逻辑,能够以全局的角度去考虑问题、解决问题。
以保存二维码图片为例,很多模块的很多界面都有保存二维码图片的功能,当时可能因为项目进度紧张或者这些界面或模块由不同的开发人员负责,导致项目中存在多个几乎相同的保存二维码图片代码。
如果站在某个模块或某个界面角度来看,代码不存在任何问题。站在整个项目的角度来看,这就是重复的代码,需要整理重构。
看山是山,看山不是山,看山还是山
人生有三个阶段:看山是山,看山不是山,看山还是山。
在做iPad项目过程中,反复合并代码,解决冲突,对项目中各种文件有更深层次的了解,有种庖丁解牛的感觉,解决冲突的时间由最初的一天、减少到半天到现在的一两个小时。
以xib文件为例,也会经历这三个阶段。
在第一个阶段,xib就是一个xib文件。往xib文件中拖各种控件,使用起来还是得心应手。
第二个阶段,xib是个xml文件。记得在上家公司第一次合并xib出现冲突时,眼前的代码如同一堆乱码,完全懵逼了,不知如何下手。
第三个阶段,xib就是个xib文件。特殊的xml文件而已,xib文件中的视图对应xml文件中的代码块,视图的某个属性对应xml文件中的某个标签,xib文件中的任何元素、属性在xml文件中都能找到对应的标签。
画一条线,1美元。知道在哪里画线,9999美元
因为每次合并代码,都会导致上百个冲突,而每次改这些冲突很花时间和精力。为了减少冲突,培养了一种新技能:改动最少的代码来解决bug。
经常会出现这样一种情况:出现一个很诡异的bug,花了1小时读懂代码,10分钟定位问题,10秒写代码,最终提交1行代码解决bug。可能在非技术人员看来,这个效率非常低:1小时10分钟10秒才写了1行代码。作为一个程序员表示:好冤枉啊,比窦娥还冤呐。
image美国福特公司一台大型电机发生故障,很多专家一连数月一筹莫展。后来某个科学家经过反复摸索比对在电机旁用粉笔画了一道线,并指导工程师们打开电机,将画线的地方的线圈减少16匝后,电机果然恢复正常运转。科学家因此向公司要1万美金的酬劳。
有人说:“画一条线值一万美金,这是敲竹杠”。该科学家听后说道:“画一条线,1美元。知道在哪里画线,9999美元。”
同理,“写一行代码,1元,知道在哪里写代码,99元。”技术不仅仅包括编码,还包括发现问题、分析问题和解决问题的能力。
程序员的日常:开发新功能和解决bug。而解决bug百分之八十的时间花在阅读代码,百分之二十的时间花在写代码。
在做iPad项目中,大部分时间都在阅读别人的代码。不同的开发人员有不同的代码风格、不同的思维方式、不同的实现逻辑。在阅读别人的代码过程中,慢慢学会思考别人为什么这么写,这样的写法有什么优劣之处,继而修正自己的代码风格、思维方式。
你不是一个人在战斗
年前某天合并代码后,解决了各种冲突后,编译项目,还有一个错误,解决错误,再编译,又出现一个错误,再解决错误,再编译,又出现错误……
每次都开心的以为是最后一个错误,结果每次都失望,一直循环重复,直到修改完最后一个错误,终于编译成功,小芳芳和我两个人在空荡荡的办公司傻逼兮兮的大笑,庆祝终于编译成功。
正准备回家时,才发现我们的BD同事在深夜11点还在开会!
原来,你不是一个人在战斗!!
image每天早上上班看到邮件里上百个bug,辛辛苦苦改了一天的bug,心中暗自庆幸:bug数终于少了一点。第二天上班邮件里又有上百个bug!改bug的速度完全赶不上eddie提bug的速度!!每天晚上总觉得看到希望,第二天早上又被现实打脸!到现在脸已肿!
这个时候就会感觉很孤独,自己像最后一个的战士,在与bug殊死搏斗。
年前大家都忙着准备回家,而我在回家的当天,还在改几个严重的bug,因为要赶在回家之前发版本。
那天,我整个人处于亢奋之中,一边咳嗽,一边抖着手,小心翼翼的打包、上传、提交app store。终于在我准备去火车站的前几分钟成功提交app store。
像刚刚打完一场恶战,终于能够停下来长长的舒口气:终于赶在回家前搞定了。我并不是担心没搞定要回家加班,放在平时,加多久的班,我都无所谓,谁叫我负责iPad这个项目。
但是,我不希望因为加班,让我在一年当中唯一几天可以陪父母的时间都没有! 也不希望因为加班,让父母看到我工作的艰辛而整天担心我。
每次觉得累,觉得孤独的时候,我都会告诉自己:你不是一个人在战斗!
iPad项目进度过于紧张,经常忙于解决bug而没有时间参加手机端项目的各种会议,导致不了解很多新需求、新技术,和团队成员脱节。
看来以后的产品需求会议、API会议都要尽可能参加,即使不参与手机端的开发。在完成自己本职工作的同时,还是需要多了解其他不负责的业务,学习更多的新技术,跟上团队的节奏,大家一起战斗!
凡是让你痛苦的,终将让你成长
在开发iPad项目过程中有种感觉:今天我觉得自己拥有了全世界,明天又觉得我失去了全世界。今天解决了一个很诡异的bug,觉得自己很牛逼,明天又出现个更加诡异的bug,三观尽毁;今天学到了一个新技能,很嘚瑟,明天又发现自己这又不懂那又不懂,无比忧桑。
学会合理的安排任务。通常每天安排23个比较难改的bug,45个简单的bug;整块时间用于大bug,碎片时间用于小bug;诡异的bug今天搞不定,撤销,过两天,换个思路,重新改,发挥打不死的小强精神,和bug斗争到底。
学会沉淀、聚焦。一个简单的app的开发,会涉及到各种技术:OC语言、UI部分、数据存储、网络请求、单元测试、项目架构……发现这又不懂那又不懂,总是这也想学那也想学,与其纠结先学哪种技术,或者每种技术都浅尝辄止,那不如各个击破,一种一种学,哪怕是从“最简单”的UI开始。
做iPad项目过程中,总是会遇到各种新问题,偶尔也会自我怀疑、自我否定,迷茫中,还是需要自己熬点鸡汤喝,这样才能在曲折中继续前进。因为我相信:凡是让你痛苦的,终将让你成长。
这碗鸡汤我先干为敬,你随意。
网友评论