软件架构师是怎样炼成的
六边形战士
软件设计、数据结构、系统架构、后端开发、前端开发、运维。你不需要样样精通,但必须要有实战经验,不论是从别人那里看来的、听来的,或者是从书上看到的理论知识,在没有实际上手之前,其实都是空谈。
一直要充电
保持学习,辨清有价值的技术,哪些能够给生产力带来质的飞跃,哪些是在重复造轮子,花时间去体会,感受。对于一项新技术,经过三年的沉淀、观察后,基本可以认清它“是骡子是马”,如果这 3 年内能进入主流,形成生态圈,那这就是好东西。
有宏观视野
说直白一点,要考虑到项目在开发、运营过程中可能会发生的各种概率性事件,尽可能保留系统的可拓展性?本质上来说,锻炼视野的目的是增强自己的系统设计能力。
成年人的世界里没有对错,只有利弊
在技术层面,没有“银弹”,实现功能需求时,需要我们判断出各个组件的好与坏,更进一步,权衡利弊不仅是技术层面,还要考虑 1. 项目周期 2. 开发预算和成本 3. 项目维护难度。
从另外一个角度来说,一个系统的架构、技术选型,从来都是没有标准答案的,更多时候是人的问题(关于这点,周志明老师在凤凰架构一书中也表达了同样的观点)。当你作为话事人时,你对不同的技术的利弊的了解程度,是左右你做决定的主要因素。你在这方面的知识储备越丰富、经验越多,在做决策时,你的选择越多。
在现实情况中,我们基本上都会遇到以下反例:非常盲目地选择当前最热门的技术;非常盲目的追求高性能、高并发;主观上为了丰富自己的履历而作出“高大上”的选型。
应对改需求
架构师和程序员不同,在面对需求的变更时,往往担负着更大的,因为整体改动的大小,很大程度上会收到你当初设计的影响。
以下是一些建议:保持简单,不要搞一些没有必要的抽象化;在不影响成本和效率的前提下,尽量的把设计的解决范围扩大。
要懂业务
千万不要依赖客户,让客户告诉你要做什么,他们如果很清楚自己的问题要怎么解决,他们就不会来找你解决。大部分情况下,客户向你描述的都是他们直接面对的,很表层的问题,你应该去挖掘问题的根源,然后找到解决根源的方法,之后再说法他们去用你的方法。
见人说人话,见鬼说鬼话
一般情况下,作为架构师,你需要对话的有四类人:
①会从项目里获取最多收益的人(经理、部门负责人)
②掌管项目预算、生死大权的人(CTO)
③验收最终产品的人(业务负责人、客户方负责人)
④实际使用产品的人(业务员、普通用户)
他们的重要程度不同,角色定位不同,知识背景不同,你能够在他们面前发言的时间和机会也不同,所以通常来说,级别越高,汇报的时间越少,内容就越得浓缩。简而言之,提炼重点,少说废话,把对方关系的信息快速准确地传达过去。另外,你要表达的信息,基本上都会掺杂着非常多技术类的专业内容,相对的,你的听众很多都不是内行的,所以你要有一定的技巧,带入对方的角度去发言,让对方能够听的懂。
让程序员的工作变得更简单
开场
很多程序员在工作过程中,总是想太多,给自己上不必要的强度,把问题复杂化,实际上这个工作就没这么难的,因为随着技术理念的发展和硬件条件的升级,软件开发这件事情本身应该是越来越容易的。
过度开发就是纯纯的浪费人生
很多程序员在开发的过程中,喜欢自己想象出来一些要解决的问题,然后花很多时间和精力把它造出来,可能是想要显得自己经验老道、未雨绸缪,但实际上那些问题本身是不存在的。
没有规矩不成方圆
从代码规范的问题来说,在项目开始之前,团队里面有一个统一的指定的规则,只要把它整合到CI/CD里,甚至不需要人工去执行。
不需要规范性的内容有多么的正确,但是必须要有统一的规范,对规范进行严格的遵守。
代码是工具不是艺术
一些反人类的规范,没有执行的必要。代码只是一个工具,它不是抽象艺术。要接地气,不要花里胡哨!当你定下一下规则,是源于一些虚无缥缈的所谓的美观的理由,而不是为了让人的工作变得更容易,那这个规则本身就是一个错误,整个方向都是一个错误方向。
技术栈不是越大越好,而是越小越好
在现实层面,你的领导并不关系你在项目上使用了什么高大上的技术,他们只关心你能不能交出来向客户承诺的那些功能和作用,技术层面的东西,大部分都是程序员之间的自娱自乐,它对你最大的工作上的价值,可能就是在简历上多写几个字。更重要的是技术栈其实是和技术债成正比的,你堆叠的技术栈越多,你借的债越多,你欠的东西以后都是要还的。
别造轮子了
一个需要长期维护的、通用型的工具,你是要不断地为以后的新需求进行改动的,同时你还要维护以前的功能的兼容性,那其实这个工具本身都已经变成了一个具有完整声明周期的一个产品了,随着这个产品的应用场景越来越多,你需要更改的需求就越来越多,更改的难度就越来越大,出bug的机会就越来越多,所有使用这个轮子的程序员,都会一起承担它所带来的风险。
最好的解决方案,往往是最简单朴素的那个。
最好的解决方案,往往是最简单朴素的那个。^ ^
总结
大道至简。
英语才是最好的计算机语言
一、找到答案
你要是想在某个语言或者技术上面走得更深,中文社区里的资源往往少得可怜,学会英语才有可能找到更好的答案。
二、跟上技术步伐
语言只是工具,我们必须接受的现实是,绝大部分技术的发源都来自于英语社区,所以如果你不懂英语,你只能在这一边熬熬地等着别人翻译、搬运过来的第二手甚至是第N手的技术信息。
三、吸收全世界的经验