0

0

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

小云云

小云云

发布时间:2017-11-06 17:06:25

|

2828人浏览过

|

来源于php中文网

原创

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

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

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

贝特协同办公系统(BetterCOS)
贝特协同办公系统(BetterCOS)

具备更多的新特性: A.具有集成度更高的平台特点,集中体现了信息、文档在办公活动中交流的开放性与即时性的重要。 B.提供给管理员的管理工具,使系统更易于管理和维护。 C.产品本身精干的体系结构再加之结合了插件的设计思想,使得产品为用户度身定制新模块变得非常快捷。 D.支持对后续版本的平滑升级。 E.最价的流程管理功能。 F.最佳的网络安全性及个性化

下载


一些老程序员常常教育我们,编程最忌讳多而不精。
会的多并不代表是高手,会的少也不代表是菜鸟,编程重在思想,这种思想决定了你在这门技术里走的深度。
思想是什么,是解决问题的思路,是规划能力,分析能力,是迅速将解决问题的思路条理化。可以是算法,模式或者框架。
这些思想需要几年十几年的经验沉淀。
 
现在流行面向对象思想,简单地说一下从.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接口便可。(用过工厂模式的,觉得这个太司空见惯了。确实,不过这也是多态的基础理解。)
封装:这个也好理解,使用一个类只需要知道这个类的方法怎么用即可,不需要知道这个方法的具体实现。接口是开发者的设计说明书,开发者去实现接口里面的东西。接口也是使用者的说明书,告诉类的使用者此类实现了什么方法,只要会用即可无需了解其实现。
虽然都是些简单的基础,但只有完全理解了这些东西再去研究注入,反转,映射等等不会那么吃力了。
除了面向对象还有面向接口,面向方面(切面)等,无论用什么思想去编程最核心的还是算法,小到一个函数,都离不开算法。
编程最重要的是思想,技术决定能力,而思想决定能力的深度。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Node.js 教程
Node.js 教程

共57课时 | 9.7万人学习

CSS3 教程
CSS3 教程

共18课时 | 5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号