<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>架构师 on 冯威的博客</title><link>https://fwhyy.com/tags/%E6%9E%B6%E6%9E%84%E5%B8%88/</link><description>Recent content in 架构师 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 14 Nov 2024 22:06:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E6%9E%B6%E6%9E%84%E5%B8%88/atom.xml" rel="self" type="application/rss+xml"/><item><title>从程序员到架构师，需要做些什么？</title><link>https://fwhyy.com/2024/11/from-programmer-to-architect/</link><pubDate>Thu, 14 Nov 2024 22:06:00 +0800</pubDate><guid>https://fwhyy.com/2024/11/from-programmer-to-architect/</guid><description>&lt;p&gt;最近又面试了不少人，在谈及未来职业规划时，他们大多表示希望走技术路线，并期望未来能成为架构师。在软件开发领域，架构师是许多程序员梦寐以求的职位。它代表着技术能力的巅峰，也意味着更大的责任和挑战。&lt;/p&gt;
&lt;p&gt;然而，从一名普通程序员成长为优秀的架构师，绝非一蹴而就。这是一个需要持续学习、实践和思考的漫长过程。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;本文想以架构师的职责、误区和程序员怎么做转变，谈谈我的看法。&lt;/p&gt;
&lt;h2 id="架构师的职责"&gt;架构师的职责&lt;/h2&gt;
&lt;p&gt;在不同规模的公司中，架构师的职责存在差异。尽管一些小公司可能没有设立专门的架构师岗位，但架构相关的工作仍由技术经理或高级程序员等人员兼顾执行。&lt;/p&gt;
&lt;p&gt;架构师负责系统的整体设计和技术决策，确保系统在满足业务需求的同时具备高性能、高可用性、高扩展性，也就是俗称的「三高」。架构师需要关注系统的功能性需求，但更重要的是非功能性需求。&lt;/p&gt;
&lt;p&gt;架构师需要负责评估和选型适合项目的技术栈、开发工具、基础设施，进行技术调研，分析不同技术方案的优缺点，做出合理的技术决策，选择合适的设计模式和架构模式，以确保系统能够应对复杂的业务场景。&lt;/p&gt;
&lt;p&gt;架构师需要制定并推广开发规范和编码标准，确保代码质量的一致性。确立系统设计和代码实现的最佳实践，如代码风格、命名规范、模块划分等，确保团队在项目中遵循相关标准和规范，降低代码复杂度，提高系统的可维护性。&lt;/p&gt;
&lt;p&gt;另外，架构师还需要进行技术风险的评估和控制、团队内技术难点的攻克、团队内部的代码评审、培养团队的技术能力、组织知识分享和培训，持续关注技术趋势和行业防战，不断学习和研究新的技术等等。&lt;/p&gt;
&lt;h2 id="对架构师的一些误区"&gt;对架构师的一些误区&lt;/h2&gt;
&lt;p&gt;1、从零开始设计一个系统&lt;/p&gt;
&lt;p&gt;从零开始设计一个系统，还能全程参与，这是可遇不可求的机会。更多的情况是公司都有现成的架构体系。所以以架构师身份入职一个新公司，不太可能一开始就给你一个全新系统进行架构设计，更多的是做一些辅助性的工作。但只有做好每一件小事，当机会来了的时候，才会轮的上你。&lt;/p&gt;
&lt;p&gt;2、只跟电脑打交道&lt;/p&gt;
&lt;p&gt;估计有些程序员想成为架构师，或许是认为架构师的工作比较单纯，只用跟电脑打交道。但其实架构师作为技术和业务的桥梁，需要与产品经理、业务团队、开发团队和运维团队进行沟通。&lt;/p&gt;
&lt;p&gt;沟通能力也是架构师一个非常重要的技能。&lt;/p&gt;
&lt;p&gt;3、技术全能&lt;/p&gt;
&lt;p&gt;很多人认为架构师是技术全能者，必须精通所有技术栈和工具。然而，架构师并非精通每一项技术细节，而是具备足够的广度来理解系统的整体架构和技术选型，能够做出权衡和取舍。架构师需要深入理解核心技术，并且知道在什么场景下应用合适的技术，而不是精通每一个细节。&lt;/p&gt;
&lt;p&gt;4、只专注技术，不管业务&lt;/p&gt;
&lt;p&gt;认为架构师只需要关注技术而不用理解业务。事实上，架构师不仅要关注技术，还要深入理解业务需求和业务流程，因为只有这样，才能设计出真正适配业务发展的系统架构。毕竟技术是为业务服务的，缺乏业务理解的架构往往难以支持公司长期战略。&lt;/p&gt;
&lt;h2 id="什么是架构"&gt;什么是架构？&lt;/h2&gt;
&lt;p&gt;在说程序员到架构师转变之前，先说说什么是架构。&lt;/p&gt;
&lt;h3 id="架构的本质"&gt;架构的本质&lt;/h3&gt;
&lt;p&gt;架构的本质在于为复杂系统提供一种结构化的设计方法，通过明确系统的核心组件、它们之间的关系以及交互方式，来确保系统能够满足功能需求、性能要求和可维护性标准。&lt;/p&gt;
&lt;p&gt;架构的本质是抽象和简化，它将复杂的系统分解为可管理的部分，使得开发、维护和扩展变得更加可行和高效。同时，架构还承载着系统的愿景和战略方向，确保技术决策与业务目标保持一致。&lt;/p&gt;
&lt;h3 id="架构的分类"&gt;架构的分类&lt;/h3&gt;
&lt;p&gt;按照不同的角度，架构可以有很多分类，但一般来说，主要分为&lt;strong&gt;业务架构&lt;/strong&gt;、&lt;strong&gt;应用架构&lt;/strong&gt;和&lt;strong&gt;技术架构&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;业务架构描述了组织如何运作以实现其战略目标。包括业务功能、业务流程、组织结构、业务能力等。就是企业要发展，需要哪些业务能力来进行支撑。需要梳理核心业务的处理过程，定义各个业务模块的相互关系。比如：一个零售企业的业务架构可能包括：商品采购、库存管理、在线销售、客户支持等核心功能。&lt;/p&gt;
&lt;p&gt;应用架构描述了企业的系统和应用如何支持业务需求，定义了应用的组织方式、交互方式以及应用与数据之间的关系。首先要确定需要哪些应用系统来支持业务，这些应用之间怎么做集成和交互。&lt;/p&gt;
&lt;p&gt;技术架构架构描述了支撑应用系统的技术和基础设施，关注硬件、网络、数据库、编程语言、中间件等技术选型和部署。比如：使用什么技术实现应用？部署在什么环境？如何保证高并发、高可用性？如何确保数据的安全性等。&lt;/p&gt;
&lt;h2 id="从程序员到架构师的成长阶段"&gt;从程序员到架构师的成长阶段&lt;/h2&gt;
&lt;p&gt;从程序员到架构师的成长可以大致分为以下几个阶段：&lt;/p&gt;
&lt;p&gt;1、初级程序员：这是最基础的技能积累阶段，主要学习编程语言、工具使用及完成基本任务。&lt;/p&gt;
&lt;p&gt;2、中级程序员：在这个阶段，能够独立完成开发任务，包括需求分析、简单的方案设计。&lt;/p&gt;
&lt;p&gt;3、高级程序员：开始指导其他工程师，并关注整体技术体系的建设，形成技术深度和广度。&lt;/p&gt;
&lt;p&gt;4、架构师：能够独立完成系统的架构设计，考虑技术选型、系统的可扩展性与稳定性、关注不同模块间结构合理性的问题、关注技术架构的长期正确性。&lt;/p&gt;
&lt;p&gt;在小公司可能不会严格按照级别去分，但我们还是需要沿着这个路径去学习和成长。&lt;/p&gt;
&lt;h2 id="架构师需要具备的能力"&gt;架构师需要具备的能力&lt;/h2&gt;
&lt;p&gt;首先一名优秀的架构师一定是一个出色的程序员，能写的一手好的代码。&lt;/p&gt;
&lt;p&gt;在此基础上，架构师要有技术的广度和深度。广度尤为重要，程序员在熟悉的领域会钻研的很深，但没有广度，在一些跨系统的沟通场景下很难插上话，甚至连别人说的都听不懂。&lt;/p&gt;
&lt;p&gt;能落地的架构才是好架构，所以架构师还需要具备良好的沟通能力，首先是能倾听各种不同的意见和建议，最后确保各方对架构达成共识，愿意采取一致的行动。&lt;/p&gt;
&lt;p&gt;资源、时间永远都是紧张的，架构师还需要有良好的平衡和取舍能力，可以确保架构在现有资源约束下是最合理的，优先做最重要的事情，毕竟架构是不断进行迭代，慢慢进化的。&lt;/p&gt;
&lt;p&gt;要成为一名优秀的架构师，需要具备以下几个关键能力：&lt;/p&gt;
&lt;p&gt;1、技术深度与广度：架构师需要有扎实的技术功底和广泛的技术视野。这包括编程语言、框架、工具、系统设计、性能优化、安全等方面的知识，掌握技术细节是基础，尤其是在不同场景下如何取舍和优化。&lt;/p&gt;
&lt;p&gt;2、业务理解能力：架构师不仅要懂技术，还要深入理解业务需求。只有充分理解业务，才能设计出真正符合需求的系统架构。&lt;/p&gt;
&lt;p&gt;3、系统思维：架构师需要具备抽象思维、分治思维、复用思维和迭代思维。这些思维方式帮助架构师设计出灵活、可扩展的系统，减少后期维护的复杂度。&lt;/p&gt;
&lt;p&gt;4、沟通能力：架构师需要与产品经理、开发人员、测试人员等多个角色沟通。除了架构设计本身，还需要通过文档和会议将设计理念传达给团队，让每个人都理解和使用好架构。&lt;/p&gt;
&lt;h2 id="如何培养架构师能力"&gt;如何培养架构师能力？&lt;/h2&gt;
&lt;p&gt;1、积累经验：参与不同类型和规模的项目，尤其是复杂系统的设计和开发经验，对成长为架构师至关重要。在程序员阶段需要多进行换位思考，如果是自己来设计会怎么进行，和实际落地的进行比较，分析优缺点。&lt;/p&gt;
&lt;p&gt;2、拓宽视野：学习各种技术和架构模式，了解它们的优缺点和适用场景。参与开源项目、阅读优秀的开源代码、参加技术交流活动，都是很好的方式。&lt;/p&gt;
&lt;p&gt;3、深度思考：不断反思和总结，将经验转化为自己的知识体系，思考每个技术选择背后的原因及可能带来的影响。&lt;/p&gt;
&lt;p&gt;4、保持编码实践：即使成为架构师，也要保持一定的编码实践。这有助于理解开发中的实际问题，验证架构设计的可行性。好的架构师一定是从一线程序员成长起来的，保持与代码的接触，才能设计出切实可行的架构。&lt;/p&gt;
&lt;p&gt;5、关注业务发展：深入理解行业和公司业务，预测未来的发展趋势，帮助架构设计更具前瞻性。比如：你的公司如果是做 ToB 业务，又不分行业，那就需要了解多种行业的业务、用户使用习惯，这些都和架构设计息息相关。&lt;/p&gt;
&lt;p&gt;6、培养领导力：架构师不仅仅只是在电脑上画画架构图，还需要带领团队将设计落地，因此培养领导力和团队管理能力也是重要的。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;从程序员成长为架构师是一个充满挑战和机遇的过程，需要持续学习、深度思考和实践积累。在不断适应新技术与新趋势的同时，程序员需要通过实际项目理解架构设计的原则、掌握架构设计的相关知识点。&lt;/p&gt;
&lt;p&gt;只有先具备了扎实的架构设计能力，程序员才有可能在未来抓住机遇，成功转型为架构师。&lt;/p&gt;</description></item></channel></rss>