如何有效地学习开源项目的代码?

发布于 2021-11-18 16:37 ,所属分类:软件编程学习资料


对于计算机专业的同学来说,网络上丰富的开源代码是一笔极为宝贵的财富。通过对开源代码的学习与钻研,大家能从中学到很多书本上、课堂上学习不到的实践知识。如何学习开源代码以及如何学好开源代码成为了大家经常的话题,岛主今天就这一话题谈一谈自己的看法。


一、为什么要学习开源项目的代码?



01 站在巨人的肩膀上看问题

大型项目的代码开源是一件十分有意义的事情。开源,也就是开放源代码,其本质是实现技术贡献。世界范围内的研究者均能看到该项目的源代码,这能让大家了解该项目当前的进展,包括采用的技术、已实现的功能和仍存在的缺点,从而不断改进、优化其性能。在计算机科学领域,有许多目前各位熟知的软件项目均得益于开源。

① Linux操作系统:起初是由芬兰赫尔辛基大学的年轻学生Linus Torvalds编写的。它是在GNU General Public License(GPL)的许可下开发出来的,其源代码可以被任何个人免费使用。现如今世界上有成百上千的公司基于这个内核开发出了自己的操作系统。

② MySQL数据库:MySQL是免费的,使得用户可以零成本地建立容量巨大的数据库或者网上交易系统。在来自MySQL网络社区的帮助信息足可以应付几乎所有的问题。

③ PHP编程语言:PHP是由Rasums Lerdorf创建的,起初PHP只是一个简单的程序。后来,其范围扩大到了访问数据库。PHP所有的源代码、文档都可以免费使用。就PHP本身而言,用户可以无限制地发布自己编写的程序。


02 提供交流学习的平台

将代码发布到社区中或上传到网络上供大家共同学习和交流,能在很大程度上发挥团体的作用,促进项目的性能越来越优秀、功能越来越完善。通过网络,大家能随时随获取网络上发布的开源项目,把其下载到本地进行学习与研究。在学习开源代码的过程中,各位会接触到不同项目所采用的架构以及相关领域经常使用的算法,不断增加自身知识储备、提升自身专业技能。尤其对于一些比较优秀的开源项目,能让学习者大开眼界。

同时,社区的出现为具有相同爱好的研究者提供了便利的交流平台。他们统一战线,不断解决项目中出现的一个又一个问题,并将自己的研究成果发布到社区中供大家学习和交流。


03 有益于优化和改善

开源意味着免费,用户在使用开源代码的过程中,不会产生任何的版权开销。随着开源软件的流行,给使用者带来了显而易见的利益。任何人都可以免费使用开源项目代码,并以此为内核开发出属于自己的东西。

与闭源技术相比,开源项目更有可能遭受黑客的攻击。但也正因为此,开源的代码也会有源源不断的开发者加入对其优化,发现开源项目中所存在的漏洞并对其进行优化,从而避免遭受攻击。商业模式的开源在很大程度上体现了开源精神的伟大之处。


二、如何有效学习开源项目的代码?


01 从基础学起、需理论联系实际

在学习某一领域知识的时候,岛主不建议大家一上来就找一些大型项目的开源代码进行学习,而应该注重“修炼内功”,从基础知识入手进行学习。在学习理论知识的过程中,还需要注意联系实际,尽可能找一些实例进行训练。在实际操作过程中可能会遇到各种各样的问题,只有真正动手解决问题,才会对该内容记忆深刻

在学习完相关基础知识后,可以着手编写一些小型的程序,比如宿舍管理系统、小型电商系统等等。通过搭建一个完整的系统自身的项目能力会得到很大的提升,编程能力也会得到很好的锻炼


02 学习开源项目,需在代码中找答案

网上有很多开源的项目代码,大家在找开源代码的时候要注意甄别,一般来说获赞和评论较多的代码不会踩坑。在下载源代码之后,首先要能跑起来,编译通过、正常运行。有些开源代码下载到个人电脑上的运行过程并不是一帆风顺的,可能会遇到各种各样的问题。有些问题源于编程软件的版本不一致,也有一部分是因为其代码本身出错。因此,大家在学习的过程中应该带着问题学习,尽可能在代码里找答案

即便是出于学习的目的,也是有很多侧重点的,比如代码风格、文档规范、数据接口、整体架构等等。对于某个语言的小白,找一个熟悉领域的开源项目来深入掌握这门语言,也是一个不错的主意。


03 深入理解代码,需整体把握

对于一些大型项目来说,其代码数量非常大。因此有些同学在学习的过程中往往会顾头不顾尾,无法整体把握代码的核心思想。针对这种情况,岛主建议大家在学习时可以借助程序流程图来梳理代码的逻辑结构

首先应该找到代码的入口点。在最有可能运行到的地方设置断点或者抛出异常,这样就能够找到一个项目在正常运行时的入口点。然后从此入口点出发,逐步把握整个项目是如何启动起来。通过绘制整个程序的流程图,能让各位更加直接的理解程序的整体流程,而不会被代码所干扰,让程序员们能从总体上把握整个程序。同时,应尽可能的做出读书笔记或者添加注释,方便自己后续回顾,增加代码的可读性。


04 全面掌握思想,需动手实践

对于开源项目代码的学习过程,是一个从整体到细节的过程、是一个从表面到内核的过程、也是一个不断认清事物本质的过程。尝试理解一个系统的内部结构需要付出一定的努力。在整体上,应该把握该项目的组成部分、主要模块、函数之间的调用关系等等。同时,还从实际需要出发,动手实践去修改这个项目中的部分代码,然后看看是否能运行通过?会不会报错?若有报错,应该思考引起错误的原因并改正。

在对代码各模块的功能及实现过程有所了解的前提下,可以尝试修改代码中某个功能或者添加新功。在实现之前先自己思考,不要参考网络上的解决方案。在此过程中若遇到无法解决的问题则可求助于社区或去网络上查找相关博文,对比自己的思想和其他博主思想的不同之


三、平时应该怎么做?


01 参加各类比赛

对于在校的大学生来说,有很多机会能接触到不同类型的比赛,如物联网+、大创、Kaggle等等。这些竞赛大多数要求提交完整的项目及文档。通过参加这类竞赛,同学们能学习到很多领域内的新知识、掌握企业内常用的解决办法。在不断完善项目功能的过程中,大家可能会借鉴一些现有开源项目的实现过程,以实际解决问题的需求来带动开源代码的学习。把从其他项目中学习到的新知识应用到自己的项目中,能加深各位对知识的理解程度。


02 利用好课程设计

对于计算机专业的学生来说,学院会开设不同课程的课程设计,这对大家来说是锻炼项目能力的一大利好。这类课程一般是开放性的,大家可以结合自己的兴趣与实际应用前景去开发一款小型的项目。同学们将从确定开发项目主题开始,思考应实现的功能,需要如何去实现,直到最后提交一个完整的项目及开发文档。

这个过程的学习能极大程度上锻炼大家的学习能力、开发能力、团队合作能力等等。而在课程设计上开发出的优秀的项目,也可以作为亮点写在自己的简历上或者拿去参加比赛。


四、总结


开源代码对个人的发展、大家共同的进步有着举足轻重的作用。目前网络上开源项目代码层出不穷,如果大家在平时的学习中能充分利用好这一资源,不仅可以掌握优秀的编程方法、提高动手实践能力,还能激发编程灵感、打破思维局限性。希望大家能利用好这一资源,使自己的编程能力得到提升!




资料推荐



全程资料

计算机保研一本通

保研蓝皮书

计算机超全保研资料

CS院校解析一本通

CS保研预备营视频课

2021计算机夏令营参营冲突表

2021计算机夏令营&与推免时间汇总表

2021计算机夏令营优营政策汇总表

2021计算机保研英语要求汇总表


课程资料

《计算机网络》《软件工程导论》

《数据库系统概论》


项目解析手册

清北复交浙CS项目解析手册

TOP计算机院校项目解析手册

TOP软件院校项目解析手册

TOP人工智能&自动化院校项目解析手册

TOP信息科学院校项目解析手册

TOP网络安全院校项目解析手册

计算机保研价值洼地项目手册


项目考核手册

计算机全套考核资料 计算机预推免手册

计算机考核手册 预推免攻略手册


单院校资料包

北京大学信息工程学院预推免冲刺资料包

北京大学信息科学与技术学院预推免冲刺资料包

北京大学软件与微电子学院预推免冲刺资料包

北京大学前沿交叉学科研究院大数据研究中心资料包

清华大学软件学院预推免冲刺资料包

清华大学网络研究院预推免冲刺资料包

清华大学计算机科学与技术系预推免冲刺资料包

复旦大学计算机科学技术学院预推免冲刺资料包

浙江大学计算机科学与技术学院预推免冲刺资料包


文书资料

通用文书申请攻略&模板

计算机文书申请攻略&模板

联系&婉拒导师邮件模板


面试资料

计算机面试常考知识点总结 简历面试回答模板50问

论文面试回答模板50问 保研口语万能模板

PPT自我介绍攻略攻略&模板

(预)推免面试突击手册


真题资料

计算机保研机试真题手册软件工程笔面试真题150道

自动化专业笔面试真题179道电子信息笔面试真题200道

信息安全笔面试真题150道大数据笔面试真题163道

人工智能笔面试真题150道 软件体系结构笔面试150道


竞赛资料

美赛一本通 国赛资料包
计算机竞赛一本通
互联网+”一本通
大创申请一本通
MathorCup数模竞赛资料
APMCM竞赛资料
蓝桥杯训练营算法课

科研资料

计算机科研一本

Sci-Hub使用大礼包LaTex大礼包

Matlab学习资料包

StyleWriter资料包

CiteSpace资料包

Endnote资料包

大数据学习资料包

文本分析学习资料包


科研论文白皮书科研工具百宝书

专利申请一本通


SCI写作投稿资料包

SCI查重与降重资料包

SCI插图大礼包


毕业论文资料包


编程资料

Python编程资料包

Linux学习大礼包

PHP语言学习大礼包

R语言资料包



其他

英语四六级稳过大礼包


阅读推荐

《26所院校 + 55份攻略,计算机考核手册汇总》

《北本占比55%!北大信科保研生源大起底》

《南开大学人工智能学院推免生源大起底》

《南开大学计算机学院推免生源大起底》
《北大叉院推免生源大起底》

《双非占比24%,厦大信息学院入营&推免生源大起底

《双非占23.9%,中科院计算机推免生源大起底

《北大微软推免生源分析》

《计算机学子必备的科研论文指南

《非计算机专业如何跨保计算机》

《对于计算机保研而言,学校title重要还是城市地域重要?》

《AI、大数据、图形、软件......计算机各专业保研方向介绍及就业情况分析》

《计算机保研机试介绍及准备策略

《计算机保研常见竞赛汇总》

《计算机机试调bug经验汇总》

《中国大学生计算机博弈大赛竞赛经验》

相关资源