今天,无意中看到一篇帖子,虽然有点老了,但还是挺有感触的,我相信很多工作多年的读者都有类似的经历。
文中的作者在互联网行业摸爬滚打了五年,原以为自己「凭已有的项目经验和工作经历」怎么着也应该算得上是一个业内比较资历的人士了,但在换工作的过程中被面试官深入问 Tomcat 源码,因了解初浅而遭受挫折,决定深入研究Tomcat 源码「见下图」。
读完了上面的文字,我对面试官的那句话还是挺有感触的。我们不需要熟练工,我们需要在某领域拥有超过常人的积累认知,和拥有整套完整思维模式和优秀认知事物能力的人。
我看了一些读者留言持有不同的观点,我比较赞同 @jdon007 的部分观点「见下图」。
工作 3 ~ 5 年的程序员「也包括我」,其实大家都处于一个比较浮躁的阶段,容易眼高手低、好高骛远。。。这个时间点,我觉得更需要着眼于现实「读框架源码对你的意义到底有多大?」,理智的看待问题,学会取舍,合理安排时间,排好优先级。比如你连平时的工作都完成不了,连自己负责的业务都不熟悉,在哪里花费大量的时间死抠框架源码,意义又在哪里呢?
也不是说你不能读源码,是要在你有充足精力的前提下。也并非你没有阅读过源码,就一定面试不成功,如果你对自己的业务领域有独特的见解,或者其它的一技之长,面试也挺容易的。
为什么面试官喜欢问源码?
我在知乎上看到一个网友的回答挺形象的,供大家参考。
跟面试工作几年的司机差不多,大部分司机的驾驶水平都差不多「常用框架」,司机最重要的驾驶技术「工具熟练程度」和安全意识「不写出低级bug」,但在面试中很难衡量,那就聊聊修车吧「源码」,最起码要根据现象能看到问题的原因「定位bug」,虽然有的故障「bug」不是司机能解决的,但懂车「看过源码」的知道是哪的问题,去哪修「请教专业人员」,小问题可以自己动手解决「修改源码」,自己改装过汽车「写底层框架」的肯定是专业人员了。
如何坚持下去呢?
我觉得带着目的性最好,比如,你可以把自己读源码的所得进行变现「在一些知识付费平台开通专栏」,这样你便能一直读下去。如果没有目的性,你多半会「三天打鱼,两天晒网」。
怎么阅读源码呢?
对于阅读源码,我虽然不是大牛,但多少还是有点经验。大家都知道「打蛇要打三寸」,读源码也一样,要抓住要害。就以那篇贴子所提到的 Tomcat 为例,这只三只脚的猫,说到底也就是一个满足 Servlet 规范的容器,对于这种容器而言,它无非就是提供 Socket 服务、URL 请求分发、封装 Request / Response,只是 Tomcat 在此基础上做了更细化的处理,如利用了一些设计模式,JMX,Session处理,类加载机制,相关组件等,我觉得最有意思的是这些组件「见下图」。
总的来说,如果时间充足,建议多读读源码,毕竟技多不压身!