首页 头条 编程最重要的能力--思想

编程最重要的能力--思想

Nov 06, 2017 pm 05:06 PM
思想 编程 能力

能写出琳琅满目的代码就能显示出你是真正的高手?错,真正的高手是拥有最重要的编程思想技术的,即使他现在所会的技术全部过时,他依旧可以迅速掌握新的技术,写出高质量的程序。

如今的框架和流行语言封装了大量实用的数据结构,甚至还有一些经典的算法,带给我们很大的便利,使用.NET简单拖拽出一个网站,虽然后台操作数据库绑定,处理数据,更新数据会有些重复无聊,后来接触了Linq,和thinkPHP(php的MVC)可以大大减少这些没太有技术含量的代码,写多了依旧觉得没太有意思,远没有自己写个小程序或者小游戏来的痛快。
记得我们数据结构老师曾经说:“算法是一种艺术。”然后,我们几乎全班报以不屑的表情,而我当时也曾是其光荣的一员。因此数据结构学的很烂,也很后悔。
算法书上提到扫雷,扫雷这个经典游戏,其中有个核心算法就是计算每个格子周围有多少个地雷。
我想玩过两年编程的人会迅速想到这样一个算法:用二维数组存储每个格子的信息,(当然地雷已经随即分配好了),然后遍历这个数组,遍历到一个就统计其周边八个方向的地雷数,将结果保存到当前遍历的数组项中。当然可以把统计的过程写成函数调用下。这个是最容易想到的算法。
后来我觉得这个还是有点浪费了,因为很多周围没有地雷的格子也都要扫描八个方向是否有雷,我开始转念去想,我要统计的是每个格子周围的地雷数,那么决定他地雷数的是什么呢,当然是地雷了,所以开始想到第二个算法,依旧遍历那个二维数组,只是仅当遍历到地雷时,将地雷周边八个方向的格子里的数值+1,这样大大缩小了统计的次数。这个应该属于逆向思维吧。
同理想做个象棋程序时会遇到“将军”的算法,判断自己的将军或者元帅是否处在下一步被吃掉的情况下(象棋术语叫将军)。当然很简单的算法就是遍历对方当前存在并且有攻击力的棋子,下一步是否有可能杀掉他的将。但我们也可以去反过来去想,既然是判断将是否处于被杀状态,那直接从他入手,判断其直线范围内是否有对方,“卒”“车”或“炮”,再判断自己周围的日字格内有没有对方“马”的存在等等去逆向想问题。
 
编程的感受

编程最重要的是一种思想,编程的真正快乐是设计一个算法赋予程序,每一个程序都是有生命力的,而算法是他们的魂魄,创造一个有生命力的程序当然是件快乐的事情,如果感到不快乐或者编程枯燥是因为在练习一些所谓的技术,所谓的方法和模式,而非为了编程而编程。
编程离不开技术,如同练武离不开招式一般。
境界高的武者常常说,功夫的最高境界是心中无招。而这种无招并非什么都不会,而是集了百家之长,融了千招万招之后,思想,招式,身体高度统一,随心所欲地见招拆招。也并非学遍所有招式便达到这种境界,要真正懂得思考招式之间内在的联系,慢慢融入成自己的思想,才有可能达到。


一些老程序员常常教育我们,编程最忌讳多而不精。
会的多并不代表是高手,会的少也不代表是菜鸟,编程重在思想,这种思想决定了你在这门技术里走的深度。
思想是什么,是解决问题的思路,是规划能力,分析能力,是迅速将解决问题的思路条理化。可以是算法,模式或者框架。
这些思想需要几年十几年的经验沉淀。
 
现在流行面向对象思想,简单地说一下从.NET以来对这个思想肤浅的认识,从之前C的大量函数库到现在的大量的类库(或java里的包)似乎有了类,就面向对象了,这个说法有些牵强,无论学习Java还是C++,最重要的是要用C++,Java去想问题,用面向对象去思考问题,将对象作为处理问题的基元。
上次去面试,面试官让我讲述面向对象的继承,多态,和封装的特性。
我给他讲了个我写过的简单坦克大战程序分析这三个特性。
继承:这个概念十分好理解,子类继承了父类的所有共有成员,比如一个坦克的基类,实现基本坦克特性和方法,如大小,生命值,移动,判断碰撞等,以后要设计一个独特的坦克,如幻影坦克(红警了),只需要继承下父类,再加一个幻影的方法就可以解决了。继承的优点也是显而易见的,对于绝大部分坦克共有的特性和方法写到基类,以后要设计新类型的坦克只要继承一下,省去了大部分代码。所以继承是最简单,也是最实用的。
多态:可以狭隘地理解为对父类方法的重载,使得同一个方法拥有不同的参数列表。我觉得多态才是面向对象的精髓,在我的坦克程序中,有个控制规则的类,这类里面有一个方法需要一个参数,这个参数可能是坦克类,也可能是子弹类,不确定,需要调用它们的move()方法,当然可以用强大的重载功能去重载这个方法如:someFun(tank mObj){….};重载一下someFun(zidan  mObj){….};貌似除了把mObj这参数的类型换了下,其他都没动。但确实解决了这问题。如果这个变态的方法实现是10000行,一重载2万行了。如果以后出现飞机这个类也有move方法,那还要再重载一次。使用继承+接口就简单的多了,只需要写一个叫做ImoveObj的接口里面定义一个move方法,这个接口被坦克,子弹,飞机类继承下,把方法写成someFun(ImoveObj mObj){….};以后无论增加多少可以充当mObj这个参数的类,只需要继承下ImoveObj接口便可。(用过工厂模式的,觉得这个太司空见惯了。确实,不过这也是多态的基础理解。)
封装:这个也好理解,使用一个类只需要知道这个类的方法怎么用即可,不需要知道这个方法的具体实现。接口是开发者的设计说明书,开发者去实现接口里面的东西。接口也是使用者的说明书,告诉类的使用者此类实现了什么方法,只要会用即可无需了解其实现。
虽然都是些简单的基础,但只有完全理解了这些东西再去研究注入,反转,映射等等不会那么吃力了。
除了面向对象还有面向接口,面向方面(切面)等,无论用什么思想去编程最核心的还是算法,小到一个函数,都离不开算法。
编程最重要的是思想,技术决定能力,而思想决定能力的深度。


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用正则表达式去除 PHP 数组中的重复值 使用正则表达式去除 PHP 数组中的重复值 Apr 26, 2024 pm 04:33 PM

使用正则表达式从PHP数组中去除重复值的方法:使用正则表达式/(.*)(.+)/i匹配并替换重复项。遍历数组元素,使用preg_match检查匹配情况。如果匹配,跳过值;否则,将其添加到无重复值的新数组中。

编程是干啥的,学了有什么用 编程是干啥的,学了有什么用 Apr 28, 2024 pm 01:34 PM

1、编程可以用于开发各种软件和应用程序,包括网站、手机应用、游戏和数据分析工具等。它的应用领域非常广泛,覆盖了几乎所有行业,包括科学研究、医疗保健、金融、教育、娱乐等。2、学习编程可以帮助我们提高问题解决能力和逻辑思维能力。编程过程中,我们需要分析和理解问题,找出解决方案,并将其转化为代码。这种思维方式能够培养我们的分析和抽象能力,提高我们解决实际问题的能力。

使用 Golang 构建基于浏览器的应用程序 使用 Golang 构建基于浏览器的应用程序 Apr 08, 2024 am 09:24 AM

使用Golang构建基于浏览器的应用程序Golang结合JavaScript构建了动态的前端体验。安装Golang:访问https://golang.org/doc/install。设置Golang项目:创建一个名为main.go的文件。使用GorillaWebToolkit:添加GorillaWebToolkit代码以处理HTTP请求。创建HTML模板:在templates子目录中创建index.html,这是主模板。

C++ 编程谜题集锦:激发思维,提升编程水平 C++ 编程谜题集锦:激发思维,提升编程水平 Jun 01, 2024 pm 10:26 PM

C++编程谜题涵盖斐波那契数列、阶乘、汉明距离、数组最大值和最小值等算法和数据结构概念,通过解决这些谜题,可以巩固C++知识,提升算法理解和编程技巧。

编码的关键:为初学者释放 Python 的力量 编码的关键:为初学者释放 Python 的力量 Oct 11, 2024 pm 12:17 PM

Python通过其易学性和强大功能,是初学者的理想编程入门语言。其基础包括:变量:用于存储数据(数字、字符串、列表等)。数据类型:定义变量中数据的类型(整数、浮点数等)。运算符:用于数学运算和比较。控制流:控制代码执行流(条件语句、循环)。

使用 Python 解决问题:作为初学者,解锁强大的解决方案 使用 Python 解决问题:作为初学者,解锁强大的解决方案 Oct 11, 2024 pm 08:58 PM

Python 使初学者能够解决问题。其用户友好的语法、广泛的库以及变量、条件语句和循环等功能可实现高效的代码开发。从管理数据到控制程序流程和执行重复任务,Python 提供了

通过 Go Get 快速便捷地获取 Go 模块 通过 Go Get 快速便捷地获取 Go 模块 Apr 07, 2024 pm 09:48 PM

通过GoGet,可以快速便捷地获取Go模块,步骤如下:在终端中运行:goget[module-path],其中module-path为模块路径。GoGet会自动下载模块及其依赖项。安装的位置由GOPATH环境变量指定。

揭秘 C:为新程序员提供一条清晰简单的道路 揭秘 C:为新程序员提供一条清晰简单的道路 Oct 11, 2024 pm 10:47 PM

C是一种初学者学习系统编程的理想选择,它包含以下组件:头文件、函数和主函数。一个简单的C程序可以打印“HelloWorld”,需要包含标准输入/输出函数声明的头文件,并在主函数中使用printf函数来打印。通过使用GCC编译器可以编译和运行C程序。掌握基础后,可以继续学习数据类型、函数、数组和文件处理等主题,以成为熟练的C程序员。