主页 > 新闻中心 > 技术支持 >

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

2020-05-21 21:47:05

按我以前的习惯,我也会像被折叠的答案一样,告诉你:已经有无数人问过这个问题,已经有无数人答过这个问题,缺的只是你基本诚意上的行动:)。

又因为这些“老”问题实在难以提起自己足够的兴趣,所以要我自己增加足够多的回答理由,于是!

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

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

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

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

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

在实成性能调优之后,我们需要开始让App向“最后样子”靠拢。我们需要设计师给我们一套切图,包括图标、背景、启动页大图,甚至色值等。

然后,我们开始做界面,把该加的Image都加上,把该有的动画效果都加上。在这个过程中,如果有些效果自己不熟悉,可以先做一版勉强可看的,在这个基础上再继续优化。要保证,至少能用得上,不至于太惨不忍睹。

在所有视图都做完之后,我们可以从重用和性能的角度把代码重构一遍。当然最理想的状态就是动手之前先考虑好怎么重用怎么优化性能,只是一般很难做到。尤其是对于新手,几乎不可能做到。所以,先完成再调优,是一般人的一般原则。

App开发上的重用,一般包括几大块:TableView和CollectionView上的单元格Cell重用,独立视图重用(这个在Storyboard上比较麻烦一点,在xib上比较方便一点),类的重用。

重用的最大好处是方便改。因为重用后,在同一个地方的代码或设计,只需要改一个地方就可以在所有地方完成效果的修改,比较好维护。

性能调优,也有几大块,一般关注得比较多的是内存和CPU执行的优化,这两块一般用专业工具来完成,比如专门看一下这个链接里的内容!# 19 调试!

比较容易忽略的是方法的“输入输出控制”。就是一个方法开始之前,传递进来的数据应该符合什么要求,方法结束之前,传递出去的数据应该符合什么要求。这个一般会被归为“测试驱动开发”,在写任何功能代码前,应该先设计好。事实上做起来或推广起来并不容易。多数人一般只会在功能完成后,加一步做检查。

在所有功能实现之后,如果这个时候设计师也已经完成效果图,我们可以开始完成基本的视图开发。

视图的开发,两大类:TableView和CollectionView。相对于简单的数据呈列,一般会通过TableView来完成。如果对分布排版有更多的要求,一般会通过CollectionView来完成。把这两个View吃透,可以完成多数的简单视图开发。

如果APP有非常多的个性化奇效果的视图设计,那就没办法了,农开发流程告诉你为什么只能开个空的ViewController,自己一点点堆。这里,也会有两个层面。一、通过标准控件堆叠出效果。这样的性能可能会差一些。二、代码手写视图。个中苦逼,谁写谁知道。还有第三层次:代码“画”视图。

做视图时,要尽量贴近设计效果,否则产品或测试会把达不到效果的地方报Bug,可能会收到一份长达5页纸的BugList。为什么不是百分百实现原设计,谁做过谁知道。

在所有回调处理都正常之后,可以开始接入后端接口请求数据。请求主要有四类GET/POST 和同步/异步。请求过程中要特别注意所要求的协议和参数类型。

因为不是所有情况下都能保证网络畅通,为了让用户在无网络的情况下,都能做一些基本的操作,我们需要缓存部分从服务器上请求过来的数据。

如果缓存的东西比较少,可以用NSCoding。如果比较多,就需要CoreData或者其它可以增量存储的类库。

在基本的流程交互实现之后,我们往往需要考虑单向操作后的回调。比如单击一个按钮后,把数据传回上一个页面或刷新上一个页面等。

回调有两大类,一个是Delegate,一个是Block。Delegate的好处在于方便统一管理。Block的好处在于实现方便。

我现在基本上用Block。先在类里增加一个Block属性,属性特性注意用Copy。然后在需要用的地方创建Block对象,把Block变量赋给对应的对象属性。

在数据容器都设计完之后,可以开始根据产品设计的APP操作流程实现模型的交互。比如对数组的查删增改。这里要尽量满足产品设计的流程,否则也会归入BugList。

过程中需要注意打印Log观察数据容器的变化,看看变化是不是符合自己的交互预期。

在对象属性设计完成之后,可以考虑模型里用到的数据通过什么数据容器来装载。

单例装载整个程序里都会用到的同一份数据。数组装载有顺序要求的数据。字典装载需要按值查找的数据。

在功能模型统计完成之后,可以开始类的设计。类的设计,是一个面向对象的过程。

比如一个APP的首页,需要显示最新热点和用户关注,那么我们就针对“首页”这个对象设计一个Home的类,这个类里有Hots和Collects两个属性,ShowHots和ShowCollects两个方法。

上帝是我们的老板,所以,老板说要有首页,于是我们有了首页;老板说要有最新热点,于是我们有了最新热点;老板说要有用户关注,于是我们有了用户关注。

这种上帝畅想的统计工作,一般由产品完成。当上帝非常“民主”,只说“要有APP”之后,就开着车带着秘书“躲猫猫”的话,后续畅想工作会交给产品来完成。等产品统计完了,她们会以“老板说”或“用户习惯”开头向我们讲述她们的伟大统计或设计。

这是APP一切的开始,是混沌,是太初,是太守,是太太,是什么都行,就是一定得定啊,这里不定,上面的所有步骤都没法干了啊。定定定定定定,一定要定定定定定啊啊啊啊!!!!!

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

这才是软件工程师跟码农的真正区别。真正的软件工程师,他应该可以对外输出开发指南和成熟模块,大大提升开发界的开发效率。

很多老手害怕技术开发这个日新月异的世界,害怕那些无限进取的同行,他们会选择闭帚自珍,然后就是闭门造车,然后就是闭目等死。

凯文。凯利师告诉我们,所有科技的发展都必然会发生,不可避免,科技在人类创造出来之后,就已经不受人类控制,人类最终只能被科技奴役。我们可以选择在科技上加上自己的一脚,也可以选择被科技压断双腿拖着前行。就像《黑客帝国》里一样,红还是蓝,你自己选。

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

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

共同研究,开放源码,不在于我们可以从别人那里得到多少东西,而在于我们自己本身确实有实打实的输出需求。我不知道怎么解释这个需求,我只知道我确实有,我接触过的优秀伙伴们都有。而且,往往输出越多的人获得越多,超标输出的人赢得了全世界。

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

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

我想到啦,我有终极:开发很简单,无非是多写代码多读书!!!少年,你缺的只是行动!!!

上一篇:发字典编制开

下一篇:掘与重构方法研究[D]组合横切关注自动化挖

返回顶部
返回顶部