Think

Pirate's kiss (1) - probability

1

Note: The main content is first written in Chinese, with the English translation following below.

Chinese Version

我打算写一系列的文章来记录我是如何在生活中应用 Pirate's kiss 这个理论的. 内容会涉及概率论, Gambling, 扑克, 交易, 投资等等.

什么是 Pirate’s kiss?

这个词要分开理解.

首先我们先理解kiss, 这里指KISS原则, 在英语里是Keep It Simple, Stupid, 当然我倾向于KISS = Keep It Stupid Simple.

KISS原则类似于奥卡姆剃刀, 就是尽量用简单的方式解决问题, 不仅仅是不要over kill, 而是要尽量的简单, Stupid Simple的那种简单.

然后是Pirate, 在这里指海盗精神, 就是不随大流, 不墨守成规, 有自己的思想, 知行合一, 在一些关键问题上, 不会轻易接受主流认知, 总是先质疑, 然后验证, 最后才是决定是否接受.

比如:

  1. 金融市场是有效的, 价格是当前所有信息综合起来的表现, 不存在套利机会
  2. 在二级市场里个人是无法战胜机构, 基金经理无法战胜指数
  3. 只要在X时候买入A股票长期看来能盈利
  4. 只要找到X指标, 交易就能盈利
  5. 有钱人都坏, 我变坏了也能赚到钱

所以Pirate's kiss原则就是, 当看到上述这些论点时:

Think Programming(2) - OO VS FP

Note: The main content is first written in Chinese, with the English translation following below.

Chinese Version

OO VS FP

接下来我想讨论一下 OO 和 FP. 先说结论:

只使用任何一个都不能写出能快速交付, 同时又容易维护的代码工程.

我们需要结合这两种编程模式的优点, 谨慎使用这些思想工具, 尤其是OO, 如果过度使用OO的一些编程思想, 例如: 继承, 代码会很快变得难以理解和维护.

未完待续…

English version

OO VS FP

Now I want to talk briefly about Object-Oriented (OO) and Functional Programming (FP). My conclusion is:

using either approach alone won’t help you write code that’s both quick to deliver and easy to maintain.

Think Programming(1) - Insights from My Coding Journey

Note: The main content is first written in Chinese, with the English translation following below.

Chinese Version

我编写商业软件到现在有10年的时间.

使用过的编程语言(按掌握程度排序): C/C++, Python, Python(machine learn), F#, Golang, Scala, Clojure, JavaScript

使用过的编程范式: Object-Oriented (OO), Functional Programming (FP)

实现过的软件项目: 低延迟TCP/UDP Server side Framework, 高并发订单系统, 利用machine learning实现的高性能预测系统等等

我计划在这篇文章里记录一下我对编程的一些思考, 而且这些想法随着我解决更复杂问题, 积累更多的经验后也会有些变化, 因此我会不断更新这篇文章.

自顶向下编程

有两种编程理念, 一种是自底向上, 一种是自顶向下.

自低向上: 先实现很多小的函数, 然后使用这些小函数组成很复杂的功能. 在很多讲lisp的书里, 经常会讲如何实践自底向上的编程思想.

自顶向下: 从使用者的角度, 先写完框架/函数API, 最后才是具体代码实现.

我赞同使用很多小的函数组成很复杂的功能这个编程思路, 但是在我的编程实践里, 我认为自顶向下才更容易写出高质量的代码.

举个例子: 假如我们要写一个网站,用来展示在不同的网站上,同一款汽车的最新销售信息, 方便用户选择最优的网站去购买汽车

如果使用自底向上的思路, 我们会依次实现这些代码

  1. 设计数据结构
  2. 去不同网站拉取数据的的代码
  3. 实现数据CRUD的代码
  4. 实现前端与后端数据交互的api
  5. 前端代码

但是如果使用自顶向下的思路, 我们会先写/画出框架, 然后依据框架给出API, 并不需要立刻实现具体代码逻辑.