推倒樊笼 -- 设计能力

前言

未经思考的人生不值得一过 -- 苏格拉底。

本篇是对近期职业发展思考后所整理的内容输出。 和我互动过的读者、以及一直关注我的动向的读者知道:我于去年年中做出了推倒樊笼重新出发的决定,当时在博客平台,还有读者和我私信交流此事。 今年我会整理关键内容和读者分享。

正其末者端其本,善其后者慎其先

随着AI的涌现和快速发展,Coder们会发现编写软件功能单元代码的门槛越发降低,甚至"机械性"的工作,从脑力工作退化到体力工作并急剧衰变为AI可完成的工作。 例如标准化的界面绘制、模板化的接口实现。

时代决定了我们无法像20年前的前辈从业者般,可以惬意地享受职业,在缓步的成长中又获得丰厚的回报。

因此,我们要重视"发端",并选择最佳路径,打破限制你的樊笼,突围以获得成长空间。

作者按:何谓樊笼?限制你进步的约束,无论是主观意识层面的障碍,还是客观层面的工作内容

天下难事必作于易,天下大事必作于细

想要做成大事难事,需要将其分解为易事、小事。设计过程需要将问题不断分解,并制定分解后的问题的解决方案。

要进行有效的设计,需要做好以下工作:

  • 全面的了解需求,避免错误
  • 准确的对需求进行分级,避免主次偏差
  • 了解所需背景知识,采用"共识",降低学习成本,避免成本过度损耗

当这些工作完备,可进入系统设计和模块单元设计! 笼统的来讲,系统设计偏重于:

  • 体系结构定义,有效的将职责划分到不同的模块,定义好边界,解耦
  • 分层,屏蔽细节 最终体现为系统框架;

模块单元设计偏重于:

  • 功能完整度和有效性
  • 性能指标 最终体现为各种业务实现和"轮子"。

作者按:"轮子"是固化的内容,可以是特定的模块单元,例如OKHttp、MyBatis,也可以是含有一整套轮子的小系统框架,例如Spring-boot。

衡量轮子和框架的标准

闭门造车开门合辙。

抛开正确性(这是最起码得要求),一个优秀的轮子和框架,从功能范围上:

  • 应当尽可能聚焦,关注某一类问题,并在解决此类问题时,尽力做到完整
  • 解决同类型问题时,可以通过扩展
  • 可以通过组合的方式,将多个轮子联合使用

从使用方式:应当尽力做到简单,易理解,符合大众习惯。

作者按:这里的描述略显抽象,举几个例子: 当我们制作一个处理HTTPS协议的轮子时:

  • 应当优先关注HTTPS协议本身的定义与实现,不应当杂糅其他内容,例如多线程,功能应当完整,例如HTTP1.0/HTTP1.1/HTTP2的核心部分应当完整实现,SSL/TLS应完整实现。
  • 当处理HTTP3时,使用扩展包要优于在轮子内部大范围修改;受益于HTTP协议本身的设计优异,这一点感受不明显,若是解决文件传输问题,提供FTP实现和HTTP实现,则较为鲜明。
  • 假设我们有类似Retrofit的框架轮子,则可以组合多个轮子共同使用,例如OKHTTP+Rxjava,OKHTTP+Java8 concurrent

不难理解,衡量轮子和框架的标准,即设计轮子和框架的标准,随着工作深度的发展,读者诸君均会面临从"挑选"到"自建"的转变。

设计能力的核心维度

具有 可定义、可度量标准 的事物是有限的,因此在创造性工作中,没法闭门造车。

设计能力有三个核心维度,抽象能力、权衡能力、预见能力:

  • 抽象能力:从需求到模型的跃迁
    • 如何识别领域本质问题
    • 锻炼建模能力
  • 权衡能力:在矛盾中寻找最优解
    • 性能 vs. 可扩展性
    • 技术先进性 vs. 团队适配性
  • 预见能力
    • 通过可扩展接口预留演化空间
    • 混沌工程与容错设计的结合

以通俗地描述表达,这三个维度分别对应:

  • 是否能清晰的描述问题、定义问题、描述方案
  • 是否能找到当前环境下的最优解、最合理解
  • 是否能留足扩展空间,以满足局部替换优化、增加新的方案模块

锻炼设计能力

要锻炼设计能力,可以从以下3点入手

思维和视角的转变

从工程师视角向架构师视角转变,

  • 工程师的视角停留于:使用具体方案解决具体问题,并尽可能做到:性能最好、健壮性最强;
  • 架构师的视角聚焦于:基于产品目标,确定技术路径,定义路径中的问题,确定"规格"、"标准",进而定义系统,由系统中的组件/模块解决具体问题。

需要做到"局部优化"到系统性思维的转变,从解决问题提前到定义问题。

作者按:可参考以下框架进行训练。

技术深度和广度相融合

单纯凭借技术深度,无法在定义问题时确定规格和标准,因而需要学习跨领域知识,如运维、产品、业务

协作与沟通的艺术

协作的前提是达成一致,达成一致的前提是描述准确,因此,在协作与沟通中,需要以准确、高效的方式输出自己的设计意图,通过设计文档与图表降低认知偏差。

作者按:一个停留在想象中的设计,无法用文字图表确切完整的表达出来,只有它可以被记录下来,才是成型的设计,而非遐想幻视。

后记

这篇文章前前后后5个月方才完稿,期间删改篇幅超正文长度2倍,摒弃了书生意气式的言论,摘选自己彻底掌握、读者能够理解并跟着做的内容流于笔端。

祝各位在生活和工作中顺意。

相关推荐
观默11 分钟前
AI 时代的 10 倍速学习指南
人工智能·程序员
灵感__idea10 小时前
JavaScript高级程序设计(第5版):扎实的基本功是唯一捷径
前端·javascript·程序员
炼数成金14 小时前
程序员副业暴利指南:用Python+AI在小红书月入1W+的终极玩法
人工智能·程序员
444A4E14 小时前
C++ STL容器适配器深度剖析:从deque原理到stack/queue的底层实现
程序员
袁煦丞15 小时前
云端跳跃:在NAS上用cpolar重现马里奥的童趣时光
前端·程序员·远程工作
京东云开发者18 小时前
【转载】golang内存分配
程序员
大明哥_19 小时前
我决定放弃搞 Java 了
程序员
suke19 小时前
Qwen2.5-Omni 全能旗舰 VS 国产小钢炮 MiniCPM-V:参数、硬件、资源、优势全解析
人工智能·程序员·开源
isfox21 小时前
别再纠结!IP 存储类型选择攻略来袭
程序员
何贤1 天前
🤡🤡国内开源作者现状🤡🤡 (愚人节特辑🤡 )
程序员·开源·如何当个好爸爸