『干货分享』Java程序员月薪达到三万, 需要掌握哪些技术?1.架构师应不应该写代码2.为什么别人的系统总是那么烂3.成为架构师最困难的门槛是什么?4.如何更高效的学习?5.快速成为架构师的学习路线一

1.架构师应不应该写代码

合格的程序员对于明确分配的任务会完成的很好,但是大部分情况下“架构”这个词意味着架构师并不会涉及太多细节,架构图和代码实现之间总还是有些距离,你无法保证所有人都会正确的理解你的设计,或者是程序员写代码时遇到障碍时会立刻想出足够优雅的解决方案。

在我看来,写代码的架构师更像是在做后勤保障的工作:在代码中第一时间发现可能存在的问题,向其他人提出警告,或是给予其他人改进的意见,必要的时候或是给其他人演示一下正确的姿势。

大部分情况下我作为架构师并不需要揽下“核心模块”开发这种工作,毕竟我能调配的时间太零散了,效率难以保证,很多人在专注的情况下比我做的好很多,我只需要保持大局观需要适度参与就可以了。

总的来说,架构师和程序员在某些方面上有点像产品经理和用户的关系,大部分程序员并不会主动告诉你他们想要什么、哪里需要优化,甚至自己也不知道这些。想要做出好的产品,捷径之一就是跟用户做同样的事情。

2.为什么别人的系统总是那么烂

很多程序员解决问题的能力很强,说要解决一个什么问题,下午就能写出几百行代码把功能实现了。但是做出来的东西有种少考虑了什么东西的感觉。大部分程序都能实现功能,但是如果把“时间”这个也作为一个考虑的维度的话,就会意识到一个合格的项目需要考虑更多的东西:更通用的使用方式、易于理解的文档、简单而易于扩展的设计,等等。

很多公司应该都会有一些遗留系统,它们庞大、笨重、难用、几乎无法维护,所有人都在抱怨这些系统,并且每天都在想方设法换掉那些遗留系统。但是一段时间过去之后,又会发现身边的新人又开始吐槽当时替代遗留系统的那个系统了。

“大多数系统当初都很好使,功能当时够用,扩展性看起来也可以,但是这些系统都是开发的人离职之后变坏的。”

3.成为架构师最困难的门槛是什么?

很多人自称架构师的人跟你讲一个架构时简直滔滔不绝,各种技术名词像是说相声一样从他嘴里说出来,三句话不离高并发大数据,但是稍微追问一下,就会发现很多基本概念的缺失,例如自称精通高并发的人说不清楚他所谓的高并发系统的瓶颈在哪里,自称精通架构设计的人说不明白他的系统怎么保证高可用,自称超大数据量的系统实际上只有不到100万条数据,等等。

架构师虽然听起来很高大上,但本质上仍然是工程师,不是科学家,也不是忽悠人的江湖骗子。学习再多,也需要实践落地。设计架构方案更多的是在做一些抽象和权衡:把复杂的需求抽象成简单的模型,从功能、性能、可用性、研发成本等等方面规划如何构建一个系统,这些内容需要更多的实践练习。

4.如何更高效的学习?

大多数人每天能留给自己学习的时间有限,这个阶段如何提升学习效率就成了要解决的重点。

说说自己提升学习效率的心得,其实非常简单:体系化的学习。

在重复了几次痛苦的学习-梳理过程后,再去看一些独立的文章或者资料往往会事半功倍,因为能在体系内找到相对应的知识,甚至有时候一本书里一页只需要看一句话,点破那层窗户纸,就可以掌握新的知识。

跟很多人一样,刚毕业时我觉得作为程序员,只要努力,加上少许天赋便可以获得一些成绩。

工作一段时间后,对自己和其他人的认识也越来越清晰,逐渐的发现程序员之间的差距或许比人和猴子之间的差距还大,接受这个事实这让我郁闷了很久。

再过一段时间,发现自己已经能够客观的评价自己的能力,也意识到了距离并不是那么重要,只要想办法跑的更快,就足够了。

5.快速成为架构师的学习路线

以下六大知识体系是我从业多年总结出来的经验,都是当前最主流的技术。想学习这些技术的朋友可以加群:697579751。群里会分享这些技术知识点供大家学习免费下载

一、源码分析

源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂。

源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。

我认为是阅读源码的最核心驱动力。我见到绝大多数程序员,对学习的态度,基本上就是这几个层次(很偏激哦):

下图是我总结出目前最应该学习的源码知识点:

二、分布式架构

分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能完全覆盖其所有内容的。

总的来说,分布式系统要做的任务就是把多台机器有机的组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。如果一定要给近些年的分布式系统研究做一个分类的话,我个人认为大概可以包括三大部分:

分布式存储系统

分布式计算系统

分布式管理系统

下图是我总结近几年目前分布式最主流的技术:

三、微服务

当前微服务很热,大家都号称在使用微服务架构,但究竟什么是微服务架构?微服务架构是不是发展趋势?对于这些问题,我们都缺乏清楚的认识。

为解决单体架构下的各种问题,微服务架构应运而生。与其构建一个臃肿庞大、难以驯服的怪兽,还不如及早将服务拆分。微服务的核心思想便是服务拆分与解耦,降低复杂性。微服务强调将功能合理拆解,尽可能保证每个服务的功能单一,按照单一责任原则(Single Responsibility Principle)明确角色。 将各个服务做轻,从而做到灵活、可复用,亦可根据各个服务自身资源需求,单独布署,单独作横向扩展。

下图是我总结出微服务需要学习的知识点:

四、性能优化

不管是应付前端面试还是改进产品体验,性能优化都是躲不开的话题。

优化的目的是让用户有“快”的感受,那如何让用户感受到快呢?

加载速度真的很快,用户打开输入网址按下回车立即看到了页面

加载速度并没有变快,但用户感觉你的网站很快

性能优化取决于多个因素,包括垃圾收集、虚拟机和底层操作系统(OS)设置。有多个工具可供开发人员进行分析和优化时使用,你可以通过阅读 Java Tools for Source Code Optimization and Analysis 来学习和使用它们。

必须要明白的是,没有两个应用程序可以使用相同的优化方式,也没有完美的优化 java 应用程序的参考路径。使用最佳实践并且坚持采用适当的方式处理性能优化。想要达到真正最高的性能优化,你作为一个 Java 开发人员,需要对 Java 虚拟机(JVM)和底层操作系统有正确的理解。

下图是我总结性能优化应该学习理解的几大知识体系:

五、Java工程化

工欲善其事,必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。提升开发效率何团队协作效率。让自己有更多时间来思考。

六、并发编程

并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出来一个最全面的学习大纲:

以上六大知识体系是我从业多年总结出来的经验,都是当前最主流的技术。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯大讲堂的专栏

如何利用各种“桥梁”,建立跨国沟通的信任

游戏业务运维能够接触现网环境作为玩家与业务项目组、代理开发商之间的”桥梁“,同时也作为业务项目组与代理开发商之间的技术”桥梁“,处于一个核心枢纽岗位的游戏运维人...

1805
来自专栏靠谱PM

竞品分析实操-全文不掺杂任何“鸡汤”

一、竞品分析和功能分析是不同的,竞品分析主要掌握一个产品的节奏和玩法,进而为自己的产品迭代和方向指导,简单点说就是做同一类产品别人是怎么一步一步走向成功的(当然...

692
来自专栏姬小光

妈妈说我穷得连个小程序都没有

这个标题,来源于我『穷得连只猫都没有』的现状。那么就着这个梗,咱就来说说什么叫『穷得连个小程序都没有』。

853
来自专栏ThoughtWorks

让我们再聊聊TDD 续——人人都在做TDD|洞见

在上一篇文章里面,通过对DHH的文章以及DHH和Kent Beck等讨论的分析,我阐述了对TDD的理解和分类,现在来继续聊聊TDD的实施和分层。 现在还有非常多...

2774
来自专栏PPV课数据科学社区

【学习】高效能数据分析的七个习惯

高效的数据分析不是马上就能学会的,但是可以通过快速学习掌握。这里有7个数据分析的习惯,我希望有人可以针对一个工程团队,告诉我关于数据分析的高效合作,沟通以及投资...

2363
来自专栏程序员互动联盟

【入门指导第十一讲】不是所有人都适合参加培训

存在问题: 培训这个问题一致困扰着很多人,但是培训真的适合我们嘛? 解决方案: ? ? ? 编程几乎没有入门障碍 成为一个就业程序员,你所需的是一个上网本和一个...

2355
来自专栏Youngxj

无名外推蜘蛛池系统服务端1.5破解版| 站群秒收必备|免授权破解版 (未测)

1757
来自专栏华章科技

数据分析不能碰的6大禁区

要分析一个数据,首先要明确自己的目的,为什么要收集和分析这样一份数据。只有明确了目的之后,才能够把握好接下来应该收集哪些数据,应该怎么收集数据,应该分析哪些数据...

703
来自专栏企鹅号快讯

小程序的推广思路

之前有朋友做了一个可以直接对网页进行截图的小程序,询问我如何做小程序的推广,分享下我的一个思路,希望可以给读者一些借鉴。 将一篇网站变成一张图片,通常我们在什么...

20510
来自专栏小白客

我为什么选择Python?

第一次接触python应该是16年下半年,在一个偶然的情况下,我那时才知道原来世界上还有一种名为python的计算机语言,好奇心驱使着我去进一步的了解它,然...

2814

扫码关注云+社区