程序员更有效的学习方法总结
IT技术的发展日新月异, 身处洪流中的我们, 掌握高效的学习方法, 养成良好的学习习惯, 对自己水平的提升能起到事半功倍的作用。
下面是我总结出来的一些学习经验
1. 制定远近期学习计划
有计划地学习可以使你远离浮躁, 根据自己的情况, 制定一段时间内的学习计划,如1个月, 3个月, 半年, 1年, 3年内看什么书,掌握哪门语言, 掌握到什么程度。有的人(其实就是我)有时候学Java, 有时候玩硬件, 有时候做图像识别,看到一切新奇的技术都忍不住想学, 但是新鲜感一过就坚持不下去了。这样结果只是竹篮打水一场空, 看似什么都学过了,但却只掌握了皮毛, 没有沉淀下来多少东西。关于如何远离浮躁,推荐这篇文章
2. 全面掌握知识体系
每学习一门新技术前,先想想这门技术在自己的知识体系中处于什么位置。什么是”知识体系”呢? 我的理解就是技能树,
用思维导图工具画出自己的技能树, 每学一门新技术就相当这颗树长出新叶子,最后使之枝繁叶茂。
打个比方, 学习 Groovy
之前我会想: Groovy是对Java的增强,使Java也有了一定的动态特性, Groovy在我的技能树中便是Java的子节点, 如果我掌握了Groovy, 也许其它动态脚本如 Python
就没那么迫切学习的必要了(只是举个例子,其实我喜欢Python远甚于Groovy)。再举个例子,学习tcpdump
时我会把它和nmap
放在同一个父节点 - “Linux网络”之下, 学习时我会举一反三, 哪些功能在
这两门技术中是相通的, 学习tcpdump时再结合例子顺便复习nmap .
知识融入了体系,才算掌握与拥有了它。正如一滴水融入了大海才不会枯竭。
3. 学习过程的技巧
学习的过程也就是把知识从媒介吸收到大脑的过程。可以说对一门技术的熟悉程度如何,就看具体的学习过程,学习过程要注意什么呢?
3.1 学习环境
制造适合自己的学习环境,以我来讲晚上洗澡后学习效率最高, 排除杂念, 关闭手机甚至断开网络,都是可以考虑的。
3.2 别贪多求全
基本上,我们不可能把一门知识学得面面俱到,这要消耗大量的精力与时间不说,并且未必对个人发展有益 。以我个人的经验,把掌握程度分成4个等级
- 用过
- 熟悉
- 精通
- 专家
根据这门技术对你的轻重缓急选择合适的程度, 有的知识例如linux工具的使用用过
或熟悉
就好, 如果是影响职业生涯的知识例如java多线程那就要阅读源码尽可能深入掌握达到精通
。总之, 在学习的深度上知所进退,有的放矢,不失为明智之举。
3.3 循序渐进
根据我学习Groovy的经历,我认为大部分技术的学习都可以参照这个流程:
安装环境 -> helloworld -> 解决各种报错 -> 系统地看教程 -> 开发实用小工具 -> 阅读部分源码 -> 找出这门技术不完善之处 -> 改进它或制造更好用的轮子
当然这不是绝对的,有的技术如机器学习
需要有扎实的数学基础, 基础不好怎么办? 没有捷径,要么踏踏实实一步一步来先从基础学起,要么就干脆放弃它。
3.4 善用资源
Google, 百度,官网文档都是你学习的好伴侣,特别是官网,一可以锻炼英语阅读能力,二如果要达到”精通”的掌握程度,官网文档是必不可缺的。
4. 记录并交流学习心得
记录笔记,写博客,发布开源代码,一方面可整理思维加深理解,方面日后复习, 另一方面通过与别人交流,无形中会对自己有督促的作用。可以想象,为了得到别人的肯定,为了不在众人面前出丑, 你会把博客和代码写得再好一点,学得再精一点。
5. 规范的编码与严谨的思维
- 用流程图和时序图描述业务流程
- 用日志工具, 自动构建工具, maven, git 规范化工作流程
- 写一段功能前, 应在大脑中形成缜密的思维, 而不是用println和debug大法
- 每1-2个月学习强迫自己学习一种新的算法, 建议用数学工具如
gnuplot
辅助加深理解 - 学一种新技术或工具时反向思考: 它为什么这样设计, 这种设计的优点和弊端在哪? 换作我应该怎样设计?
以上是我6年的编程工作中总结出来的一些心得,我也还在不断学习中。当然无论哪种学习方法都需要强大的 执行力 , 否则也只是镜中之花而已。