已经有半个月没有写博客了,想到就难受。最近也是做毕设的时段,忙于coding,也没有特别好总结的东西。我想,就来总结一下我贯彻的技术之道吧。就像“忍道”一样的东西。
先聊聊毕设。我对毕设的定位是,充分使用自己已学的知识,体验自己一直感兴趣的技术,想使用的开源产品,做一个在功能、交互、理论上更偏向于实际的完整的产品。简单说就是竭尽自己的积累和所学,大胆尝试想尝试的东西,做的产品不应该是个玩具。事实上,很多人的毕设都是导师分配的一个“项目”里的一部分而已。在选毕设导师的时候,90%都是选择导师给出的毕设选题。而这些选题来自哪里?所谓的项目里的所谓的一个模块,很可能是被很多界师兄师姐做了好多次的东西。有多少同学可以去做自己想做的东西?自己真正感兴趣的内容?就是给实验室做个苦力。这部分人里也分两类,第一类,对自己的方向和未来没什么打算,能混毕业是巴不得的事。这一类直接忽略不谈。第二类,根据自己喜爱的技术去选的导师,去选的课题,但是往往课题名字都是起的很漂亮,老师给你绘制的蓝图都很吸引人,实质工作内容大部分不会是你想象的那么美好。我的建议是为什么不自己立题目?现在这个时代的计算机专业的学生对产品,技术的把握难道还不如那些十几年从事教职工作,侧重写文档拉项目,最喜欢上C程序设计,软件工程来混教学指标的老师?给自己的毕设取题,定研究方向,从事自己喜欢的技术,用感兴趣的开源解决方案,给自己的本科生涯画个句号是多么幸福的一件事。我每天为自己的毕设乐此不彼,做自己喜欢做的事最快乐。
那我就接着聊聊学历吧。首先讲讲自己的履历。大三上的十月份,我进入实验室,跟着实验室的老师,师兄做项目。当时我什么也不懂。现在想来,我才刚对计算机入门,我对这行的见解实在是很小白,都是过去不懂事的自己不懂什么叫学习,不好好学习。刚进实验室,跟的项目是中间件服务框架,和分布式又有点关系。不说项目怎么样,我当时买了我第一本自主选择的技术书籍,林昊的《OSGi原理与最佳实践》。现在买书已经成为了习惯。第一个任务是调研OSGi,SOA,REST三个东西。现在想起来,基础都没有打好的我,去看分布式,看架构的东西是多么无理取闹。事实是,我坚持下去了。大三的第一个学期,除了应付学业外,对Hadoop,NoSQL的一系列东西产生了浓厚的兴趣,我有了自主学习的动力。我觉得分布式显得高端,hadoop显得洋气,为什么?因为业界大公司都在搞。就这个理由,他在我心里显得高端。好,从此之后买书,看书,学习起来。我给自己定了目标,我要做一个架构师。渐渐的,寝室成了我睡觉的地方,其余时间都泡在实验室,强迫自己学习,很少与人接触,没有什么别的活动,把自己封闭了起来。差不多我的大三和大四,只要我在校,我都在实验室里渡过。结果就是,我一点也不想读研究生。我看够了实验室的会议,看够了会议验收,也参与够了项目开发,我不想再为学校的实验室打工了,我为什么不去公司给别人打工,然后早点可以自己为自己打工?之前也发过从学校到公司,玩具到产品,我觉得至少计算机这门,你呆在学校根本毫无用处。你要搞研究,你出国搞去,国内的实验室都工程化了,而且工程化得很土,很烂,不如二流外包公司做得好。呆在学校无非三个原因:对自己还没有明确规划;贪图安逸的环境;学历体面,家长乐呵呵。教育这块用不着我来黑。我觉得实验室的经历对我来说一个过渡。的确让我成长了,让我具备了一些技能。说到底,自学才是最重要的。当我脱离了那个阶段之后,我不会再想去渡过我的研究生生涯了,我觉得这是在浪费我的青春,我看不到任何一点益处,说实在的。
说说我的技术之道。我自己定位自己刚对计算机入门,对技术的看法也转变了不少,也被业界人的观念所影响,被点拨过。首先,技术、语言没有高低贵贱之分。我一定要强调这点,不要为自己搞的技术而自以为高人一等,这绝对是很幼稚傻逼的想法。最被人误解的例子,就是网站的前端和后端。技术只有好入门,难入门的区别,能解决问题的技术就是好技术,能解决问题的方案就是好方案。如果你对某门技术没有几年的积淀,不要看着好入门就觉得从事这个职位的人就弱,水都是很深的。其次,体现自己的技术实力和积淀不是靠嘴来扯的。做为工程师,最重要的素质之一就是踏实。喜欢扯淡是浮夸,装逼的表现。如果我有自己的团队或者公司,是不可能把这样的人找到自己的团队里去的。真正有资格在别人面前滔滔不绝的人,必须是真正有货的人。关于技术的学习,我觉得应该多涉猎。刚起步的时候,我们的确是在自己的研究方向上学习基础知识,着眼于细小的东西,精益求精。过了这个阶段之后,你应该发现技术细节是次要的,在架构层面的把握更加重要,不然永远是个底层的码农。如果我有自己的团队或者公司,我要招个苦力,二三流学校的都行,所以你的优势不是技术细节,是更高层面上的东西。当然你如果自己都没有经历过第一个阶段,就去把握产品实现,把握架构,那我绝对是不服的。比如说大部分做产品经理的人,比如说大部分做测试的人,这点我就很同意“开发人员可以做测试”这点,要分那么清楚只会减低效率,降低质量。应届毕业生里面,有多少是计算机专业的,不会码代码,去应聘产品,去应聘测试的?我针对的是该被针对的人,如果你不是,你不要看着觉得不舒服。这些人在我眼里,和高中时候物理化学的不好去学文科的男同学们一样。我没有任何歧视的意思,我就这么个意思。继续说技术之道。早点投入到真实产业界是有好处的,无论是团队角度,开发工具角度,产品角度都能让我们脱离自己的理想国,具备正确的认知,然后给自己制定更好的发展规划。如果学校里的老师不能教授你更多的东西,难道你还没有到出师的时候吗?出去看看外面的世界吧。在经历了很多面试之后,我才真正体会到面试所要面的东西。基础和基本算法固然需要,但你的眼界,你的开源精神,你关注的技术点,你的人品重要的多。再提一点,我一直是倾向于从工程出发到研究的。我崇尚在做产品的过程中,遇到问题再去发掘研究领域的解决方案,研究应该是需求驱动的,这个需求驱动的过程是我们应该自己去体验的。读读人家写的论文,写写综述,仿照人家实现一下实验思路,有什么长进?在需求到了的时候,再去找论文看,启迪思路了之后再实验并投入到工程中去,说不定比你埋头看论文,对着天花板想怎么发论文要快捷,要实在得多。
强调一下我最贯彻的几点:技术无高低贵贱之分,任何东西你想学,都很好学,往往官网的文档比现在很多灌水的书要好得多。起步时着眼技术细节,之后应该关注架构。接触真正的产品和需求,让需求驱动技术,是正确的模式。开源时代的我们应该多涉猎技术,尝试自己喜欢的东西。不要对自己没有规划的定位,不要被老一辈的,陈旧的思想和教学影响你的个人发展。沉默寡言的人才可能是技术大牛。多读书,各种各样的书。
技术的学习之路就像是在一张白纸上不断打点,当在这张纸上打成一棵树,一条路,一幅画的时候,你就学有所成了。