再谈iOS开发和Android开发之间的切换

2015-07-18

再谈iOS开发和Android开发之间的切换

由于项目变化的原因,Android开发增加了很多人手,而iOS开发团队又被调走,只留下了两个人。所以iOS开发负责人找我谈话希望我过去帮忙做iOS。出于对项目整体进度而言,我去帮忙iOS开发是最好的。我可以在iOS和Android开发之间随意切换,而Android开发确实有点多人,iOS人手严重不足,招人很难,其他人转iOS开发也需要时间,所以我就答应了。

说起我的Android和开发经历,真是很多感概。从我决定离开第一家做芯片的公司开始,我就想进入iOS开发或者Android开发。其实我最开始是想做iOS开发的,但是当时很难找,我不但没有经验,还是从一家芯片公司刚跳出来(虽然我是软件工程专业出身,但是一开始却进入了芯片行业,说多了都是泪)。最终一家小公司接受了我做Android开发,那时候是2011年初。但是做了大半年多的Android开发之后,公司发现Android很难赚钱,就想转做iOS开发,因为它的生态环境好。开始是我们老大去做,但是他搞了半天还没搞出个helloworld列子,所以就让我去做了。由于我大学的时候就学过Object-C,也接触Object-C开发,所以很快就上手了。再后来,苦于小公司技术进步慢,就跳槽来了现在的X公司。

我是以Android技术面进入X公司的,但是进来之后,我的老大跟我说,你想做Android还是iOS开发,因为我本身也在做iOS开发,也像往这个方向,就选了iOS开发。那个时候,项目采用的方式全编码方式,没有用xib,然后那个时候还是MRC。想想那个时候那种方式还真是学到了不少东西。但是又是做了大半年之后,iOS项目没有了,Android的项目反而很紧张,我们整个团队就转去做Android开发了。。。当时整个团队只有我懂Android开发。X公司的基因就是这样子,随意切换和调动团队的开发方向和项目。这么多年了,我算经历了几次这种转换。

转做Android开发之后没有多久,我就出来加入了一个创业公司,在创业公司负责Android项目的重构与开发。这次重构与开发由我独自一人操刀,所以收获还是挺大的。不过一年之后,我最终还是离开了那个创业公司,我留下的框架我觉得够他们迭代两个大版本了。前段时间我看了他们最新的版本,整体架构还是没有太大变化,我觉得我那个架构还在支撑他们。离开创业公司之后,我又回到了X公司。

回到X公司,我也可以选择方向。因为当时的项目是将公司的通用的公共业务封装成SDK来给各个项目用。Android的SDK已经有团队在做并且做得差不多了。而iOS的因为我们想做跨平台的,所以用c++来做SDK,然后再封装一个Object—C的接口给iOS用。而c++这边很缺人,我就加入了。因为我很愿意写C++,想挑战一下自己。大概写了一个多月的C++,也封装了Object-C接口,我们写的SDK马上用到了项目中。因为有一个iOS项目功能很庞大,他们要用我们的SDK,并且我加入了他们项目,我又转入了iOS开发。我自己写c++SDK,然后写Object-C接口转接,然后直接用到项目中,一条龙我都做了。实际上,我很喜欢写c++那一个多月,我学到了很多东西,对c++有了进一步的了解和有了c++和Object-C混合编程经验。

然后又做了大半年iOS的项目,这个项目突然解散了,失败了。大部分的人员离职,原来的项目经理重组项目,吸取经验教训,小团队作战。他的想法是组织小部分人来重做项目,开始只做Android端。而当时留下来的人不多,而且项目经理只想要精英。他们找到了我。说实话,不大不小的X公司,我还真没发现有几个Android开发经验丰富和技术真的很好的。以前我刚来X公司的时候的那个团队,已经基本都离开了,他们都去大公司或创业。我绝对是团队了的Android经验最丰富和技术比较好的人。刚死掉的项目的Android端烂得我都不忍心看。新项目我加入了Android开发。

新项目的Android开发整个框架,有大部分是我搭建的,UI部分估计有90%是我写的。使用起来体验还不错,也得到了一些人的认可和赞赏。但是整个项目有些地方我还是不太满意,特别是项目package的命名和划分,因为这个最开始不是我做的。我又不能进行大改动,只好忍了。这留下了隐患。

又做了大半年,公司决定将这个项目升级,跟另外一个公司战略产品合并,形成一个新项目。也就是现在这个项目。我又转入了iOS开发,到今天为止,也有半个月了。实际上,在项目合并之前,老项目的iOS本的项目工程和基础架构是我建的。我当时是参考了Android的框架并改良了来做的。搭好框架之后,因为有新的团队进来接手,我就转交给他们了。可是现在我一看,原来的框架只留下了一点,很多都被干掉了。我当时搭建框架确实有点大,那是因为我考虑到了之后的业务和功能来做的。但是我估计是因为iOS负责人不了解我们项目的整体规划,看着我搭框架层次有点多,就简化了。这一简化就使得框架的可扩展行大大降低,现在要做新业务了,我觉得再这个被阉掉的框架上不好做。。而且我还发现这里面代码很多重复的,同一个协议竟然在不同的模块都实现了,而且是完全没有必要的那种。这说明开发人员之间沟通不多,都是各干各的。另外一个就是这个项目框架有问题,协议的时候竟然不是专门集中在一个地方,大家各自实现,重复了也不知道。如果项目结构划分得好话,有专门的groud,有什么协议已实现了一目了然。项目负责人不作为也脱不了干系。

因为项目问题,我偶尔还会打开Android的项目来做参考。我发现新加入开发者后,项目被搞得面目全非。每个新人可能觉得老项目有些地方看着不爽,都想自己重新实现一遍。改的最恐怖的是协议层,这个开始由别人搭建的。UI层变动得还好,因为这个是完全是我搭建的,模块划分失败清楚,命名也还好,大家都遵循。协议层开始我们都是自己写得框架,新人一来,他们非常不爽。在最初项目开始的时候,我也有点不爽协议层的这种实现,但是我认为换成别的框架也不见得有多好,并且做项目要考虑时间成本和其他的学习成本。我就保留了。但是新加入的其他同事他们觉得不爽,就想换成Volley,然后还有人说要用Retrofit,还要用EventBus。原来的项目数据库用得少,他们又加入了GreenDao之类的,有人要用注解。其实用这些新框架新技术我并不反对,我没想到他们会这么热衷用。有些用了框架确实省了事,可是我看到有些用了框架之后代码结构一团糟,我有点受不了。

才半个多月,我就已经不太能认出这个项目的框架了。。我发现技术人员都是很自我,看到不爽的功能每个人都想自己来实现一把。我觉得成熟成技术人和普通技术人员的一个重要区别是:当加入一个新项目的时候,他要实现一个功能或者方法,他们去该项目中是不是已经有实现,有的话就直接拿来用,或者扩展它。还有他会尽量去适应新项目的代码风格,不是不管三七二十一就用自己的风格。我觉得每个人都能这么想这么做的话,代码管理会变得容易很多。


本来我是想写iOS和Android开发的技术心得,写着就变成了吐槽。。。我想说的是经历这多iOS开发和Android开发切换之后,我对Android开发和iOS开发有了较大的提升,以前我基本上比较看好iOS开发的,但是现在我觉得这两者并没有本质的却别,iOS开发是生态环境比较好,但是Android开发也有很多好处。IDE的话Android studio也越来越好。至于Java和Object-C语言,各有优劣。Java的优势之一是它很好做框架,也有很多开源库支持。Object-C的缺点是它没有命名空间和没有泛型,这导致一个不好就是文件名和方法名很长。当然Object-C也有很多好处。

项目的架构其实很重要,一个好的架构可以让参与其中的开发人员很乐意按照其中的规则办事,反之就会很乱,可能有很多重复代码,后面的项目变大之后扩展很困难。

Category: 技术 Tagged: Android iOS

Comments