【笔者感悟】笔者的学习感悟【八】
写在前面
今天笔者其实并不是因为某件事情而写这篇博客,今天更多的是对前面一系列经验之谈的总结。在这里也给大家打个预防针,笔者毕竟不是什么大牛,也要和大家一起成长,而且写这个也不是在写书,笔者每一次感悟相当于脑中的一次开会,所以有些问题一直会反复拿出来强调,整体体系上会有些杂碎,因此希望大家不要过于依赖笔者的文章。
很多高中成绩很好的同学,到了学计算机的时候可能经过很大的努力只能说最后的成绩只能达到过得去,但是却怎么都达不到顶尖。但是如果只是高中和大学的差距或许同学们不会这么惊讶,但有趣的是,学习计算机学科有时候真的和备战高考没啥特别大的区别,尤其是在刷算法题的时候。
但是同学们知道,如果只是过得去,那么其实不能保证你未来面对中年危机的时候一定能够涉险过关,因为熟练玩增删改查的其实大部分都过得去,那么问题在哪呢,如果说,现在回到一开始,我一定会对大家说一句,欢迎来到一个不讲规则的领域。
高中的刷题很多大部分就一个解法,封顶两三种【没参加过高考或者常年泡在竞赛里的同学请你谅解一下,很多同学还是普通人】,而且哪个是最优解其实也比不出来,因为不管你怎么解答案是不会变的,高中的题目只要你做出来了就是满分。
可是计算机不同,往往一个问题既可以用暴力算法解决,也可以用动态规划解决,是有所谓的最优解的,有的时候没有找到最优解严格意义上说不算完成,因为只要问题规模再复杂点就会出问题。
基础起步
如果同学看到这篇文章的时候对计算机处在一个连C语言,Java是什么东西都不知道的情况下,还是要先去学习,但是如果盲目的学难免容易晕头转向,那么笔者的建议是找一个最简单的项目来学,看看有哪些技术栈,例如图书管理系统,技术就包括Java,Spring,算法,数据结构,SpringMVC,Mybatis,Mysql等,把这些技术栈的基础部分学好就可以了,毕竟刚开始起步,只要能够做出一个最简单的项目,项目能跑,就算是成功。这个阶段是打底子用的,同学们不用学的太深入,这些项目教程网上都已经铺天盖地了,笔者在此就不再过多阐述了。
结论:如果完全零基础自学,可以先找一个最简单的项目,看看用了哪些技术栈,在基础阶段,把这些技术栈的基础部分学会,力求一个项目跑起来就行
养兵千日
笔者之前就提到了战术储备问题,高中也好,大学也罢,所谓的考试其实都是固定好大纲的,你大可可以把所有的知识点都学完了,再去考试,可是在计算机领域这是不可能的,如果你要问我,Java的所有知识点在哪,那最恰当的答案一定是:Java官方文档,但是这个官方文档,就够你学好多年了,而且人家还在不断地更新,换句话说你一辈子都不可能学完Java。而且笔者之前也说过,做一个最简单的图书管理系统要学的技术就要好几种。
很多同学肯定会奇怪,为什么我培训班填鸭教育出来会找不到工作,原因其实就在这,因为这部分的工作,培训班根本教不了你,需要你自己去日积月累。
肯定有很多同学抱怨,我下班这么晚,天天996,有的时候还要通宵加班,哪有时间去学习。
那我们就要回想一下,通宵加班的原因的是什么,万事开头难,一开始加班多,或者偶尔项目工期紧张的加班都是正常的现象。但是如果没有特别明显的压榨,还是天天这样,同学们有没有想过这其实并不是一个应该出现的现象,毕竟编程不是天书,不可能需要拿命去啃。
很多同学下班以后其实并不是没有学习,包括笔者在内,下班的时候很喜欢研究技术,这当然没什么问题。但是只是学新技术的话大部分也只是停留在了解,并不能说能够熟练运用,作为程序员敲代码会写出无数个错误和一个正确,在能够保证那个正确的浮出水面之前,那无数个错误都是需要经历的。
同学们回想一下,自己到底是什么情况下会通宵加班,最经典的口头禅是不是一杯茶,一根烟,一个bug改一天,当bug终于能运行的时候,我们就会拼命地点关闭csdn网页。出现这种现象,大概率就是我们这个问题从来没有遇到过,如果只是一个简单的数组下标越界异常(ArrayIndexOutofBoundsException) ,同学们可能几秒钟就能把这个bug给改了,但是如果换一个比较陌生的错误,同学们可能就要单步调试,stackoverflow,csdn什么手段都用了无数遍,最后花了几个小时就改了一句代码。
而且往往很多错误,只是一个表面现象,深入地根源却并不在此,有的时候如果不了解的话很容易浪费很多时间。
事实上归根到底是我们对这个问题基本不了解的后果,好比上战场的时候,我们把养兵和用兵的任务挤压到一起的后果,那当然会占用大量的时间。笔者之前就提到了,学习编程创意和经验是很重要的,纯粹地新技术的学习并不能改善你对已有知识的熟练度。创意代表着,你要多去发挥脑洞,尝试着试一些看起来比较难啃的问题,而经验就在于你经历完这些问题的总结,也就是笔者一开始提到的战术储备。郭德纲老师曾经说过一句话:一个人的成熟,往往与年龄无关,跟经历有关。三年五年的资历并不能说明这位同学很厉害,三年如果他做的都是一样的事情,
结论:现在加班一定是为了以后不加班,平常就要多去储备,多去制造一些平时没有遇到的难题,处理问题的时候才会不慌不忙
战略规划
结论:战略规划和战术储备是完全不一样的概念,同样技术栈类型的项目,因为需求不同设计也会有很大不同,这也是需要多加练习的
深入学习
笔者之前提到在学习的时候要理论和实战双管齐下,但是理论和实战双管齐下
结论:无论是新技术的学习还是旧技术的实战训练,都建议用轮数学习法,在每一轮都做到比上一次更接近完美
用兵一时
结论:真正的能够赚钱的实战项目,需求的主动权并不在我们手上,这个时候要做的是从自己已有的战略储备和战术储备去学着解决问题,而你的储备深度某种程度上决定了你的薪资。