先来看看这些程序员的行为:
程序员小 A 所在的项目组,需求提的不是很平稳,经常是这两个月来了一堆需求 996,后两个月一个需求都没有整天无所事事,上班的时候看看网页摸摸鱼;
程序员小 B 接到一个需求开发一个功能模块,上网一搜,发现了现成的代码,拷贝运行,结果正确,虽然看不太懂代码是什么意思,不过好用就行了;
程序员小 C 是一名 Java 程序员,决定要花时间继续提高一下自己,于是买了几本技术方面的书,从前端《CSS》《Html5》,到语言类《Python》《Go 语言》,再到数据库《MySQL》《Oracle》,这些书买回来翻了几天就开始吃灰;
程序员小 D 刚工作不久,遇到开发问题先问同事,再问项目经理,如果身边暂时没有可以问的人,就在 QQ 群、微信群、论坛上发布问题,询问网友;
程序员小 E 在这家单位已经工作了三年,今年提涨工资被领导拒绝了,理由是工作内容没变,小 E 本身也没有什么提高,于是小 E 决定跳槽,一段时间后跳槽无果,于是他一边数落着公司不给他涨工资,一边继续做着相同的工作。
看完了这些程序员的行为,我们再来反思一下,自己是否也有过类似的经历呢?
有些同学看到这里,可能要站出来怼我了:大叔马上就要喂鸡汤了,要说什么“下班之后八小时你的行为,决定了你未来三五年后过什么样的生活”,上班这么累,我下班打几把游戏怎么了?
如果你赞成“工作之余不需要再学习”的看法,那么也请你不要在晋升、涨薪、跳槽无望之后,抱怨公司和社会对你不公平;如果你希望自己能够通过合法的方式,获得更高的收入,甚至早日达到财务自由,那么还是要正确的方法提高自己。
如何保持学习的动力
1. 被工作倒逼
这是很常见的一种情况,工作中有搞不定的事情,通过学习来掌握;这种方式倒逼自己学习,压力最大但是效果最好,所以如果领导分配给你一些看起来不可能完成的任务,不要当做“看你不顺眼”,而是“最好的挑战”。
2. 追求更高收入
谈钱难免会让人觉得俗气,但是我就是这么俗气的一个人,也相信大多数人都和我一样“俗气”;但是这种“俗气”我觉得并没有什么错,提高自己的挣钱能力,让自己和家人能生活的更好,想一想坚持学习一年,明年说不定涨薪 30%,是不是就有动力了呢!
3. “找一双眼睛盯着你”
长时间坚持学习确实很难坚持,比如坚持一年;不像学生时代,还有老师和家长的督促,工作之后的自我学习和提高,完全是一种自我约束;你可以找一双眼睛来盯着你、督促你:
如果你有一个好基友或 N 个好基友,可以考虑“结对编程”、“结团学习”,彼此督促;
如果你是孤家寡人,你可以写博客、开 github,当一周没有新代码提交的时候,你就想一想“不坚持的话,我就不能绿到底了”。
序员需要学什么?
十多年前,那时候的我们苦于资料太少,不知道学什么;
十多年后,这时候的我们苦于资料太多,不知道学什么;
1. 基础是程序员的内功
提到程序员的基础,不外乎是操作系统、编译原理、数据结构、算法这些课程,很多程序员会认为这些课程平时工作也用不上,还需要学习么?
负责任地说,这些基础课程学习的好坏,是程序员能力差异的一个重要分水岭;如果你觉得单纯地看书比较枯燥,可以试试在 LeetCode 上刷刷题。
2. 应用提升类
还记得上文中的程序员小 C 么?本身是一个 Java 程序员,但是又想学前端,又要学其他语言,其实这个正是刚工作时候的我本人;那时候我连 PS、delphi、MFC 的书都有,基本上也都是新鲜了两天就再也没翻开过。
这里建议大家还是从本职工作出发,先学习本领域的应用提高类技术、框架;比如我是 Java 程序员,除了学习 Java 本身的语言特性和新版本特性之外,我还可以学习现在比较流行的 Spring、Spring boot,了解 DevOps(Docker、Jenkins),除了学好关系型数据库之外,还可以看看 Redis、ES 这些非关系型数据库,接触一下分布式架构、微服务,这里还需要学习消息队列、负载均衡、分库分表等等等等了...如果你心有余力,可以再学习一门脚本语言。
如果你致力于成为一个全栈工程师,还需要了解前端的知识;这里我就不能给你们什么建议了,我个人的精力有限,已经好久没有接触过前端的内容了。
总之,一定把有限的精力投入到值得投入的地方。
3. 技术不能脱离业务场景
程序开发的本质是解决业务问题,所以程序员一定要养成业务思维的面试,在敲代码之前,一定要对项目本身的业务逻辑有一个全面的了解:系统是做什么用的?使用者是谁?上下游系统都有哪些?自己的项目在整个业务流程中的位置和作用是什么?等等等等...
我经常戏称:程序优化最好的一个手段是什么?就是不要做这个需求。这里并不是说把活儿推掉,而是指程序员也要从业务角度出发,先判断需求的合理性,有的时候真正理解系统和业务的人,可能就是开发人员自己。
4. 掌握第一手资料离不开英语
建议大家在学习的时候,最好是查看最原始的资料,而不是【只看】被人消化理解过的“二手资料”;比如你要学习Spring Boot的话,最好的资料就是官网的文档,其次才是买一本中文版Spring Boot的书;
但是当你不断地找到“第一手资料”的时候,会发现大部分内容都是英文的,所以“查阅英文文档”是程序员的必修课。
当然,如果有资料能把枯燥的知识用生动的例子讲解出来,尽管它不是“原始资料”,但是对于我们的帮助也是很大的;我刚工作的时候看过一本书《大话设计模式》,让当时的我受益匪浅。
为什么觉得技术提高慢
1. 碎片化时间 VS 完整时间
建议大家在学习的时候,最好是查看最原始的资料,而不是【只看】被人消化理解过的“二手资料”;比如你要学习Spring Boot的话,最好的资料就是官网的文档,其次才是买一本中文版Spring Boot的书;
2. 学一遍 VS 反复学
对于基础的知识,需要反复的学习;相同的知识,尤其是基础类的知识,当你处在不同的能力阶段反复学习,每次都会有不同的感悟;
3. 看+听 VS 记+练
可以把学习的知识通过笔记、博客等方式记录下来;程序员犯错误并不可怕,可怕的是反复犯相同的错误。
4. 被动学习 VS 主动学习
把学到的东西在项目中用起来,会让你的记忆更加牢固。对于某些知识,如果能“讲出来”,那么就需要把这些知识了解的非常透彻;这也是我现在做技术分享的主要原因之一。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取学习资料。