iOS高效编程秘诀—坚持编程习惯

资料源于网络

习惯会影响一个人做事的方式,也会直接影响效率。我经常在项目完成后自我总结,有哪些做得好的,有哪些做得不好的?然后把一些好的流程记录下来,并且重新运用回编程中。那些能够坚持去做的流程,就变成了我的编程习惯,这些良好的习惯就成就了我高效的编程效率!

一、轻文档先行

什么叫轻文档?其实轻文档指的是不需要按照标准的软件工程知识来编写需求分析,架构设计,模块设计,流程图时序图等文档,而是采用比较自由的方式,把你要做的事情,还有做事情的步骤描述清楚的文档。这样的文档不需要限制格式,甚至你可以手写在自己的笔记本上面,只要自己能看得懂,在开发过程中能够随时查阅就可以了。

1.
为什么要写文档

刚开始工作的时候,总是一接到任务就马上开始写代码,结果遇到了很多问题,例如:

①. 需求本身就存在问题,代码写到一半以后才发现

②. 部分需求没有表达清楚,发现的时候才去沟通,结果发现时间不够,或者跟之前的代码产生冲突

③. 代码写到一半时,发现自己思路不对或者不清晰了

最后很有可能导致项目延期。

如果在开发前就把需求分解好,把问题沟通清楚,把要做的点一个个列下来,就能大大地避免这些问题。

2.
文档写什么

①. 准备工作

在开始之前需要准备什么?例如做一个发送消息的界面,需要有以下的准备:

a. 接口协议

b. 测试环境

c. 测试账号

准备工作提前做好,往往会加快效率。为什么要把这些内容记录下来,是为了在开发过程中可以快速检索。如果等到开始开发以后再去查聊天记录,或者是找相关人员询问,那就慢了。

②. 罗列需要做的小功能点

例如做一个发送消息的界面,就有很多小功能点:

a. 发送界面

b. 发送的数据接口

c. 文本字数限制

如果你仔细一想,可能还会出现以下问题:

a. 是否需要登录?如果未登录,是否要引导登录

b. 对于发送失败的情况,要如何处理?

c. 字数超出限制时,如何交互?

d. 用户重复发相同的文本,是否要过滤?

e. 如何处理数据接口的错误码?

当你记录下这些小功能,并且跟产品经理沟通清楚以后,你的开发周期已经可以初步评估了,并且这时候也已经弄清楚这个需求有多少小功能,需要怎么划分模块,怎么构建内部流程。

对于部分流程复杂的功能,可以画一下流程图辅助理解

③. 记录这个需求的改动点

如果这是一个新需求,并且跟以前的版本没有任何关系,则可以忽略这部分

如果是这个需求会影响以前的代码,则需要将改动部分记录下来,因为项目中的 bug
有很多是改出来的,列出改动点后会让自己更清楚新功能带来的影响,减少很多低级bug

例如新增一个发送图片的功能,这个功能会影响聊天窗口的展示,会影响键盘,这些改动点就要记录下来。一来可以辅助思考有没有漏掉的小功能点,二来在自测试的时候需要覆盖聊天窗口的展示和键盘的切换。

④. 罗列自测试内容

编码完成以后,一定要进行自测试,自测试越仔细,越能提前发现 bug 并修复。如果是测试人员发现了 bug
,然后再提交给你,你这时候再去解决,效率往往会比较低。

以发送消息为例,自测内容也有很多:

a. 正常发送消息

b. 未登录时点击发送

c. 字数超出限制

d. 没有网络时点发送

e. 网络很差时不断点发送

等等.......

二、开始编码

1.
是重写还是保持不变

每做一个新需求,都有可能会面临这样的问题:

①. 以前的模块写得太烂了,很想重新写

②. 差不多的需求,以前用了这样的方式实现,这次想换一种方式实现

会考虑以上的问题,证明你是一个想要不断进步的人,但是,在做决定之前最好先考虑以下因素:

①. 重写模块,很可能牵一发而动全身,要想清楚改动可能带来的影响,以及解决这些问题需要的时间

②. 使用新方案实现需求,新的方案是否已经经过仔细的验证,如果没有,它可能会带来新问题

其实保持不变也有一些优势:

①. 可以比之前做得更快,因为你熟悉了

②. 不会出现新问题

考虑好以后,是重写还是保持现状,基本已经有答案了

不过保持现状并不意味着是放弃追求,你可以用业余的时间来证明你的方案,当它已经稳定了,可行了,那你随时都可以重写了。

2. 实现需求,Demo
先行

用 Demo 来实现一个需求是最快的,因为它运行快,可以随意修改,而且代码量少,如果实现过程出现问题,很容易就可以定位到原因。

先建立一个 Demo,然后把需要的资源移植过来,把功能实现以后,再移植到项目中,这样可以节省不少开发时间

3.
借助工具

①. 代码模板(File Template)

我们创建一个视图,控制器,或者一个 Model,可能会有一些固定不变的函数、属性需要被定义或者重写,使用 Xcode
可以创建代码模板,在创建类文件的时候一键生成这些代码,提高效率。

②. 代码片段(Code Snippet)

一般可重用的代码,我们会封装成类或者函数,以便其他地方使用,但有一些代码是不适合封装的,例如:

a. 声明一个属性

b. 创建一个线程

像这类的代码,我会做成代码片段,然后通过 Xcode 的 Code Snippet 自动补充功能来快速完成,一个代码片段例子:

这里写图片描述

只要输入 @OperateThread 就可以直接完成创建一个操作队列的代码,大幅度减少编码时间。

③. 自动注释工具(VVDocumenter)

一个可以一键创建注释模板的工具,减少写注释所需的时间

4.
适当添加注释

如果像官方的 API
那样,所有地方都添加注释,那工作量就太大了,需要额外的开发时间,如果只是针对一些语义不明、有歧义的代码添加注释,反而会减少开发时间。

例如一个属性:

@property (nonatomic, assign) int64_t createTime;

一看就知道是指创建时间,但它到底是不是时间戳?如果是时间戳,那单位是秒还是毫秒?如果还要打印数据以后才能下结论,就太耗时间了。

加上注释以后,它就一目了然了

/// 创建时间(时间戳 秒)

@property (nonatomic, assign) int64_t createTime;

三、自测

1.
先检查后自测

完成一个小功能以后,先检查一下代码,然后再开始自测,因为代码可以告诉你很多信息:

①. 是否有低级错误

②. 是否有难以发现的漏洞

③. 流程是否存在问题

如果你编码完成以后立即自测,可能会进入被动状态:

①. 这个界面显示不对

②. 这个数据跟预期对不上

③. 有些不该出现的东西出现了

这时候再反过来去调试代码,一步步修改,会很慢,因为你编译和操作都需要时间,而且有些条件不是很容易模拟,那种情况就更耗时间了

2.
自测点要全部过一遍

可能你会觉得这很烦,很浪费程序员的时间,但自测过程发现 bug 是最容易修复的,因为这时候代码记忆最清晰,最容易找到问题所在。

四、总结

先用文档理清思路,然后开始编码,编码完成以后要检查代码并自测。这就是我的编程习惯,一直沿用至今。

其实知道一个技巧,并不会提升效率,只有坚持使用这个技巧,并形成习惯以后,才会真正地提高效率。

欢迎学习本文,转载请注明出处!

时间: 2024-08-31 03:58:19

iOS高效编程秘诀—坚持编程习惯的相关文章

编程思想与编程技法是相互影响的两件事,然而也是不可拆分的一回事儿!

编程思想与编程技法是相互影响的两件事,然而也是不可拆分的一回事儿! 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 良好的编程习惯坚持久了,会自动升华: 不好的邋遢习惯拖得过久,会困顿不堪! 编

Linux C编程与Shell编程在开发实用工具方面的相同点总结

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1712280 以whois包中的mkpasswd的源码mkpasswd.c文件为例,    两者都需要做的事情:         (1)在程序运行前需要满足其运行环境,包括声明需要使用哪些库哪些文件,例如C中的条件编译,Shell编程中的部分条件判断,如文件是否存在.是否可执行         (2)具备灵活性和可移

结对编程和面向对象编程有何异同?

问题描述 结对编程和面向对象编程有何异同? 结对编程和面向对象编程有何异同?面向对象编程是不是没有对象就学不好? 解决方案 结对是敏捷开发说的,一个人写程序,一个人做codeview面向对象是指,用oopl ooad等技术写程序 解决方案二: 结对是敏捷开发说的,一个人写程序,一个人做codereview面向对象是指,用oopl ooad等技术写程序 解决方案三: 其实都是结对编程,但前者一般是和同性结对,而和男/女朋友(异性)那就是面向对象咯.总的来说基佬们结对编程,而有异性亲热朋友的就面向对

《OpenACC并行程序设计:性能优化实践指南》一 第1章 从串行编程到并行编程

第1章 从串行编程到并行编程 Rob Farber TechEnablement.com CEO/创始人 本章主要向读者介绍OpenACC,演示如何使用OpenACC编写运行在多核CPU和类似GPU加速器上的可移植并行程序,并展示如何在CPU和GPU上编译和运行OpenACC程序. 阅读本章后,读者将会理解以下内容: 如何创建.编译和运行OpenACC应用程序. 高性能OpenACC编程的三个准则. 数据并行和任务并行编程的基本概念. 理解大O表示法和Amdahl定律. 竞争条件.原子操作,以及

[读后感]编程能力与编程年龄

又是一篇读后感, 你懂的,这篇附文的重量级别有多重, 尤其对于我们这样奔四的老程序员! 还有之前那篇<[读后感]一位39岁程序员的困惑:知道得越多编程越慢怎么办?>, 稍加实践,你会发现, 让自已少想一些,你也能很容易地快起来, 只不过,需要施加 强迫症 式的自我叮嘱, 因为,我们这个年龄的人, 如果不是被责任心充满着, 那八成可能会是个一事无成,连温饱都解决不了的闲人了! 其实,在程序员这个职业来说,确实刚积累到一定程度,思维可以自然迸出火花的年龄, 也确实就是这个年龄,才真正能从上往下式的

c-【求助】SOCKET编程,网络编程

问题描述 [求助]SOCKET编程,网络编程 本人自学SOCKET,跟着教程写了几行代码 但是接收(recv)那个循环里面总是出问题,具体情况是运行到第二次的时候程序就蹦了. 我的改进:后来经过一天的思考推敲我发现是有一中返回情况SOCKET_ERRO没有处理 于是家进入了 但还是错误,所以特来贵吧寻求帮助,(ps:我之前试过不用realloc扩大空间储存程序是ok的,但是用了realloc就出问题了,但是我觉得主要问题又不是在realloc哪里,可能是recv那里),求大神花上几分钟看看我的代

android编程之多线程编程实例分析_Android

本文实例讲述了android编程之多线程编程实现方法.分享给大家供大家参考.具体分析如下: 该功能与前面<android开发socket编程之udp发送实例分析>中一样,当按下键后,发送文本框中数据给PC.不同的是把发送数据的功能放在一个线程socket_send中. 一.环境: win7 + eclipse + ndk 二.代码: 主类test_socket.java package test.soket; //import com.test_button.R; import java.io

《面向对象的思考过程(原书第4版)》一1.3 过程式编程与面向对象编程

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 过程式编程与面向对象编程 在我们深入了解面向对象开发的优势之前,先考虑一个更基本的问题:究竟什么是对象?这既是一个复杂的问题,也是一个简单的问题.它复杂是因为学习任何一种软件开发方法论都非易事.它简单是因为人们已经在按对象的方式进行思考.例如,当你看到一个人,你会把他

选择Web编程还是WinForm编程? 用.net(c#)现在是都做,可是总感觉应该选择一个方向,到底是选择哪一样呢?

问题描述 选择Web编程还是WinForm编程?由于公司接的项目多,用.net(c#)现在是都做,可是总感觉应该选择一个方向,到底是选择哪一样呢?选择哪一个对将来的发展更有利???有点迷茫!!! 解决方案 解决方案二:哦,忘了说明一点了以前做的是WEB方面的,可到了公司后,有接触了winform方面,现在想确定一下,到底是往哪个方向走???解决方案三:对于未来不好确定,不过现在应该是做Web的多...解决方案四:web好像现在很热不过我是做winform的,呵呵解决方案五:很多人都说将来是网络的