逻辑正确的重要性

逻辑正确的重要性

源自近一个月的项目,在程序逻辑方面犯了错误,原地打转拖延了进度,也由此深刻认识到逻辑对于程序的重要性。

       一、项目进度

(1)前期:搭建环境(自己的环境&竞争对手的环境),验证对手的环境能够跑正确,我们的环境下会出bug。

(2)中期:分析出我们的环境为什么会有bug?分析角度:抓包、前台日志、后台日志跟踪。基本确定程序出bug的大致范围。

(3)后期:从日志跟踪搜索代码,确定出错代码的位置。思考为什么为会出错,是逻辑错误?还是语法错误?还是…….完成代码修改并Fixed bug。

       二、卡壳点

(1)中期进入后期的时候,想着要不要先熟悉下模块的框架?但我尝试了从模块自身、模块与模块之间交互的角度考虑大框架是怎么样的?但何尝容易,近8年的模块,原始&修补何其多,且前期的文档不规范,多是从需求、功能实现的角度介绍的,很难去衔接和获取想要的东西。加上源代码作者也已不在,摸索难免会花去很多时间。

(2)后期的时候,能确定了代码的大致位置,但是不知道如何修改代码?主要是程序逻辑不清晰。不知道异常后如何处理?

      三、反思

(1)前期拿到任务后,因为意识到搭建复杂耗时长,就想着赶紧去布置环境。这个和自己环境不熟悉有关。

(2)中期分析的时候,犯了个很大的错误:对于核心模块的日志没有开启,而是自己跟读代码猜测可能的出错位置。短期内不可能搞定代码逻辑以及项目任务紧急的矛盾越发突出。当代码很复杂且非自己熟悉的模块时,漫无目的的猜测会花费很长的时间。最好的方法就是:打开日志,从日志真正跟随代码的逻辑。

(3)后期的时候,此时bug位置基本锁定大致位置,此时应该尽量缩小代码范围,Fixed掉bug。

核心点梳理如下:

引用肯定可以实现,但我们只提供了C的接口,C语言不支持引用,所以,只能通过地址传递实现。犯了个错误就是:地址传递赋值的时候应该是*ptrans_out = *pval_in, 而不是ptrans_out= pval_in。值赋值,而非地址,确保地址不变。

       四、总结

前、中、后三个阶段,都不应该忘记最终要达成的目标是什么?要达成这个目标自己该如何做,自己能够表述清楚,必要时可以自己画图梳理下逻辑思路,这样才不会跑偏。

逻辑对于程序开发的重要性,远远不止我写的这点东西。理清程序逻辑,纵然程序可能有很多坑,纵然会花一定时间,但理顺后后面的路会相对好走。

2014-8-3 pm18:41 思于家中床前

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/38360067

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

逻辑正确的重要性,布布扣,bubuko.com

时间: 2024-08-24 04:03:10

逻辑正确的重要性的相关文章

随机猜拳判断胜利(思路,逻辑正确不完美)

static void Main(string[] args) { while (true) { int x, y; Random r = new Random(); x = r.Next(0, 3); y = r.Next(0, 3); switch (x) { case 0: Console.WriteLine("X是剪刀"); break; case 1: Console.WriteLine("X是石头"); break; case 2: Console.Wr

new内存失败后的正确处理(转)

本文摘录自建议30:new内存失败后的正确处理. 应该有很多的程序员对比尔盖茨的这句话有所耳闻: 对于任何一个人而言,640KB应当是足够的了.(640K ought to be enough for everybody.) 不幸的是,伟大的比尔盖茨也失言了.随着硬件水平的发展,内存变得越来越大,但是似乎仍不能满足人们对内存日益增长的需求.所以呢,我们C/C++程序员在写程序时也必须考虑一下内存申请失败时的处理方式. 通常,我们在使用new进行内存分配的时候,会采用以下的处理方式: 1 char

IOS平台APP安全Checklist

#1. 前言IOS平台APP安全风险相关的一般性Checklist,保障IOS客户端安全评估的质量与效率.#2. 数据安全##2.1 传输安全该类漏洞的审查场景:APP通过网络发送或接收敏感信息,比如用户口令.用户隐私信息等,或者通过网络下发的数据执行某些敏感操作**漏洞类型说明:**由于移动设备通常是通过wifi上网,因而面临网络窃听.网络劫持等中间人攻击行为,因此对于敏感信息需要加密传输,并且对接收到的重要数据也需要进行完整性校验.如果APP自身实现了加密及完整性校验的机制,需要确认机制是否

从用python做zoj1011发生Non-zero Exit Code错误说起

最近做了浙大oj的第1011道题,遇见一件奇怪的事.这道题我用c++和php做,提交后都正确.但是用完全相同的逻辑改写成python代码提交后却产生了Non-zero Exit Code的判题结果.python的这一判题结果大多表示程序在运行过程发生了未捕捉的异常.经反复提交排查后确定未捕捉的异常是IndexError,也就是数组下标越界异常.进一步排查后确定应该是因为在测试用例的树结点中有超过第一行所给的参数k的范围的字母存在.解决方法是在使用结点作为的下标之前先判断该下标是否越界,若越界,则

一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在的论坛质量比以前差了,大部分都是来解题问答的,而且层次较低.以前论坛中,Qullien很令人印象深刻,但愿他能在国外闯出一片天空.现在 基础数学版代数&数论子版中那几个讨论代数几何的还不错.不期望目前论坛出现很多高层次高手,高层次高手应该站在好课题上高观点讨论数学,出 现这样的网友,看他们的言论非常过

做Data Mining,其实大部分时间都花在清洗数据

做Data Mining,其实大部分时间都花在清洗数据 时间 2016-12-12 18:45:50  51CTO 原文  http://bigdata.51cto.com/art/201612/524771.htm 主题 数据挖掘 前言:很多初学的朋友对大数据挖掘第一直观的印象,都只是业务模型,以及组成模型背后的各种算法原理.往往忽视了整个业务场景建模过程中,看似最普通,却又最精髓的特征数据清洗.可谓是平平无奇,却又一掌定乾坤,稍有闪失,足以功亏一篑. 大数据圈里的一位扫地僧 说明:这篇文章很

编写优质嵌入式C程序(转)

前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://blog.csdn.net/zhzht19861011/article/details/45508029 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理:分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性.对未定义行为的处理以及一些高级

『浅入深出』MySQL 中事务的实现

在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇文章中,我们将对事务的实现进行分析,尝试理解数据库是如何实现事务的,当然我们也会在文章中简单对 MySQL 中对 ACID 的实现进行简单的介绍. 事务其实就是并发控制的基本单位:相信我们都知道,事务是一个序列操作,其中的操作要么都执行,要么都不执行,它是一个不可分割的工作单位:数据库事务的 ACID 四大特性是事务的基础,了解了 AC

基于UVM的verilog验证

Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的UVM验证开发有哪些坑,以及怎么避免. Introduction 本例使用环境:ModelSim 10.2c,UVM-1.1d,Quartus II 13.1(64 bit),器件库MAX V 1. UVM介绍 对UVM结构熟悉的读者可跳过本节. 叫UVM“框架”可能并不确切(只是便于理解,可类比软件界的“框架”).UVM全称为通用验证方法论.在硬件开发过程中,验证是十分重要的环节.可以说,左手开发,右手验证.