程序员写代码为什么要阅读源码?

简介: 阅读一篇技术文章,畅聊一个技术话题。本期文章推荐的是《Node 中的 AsyncLocalStorage 的前世今生和未来》,一起来聊聊开发者阅读源码的这件事。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,可以对技术深度的理解,也能提高对技术的理解程度。然而,仅仅阅读源码并不能代替实践操作,因为通过实践,可以更加全面的理解代码的深度和进展。

1、程序员写代码为什么要阅读源码?

了解代码的实现细节:

通过阅读源码,可以更好的理解代码是如何实现的,包括源码的算法、数据结构以及实现方式等等。这有助于程序员更好的理解源码,并且能够更好的解决问题。

image.png


排查错误:

在代码出现错误的时候,源码可以帮助程序员来排查错误的原因,比如说selectone这个函数,为啥会报错,通过源码可以看出来,selectone在查询的时候,如果长度大于1就直接抛异常了。所以如果不能保证唯一性就不能使用该方法的调用。


提高代码的性能:

通过阅读源码,可以了解代码的性能瓶颈,并且找到更好的实现方法,用于提高代码的效率,比如说一个查询很高的集合类,通过链表进行定义集合就不合适了,这个时候更多的时候,使用数组可以实现高效率。比如进行大量字符串的拼接的话,使用StringBuffer和StringBuild就会有很大的区别。如果不懂内部的原理,不去看源码就很难写出更加安全高效的代码。


学习新的技术:

通过查看源码,可以学习更加好的代码实现,比如说spring、springboot的源码,里面的数据结构、反射、以及缓存的实现等等,设计代码都比较优秀,这个如果在解决实际工作中的功能时候,可以借鉴一些写法。用以学习新的技术。而不是通过if、else来解决问题。程序员的使命,不断学习、不断提高自己的技能。

2、你觉得阅读源码的正确姿势是什么?

image.png

先整体、后细节:

在看一个源码的时候,比如说spring的框架,一定要先弄清楚,spring框架一共分为几个模块,然后根据不同的模块,再进行细分看具体的实现逻辑;这个学习的思想就是,先要弄清楚看的源码是什么,然后再进行细分。比如说了解一个大象的话,先弄清楚大象的四肢、头、长鼻子、象牙。然后再根据不同的部分进行细化的了解,不能的习性、功能。这样才能更加完整的了解大象。


站在巨人的肩膀上:

这个就是说,如果学习一段源码,还是要从经典开始,如果学习的源码本身就不稳定,的确就没有学习的必要了。先要看名著、或者目前流行的框架,只有学习这样的源码才有价值。当然也可以看一些底层的源码,毕竟现在很多都是从事高级语言,低层语言也是很多必要的,不要求都能看懂,但是至少要懂得原理。


多读多练:

多读,读源码就是要理解,大概源码是做了那些事情,然后这些事情是如何进行实现的;每一次读源码可能都会有不同的心得体会。理解的程度也会有所不同。所以说经典的源码要经常读才行。书读百遍其义自见。

多练,读只是方法,练习才是根本,因为最后要实现功能的,如果只是读的话,永远不知道,自己实现起来是否与自己想的是否一致。就像名言说的一样,实践是检验真理的唯一标准。

3、什么场景下你会阅读源码?从中得到了怎样的收获?

使用的时候:

使用框架之前,一定要看一下内部实现的原理是什么,这样才能更好的使用,避免接口都不清楚就使用。这样可以减少很多的问题;

遇到问题的时候:

在实现了一个功能之后,发现这个功能报错了,如果不是逻辑的问题,要看一下源码的写法是什么,这样才能更好的定位问题、解决问题。

学习的时候:

在实际的工作中,也要学习很多新的框架,这个时候读源码是最好的方式。


相关文章
|
网络协议 网络架构
计算机网络期末复习——计算大题(一)
计算机网络期末复习——计算大题(一)
1175 0
计算机网络期末复习——计算大题(一)
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
952 0
9hutool实战:LocalDateTimeUtil(JDK8+中的LocalDateTime 工具类封装)
|
5月前
|
存储 运维 监控
云原生NPM与传统NPM的差异
本文对比传统NPM与云原生NPM在部署、流量采集、资源影响等方面的差异,聚焦Packet处理,分析二者优劣。随着eBPF等新技术应用,云原生NPM正加速发展,助力高效网络监控与故障定位。
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
344 0
|
11月前
|
存储 人工智能 安全
【实测分享】本地AI工具AiPy更新版本v0.1.28
AiPy是一款出色的本地AI工具,2025年5月21日发布v0.1.28版本。它以本地化处理保障数据隐私,新增Trustoken联网搜索、云端私密存储等功能,支持多模型选择如阿里Qwen与腾讯Hunyuan,优化任务处理逻辑,提升效率。操作便捷升级,新老用户均可轻松上手。未来还将推出GUI客户端2.0等新功能,值得期待!(下载地址:https://www.aipyaipy.com/#download)快来体验吧!
【实测分享】本地AI工具AiPy更新版本v0.1.28
|
Web App开发 移动开发 JavaScript
探索浏览器内核:理解网络世界的幕后英雄
探索浏览器内核:理解网络世界的幕后英雄
|
Java API 数据安全/隐私保护
探索Java动态代理的奥秘:JDK vs CGLIB
动态代理是一种在 运行时动态生成代理类的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的 无侵入式增强(如日志、事务、权限控制等)。
442 0
探索Java动态代理的奥秘:JDK vs CGLIB
|
Unix Linux C++
Linuxc/c++之信号基础
这篇文章详细介绍了Linux下C/C++信号的基本概念、产生原因、处理过程、分类、注册与发送方法,以及信号屏蔽的机制。
256 0
Linuxc/c++之信号基础
|
自然语言处理 决策智能 Python
同时操控手机和电脑,100项任务,跨系统智能体评测基准有了
【9月更文挑战第9天】近年来,随着人工智能技术的进步,自主智能体的应用日益广泛。为解决现有评测基准的局限性,研究人员推出了CRAB(Cross-environment Agent Benchmark),这是一种支持跨环境任务的新框架,结合了基于图的精细评估方法和高效的任务构建机制。CRAB框架支持多种设备并可轻松扩展至任何具备Python接口的环境。首个跨平台基准CRAB-v0包含100项任务,实验显示GPT-4单智能体在完成率方面表现最佳。CRAB框架为智能体研究提供了新机遇,但也面临计算资源和评估准确性等方面的挑战。
355 9
|
人工智能
掌握写歌词的技巧和方法,轻松踏上创作之路,妙笔生词AI智能写歌词软件
写歌词是充满魅力与挑战的创作活动。掌握灵感捕捉、主题明确、结构合理和语言生动等关键技巧至关重要。《妙笔生词智能写歌词软件》提供 AI 智能写词、押韵优化、歌词分析等功能,助你轻松创作出优秀的歌词作品,实现音乐梦想。