Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过看源码,大家学到了什么? #557

Open
Locker1995 opened this issue Aug 13, 2017 · 5 comments
Open

通过看源码,大家学到了什么? #557

Locker1995 opened this issue Aug 13, 2017 · 5 comments

Comments

@Locker1995
Copy link

最近被学长问起一个问题,
“有没有看过框架源码例如Spring,Mybatis等框架的源码。”
也相信大家通过各种方法,例如debug追踪等手段,去看源码的流程等。
“那么通过看源码你学到了什么?”
“额。。”(我回答,的确看过,但是真要说学到什么,我还真说不出什么。。。。)
“那么有没有发现源码和你现在做的项目中,有没有什么共通之处。”
“额。。”(没做过对比真的不知道。。。)

所以,现在真的是一问三不知,的确需要反省、思考下--
“通过看源码,究竟学到了什么?”
“源码和我们项目的开发,有没什么共通之处?”

所以这个问题我觉得,大家也可以分享分享自己的看法或者心得。

@msftgitsklsd
Copy link

还没看😢

@BlindingDark
Copy link
Collaborator

BlindingDark commented Aug 13, 2017

我也没有大段的看过某个著名开源项目的源码。
因为如果只是使用框架就需要看源码,证明这个框架的设计是有问题的。
所以好的框架让你用起来特别舒服,根本用不到去看它的源码。

什么时候我会去看源码

  1. 当我想做某个功能,发现某些开源框架已经实现了这个功能,但是并不想整个拿来用,需要二次开发或者只要其中的某个部分。
  2. 当我想学习某一类知识点,正好有相应的业界公认的优秀开源实现。
  3. 觉得自己写的业务逻辑可能不够严谨,正好有相似的开源框架,把它的逻辑复制粘贴过来。
  4. 纯粹因为某项目特别出名。想看。

前三条都是遇到问题,解决问题,我认为这种学习方式比较适合快速学习。见效快。
第四条则是需要大片时间的系统学习。见效慢,普通人难以坚持。

看优秀源码的时候我会注意什么

  • 代码规范(变量,方法命名格式,注释,文档的写法等客观的东西)
  • 业务逻辑(实现细节,边界条件判断,算法等)
  • 设计(函数功能划分,对象职责划分等)
  • 战略级别(比如为什么要做这个框架,它可以解决什么问题,为什么要这样设计框架,有什么缺点,有什么优点,有什么同类框架,有没有更好的方案)

这些都是看情况需要注意的东西。只不过多数情况下我只会看看前两条,毕竟还是实用党,先把功能搞出来再说。
越是高级的程序员就越会思考更高层次的东西。我只是停留在够用的级别。

@BlindingDark
Copy link
Collaborator

顺便说一下,怎样学习开源代码。
不是看就行了,要改。
先把源码拉下来,跑通测试。然后改某些功能,看看能不能符合自己的预期。再跑测试。
当然其实这个过程是很难的。我也没有做过大型开源项目的二次开发。

@onlyliuxin
Copy link
Owner

我刚学习了设计模式之后,根本就不知道怎么用, 后来看来Jive和Junit ,才感慨道: 我赛,原来如此!

@Wrecksoul
Copy link
Contributor

我觉得看源码就是要看它的设计模式,《Think in java》这本书为什么这么受追捧,原因之一正是因为它穿插其中的设计模式说明。我们在写大型程序的时候非常重要的除了分析需求之外就是程序的架构设计,看源码可以让我们站在巨人的肩膀上。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants