前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进击的Java程序员:如何不断地提高自己的编程能力向架构师迈进

进击的Java程序员:如何不断地提高自己的编程能力向架构师迈进

作者头像
慕容千语
发布2019-06-12 20:19:51
7190
发布2019-06-12 20:19:51
举报

当程序员处瓶颈期应如何提高自己?有很多关于“学习编程”的资源,能够让人从 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程序员学习进阶。

1、开源框架解析专题

站在巨人肩膀,收获不一样的视野。

开源框架

2、架构筑基专题

深入内核、直击故障、拒绝懵圈。

架构筑基

3、微服务架构专题

你还不知道微服务,怎么涨薪。

微服务架构

4、高性能架构专题

成为互联网架构师,你要的都在这里。

高性能架构

5、团队协作开发专题

让你团队开发效率提高十倍。

团队协作开发

6、B2C商城项目实战

撸起袖子干实事,项目经验那点事。

B2C商城实战

7、并发编程

并发编程

8、设计模式

设计模式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于普遍性能改进的快速指南
  • 提高方法
  • 通过编程挑战实践
  • 做业余项目
  • 阅读关于编程实践的书
  • 最终建议
    • 1、开源框架解析专题
      • 2、架构筑基专题
        • 3、微服务架构专题
          • 4、高性能架构专题
            • 5、团队协作开发专题
              • 6、B2C商城项目实战
                • 7、并发编程
                  • 8、设计模式
                  相关产品与服务
                  Prowork 团队协同
                  ProWork 团队协同(以下简称 ProWork )是便捷高效的协同平台,为团队中的不同角色提供支持。团队成员可以通过日历、清单来规划每⽇的工作,同时管理者也可以通过统计报表随时掌握团队状况。ProWork 摒弃了僵化的流程,通过灵活轻量的任务管理体系,满足不同团队的实际情况,目前 ProWork 所有功能均可免费使用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档