写在前面

  今天笔者其实并不是因为某件事情而写这篇博客,今天更多的是对前面一系列经验之谈的总结。在这里也给大家打个预防针,笔者毕竟不是什么大牛,也要和大家一起成长,而且写这个也不是在写书,笔者每一次感悟相当于脑中的一次开会,所以有些问题一直会反复拿出来强调,整体体系上会有些杂碎,因此希望大家不要过于依赖笔者的文章。

  很多高中成绩很好的同学,到了学计算机的时候可能经过很大的努力只能说最后的成绩只能达到过得去,但是却怎么都达不到顶尖。但是如果只是高中和大学的差距或许同学们不会这么惊讶,但有趣的是,学习计算机学科有时候真的和备战高考没啥特别大的区别,尤其是在刷算法题的时候。

  但是同学们知道,如果只是过得去,那么其实不能保证你未来面对中年危机的时候一定能够涉险过关,因为熟练玩增删改查的其实大部分都过得去,那么问题在哪呢,如果说,现在回到一开始,我一定会对大家说一句,欢迎来到一个不讲规则的领域。

  高中的刷题很多大部分就一个解法,封顶两三种【没参加过高考或者常年泡在竞赛里的同学请你谅解一下,很多同学还是普通人】,而且哪个是最优解其实也比不出来,因为不管你怎么解答案是不会变的,高中的题目只要你做出来了就是满分。

  可是计算机不同,往往一个问题既可以用暴力算法解决,也可以用动态规划解决,是有所谓的最优解的,有的时候没有找到最优解严格意义上说不算完成,因为只要问题规模再复杂点就会出问题。

基础起步

  如果同学看到这篇文章的时候对计算机处在一个连C语言,Java是什么东西都不知道的情况下,还是要先去学习,但是如果盲目的学难免容易晕头转向,那么笔者的建议是找一个最简单的项目来学,看看有哪些技术栈,例如图书管理系统,技术就包括Java,Spring,算法,数据结构,SpringMVC,Mybatis,Mysql等,把这些技术栈的基础部分学好就可以了,毕竟刚开始起步,只要能够做出一个最简单的项目,项目能跑,就算是成功。这个阶段是打底子用的,同学们不用学的太深入,这些项目教程网上都已经铺天盖地了,笔者在此就不再过多阐述了。

  结论:如果完全零基础自学,可以先找一个最简单的项目,看看用了哪些技术栈,在基础阶段,把这些技术栈的基础部分学会,力求一个项目跑起来就行

养兵千日

  那么学完的以后我们就要深入学习,我相信很多同学这个共识都是有的,但是很多同学每天都在学习似乎效果并不好,而且肯定有更多同学抱怨,我下班这么晚,天天996,有的时候还要通宵加班,哪有时间去学习。

  所以我们到这个阶段就要首先解决一个问题,如何提高实战,也就意味着如何能够不通宵加班。

  那我们就要回想一下,通宵加班的原因的是什么,万事开头难,一开始加班多,或者偶尔项目工期紧张的加班都是正常的现象。但是如果没有特别明显的压榨,还是天天这样,同学们有没有想过这其实并不是一个应该出现的现象,毕竟编程不是天书,不可能需要拿命去啃。

  很多同学下班以后其实并不是没有学习,包括笔者在内,下班的时候很喜欢研究技术,这当然没什么问题。但是只是学新技术的话大部分也只是停留在了解,并不能说能够熟练运用,作为程序员敲代码会写出无数个错误和一个正确,在能够保证那个正确的浮出水面之前,那无数个错误都是需要经历的。

  同学们回想一下,自己到底是什么情况下会通宵加班,最经典的口头禅是不是一杯茶,一根烟,一个bug改一天,当bug终于能运行的时候,我们就会拼命地点关闭csdn网页。出现这种现象,大概率就是我们这个问题从来没有遇到过,如果只是一个简单的数组下标越界异常(ArrayIndexOutofBoundsException) ,同学们可能几秒钟就能把这个bug给改了,但是如果换一个比较陌生的错误,同学们可能就要单步调试,stackoverflow,csdn什么手段都用了无数遍,最后花了几个小时就改了一句代码。

  而且往往很多错误,只是一个表面现象,深入地根源却并不在此,有的时候如果不了解的话很容易浪费很多时间。事实上归根到底是我们对这个问题基本不了解的后果,好比上战场的时候,我们把养兵和用兵的任务挤压到一起的后果,那当然会占用大量的时间。

  郭德纲老师曾经说过一句话:一个人的成熟,往往与年龄无关,跟经历有关。三年五年的资历并不能说明这位同学很厉害,三年如果他做的都是一样的事情,那他的战术储备其实并不比一年翻山越岭的同学多。所以讲到这里,我想同学们应该明白了吧,我们加班归根到底的原因,就是我们的经历太少了。这里还要再纠正同学们一个误区,同学认为很多事情只有大厂才能学到东西,这个说法肯定是有道理的,但是大厂也分香饽饽和烂摊子,如果分到一个比较差劲的部门,接手一个技术难度一般的项目,那这个大厂似乎也没什么意义。但是同学们,有没有发现,这种行为其实非常被动,我们寄希望于别人给我们平台和机会去发挥,而且往往这种发挥不好,还会被领导和同事指责。

  笔者从来都是一个喜欢把主动权握在自己手上的人,这个世界上靠谁都不如靠自己,很多经验,我们要自己学会去制造,那怎么制造,笔者之前就提到了,学习编程创意和经验是很重要的,纯粹地新技术的学习并不能改善你对已有知识的熟练度。创意代表着,你要多去发挥脑洞,尝试着试一些看起来比较难啃的问题,而经验就在于你经历完这些问题的总结,也就是笔者一开始提到的战术储备。

  很多同学肯定会奇怪,为什么我培训班填鸭教育出来会找不到工作,原因其实就在这,因为这部分的工作,培训班根本教不了你,需要你自己去日积月累。

  结论:现在加班一定是为了以后不加班,平常就要主动多去储备,多去制造一些平时没有遇到的难题,处理问题的时候才会不慌不忙

深入学习

  刚才的问题解决了实战上的问题,现在我们就要解决理论学习的问题,那这个无非就是读书呗。

  但是,高中也好,大学也罢,所谓的考试其实都是固定好大纲的,你大可可以把所有的知识点都学完了,再去刷题,可是在计算机领域这是不可能的,如果你要问我,Java的所有知识点在哪,那最恰当的答案一定是:Java官方文档,但是这个官方文档,就够你学好多年了,而且人家还在不断地更新,换句话说你一辈子都不可能学完Java。而且笔者之前也说过,做一个最简单的图书管理系统要学的技术就要好几种。

  那么笔者的建议是什么呢,针对某个学科列出它的学习大纲,当然其实并不用自己去整理,毕竟同学们不用去写书,网上这样的资料其实也不少,针对查到的学习大纲,单独将每个章节的知识点拿出来反复啃,而且不需要学完整个学科再去学其他的,可以穿插着学,今天学习算法的贪心算法,明天学习Mysql的sql语言,然后过一段时间重新学习算法的贪心算法和Mysql的sql语言,如此循环往复,每一次学其实都会有新的知识点加入以及对已有的知识点的巩固,而且在学习到一定程度的时候,同学们可以不再依赖网上别人给的大纲,可以总结出自己的知识体系,甚至有些兄弟学科,例如算法和数据结构之间还能互相产生联系。包括像计算机网络和操作系统,有的时候也能看到算法和数据结构的影子。

  计算机学科从来不是互相割裂的,而是互相穿插的,笔者在之前就提到了学习不要拼图化思维,而是积木化思维,不要试着去还原所有的知识点,而是要组合出自己的思维图形,道理就在这

  结论:对技术的学习,建议使用滚轮学习法,在每一轮都做到比上一次更接近完美

项目设计

  当然光有技术也是不行的,有的时候往往整个项目的结构决定了我们用一些什么技术,如果说技术是解决局部问题的话,项目设计就是解决全局问题。这里其实很好理解,设计一个餐馆点餐系统和设计一个航空公司系统肯定用的完全不是一个设计。

  为什么笔者把项目设计放在这个阶段,在笔者有限的工作经验来看,参加工作开始几年,我们一般着手于项目开发的局部功能,一般都是看着别人的代码,来写自己的代码。架构设计是很多同学期望能够走上的一条道路。当然笔者并没有实际经历过,这部分更多的是靠已有的信息推测。我们在解决了无数个局部问题之后,就要学着跳出局部看整体,从而感受整个项目的结构设计。

  最后在一次次感受和实践中,积累自己的项目设计经验,至少在目前,和上述的技术实战的方法一样,靠创意和经验。

  结论:同样技术栈类型的项目,因为需求不同设计也会有很大不同,这也是需要多加练习的,积累更多的设计储备

用兵一时

  笔者之前听到过这样一个说法,考场上的成败其实结果并不在考场内产生,而是在考场外,很多事情在备考的时候就已经注定了,考场上只是把这个结果宣告一下。虽然在工作中没有那么夸张,毕竟可以查资料。

  但是工作大部分时间不会给我们太多的时间,一般情况下,一个需求两天时间有的甚至只给一天甚至几小时就要完成。那笔者就拿考场来举例子,同学们在考场上是不是除了考试作弊以外,我们拿到一道题目,要想得分,方法都是从自己已经储备的知识点和技巧中去获取的。

  那么在工作中也是一样,甲方爸爸提出来的需求也是根据他那边的业务习惯来的,主动权不在我们手上,对于陌生的业务,给我们的时间既要分析需求,又要抓紧时间敲代码出来,大部分情况下就只够做到把项目能够成功运行出来的地步而已。

  笔者在之前的一篇文章中看过这样一个问题,有没有观察过,同样的业务,有的人写出来的实现就非常的丰满和稳定,而有的人写出来的接口可能直接调用一下就抛出了错误。事实上,同学们看完这篇文章相信同学们应该明白了吧。写出来的代码好不好,基本上也就取决于你平时有多少积累,也就是笔者前面提到的战术储备和设计储备。

  那么走到这里,后续的事情也就简单了,我们参加工作最后都是为了能够挣钱,而写出来的代码好,以及项目架构设计优秀,项目才不会无限期拖延,用户满意了后续才会有更多的合作,同学们才能参与更多的项目,从而把雪球越滚越大,能够挣到更多的钱。最后让大家生活的更好。

  结论:真正的能够赚钱的实战项目,需求的主动权并不在我们手上,这个时候要做的是从自己已有的战略储备和战术储备去学着解决问题,而你的储备深度某种程度上决定了你的薪资。

08-15 21:37