作者:李立
链接:https://www.zhihu.com/question/357746294/answer/909899549
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
导读:
1、架构师应不应该写代码
2、为什么别人的系统总是那么烂
3、成为架构师最困难的门槛是什么?
4、如何更高效的学习?
1.架构师应不应该写代码
在我看来,普通的开发者跟架构师的区别在于,普通的开发者更偏向于遇到问题去解决问题,架构师需要预见这些问题,在高并发大流量的场景下,系统出会出现哪有问题,怎么避免产生这种问题,以及产生了这种问题该怎么办。
大部分情况下我作为架构师并不需要揽下“核心模块”开发这种工作,毕竟我能调配的时间太零散了,效率难以保证,很多人在专注的情况下比我做的好很多,我只需要保持大局观需要适度参与就可以了。
总的来说,架构师和程序员在某些方面上有点像产品经理和用户的关系,大部分程序员并不会主动告诉你他们想要什么、哪里需要优化,甚至自己也不知道这些,所以需要架构师的参与去设计跟解决问题。
2.为什么别人的系统总是那么烂
很多程序员解决问题的能力很强,说要解决一个什么问题,下午就能写出几百行代码把功能实现了。但是做出来的东西有种少考虑了什么东西的感觉。大部分程序都能实现功能,但是如果把“时间”这个也作为一个考虑的维度的话,就会意识到一个合格的项目需要考虑更多的东西:更通用的使用方式、易于理解的文档、简单而易于扩展的设计,等等。
很多公司应该都会有一些遗留系统,它们庞大、笨重、难用、几乎无法维护,所有人都在抱怨这些系统,并且每天都在想方设法换掉那些遗留系统。但是一段时间过去之后,又会发现身边的新人又开始吐槽当时替代遗留系统的那个系统了。
“大多数系统当初都很好使,功能当时够用,扩展性看起来也可以,但是这些系统都是开发的人离职之后变坏的。”
3.成为架构师最困难的门槛是什么?
很多人自称架构师的人跟你讲一个架构时简直滔滔不绝,各种技术名词像是说相声一样从他嘴里说出来,三句话不离高并发大数据,但是稍微追问一下,就会发现很多基本概念的缺失,例如自称精通高并发的人说不清楚他所谓的高并发系统的瓶颈在哪里,自称精通架构设计的人说不明白他的系统怎么保证高可用,自称超大数据量的系统实际上只有不到100万条数据,等等。
架构师虽然听起来很高大上,但本质上仍然是工程师,不是科学家,也不是忽悠人的江湖骗子。学习再多,也需要实践落地。设计架构方案更多的是在做一些抽象和权衡:把复杂的需求抽象成简单的模型,从功能、性能、可用性、研发成本等等方面规划如何构建一个系统,这些内容需要更多的实践练习。
4.如何更高效的学习?
大多数人每天能留给自己学习的时间有限,这个阶段如何提升学习效率就成了要解决的重点。
说说自己提升学习效率的心得,其实非常简单:体系化的学习。
在重复了几次痛苦的学习-梳理过程后,再去看一些独立的文章或者资料往往会事半功倍,因为能在体系内找到相对应的知识,甚至有时候一本书里一页只需要看一句话,点破那层窗户纸,就可以掌握新的知识。
跟很多人一样,刚毕业时我觉得作为程序员,只要努力,加上少许天赋便可以获得一些成绩。
工作一段时间后,对自己和其他人的认识也越来越清晰,逐渐的发现程序员之间的差距或许比人和猴子之间的差距还大,接受这个事实这让我郁闷了很久。
再过一段时间,发现自己已经能够客观的评价自己的能力,也意识到了距离并不是那么重要,只要想办法跑的更快,就足够了。
当然架构师也不是一个空中楼阁,只需要理论,根据我的经验整理了一个进阶的体系,基础部分就没完全包含了。
5.快速成为架构师的学习路线
1.源码分析 (图片请放大观看)
很多小伙伴可能会很困惑,为什么BAT的面试官总是喜欢问源码?其实我们常用的Spring、MyBaits这样的框架可以说是JAVA里面最经典的教科书,从中你能学习到很多写代码的经验技巧,而去悟开源框架中蕴含的优雅架构设计之道这才是最重要的
2.深入及优化 熟悉大牛的源码框架后,接下来我们进入优化技能学习,普通的开发者只知道做,资深的开发者知道为什么这么做,怎么才能做到最好,技术点足够的深度,才能让你具备竞争力,所以我们需要掌握优化的算法,对java虚拟机及JVM有足够的了解,对并发编程有充分的认识,成为互联网企业的核心技术人才。
3、分布式架构
根据双十一日志统计,前端系统有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,互联网大厂的架构师面对的就是这样的生产环境,所以分布式、缓存、消息这样搭建高性能系统的技术必须掌握,那么高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的:
4、服务化架构
在高并发的应用场景下,微服务技术是互联网平台必选的架构技术,目前国内较流行,用得较多的有Spring Boot, Spring Cloud, Duboo, 不仅要学习微服务架构的应用知识,还会从底层源码透析每个开源框架的设计模式及设计思想,还有Docker虚拟化技术等等,使用微服务改变互联网系统的并发瓶颈,让你的平台开发更加高效、快捷。