极客时间——程序员进阶攻略

时间:Oct. 14, 2021 分类:

目录:

01为什么称为一名程序员

在工作的前几年有一段快速的自然成长期。因为这时我们就像一张白纸,只要是在认真地做事儿,总是能成长。这段时期,心其实是乱的,但因为忙而充实,也获得了很多成长,但它的问题是:这样的自然成长期有多长取决于你所做事情的天花板,所以才有了后面的落差。

02技术方向的选择

03技能地图

测试驱动开发(TDD)

在写代码的时候,用测试的思维与方式(提供单元测试)去审视和检测代码,也就是说明确要开发某个功能后,先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。

04别了校园初入江湖

那么持续努力的学习还有意义吗?我只是说你很难做到每年加薪20%,但是却可以做到每年比去年的自己多增长20%的知识、见识和能力。

05架构与实现

架构的内容

  • 确定边界:划定问题域、系统域的边界。
  • 切分协作:切分系统和服务,目的是建立分工与协作,并行以获得效率。
  • 连接交互:在切分的各部分之间建立连接交互的原则和机制。
  • 组装整合:把切分的各部分按预期定义的规则和方法组装整合为一体,完成系统目标。

架构的维度

  • 高维度:指系统、子系统或服务之间的切分与交互结构。
  • 中维度:指系统、服务内部模块的切分与交互结构。
  • 低维度:指模块组成的代码结构、数据结构、库表结构等。

架构交付的一套决策流,而文档是交付的载体

架构实现的过程中

  • 选型评估:选库,框架和API
  • 程序设计:逻辑(流程和分支)、控制(串行并行同步异步)、数据(结构,状态,存储)
  • 执行效率:运行时间、响应时间、吞吐量
  • 稳定健壮:异常处理、边界条件
  • 维护运维:维护(易读、易改)、运维(监控、日志、配置、报警、兼容)
  • 集成部署:依赖复杂度、易用性、调用管理

关注点为熵

  • 系统只要是活跃的,“熵”值就会在生命周期中不断波动。需求的增加和改变,就是在不断增加“熵”值(系统的混乱程度)。但软件系统的“熵”有个临界值,当达到并超过临界值后,软件系统的生命也基本到头了。
  • 实现中重构与优化的动作则是在不断进行减“熵”,作出平衡,让系统的“熵”值在安全的范围内波动。

需要把控的为战略性细节。而其他大量的实现细节也许与想象的不同,但只要没有越出顶层宏观结构定义的边界即可

06模式与框架

设计模式,对于初窥门径的程序员,带来的麻烦简直不逊于它所解决的问题

所以需要在一定程度的时候再去看模式就发现很多已经用过,没用过也能很好理解

  • 模式是代码层面,解决单个问题的成功方法
  • 框架是设计层面,解决一系列问题的成功方法

通用则意味着至少要适用于大于两种或以上的场景,场景越多我们的选择和取舍成本越高。

07多维和视图

三视图

  • 组成视图 子系统、服务、组件部分构成
  • 交互视图 系统或服务与外部系统或服务的协作关系
  • 部署视图 部署结构与环境

还有

  • 流程视图 时序图
  • 状态视图

08代码和分类

  • 功能:业务逻辑的复杂度决定了功能性代码的复杂度,整理需求为第一
  • 控制:通信、负载、限流、隔离、熔断、异步、并行、重试、降级
  • 运维:用于检测和诊断,日志和监控,运维类代码很多都成了技术债

09粗放和精益

在通往"更好"的路上,总会经过"更多"这条路

好不是完美,好是一个过程,一个不断精益化的过程

10炫技和克制

避免写一些复杂不易理解的代码

11调试,编写和运行

一段代码写出来,基本就该在你头脑中跑过一遍了。等上线进入真实生产环境跑起来,你就可以拿真实的运行数据和头脑中的预期做出对比,如果差距较大,那可能就掩藏着问题,值得你去分析和思考。

12BUG的空间属性

因为程序没有对环境的异常做应对导致的bug的产生

13BUG的周期属性

周期特点,会周期性的复现,这种一般是资源泄漏

14BUG的反复出现

吸取教训避免重蹈覆辙

15计划的愿景

我们最后悔的是没做什么,而不是做过什么

  • "理想的自己"就是你想要成为什么人
  • "义务的自己"就是你应该干什么

16计划的方法

目标+拆解

脚踏实地

17计划的可行

一年52周,会有一些法定的长假和个人的休假安排,我们先扣除两周用于休假。那么一天业余8小时,一年算350天,那么一年总共有2800小时的业余时间。但实际这2800小时里还包括了你全部的周末和一些零星的假期,再预扣除每周8小时用于休闲娱乐、处理各种社会关系事务等等,那么你还剩下2400小时

兴趣让计划更容易启动,而承诺让计划得以完成

18计划的收获

量并不代表质

时间是有成本的,随着成长的过程,早期的成本低而选项多,后期的成本高且选项少

计划本质是对时间的分配

19计划到坚持,再到坚持不下去

没有那么多大起大落,我们大部分人的生活只是在经历一些平平凡凡的琐事。 也许其中有些会让你感到高兴与兴奋,有些又让你感到烦躁与郁闷。 但这些琐事都不会沉淀进历史中,被人们传诵上千年,它仅仅对你自己有意义。

20执行

每个人都会有自己不同的节奏

21信息过载与有效

信息是过载的,现在每48小时所产生的数据量,相当于从人类文明开始到2003年累计的数据总量

面对大量信息改如何应对

  • 信息和知识本身的价值
  • 我需要怎么的信息和知识

22知识和体系

  • 点 详细的知识点
  • 线 路径,对点的连接
  • 面 知识体系
  • 体 行业或者经济体,体到告诉增长形成趋势,获得发展

23能力和输出

对于个体,建立起一个初步的知识体系,到能真正充分发挥出这个体系的力量

对于团队

  • 流程规则,建立其运行轨道
  • 工具系统,支撑其高效运行
  • 规范共识,形成了协调合奏

24工作和学习

即使再忙,也会抽空看书夯实基础。成长是自己的事情,不能怪没有时间!

遇到瓶颈,详细需要面对哪些问题,都有答案吗?

25感知与测量

感知时间

很多别过都是后会无期的

为何人随着年龄的增大觉得时间过得越来越快?

有共性的回忆趋向粘合在一起,标志性的回忆倾向于鹤立鸡群

26切割和构建

27试试坏习惯

一门新技术很少是凭空冒出来的,了解它们的前世今生,会更有效地知道

  • 哪些方面已经有了成熟的方案
  • 哪些地方还在青涩的探索期

再结合它当前的边界,就知道

  • 如何定义清楚需要
  • 形成合理的技术方案
  • 不会产生过度的妄想

28提问

  • 如何问
  • 问什么
  • 为何问

如何问

别人的提问会交代解决场景,描述思路,问题约束,然后有一个障碍,问怎么解决障碍,而不是说我的目的是什么

  • 提供足够的信息,让人能够回答

展现你探索了那些路径,省去可能产生的反问

  • 提供更多的选项,让人方便回答
  • 提供交换价值,建立讨论基础,表达感谢态度,让人乐于回答

问什么

29偏好

30写作

需求、设计、实现、测试和交付

需求随时记录

设计分为

  • 概要设计
  • 详细设计

31画图

着重记录

32演讲

框架

演讲的框架和程序的架构有点类似,一般从下面几个方面来设计:

  • 目标:本次演讲需要达成的目标是什么?
  • 听众:本次演讲的受众是哪些人?
  • 重点:本次演讲要传递的关键点有哪些?

一场技术分享的框架线,可能有如下:

  • 引出主题:结合目标与听众来确定
  • 自我介绍:让听众了解你,证明你有资格讲这个主题
  • 重点结构:每一个关键点的分析、讲解,可以从以下方面来拆解
  • 问题:这个点上存在什么问题?
  • 历史:这个问题的历史由来是什么?
  • 方法:你是用什么方法解决这个问题的?
  • 原因:为什么要用这个方法,要在这个阶段,以及这样解决问题?
  • 细节深入:有一定细节深入,更有说服力
  • 总结回顾:结束前的再次总结和提炼,以加深印象

材料

  • PPT
  • 演讲稿
  • 故事,慈善募捐组织早就学会了,再大比例的穷困数据,也比不上一张衣不蔽体的小女孩照片来得有效

节奏

  • 开场
  • 峰终,如果峰终体验是好的,整体的体验也是好的

33