Task05:编程习惯养成与思维


前言

本篇文章主要讲解了如何养成良好的编程思维,以便更好的开展编程工作。


一、防御性编程与备注

防御性编程的基本思想:如果我们想从用户那里获得的输入与他们提供给我们的输入不一致,我们需要考虑到这个问题。
再者,如果我们正在使用一个由不完美的程序员编写的程序,也许是我,或者您自己,程序中可能有错误,所以您编写程序时需要考虑不仅用户可能会犯错程序的其他部分也可能会犯错,并且您宁愿发现某些事情出错,然后在它出错的假设下进行了许多不同的测试,找到问题的来源。
记住一个一般原则:人们是愚蠢,并会犯错。
因此在编写程序时要避免在犯这些错误时发生灾难,要养成编写防御性编码的习惯。

防御性编程样例: 假设我想找到某个整数的所有除数,想弄清楚所有的除数是多少,选择在循环中间打印出来。

x = 10
i = 1
while i<x:
    if x%i == 0:
        print ('divisor',i)
    i= i+1

在这里插入图片描述

二、科学分析思维

1.迭代问题逻辑

1、选择一个可以计数的变量(Choose variable that “count”)
2、在外部初始化它(Initiative outside the loop)
3、设置正确的最终测试(Setup and test)
4、构建代码块(Conctract block)
5、结束后,你知道,当我完成后,我该怎么做(What to do when done)

2.代码效率

因为目前需要解决问题的增长速度高于电脑计算速度的增长。
在时间、空间恒定的情况下,需要考虑的是:
1、计算需要多少内存;
2、输入不同大小的函数所需的基本步骤数量是多少。

表现所需步骤与内存
Bestmin
Worstmax
Expectedavg

三、图灵完备语言

图灵完备语言包含三部分:
1、数据:数组,字符串,布尔;
2、操作:数字运算,如+,-,and/or等;
3、命令:赋值、输入/输出、条件/分支、循环机制。

有了这三部分,我们就可以做任何事情,例如自然语言处理,图像识别,语音识别等。

四、Debugger

Debugging的目标是朝着没有错误的程序进行运行,做这个最好的两个工具是打印和阅读代码(带着怀疑的眼光看)。
首先要发现产生问题的最小输入,然后进行打印测试,采用二分法进行测试,每次在代码中进行打印,每次测试可以排除一半的代码块,自己先预测一下结果会是什么,耐心冷静的减小搜索出现问题的地方。
还可以请教别人,在请教别人的时候,自己先把问题逻辑整理清楚再去问,有时候在问的时候,问了一下,自己就会恍然大悟,原来是这样。

五、抽象化、模块化、封装代码

这部分是为了解决阅读代码的问题,事实上几十万行的代码看的时候很难去理解,把代码分成几个模块,一个模块负责对应相关的操作,也方便后续的debugger,和阅读。例如机器学习中会分为数据清洗、训练、测试三个大模块。

六、如何知道运行代码的时间

经过基础部分的学习大家已经了解到运行不同的代码是需要不一样的时间的。
影响代码运行时间的因素有机器性能、使用的语言、数据量等。
其实这些并不能为我们预估出运行代码的时间,因为这些都有很多变量,其实唯一不变的是运行这个程序需要多少步,举个例子,魔方复原,在复原魔方的时候,如果一开始不知道怎么复原,没有思维逻辑进行复原,可能需要的时间很久,但是通过查阅相关资料和思考,可以分为几个步骤,就可以顺利复原。
所以运行代码的时间在于你知道你的代码需要运行多少步,思考的逻辑决定了你的运行代码时间。

七、如何修复他人的代码

在编程的时候,我们常常会借鉴别人的代码,但会碰到一个问题,并不是每一份代码都可以完整复现,会受到版本、运行环境等的影响,所以要修复他人的代码,要有一个系统性的思考:
1、坚持记录你尝试的方式、修改的地方;
2、考虑重新假设;
3、调试代码;
4、放下自己的骄傲,寻找他人的帮助;
5、离开一段时间再回来修复。

总结

本篇文章系统的讲解了如何养成良好的编程习惯和编程思维,相信通过不断的练习和尝试,一定可以取得进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Never give up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值