从接触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,产品形态…),所以既然选择了这行,就多一些产品的灵感,多一些跨界的技术涉猎。(因此如果你在大公司做这行要有更大的危机感,因为“流水线”会害死你,坑了你的青春)
分享到:
相关推荐
编码器用于 Go 的 Zencoder 客户端用法使用别名导入包以方便使用 import (zencoder "github.com/streamrail/zencoder") 使用 zencoder.Options 指针引用初始化 zencoder.Client。 默认选项: type Options struct {...
SM4Coder e = new SM4Coder(); if(clientSecret.length() > 16) { clientSecret = clientSecret.substring(0, 16); } e.setSecretKey(clientSecret); return e.encryptData_ECB(decryptData); } catch ...
毕设_人事管理系统client.zip
coder-tools是程序员对一些新类库、新技术、新特性研究的笔记,为了让您更快更容易对这些新东西入手,时间久了可以达到温故而知新 jvm-library design-pattern 包含23种设计模式 structure-arithmetic 包含大量各类...
Pytank is a tank game for python coder用你写的代码控制坦克来和别人代码控制的坦克进行战斗,决出更出色的坦克控制代码。You will write a python code to control your tank and fight with your enemies.如何...
毕业设计的系统项目源码,可用于毕业设计、课程设计、参考学习等
本人一般新装系统后首先安装解码器包 K-Lite Mega Codec Pack再安装会声会影,现在我用的是会声会影X4,然后安装搭桥软件Debugmode_FrameServer,最后再安装压缩软件Carbon Coder 3以及刻录软件,见很多网友不会安装...
Java Version: Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) Client VM mixed mode --------------------------------------------------------------------------------------------- MATLAB ...
Coder Academy 在澳大利亚教授学生全栈 Web 开发已有大约三年时间,布里斯班校区是其最新扩展。 在此期间,该组织在当地科技界因毕业的初级开发人员而声名鹊起。 在同一个继续教育市场中,许多高等教育机构经常举办...
1.2 RPC架构一个完整的RPC架构里面包含了四个核心的组件,分别是Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。客户端(Client),服务的调用方。客户端存根(Client Stub),存放服务端的地址...
将conf文件夹从Mod Coder Pack: v2.5复制到回购根目录。 将a1.2.6 Client Jar复制到jars\minecraft.jar 运行gradlew :client:setupUserdev 设置运行配置: IntelliJ: JDK 8 类路径: $project.mod.main 主...
Now, building upon the success of his best-selling books Clean Code and The Clean Coder, legendary software craftsman Robert C. Martin (“Uncle Bob”) reveals those rules and helps you apply them. ...
Now, building upon the success of his best-selling books Clean Code and The Clean Coder, legendary software craftsman Robert C. Martin (“Uncle Bob”) reveals those rules and helps you apply them., ,...
Client块时还需要Simulink。 目前仅Windows和Linux支持该软件包。 嵌入式编码器解决方案仅在Linux上受支持。 MathWorks产品() 的MATLAB [可选] Simulink [可选] MATLAB Coder [可选] Simulink编码器 [可选]嵌入式...
让我们立方体 这是一个用Node.JS,Express,MongoDB,socket.io,react和material-ui编写的渐进式Web应用程序。...cd client && npm install && npm run start 有关内部结构和贡献的更多信息,请查看
包含paho.mqtt.c-master和paho.mqtt.cpp-master。版本为从gihub上下载的截止当前上传时间的最新版本
MySQL-server-5.0.22-0.i386.rpm MySQL-client-5.0.22-0.i386.rpm 我这里还有MySQL-server-5.1.17-0.i386.rpm 都是好用的,要的,可以MI我!
<END><br>15 , client.zip This application is about programming with Client Side Cursors. <END><br>16 , AccessSecurity.zip An Access97 security tool. Replaces going into Access97 and switching ...
基于C/S的聊天室