技术人员在转向移动开发过程中有哪些经验和教训值得大家借鉴?

标签: 技术人员 移动 开发 | 发表时间:2012-12-18 07:37 | 作者:覃超
出处:http://www.zhihu.com/rss
说“转型”可能我还不够资格,因为我从工作开始就直接在做mobile,只是之前在大学里面搞过一些程序竞赛和TopCoder的组件开发在桌面电脑上面,所以从一开始我就是还没完全定型的程序员,基本上什么东西都需要从头学习。第一次真正开发mobile程序还是在CMU读master的时候,那时做毕业论文,研究Android系统的安全性,于是第一次装了Android的文档和自己照着样例写了一个,感觉还挺不错(其实就是写Java)再后来就是进入Facebook后,从Boot camp毕业后就进入Mobile team,当时公司里面大部分人还是搞PHP的,但是公司鼓励大家做Mobile开发,说是以后的方向,于是我从一入职就开始了全面的Mobile开发。 

个人的经验如下:

技术方面: 我个人感觉Mobile上面更加注重程序的效率,程序要简洁,速度快,同时复杂度要尽量低。另外就是在写程序时具体要注意的事项,比如脑子里要清楚什么工作要在什么thread里做。相比开发Mac程序,或者web app,亦或者是现在的iOS或者Android开发,MVC模式已经深入人心,它的本质就是把代码按照其做的事情分类,坐不同工作的代码在不同的模块里; Thread分类和它也类似。刚开始进行Android Facebook和Facebook Messenger开发的时候,我们的Tech Lead -- Jon Perlow 就在code review中不断指出我的很多操作还是像桌面程序一样放在主线程中,而Android下主线程即 UI thread,这样就很可能降低程序的流畅性。后来在他的影响下,现在一看到有关IO和大规模的处理,即将它放入到worker thread里去。iOS下的Facebook app也基于这种思想,不过我们公司自己抽象出来一套库,用它可以实现更加高级的操作。 

现在主要的手机平台就是Android和iOS,所以建议两个都要去了解,然后专注于一个平台。如果Android的话,除了看Google官网外( http://developer.android.com/training/index.html ), 很多时候当你具体要调用一个API,但是文档上面有疑惑的时候,最好的办法肯定还是能回到代码里面去确认。通篇浏览Android的代码肯定不现实,我个人(也是公司里面)觉得最有用的办法就是安装plugin: https://chrome.google.com/webstore/detail/android-sdk-reference-sea/hgcbffeicehlpmgmnhnkjbjoldkfhoin  ,然后搜到文档后,页面上直接有一个链接 (View Source)来方便查看代码。回到上面那个线程切换的问题,Android有三种办法:AsyncTask, Handler, Executor. 在代码里面(还有Stack Overflow上面的讨论),AsyncTask是最差的办法,它属于Google自己加入的一个Hack,大量在自己的Android App里面使用会发生阻碍程序性能的奇怪问题(因为你对它的worker thread pool没有任何控制);Handler比较简单,适合将单个任务快速丢到另外的thread里面执行,但是从源代码就可以看出Handler本质上也是在调用executor。最后就是Executor自己了,它的坏处是比较复杂,不注意容易出错,但是好处就是性能好,而且功能强大。可以自己定义queue的属性,指定thread pool的大小,和筛选并处理或者取消还没被执行的任务等等。所以只有在源代码里面去确认后,才会对每个模块在使用有直接和全面的了解。这样就能理解为什么公司里面Android的编程规范里面来一句“Don't use AsyncTask"是什么意思。 多提一句,如果两个平台都做的话,还可以比较在iOS下面对线程切换的做法,iOS上鼓励的是使用GCD (grand-central-dispatch)。他们各有自己的特点,但是个人认为iOS的GCD更加简单,也更加符合人的思维。

另外就是UI方面,我做过Facebook Messenger for iOS的UI,但是设计毕竟不是来自本人之手,所以只当是自己的拙见。个人觉得UI越简洁越好,另外就是在设计UI的不要进入误区:认为app的Android版本和iPhone版本UI要一模一样。还有一些自己在做UI的时候,designer给我的细节性的建议:“比如text一般加一个pixel的半透明的shadow“, 按钮(透明)的实际大小一般比贴图再大一些,这样更方便用户触摸。

上面都是在讨论的时候,即兴想到的东西,没有太多整理。不过这两年在FB的打磨让我觉得最重要的不是你的技术多牛,写代码写得多快,而是适应力要强,能够也愿意push自己去转型。我见过不少人,之前对某一技术或者某一领域炉火纯青了,就一直想呆在自己的领域里,说是精益求精也好,说是吃老本也好,更有甚者就是想用老本的技术来用于新的领域。Mobile上面跑HTML5的离线App我觉得就是其中一个,具体细节我整理一下,放到另外一个问题里。

-- 完 --

下载知乎 iPhone 客户端: http://zhi.hu/ios

相关 [技术人员 移动 开发] 推荐:

技术人员在转向移动开发过程中有哪些经验和教训值得大家借鉴?

- - 知乎每日精选
说“转型”可能我还不够资格,因为我从工作开始就直接在做mobile,只是之前在大学里面搞过一些程序竞赛和TopCoder的组件开发在桌面电脑上面,所以从一开始我就是还没完全定型的程序员,基本上什么东西都需要从头学习. 技术方面: 我个人感觉Mobile上面更加注重程序的效率,程序要简洁,速度快,同时复杂度要尽量低.

技术人员的眼界

- blankyao - Solrex Shuffling
意识到眼界的重要性,最初是在大学时学长的交流会上. 南大数学系有一个传统,每年总有那么两三次组织高年级的同学开经验交流会. 这些交流会可能有明确主题,例如留学或是找工作,也可能没有明确主题. 幼稚如我,在大一阶段拒绝参加任何形式的社团或者活动,认为踏踏实实做好眼前的事情足矣,闲暇时间基本花费在小说上.

移动开发那些事

- - 微博UDC
说实话,我们这次开发移动端的项目,整个项目组的人都是第一次,最初立项的时候为是选择native app和web app还争论了一番,最后综合考虑,我们选择了web(我们选择了h5)开发. 但从这两种开发模式的特点来说,从它们诞生之日起就开始了不断的争论,孰好孰坏,本文不作探讨,只是简单罗列下本人开发遇到的问题和最终的解决方案.

移动开发之总结

- - SegmentFault 最新的文章
1、-webkit-tap-highlight-color:rgba(255,255,255,0)可以同时屏蔽ios和android下点击元素时出现的阴影. 备注:transparent的属性值在android下无效. 2、-webkit-appearance:none可以同时屏蔽输入框怪异的内阴影.

技术人员创业的短板

- Ryan - DBA Notes
越来越多的做技术的朋友开始加入互联网创业的大军. 这几年来,的确见到过不少技术人员创业的成功典范,但没见到没听到过的创业不成功的案例应该更多,所以,先别受那些成功故事的蛊惑,从那些失败的项目或是创业人身上吸收经验和教训更让人受益. 作为一个技术出身的创业者,其长处当然是技术,对自己如何运用技术做出自己心目中的理想产品有把握和信心.

技术人员能力模型

- 丹枫 - 啃饼随笔
上周和harvey讨论了一份技术人员能力模型,是用于技术人员自身对照并引导自己进步的一个模型,并不是用于评估他人的模型. 感觉harvey总结的不错,挺靠谱的,凭回忆记录一下,希望对你也有用. 模型分为四块:coding、设计、项目管理和扩展. coding是基础,所有的技术人员都必须拥有这个能力.

技术人员的发展之路

- - 酷 壳 – CoolShell
2012年的时候写过一篇叫《 程序算法与人生选择》的文章,我用算法来类比如何做选择,说白了就是怎么去计算,但是并没有讲程序员可以发展的方向 有哪些. 所以,就算是有这些所谓的方法论,我们可能对自己的发展还是会很纠结和无所事从,尤其是人到了30岁,这种彷徨和迷惑越来越重. 虽然我之前也写过一篇《 编程年龄和编程技能》的文章,但是还是有很多做技术的人对于自己能否在年纪大时还能去做技术感到没有信心.

2011 移动平台开发现状

- 山河之外 - 互联网的那点事...
Visionmobile 根据“2011 开发者经济调查报告”(点击这里下载该报告)中的数据制作了一幅信息图,使我们可以一览手机各平台的开发现状. 这幅信息图关注的的手机平台有 Android,黑莓,iOS(iPhone),Java ME,Mobile web,Symbian,Windows Phone.

jQuery Mobile开发HTML5移动应用

- - HTML5研究小组
随着移动互联世界的到来,目前已发展到多种移动 操作系统割据的局面,而开发者则急需要能运用原有的开发知识和技能,快速方便地构建移动应用程序,并期望能运行在不同的 手机操作平台上,比如Android,iOS,黑莓等. 而目前,出现了一批十分优秀的支持HTML5/CSS3的移动应用开发框架,其中最为大家熟悉的是jQuery Mobile框架(http:// jquerymobile.com),它可以让熟悉jQuery框架的开发者快速开发出基于HTML5的移动应用,而且直接通过 手机的浏览器即可浏览.