你好,游客 登录 注册 搜索
背景:
阅读新闻

coder@client - 放翁(文初)的一亩三分地

[日期:2013-04-10] 来源:  作者: [字体: ]
从接触iOS开发到正式做千牛客户端断断续续已经有10个月左右了,网络通信,文件系统,多线程,压缩,加密,通知,手势,视图,IAP,Appstore上架...都正正经经的做过一遍了,有些感触(当然在手机端这行我还是“涉世未深”,所说的仅仅是自己感受到的)
如果不想向着设计师角度发展,那各种优美的交互和动画就全当作自己的兴趣爱好去玩(如果你仔细看过苹果的HIG,就能深刻体会到开发一个好的APP如何找到设计的度是最重要的,强烈建议不论是否是无线开发的同学去看看苹果的HIG文档,能够给产品开发人员非常深刻的启示)。如果不想向着产品运营发展,那么各种APP的专业人士评价都不要太当真,好的产品往往都是“突然”就冒出来了,而没有经过精心设计和安排,同时各种APP背后都有强大的后台系统和网站在支撑,工具类的APP,起来快,走的也快。
那如果想做个手机端的Coder,可以看看下面的一些感触:
手机端和服务器端几个差异点(不仅限于这些):1.交互行为顺序化。2.资源独享与共享。3.环境因素影响大。4.受制于客户端开发框架成熟度。5.升级无法控制。
交互行为顺序化:手机端用户的交互界面就一个屏幕,因此如果不考虑性能问题之类的,单线程足以满足所有客户端处理(因此可以看见iOS的所有界面渲染都必须在main thread完成),由此可以看见整体客户端设计在不考虑性能的情况下可以无并发处理。(串行化的程序设计和并行化程序设计的复杂度相差一个数量级以上,程序员可提升的设计空间被极大压缩)就算考虑到了性能方面因素,最多也只能用简单的后台线程(RunLoop,dispatcher等)来实现异步网络交互,数据更新,压缩等操作,但设计模式也相对来说比较简单,同时考虑手机端能力有限,按需处理成为主流(意味着不用过度做类似服务端的削峰填谷似的设计)。


资源独享与共享:
资源独享指的是客户端应用不会随着业务的用户数增长对服务器资源成等比增长,因为客户端应用主要消耗的是客户端的硬件资源和带宽资源,所以服务端的并发控制设计完全不用考虑,资源使用优化主要集中在耗电,网络流量上,而这两点的优化很多时候设计要点就是:简单,直接,按需执行。另一方面,资源共享指的是所有的应用都共享客户端的资源,因此资源方面的优化解决的是不被“骂”的状况,但不解决资源利用率提升的问题。


环境因素影响大:
客户端的硬件适配,OS适配,不同网络环境下的处理,和其他应用冲突,这些问题会消耗掉开发工程师大量时间。


受制于客户端开发框架成熟度:
iOS的开发可以底层到直接用CF的函数去开发,但很多时候都会选择NS的函数,因为这个封闭的开发框架本身的一点优化就能够极大的提高效率,好比虽然很习惯自己管理对象,但ARC的成熟和便利可以让更多人释放去做更应该关注的事,很多人都习惯使用dispatcher,RunLoop怎么原生的使用都不是很清楚,但其实如果不理解RunLoop使用场景和方式,反而会有更多的反效果,包括File是自己用Stream还是用FileManager...,因此可以看到其实语言都是一样(Java,Python...),框架总是会吸收外部更好的设计,封装更高层给业务开发者,对于iOS这种硬件软件封闭配套的模式,开发者受限制更大。(Android这方面来说会给开发者更大的空间,硬软件分离)


升级无法控制:
做客户端应用的最大麻烦就是这点,也正是因为这点才催生H5混搭模式在手机平台大行其道。


当然差异不仅仅只有这些,但是从这些上面能看到一些问题,如果你是一个应用开发者,仅仅关心做好App,那么个人成长很快就会碰到天花板,如果你在一家大公司里面就职,那就真的成了砌砖的。一个想要活久一点的APP,用户最关心(有排序):内容,可用性,便利性,美观。而这些方面的提升和APP开发者能力提升怎么能够达成更多的契合点?


下面有几个点可以去考虑:
安全,即时性,问题排查体系,内置模块化,小工具框架库


安全:本地应用身份验证,数据储存安全,数据传输安全,用户行为鉴别…(最终安全归结到两点:用户输入+客户端服务端协作认证)
即时性:Push。
问题排查体系:沉淀各种环境问题处理源数据(集成必要的钩子,工具),支持本地和远程协同定位问题。
内置模块化:客户端模块可插拔,客户端最大的反馈就是“闪退”,其实客户端闪退是对程序的一种保护,因为客户端的重启成本非常低,但如果由于数据或者服务端产生的闪退,可能导致整个应用无法使用,也就是一个模块出现问题,整个应用就处于不可用。因此客户端内部模块化框架联合服务端插件模块可见控制,可以最大程度上降低数据和环境带来的风险,同时也可以变成Beta发布的一种模式。
小工具框架库:布局交互,网络通信,图片缓存,压缩,持久化…(这些主要还是开发经验的积累带来沉淀,但会随着语言的变化而腐烂)




其实总体上来说,App开发的同学一定要Touch的Server的设计,同时更多的介入产品和交互设计中,这行业的Coder要持久在某一点做深不容易,因为越接近客户的Coder越依赖于外部环境(硬件,OS,Server,产品形态…),所以既然选择了这行,就多一些产品的灵感,多一些跨界的技术涉猎。(因此如果你在大公司做这行要有更大的危机感,因为“流水线”会害死你,坑了你的青春)




收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻