手记

移动开发中原生APP开发的痛点!

开发原生app 的痛点

虽然开发移动app是目前的大趋势, 但是原生开发, 有几种弊病是我一致很痛恨的

无法做到实时升级.

web 程序的代码写在服务器端. 我们想改就改, 不需要征求客户的意见. 但是看看ios开发, 上个app 特别麻烦, 各种审核, 没有一个月首次审批下不来, 后期升级,每次都要一两周. 黄花菜都凉了. 程序员有修复的心, 也没有办法马上让修改生效.

所以, 移动app 一出故障, 往往第二天在官方微博,微信公众账号上发帖子, 里面有一张合影, 开发团队鞠躬认罪. 囧rz

这种痛点, 普通人感受不到, 但是作为项目负责人, 往往会急死的. 两天app用不了, 用户就跑到你的竞争对手那里去了.

开发的又慢又贵.

目前的前端程序员, 啥都不想做, 做啥都觉得麻烦.

这个不怪程序员. 他们确实麻烦. 产品经理提出个需求, 你开车去干嘛干嘛啊! 结果程序员需要先找到一堆螺丝零件, 一个一个的拼凑起来, 先行程一个小零件,再行程个轮子,再慢慢弄个大零件, 三个月以后,这个车子才跑得起来.

各位做java, oc, php, .net 的同学,想想你们的生产力吧.

  • 你是不是有时候觉得自己很牛B? 学会了好多好多知识. 知道了好多好多class, api. 看到队伍中又进来一只菜鸟,想起了自己刚入行的青涩样子.

  • 你是不是有时候觉得自己很迷茫? 明明干了好几年,挂了个"高级工程师"的头衔, 但是一个人根本没法做成一个项目. 要么你只会后端, 要么你只会写前端. 写后端的看不懂 android,ios, 前端的搞不明白网络, Linux.

所以, 传统的开发方式, 一个人做不成事儿. 人多了又容易各种踢皮球.

( 顺便提一下, 工作了2,3年java, oc, 等传统语言的人, 往往心理压力多大, 处于心理亚健康状态. 做java, oc, php的一线程序员, 没几个是快乐的. 往往难以相处. 这样的人在大公司和互联网公司里特别常见. 个人以为这是 内心苦闷造成的 职业病. 目前我真的很认真在思考这个问题, 欢迎各位同学们说出你们的看法. )

要编译, 特别容易溜号

编译这个东西很奇怪. 现在我们会想,当年的人写程序为什么要用往纸上打孔. 而很快, 未来的程序员就会想,当年的老前辈写程序为什么要编译.

人的集中精力时间只有7秒. 而无论安卓还是IOS, 每次都要等待编译. 所以,每次编译,都会让人走神.

一旦走神, 往往半个小时之内都回不过神来.

所以,编译让程序员很痛苦.

传统语言学习起来特别麻烦.

最简单的例子: 用java打开文件. 你需要用到下面的类:
String, BufferedReader, FileReader, List, ArrayList.

可以说, 人的精力根本无法集中在处理逻辑上. 都耗费在语法上了.

附录: 一个典型的java打开文件的例子:

private List<String> readFile(String filename)
{
  List<String> records = new ArrayList<String>();
  try
  {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    String line;
    while ((line = reader.readLine()) != null)
    {
      records.add(line);
    }
    reader.close();
    return records;
  }
  catch (Exception e)
  {
    System.err.format("Exception occurred trying to read '%s'.", filename);
    e.printStackTrace();
    return null;
  }
}

对比下Ruby: , 只需要知道 File 一个类就够了.

content = File.read 'some_file.txt'

所以,一行ruby代码至少顶5行java代码.

充满了各种各样的废代码.

见上面 java 代码. 再看ruby代码. 大家都会觉得ruby代码更加简洁.

废代码的概念: 英文叫 boiler plate code. (你也可以叫它鸡肋代码) 没它不行, 程序运行不了; 有它吧,发现它没有一点实际作用.

比如, 下面这段代码, 是公认的 废代码:

package a.b.com;
import ...;
class ... {
   public void main(String args[]){
      // 这里开始才是真正有意义的代码.
   }
}

下面这个, 也是废代码:

<!doctype>
<html>
  <head>
  </head>
  <body>
  </body>
</html>
目前主流开发 app 的传统方式
  1. 原生开发. 不用说了.我是小公司, 招人的时候一周能收到800封简历, 600 个IOS, 200个 安卓. 仿佛全世界的人都在做这个.

  2. phonegap 这样的老牌H5. 不说了.处于被淘汰的地步.
目前 小众开发 app 的方式
Titanium

Titanium 是基于commonJS的技术, 也就是, 在android, ios上运行javascript 代码. 你的app , 一次用js 代码写好, 可以跨平台运行.

比较成熟. 也是我过去一年多主推的.

使用的要求是: 团队的英语水平不错, 有5年以上的技术总监.

回头我会详细的为大家讲解Titanium. 我的书稿也找到了出版社. 欢迎大家关注.

Titanium 的入门门槛低, 想用好的话, 门槛很高. 它的难点在于调用原生的android, ios 第三方组件. 对于新手来说, 完全就是懵了...

Xamarin

跟Titanium 一样,只是使用c#作为开发语言. 我不熟悉. 圈子也很小.

API Cloud

广告语是 让人可以快速对前端和后端上手. 我没有学习过, 听说是"一天做完, 一个月填坑".

底层应该是用nodejs来封装的.

总之,我不看好这样的技术路线. 与其学习API Cloud, 不如直接学习后端语言. 可以看到最新鲜的出错日志和底层信息.

另外, API Cloud的具体作用还得观望. 这种技术往往容易封装的过度, 当用户需要一点儿定制化的东西时, 会特别复杂.

rubymotion

这个是我很推崇的. 与Titanium 相比,它使用了ruby语言, 更加靠近底层. android/ios能调用的它都能调用.

前几年不完善. 现在越来越完善了. 我特别看好这种语言.

不过在国内也是小众.

单页应用: Single Page App (SPA)

个人认为单页应用是被微信救活的. 手机上打开网页的速度特别慢. 所以, 不需要全页加载( full page reload) ,只需要发起ajax请求到后端, 性能上特别适合给移动端使用.

这样的组件有下面几种:

Angular: 老牌, 但是好难用

google推出的. github上也是顶级项目. 不过特别难学. 我在3年前用它做过项目, 难学的不要不要的. 都是英文文档. 我就慢慢啃. 看到 "directive" 那一章, 看了3遍没看懂. 下面大家的留言也都是: "这是我看到的最烂的文档" 这样的话.

不知道现在2.0 是否有所改善. 据说还是很折磨人.

React

Facebook 推出的技术, 也是火的一塌糊涂. 个人以为,不是因为它是个单页应用, 而是因为它有 react native 的技术, 用HTML写原生app.

我不看好这个功能, 它还有很长的路要走. 而且似乎很不直管. 与其各种折腾,不如直接用原生的功能.

另外, React把前端代码和后端代码写在一起,我觉得很奇怪. 两种代码在物理上是隔绝的, 突然要写在一起, ...

Meteor : 跟React 很相似.

略了.

Vuejs: 敏捷开发H5app的框架.

必学啊! 同学们!

这个框架的特点是:

  1. 作者是中国人. 尤雨溪. google工作,技术达人.中文文档就是作者亲手写的.
  2. 极其简单. 学习angular用一个月, react用半个月, 学习vue有一周足够了.
  3. url 做页面跳转的导向, 特别容易与原生整合.
结语

好了, 基本上我大概描述了下 移动开发在我眼中的情况. 个人色彩很浓郁. 完全代表个人主观臆断. ^_^ 期望听到大家不同的声音.

下一篇文章我会跟大家说两种我所使用过得敏捷开发方式.

55人推荐
随时随地看视频
慕课网APP

热门评论

这篇文章,我也是醉了。作者你在appstore提交过app么?什么时候审核需要一个月了? 再者,没有经过严格测试的app就发出去怪谁?听过热更新么?能否关心一点新技术。再不懂,听过app store的紧急审核么? 然后这java的例子,就这几行代码都看着眼晕,你还干什么开发。 通篇都是狗屎,来误导什么人

DCloud呢,楼主咋不提

这广告不错,花了这么多时间,就是为了最一个重点,哥决定学了嘻嘻嘻嘻

查看全部评论