今天给大家推荐一些值得学习的开源项目,包括C, C++,Golang,Java等后台开发主流语言的项目,大家工作之余,可以花点时间学习和研究这些项目的优秀设计和实现,提高自己。
首先是提升编程技能。对计算机专业相关的学生而言,在学习编程后,能验证能力的只是一些简单项目,但通过阅读开源项目的源码,你不仅可以学习顶级项目的设计思路,还可以学习顶级开发者的编程思路,比如通过学习提升代码的可读性和简洁性。同时,你也可以提交PR、注释,而社区里的资深工程师会给出直接反馈,这比你自己摸索要成长得更快。
其次能帮你找到满意的工作。如果你在开源项目上留下印记,无论是贡献代码、技术文档、应用案例等等,这些都能证明个人能力,甚至,有时你的简历只需放上GitHub个人账号链接就已足够:)
最后,开源也许会成为你热衷的事业。处在这样一个开源崛起的时代,尤其在国内很多顶级项目不断催生,现在正是那些热爱开源理念和开源软件的开发者大展鸿图的时候,他们有的在学生时代就已学习和贡献开源,开源世界为他们带来了荣誉和快乐,而他们在未来也致力于开发和运营开源软件。
总之,对于高校学生或者已经工作几年同学,只要你能通过开源项目的代码证明自己的实力,这无疑像是拿到了观看球赛的前排门票,你不会再因为“内卷”而发愁,因为你的前方视野足够辽阔。
如何学习开源项目
首先了解整体架构
查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。
先把项目跑起来
如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。
如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。
阅读源码建议
(1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
(2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
(3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
(4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
(5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
(6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
(7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。
开启自己的开源项目
通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。
C经典开源项目
1.Libev
libev是一个全功能和高性能的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
特点
不使用全局变量,而是每个函数都有一个循环上下文。
对每种事件类型使用小的观察器(一个I/O观察器在x86_64机器上使用56字节,而用libevent的话使用136字节)。
没有http库等组件。libev的功能非常少。
允许更多事件类型,例如基于wall clock或者单调时间的定时器、线程间中断等等。
更简单地说,libev的设计遵循UNIX工具箱的哲学,尽可能好地只做一件事。
开源地址: