分享我的iOS app 开发杂谈
iphone4火了之后,我一个冲动,买了个air,就想写ios 的app了。
结果可想而知。
然后,我还是能进到一个创业型公司。我把能找到工作的原因归咎在两点:一、市场对ios程序员需求很刚性。二、我不是毕业生。
第一点是至关重要的。然后我在公司的经历,让我觉得有点意外。
1、公司重视“用户体验”。
我接到的第一个任务就是写一个Twitter消息的个人展示,业务就是:如果你在我们的app上绑定了twitter账号,就可以在一个view上展示某个人的最新10条twitter,以及自己的一些可以公开的个人信息。
这次的开发我觉得难点就在UITableViewCell的动态高度上。但是复杂度还是不算高,因为ios本身就提供那些方法。然后就开始做所谓的用户体验了。
其中有好多个小点。罗列我所能理解的“用户体验”的东西吧。
a.点击区域变大
b.任何有功能的点击,都要有反馈(比如highlight)
c.拖动快,要快,非常快
其中c点我觉得可以拿来说,这个涉及到UITableView的性能优化。网上文章很多,总结也很多。其中的思想就是界面不能和数据同步加载,所有的优化说的都是这个——让主线程只用来响应用户操作!但是,这里面有很多细节,其实我也有地方没有搞明白,就是我看到别的app都有一个拖动时不显示内容的做法,我很想知道其中的细节。我在网上搜索,得到的最多回复是,draw it yourself。
这里面又有一个点令我很困惑,我在cell的drawInRect方法中,draw出cell的一张背景图,我以为这应该是最好的,但是,事实是这反而很相当卡,我同事对此解释的是,每次cell显示的时候,都会重新draw那张背景图,那当然慢!我瞬间发现自己的愚蠢,其实draw是draw其中改变的内容,而不是那些一成不变的内容啊。
这里面说到图片,然后我又有迷茫的地方了,就是异步加载图片。
因为有一些文章说,在cell中组合复杂的图形数据,会有感觉慢的问题,解决这个问题的方法,依然是异步,即使已经缓存了在本地的图片,也要异步读取。然后我又犯了逻辑错误就是:异步读取完的图片怎么在正确的时间点加载呢?我们用到的是一个block。
当然,上面的问题,我一直都觉得不是问题,因为我总是觉得实现上面说的那些细节,只是时间问题。但是,这种所谓的只是时间问题,恰恰是对一个创业型的公司来说是大问题,那句话怎么说的?哦,快鱼吃慢鱼。
于是就开始了无尽的加班。
小小的分割一下,因为上面有点长,下面要说的是另外一个大问题。
2、需求变更。
网络上关于这个问题的话题非常的多。大家应该也是心领神会。我这里想从自己最近想到的角度去说说这个问题。
a.注重“用户体验”带来的变更。
PD(Product Director)和UI designer 常常在讨论那些“用户体验”的问题。但是,他们两个里面又有很奇怪的关系,就是:PD常常都是在说一些 动作 。而UID 就是在确定具体内容。
其中有个点就是:PD常常会对我们说:(技术的)技术细节你们讨论确定就可以了。(设计)你再看看怎么设计比较顺眼。
然后整个沟通流程就是,
PD说:我想要的就是像twitter那种点击效果>UI设计>PD说这样好>UI再次设计>PD再说...
PD说:我想要的就是像twitter那种点击效果>程序设计..........................(LONG TIME)>PD说按设计稿上的设计>程序........................(加班)>对好稿了>新加需求(UI小改稿)>程序设计.................(加班)>...................
我实在不想用那些省略号,但是,没有这些省略号没有办法表达我的想法。
整体概念就是:开发团队用加班来消化需求变更带来的时间消耗。但是结果就是,开发团队成员疲惫不堪,成员内部矛盾增加,有意无意的说出一些抱怨的说话,也开始相互抱怨开发水平。
还有一个严重结果就是:项目依然没有按时完成。
CEO最后还是要亲自安排各种应急方案,做各种的补救措施,当然,结果大家也知道,项目出来了,没有预想中的那样满意。
在这一个点上,我是对PD很不满意的,而另外一个同事说的也很不错:这个项目根本就没有定型。
这样就相当于这段时间都是用生命在探索……这让我觉得很累。
注意,上面有一个点是说增加需求。下面就单独说说这个
3、追加需求
一般外包公司应该会在这个点上看得比较紧,意思就是在开发中客户的任何需求变动,都要成本(给钱才能改,或者给钱都不能改)。在我所在的公司,PD经常会在正常的开发周期增加需求。比如:
普通按钮>highlight>do something
以上就是这个按钮的功能。
next day:PD会先过来问你:
1、增加一个滑动显示extra的功能可以吗?
2、增加这个很麻烦吗?
3、增加吧。
大家一定会说,你可以拒绝啊!很好,下面写一个如果你拒绝PD的结果。
1、增加一个滑动显示extra的功能可以吗?
答:不可以。PD就会拿出来一个app对着你说:就好像这个app一样而已啦…………然后,就没有然后了。
2、增加这个很麻烦吗?
答:很麻烦啊。PD就会说,那加入到下一个版本的时候再做。
3、增加吧。
其实,作为一名software engineer,又怎么会在技术层面上说不可以呢……
所以我真想直接对PD说,你说的什么都可以完成,只是要时间!可是我没有勇气。悲剧啊!
上面不经意说到时间,接下来就要说说时间成本这个话题了,但是本文感觉很长了……
所以留待下次再分享。