《代码的艺术》笔记


title: 《代码的艺术》笔记
date: 2020-02-22 22:20:35
categories:

  • 代码
    tags:
  • 整理

这周,看了下章淼老师的视频,写个笔记,做一些整理。微信公众号:章老师说,也可以关注了解下。个人感觉蛮好。

结合自身,我是软件工程专业毕业,理解软件工程师不等于码农,也不等同于程序员。举个例子,建房子,可以是平房也可以大厦,做个普通的平房一般的泥瓦匠可以完成,而摩天大楼则不光需要泥瓦工,还需要建筑设计师。这些设计师的图纸,既要满足功能性需求,也要有美感的要求。类比而言,软件工程师,需要思考得更加全面,而非仅仅是某个单一功能是如何完成的。虽然个人不喜欢夸夸其谈什么系统架构,但是视频中章老师谈及到系统架构,所以这里将其中有意思的部分分享出来。

系统架构是什么?

wiki定义

A system architecture is the conceptual model that defines the structure, behavior,and more views of a system.

系统架构描述的几个要素
  • 系统是如何组成,功能在这些组成部分之间是如何划分的。(这里如果想划分合理更像是领域驱动设计)

  • 各个系统如何联动,如何完成任务/流程。(系统子模块如何协作与交互)。

  • 不同的角度,更详细的刻画系统的全貌。(我理解是子模块内部是如何运作的,细化到方法)。

系统架构在不同层次的体现
  • 总体设计
  • 模块设计
系统设计的方法(要求)
  1. 每个组件/模块的功能都应该足够专注和单一。(软件设计的单一职责原则)
  2. 子系统/模块 关系简单清晰。(高内聚、低耦合)
  3. 需求是系统设计决策的来源。(这里,我觉得软件工程师,不光得逻辑好,而且语文(哲学)也得好)
    • 在设计中,经常要做trade-off
    • 需求是决策的重要依据。
  4. 模型/抽象的思维能力。
    • 思考的重点:概念、模型、数据结构、算法。
    • 需要脱离开代码的细节:函数、语言。(看到这里,想起来我实习的时候,带我的老阿里,他和我说,设计的时候不要想细节如何完成,因为详细设计里会有而且肯定可以实现。我想起,读书阶段看到的一个例子,比如说系统设计的时候,某个同学出门,不需要思考到他是如何出门的,是拉开门还是推开门还是别人帮忙用钥匙开门。)
延伸阅读(很赞!)
  • 来自Google的3大系统的经典论文
    • GFS
    • BigTable
    • MapReduce
  • 关注点
    • 如何描述问题和出发点
    • 如何描述模型
    • 如何描述系统设计
  • 这里我只能记录个Action。因为上面的文章我也没有阅读过,后续读完也会写出来。

谈谈代码

代码是写给人看的,好的代码可以清晰的反应业务流程、设计思路。近期看了一些代码,憋出内伤,业务service里写大量的set变量,冲淡了真正的业务逻辑。Don’t make me think!

写程序是以数据为中心考虑,封装数据是一种必要的能力。我看到有的方法数据很难扩展,一个方法入参高达6、7个。

三个误区
  1. 所有代码放在一个模块,是因为规模太小。

    反驳:切分模块的原则和代码规模没有关系。

  2. 所有附加功能放到util包里。

    反驳:util的存在和模块划分的原则是矛盾的,至少要细化到fileUtil的粒度。

  3. 从“过程”的角度出发考虑模块的划分

    反驳:首先从数据的角度考虑。

写好程序的秘诀

  1. Bug往往出现在非常长的函数(方法)里。《代码整洁之道》中说,方法长度越短,生命周期越长。
  2. 出现危险的根源,往往是过于自信

怎样修炼成为优秀的软件工程师?

一名优秀的软件工程师,是我的短期目标。章老师的分享里是这么写的。

一个好的软件工程师和以下因素没有必然联系。

  • 写过多少年的程序
  • 写了多少行代码
  • 曾经在哪里上学、在哪里工作。

以下三个方面(当然,个人觉得有点大,需要落实的Action,不然很容易流于形式)

  • 学习-思考-实践
  • 知识-方法-精神
  • 基础乃治学之根本(看来我还要再翻翻《Java编程思想》)

附录:延伸阅读中的文章

链接:https://pan.baidu.com/s/17Dc2VjWVkyL0iA51D4aUMA 密码:x1o8

最后,感谢章老师的分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值