大家好,又到毕业季,又会有一大批优秀青年踏足计算机行业。作为入行多年的老鸟,期待用寥寥数语,对刚入行的大家有些帮助。
我自己写代码时间已经十多年了,从最简单的 excel vba 开始, 到 php, python, java, golang, c++,经手的编程语言算下来有十多种。作为本科数学专业的跨专业从业人员,这些年的学习过程中颇有一些心得,竞争越来越激烈的今天,把这些心得介绍给后来者,希望对大家在这个行业发展有绵薄之力。
1. T字形发展要求【总体要求】
树立正确的技术发展观是编程学习道路的首要任务。读研第一课,老板给我们提出了T字形发展路线的要求,这里分享给大家。
T字形路线,实际上就是要求大家,在后续的学习,乃至工作中,要有一专多强的意识。技术要有广度,又要有深度。广度可以保证自己在这个行业不乏味,通过不断接触新东西来保持行业的敏感度和学习的积极性,构建学习型人格,养成良好的学习习惯,在工作需要的时候,这些广度能支撑自己立马顶上;深度是要保证自己有一个基础的看家本领,原话叫:『任何人在一个行业如果3年内不能有自己的建议,建议转行』。话说回来,如果认真深耕一个行业3年,不可能成不了行业专家。
说这些是想告诫某些同学:不要纠结学什么,先学起来;不要纠结哪个好,先学起来;不要纠结学不会,先学起来。等真正工作才是学习的开始,要有学习型思维。广撒网,找到兴趣点,深耕下去。对新出的任何技术不抵触,主动学习,主动思考,不断扩展自己的边界。
总则与大家共勉,有了这个总则,我们再看后续的十大准则。
2. 保持好奇心【有内驱】
很多同学纠结我是 Java 后端,现在 Java 学习居然还要会 Docker,还要会 k8s,这合理吗?这不是OP(运维)该做的事情吗?为什么要我一个后端去学习呢?要用发展的眼光看待事物,尤其是做技术,更应该用发展的眼光看。
编程技术迭代更新非常快,Java开发,15年前最火的是SSH,10年前是SSM,5年前基本上都统一到SpringBoot,SpringCloud上了,万物皆可SpringBoot,方便快捷,开箱即用,为什么不用呢?
但是今天情况又变了,SpringCloud开源贡献No.1奈飞,早已放弃SpringCloud,现在是Docker,k8s的天下。你有充分的理由去看一看k8s是如何解决集群部署的问题。只有了解了才知道,这些新技术都是纸老虎,没有那么难。
想象一下,你把SSH时期积累的经验(脚本)当作宝,一直抓着不放,现在出去找工作还有用吗?那可不得『35光荣退休』。
守住自己的好奇心,努力拓展自己的技术边界,才能在技术这条路上走得不乏味,走得更轻松。
3. 不要怕犯错【脸皮要厚】
『知之为知之,不知为不知,是智也。』几千年前老祖宗就告诉我们了至理名言,但是很多同学仍然喜欢掩耳盗铃,自欺欺人,特别是我们腼腆,害羞,内向的技术同学。
技术学习,不能怕错。错其实没什么大不了,经验就是在犯错中积攒起来的。成就感也是在不断犯错中攒起来的。
在学习或者工作中,导师最喜欢的恰恰是那些真实反馈现状的学生。不知道,犯错误,要及时反馈,这样导师也能调整教学和工作计划。
4. 善于使用搜索引擎【不要蛮干】
有一类同学走向另一个极端,无论小问题大问题,一股脑找导师。其实导师也都有自己的工作,不可能什么小问题都给你解答。老师喜欢的是那种带着思考的学生,而不是『寄希望于别人』的学生。这里推荐大家学习《学会提问》这本书,问问题前自己要做好准备。
这些准备工作具体包括:
1)搜索引擎尝试解决。谷歌,bing,百度都是很有用的一个渠道。
2)GPT类产品尝试解决。现在GPT真的很强,对于纯课本上的知识,GPT比老师要回答得更好。
3)咨询身边人尝试解决。学伴是一个很好的解决问题的渠道,互相分享,两个人都进步。
总之,一定要带着思考,带着自己的逻辑来解决问题。这个过程要善用搜索引擎,善假于物。
5. 善用笔记【好记性不如烂笔头】
有一颗解决问题的心,有一个善于思考的脑,接下来还需要有一个勤于记录的手。
俗话说,好记性不如烂笔头。有一部分同学解决问题耗费了大量时间,耗费了大量精力。从搜索引擎尝试,到向导师求助,最终终于把问题解决了。但是,解决完问题就完事了,中间解决问题的过程是一点不记,下次遇到类似问题,还要重新解决,这种就非常可惜。一定要记录下来。不单要把当前解决的问题记录下来,还要把解决问题的过程记录下来,这些包括,
1)扩展知识点有哪些。
2)走的弯路有哪些。
3)最后才是当前问题的正确答案是什么。
工作的过程就是解决问题的过程,要有始有终,善于总结,总结的过程其实也是加深自己理解的过程。
6. 以终为始【面向问题】
学习的过程是枯燥的,背过单词的同学可能印象是最深刻的,永远逃不过 CS 定律,即从前往后背过不了C;从后往前背过不了S。技术学习过程其实非常类似。怎么能跨过枯燥期呢?
可以用以终为始的思路来解决这个问题,也可以叫做带着问题学习,注意这里的问题一定要和自己最近工作或者学习的问题契合起来,这样解决后会更有成就感。
比如,最近遇到一个高并发问题,我擅长Java,知道怎么用异步的方式来解决问题。刚好最近有看 Golang,可以顺带想想,这个问题能不能用 Go来解决呢?Go 里面是怎么处理并发问题的呢?解决问题为导向,对比分析学习。
在校生可能会问,如果我没有工作,确实没有遇到问题怎么办?那可以自己找目标,找属于你的『终』。比如你可以拿面试题来当靶子,尝试回答面试题里面的各种问题,用这种方式来倒逼自己学习。
7. 学视频,还是看教材?【分阶段,有条理】
有纲领,有方法,接下来就是具体落实了。很多同学会纠结我应该是看视频学习,还是看教材学习呢?
根据我自己的经验,这个要分阶段。快速入门一个技术的最好方式就是看视频,不需要付费视频,就找那种免费的,入门的视频即可,主要是把环境搭起来,能自己开始写测试代码;有了这个基础后,就要抓紧看教材了,根据教材学习是最快的学习方法。
牢记一点,视频的信息量是很少的,看视频永远是最慢的学习方式,一旦入门,就赶紧系统看教材。
8. 动手写起来【计算机本质是门实践学科】
上学那会儿,老师最经常提的一个学习原则叫2251原则。一周两篇论文,3年2w行代码,每学期5次学术汇报,毕业一篇大论文。这里面强调一个持之以恒。而对我印象最深的要属于 2w 行代码了,这个是代码关,代码关过不了,根本入不了这个行。
所以,一旦起步,就持之以恒的写吧,先把2w行代码关过了。谁都不是天才,刚开始写项目都发怵。写多了就有感觉了,讲究一个码感。
9. 重视单元测试【最小功能点原则,写代码本质就是搭积木】
不要一上来就贪大,贪多,写一个单元测试,学一个函数,足矣。我本身很推崇 TDD 开发模式,即测试驱动开发。你写的功能一定要是可以被测试的。自己开始写代码,也建议从单元测试写起。学习任意一门新编程语言,我也是建议从单元测试学起,先知道怎么写测试用例,后面就是搭积木了。编程的本质和搭积木是类似的,积硅步,成千里。
10. 多阅读代码【看得多,自然就知道怎么写了】
学习的过程一方面是自己写代码,努力突破代码关。另一方面,更重要的,是多阅读别人的代码。看得多,自然就知道怎么写代码了。作为初学者,重要看项目目录结构,看功能拆解,看整体架构,注意从整体上去理解项目作者的思路,不要一上来就陷入细节,而是在整体把握的前提下,有针对性的对某个功能点做单元测试,追细枝末叶。
11. 教会徒弟不一定饿死师父【乐于分享,解放自己,学更多的东西】
很多同学怕给别人讲明白了,自己就没留什么了。这里我讲最后一点。其实选择了技术这条路线,基本上就选择了终身学习这种生活方式。怕教会徒弟饿死师父的唯一原因是你的知识是有限的,你把自己限制住了。你有没有想过,现在所有的经验,可能在5年后就一文不值?那么怎么在新潮流来到的时候,迅速跟上,迅速掌握呢?
计算机基础扎实是一方面,如果有一个深耕领域,相信能快速得做技术迁移。另一个很重要的方面是把自己从当前舒适区解放出来。太多人沉湎于当前的工作模式,会从重复自己的工作方式中获取快感,比如有些同学会说,感觉更愿意解决线上BUG,不愿意负责新项目,感觉解决BUG反而更有成就感,这是病吗?我想是的。线上 BUG 固然也能加深自己的领域技能,但是那只是在重复自己,说白了那是停留在舒适区不愿意出来。你应该做的是尽快把掌握的东西交给后来的同学,把他们教会,自己才能有机会学习更多东西,才能在将来的某个关键时刻,在组织需要自己的时候,立马顶上。
总结:本篇讲述了编程学习的11条准则。从T字形发展纲领,到解决问题的方法论,到具体落实的手段一一做了阐述,希望对大家学习过程有所帮助。