`
flyfy1
  • 浏览: 74409 次
  • 性别: Icon_minigender_1
  • 来自: Singapore
社区版块
存档分类
最新评论

Coding by Coincidence

阅读更多

// 程序为什么会有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的时候,是先写在了一个本子上的;后来把代码输入进计算机,直接就能运行的。

分享到:
评论

相关推荐

    Modern Coding Theory by T. Richardson and R. Urbanke

    Richardson和Urbanke在其著作《Modern Coding Theory》中深入探讨了迭代信道编码技术的最新进展。本文旨在总结该书中的关键知识点,特别是与迭代解码相关的部分。 #### 二、迭代信道编码的起源与发展 迭代解码最初...

    差错控制编码 Error Control Coding 英文版 第二版 2nd 有完整书签 林舒 lin shu part1

    差错控制编码 Error Control Coding 英文版 第二版 2nd 林舒 lin shu 还是挺清楚的,有完整书签

    SAP方丈-Coding Block详解x.doc

    《SAP方丈-Coding Block详解》 在IT领域,SAP系统是企业资源规划(ERP)软件的领导者,广泛应用于全球各地的企业中。而Coding Block则是SAP ABAP编程中的一项重要概念,它对于理解SAP编程逻辑、提高代码效率和可...

    Coding Theory The Essentials

    Coding Theory The Essentials

    Coding Games in Python

    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 ...

    04-Phase-Coding_coding_phase_

    在IT领域,编码是软件开发过程中的核心环节,而"Phase Coding",或者称为"阶段编码",是指在软件开发生命周期中特定阶段进行的编码活动。这一阶段通常发生在需求分析、设计和规划之后,是将设计方案转化为可执行程序...

    Coding project in python

    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控件

    【Coding4Fun控件】是专门为Windows Phone平台开发的一系列扩展控件库,它为开发者提供了许多超越原生Windows Phone SDK的功能和视觉效果,旨在增强应用程序的用户体验和交互性。这个库是由微软开发者社区成员创建并...

    RTL coding style资料包

    OpenCores是一个开源硬件项目社区,其提供的`opencores_coding_guidelines.pdf`文档详细介绍了针对VHDL和Verilog的编码规范。这些指导原则旨在确保代码的一致性和可读性,包括但不限于变量命名规则、注释标准、模块...

    zencoding小工具

    这个名为"zencoding小工具"的压缩包文件显然是Zen Coding的一个实现或者扩展,旨在帮助用户快速、便捷地编写代码。下面将详细介绍Zen Coding的核心概念以及如何利用它来提高开发效率。 Zen Coding最初由Dmitry ...

    zencoding-vim

    "zencoding-vim" 是一个专为Vim编辑器设计的插件,它引入了Zen Coding的概念,大大提升了前端开发者的工作效率。Zen Coding,后来更名为Emmet,是前端开发领域中一个快速编写HTML和CSS的工具。这个插件将Emmet的功能...

    zencoding for EditPlus

    1. **快速创建元素**: ZenCoding允许你输入简短的缩写,如`div>ul>li*3`,它会自动生成如下代码: ``` <li></li> <li></li> <li></li> ``` 2. **嵌套元素**: 通过缩进或使用`>`符号,可以轻松创建嵌套...

    Alibaba Java Coding GuidelinesIDEA插件

    《Alibaba Java Coding Guidelines IDEA插件详解》 在软件开发领域,编码规范是提升代码质量、维护团队协作效率的重要工具。阿里巴巴作为全球领先的科技公司,其制定的Java Coding Guidelines已经成为了业界广泛...

    Apple Secure Coding Guide 2012

    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.zip"的压缩包包含了ZenCoding的核心组件和相关资源,便于用户安装和使用。 ZenCoding的核心功能在于其强大的代码缩写和扩展能力。它允许开发者使用简短的缩写来快速生成复杂的HTML结构,例如...

    Grokking the Coding Interview - Patterns for Coding Questions.zip

    《Grokking the Coding Interview - Patterns for Coding Questions》是一份专为北美算法面试准备的压缩包资源,其中包含了多种常见的编程题目模式。这份资源旨在帮助面试者熟练掌握各种算法和数据结构,以便在面试...

    Contrastive Multiview Coding笔记

    Contrastive Multiview Coding笔记 Contrastive Multiview Coding是一种多视图对比学习方法,旨在学习鲁棒、通用的表示形式,该表示形式可以从多个视图中学习到共享的因素,例如物理、几何、语义等。该方法可以扩展...

    zen coding插件下载

    在压缩包文件名列表中提到的"zen coding"可能是Zen Coding的安装包或资源文件。安装这个插件后,用户可以享受到Zen Coding提供的各种便捷功能,从而提升编程体验。总的来说,Zen Coding(Emmet)是前端开发者不可或...

    如何使用Git 和 Coding

    Git和Coding是现代软件开发中不可或缺的工具,用于版本控制和协作。Git是一个分布式版本控制系统,而Coding则是一个集成了代码托管、项目管理、质量管理等功能的云端开发平台。本资源旨在帮助用户熟悉如何安装Git,...

Global site tag (gtag.js) - Google Analytics