1、缘起
DIY毕业项目刚刚结束。历时一年多的 DIY 一期正式结束。
经历了一个多月的准备,毕业项目中我们的小组“码出人生”最终胜出。
首先说下和 DIY 结缘的背景,个人比较喜欢代码规范,非常重视基础。
从 《阿里巴巴 Java开发手册》刚发布不久,就第一时间下载 PDF 版并打印下来认真看了两遍。孤尽老师《码出高效》在云栖大会发布当场就让高家祺学弟去找孤尽老师现场购买签名版,如获至宝。并非常兴奋地推荐给身边的同学。
后面得知孤尽老师要办 DIY 班,在高家祺学弟的推荐下加入了 DIY 学习群,开始见到 DIY 的口号就被深深吸引,有些新奇。
其一,Deeply Inspire Yourself
深度激发自己
其二,Do It Yourself
实践出真知
参加 DIY 班,每一段时间都有一份作业,可以看到其他同学的答案,可以看到不同的学习方法,看到不同的侧重点。
虽然每一期都会有人淘汰,但是正是因为这种淘汰机制,才能够淘汰掉一些不够坚持的人,只有有危机感才能更认真地对待 DIY 的每一份作业。只有珍惜机会,有毅力的人才更容易走到最后。
2、DIY 班的过程
2.1 题目
每一个题目都很难直接搜索到答案,都需要自己去看源码,自己去搜很多篇文章,自己去书里查,自己去思考,这是DIY班题目比较亮点的地方,这样激发了自己去思考。
2.2 规则
DIY 班开始的规则比较一致,后面淘汰规则比较多样化。这些规则更容易淘汰一些不仔细的同学。这本书就是一种考验。规则的多样性也是 DIY班的另外一大亮点。
3、毕业项目
3.1 团队
下面说说对团队小伙伴的印象:
郝宇飞 - 队长,思维非常清晰,特别喜欢思考,非常优秀,值得学习。
高家祺 - 导师的本科学生,本科期间就带社团,工作后成长迅速,非常有想法,年轻,前途无量。
刘鹏飞 - 负责支付宝登录还有 ES,做事很负责。
李志福 - 接触不太多,但是感觉人不错。
杨益萍 - 人非常阳光,做事认真负责,非常真诚,值得大家学习。
虽然很多淘汰的同学也有很多很优秀的甚至可能比我们技术更好,但是留下的人的确都是更有毅力,能够坚持并且真诚靠谱的人。
3.2 我做了什么
毕业项目最大的问题是如何在较短时间内更好地和不熟悉的小伙伴一起完成一个项目。
在这个过程中时间紧任务重,为了更好地实现任务,我提议采用结对编程(和标准的结对编程有区别)的方式,团队内再次拆分成两个小组,小组内相互讨论,相互 CR,相互 back up。
根据公司软件开发的流程建议开会的时间点,并结合使用错误码的痛点想到了自动生成枚举类打成 jar 包的方案。
困难很多,虽说一个月,但是实际用到开发的时间是有限的,公司的事情非常多。
但是既然选择了远方,便就要风雨兼程。
最后阶段老师们提出了很多建议,大家加班加点一起修改 bug的场景记忆犹新。为了一个目标一起加班加点地干活的状态非常充实。
3.3 经历的主要磨难
磨难主要有两点,其一是快速掌握新技术,第二是心态。
快速掌握新技术
从开始确定使用neo4j 心态上就有些“不适”,因为听起来高大上,时间紧,很怕掌握不了。由于前端资源匮乏,家祺侧重前端和代码自动生成,freemarker 生成枚举就要我来写,以前没写过,时间很紧张,有点怕。合作过程中其他人用 mybatis-plus 部分查询需要用到 Wrapper 第一次见。最终克服心理的恐惧,快速熟悉 neo4j,几乎一天看文档和demo,第二天上手写代码。团队其他成员使用 mybatis-plus,Wrapper 没用过,看函数列表快速上手。 freemarker 以为只能生成 html,最后发现它还可以生成 java 源码。
心态
做毕业项目期间经常加班,周末还有一次要值班,平时还要看点书,写写博客等,时间太紧张。
最后一周的时候大致成型,但是小问题很多,面临着是否要再认真投入修改的抉择。
孤尽老师的提醒很及时“行百里者半九十”,越是最后的阶段更难。
最后尤其是高家祺热情很高,我们冲了一把把一些重要的问题优先优化,小问题暂时没有修复(如支付跳转问题)。
3.4 毕业项目的收获
最大的收获之一是孤尽老师对我们两个团队的点评:
一、信任是什么?(信任是主动的,单向的)
二、透过现象看本质。(需求背后的都是人性)
三、解决问题的能力。(定位问题更加重要)
四、效率是什么?(效率是单位时间你干了别人两倍的活)
五、完成比完美更重要。(代码是改过来的,架构是演进出来的)
六、新技术的恐惧,是IT从业者的命门。(回顾第一节课:学习如何学习的能力,快速学习的能力)
七、提升抗压能力。(抗压能力是事业的基础)
八、演讲能力,限时演讲。(通过关键词来带动演讲节奏)
另外也克服了自己害怕新技术的心理,收获了团队的友谊。
此外,正如孤尽老师再毕业项目中点评的那样,设计功能时要多考虑异常场景,这样才能做得更完善。
完成比完美更重要。这句话在毕业项目阶段孤尽老师也提到过。我们项目之初就讨论过这个问题,时间紧任务重,最终决定先实现核心功能。
最后,另外一个团队的同学作品的也有很多值得学习的地方,孤尽老师不让两个团队互通有无最后才有更多悬念,让整个项目更有期待。
4、成长
4.1 变化
很多东西虽然不是 DIY 直接要求的技能,但是 DIY 帮助了我养成认真踏实的态度,让我意识到很多问题看似简单,其实想研究透还是要认真下一番功夫。
4.1.1 字节码入门
从开始参加 DIY 班时,对字节码指令不太熟悉,到现在常见的字节码指令的功能,随手就可以反编译和反汇编,甚至可以看常见的反汇编的字节码,头脑中逆推出源码。
4.1.2 从学习到解析(学习如何学习)
从开始学习《阿里巴巴 Java开发规范》,到之前通过源码、反编译和反汇编结合《Java 语言规范》和《Java 虚拟机规范》等,从自己的学习方法论角度对《手册》进行解读,在慕课网出了一份 ”解锁大厂思维:剖析《阿里巴巴 Java 开发手册》“ 的技术专栏,现在已经有 4500名读者。
结论很重要,但是原因更重要,我们如果总是记住结论就无法灵活运用。因此我们要采用多种方法来理解《手册》为什么这么规定,通过学习《手册》达到脱离《手册》的目的,在学习过程中总结和实践好的学习方法,最终提高学习的能力和解决新的问题。
专栏以明确是什么(what),为什么(Why) 然后再是怎么做(How)的角度学习知识。
本质上是使用源码、反编译、反汇编、代码调试等并结合《Java语言规范》和《Java 虚拟机规范》等权威图书为主要参考,来学习《手册》中涉及的一些知识点。
在我现在看来这些是不错的 Java 学习方法。
专栏最后一节也写到了专栏的初衷,其一是对孤尽大佬的崇拜;其二是希望传播一下自己认为高效的学习方法。
虽然现在看来还有很多可以补充或完善的地方,但是通过专栏的编写,让自己又一次深入阅读和学习了《手册》,在教别人的同时,又加深了自己的理解。
我们看书、看专栏可以吸收别人的学习方法,这也是在提高学习如何学习的能力。
《手册》泰山版已经发布,一定会跟进大佬的步伐,早点下载学习。站在前人的肩膀上,少趟坑。
4.1.3 克服对新知识的恐惧
从开始时对新知识非常恐惧,到参加毕业项目时快速熟悉 neo4j、 freemarker 和 mbatis-plus 等,克服了心里障碍,探索了快速学习新知识的方法如拉取源码运行单元测试、看官方文档、找简单的 demo、查看核心类的函数列表等。
从开始孤独的学习,到现在有几个技术上不错的好朋友,一起探讨共同进步。
4.2 收获
这一年发生了很多变化,很多都是直接和间接因为参加 DIY 班带来的收获。
归纳和演绎。通过具体的知识归纳出共性的本质的规律,然后通过本质的规律取运用到解决问题上。这也是一个不错的学习方法。
机会留给有准备的人。不仅要有一定的知识储备还要有认真做事的态度。
克服对新技术恐惧的心态。新的技术的本质原理还是计算机专业基础中的一些理论和思想,大家都常用的技术一般不会太难。后面还是要继续巩固专业基础,专业才是安身立命的根本。
孤单丝不成线,孤木不成林,很多事情要依赖团队才能完成,如何在团队中作出最大的贡献体现自己的价值很重要。
知道不等于懂得。我知道一个知识和真正理解和掌握是完全两码事,但是会有很多人看过或者知道某个知识就认为自己掌握了,然后不屑一顾,错过了深入探究的好机会。
每一个疑问代表着至少一个知识盲区,代表着极佳的学习机会。当我们看到DIY班的问题自己没把握的时候,说明我们学的还不到位,这恰恰是学透某个问题的机会,可是很多人在面对问题一知半解的时候总会忽略问题,而不是趁机研究透问题。
先猜想后验证。在学习和研究 DIY 班涉及到的一些源码时,体会到先猜想后验证是高效学习的一个重要方式。如果一开始就直接看答案,就会觉得答案是理所当然的,一旦自己动脑思考解答,很多人就会手足无措。
不仅要知其然,而且要知其所以然。是什么,为什么比怎么做更重要。正如孤尽老师所说,技术人员总喜欢开始就关注 how,而是应该先关注 why,再关注 what 和 how。其实正是因为我们在学校里养成了记忆答案的学习方式,脱离校园后就没有意识到问题,没有主动思考原因。
行百里者半九十。越是到最后阶段越是容易放弃,很容易功亏一篑,坚持很重要。
授人以鱼,不如授人以渔。孤尽老师 DIY班就是在践行这个原则,同样我们自己学习和解决问题时也应该多思考通用的方法而不应该满足于解决某个具体问题。
心态转变。有对团队有益的想法,不再憋着,而是勇敢地说出来。
专业才是安身立命的根本。说到底各种 DIY班的问题是否能够回答的准确严谨,本质上还是要看专业基础是否扎实,其次是平时是否认真去看了源码。后面打算多巩固下专业基础,让自己的专业知识更加扎实,更牢固。
细微之处见真章。发现孤尽老师看代码看得非常仔细。印象比较深刻的是 Boolean 的 hashCode 这个问题,看似很简单,但是绝大多数人都没进去看过,都没思考过为什么这样。
5、吃水不忘挖井人
感谢孤尽老师免费组织 DIY 班,传授大家正确的学习方法和理念。
感谢一藏和润瑾老师给我们的项目的一些建议和点评。
感谢团队内所有的小伙伴的努力。
非常渴望可以有一个纪念性的东西可以代表这么长一段时间的付出,可以给自己带来更美好的回忆。
听说 DIY 班最后会发毕业证书、毕业奖章,优胜团队会有奖杯,非常激动。
6、启程
每一次结束都是一个新的开始。
就像高中毕业了,并不代表解放了,而代表不一样的学习模式;就像大学毕业了,并不代表自由了,而是要面临工作和生活的压力。
DIY 班一期结束了,但对于技术的进阶来说却是一个新的开始。
DIY 班将留下最美好的回忆。未来带着 DIY 班得到的一切启发,继续思考,继续前行。
PS: 后面会推荐更多的朋友参加孤尽老师后面的 DIY 班,跟着孤尽老师学习。