当程序员处瓶颈期应如何提高自己? 有很多关于 "学习编程" 的资源, 能够让人从 0 到新手(虽然这些资源中大多数的质量是值得商榷的), 但是怎么样才能将中级水平提高到专家级? 如何构建允许我在高级别编写代码的心理模型?
在这篇文章中, 我将讨论关于普遍性能改进的一些理论, 然后讨论一些程序员用于实践的方法(以及我对这些实践的想法), 然后是我对改进成为中级或更优秀程序员的最佳方法所作出的结论.
关于普遍性能改进的快速指南
我最近一直在阅读大量关于性能改进的内容, 大多数文献使用 K. Anders EriCSSon 的研究作为起点. 他是性能研究的杰出面代表, 几乎在所有涉及这个主题的书中都被引用. 他今年发表的书《Peak: Secrets from the New Science of Expertise》, 浓缩其 30 多年的研究, 易于理解, 这也是我推荐给大多数新手的单个最佳资源.
简要总结上下文:
● 改进任务的执行来自于开发更好的心理模式, 更好的心理模式通过有意或有目的的实践.
● 为了能够实现改进, 必须能够定义什么构成改进性能并且分解实现步骤.
● 实践和性能是不同的, 最好的实践方法几乎从不是性能. 例如: 一个想要提高击中的棒球运动员应该花费 30 分钟在练习场中练习 200 个投球(实践), 而不是用 2 个小时去比赛中观看 15 个投球(性能).
提高方法
我发现人们建议的大多数关于编程的改进方法就是基于性能的. 阅读代码, 阅读关于代码的内容, 编写代码, 做项目, 谈论代码等等. 如果他们在自己的工作之外做这些事情, 那么程序员基本上肯定会有所提高, 但似乎不是很有效率.
如果我想更擅长于编程, 但每周我只想从自己的时间中花几个小时致力于编程呢? 什么是建立更佳心理模型的最有效方式, 以便于我可以做出更明智的决定? 《Peak》一书中关于刻意实践的一个首选例子是音乐家. 想要提高特定乐器的技能或学习一首新的音乐, 是有经过定义的, 标准化的方式的; 包括一个音乐家在几个月的时间里学习一首新音乐的例子 -- 每日只是刻意练习 5 分钟. 而在编程中, 我们没有大量的明确目标或改进措施(即: 在某一段音乐作品的错误的数量), 但其他的我发现都没有这个比喻接近.
那么, 我们如何得到我们作为程序员的性能反馈循环? 是的, 我们有特定片段代码的反馈循环, 无论代码是否工作, 它的性能和健壮性如何等等. 我们对于系统的稳健性有一个更长的反馈循环, 因为它们在负载下会跌倒或随着时间的推移会变得笨拙. 但是我们并不经常得到问题方法的实时反馈.
下面是我用来学习编程的方法, 有些地方很不错, 也有些地方值得改进:
通过编程挑战实践
我享受于编程挑战, 但一般来说, 我发现它们不值得去接触一种新的编程语言. 它们提供弱反馈循环 -- 你的程序要么产生正确的输出要么不产生 -- 并且不会给你对设计过程的反馈. 这个方法可能会介绍一个新的算法或一个你不熟悉的语言的新功能, 但在实践方面, 很弱. 比起 "实践", 它更接近于 "性能", 并且你处理的是人为的问题, 而不是真正的问题.
我发现的一个例外是由 @ericwastl 的 Advent Of Code. 编程问题很好地模拟了现实生活中的问题(需求定义明确, 但是边缘情况没有写入规范并且必须隐含), 并且对于解决方案有多么设计良好具备即时反馈, 因为对每个抛出额外需求或一些其他困难的问题有 part 2, 这意味着你必须重新评估你的原始解决方案有多少精心设计. 这并不完美, 但我喜欢看到我的解决方案具有挑战性, 并且经常不得不重新考虑我的解决方案的结构和设计, 当我达到 part 2 的时候.
做业余项目
做业余项目, 如果你有一个的话, 将是投入额外编程时间的伟大方式; 如果你做一些你喜欢的事情的话, 你就不会觉得这像工作. 不幸的是, 因为项目参差不齐, 所以你可能不会真正学到东西. 如果你的业余项目与想要学习的编程内容相一致的话, 那么恭喜你, 这是一个好选择, 否则它只是性能 vs 实践的另一个版本. 即使在最好的情况下, 如果主要目标是生产某种东西, 那就意味着实践和学习得排在后面.
阅读关于编程实践的书
阅读编程书籍是一个快速提升知识的很好方式, 我认为它应该是几乎任何 "提高编程" 方案的一部分. 然而, 它并非是让人能够一劳永逸的银弹. 纯粹的知识获取可以帮助你知道有哪些可用的选项, 当你碰到某个问题的时候, 但知识不能代替更好的心理模型.
最终建议
不幸的是, 我没有能够得出具体的结论. 也许答案是, 需要有编程教练或导师, 以便可以得到针对性的反馈和具体的实践建议.
下面分享的是笔者多年来总结的学习路线适合 1-5 年 Java 程序员学习进阶.
以上进阶方向我们有自己的高清思维方向导图以及阿里架构师讲解的架构视频分享 (包括高可用, 高并发, spring 源码, mybatis 源码, JVM, 大数据, Netty 等多个技术知识的架构视频资料和各种电子书籍阅读) 视频资料获取方式点击这里 https://jq.qq.com/?_wv=1027&k=5C2WvNh 加入即可获取.
1, 开源框架解析专题
站在巨人肩膀, 收获不一样的视野.
开源框架
2, 架构筑基专题
深入内核, 直击故障, 拒绝懵圈.
架构筑基
3, 微服务架构专题
你还不知道微服务, 怎么涨薪.
微服务架构
4, 高性能架构专题
成为互联网架构师, 你要的都在这里.
高性能架构
5, 团队协作开发专题
让你团队开发效率提高十倍.
团队协作开发
6,B2C 商城项目实战
撸起袖子干实事, 项目经验那点事.
B2C 商城实战
7, 并发编程
并发编程
8, 设计模式
设计模式
有了路线解析图, 有没有免费资料? 有没有志同道合的小伙伴共同进步?
来源: http://www.jianshu.com/p/84c8846d666d