跳到主要内容

三种编程范式

· 阅读需 2 分钟

结构化编程 vs. 面向对象编程 vs. 函数式编程

  1. 结构化编程是一种对直接控制转移的约束。

    1. 可测试性:软件就像科学:科学不是通过证明陈述为真来工作的,而是通过证明陈述为假来工作的。结构化编程迫使我们递归地将程序分解为一组小的可证明函数。
  2. 面向对象编程是一种对间接控制转移的约束。

    1. 封装、继承、多态(指向函数的指针)并不是面向对象特有的。
    2. 但面向对象使多态的使用变得安全和方便。然后启用强大的==插件架构==与依赖反转
      1. 源代码依赖关系和控制流通常是相同的。然而,如果我们让它们都依赖于接口,依赖关系就会反转。
      2. 接口赋予独立部署的能力。例如,在部署Solidity智能合约时,导入和使用接口消耗的气体远远少于对整个实现进行操作。
  3. 函数式编程:不可变性。是一种对变量赋值的约束。

    1. 为什么重要?所有的竞争条件、死锁条件和并发更新问题都是由于可变变量造成的。
    2. ==事件溯源==是一种策略,我们存储事务,而不是状态。当需要状态时,我们只需从时间的开始应用所有事务。

将软件架构视为物理建筑

· 阅读需 2 分钟

什么是架构?

架构是软件系统的形状。将其视为物理建筑的全景。

  • 范式是砖块。
  • 设计原则是房间。
  • 组件是建筑。

它们共同服务于特定的目的,比如医院是为治愈病人而设,学校是为教育学生而设。

我们为什么需要架构?

行为与结构

每个软件系统为利益相关者提供两种不同的价值:行为和结构。软件开发人员负责确保这两种价值保持高水平。

::软件架构师由于其职位描述,更加关注系统的结构,而非其特性和功能。::

最终目标 - ==降低每个特性的人工资源成本==

架构服务于软件系统的整个生命周期,使其易于理解、开发、测试、部署和操作。 目标是最小化每个业务用例的人力资源成本。

知识工作者,如何进行真正放松的休息?

· 阅读需 3 分钟

为什么要休息?

  • 成长 = 压力 + 休息 如果人们承受过多压力但休息太少,他们就会感到疲惫。如果人们休息过多但压力太小,他们就无法成长。高效能者应该适当地分配压力和休息,以实现快速而可持续的成长。

什么是“真正放松”的意思?

知识工作者最宝贵的资源是==意志力和注意力==。真正放松的休息应该恢复这些资源。

如何进行真正放松的休息?

为了恢复意志力和注意力,指导原则是:

  1. 完全断开联系。远离互联网或任何消耗意志力和注意力的事物。
  2. 早且频繁地进行短暂休息。
  3. 走出办公室。中午进行任何与工作相关活动的员工在一天结束时被同事评为更疲惫。

放松的休息与不放松的休息

  1. 放松的休息:放松、打盹、散步、社交等。
  2. 不放松的休息:吃东西、认知(阅读新闻、查看电子邮件、玩视频游戏、观看视频等)。

系统解决方案

  • 短期

    1. 分散注意力并回到默认模式网络
      1. 在户外散步/跑步。
      2. 回归自然。
      3. 积极的建设性白日梦(PCD)
    2. 假装成别人来激励自己。
    3. 和朋友聊天。
    4. 喝一杯咖啡,然后立即小睡25分钟。
  • 中期

    1. 请几天假来充电,完全不工作。
  • 长期

    1. 冥想。
    2. 睡得好。良好的睡眠使技能和知识在大脑中“成长”。

怎样才能运气好?

· 阅读需 2 分钟

自证预言:相信自己运气好,自己的运气就会好,因为你会更愿意探索机会、接受挑战、坚持不懈;而不是想到了好的结果单纯的开心而已。

运气好的人有三个性格特征:

  1. 外向
  2. 开放
  3. 放松 (神经质程度低)

怎样制造好运气?

  1. 多参加一些新活动,体验一些新东西
  2. 要相信自己的直觉和兴趣
  3. 要乐观,踢球的时候,多抡几脚球,总有进的时候
  4. 善于在坏事中发现好事

好运气的本质是什么?

创造机会、发现机会、敢于行动

这跟正念(Mindfulness)有什么关系?

正念=跳出自己的主观视角,留意到周围事物的价值

佛学的观点

  • 我们反对“吸引力法则”,因为幻想好结果其实是一种“贪”。
  • 我们提倡系统化对待概率,这其实就是“色即是空”。
  • 我们鼓吹在例行的任务之外发现好运气,实际上是避免了“痴”。
  • 我们用全局思维破解正常化偏误,正是在实践“无我”。
  • 所以谁说佛学没用?你要真擅长佛学,像升官发财逢凶化吉之类的小事儿,根本就用不着求佛祖。

防抖、节流和请求动画帧

· 阅读需 1 分钟

这些是优化 UI 事件处理和使过渡更平滑的网页技术。

  • 防抖:将突发的事件(如按键)聚合为一个事件。
  • 节流:保证每 X 毫秒执行一次。比如每 200 毫秒检查一次滚动位置以触发 CSS 动画。
  • 请求动画帧:节流的替代方案。当你的函数重新计算并渲染屏幕上的元素时,你想要保证变化或动画的平滑。注意:不支持 IE9。

防抖和节流有什么区别?在这里尝试

为什么做出好的决策很难

· 阅读需 2 分钟

因为聚光灯效应:==Daniel Kahneman says “A remarkable aspect of your mental life is that you are rarely stumped,” and mistakenly believe “what you see is all there is.”== 人们总是只看到自己看到的和想看到的,很难跳出自己看自己,所以要经常问问自己,"为什么我会这么想"。

作者认为决策过程中有四大挑战,并提出了解决办法

  1. Narrow framing <> 拓宽选项
  2. Confirmation bias <> 用事实检验假设
  3. Short-term emotion <> 从远处看决策
  4. Over-confidence <> 为错误做准备

雷达里奥也说,Recognize that 1) the biggest threat to good decision making is harmful emotions, and 2) decision making is a two-step process (first learning and then deciding).

举例子讲述人们常常做出错误的决定

  • Career choices, for instance, are often abandoned or regretted. An American Bar Association survey found that 44% of lawyers would recommend that a young person not pursue a career in law.
  • A study of 20,000 executive searches found that 40% of senior-level hires “are pushed out, fail or quit within 18 months.”
  • More than half of teachers quit their jobs within four years.
  • One study of corporate mergers and acquisitions—some of the highest-stakes decisions executives make—showed that 83% failed to create any value for shareholders.

怎么办?用流程解决。==在决策中,流程比分析重要六倍。==

  • Because understanding our shortcomings is not enough to fix them.
  • 人们决策流程普遍过于简单
    • final decision maker to be both the challenger and the ultimate judge.
    • Franklin’s moral algebra
    • Pros-and-cons

如何预测趋势?

· 阅读需 5 分钟

获得易守难攻的战略高地的两种方法:

  1. 自主创新
  2. 借东风 exploit a wave of change

做事后诸葛亮很容易。要想做事前预测,则需要深入地理解过去和现在,透过现象看到本质,并因此能够推演到第二步第三步。可惜大多数人只能看到现在。

比如 1950 年代电视出来了之后,大家都能够意识到电影行业的日子不好过了,但是很少有人能够推演出,第二步则是独立电影的兴起。因为独立电影制作人能够摆脱传统 studio 的裙带关系,专心制作好电影,只有好电影才能把观众吸引到电影院来。

思科上了三个风口

  1. 软件和微处理器
  2. 公司网络
  3. IP网

常见的风口

  1. 固定成本暴涨。比如,资本密集型的大制作的电影催生出大电影公司。大型软件系统的研发成本催生出大软件公司。
  2. 放松管制。比如,中国改革开放。
  3. 预测偏误。
    1. 增长的幻觉。比如,很少有人能够预测到生意或者经济到了巅峰开始下降。增长是总会有个尽头,买过一个电视机的人不会立即买第二个电视机。==销售增长地越快,市场饱和地也就越快==
    2. 赢者通吃的幻觉。是,赢者通吃, 但是也不一定,企业内部会有大企业病,外部会有新的变革。
    3. 赢者恒赢的幻觉。比如雅虎。
  4. 现任者效应:不愿损害短期利益进行改革,类似Innovator’s delimma
  5. ==Attractor state "吸引子" 或者说是 “终局思维”,市场应该达到的状态。==

Attractor state "吸引子" / "终局思维" 是一个有趣的新概念。这里详细讲讲。它与公司的愿景的区别在于,愿景是公司独有的,但是吸引子是整个市场总体应该达到的均衡。 它有两个相关概念:加速因子 accelerants 和减速因子 impediments 。

  • 一个典型的加速因子是"证明效应",比如 Napster 让大家突然意识到 2.5MB 的音乐可以下载复制发送,比特币让大家突然意识到投资虚拟货币可以成为大富翁。
  • 一个典型的减速因子的例子是,人民对核电站的恐惧和阻碍,尽管人们都知道核能是未来的趋势。

分析一下报纸业。

拿纽约时报来讲,报纸印刷的费用大概是订阅收入的两到三倍,印刷费主要是由广告来摊付的。09年以来,出现了两个问题, 一个是其他唾手可得的新媒体的兴起,导致报纸业阅读量下降,另一方面,报纸上的广告被谷歌抢走了。

新闻媒体的差异化有三个维度:空间,频率,和深度。而本书作者认为,市场的吸引子是倾向于这些细分领域的专攻,而不是 大而全。在互联网+报纸的时候,从降低成本来讲,应该利用纽约时报的品牌,广泛地与各种各样的信息源合作,而不是依赖少量的职业记者。 读者群越是精准,越是能够多收广告费。

如何迅速积累声望?

· 阅读需 1 分钟

解决那些人人想解却无人能解的大问题,才是真正的高手之道。

古龙的小说《圆月弯刀》里,丁鹏初入江湖,以一招天外流星迅速崭露头角。他武艺高强,很快声名鹊起。故事里有个急于重振家族声望的配角郭云龙,向丁鹏请教,问如何成为一流人物。

丁鹏的回答既不同于传统的教诲,也颇具洞见。他直言:“你可以行侠仗义,逐渐积累声望,但那太慢。最快的方法,是当江湖上出现重大危机,人人束手无策之时,你能站出来,解决它。”

移动网页的渐进式网络应用(PWA)

· 阅读需 2 分钟

为什么选择渐进式网络应用?

  • 可以通过 Chrome 和 Safari 添加到主屏幕
  • 利用服务工作者离线工作
  • 通过推送通知增加用户参与度
  • 在所有浏览器中新用户的转化率提高 104%,在 iOS 上提高 82%

“渐进式”意味着改进不是二元和终结的,而是逐步演进的。

这是什么?

PWA = 为移动设备优化的网站 + manifest.json + 服务工作者加载和注册

如何将其添加到您的网站?

manifest.json 是简单的部分。将以下内容放入 example.com/manifest.json

{
"short_name": "短名称",
"name": "较长名称",
"icons": [
{
"src": "favicon.png",
"sizes": "192x192 150x150 144x144 64x64 32x32 24x24 16x16",
"type": "image/png"
}
],
"start_url": "/",
"display": "standalone",
"theme_color": "#de4c4f",
"background_color": "#f3f3f3"
}

并将以下内容添加到 HTML 的 <head>

<link rel="manifest" href="/manifest.json"/>
<link rel="apple-touch-icon" href="/favicon.png"/>

然后在 iOS 和 Android 上,用户可以将该网站添加到主屏幕。

然后 ... 服务工作者的加载和注册

我推荐使用 create-react-app 的服务工作者加载脚本, 它具有良好的安全实践,并采用 优先缓存策略。 并且它还包括注销功能。

注册部分更复杂 - 我们添加了以下 webpack 插件来准备 service-worker.js。

// ...
plugins: [
// ...
new SWPrecacheWebpackPlugin(
{
mergeStaticsConfig: true,
dontCacheBustUrlsMatching: /\.\w{8}\./,
filename: 'service-worker.js',
minify: false,
navigateFallback: '/',
navigateFallbackWhitelist: [/^(?!\/__).*/],
staticFileGlobs: [
`${OUTPUT_DIR}/**`,
],
stripPrefix: OUTPUT_DIR,
staticFileGlobsIgnorePatterns: [/\.map$/, /asset-manifest\.json$/],
dynamicUrlToDependencies: {
'/index.html': glob.sync(path.resolve(`${OUTPUT_DIR}/**/*.js`)),
},
}
),
],
// ...

这里的棘手部分是,如果您像我们一样有 SSR - 请小心指定 dynamicUrlToDependencies;否则,缓存可能无法更新。

MMRs、 中和剂和差异化因素

· 阅读需 1 分钟

产品特性有三种类型

  • MMRs:最低市场要求;每个客户期望和要求的基本特性
  • 中和剂:减轻竞争威胁
  • 差异化因素:竞争优势

客户通常会对MMRs和中和剂提供反馈。==产品管理团队必须负责加强初创公司的差异化因素。== 一旦市场认可了初创公司的优势,每个竞争对手都会争相复制。初创公司必须投资于这种差异化,以维持其市场领先地位。