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

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

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

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、利用好课程设计

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

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

四、总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值