编程的精义

  我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何苦而不平?”                                                                                                                    ——《愚公移山》,《列子·汤问篇》

 1、 编程的精义
   仅仅就编程序来说,实在是一件很简单的事,甚至可以说是一件劳力活。两千年前的寓言中,已经成就了一位工程名家:愚公。在这位名家的身上,浓缩了项目组织者、团队经理、编程人员、技术分析师等众多角色的优秀素质。他的出现,远远早于计算机发展的历史,甚至早于一些西方国家的文明史。
    汤问篇中所述的愚公移山这一事件,我们看到了原始需求的产生:
   “惩山北之塞,出入之迂”
   我们也看到了项目沟通的基本方式:
   “聚室而谋曰”
   然后,我们看到愚公确定了一个项目的目标:
   “毕力平险,指通豫南,达于汉阴”
   并通过研讨,择定了一个井然有序的、可以实现的技术方案:
   “扣石垦壤,箕畚运于渤海之尾”
    在这个项目中,动用了三名技术人员和一名工程管理人员:
   “(愚公)率子孙荷担者三夫”
   并获得了一名力量较弱,但满富工作激情的外协:
   “邻人京城氏之孀妻,有遗男,始龀,跳往助之”
    基本上,这已经描述了“愚公移山”整个工程的概况。接下来,我们应该注意到愚公作为编程人员的基本素质。在与“河曲智叟”的对答中,他叙述了整个工程的实现程序:
   “虽我之死,有子存焉”,这里描述了可能存在的分支结构,即“IF”条件判断。
   “子又生孙,孙又生子;⋯⋯子子孙孙,无穷匮也”,这里描述了完成这个工程所必须的循环结构。
   作为优秀的程序分析师,愚公论述了这个循环的可行性:由于“山不加增”,所以条件“山平”必将成立(“何苦而不平”),所以这不会是一个死循环。
    在愚公的论述中,我们看到了编程的根本:顺序、分支和循环。庞大若“愚公移山”这样的工程,都是可以通过这样简单的编程来实现的。这,就是编程的精义了。

 2、 会或者不会写程序的问题
   我经常会被人问到“(我)能不能学会写程序”这样的问题。
   这个问题由来以久。上溯七、八年,程序员还是少有人从事的职业。听说的人少,真正了解的人也不多。而当一个程序软件被装在电脑里并开始运行时,人们便开始惊讶于程序员的厉害。所以“能不能学会写程序”甚至成了一些人对自己的智力考评,所以便有人向我这样发问。
   愚公都能明白的编程精义,那些向我发问的智叟们又怎么会不明白呢?
    所以除了先天智障或后天懒惰者,都是可以学会写程序的。如果你能确信,自己知道在早上起床后需要:
   如果天冷则先穿衣服后洗漱
   如果天热则可反之
   日复一日直到死亡
   那么你就可以开始编程了。甚至,如果你认为以下条件成立:
   如果有类似于生病、不能行动、以及意外的紧急事件,则当日可以略过
   那么你就可以开始向设计师发展。因为你已经具备了一项常人不具备的基本素质:折衷。
3、程序 = 算法 + 结构
  编程作为一种行为,只需要知道其逻辑方法就可以了。所谓编程实际上是把一件事情交给计算机去做,你认为这件事该如何做,就用“程序语言”的形式描述给计算机。如果你原本就不明白如何去做,那么你也不要期望计算机去理解你想要做什么。
  所以编程的第一要务是先把事情分析清楚,事件先后的逻辑关系和依赖关系搞清楚,然后再去代码实现。一接到任务就开始Coding的程序员,通常就是加班最多的程序员。
  记住:积极工作和勤于思考都要占时间。
   第一个完成关于编程本质的思考的人,提出了一个公式“程序 = 算法 + 结构”。这个公式的精彩之处,在于它没有任何的地方提及到Code。甚至可以说,在这个公式里,代码是不存在的。
存在的只是思想。
   算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。只要开发人员将这个程序的算法设计出来了,把结构描述出来了,那么程序就已经定型了。剩下的事,简而言之,就是劳力活。
   在计算机专业所学的课程中,同时讲述算法和结构的,是“数据结构”。现在,你放下手边这本书,再去读读被你扔到不知哪个角落的《数据结构》,你仔细看看,在所有的算法描述中,有且仅有三种执行逻辑:顺序、分支和循环。简单若顺序表,复杂如树、图,它们的算法都是用上面这三种执行逻辑来描述的。
4、语言
  当你熟悉了一门语言之后,你会发现,编程语言只有喜欢与不喜欢的问题,没有会不会的问题。任何的一门语言,你都可以在两周内掌握并开始熟练编程。因为任何的一门语言,他们的底层函数库都是那么的相似,而他们API都是那样的依赖于操作系统。A语言里有的,B语言里也基本都有。
  通常而言,语言的差别主要表现在适用范围上。一些语言适合做数值处理,小数点后可以精确到原子级,而小数点前则可以表达到宇宙之无穷;另一些语言则适合做图形处理,它的底层函数库比其它语言可以快上十倍或数十倍;还有一些语言则适合于做网页,要用它来做一个通讯薄软件都将是史无前人的挑战。
  成天讨论这门语言好,或者那门语言坏的人,甚至是可悲的。不但是悲其一叶障目,更要悲叹于那种大愚若智的自得心态。
5、在没有工程的时代
  在没有工程的时代,上面所说的就是一个程序员的全部。他们掌握了一门语言,懂得了一些生活中最常见的逻辑,他们用程序的方式思考和学习了一些算法,并根据前人的经验,把这些算法跑在了一些数据结构之上,最后,我们就看到了他们写的程序。
  在没有工程的时代,出现了非常非常多的人物。其中算法大师,有游戏大师,有语言大师,有挣钱的大师⋯⋯
  唯独,没有工程大师。嗯,可以理解嘛,那是没有工程的时代。好蛮荒,好远古的。

iOS In-App Purchase 自动续订订阅完整实现指南 本文摘要: 自动续订订阅是iOS应用变现的核心模式,适用于流媒体、云存储等持续服务场景。文章系统讲解了从配置到实现的完整流程:首先对比各类订阅模式特点,解析订阅生命周期和关键术语;然后详细说明App Store Connect中的订阅组创建、产品配置和服务器通知设置;最后展示客户端StoreKit实现方案,包括产品标识符定义、订阅管理器封装和支付队列观察机制。全文提供可落地的代码示例和技术细节,帮助开发者掌握自动续订订阅的全链路实现。 阅读详情

相关推荐

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1571

\t\t编程的精义 - 愚公移山

“虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何苦而不平?”——《愚公移山》,《列子·汤问篇》1. 编程的精义仅仅就编程序来说,实在是一件很简单的事,甚至可以说是一件劳力活。两千年前的寓言中,已经成就了一位工程名家:愚公。在这位名家的身上,浓缩了项目组织者、团队经理、编程人员、技术分析师等众多角色的优秀素质。他的出现,远远早于计算机发展的历史,甚至早

yandavid的专栏 774

CS5212芯片实战:手把手教你设计DP转VGA转换电路(附完整原理图)

本文详细介绍了CS5212芯片在DP转VGA转换电路设计中的实战应用,包括芯片架构解析、核心电路设计要点、PCB布局与电磁兼容设计、调试技巧及进阶应用开发。通过完整的原理图和实用设计指南,帮助工程师快速掌握高可靠转换器的设计方法,特别适合需要国产化替代方案的场景。

weixin_30576827的博客 394

读《大道至简—编程的精义》有感

最近,我看了一本关于软件工程实践者的思想的由周爱民先生的著作《大道至简》,看完里面的第一章后,颇有感触。深深体会到了我们软件人员的的思想建立,感受到了我们程序员的思维核心。 《大道至简》从一个简单的寓言故事《愚公移山》引入话题,通过这一篇著名寓言来形象生动的阐述了我们软件人员的生活,我们编程人员的对编程的概念,其实编程就像吃饭睡觉,一点都不难学。对于我们来说,从大一开始接触C语言...

weixin_30650859的博客 90

Index-TTS-1.5:多模态语音合成的技术演进与商业落地实践

本文深入探讨了Index-TTS-1.5在多模态语音合成领域的技术演进与商业落地。该模型基于GPT风格的自回归Transformer架构,通过优化条件编码器和引入字符-拼音混合建模,显著提升了语音生成的稳定性、精准度和真实感,实现了高质量的零样本语音克隆。文章还详细介绍了其云端体验、本地WebUI部署及ComfyUI集成等实战路径,并分析了其在虚拟数字人、个性化内容创作等商业场景中的应用潜力与挑战。

weixin_29098367的博客 403

【顾邦小讲堂】第十九期 RC Snubber吸收电路详解:抑制MOSFET振铃现象与过冲的设计技巧!

通过RC Snubber电路有效抑制MOSFET DS端的过冲及振铃现象,帮助工程师们在设计中提升电路的稳定性和可靠性

GBupupup的博客 3791

Mac上IDEA的PlantUML插件报错‘找不到Graphviz’?手把手教你用Homebrew搞定(附阿里云镜像避坑)

本文详细解决了Mac上IDEA的PlantUML插件报错‘找不到Graphviz’的问题,通过Homebrew安装Graphviz并配置阿里云镜像源,特别针对Apple Silicon芯片用户提供了优化方案。文章还涵盖了IDEA中PlantUML插件的正确配置和常见问题排查,帮助开发者高效使用PlantUML进行UML图表设计。

weixin_42619742的博客 469

Webpack核心概念与构建性能优化实战:从配置到产物体积全面解析

在现代前端工程化体系中,Webpack作为模块打包工具,承担着将模块化代码转换为浏览器可识别静态资源的核心职责。其工作流程涵盖依赖解析、转换编译与合并输出,核心概念如入口(entry)、输出(output)、加载器(loader)与插件(plugin)共同构成了构建系统的骨架。理解loader的翻译作用与插件在生命周期中的扩展能力,是掌握配置逻辑的关键。在实际工程中,通过合理设置include限定范围、启用持久化缓存、利用多进程并行构建等手段,可显著提升构建效率。同时,产物体积优化涉及代码分割、按需加载与T

weixin_30399155的博客 114

基于C#开发ABB机器人上位机系统:从操作控制到数据交互的全方位实现

ABB工业机器人是世界领先的自动化设备之一,广泛应用于焊接、装配、搬运、喷涂、包装等多个行业。机器人控制器:用于控制机器人运动、路径规划、状态监控等。上位机系统:提供人机交互界面,允许操作员与机器人进行交互,实现实时控制、参数调整和数据分析。上位机系统通过与机器人控制器通信,采集机器人状态数据,发送控制指令,实现远程监控和控制操作。通过高效的操作界面和数据交互,可以大大提高机器人的工作效率和系统的可维护性。基于C#开发ABB机器人上位机系统,能够实现高效的机器人控制与实时数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1180

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 534

大道至简——编程的精义

大道至简——编程的精义 ——读后感 今天读了周爱民的《大道至简》,其实这个是我们我们Java老师,同时也是软件工程的系主任王建民老师推荐我们读的,刚开始他让我们读这个还要写读后感时(其实主要是还要写读后感)我内心是非常抗拒的。然而,有了任务还是必须要完成的,无论喜不喜欢。不过既然是老师推荐的,那这本书想必是极好的,读还是要认真读的。在我读完蒋涛为这本书做的序还有它的电子版发布前言后...

weixin_34377065的博客 174

YOLO11改进 - 卷积Conv | StripBlockStripBlock大条带卷积块,通过顺序条带卷积捕获方向性长程依赖,强化高长宽比目标特征提取 | AAAI 2026

本文介绍了面向高纵横比目标检测的条带卷积模块——StripBlock,适用于遥感、船只、车道等细长结构目标的特征增强。该方法先通过 `5×5` 深度卷积提取局部空间信息,再利用 `1×19` 与 `19×1` 的正交长条卷积分别建模横向和纵向长程依赖,最后通过 `1×1` 卷积生成空间注意力权重,并以逐元素门控方式重标定输入特征。我们将 StripBlock 成功集成进 YOLO11,在检测头的多尺度特征层中引入条带式空间建模能力,从而增强模型对细长目标和复杂遥感场景的定位与识别效果。

魔改工程师的博客 235

编程的精义读后感

抓住事物本质,解决问题就会迎刃而解。开始学习编程序的时候就自己觉得就是难上加难,不知道如何下手,也不知道从何下手。更不用说跟别人谈编程序的乐趣了,就是觉得怎么这么难,看别人编写的程序,运行之后出来的完美结果就特别羡慕,觉得他们特牛,都是大神。心想啥时候跟他们一样啊,带着这种心情再去看自己的程序,茫然啊!有时候学习编程序自己就是觉得为了应付考试,为了应付老师,虽然很清楚这样是大傻瓜,还是那样...

weixin_30528371的博客 93

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《大道至简》第一章 编程的精义

Begin(算法开始) import.java.大道至简第一章.*; import.java.愚公移山.*; public class Duhougan{ 愚公 = {项目组织者&&团队经理&&编程人员&&技术分析师}; /*原始的需求:“惩山北之塞,出入之迂” 项目沟通的基本方式:“聚室而谋曰” 项目的目标:“毕力平险,指通...

aiheyan6453的博客 177

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《大道至简》-编程的精义读后感

首先,开篇由《愚公移山》引入,叙述了原始需求的产生,项目沟通的基本方式,以及确定了项目目标,为了达到这个目标择定了一个井然有序、可以实现的技术方案。在项目实施过程中所出现的人物按任务不同划分为了技术人员、工程管理人员和一名外协。愚公的论述里面包含了编程的根本:顺序、分支和循环。也就是说,编程可以通过这三个部分来实现,这就是编程的精义。 书中说“除了先天智障或者后天懒惰者都是可以学会编程的”这句话...

weixin_30746117的博客 156

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大道至简之编程的精义读后感

在我首次读到这本大道至简时。我首先被他的引例吸引,“愚公移山”这个从小听到大的故事,一开始对他的理解也只是愚公那种坚持不懈的精神,做事不怕苦累。而在读完第一节时,我才幡然醒悟,原来他具有另外一种新的意义,蕴含了编程的精义:无论多么大的工程和事件,我们都可以通过简单得而编程来实现。在这么一个小小的故事中,充满了编程的根本:顺序,条件,循环。 愚公移山伪代码: /*沟通...

weixin_30399821的博客 114

读大道至简——编程的精义感想

时光过得真是快,转眼我就步入了大二。我对于我所学的专业,虽不敢说得上是热爱,但至少我已经喜欢上它了。想当初被这所大学录取的时候,我不是那么的欢喜,主要就是因为我没有想到我会被计算机系录取。上大学接触的第一门专业基础课就是C语言与面向对象程序设计。第一眼看到我们讲义时,满脑子都是疑问,甚至怀疑自己是否眼睛有问题。不过随着老师的指点与引导,我渐渐入了门,发现其实就一门编程语言而言,它并非是那么...

weixin_30535843的博客 146

《大道至简》第一章-编程的精义 感悟

2015-09-20 09:20:02 太行、王屋二山,方七百里,高万仞。本在冀州之南,河阳之北。 北山愚公者,年且九十,面山而居。惩山北之塞,出入之迂也。聚室而谋曰:“吾与汝毕力平险,指通豫南,达于汉阴,可乎?”杂然相许。其妻献疑曰:“以君之力,曾不能损魁父之丘,如太行、王屋何?且焉置土石?”杂曰:“投诸渤海之尾,隐土之北。”遂率子孙荷担者三夫,叩石垦...

weixin_30612769的博客 201

大道至简—编程的精义读后感

《大道至简》阅读第一章感想   大道至简以《愚公移山》的故事引入,形象生动的分析了编程的关键因素。   首先,编程需要原始要求,即编一个程序的目的所在。愚公移山的原始需求是惩山北之塞,出入之迂也。因为山的存在堵住了他们的道路,出入不方便,所以产生了移山的想法。在我们编程的时候,我们必然也有这么一个要求,比如圆周率人工计算太麻烦,这时候我们就需要一个程序求它的数值,这就是编程的需求。...

weixin_34355881的博客 107

大道至简之编程的精义读后感-Java伪代码

import.java.dadaozhijian.*; import.java.yugongyishan.*; public class Yugongyishan { 愚公={项目组织者,团队经理,编程人员,技术分析师}; 沟通方式:聚室而谋之 项目目标:毕力平险,指通豫南达于汉阴 技术方案:叩石垦壤,运于渤海之尾 技术人员:子孙荷担之三夫 工程管理者:愚公 if(...

diannaoye2750的博客 95

《大道至简》之第一章:编程的精义读后感(JAVA伪代码)

——大道至简之编程的精义读后感(JAVA伪代码) import.java.大道至简.*; import.java.愚公移山.*; public class YuGongYiShan{ 愚公 = {项目组织者、团队经理、编程人员、技术分析师}; //概况如下: //原始的需求:“惩山北之塞,出入之迂” //项目沟通的基本方式:“聚室而谋曰” //项目的目标:“毕力平...

weixin_30653097的博客 222
上一篇: JAVA中内部类和匿名内部类的区别,分别在什么时候使用它们?
下一篇: Spring 框架的架包分析、功能作用、优点
yufei_java
博客等级 码龄10年 18粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值