// 程序为什么会有bug -- 思考的不全面
最近在做UVA的题目的时候,一个问题一直困扰我无数次:WA来的太多了。
写程序的过程是美好的,而且一般很快,一个100行以内的code应该不会超过半个小时就能写完;但debug的过程着实痛苦:拿到WA之后,随便就是几个小时的debug。
为什么不能一次做好呢?
因为思考地不够全面,就开始动手写代码了。换句话说,对体系还没有足够清晰的认识和了解。
// School of Application / School of Theory
现在的还在不断进步的Programmer可以分成两类吧:实践派和学院派。实践派的,讲究遇到问题,解决问题;讲究的是寻找对于一个问题快速高效的解决方案——所以很多时候解决问题的过程是:google,找到了一个solutoin,(try&error) -> Works? use it: find anotehr.
加入刚好找到了一个合适的解决方案,用了就没问题了;但有些时候,如果你遇到的问题有一点点特殊,那么时间就要花在无尽的Google、try&error的过程中;更加严峻的问题是,假设之后问题出现了一个变体,你就需要重新去搜索一遍(因为经验性的记忆总是不如全面了解来得正确)。
另外一种人是讲究读书的。他们只做自己有把握的事情,所以他们对于自己做出来的产品、写出来的code有信心——因为他们知道内部所有的来龙去脉。之后出了问题,他们可以迅速的找到原因。
但是这需要极高的前期知识投入和知识储备。
但这类人每解决一个新的问题,都是对于自己知识储备的一次重新完善。
// 《The Pragmatic Programmer》 -- coding by coincidence
在《THe Pragmatic Programmer》里面,有一章讲如何coding,其中一个topic就是“Coding by Coincidence”——在自己不了解内部结构的前提下就开始coding,于是在出现问题的时候,自己也不能判断是哪里的问题——所以你只能一点点试错。
时间长了你会发现。两种人在解决同一个问题上花了差不多的时间;但第一种人把时间用在了找东西上面,而第二种人把东西用在了积极思考]学习新内容上面。高下立辨。
// 该有的好习惯:提前写好code,列在一张纸上面。
我们时间有限。应该把有限的时间放在有价值的事情上面——积极的思考,而不是消极的找原因。与其花30min写程序,2h debug,为什么不花50min一次就把程序写对呢?
怎么写对?在对于你用的component有了解之后,拿来一张纸,一支笔,写下算法的步骤,写下基本的算法证明。然后实现。即使你的算法证明是错的,你在debug的时候,也是一个“positive thinking”的过程——时间久了你自然会进步的。
人家讲,Knuth在最初写Latex的时候,是先写在了一个本子上的;后来把代码输入进计算机,直接就能运行的。
分享到:
相关推荐
Richardson和Urbanke在其著作《Modern Coding Theory》中深入探讨了迭代信道编码技术的最新进展。本文旨在总结该书中的关键知识点,特别是与迭代解码相关的部分。 #### 二、迭代信道编码的起源与发展 迭代解码最初...
差错控制编码 Error Control Coding 英文版 第二版 2nd 林舒 lin shu 还是挺清楚的,有完整书签
《SAP方丈-Coding Block详解》 在IT领域,SAP系统是企业资源规划(ERP)软件的领导者,广泛应用于全球各地的企业中。而Coding Block则是SAP ABAP编程中的一项重要概念,它对于理解SAP编程逻辑、提高代码效率和可...
Coding Theory The Essentials
A visual step-by-step guide to writing code in Python. Beginners and experienced programmers can use Python to build and play computer games, from mind-bending brainteasers to crazy action games with ...
在IT领域,编码是软件开发过程中的核心环节,而"Phase Coding",或者称为"阶段编码",是指在软件开发生命周期中特定阶段进行的编码活动。这一阶段通常发生在需求分析、设计和规划之后,是将设计方案转化为可执行程序...
Step-by-step instructions teach essential coding basics like loops and conditionals, and outline seven fun and exciting projects, including a script that cracks secret codes, a quiz to challenge ...
【Coding4Fun控件】是专门为Windows Phone平台开发的一系列扩展控件库,它为开发者提供了许多超越原生Windows Phone SDK的功能和视觉效果,旨在增强应用程序的用户体验和交互性。这个库是由微软开发者社区成员创建并...
OpenCores是一个开源硬件项目社区,其提供的`opencores_coding_guidelines.pdf`文档详细介绍了针对VHDL和Verilog的编码规范。这些指导原则旨在确保代码的一致性和可读性,包括但不限于变量命名规则、注释标准、模块...
这个名为"zencoding小工具"的压缩包文件显然是Zen Coding的一个实现或者扩展,旨在帮助用户快速、便捷地编写代码。下面将详细介绍Zen Coding的核心概念以及如何利用它来提高开发效率。 Zen Coding最初由Dmitry ...
"zencoding-vim" 是一个专为Vim编辑器设计的插件,它引入了Zen Coding的概念,大大提升了前端开发者的工作效率。Zen Coding,后来更名为Emmet,是前端开发领域中一个快速编写HTML和CSS的工具。这个插件将Emmet的功能...
1. **快速创建元素**: ZenCoding允许你输入简短的缩写,如`div>ul>li*3`,它会自动生成如下代码: ``` <li></li> <li></li> <li></li> ``` 2. **嵌套元素**: 通过缩进或使用`>`符号,可以轻松创建嵌套...
《Alibaba Java Coding Guidelines IDEA插件详解》 在软件开发领域,编码规范是提升代码质量、维护团队协作效率的重要工具。阿里巴巴作为全球领先的科技公司,其制定的Java Coding Guidelines已经成为了业界广泛...
Secure coding is the practice of writing programs that are resistant to attack by malicious or mischievous people or programs. Secure coding helps protect a user’s data from theft or corruption. In ...
这个名为"ZenCoding.zip"的压缩包包含了ZenCoding的核心组件和相关资源,便于用户安装和使用。 ZenCoding的核心功能在于其强大的代码缩写和扩展能力。它允许开发者使用简短的缩写来快速生成复杂的HTML结构,例如...
《Grokking the Coding Interview - Patterns for Coding Questions》是一份专为北美算法面试准备的压缩包资源,其中包含了多种常见的编程题目模式。这份资源旨在帮助面试者熟练掌握各种算法和数据结构,以便在面试...
Contrastive Multiview Coding笔记 Contrastive Multiview Coding是一种多视图对比学习方法,旨在学习鲁棒、通用的表示形式,该表示形式可以从多个视图中学习到共享的因素,例如物理、几何、语义等。该方法可以扩展...
在压缩包文件名列表中提到的"zen coding"可能是Zen Coding的安装包或资源文件。安装这个插件后,用户可以享受到Zen Coding提供的各种便捷功能,从而提升编程体验。总的来说,Zen Coding(Emmet)是前端开发者不可或...
Git和Coding是现代软件开发中不可或缺的工具,用于版本控制和协作。Git是一个分布式版本控制系统,而Coding则是一个集成了代码托管、项目管理、质量管理等功能的云端开发平台。本资源旨在帮助用户熟悉如何安装Git,...