关于编程的一点思考

1.编程也分脑力工作和体力工作。

而敲代码之前的设计过程就是一个脑力工作的过程。设计的时候需要考虑类与类的关系,每个类的责任,用什么样的命名来描述这个责任。还要考虑类提供什么样的方法,每个方法承担什么责任,以及怎么命名,传什么样的参数。还要考虑怎么实现起来方便。

设计是一个从无到有的过程。这时候需要安静,大脑需要调用很多无关的知识,把这些无关的知识连接起来。需要把一个业务拆分成自己小功能,让后在把这些小功能抽象成一个名词,再看这些小功能有没有重复的,是不是承担了过多的责任,是不是责任划分不清,是不是有重复的责任等等。

而实现的过程就是一个体力劳动的过程,这时候我会戴上耳机听着愉快的音乐,敲打着键盘上的每一个字母。

这是我对编程的一点简单看法,不一定对。

2.设计模式主要是用来明确分工的。以前我不理解,一个功能几个方法就实现了,那些设计模式要把一个功能分成几个不同类去实现。在我看来这只有那些逻辑思维能力不足,担心自己把自己搞迷糊的人才会去使用设计模式(其实,也有这样的功能)。

直到有一天,我给几个同事分配任务的时候,突然明白,原来设计模式有明确分工的功能。那次是要实现一个远程调用其他厂商接口的功能。我们需要把我们的数据转换成他们可以识别的数据,传给他们,然后再把他们返回的数据转换成我们可以使用的数据。大概有三十多种不同的接口。

我们使用了策略模式。抽象类有三个抽象方法,一个是把我们的数据转换成厂商的数据,一个是把厂商的数据转换成我们的,另个是需要调用的接口名。实现者只需要知道当前子类对应的厂商需要的数据格式和返回的数据格式,以及对应的接口名称,不需要知道其他的东西,这样会减少实现者的认知负担。而且子类与子类之间是相互独立的,可以同时交个多个同事完成。当然我们也会提供一些通用的转换方法。

而另一个同事拿着这个抽象类实现对厂商的接口调用,他不用管抽象类是如何实现的,只需要知道如何调用接口就行,也会减少这个同事的认知负担。还有他跟那些子类的实现也是相互独立的,可以让另一个同事同时实现。

这是我对设计模式的一点简单看法,不一定对。

3.最近在学习人工智能。有一点看法:

第一,学习人工智能跟学习一门新的编程语言一样,入门很容易。现在有很多人工智能框架TensorFlow,Sklearn等,都提供很多算法的实现。对于我们这种数学不灵光的人来说,只要了解算法原理,了解框架都提供了那些人工智能算法的API就行,不需要知道内部如何实现,也可以在自己的项目中使用人工智能。

第二,目前人工智能很笨,只是因为计算机比人运算速度快几百倍,才显得它很聪明,现在根本不用担心它会超越人类。给什么样数据得出什么样的结果。跟普通编程一样,不会做出意料之外的事情,如果出现了,只能说明是自己没有理解到位。

这是我对人工智能的一点简单看法,不一定对。

无戒365挑战营 第10天

你可能感兴趣的:(关于编程的一点思考)