开发流程告诉你,为什么是软件工程师而不是码农

清醒疯子 发布于 2015年01月24日
tinyfool 等1人欣赏。

我们以一个APP成功上线,作为思考的起点,往前推,看看我们需要做些什么?

1、一个99美元的开发者帐号 嗯,如果不需要真机跑程序,这个可以是最后一步。当然早早买个开发帐号,好处会非常大,看到自己的程序在真机上跑,整个人都兴奋起来,就不用老喝鸡汤。

2、一个App包 当然,这才是真正难点。所以这里会有大量的细分步骤。

1)异常控制 在所有数据都没有问题之后,我们需要反复用各种奇葩操作来把应用搞崩溃,或者把数据搞乱,看看会有哪些异常。除此之外,在设计的过程中,也需要处理一下,现实中不大可能出现的,自己能想象出来的异常情况。

2)联调数据 在所有色差都调整过来之后,我们需要切换到线上环境(或称生产环境)进行真实数据联调。这一步主要的工作不在iOS端,而是推送数据的后端。iOS开发,主要是协助后端发现计算或算法或接口问题。

3)适配色差 在完成第一套界面之后,我们需要找不同型号的终端来检验屏幕适配和色差调整。一般的情况,会让设计师出全套分辨率的图标、大图,和给颜色的具体色值。如果做得彻底一点,可以根据不同的设备在代码上使用不同的色值。

4)切图界面 在实成性能调优之后,我们需要开始让App向“最后样子”靠拢。我们需要设计师给我们一套切图,包括图标、背景、启动页大图,甚至色值等。 然后,我们开始做界面,把该加的Image都加上,把该有的动画效果都加上。在这个过程中,如果有些效果自己不熟悉,可以先做一版勉强可看的,在这个基础上再继续优化。要保证,至少能用得上,不至于太惨不忍睹。

5)重用性能 在所有视图都做完之后,我们可以从重用和性能的角度把代码重构一遍。当然最理想的状态就是动手之前先考虑好怎么重用怎么优化性能,只是一般很难做到。尤其是对于新手,几乎不可能做到。所以,先完成再调优,是一般人的一般原则。 App开发上的重用,一般包括几大块:TableView和CollectionView上的单元格Cell重用,独立视图重用(这个在Storyboard上比较麻烦一点,在xib上比较方便一点),类的重用。 重用的最大好处是方便改。因为重用后,在同一个地方的代码或设计,只需要改一个地方就可以在所有地方完成效果的修改,比较好维护。 性能调优,也有几大块,一般关注得比较多的是内存和CPU执行的优化,这两块一般用专业工具来完成,比如专门看一下这个链接里的内容:# 19 调试 比较容易忽略的是方法的“输入输出控制”。就是一个方法开始之前,传递进来的数据应该符合什么要求,方法结束之前,传递出去的数据应该符合什么要求。这个一般会被归为“测试驱动开发”,在写任何功能代码前,应该先设计好。事实上做起来或推广起来并不容易。多数人一般只会在功能完成后,加一步做检查。

6)效果视图 在所有功能实现之后,如果这个时候设计师也已经完成效果图,我们可以开始完成基本的视图开发。 视图的开发,两大类:TableView和CollectionView。相对于简单的数据呈列,一般会通过TableView来完成。如果对分布排版有更多的要求,一般会通过CollectionView来完成。把这两个View吃透,可以完成多数的简单视图开发。 如果APP有非常多的个性化奇效果的视图设计,那就没办法了,只能开个空的ViewController,自己一点点堆。这里,也会有两个层面。一、通过标准控件堆叠出效果。这样的性能可能会差一些。二、代码手写视图。个中苦逼,谁写谁知道。还有第三层次:代码“画”视图。 做视图时,要尽量贴近设计效果,否则产品或测试会把达不到效果的地方报Bug,可能会收到一份长达5页纸的BugList。为什么不是百分百实现原设计,谁做过谁知道。

7)存储请求 在所有回调处理都正常之后,可以开始接入后端接口请求数据。请求主要有四类GET/POST 和同步/异步。请求过程中要特别注意所要求的协议和参数类型。 因为不是所有情况下都能保证网络畅通,为了让用户在无网络的情况下,都能做一些基本的操作,我们需要缓存部分从服务器上请求过来的数据。 如果缓存的东西比较少,可以用NSCoding。如果比较多,就需要CoreData或者其它可以增量存储的类库。 缓存的操作最好开个线程异步处理。

8)方法回调 在基本的流程交互实现之后,我们往往需要考虑单向操作后的回调。比如单击一个按钮后,把数据传回上一个页面或刷新上一个页面等。 回调有两大类,一个是Delegate,一个是Block。Delegate的好处在于方便统一管理。Block的好处在于实现方便。 我现在基本上用Block。先在类里增加一个Block属性,属性特性注意用Copy。然后在需要用的地方创建Block对象,把Block变量赋给对应的对象属性。

9)流程交互 在数据容器都设计完之后,可以开始根据产品设计的APP操作流程实现模型的交互。比如对数组的查删增改。这里要尽量满足产品设计的流程,否则也会归入BugList。 过程中需要注意打印Log观察数据容器的变化,看看变化是不是符合自己的交互预期。

10)单例组典 在对象属性设计完成之后,可以考虑模型里用到的数据通过什么数据容器来装载。 常用的数据容器有单例、数组和字典。 单例装载整个程序里都会用到的同一份数据。数组装载有顺序要求的数据。字典装载需要按值查找的数据。

11)对象属性 在功能模型统计完成之后,可以开始类的设计。类的设计,是一个面向对象的过程。 所谓面向对象,就是把所有东西都抽象为一类属性和方法。 比如一个APP的首页,需要显示最新热点和用户关注,那么我们就针对“首页”这个对象设计一个Home的类,这个类里有Hots和Collects两个属性,ShowHots和ShowCollects两个方法。

12)功能模型 上帝是我们的老板,所以,老板说要有首页,于是我们有了首页;老板说要有最新热点,于是我们有了最新热点;老板说要有用户关注,于是我们有了用户关注。 这种上帝畅想的统计工作,一般由产品完成。当上帝非常“民主”,只说“要有APP”之后,就开着车带着秘书“躲猫猫”的话,后续畅想工作会交给产品来完成。等产品统计完了,她们会以“老板说”或“用户习惯”开头向我们讲述她们的伟大统计或设计。 这是APP一切的开始,是混沌,是太初,是太守,是太太,是什么都行,就是一定得定啊,这里不定,上面的所有步骤都没法干了啊。定定定定定定,一定要定定定定定啊啊啊啊!!!!!

完了吗?没完!

就像苹果公司喜欢“One More Thing”一样,程序员的世界里,数字永远从“0”开始。于是一切结束之后,我们也需要一个:

0)指南模块 这才是软件工程师跟码农的真正区别。真正的软件工程师,他应该可以对外输出开发指南和成熟模块,大大提升开发界的开发效率。 很多老手害怕技术开发这个日新月异的世界,害怕那些无限进取的同行,他们会选择闭帚自珍,然后就是闭门造车,然后就是闭目等死。 凯文.凯利大法师告诉我们,所有科技的发展都必然会发生,不可避免,科技在人类创造出来之后,就已经不受人类控制,人类最终只能被科技奴役。我们可以选择在科技上加上自己的一脚,也可以选择被科技压断双腿拖着前行。就像《黑客帝国》里一样,红还是蓝,你自己选。

完了吗?没完!

粉丝群的一位朋友问我,在这个技术日新月异的世界里,已经累觉不爱了,怎么办?

疯子答曰:何以解忧,唯有搞基!

人,是群居动物。我们对同伙的需求,超出我们的想象。也许,没有任何同伙,我们也能过一辈子,然后孤独地死去。但是,只要尝过同伙的快乐,我相信少有人愿意重回孤独。就像酒一样。

所以,让我们再来一个助于我们冲破天际的反作用力:

-1)共研开源 共同研究,开放源码,不在于我们可以从别人那里得到多少东西,而在于我们自己本身确实有实打实的输出需求。我不知道怎么解释这个需求,我只知道我确实有,我接触过的优秀伙伴们都有。而且,往往输出越多的人获得越多,超标输出的人赢得了全世界。 如果一定要让我好好解释一下,或许我只能说:只有射了才快乐!

完了吗?没完!

为防一片赤血丹心遭折叠,保险起见,让我们回一下正题:)

在看完整个开发注程之后,我们不难知道,作为开发的真正工作,从模型设计开始。这也是无数大牛说“开发就是数据结构设计”的原因。

单从代码的层面来看开发工作,大体可以分以下两类四步: 二进 位置(内存地址)、解释(数据类型) 对象 属性(实例数据)、方法(数据操作)

所以,其实,不管是从底往上做开发,还是从顶向下做开发,看点基础类型的书,都不会吃大亏,就算特别高大上地想一开始就上来开发APP,一层一层剥下去,最后还是免不了要做功能模型设计。

不要想速成,不要急,因为急也没用。无根之萍,漂到哪都只是漂。

我发现我说那么多,还是容易被打为“没用也”,怎么破。。。。 我想到啦,我有终极大法:开发很简单,无非是多写代码多读书!!!少年,你缺的只是行动!!! 唉,终极大法就是好使,么么哒:)

共3条回复
russj 回复于 2015年01月24日

和做其他一样,抽象和总结能力很重要

本楼内容已经被删除
zcdll 回复于 2016年09月03日

看到 )共研开源 共同研究,开放源码,突然就想到了三体中,人类联合起来对抗三体舰队的那一段,高度重合啊,哈哈!

登录 或者 注册