心得 - 如何读大型代码和写代码

【开发心得】EA代码的AI优化示例 AI写代码,如果你想替代程序员,那在现阶段,一定是你错了。 阅读详情

硬件工程师画PCBà代码黑盒子

首先,我们分析一下硬件工程师是如何将一个芯片画在一个PCB上的。硬件工程师首先阅读芯片的datasheet,他阅读的一个重点是芯片每个管脚的作用,是输入还是输出。硬件工程师不一定非要明白该芯片是怎么实现的才能将芯片正确地画在PCB上;不一定非得知道每个管脚的时序图,才能将用好该芯片。在读大型代码时,我们正在研究的某个模块或者类可能会new太多的其他类对象或者调用很多函数,我们不一定非得要明白每个类是怎么实现的才能使用该类对象,不一定非得明白每个接口函数的具体规范,我们才能使用,我们只需要知道这个调用类实现了什么样的功能,起到什么作用,它的接口函数的作用是什么,就可以将该代码读下去。我们调用的函数和类都把它看做一个黑盒子,虽然不知道这个黑盒子是怎么实现的,但是我们确信,该黑盒子肯定能够完成我们交给它的任务。

另外,一个芯片可以用来完成很多功能,也就是这个芯片的外围电路可以根据应用做出很多种来,这些功能五花八门,可能连最初的芯片设计者都想不到。所以,芯片设计者设计出了芯片的管脚,能够通过管脚使用该芯片的功能,它可能也会限制使用者的使用规范,如管脚之间是如何协作的,单个管脚的时序如何等等,但从不会规定使用者该芯片只能使用在什么场合。在读大型代码时,我们正在读的这个类或者模块,会向外提供很多接口,我们不一定非得要看看外面的使用者是如何调用该类或者模块,将该类或模块用在了什么地方,完成了什么功能才能将代码读明白,我们只需要知道该类或模块提供的接口应该怎么使用,接口和接口之间是怎么协作的。对于外部调用该类或模块的代码,我们也要看做一个黑盒子,我们确信它们肯定能够用好该类或模块的。

如果以上两点,我们严格执行,肯定可以读好代码的,因为可以用数学归纳法证明。当只有一个模块A时,由于A不调用外部模块,也不被外部模块调用,所以只需要将A的自己的代码看好即可,显然是成立的;假设当有n个模块时,该定理成立;那么当有n+1个模块时,假设Mn+1被Mi调用,Mn+1调用Mj,那么只需要将Mi和Mj看做黑盒子,只要将Mn+1的代码读好即可,由于M1…Mn的代码已经读好,所以n+1个模块的代码都读好了,所以定理成立,证毕。

所以,确信这个方法是可行的。

如果疑问模块内部代码怎么看,可以将模块内的每个函数看做单独的模块,那么应用上面的定理,将每个函数的代码看明白后,也就将该模块的代码读好了;那么如何将函数内部的代码看明白呢,如果函数内部的代码都看不明白,可能真不太适合干这一行了。

其实,可能生硬地套用上面的方法也不见得真地能看懂代码,但是这个方法至少能够起到一点帮助作用。

 

餐馆工作流程à服务商和客户à代码模块化

首先,我们看一下餐馆是怎么运转的,从宏观上看,餐馆如果运转,需要菜贩提供蔬菜,餐馆能够将蔬菜变成菜肴,需要有顾客来吃饭。在这三者中,餐馆的服务商是菜贩,餐馆的客户是来吃饭的顾客。在实际中,菜贩从来不会关心顾客是否满意这个饭店做的菜是否好吃,它只关心饭店会购买多少蔬菜;顾客如果觉得菜不好吃,也从不会责怪菜贩提供的蔬菜不好,而是会找餐馆老板;餐馆要明白如何告知菜贩需要购买什么菜,以及告知菜贩什么时候送到,餐馆也关心如何给顾客提供可口的菜肴,并提供某种和顾客进行沟通和服务的通道。

另外,其实餐馆内部也存在着服务商和客户的关系。如洗菜工是切菜工的服务商,切菜工是洗菜工的客户,切菜工是厨师的服务商,厨师是切菜工的客户,厨师是端菜员的服务商,端菜员是厨师的客户,端菜员是顾客的服务商,顾客是端菜员的客户。在这里面,每个成员其实都有一个服务商和客户。只要他们把自己负责的事情做好,并彼此服务和被服务就形成了餐馆有秩序的流程。这句话的另外一个意思是不需要关心自己的服务商和客户会进行怎么样的工作,我们认为服务商肯定能够提供优质的服务,客户肯定明白如何接受我的服务,如菜没洗干净,切菜工不需要自己去洗菜,而应该让洗菜工去洗。

代码,不管是多么庞大的一个处理模块,还是一个类、一个函数,还是一句代码,它们都也都存在着服务商和客户之间的关系。首先,要明白客户是谁,需要提供怎样的服务,为了完成这些服务,自己又需要什么样的服务,需要什么样的服务商提供。根据上面的分析,比如一个类明白了应该提供的public的函数是什么,需要new其他的类对象来完成自己应该完成的功能。

所以,根据服务商和客户,我们将大功能进行分解成小功能,将小功能接着分解成更小的模块。指定好每个模块需要提供的服务是什么,他们又需要接受什么样的服务,然后分别完成每个模块的代码。

 

总结

   以上,只是本人的一点心得,肯定有很多更好的方法和经验。如果拙法能够给他人提供一点帮助,倍感荣幸。

Code Complete(代码大全)看后心得 最近,公司上司要我在学校这段时间好好看看代码大全这部将近千页的鸿篇巨制。鉴于自己记忆低下,看完就忘这一不雅的毛病,因此想着还是边看边记录下来一些好的东西,于是乎就想到了在优快云上博客上写写。事先声明,本篇纯粹是为了自己而写,当然有理解不对的还望大家指正。   一.设计的层次      书中第五章讲述的是软件构建中的设计,说实话,对于我并没写个多少大型程序的小子来说,看到这样的章节,有点不感冒 阅读详情

相关推荐

Datawhale-动手学大模型应用开发-第二章心得

你可以想象 Git 是在管理你的食谱集,而 Docker 是确保无论在哪个厨房,你都能用相同的设备和原料做出一致的菜品。Docker 保证了“在我的机器上可以运行”的程序,也能在其他任何机器上同样运行,无论是你的同事的电脑还是云端服务器。Git 就是程序员用来做这个的工具,它可以帮你记录每一次重大的更改,这样如果你做错了什么,就可以轻松地回到过去的某个“快照”去修正。想象你有一套完美的厨房设备,可以随时打包起来,到任何地方都能展开来做出一样美味的菜肴,这就是 Docker 的魔力。这样的字典键来访问。

DeButAlacatraz的博客 953

如何阅读大型项目的代码?

作者:kimmking 如何阅读大型项目的代码?这是个非常好的问题。从这个问题我们可以感受到,题主强烈的学习愿望,以及想快速提高技能水平的决心。但是反过来,我们需要思考一个问题,为什么我们要阅读大型项目源码?我们的目的是什么?目的不同,就会导致我们阅读的方式也不一样。我不知道题主说的大型项目是现在工作中要维护的项目,还是自己的兴趣爱好,从网上找到的某个开源项目。 但是不管是什么类型的项目,我都建议题主先列清楚自己具体想达成一个什么目标,然后再去分解自己的这个目标。比如说,是自己工作中需要的项目,那么其实,就

Cyber 942

大模型项目实战应用心得,在大型国央企应用心得分享

大模型这么多,没有大型项目实战使用过就没有话语权,本人从事java,python,代码,架构10来年,写点近几年大模型实战心得吧,这里通过大模型实战应用心得,在大型国央企应用心得分享。主要包括模型选择,服务器选型(一般需要国产化,不能使用A100,T4等英伟达系列),PDF解析,业务接入,知识库抽取,结果呈现,运维云计算。重点是知识库抽取,难点是pdf解析准确性。如有问题欢迎互相交流

nianfa的博客 638

源码分析思路

不知道 ----> 知道 (1) 不理解 ----> 理解 (2.3.4.5) 1.软件功能:先了解源码有哪些功能,最好先读一下readme 2.代码的组织结构:查看代码目录中每个目录都是什么功能,每个文档是干什么的 3.使用graphviz绘制出程序流程图,了解整套运行起来的机制(不要深入细节,单需要搞清楚整个业务流程是什么样的) 4.模块粘合层:每个模块...

xinkongqiSHF的博客 493

第三篇:AMD 和 Intel

它像“乐高积木”一样,可以通过标准化的接口与其他部分组合,构建复杂系统。理解组件后,你会发现从操作系统到微服务,现代软件本质上都是组件的组合!

u013089100的博客 1031

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 724

写代码的心得

一、初级阶段 管他三七二十一,需求直接开干,程序能跑通能干活就行。 二、中级阶段 拿到需求心里过一遍,80%的架构和接口已经梳理定义完毕,尚有部分细节的没想明白怎么实现,边开发边想,边写边重构,等开发完,架构也定义清晰。 三、高级阶段 拿到需求心里过多遍,架构已定义完毕,架构设计既能满足现在,也能预见到未来需求的变更。接口定义,架构实现,细节打磨,所有的代码都是perfect,多一份嫌胖,少一分嫌瘦。 四、总结 我们可以看到,真正的高手,是能根据软件现有的需求,预测到未来的需求,合理的设计架构

sinat_31608641的博客 1697

Unidbg补环境实战:复现Shopee风控Native层运行环境

Android App风控已从HTTP层签名校验,演进为深度依赖Native层系统调用与硬件特征的多维验证。其核心原理在于通过JNI桥接Java与Native代码,调用openat、sysconf、getrandom等系统接口读取/proc、/sys、/dev等路径的真实状态,并结合SELinux策略、CPU拓扑、分区哈希等硬性指标构建设备可信画像。这种技术架构显著提升了对抗黑灰产的能力,但也对逆向分析与自动化调用提出更高要求——必须精准模拟底层环境而非仅Hook逻辑。Unidbg补环境正是为此而生:它支持

weixin_30533109的博客 639

如何阅读别人的代码(转)

++++++++++++第一章: 导论++++++++++++1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码.2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法.3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格.4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪.

空虚男孩--南方狼! 2073

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

实战指南:如何用Frida绕过某梆加固的Anti-Frida检测(附完整脚本)

本文深入剖析了企业级加固方案中的Anti-Frida检测机制,并提供了实战对抗策略。通过分析基于文件系统、内存特征、行为及环境的多层次检测原理,文章详细介绍了如何定位检测逻辑、绕过maps文件扫描、对抗内存与行为特征检测,并附上了针对某梆加固的完整绕过脚本与系统化工程方案。

weixin_42527589的博客 600

python学习心得(1) --- 大型文件的读取

我在博客上发表一些我的Python学习心得,希望对大家能有帮助。 这一篇我们讲述大型文件python如何去读取。1、文件读取当我们使用open函数取得一个文件对象之后,对这个文件的所有操作都是通过这个句柄来实现的。 读取文件的操作有三个: read() 直接去读字节到字符串中,可以指定size来读取 readline() 读取打开文件的一行 readlines() 读取所有的行,然后返回一个字

qiuyu93422的博客 911

131、高通骁龙影像平台总览:Spectra ISP 各代架构演进与特性对比

摘要:本文深入分析了高通骁龙Spectra ISP从250到780代的架构演进与技术痛点,揭示了各代关键改进与隐藏问题。重点剖析了双ISP带宽分配、AI ISP黑盒决策、温度控制等实战问题,并给出具体解决方案(如寄存器配置、QoS调整等)。文章强调工程师需平衡带宽、功耗与画质的三角关系,建议调试时先关闭AI模块建立基线,关注统计引擎配置,并建立温度监控机制。最后指出理解架构局限比追求完美设计更重要,需要针对不同场景找到合适的妥协方案。(148字)

sundong_81的博客 207

你写的代码就是你的犯罪证据

最近我工作的主要内容,是在和别人结对编程,以对一个大型的遗留系统项目进行重构。过程中,我发现一个特别有意思的东西,我重构了很多的 if 语句。从这些 if 语句里,大抵是...

Phodal's zenthink 2421

STM32F4 SPI FLASH(W25Q128)驱动详解(含DMA+完整读写擦除+低功耗)

本文实现了一款基于STM32 HAL库的SPI Flash驱动,以W25Q128为例,提供了完整的初始化、读写、擦除、ID读取等功能。驱动集成了DMA传输、超时保护、页对齐写入等特性,支持扇区擦除、整片擦除、页写入及跨页缓冲写入。代码结构清晰,易于移植到其他SPI Flash型号(如W25Q64、W25Q16等),适用于数据存储、固件升级、文件系统等嵌入式场景。

kevin1499的博客 96

YOLOv8【第十一章:视频追踪与流处理篇·第3节】匈牙利算法(Hungarian Algorithm)与 KM 算法匹配机制详解!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 444

分享我的大型Java多用户商城系统开发的心得和困难

看到别的朋友在ITEYE上发表的“开发电子商务网站技术选型“有感而发 本人一直从事Java企业级开发,因此接触过不少Java的开发框架。目前作一个多用户商城的创业项目,因为本人只专著于JAVA,那没有办法,都不用选型了。进入JAVA世界之后又有很多框架可以选择,列举几个熟悉的,例如表示层struts, spring mvc, jsf,tapestry..., 控制层:spring/ejb, ejb...

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 3405

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Uniapp的一些心得和体会

在订单结算模块,涉及到支付功能,我通过调用 Uniapp 提供的支付 API,实现了微信支付和支付宝支付功能,并处理了支付过程中的各种状态,如支付成功、支付失败、支付取消等。这种互动式的学习方式,不仅加深了我对知识点的理解,还让我结识了许多志同道合的开发者,拓宽了自己的技术视野。未来,我将继续关注 Uniapp 的新特性和新功能,不断学习和探索,将所学知识应用到实际项目中,开发出更加高效、优质的多平台应用。例如,将网络请求的错误处理逻辑封装成一个公共函数,在各个页面中调用,避免重复编写相同的错误处理代码。

jiangke84的博客 572

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

心得分享:Cursor 助力,数周上线产品月入过万!

在这个快速变化的技术世界中,没有完美的工具。关键在于关注交付效率和质量,拥抱变化,享受新工具带来的乐趣。小步快跑,持续迭代,这不仅是使用 Cursor 的秘诀,更是开发者在技术浪潮中前行的重要法则。让我们一起借助 Cursor 这样的强大工具,开启高效开发的新篇章,让创意和价值在代码中闪耀!

asunnyboy861的博客 1416

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

10年老程序员告诉大家什么时候该写什么样的代码

10年老程序员告诉大家什么时候该写什么样的代码 如果有小辈,多提携一下,自己把时间放在精研算法上,没事做做优化,这才是最好的价值输出。

红目香薰 458

程序人生:读《大型网站技术架构》一些感受以及读书的建议

《大型网站技术架构:核心原理与案例分析》作者:李智慧。 这里不是图书推荐,只是读完这本书觉着还不错,写一些自己的感受,不喜勿喷。 一、这本书讲了什么 通过书名就可以知道这是一本讲互联网架构的书,而且是大型网站的书,并且充满着案例分析。 通读本书内容可以发现,这本书不仅讲架构,而且讲了架构是怎样发展的,架构的要素是什么(性能、可用性、伸缩性、扩展性、安全性),用发展的眼光详述了各要素以及它们...

希尔伯特的博客 325

回归,随缘写一些python心得吧

大约有两年没登陆过账号了 高考,失败,复课,再高考,中间经历了不少乱七八糟的,也没有大块的时间给我写博客(再说就算有时间写,也什么都没学习,无从写起 如今一切回到正轨,吃饭睡觉打do。。。。不对,打代码的生活 接下来的一段时间,写点python学习上的心得,可供新入坑的各位参考,列位神犇还请多多指点 关于python的优势也不想多说了,某大型智能搜索引擎比我说的全多了,动动手指就能查 对...

weixin_30772105的博客 92

2年python编程自学经历,分享一些学习心得和避坑经验

学python编程开始前,本人纯小白,1年半行政打杂经验,和编程不搭边,偶然的机会接触到python,于是开始利用空闲时间学起了python。自学过2年python,有一些学习心得和避坑经验和大家分享,希望对已经入门和准备入门的零基础朋友能有些帮助,少走点弯路。首先,对于python初学者最大的困难是什么?就是不自信,否定自己,在心理上设障碍,觉得一个个编程代码看不懂学不会。

m0_58477260的博客 2192

matlab矩阵作分钟平均,提高matlab运行速度和节省空间的心得合集(ZT)

B =aiTemp(A(iXmin:iXMax,iYMin:iYMax,iZMin:iZMax));当然了,改进的前提是知道矩阵A的非零元(即值为true的元素)大致的分布,也就是能够求出iXmin:iXMax,iYMin:iYMax,iZMin:iZMax这个范围。现在终于明白并体会到cwit所说的“连num2str都优化过”的含义了。3.不断优化代码,例如corrcoef函数,matlab自带...

weixin_31659795的博客 357
上一篇: 北大ACM3253 - Fence Repair(赫夫曼编码)
下一篇: Prim、Kruskal、Prim+Heap算法效率实测
G机器猫
博客等级 码龄16年 106粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值