这几天写博客,多了很多对自己技术之路的反思。
1、写博客要趁早。可能工作的头两年觉得自己水平有限羞于见人。可能后续几年发现有问题找google,照着例子就能解决,没有可写的地方。后续呢,忙于工作,懒得写。
现在才知道,一个程序员离优秀可能真的只差一个博客。这个博客主要是给自己看的,当然关注度高也是好事儿,没人看也不耽误自己总结。现在知道有点晚了,但也并不太晚。
为什么博客会有这么大的作用呢,就一句话,纸上得来终觉浅,绝知此事要躬行。
真是可惜,我早不知道,替自己遗憾,有点晚了。
还好我现在知道了,所以并不太晚。
2、没人会写一辈子程序?从我上学的时候,很多人都说过这话,程序员的工作寿命都挺短,年纪上来了就要想办法转管理。我为什么说,从现在开始并不太晚呢,也跟这个有关系。我认为这句话对也不对。
要把技术之路打个比方,我觉得像金庸武侠。初出茅庐,一身正统基础内功学的稀松,一套全真剑法也练的不咋地。好在出身全真教,在江湖上勉强可以糊口。
后来吧,浑浑噩噩也罢,反正输多赢少。慢慢的开始掌握一些招式。从一般招式到各种高大上的招式,发现这些高手公布的招式真是博大精深。
日积月累,突然发现招式的源头都还是未出师前的全真剑法,后来学的招式虽然凌厉,但最终还是基础加上变化。
于是回头潜心研究全真剑法,才知道,为何乔峰聚贤庄一套太祖长拳,群雄束手。
最后才知道,全真剑法也好、太祖长拳也罢,最终还是要靠内功。内功是什么呢,计算机组成原理、编译原理、汇编、操作系统、网络、算法与数据结构。
原来大学的理论课程全都是最厉害的内功。
感觉我是来给大学说话的,厉害的内功都教给你们了,你们自己不好好学习,还怨大学教的不实用。最近我给单位的一批应届生面试,有本科生还有研究生。水平大部分不堪入目,尤其里面大部分还是211院校的毕业生。我回想自己大学毕业时候,跟他们也差不多。为什么都是最厉害的内功,但是出来之后一个能打的都没有呢?
其实问题并不在于这些课程好不好,也不在于学生有没有好好学。一个是技术积累和经验达不到,再好的内功也显现不出作用来。就好像只会基础内功,即使学的听扎实,一样被揍得很惨一样。当年郭靖也是全真教大师兄马钰教的内功,出来跟谁打都被揍得很惨。但是后来轮到杨过,郭靖还是觉得送去全真教学习比较好。这不是郭靖坑杨过。而是真的为杨过好。想让他系统的学习关键的基础知识。也是最终的根本。
郭靖和我的想法一样,大学的知识真的很重要,我的孩子肯定也是要上大学好好学习的。但是师傅也很重要,看杨过后来的遭遇也知道了。为什么洪七公、黄药师这些人厉害?天赋异禀。那为什么郭靖也厉害呢,郭靖的天赋咱们就不多说了,比大部分人不如。那他变厉害是啥原因?主角光环?勤奋?也有人说是因为集几家之长还有九阴真经。你说这个,我不跟你犟。不过既然神功秘笈大部分人都有,操作系统、算法这些书籍,想买多少本都有,为啥大部分人都没成为大神呢。
我觉得关键点还是在于,他的对手是谁,谁经常跟他练练招打打架。理论跟实践结合才是硬道理。
嘴炮:只有理论没有实践那就是嘴炮。现实中这种嘴炮还真的挺多,而且很多混的不错,占着一些专家啊领导的职位,谁让人家嘴皮子溜呢,这也是能力,咱羡慕不了也不屑于同流合污。
大厂出人才:为什么很多大厂出很多大神,只要你简历上写着是BAT出身,那找工作不要太简单。大厂喜欢招聘好学校的研究生和一些很优异的本科生。图什么呢,理论扎实、有一定的动手经验、综合素质过关。然后分配到工作中,让大神跟他们练手,让项目逻辑及一些性能要求来考验他们。不想理论联系实践都不行。材料好,做法恰当,那就是美食。
野生大神。江湖上也不乏很多野生大神,野生大神一般是由外而内的。实践过程中补充理论知识。当然这也是比较辛苦的,热爱和自律都得过关。
说了这么多,反思大学的教育,认真学习的理论知识一堆,不爱学习的连理论知识都学的不行。很多学习认真的同学,慢慢走大学老师路线,过几年成了副教授,教导本科生研究生,然后进入循环。所以说,什么时候大学愿意聘用阿里退役的大神去做大学教授,那本科生的能力就不会是现在这样了。
知识都是相关连的。如果造一个轮子,从无到有,那么可能有这么几个方面。首先得明白底层原理,一般轮子得底层原理就那么多,但是你得懂,这就是理论的组合和应用。其次要考虑性能和一些特殊的业务需要,这个得有网络和操作系统等的支持,和一些具体业务场景的经验。再次,要考虑版本迭代,考虑可扩展性等等,这就需要设计模式的一些经验和深刻理解。
首先声明,我没有读过tomcat源码,我拿tomcat举个例子,如果有不恰当的地方,请忽略。要你实现一个tomcat。首先你的知道最根本的原理是什么:你写的serverlet代码一般是接受一个请求,然后处理之后返回;那tomcat替你做了哪些事情呢;一下能想到的是类的加载和初始化,再一个就是处理用户的请求,封装数据,分发到具体的serverlet处理;那根本的原理就是类加载和socket。其次要考虑的:通信效率和性能的问题:NIO;类加载隔离性和热加载的问题:打破双亲委派。最后要考虑是设计的问题,比如容器的责任链模型,为什么分几层等等。
从一个中间件的设计,可以衍生到设计原则和设计模式,没做过具体的设计,没造过轮子,能讲明白为什么这么设计么,能深刻体会到使用设计模式的必要性么?照本宣科的说一说讲一讲,自己都理解的不深刻,那指望学生能学好么?当编码过程中,用到一些网络知识、数据结构知识、jvm知识,没有一个有经验人的串联和讲解,指望学生那种层次自己去串联么?他们连本门课程还学的云里雾里的呢,靠死记硬背才拿到点分数,他们能由上层到底层一路研究明白么?
扯得太远了,拉回主题。我没进过大厂,但也不难理解大厂环境。毕竟大部分人还是螺丝钉,并不是每个人都在做纯技术路线和架构演进工作。那有些略显高深的东西怎么实践呢,自己实践和总结,并输出成文档或者博客我觉得是很好的方式。
转回到技术能做多久的问题。我的理解是,你想做多久就能做多久,如果有哪天你说做不动了,那可能真的是做够了,或者不做技术也可以混的非常好了。至于转管理,我觉得还是看个人。有的人的价值不但在技术方面,还在很多方面。如果你是马云一样的人物,专注技术只能是对能力的束缚。对自己的认知,和对职业发展的认识才是转不转管理的决定因素。另外不同的岗位,视野不同。屁股决定脑袋,所以转管理也是面临很大的挑战,无论是综合素质还是技术,毕竟要考虑的事情不一样。
之前我跟一位宽厚长者说过,我喜欢写代码,也愿意一直写下去,像满头白发的老外程序员一样。那时可能只是觉得,这样很酷。
现在我觉得,我可能真是适合这样,既然这么觉得,那大学的课程,是时候重新开始慢慢研究透彻了。原本我觉得掌握技术要控制边界,时间精力有限,现在我觉得,慢就是快,不要轻易的就放弃深入,一旦深入到足够的层次,会发现,在很多地方,都会得到印证。毕竟jvm是太祖长拳,大学课程是内功。既然要一直在江湖上闯荡,有一颗一代宗师的心,那么希望我能大器晚成吧。
但求深化,莫问前程。