# 程序人生 · 精选文集 (qiaopang.com) > 2013–2026 年深度技术、系统架构、AI 与智能体、工程管理与读书随笔精选文集。 - **Publisher**: 程序人生 · QiaoPang - **Canonical Origin**: https://qiaopang.com/ - **English Edition**: https://qiaopang.com/en/ - **Total Published Essays**: 207 (2014–2026, ~102.8 万字, bilingual Chinese & English) - **Sitemap**: https://qiaopang.com/sitemap.xml - **RSS Feed**: https://qiaopang.com/rss.xml - **Full-Text Search (ZH / EN)**: https://qiaopang.com/search/ | https://qiaopang.com/en/search/ ## Core Navigation - [首页 (Chinese Home)](https://qiaopang.com/) | [English Home](https://qiaopang.com/en/): 2013–2026 深度技术与随笔文集总览 - [全部文章 (All Essays)](https://qiaopang.com/posts/) | [English Essays](https://qiaopang.com/en/posts/): 按时间与主题筛选全部 207 篇文章 - [完整时间轴 (Timeline)](https://qiaopang.com/timeline/) | [English Timeline](https://qiaopang.com/en/timeline/): 2013–2026 编年史归档 - [主题专栏与连载系列 (Columns & Series)](https://qiaopang.com/topics/) | [English Columns](https://qiaopang.com/en/topics/): 五大主题专栏与四大连载系列 - [关于作者与文集 (About)](https://qiaopang.com/about/) | [About in English](https://qiaopang.com/en/about/): 文集简介与三大写作源仓库脉络 ## Five Thematic Columns (五大主题专栏) - [AI 与智能体](https://qiaopang.com/topics/ai-agents/) ([EN](https://qiaopang.com/en/topics/ai-agents/)) (33 篇): 大模型工程、Agent 架构哲学、AI 辅助编程范式演进、一人公司(OPC)与 Token 经济学。 - [系统与架构](https://qiaopang.com/topics/systems-architecture/) ([EN](https://qiaopang.com/en/topics/systems-architecture/)) (52 篇): 分布式系统、操作系统内核与调度器、网络与加密协议、Serverless 基础设施、云原生与区块链底层机制。 - [编程语言与工程](https://qiaopang.com/topics/languages-engineering/) ([EN](https://qiaopang.com/en/topics/languages-engineering/)) (65 篇): Rust、Elixir/Erlang、Python、Dart/Flutter、类型系统、编译器、元编程、重构、测试与软件工程之道。 - [工程管理与职场](https://qiaopang.com/topics/leadership-career/) ([EN](https://qiaopang.com/en/topics/leadership-career/)) (38 篇): 技术领导力、研发团队文化、硅谷与西雅图职场观察、招聘与面试、创业复盘与工程师成长路径。 - [读书与随笔](https://qiaopang.com/topics/essays-reading/) ([EN](https://qiaopang.com/en/topics/essays-reading/)) (19 篇): 《长日无痕》系列、马拉松长跑手记、历史与数学读书札记、行旅见闻与生活哲思。 ## Curated Series (重点连载系列) - **一人公司(第一季):从无服务器地基到生产级应用**: 从 AWS 账户安全边界、K8s 与无服务器的取舍、Rust Serverless 框架 Operon、私有包仓库 Chromatin、Golgi 应用开发到邀请制与多租户支付系统。(微信公众号付费内容,本站提供 20% 试读) - **一人公司(第二季):从搭台到做工具的八大商业闭环**: 聚焦全球独立开发者与微型团队的八大运营痛点:多角色沟通与商务经纪、GEO 获客、私信销售转化、安全与自愈运维、二线客服与反拒付、单客真实毛利对账、跨境税务与微并购退出。(微信公众号付费内容,本站提供 20% 试读) - **AI 编程范式、Agent 架构与工程师判断力**: 从第一性原理、Codex 三层抽象、DeepSeek Harness 插件架构,到 LLM 评估安全、人机控制权边界与 Tokenmaxing 时代的独立思考。 - **系统纹理:内核、调度器、网络与安全协议**: 深入 Linux 内存模型、CPU 微架构、进程与 O(1) 调度算法、WireGuard 与 Noise 加密协议、Pingora 网关及 Robinhood 邮件签名漏洞剖析。 ## All Published Essays (207 Articles, Newest First) - [一人公司:沟通与商务经纪](https://qiaopang.com/posts/2026-11-05-opc-communication/) / [EN: The One-Person Company: Communication and the Business Broker](https://qiaopang.com/en/posts/2026-11-05-opc-communication/) (2026-11-05 · AI 与智能体 · 公众号付费试读 20%): 在大公司里,客服、公关、商务、行政是五个部门;在一人公司里,所有消息最终都涌向你一个人。本文剖析一人公司在对外沟通上的真实痛点与现有工具短板,并从架构层面设计两款核心产品:按场景自动切换角色的统一收件箱,以及帮中腰部创作者谈商单的 AI 商务经纪人。 - [一人公司:从搭台到做工具](https://qiaopang.com/posts/2026-11-03-opc-overview/) / [EN: The One-Person Company: From Building the Stage to Building the Tools](https://qiaopang.com/en/posts/2026-11-03-opc-overview/) (2026-11-03 · AI 与智能体 · 公众号付费试读 20%): 一人公司系列新篇。二月份的八篇文章聊的是怎么用 AI 搭起自己的一人技术公司;这一组文章换个视角:当全球涌现出上亿个独立开发者、创作者和微型团队时,他们日常运转中有哪些还没被满足的软件需求? - [多智能体调度与实战手记](https://qiaopang.com/posts/2026-11-02-axon-and-multi-agent/) / [EN: Multi-Agent Orchestration in Practice: Axon, Ideafarm & Local MLX](https://qiaopang.com/en/posts/2026-11-02-axon-and-multi-agent/) (2026-11-02 · AI 与智能体): 当手头同时运行着 Claude Code、Codex、Duet、Muse 与 Agy 五套智能体工具时,真正的瓶颈不再是单次代码生成速度,而是跨工具的上下文流转、额度調度与移动端的随时接管。本文复盘近期自研统一控制平面 Axon、语音点子仓库 Ideafarm、Rust 版语音算子移植与分布式视频渲染引擎的实战手记。 - [Tokenmaxing 之后,谁在替谁思考?](https://qiaopang.com/posts/2026-10-09-tokenmaxing-and-judgment/) / [EN: After Tokenmaxing, Who Is Thinking for Whom?](https://qiaopang.com/en/posts/2026-10-09-tokenmaxing-and-judgment/) (2026-10-09 · AI 与智能体): Agent 可以替人执行很久,人却可能只思考了几秒。一次 AI 限额引发的争执,让我重新审视独立思考、产品判断,以及工作完成之后究竟学到了什么。 - [推荐一本老书:《Mathematics: From the Birth of Numbers》](https://qiaopang.com/posts/2026-08-16-mathematics-from-the-birth-of-numbers/) / [EN: Recommending an Old Book: *Mathematics: From the Birth of Numbers*](https://qiaopang.com/en/posts/2026-08-16-mathematics-from-the-birth-of-numbers/) (2026-08-16 · 读书与随笔): 瑞典外科医生花十年写成的 1100 页数学通史:一张从数的诞生通向微分方程的数学世界地图,把每个概念"为什么被发明"讲得清清楚楚。 - [一切皆插件:DeepSeek Harness 开源了,和 Codex 有什么不一样?](https://qiaopang.com/posts/2026-08-13-deepseek-harness/) / [EN: Everything Is a Plugin: DeepSeek Harness Is Open Source — So How Does It Differ from Codex?](https://qiaopang.com/en/posts/2026-08-13-deepseek-harness/) (2026-08-13 · AI 与智能体): DeepSeek 开源了 Harness:模型、工具、Agent Loop 全是插件,基于 Cordis 微内核,两百多个包。和 Rust 单体架构的 Codex 相比,它把「可替换」做成了架构本身,也把 Agent 的缰绳交到了每个人手里。 - [Tubi Meetup:怎样把 AI 变成一支工程团队](https://qiaopang.com/posts/2026-07-15-ai-talk/) / [EN: Tubi Meetup: How to Turn AI into an Engineering Team](https://qiaopang.com/en/posts/2026-07-15-ai-talk/) (2026-07-15 · AI 与智能体): 从软件、可穿戴设备与技术写作三个真实案例出发,拆解如何通过上下文、任务分解、反馈验证与多 Agent 协作,把 AI 从编程工具升级为能够持续交付的工程团队。 - [驯服昂贵的算力:一次机器学习训练平台的搭建手记](https://qiaopang.com/posts/2026-05-31-gcp-training/) / [EN: Taming Expensive Compute: Notes on Building a Machine Learning Training Platform](https://qiaopang.com/en/posts/2026-05-31-gcp-training/) (2026-05-31 · AI 与智能体): 一个看似只是搭 GKE 集群的小项目,最后长成了一套机器学习训练平台的雏形。本文从一次真实经历出发,讲清楚为什么训练平台的难点不在把 Pod 跑起来,而在任务提交、资源排队、状态观测、故障恢复等接缝处。 - [日志的未来:必也正名乎](https://qiaopang.com/posts/2026-04-30-events/) / [EN: The Future of Logs: Rectifying Names](https://qiaopang.com/en/posts/2026-04-30-events/) (2026-04-30 · 系统与架构): 我们花了十年,把可观测性盖成一座漂亮的大厦,地基却是漂浮的字符串:字段名靠默契、基数靠运气、账单靠忍。这篇文章给出一个激进的方案,用 protobuf 给每一件被观测的事正名,把日志、指标、审计统一成一份带版本、带 owner、带保留策略的事件目录,旁边留一扇叫 ForensicEvent 的逃生舱兜住所有未知未知。AI 已经成为代码的主笔,schema-first 的最后一道阻力随之消失。是时候让 schema 重新成为可观测性大厦的 - [比伪造更可怕:一封 Robinhood 亲自签名的钓鱼邮件](https://qiaopang.com/posts/2026-04-27-robinhood/) / [EN: More Terrifying Than Forgery: A Phishing Email Signed by Robinhood Itself](https://qiaopang.com/en/posts/2026-04-27-robinhood/) (2026-04-27 · 系统与架构): 这封邮件 SPF、DKIM、DMARC、ARC 四道认证全部通过,因为它真的就是 Robinhood 自己发出来的。攻击者没有伪造任何东西,他们让 Robinhood 替他们发了这封钓鱼邮件。 - [彻底抛弃多环境:用 Rust 与 Pingora 重塑下一代 Serverless 架构](https://qiaopang.com/posts/2026-03-21-post-k8s/) / [EN: Abandoning Multi-Environment Entirely: Reshaping the Next-Generation Serverless Architecture with Rust and Pingora](https://qiaopang.com/en/posts/2026-03-21-post-k8s/) (2026-03-21 · 系统与架构): 当我们退回原点重新思考"计算"的本质,会发现多环境是个幻觉,K8s 是个过度抽象,而 Serverless 的冷启动和连接池风暴是自找的。这篇文章拆解一套基于 Baggage Header 路由、Pingora 智能网关、Firecracker 微虚拟机和 Rust Data Bus 的无环境架构,试图回答:Post-Kubernetes 时代的计算该长什么样。 - [是时候认识 jj 了:Git 的下一个进化方向](https://qiaopang.com/posts/2026-03-09-jj/) / [EN: Time to Meet jj: Git's Next Evolutionary Step](https://qiaopang.com/en/posts/2026-03-09-jj/) (2026-03-09 · 编程语言与工程): Git 统治了版本控制二十年,但它的暂存区、脆弱的 rebase、动辄阻断的合并冲突,正在成为 AI 时代的绊脚石。jj 从底层重构了版本控制的心智模型,而且完全兼容 Git。这篇文章带你看清它为什么值得关注。 - [一人公司:付费系统的设计与实现](https://qiaopang.com/posts/2026-02-10-payment/) / [EN: The One-Person Company: Designing and Building a Payment System](https://qiaopang.com/en/posts/2026-02-10-payment/) (2026-02-10 · AI 与智能体 · 公众号付费试读 20%): 产品有了门禁,下一步就是收银台。本文详解如何构建一个独立的多租户计费服务,从信用额度系统到 Stripe 集成,从 Webhook 处理到框架级封装,一个人搞定完整的付费闭环。 - [一人公司:技术是基石,赚钱才是硬道理](https://qiaopang.com/posts/2026-02-09-summary/) / [EN: The One-Person Company: Technology Is the Foundation, but Making Money Is the Hard Truth](https://qiaopang.com/en/posts/2026-02-09-summary/) (2026-02-09 · AI 与智能体 · 公众号付费试读 20%): 一人公司系列收官。回顾七篇文章搭建的完整技术栈,介绍 AI 技能系统的设计,然后把视角从技术拉向商业:获客、定价、营销、商业模式。技术让你活下来,但赚钱才能让你活下去。 - [一人公司:邀请制访问控制的设计与实现](https://qiaopang.com/posts/2026-02-08-invitation-gating/) / [EN: The One-Person Company: Designing and Implementing Invite-Only Access Control](https://qiaopang.com/en/posts/2026-02-08-invitation-gating/) (2026-02-08 · AI 与智能体 · 公众号付费试读 20%): 产品上线后,第一道门该怎么设?本文详解如何用一个独立的邀请服务为所有应用统一把关,从后端到前端到框架集成,一个人搞定全链路。 - [一人公司:当地基打好后,如何快速盖楼?](https://qiaopang.com/posts/2026-02-07-golgi-app/) / [EN: The One-Person Company: Once the Foundation Is Laid, How Fast Can You Raise the Building?](https://qiaopang.com/en/posts/2026-02-07-golgi-app/) (2026-02-07 · AI 与智能体 · 公众号付费试读 20%): 基础设施到位后,一个人一天内能从零搭出一个生产级应用吗? - [一人公司:用无服务器架构打造私有包仓库](https://qiaopang.com/posts/2026-02-06-serverless-private-registry/) / [EN: The One-Person Company: Building a Private Package Registry on Serverless](https://qiaopang.com/en/posts/2026-02-06-serverless-private-registry/) (2026-02-06 · AI 与智能体 · 公众号付费试读 20%): 内部代码库一旦膨胀,私有包仓库就是刚需。本文手把手教你用无服务器架构在 AWS 上从零搓一个同时支持 Cargo 和 NPM 的私有仓库,月成本压到 10 美元以内。 - [一人公司:打造低成本无服务器框架](https://qiaopang.com/posts/2026-02-05-low-cost-serverless-framework/) / [EN: The One-Person Company: Building a Low-Cost Serverless Framework](https://qiaopang.com/en/posts/2026-02-05-low-cost-serverless-framework/) (2026-02-05 · AI 与智能体 · 公众号付费试读 20%): 这篇文章手把手拆解如何从零撸一个极致低成本的 Rust 无服务器框架。 - [一人公司:k8s 的理想蓝图与现实取舍](https://qiaopang.com/posts/2026-02-04-ideal-infra/) / [EN: The One-Person Company: Kubernetes’ Ideal Blueprint and Real-World Trade-offs](https://qiaopang.com/en/posts/2026-02-04-ideal-infra/) (2026-02-04 · AI 与智能体 · 公众号付费试读 20%): 为一人 AI 技术公司设计了一套企业级 Kubernetes 基础设施,最后却把它打入了冷宫。这篇文章拆解这套理想架构的设计思路,聊聊为什么最终选了更轻量的方案。完美主义 vs 实用主义,独立开发者早晚要面对这道选择题。 - [一人公司:基础设施](https://qiaopang.com/posts/2026-02-03-infra-foundation/) / [EN: The One-Person Company: Infrastructure](https://qiaopang.com/en/posts/2026-02-03-infra-foundation/) (2026-02-03 · AI 与智能体 · 公众号付费试读 20%): 这篇文章从第一性原理出发,讲述如何用工业级标准构建账户安全、审计体系和成本控制 —— 为什么这些「看不见的活儿」决定了你能走多远。 - [AI 编程的大势与修行](https://qiaopang.com/posts/2026-02-02-ai-intro/) / [EN: The Tide of AI Programming and the Engineer's Discipline](https://qiaopang.com/en/posts/2026-02-02-ai-intro/) (2026-02-02 · AI 与智能体): AI 编程已从星星之火燃成燎原之势。我们该如何认清形势、掌握规律、找到自己的位置?这篇文章从战略高度审视氛围编程的本质,探讨工程师在新时代的生存之道。 - [当 AI 比你更"熟练"时,如何划定控制权的边界?](https://qiaopang.com/posts/2025-12-02-ai-coding/) / [EN: When AI Is More "Skilled" Than You: Where Do You Draw the Line on Control?](https://qiaopang.com/en/posts/2025-12-02-ai-coding/) (2025-12-02 · AI 与智能体): AI 在具体技法上往往比工程师更"熟练",但缺乏战略直觉。我们需要一套可量化的风险评估框架,来决定何时放手让 AI 自动生成,何时死死握住方向盘。 - [当 Agent 遇见 Serverless:一场静悄悄的开发范式革命](https://qiaopang.com/posts/2025-11-01-agent-era/) / [EN: When Agents Meet Serverless: The Quiet Revolution in How We Build Software](https://qiaopang.com/en/posts/2025-11-01-agent-era/) (2025-11-01 · AI 与智能体): 从一个 email 网关的开发实践说起,探讨 AI Agent 如何改变 Serverless 开发的范式,以及开发者角色的深刻变化。 - [GenAI 代码生成的安全迷思:当 AI 成为新的攻击面](https://qiaopang.com/posts/2025-09-11-genai-security/) / [EN: The Security Myth of GenAI Code Generation: When AI Becomes the New Attack Surface](https://qiaopang.com/en/posts/2025-09-11-genai-security/) (2025-09-11 · AI 与智能体): 深入探讨 GenAI 在代码生成和应用集成中的安全问题。从 41% 的漏洞率到提示注入攻击,从供应链安全到 OWASP Top 10 for LLM,全面解析如何在享受 AI 生产力提升的同时,构建安全的 AI 应用系统。 - [LLM 应用的质量守门人:从评估框架到安全防护的系统化思考](https://qiaopang.com/posts/2025-09-10-llm-evaluation-security/) / [EN: The Quality Gatekeepers of LLM Applications: A Systematic Approach from Evaluation Frameworks to Security Guardrails](https://qiaopang.com/en/posts/2025-09-10-llm-evaluation-security/) (2025-09-10 · AI 与智能体): 深度剖析 LLM 应用的评估体系与安全框架,从确定性指标到模型评判,从 RAG 三元组到智能体轨迹验证,系统化探讨如何构建可信赖的 AI 应用,让每一个 LLM 输出都经得起质量与安全的双重考验。 - [编程语言的慢演进:从 1960 年代到 AI 时代的语言进化悖论](https://qiaopang.com/posts/2025-09-09-programming-languages-evolution/) / [EN: The Slow Evolution of Programming Languages: The Paradox of Language Evolution from the 1960s to the AI Era](https://qiaopang.com/en/posts/2025-09-09-programming-languages-evolution/) (2025-09-09 · 编程语言与工程): 深度解析 Kevlin Henney 关于编程语言演进的洞察,探讨为什么在技术飞速发展的今天,编程语言却展现出惊人的稳定性。从 ALGOL 68 的革新到 AI 时代的保守效应,揭示语言进化背后的社会因素与技术惯性。 - [CPU 的魔法:每个程序员都应该理解的处理器工作原理](https://qiaopang.com/posts/2025-09-08-cpu-architecture/) / [EN: The Magic of the CPU: How Processors Work, and Why Every Programmer Should Understand It](https://qiaopang.com/en/posts/2025-09-08-cpu-architecture/) (2025-09-08 · 系统与架构): 深入探讨现代 CPU 的工作原理,从流水线架构、分支预测到乱序执行,通过实际案例和性能分析工具,揭示处理器如何通过精妙的设计实现高性能计算,帮助开发者写出更高效的代码。 - [微服务十年:从小而美的理想到复杂性的回归](https://qiaopang.com/posts/2025-09-07-microservices-evolution/) / [EN: Ten Years of Microservices: From the Ideal of Small and Beautiful to the Return of Complexity](https://qiaopang.com/en/posts/2025-09-07-microservices-evolution/) (2025-09-07 · 系统与架构): 深度解析 James Lewis 在 GOTO 2024 的演讲,回顾微服务架构十年演进历程,探讨其九大核心特性、设计理念、以及在云原生时代的新挑战与反思。 - [架构师的赋能之道:如何让团队更聪明](https://qiaopang.com/posts/2025-09-06-thinking-like-architect/) / [EN: The Architect's Way of Empowerment: How to Make Teams Smarter](https://qiaopang.com/en/posts/2025-09-06-thinking-like-architect/) (2025-09-06 · AI 与智能体): 架构师的真正价值不在于做出所有决定,而在于成为团队的赋能者,通过跨层思维、隐喻沟通、多维视角等方法,让团队变得更聪明,做出更好的决策。从组织层级穿梭到现实世界的架构洞察,全面解析如何培养架构思维。 - [Linux 内核内存模型:理解多核世界的规则](https://qiaopang.com/posts/2025-09-05-linux-memory/) / [EN: The Linux Kernel Memory Model: Understanding the Rules of a Multicore World](https://qiaopang.com/en/posts/2025-09-05-linux-memory/) (2025-09-05 · 系统与架构): 我们从一个诡异的并发 Bug 出发,深入探索 Linux 内核内存模型的精妙设计。当多核处理器让内存访问变得不可预测,我们如何在性能与正确性之间找到平衡?这是一场关于事件、关系与因果的哲学思辨。 - [AI时代的教育革命:让孩子成为人工智能的主人](https://qiaopang.com/posts/2025-09-04-ai-for-kid/) / [EN: The Education Revolution in the Age of AI: Raising Children to Be Masters of the Machine](https://qiaopang.com/en/posts/2025-09-04-ai-for-kid/) (2025-09-04 · AI 与智能体): 深度探讨如何在AI浪潮下教育8-15岁孩子,通过「引导」而非「堵」或「放」的策略,培养孩子正确使用AI工具的能力,让他们成为AI的主人而非被支配者,在实践中学会驾驭这个时代最重要的工具。 - [大型软件的生存哲学:从复杂到简单的设计智慧](https://qiaopang.com/posts/2025-09-03-architecture/) / [EN: The Survival Philosophy of Large Software: Design Wisdom from Complexity to Simplicity](https://qiaopang.com/en/posts/2025-09-03-architecture/) (2025-09-03 · 编程语言与工程): 深度探讨大型软件系统的设计哲学,从"一个人能写完"的愿景出发,阐述如何通过黑盒设计、风险隔离、显式契约等原则,构建持久、可扩展、可并行的软件架构,实现从复杂到简单的设计智慧。 - [当 AI 成为程序员:编程语言需要怎样的进化?](https://qiaopang.com/posts/2025-08-11-ai-language/) / [EN: When AI Becomes the Programmer: How Must Programming Languages Evolve?](https://qiaopang.com/en/posts/2025-08-11-ai-language/) (2025-08-11 · AI 与智能体): 深度探讨 AI 时代编程语言的演进方向,从人类优化的抽象历史到 AI 代码生成的正确性危机,再到面向 AI 原生的设计,揭示编程范式从"语法到结构"、"实现到规约"的根本性转变。 - [Codex架构哲学:三层抽象与人机协作的设计智慧](https://qiaopang.com/posts/2025-08-10-codex/) / [EN: The Architecture Philosophy of Codex: Three Layers of Abstraction and the Design Wisdom of Human-AI Collaboration](https://qiaopang.com/en/posts/2025-08-10-codex/) (2025-08-10 · AI 与智能体): 深度解析OpenAI Codex CLI的架构设计,从队列对通信模式到Session、Task、Turn三层抽象,探讨优雅架构如何体现对人机协作本质的深刻理解,以及错误处理、状态管理和扩展性设计的哲学思考。 - [重塑人才培养:AI时代的成长新路径](https://qiaopang.com/posts/2025-08-09-relationship/) / [EN: Reinventing Talent Development: A New Path to Growth in the Age of AI](https://qiaopang.com/en/posts/2025-08-09-relationship/) (2025-08-09 · AI 与智能体): 当AI像缆车一样改变了传统的"爬山"成长路径,我们需要重新设计人才培养体系。从"动手做"到"指挥做"和"审查做",从"技术尖兵"到"思想政委",在新的生产力条件下探索科学的成长方法。 - [从工匠到向导:AI时代程序员的角色重塑](https://qiaopang.com/posts/2025-08-08-value/) / [EN: From Craftsman to Guide: Redefining the Programmer's Role in the Age of AI](https://qiaopang.com/en/posts/2025-08-08-value/) (2025-08-08 · AI 与智能体): 当AI成为强大的代码生产工具,程序员的价值从"编写"转向"判断、澄清、担责、引领"。我们不再是最强的登山者,而要成为优秀的向导,在技术、商业和人性的交叉路口做出智慧的权衡。 - [AI 时代的技术债重新定义:从代码到意图的三重债务](https://qiaopang.com/posts/2025-08-07-tech-debt/) / [EN: Redefining Technical Debt in the AI Era: The Threefold Debt from Code to Intent](https://qiaopang.com/en/posts/2025-08-07-tech-debt/) (2025-08-07 · AI 与智能体): 当AI成为代码的主要生产者,技术债的本质从"代码写得好不好"转向"想得好不好"。我们需要建立从规约到洞察的进化闭环,成为意图的精确表达者和系统行为的策展人。 - [AI 时代下程序员角色的转变](https://qiaopang.com/posts/2025-08-06-ai-task/) / [EN: The Shifting Role of the Programmer in the Age of AI](https://qiaopang.com/en/posts/2025-08-06-ai-task/) (2025-08-06 · AI 与智能体): 我们不再是建造者,而是这个进化系统的设计者和领航员。我们通过不断完善“意图”的表达,来引导AI为我们塑造一个越来越接近完美的世界。 - [对话苏格拉底:羊吃人的圈地运动](https://qiaopang.com/posts/2025-08-05-ai-revolution/) / [EN: Dialogue with Socrates: The Enclosure Movement Where Sheep Devoured Men](https://qiaopang.com/en/posts/2025-08-05-ai-revolution/) (2025-08-05 · AI 与智能体): 探讨 AI 革命可能带来的社会变革,以及我们如何应对。 - [和 Gemini 关于第一性原理的对话:第二弹](https://qiaopang.com/posts/2025-08-04-first-principles-2/) / [EN: A Conversation with Gemini on First Principles: Round Two](https://qiaopang.com/en/posts/2025-08-04-first-principles-2/) (2025-08-04 · AI 与智能体): 探讨第一性原理在优雅、影响力、动力、友谊和辩论中的应用,揭示其背后的深刻哲学。 - [和 Gemini 关于第一性原理的对话](https://qiaopang.com/posts/2025-08-03-first-principles/) / [EN: A Dialogue with Gemini on First Principles](https://qiaopang.com/en/posts/2025-08-03-first-principles/) (2025-08-03 · AI 与智能体): 探讨第一性原理在创新、领导力、问题解决、谈判、财富、写作、健身、幸福、生产力、战略、改变、说服、自由、营销、故事、幽默和智慧中的应用。 - [为了公众号这碟醋,我用 Rust 包了顿饺子](https://qiaopang.com/posts/2025-08-02-chat-with-ai/) / [EN: All for a Dish of Vinegar: Wrapping a Batch of Dumplings in Rust for My WeChat Blog](https://qiaopang.com/en/posts/2025-08-02-chat-with-ai/) (2025-08-02 · AI 与智能体): 和 AI 聊天一时爽,发公众号排版火葬场。为了把 Markdown 优雅地搬运到微信,我用 Rust 写了个自动化上传工具,此文为记。 - [硅谷手记:破壁与重逢](https://qiaopang.com/posts/2024-12-30-silicon-valley-notes-2/) / [EN: Silicon Valley Notes (2018–2024): Systems Grain and Reunion](https://qiaopang.com/en/posts/2024-12-30-silicon-valley-notes-2/) (2024-12-30 · 读书与随笔): 辑录 2018 至 2024 年间的北美行思片羽:从挥别旧金山北上西雅图探索加密协议与底层系统、在福克斯并购契机下重返 Tubi 见证中国团队突破百人里程碑,到拉斯维加斯见证 Rust 登堂入室、纽约冬夜出租车里的都市切片与西雅图暴风雪停电周的烟火日常。 - [2020 活久见:欧美主流 app「熔断」了](https://qiaopang.com/posts/2020-05-04-facebook-sdk/) / [EN: 2020: Living Long Enough to See Everything — Mainstream Western Apps Trip Their "Circuit Breakers"](https://qiaopang.com/en/posts/2020-05-04-facebook-sdk/) (2020-05-04 · 系统与架构): 世界上只有两件事是不可避免的,那就度是税收和死亡。 本杰明·富兰克林 在海外做移动端应用开发,有一家公司是几乎不可避免的:facebook(以下简称 FB)。它打造(并且几乎垄断)了从获客到获利(广告)的一条龙服务,使得你无法抵制那巨大的诱惑 —— 前提是你要在自己的 app 里装入 FB 的 SDK。 在 app 里装第三方的 SDK,享受很多「免费」的服… - [为什么有的语言「不能」编译成 WebAssembly?](https://qiaopang.com/posts/2020-04-07-webassembly/) / [EN: Why Are Some Languages 'Unable' to Compile to WebAssembly?](https://qiaopang.com/en/posts/2020-04-07-webassembly/) (2020-04-07 · 编程语言与工程): 在上一篇文章「dart:失之东隅收之桑榆」里,我写了这样一句: dart 也许未来可以支持 WebAssembly(类似 golang,有没有意义再说);而 TypeScript 没有这种可能。 于是很多 TypeScript 的拥趸不开心了,为什么说我家宝宝不能支持 WebAssembly(下文称 WASM)?有人找出了证据:看,AssemblyScrip… - [dart:失之东隅收之桑榆](https://qiaopang.com/posts/2020-04-06-dart/) / [EN: Dart: What Is Lost in the East Is Gained in the West](https://qiaopang.com/en/posts/2020-04-06-dart/) (2020-04-06 · 编程语言与工程): 一个月前,如果我要为自己最看不上的三个半语言排个名,dart 恐怕会位列其中。dart 是 google 在 2011 年就推出的编程语言,目标是成为一个结构化的 web 编程语言,暗藏着取代人们天天用又天天骂的 javascript 的野心。记得大约 2014 年前后,我在 youtube 上看了 goto conference 的一个关于 dart 语言… - [flutter: 一周感悟](https://qiaopang.com/posts/2020-03-30-flutter/) / [EN: Flutter: Impressions After One Week](https://qiaopang.com/en/posts/2020-03-30-flutter/) (2020-03-30 · 编程语言与工程): 对于一个喜欢追求新技术的人来说,flutter 火爆了一年多我却没有尝鲜,实在是说不过去。我之所以对 flutter 不感冒,源于我对 flutter 所使用的 dart 语言的无知 —— 我觉得既然市面上有 typescript 这样可以满足 flutter 需要的语言,为何要用 dart 这样一个行将就木的语言呢?但最近有个朋友给我展示了他用 flutt… - [暴走的程序员](https://qiaopang.com/posts/2020-01-13-angry-programmer/) / [EN: The Programmer's Meltdown](https://qiaopang.com/en/posts/2020-01-13-angry-programmer/) (2020-01-13 · 工程管理与职场): 今天一篇 "a sad day for rust" 霸榜了 hacker news。actix-web 的作者 fafhrd91 在无法忍受 "unsafe 论战" 之后,决绝地将这个在各大评测网站名列第一的 web 框架下线了。一时间社区叫苦不迭,所有使用了 actix-web 作为依赖的项目,都受到影响。这件事的影响力虽然不如之前让半个互联… - [如何安全地保存密码?](https://qiaopang.com/posts/2019-12-17-cellar/) / [EN: How to Store Passwords Safely?](https://qiaopang.com/en/posts/2019-12-17-cellar/) (2019-12-17 · 系统与架构): 如今的互联网生活,让每个人都离不开密码 — 操作系统有开机密码(用户密码),各种应用有登录密码,甚至还有交易密码。形形色色的密码让用户头皮发麻,要么使用重复的不那么健壮的密码,要么不得不依赖于各种密码保存服务,比如 1password。我常常在想,有没有一种方式,可以让所有的密码从一个主密码中派生出来,就像比特币 BIP44 钱包派生那样? 正巧,今早看了 … - [用 noise 协议的思路来点对点加密文件?](https://qiaopang.com/posts/2019-12-02-conceal/) / [EN: Encrypting Files Peer-to-Peer with the Noise Protocol?](https://qiaopang.com/en/posts/2019-12-02-conceal/) (2019-12-02 · 系统与架构): 在之前介绍 noise 协议的时候,我写了这样一种应用方案: 此外,Noise 协议还可以用于加密文件 —— 只要我有你的公钥,我可以使用单向握手(7.4)加密某个文件(附带握手时发送的消息),然后传输到某个不安全的位置(比如网盘,FTP,IPFS,甚至区块链中),该文件只有拥有私钥的人才能解密。这种应用很有意思,因为它具备非对称加密的安全性,同时又具备对称… - [我们随手做的 git stash,究竟干了什么?](https://qiaopang.com/posts/2019-11-26-git-stash/) / [EN: What Exactly Does Our Casual `git stash` Do Under the Hood?](https://qiaopang.com/en/posts/2019-11-26-git-stash/) (2019-11-26 · 编程语言与工程): git stash 是程序员的至宝。老板 biangbiang 甩来一个 case,说这个要下班之前 hot fix,咋办,stash,切到 release 对应的分支,缝缝补补;产品 kuangkuang 砸来一个需求更新,说这个简单,小哥哥帮帮我先做了,咋办,stash 切一个新的 feature 分支,撸袖子干。如果没有 git stash,人生至少要… - [10 分钟重新认识 git](https://qiaopang.com/posts/2019-11-25-git/) / [EN: Rediscovering Git in 10 Minutes](https://qiaopang.com/en/posts/2019-11-25-git/) (2019-11-25 · 编程语言与工程): 最近对 git 的底层实现异常迷恋,周末抽空用 rust 和 rocksdb 实现了一个乞丐版的 object store - 可以存储 blob,tree,commit 三种对象。之所以用 rocksdb,是因为我不太喜欢文件系统里的那些细碎的 git 对象,我也没太研究 packfile 是如何进行差分编码的,rocksdb 恰好解决了这两个不爽。本来想… - [Noise 框架:构建安全协议的蓝图](https://qiaopang.com/posts/2019-11-11-noise-protocol/) / [EN: The Noise Framework: A Blueprint for Building Secure Protocols](https://qiaopang.com/en/posts/2019-11-11-noise-protocol/) (2019-11-11 · 系统与架构): Noise Protocol Framework(以下简称 Noise)是一个用于构建安全协议的框架。与 TLS,IPSec 这样的有完整实现的协议不同,Noise 更多像是一个蓝图,它为那些想创建自己的安全协议的开发者提供了一套模板。就好像元编程之于编程,Noise 是协议的元协议(meta-protocol)。 诸君也许会问:既然有了 TLS,我们为何还… - [Wireguard:简约之美](https://qiaopang.com/posts/2019-11-04-wireguard/) / [EN: WireGuard: The Beauty of Simplicity](https://qiaopang.com/en/posts/2019-11-04-wireguard/) (2019-11-04 · 系统与架构): 本文共 4300 字,普通阅读需要 10 分钟,精读需要 30 分钟。 最近团队内部的 BBL,我分享了 Wireguard。Wireguard(以下简称 WG)作为新一代的 VPN 的代表,可能很多做技术的同学都不陌生。和其它 VPN 技术一样,我们可以使用它在家庭网络和公司网络之间搭建一条安全的信道,由此可以访问「内网」的数据和应用。 在具体讲 WG 之… - [1024节献礼:那些年,我追过的视频](https://qiaopang.com/posts/2019-10-24-videos/) / [EN: A 1024 Day Tribute: The Videos I've Chased Over the Years](https://qiaopang.com/en/posts/2019-10-24-videos/) (2019-10-24 · 读书与随笔): 上篇文章介绍了几个视频,有小伙伴私信我能不能介绍更多的视频好闲来无事好观摩一下。正好今天是 1024 节,我就豁出去了,把我看过的一些直击心灵的高清无码视频给大家捋一捋。 Bret Victor 的神作。这个 video 当时带给我的震撼是全方位的,他展现了优秀的工具是如何能够帮助人们思考和创造。我在很多场合都放过这个视频的部分或者全部,即便现在回顾,依旧能… - [冥想盆](https://qiaopang.com/posts/2019-10-21-pensieve/) / [EN: The Pensieve](https://qiaopang.com/en/posts/2019-10-21-pensieve/) (2019-10-21 · 读书与随笔): 有次在和同事 1:1 的时候,被提到了这样一个问题:你是如何能写出内容如此丰富的文字呢? 这个问题问得我有些楞。我虽然这两年来文章更新的频率断崖式下跌,但平胸而论,我要是想写,要是有时间去写,一天一篇文字,并不在话下。最近我给家里大女儿开课,顺手开启了一个比较私人的公众号,把课堂上的流水账记录下来(主要是想以后教妹妹的时候可以直接捡现成的),一个月来,已经写… - [于小微处见大功夫](https://qiaopang.com/posts/2019-09-28-a-piece-of-code/) / [EN: Great Craft in the Smallest Details](https://qiaopang.com/en/posts/2019-09-28-a-piece-of-code/) (2019-09-28 · 编程语言与工程): 今天 code review 时,见到这样一段代码: 为了方便阐述,我把变量名稍微做了调整,隐去不必要的细节。这段代码乍一看问题不大,传入的 inputvalue 被分成两部分,一部分是这次交易的佣金,计入了 balance2,一部分是剩下的部分,计入了 balance1。 仔细想想,这段代码有两个大的问题: 1. 不符合 Open-close Princi… - [沙箱时代](https://qiaopang.com/posts/2019-09-24-sandboxing/) / [EN: The Age of Sandboxes](https://qiaopang.com/en/posts/2019-09-24-sandboxing/) (2019-09-24 · 系统与架构): (一) 23 年前,也就是 1995 年的 12 月 4 日,当 Brendan Eich 带领下的团队为 netscape navigator 添加了一门蹩脚的由 scheme 语言的思想,self 语言的面向对象模型(prototype)和 Java 语言的语法构成的「四不像」- javascript 后,谁也不曾预料,软件开发的沙箱时代就此悄然开启。 … - [所见,所感,所思,所悟 - 读《非平面》](https://qiaopang.com/posts/2019-09-23-unflatterning/) / [EN: What I Saw, Felt, Thought, and Understood: On *Unflattening*](https://qiaopang.com/en/posts/2019-09-23-unflatterning/) (2019-09-23 · 读书与随笔): 前几日,暑期将尽,老婆准备带孩子回国,问我有什么要捎过来的。我恰好想起朋友圈有好几个朋友先后推荐了《非平面》,于是在豆瓣上查了查,震惊于其是一本以漫画形式呈现的博士论文,忙不迭让她带本回来。书拿回来之后,当晚我就看完了一遍,通体舒畅,似醍醐灌顶,如露入心。恰逢有朋友来美国出差,我便又让其帮忙买了三本带过来我好馈赠好友。随即,我给公司订了两本英文版,后又让国内… - [换个姿势读《资治通鉴》?](https://qiaopang.com/posts/2019-09-03-tongjian/) / [EN: Reading the Zizhi Tongjian in a Different Posture?](https://qiaopang.com/en/posts/2019-09-03-tongjian/) (2019-09-03 · 读书与随笔): 起屠维大渊献。 读过《通鉴》的朋友看到这个起手式会会心一笑。这就跟「地振高冈,一派溪山千古秀」一样,是《通鉴》里的黑话。 作为一个通读过《史记》(《书》《表》除外)的程序员,《资治通鉴》这样的大部头我读起来还是觉得非常不方便。首先是时间上的开销很大 —— 一页纸往往要读上半小时到一小时,其中免不了查阅词典,了解生僻字词的读音和释义;其次是难以深度阅读 —— … - [实习生娜娜](https://qiaopang.com/posts/2019-09-02-nana/) / [EN: Nana the Intern](https://qiaopang.com/en/posts/2019-09-02-nana/) (2019-09-02 · 工程管理与职场): 我对实习生的要求,除去学习能力外,便是足够长的实习时间。所谓「足够长」,我的定义是至少两三个月。小于这个长度,往往还没有开始贡献有价值的工作,实习生便带着写满好话的评定拍屁股走人了。 娜娜本来原定是六月初来实习的。然而因为她学校办理 EAD(Employment Authorization Document)令人发指的低效,她最终八月初才来报道。这个暑期,我… - [沅有芷兮:类型系统的数学之美](https://qiaopang.com/posts/2019-07-23-type-system/) / [EN: The Yuan Has Its Angelica: The Mathematical Beauty of Type Systems](https://qiaopang.com/en/posts/2019-07-23-type-system/) (2019-07-23 · 编程语言与工程): 对大多数人而言,rust 最令人兴奋的是所有权的概念,零成本抽象的能力,以及通过合适的约束巧妙解决内存安全和线程安全两大难题的优雅 —— 记得看过一个统计,linux kernel 里面这两类 bug 占据了 1/2 强。也就是说,你只要学会了 rust,就躺着消弭了 50% 的难啃的让 kernel developer 都闻之变色的 bug。 但对我来说,… - [软件项目供应链管理的迷思](https://qiaopang.com/posts/2019-07-22-software-supply-chain/) / [EN: The Myth of Software Supply Chain Management](https://qiaopang.com/en/posts/2019-07-22-software-supply-chain/) (2019-07-22 · 编程语言与工程): 软件项目为什么没有供应链管理呢?如果要为软件项目定义供应链,应该是什么样子呢?它会有什么安全风险?你还记得 leftpad 事件么?你经历过 event-stream 被黑客巧妙利用从而神不知鬼不觉盗窃你的资产的事件么?软件的供应链管理,或者说依赖管理,越来越变得重要起来。 最近伟创力被华为踢出其供应链的事情,想必大家的朋友圈都刷了屏。对于一家硬件公司来说,… - [谈谈 Bitmap](https://qiaopang.com/posts/2019-05-27-bitmap/) / [EN: A Practical Look at Bitmaps](https://qiaopang.com/en/posts/2019-05-27-bitmap/) (2019-05-27 · 系统与架构): 产品发布在即,同事遇到了一个 API 的性能问题和我探讨: 我们产品自带的 explorer 有个 GraphQL API,返回 N 个非空区块。这个 API 可以这么调用:从最新的区块起,跳过 N 个非空区块,返回接下来 M 个非空区块。 在 API 设计中,跳过 N 条数据(为了分页)而返回满足某种过滤条件的 M 个结果,是非常常见但并不太好实现的需求 … - [ABT network 部署记](https://qiaopang.com/posts/2019-04-30-deploy-abt-network/) / [EN: The ABT Network Deployment Chronicle](https://qiaopang.com/en/posts/2019-04-30-deploy-abt-network/) (2019-04-30 · 系统与架构): 两天前,也就是 3 月 28 日,ABT network 正式发布。ABT network 以完全去中心化方式连接编织多条区块链形成的网络,以云节点和织链为网的方式重新定义了新一代区块链基础架构。本文谈谈 ABT network 诞生前发生的有趣经历。 为方便阅读,先简单介绍一下本文谈到的一些概念: ABT network:多条区块链形成的网路。 ABT c… - [数学之美](https://qiaopang.com/posts/2018-11-26-beauty-of-math/) / [EN: The Beauty of Mathematics](https://qiaopang.com/en/posts/2018-11-26-beauty-of-math/) (2018-11-26 · 系统与架构): 把数学的美妙绝伦传递给一个六岁的女孩儿并不是件容易的事情。我们可以轻而易举地心算出任何一个 100 以内的数乘以 3 的结果,也可以道出「乘法是加法的累进」这样的总结,但六岁的孩子并不理解其中的奥秘。前两天我老婆许是受了数独的启发,在白纸上画了十乘十的格子,给孩子演示 100 以内任意一个数乘三,乘七,乘十一的结果(因为除法是乘法的逆运算,你也可以理解为可以… - [在程序中时间旅行](https://qiaopang.com/posts/2018-10-31-time-travel/) / [EN: Time Travel in Programs](https://qiaopang.com/en/posts/2018-10-31-time-travel/) (2018-10-31 · 系统与架构): Nor Time, nor Place, nor Chance, nor Death can bow. My least desires unto the least remove. - "The Time Traveler's Wife" 三年前,当我写下那篇青涩的『永恒不变的魅力』的文章时,我刚刚是 elixir 和 clojure 的入门者。我如饥似渴… - [区块链和数据库:致虚极,守静笃](https://qiaopang.com/posts/2018-10-30-blockchain-and-database/) / [EN: Blockchain and Databases: Attain the Utmost Emptiness, Hold Fast to Stillness](https://qiaopang.com/en/posts/2018-10-30-blockchain-and-database/) (2018-10-30 · 系统与架构): 如果说牛顿的经典物理是爱因斯坦相对论在低速环境下的一种体现的话,我们所熟知的数据库技术,可以认为是区块链技术在弱分布式环境下的一个特例。 「弱分布式」环境是我胡扯的一个词,你可以将其理解为节点数量极其有限,运行环境高度可控的一种分布式环境。一个数据库集群运行在同一数据中心,或者不同数据中心,只要是同一个管理者,那么这就是可控的运行环境。在可控的运行环境下,默… - [数据:逍遥游](https://qiaopang.com/posts/2018-10-29-data-grand-tour/) / [EN: Data: A Free and Easy Wandering](https://qiaopang.com/en/posts/2018-10-29-data-grand-tour/) (2018-10-29 · 系统与架构): 天之苍苍,其正色邪?其远而无所至极邪?其视下也,亦若是则已矣。 - 《逍遥游》 对程序员来说,数据是我们时刻都在打交道的东西。我们的代码如同一台机器,把进入的数据转换或者映射成出来的数据。数学上,不过是:y = f(x) 而已。数据就像庄子口中的鱼,在代码的作用下,一会化身为文件,在文件系统里「沉潜」,一会化身为变量,在内存中「浮动」,一会又扶摇直上,化身为… - [1024 节献礼: simple chain](https://qiaopang.com/posts/2018-10-24-simple-chain/) / [EN: A 1024 Tribute: The Simple Chain](https://qiaopang.com/en/posts/2018-10-24-simple-chain/) (2018-10-24 · 系统与架构): 前两周上线了 Cybermiles 的 supernode,因为 Cybermiles 主网使用了 Tendermint,于是上周便研究了一下 Tendermint,边学边写了个 slides 介绍 Tendermint。 Tendermint 是一个脱胎于 PBFT 的 consensus engine,并在此之上构建了一个 Appliation Bloc… - [Arcblock 北京黑客松,你来不来?](https://qiaopang.com/posts/2018-09-25-hackathon/) / [EN: Arcblock’s Beijing Hackathon: Are You In?](https://qiaopang.com/en/posts/2018-09-25-hackathon/) (2018-09-25 · 工程管理与职场): Hackathon,黑客马拉松,或者黑客松,是程序员们喜闻乐见的一种愉悦心情,开阔眼界,碰撞灵感的活动 —— 一群人,在一段特定的时间内,相聚在一起,通力合作,针对某个主题,编写点有意思的程序,应用,或者产品。根据 wikipedia 的记载,hackathon 起源于 OpenBSD 的一次密码学活动:「OpenBSD 于 1999 年 6 月 4 日在卡… - [如和在几十个 Repo 中游刃有余?](https://qiaopang.com/posts/2018-07-23-repo/) / [EN: How to Move with Ease Across Dozens of Repos](https://qiaopang.com/en/posts/2018-07-23-repo/) (2018-07-23 · 编程语言与工程): Sindre Sorhus 是我一直 follow 并且仰慕的程序员。他的 github 日常是这个样子的: 很久以来我一直好奇 —— 究竟怎样的工作效率能够让一个人在一个月的时间里工作在几十个 repo 里,创造出好几百的 commits?是对编程的狂热?对代码掌握得游刃有余?还是对自动化的极致追求? 过去的三个月里,我畅游在 elixir,ansible… - [思考,问题和方法](https://qiaopang.com/posts/2018-07-08-thinking-in-arcblock/) / [EN: Thinking, Questions, and Methods](https://qiaopang.com/en/posts/2018-07-08-thinking-in-arcblock/) (2018-07-08 · 工程管理与职场): 转眼已是七月。距我上次更新公众号,已经一月有余。离我加入 Arcblock,也有两月。如果把人看做一个运行的软件,那么这两个月我已经迭代好几轮,就像龙珠里在飞往那美克星的太空船里不懈修炼的悟空。 人的成长是有诱因的,但不外乎得到他人指点,和自己开悟两种情况。吕蒙原本一介武夫,经孙权劝学后,发愤图强。有次鲁肃跟他议事,大惊失色,于是有了「士别三日,当刮目相待」… - [代码即规则:Code is Law](https://qiaopang.com/posts/2018-07-02-code-is-law/) / [EN: Code is Law](https://qiaopang.com/en/posts/2018-07-02-code-is-law/) (2018-07-02 · 编程语言与工程): 如果你以为本文是在讲 Ethereum,或者 Smart Contract,那我非常抱歉。本文将要讲述的是 Engineering practices 以及我对一些流程的思考和应用。 在展开新工作的第一天,我就试图将 bootcamp 和 BBL 的文化引入 Arcblock。两周后,我们的 bootcamp site 长这个样子: 请原谅这个简单的 UI … - [工具思维 - Thinking in tools](https://qiaopang.com/posts/2018-06-11-thinking-in-tools/) / [EN: Thinking in Tools](https://qiaopang.com/en/posts/2018-06-11-thinking-in-tools/) (2018-06-11 · 编程语言与工程): Paul Graham 在《黑客与画家》里谈到:程序员的职业是个完美的职业,因为它兼具 1) 可测量性 和 2) 可放大性。我们常常说一个「优秀」的程序员可以抵得上三五个,甚至数十个「平庸」的程序员。这话也对也不对。「优秀」和「平庸」都是相对的,所谓「汝之蜜糖,彼之砒霜」,Forrest Gump 放对了位置也不可谓不优秀。 确切地说,一个优秀的程序员应该能… - [如何提高代码质量?](https://qiaopang.com/posts/2018-06-05-improve-code-quality/) / [EN: How to Improve Code Quality?](https://qiaopang.com/en/posts/2018-06-05-improve-code-quality/) (2018-06-05 · 编程语言与工程): 好的程序员从来不靠格子衫或者颜值吃饭,就像你家 C 罗明明可以靠脸,却非要用不断精进的身体和技术迷倒你。对伟大前锋来说,进球,以及一个能够迸发出进球能力的身体非常重要。 对靠谱程序员来说,代码质量,以及一颗能够洞悉高质量软件编写之道的大脑弥足珍贵。 本文从 产品,接口,指标,日志,代码清晰度,代码复杂度 等方面,谈谈如何提高代码质量。 好的产品经理未必是… - [至暗时刻](https://qiaopang.com/posts/2018-06-04-darkest-hour/) / [EN: The Darkest Hour](https://qiaopang.com/en/posts/2018-06-04-darkest-hour/) (2018-06-04 · 编程语言与工程): (一) 那美克星上,悟空在经历了游走生死边缘的地狱般严苛的训练后,终于以二十倍界王拳的力量直面弗利萨。然而,实力差距过分悬殊,悟空唯有兵行险着 —— 集全部力量于一体,发出了超级龟波气功。这几乎是他最后的希望。可惜,全力一搏并没有什么效果,反而狠狠激怒了弗利萨。力量耗尽,悟空几乎动弹不得,像一只待宰的羔羊:那是他的至暗时刻,甚至是整部《龙珠》的至暗时刻。 同… - [AWS 最佳实践](https://qiaopang.com/posts/2018-06-02-aws-best-practices/) / [EN: AWS Best Practices](https://qiaopang.com/en/posts/2018-06-02-aws-best-practices/) (2018-06-02 · 系统与架构): 我是 AWS 的重度用户,重度到「饭可以一日不吃,AWS 不可一日不用」,每天我的例行工作就是「吃饭,睡觉,上 AWS」。纵观过去几年我在 Juniper 和 Tubi 的经验,我在 Arcblock 过去的一个月渐渐摸索出来一些使用 AWS 的最佳实践 —— 虽然这些实践的对象是 AWS,但也许对你使用其它云的姿势也有一些借鉴意义。 首先,使用云服务,我们… - [Tubi 为什么?](https://qiaopang.com/posts/2018-05-01-why-tubi/) / [EN: Why Tubi?](https://qiaopang.com/en/posts/2018-05-01-why-tubi/) (2018-05-01 · 工程管理与职场): 在一段旅程行将结束的时候,retrospective 是最好的临别礼物。Tubi 是一家独特的 startup,站在外人的角度,你很难想象这样一家不到三十个工程师的公司,竟然同时维护着五个主要的产品线:二十多种客户端软件(并且还在不断增加);五十多种自研或者第三方的后端服务(即便第三方,也还需要部署升级记录 metric 等维护工作);一个完备的广告系统;一… - [告别 Tubi:我讲了三个故事](https://qiaopang.com/posts/2018-04-30-leave-tubi/) / [EN: Farewell to Tubi: Three Stories I Told](https://qiaopang.com/en/posts/2018-04-30-leave-tubi/) (2018-04-30 · 工程管理与职场): 宿雨收尘,朝霞破暝,风光暗许花期定。 —— 《踏莎行》晏几道 这是我 3 月 23 日的一则朋友圈。下了一夜的雨后,清晨的 AT&T 球馆,如出水芙蓉,美目盼兮。走在去往公司的路上,我心情复杂,因为我终于要告诉老板我计划四月底离职的消息了。 是的,三月初那次西雅图之旅后,我便已下定决心,挥别 Tubi(虽然非常依依不舍),投身 blockchain 技术。之… - [Joe Armstrong 面对面](https://qiaopang.com/posts/2018-04-16-joe/) / [EN: Face to Face with Joe Armstrong](https://qiaopang.com/en/posts/2018-04-16-joe/) (2018-04-16 · 工程管理与职场): Joe 老爷子是 Erlang 世界里的一个图腾。 他书中的句子,他的公开演讲或是私下的谈话,都被不同的人到处引用 —— 今年的 code beam,好些 speaker 用 Joe 的原话来佐证自己的观点。Joe 因为 Erlang 的诞生被视作天才,视作英雄,视作传奇。但 Joe 自己却将其归功于 Ericsson 的「大度」:你知道 Ericsson … - [过去的一个月,我收获到了什么?](https://qiaopang.com/posts/2018-04-02-code-beam/) / [EN: What I Gained from the Past Month](https://qiaopang.com/en/posts/2018-04-02-code-beam/) (2018-04-02 · 编程语言与工程): 最大的收获自然是我和 Joe 老爷子访谈,它是无价的。我前些日子已经放了篇文章:joe。没看过的同学可以点进去看看。我希望我六十岁时,也能像老爷子一样,睿智,洞悉世事,和我聊天的人都有这样的感觉 —— 就跟 Frodo 憧憬未来时夸赞 Sam 那样:Tyr the thinker。 这次 Code Beam,我做了一个三十多分钟的演讲:Release, De… - [量子计算对 bitcoin 的威胁](https://qiaopang.com/posts/2018-03-11-quantum-computing/) / [EN: The Quantum Computing Threat to Bitcoin](https://qiaopang.com/en/posts/2018-03-11-quantum-computing/) (2018-03-11 · 系统与架构): 在奉上有关「共识机制」的文章前,我们先来点甜点。 在两周前的 BBL 上,我给团队介绍了 bitcoin,相关的 slides 见 github.com/tyrchen/unchained。其中花了点时间谈论了 quantum computing 对 bitcoin 的威胁。上周 google 发布了 72 量子比特通用量子计算机,引发了大家的热议 —— 尤… - [谈谈数据结构](https://qiaopang.com/posts/2018-03-07-data-structure/) / [EN: On Data Structures](https://qiaopang.com/en/posts/2018-03-07-data-structure/) (2018-03-07 · 编程语言与工程): 沃斯大神说过,程序 = 算法 + 数据结构。 程序君认为,等式的右边,数据结构的权重要大于算法。数据结构定义好,基本上,你所用的算法也就确定了,算法的时间复杂度也八九不离十。上周,我在 team 内部分享了一个关于数据结构的主题,在这里,也和诸位分享。 现代的编程语言,内置的数据结构越来越多,从 primitive 的类型:integer, float, b… - [没有银弹](https://qiaopang.com/posts/2018-03-05-no-silver-bullet/) / [EN: No Silver Bullet](https://qiaopang.com/en/posts/2018-03-05-no-silver-bullet/) (2018-03-05 · 编程语言与工程): 合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。 - 《道德经》 转眼间女儿到了学琴的年龄。我对乐器,纯是叶公好龙,家里摆着钢琴,小提琴,手风琴,自己却连五线谱也不识,所以无法督促丫头练习,于是这重担落在了老婆身上。老婆是个虎妈,严厉起来毫不含糊,说练不完琴不许吃饭,就不许吃饭,丫头撒泼打滚,哭天抢地,姥姥红着眼圈在旁劝阻都无济于事。这种时刻,我… - [诚者,天之道也](https://qiaopang.com/posts/2018-02-28-trust/) / [EN: Sincerity Is the Way of Heaven](https://qiaopang.com/en/posts/2018-02-28-trust/) (2018-02-28 · 系统与架构): 居下位而不获于上,民不可得而治也。获于上有道:不信于友,弗获于上矣。信于友有道:事亲弗悦,弗信于友矣。悦亲有道:反身不诚,不悦于亲矣。诚身有道:不明乎善,不诚其身矣。是故诚者,天之道也;思诚者,人之道也。至诚而不动者,未之有也;不诚,未有能动者也。 - 孟子 这次 Code Beam,我演讲的题目是:Build a decentralized, public… - [谈谈分布式系统](https://qiaopang.com/posts/2018-02-27-distributed-system/) / [EN: On Distributed Systems](https://qiaopang.com/en/posts/2018-02-27-distributed-system/) (2018-02-27 · 系统与架构): 最近一个多月,谈论 blockchain 的人如此之多,以至于连菜头叔都写了篇文章「韭菜席地而坐」。我在朋友圈里转了这篇文章,评论说: 区块链是对此钻研的技术人,场内人士,以及为所有参与者提供服务的人的盛宴,因为他们对此深思熟虑,并且有金钱以外的付出。那些听风就是雨的参与者,仅仅花费时间在 telegram 里打听小道消息,盯盘讨论涨跌的人,都是韭菜,大小而… - [研究的方法](https://qiaopang.com/posts/2018-02-26-research/) / [EN: The Method of Research](https://qiaopang.com/en/posts/2018-02-26-research/) (2018-02-26 · 编程语言与工程): 今天谈谈我自己做研究的方法 —— 它跟随我多年,且一直在演进和完善中。我虽然没有读过 PhD(希望有生之年能够尝试一下),但我自认为这法子并不算差 —— 至少,它让我能够更加高效地进入一个新的领域,并且扎根于其中。如果你一直在读我的文章,好奇为何程序君涉猎范围这么广(就是这么爱给自己贴金),又扎得比较深(被自己帅哭了),那么,你可以仔细读读本文 —— 还是那… - [分布式系统中的监工:Overseer](https://qiaopang.com/posts/2018-02-20-overseer/) / [EN: Overseer: A Supervisor for Distributed Systems](https://qiaopang.com/en/posts/2018-02-20-overseer/) (2018-02-20 · 系统与架构): 最近从无趣的工作中发现了有趣的事情,工作和业余时间都扑了些精力上去,本待上周末最终的成果出来后再写文章的,无奈事情太多,代码还没写完,二月上旬已过,再不写文章春节就过去了,所以这次程序君先上车,再补票。 事情是这样的:两周前同事催促我升级我之前做的一个轮子 merlin - 见我去年的文章:停下来,歇口气,造轮子。 在那篇文章里我提到了为什么会有需要做这样一… - [再谈抽象](https://qiaopang.com/posts/2018-02-03-abstraction-again-1/) / [EN: Abstraction Revisited](https://qiaopang.com/en/posts/2018-02-03-abstraction-again-1/) (2018-02-03 · 编程语言与工程): 16 年我写过一篇文章,抽象的能力,没有读过的同学可以再看看。那文章算是一个引子,举了不少实战中对代码和对需求进行抽象的小李子。大家重点注意一下最后一个例子 —— feed parser 的抽象。feed 是好莱坞 studio 给我们提供的可供播放的短视频的清单,每家 studio 都有自己的 feed,结构上大同小异,细节上差别不小:格式上,有 xml … - [调度算法 - Linux O(1)](https://qiaopang.com/posts/2018-01-23-scheduler-o1/) / [EN: Scheduling Algorithms: Linux O(1)](https://qiaopang.com/en/posts/2018-01-23-scheduler-o1/) (2018-01-23 · 系统与架构): 约莫十五年前,当我刚刚开始参加工作时,赶上 Linux 发布划时代的 2.6 内核。在这个大家都翘首期盼的内核版本中,最令人兴奋的便是 O(1) scheduler。本文来谈谈这个算法是如何实现的。不过,在详细讲解 O(1) scheduler 之前,我们先简单回顾一下让人诟病许久的 2.4 scheduler,了解其传承,同时以史为镜。 Linux 2.4… - [当我谈 scheduling 时我在谈什么?](https://qiaopang.com/posts/2018-01-22-scheduler/) / [EN: What I Talk About When I Talk About Scheduling](https://qiaopang.com/en/posts/2018-01-22-scheduler/) (2018-01-22 · 系统与架构): scheduling 有很多很多可以谈论的地方,随便一个点就可以做一次讲座。这次我只是讲一个概述。 wikipedia 上是这么说的: In computing, scheduling is the method by which work specified by some means is assigned to resources that compl… - [2017,46 篇程序人生](https://qiaopang.com/posts/2017-12-31-2017-articles/) / [EN: 2017: 46 Essays on a Programmer's Life](https://qiaopang.com/en/posts/2017-12-31-2017-articles/) (2017-12-31 · 读书与随笔): 从 2014 年第一篇公众号文章开始,三年多时间我竟然已经写下了 386 篇文章,涵盖技术,管理,创业和一些莫名其妙的感悟。这便是小小的坚持迸发出的能量:不经意间,日拱一卒的零零碎碎汇集出这般美妙的结果。 我常说:读自己的日记,仿佛在跟过去的自己对话。读自己的文章也是如此。早上在 4S 店保养小车,闲来翻翻自己的文字,感觉很棒 —— 这并不是说我觉得我的文字… - [硅谷手记:西行与筑台](https://qiaopang.com/posts/2017-12-30-silicon-valley-notes-1/) / [EN: Silicon Valley Notes (2014–2017): Journey West and Building the Stage](https://qiaopang.com/en/posts/2017-12-30-silicon-valley-notes-1/) (2017-12-30 · 读书与随笔): 辑录 2014 至 2017 年间散落在日常随笔中的硅谷纪事:从初抵湾区在 101 公路上奔波赶场各类技术聚会、历经跌宕的签证闯关,到入局早期流媒体创业、飞返北京望京从零搭建跨国研发团队,在双城时差与海湾晨跑中沉淀下的四年行迹。 - [不要让愤怒的客户来通知你的问题](https://qiaopang.com/posts/2017-12-18-mobike/) / [EN: Don't Let Angry Customers Be the Ones to Tell You About Your Bugs](https://qiaopang.com/en/posts/2017-12-18-mobike/) (2017-12-18 · 系统与架构): 周日早上爬完香山回来,想起还和一位朋友约了咖啡,赶忙打开微信扫路边的一辆单车。摩拜的小程序提醒我开锁中,请勿关闭小程序。然而这开锁的进度在百分之零的位置停留若干分钟,毫无变化。等了许久,我怀疑网络不畅,于是关闭小程序又重新打开扫描,这下可好,小程序直接告诉我:「您上次用的车还未关锁,暂时不能在用其它车哦」。 这就尴尬了。我对着一辆明明没开锁却被认为已开锁的车… - [美帝面试二三事](https://qiaopang.com/posts/2017-11-17-interview-perks/) / [EN: A Few Tales of Interviewing in America](https://qiaopang.com/en/posts/2017-11-17-interview-perks/) (2017-11-17 · 工程管理与职场): 在美帝面试工程师,是一种有趣的体验。以前曾经在朋友圈里发过一些体验,这两天,面试了两个很有意思的工程师,其中一个勾起了我一份尘封的回忆。对着我写公众号的 git repo,我用 ag 搜索了半天,终于找到了一篇没写完所以没有发的老文章。今天我们讲讲这三个人。 (一) SH 君。我昨天面试的 SH 君。他的背景是广告系统 —— 他在之前的公司现学现用,用 er… - [切莫低估 bash 的威力](https://qiaopang.com/posts/2017-11-13-bash/) / [EN: Never Underestimate the Power of bash](https://qiaopang.com/en/posts/2017-11-13-bash/) (2017-11-13 · 编程语言与工程): 工作中,我们常常要处理浩瀚如烟的日志。有时候,看日志是为了处理软件中的 bug,更多的时候,是为了从中获取有用的信息 —— 这信息可以用来做 behavior analysis,可以用来做 anomaly detection,甚至也可以做 data recovery。 这个周末两天,家里的活动不少,有一搭没一搭的,在做一个 log parser。这 log … - [停下来,歇口气,造轮子](https://qiaopang.com/posts/2017-10-16-reinvent-wheels/) / [EN: Stop, Catch Your Breath, and Reinvent the Wheel](https://qiaopang.com/en/posts/2017-10-16-reinvent-wheels/) (2017-10-16 · 编程语言与工程): 上周四至今,我大概有 50-70% 的时间在造一个轮子,一个叫 merlin 的工具。 事情的起源是这样的 —— 我们内部的一个重要服务,要升级到 elixir 1.5。之前这个服务的 ansible 部署代码大概是这样的:在目标机器上 clone 代码,编译,生成一个符合 systemd 的 release,更新 systemd 配置,重启服务。那位说了:… - [react 的阿喀琉斯之踵](https://qiaopang.com/posts/2017-10-12-react/) / [EN: React's Achilles' Heel](https://qiaopang.com/en/posts/2017-10-12-react/) (2017-10-12 · 编程语言与工程): 8月18号,facebook 发文进一步澄清了 react 的 license。这似乎是对 apache foundation 将 facebook 特有的 BSD + patents license 列入 category X 的一种辩解,可惜,社区并不太买账。 先讲讲 Category X 是什么。它是一个列出了那些不能在 apache project … - [The sound of silence:网络传输的小众黑科技](https://qiaopang.com/posts/2017-10-11-the-sound-of-silence/) / [EN: The Sound of Silence: The Obscure Black Magic of Network Transmission](https://qiaopang.com/en/posts/2017-10-11-the-sound-of-silence/) (2017-10-11 · 系统与架构): 上周面试了一个来自俄罗斯的 android 工程师。很 geek,对 office 的 binary format(不是后来的 xml format)做过深入的逆向工程。他在 yandex 做过产品,而不是工程师 —— 拿他的原话说,就是 Yandex 对工程师要求太高,他试了三次都没成功,只能退而求其次做产品。当然,本文想讲的不是这个哥们,而是这哥们现在所… - [探索比特币量化交易套利的可能性](https://qiaopang.com/posts/2017-10-10-arbitrage/) / [EN: Exploring the Possibilities of Bitcoin Quantitative Arbitrage](https://qiaopang.com/en/posts/2017-10-10-arbitrage/) (2017-10-10 · 系统与架构): 关于比特币套利交易的文章,坊间一搜一大堆,尤以 2014,2015 为甚。那时交易所间价差相当可观,套利的机会很多,躺着赚钱并非难事。如今,套利区间收窄,留在沙场上的估计只剩下大玩家,想要不费力气躺赢机会渺茫。最近帮朋友牵线寻找币圈量化交易的机会,本欲做个打酱油的中间人,事了拂衣去,安安静静做个三河市微胖界扛把子,谁料还是一时技痒,不小心昨夜搭进去六七个小时… - [red,不红不专,但性感](https://qiaopang.com/posts/2017-07-27-red/) / [EN: Red: Neither Red Nor Expert, But Sexy](https://qiaopang.com/en/posts/2017-07-27-red/) (2017-07-27 · 编程语言与工程): red lang 前两天发布 0.6.3 了。osx GUI 终于得到了支持。 这事,连 hacker news 上都没掀出多少波澜。帖子在近二百多顶后,就渐渐沉底,不知去向。 我第一次听说 red 大概是 2015 年。当时在 medium 上有一篇采访 Nenad Rakocevic 的帖子,谈了 red 的思想,red 对 rebol 的传承,以及其雄… - [谈谈状态机](https://qiaopang.com/posts/2017-07-24-state-machine/) / [EN: On State Machines](https://qiaopang.com/en/posts/2017-07-24-state-machine/) (2017-07-24 · 编程语言与工程): 在谈论一般意义的状态机时,我们先看看有限状态机,Finite State Machine,简称 FSM。 在计算理论(Theory of computation)中,FSM 是一切的基础,也是能力最为有限的机器。在其能力之上是 CFL(Context Free Language),然后是 Turing Machine。 FSM 解决一个输入序列,经过 FSM… - [当我参加培训的时候,我在学什么?](https://qiaopang.com/posts/2017-05-29-how-to-get-from-training/) / [EN: What Am I Actually Learning When I Attend a Training Course?](https://qiaopang.com/en/posts/2017-05-29-how-to-get-from-training/) (2017-05-29 · 工程管理与职场): 在旧金山举行的 erlang/elixir 2017 大会上周结束。这次,我并未参加 —— 权衡再三,我选择了这周的 complete OTP 培训,毕竟大会的视频 youtube 上找得见,可以慢慢补,培训错过了就没了。 参加一次技术培训,代价往往不菲,像这样一个四天的培训,价格是两千多刀,你很难说出它有多值 —— 培训的主题有一半都是我已经了解或掌握的内… - [思考,快与慢](https://qiaopang.com/posts/2017-05-15-fast-and-slow/) / [EN: Thinking, Fast and Slow](https://qiaopang.com/en/posts/2017-05-15-fast-and-slow/) (2017-05-15 · 工程管理与职场): 这篇文章和同名的书没啥关系,主要想再讲讲这幅图,因为有人问到。 在我懵懂的时候,我的老东家 Juniper 的 ScreenOS 的设计给了我很多启发。防火墙是分 control plane 和 data plane 的,control plane 负责慢速处理,比如 UI,协议层的预处理,比如 IKE 的 phase 1 SA / phase 2 SA 的… - [谈谈 process](https://qiaopang.com/posts/2017-05-12-process/) / [EN: On Processes](https://qiaopang.com/en/posts/2017-05-12-process/) (2017-05-12 · 系统与架构): erlang/elixir 是那种你用得越多,就越喜欢的语嫣。 一个多月前,我在 erlang 哪篇文章里,写下了这篇文字: 在 erlang 的世界里,万事万物都是 process。process 就像原子一样,组成分子,细胞,组织,器官,最终构成一副机体(见我的文章:boundary)。那么,process 究竟是什么? 其实它和 OS 的 proces… - [浪费内存?多大个事?](https://qiaopang.com/posts/2017-05-11-640k/) / [EN: Wasting Memory? What's the Big Deal?](https://qiaopang.com/en/posts/2017-05-11-640k/) (2017-05-11 · 系统与架构): 遥想盖子当年,MS 红火了,谈笑间,640k 内存足矣。 - 程序君 现在已经不是从指缝中扣内存的时代了。bit 在主流的解释型语言中要么失了踪迹,要么被作为高(sha)级(bi)功能被雪藏起来,就像 .net 的 managed code 一样,被压抑得像个旷妇。 HTTP 这样的 string-based protocol 进一步助长了这种气焰,互联网世… - [Service performance 101](https://qiaopang.com/posts/2017-05-10-performancemd/) / [EN: Service Performance 101](https://qiaopang.com/en/posts/2017-05-10-performancemd/) (2017-05-10 · 系统与架构): 最近一个月,我和一小撮不专业的美国银行从业人员就「我是不是清白地像于谦那样」(写石灰吟的于谦,不是有三大爱好的那位)反复拉锯,又赶上一大波功能上线和融资相关的事情,忙碌地无心在火车上干活,懒散了,便从周根霞退化成了岳根霞。公众号后台和微信里满满地不理解:刚把你置顶,你就断更(这话似乎几个月前听过)。后来苹果微信开撕,有些小伙伴恍然大悟,连忙安慰:叔,不哭… - [如何选择合适的工作](https://qiaopang.com/posts/2017-05-08-how-to-choose-job/) / [EN: How to Choose the Right Job](https://qiaopang.com/en/posts/2017-05-08-how-to-choose-job/) (2017-05-08 · 工程管理与职场): 其实这个问题在『黑客与画家』里 Paul 已经给出了答案:选择那些具备 可测量性 和 可放大性 的工作。 我们来详细说说。注意以下的话跟「敏捷宣言」的措辞类似 —— 当你有选择的权利和能力时,优先选择前者而不是后者。但,这并不意味着后者不好。 首先是行业的选择。蓬勃发展的行业 要优于处于稳定的行业。比如说同样是软件行业,互联网就是比传统软件行业发展速度快得多… - [如何阅读一份代码?](https://qiaopang.com/posts/2017-04-03-how-to-read-code/) / [EN: How to Read a Codebase](https://qiaopang.com/en/posts/2017-04-03-how-to-read-code/) (2017-04-03 · 编程语言与工程): 上文谈到了像读书一样阅读源码的重要性,今天谈谈如何阅读一份代码。我所谓的一份代码,其范围可能从几千行到数万行,有时甚至可多达数十万行。这些代码作为一个有机体,共同完成某些重要的功能。比如说几个著名的 full fledged web framework,祖师爷 rails,师叔 django 和小师妹 phoenix: 三者对比很有意思 - rails / … - [Phoenix 1.3,迈向正确的道路](https://qiaopang.com/posts/2017-03-08-phoenix1-3/) / [EN: Phoenix 1.3: Toward the Right Path](https://qiaopang.com/en/posts/2017-03-08-phoenix1-3/) (2017-03-08 · 编程语言与工程): 距离 1.2 发布已经有一年多,而 exlirconf 2016 McCord 宣布 1.3 的特性也已过去半年,phoenix 1.3 依旧犹抱琵琶半遮面,迟迟不肯现身。几天前,1.3 RC.0 悄然发布,我们终于可以一睹她的芳容。 因为程序人生的读者大多不是 elixir / phoenix 的用户,所以在这里小小普及一下。elixir 是在 erlan… - [北美互联网哀鸿遍野,因为号称 99.9% 可用性的 AWS S3 挂了](https://qiaopang.com/posts/2017-02-28-aws-s3-outage/) / [EN: When the 99.9% Cloud Falls: AWS S3 Outage Leaves North America Reeling](https://qiaopang.com/en/posts/2017-02-28-aws-s3-outage/) (2017-02-28 · 系统与架构): 美西太平洋时间早上 10 点(北京时间凌晨 2 点),AWS S3 开始出现异常。很多创业公司的技术人员发现他们的服务无法正常上传或者下载文件。有人在 hacker news 上问:Is S3 down? 然后迅速得到大伙的确认。 然而,AWS 自己的 status page (https://status.aws.amazon.com) 却后知后觉,放眼望… - [Let it crash: 因为误解,所以瞎用](https://qiaopang.com/posts/2017-01-30-let-it-crash/) / [EN: Let It Crash: Misunderstood, Therefore Misused](https://qiaopang.com/en/posts/2017-01-30-let-it-crash/) (2017-01-30 · 编程语言与工程): 严格意义上来说,我之于 erlang,也是个半吊子,到目前为止,还没有写过真正的在生产环境中使用的 erlang 代码。不过我倒是写了两千行在生产环境中使用的 elixir 代码,还有几千行将要被应用在生产环境中,所以自认为对 elixir 算是略懂一二。由于在 VM 层面和语言核心层面,elixir 和 erlang 一脉相承,所以我也对 let it c… - [如何用正确的姿势打开 TDD?](https://qiaopang.com/posts/2017-01-16-tdd/) / [EN: How to Approach TDD the Right Way](https://qiaopang.com/en/posts/2017-01-16-tdd/) (2017-01-16 · 编程语言与工程): TDD(Test Driven Development)一直是程序界追求的一种开发境界。要想真正做到对项目有帮助的 TDD,并不是一件容易的事情。我见过不少团队做 TDD 流于形式,为了写测试例而写测试例,反而拖累了项目的进程,得不偿失,动摇了整个团队继续使用 TDD 的信心。如果你恰巧属于被 TDD 折磨到吐血,或者听到了大量 TDD 毫无意义影响项目进度… - [程序员字典:何为优秀](https://qiaopang.com/posts/2017-01-09-awesome/) / [EN: The Programmer’s Dictionary: “Awesome”](https://qiaopang.com/en/posts/2017-01-09-awesome/) (2017-01-09 · 工程管理与职场): 我曾经发过的 TubiTV 中国团队的招聘贴,基本要求这一页我是这么写的: 作为一个已经命中注定和代码打大半辈子交道的程序员,我们职业生涯的「小」目标大多是 成为一个优秀(awesome)的工程师。虽然不是每个人都能像 Linus Tolvalds,Bill Joy,Joe Armstrong 等先贤那样伟大,在人类历史的长河里留下不可磨灭的贡献,但下一个 … - [Policy Engine 的前世今生](https://qiaopang.com/posts/2017-01-05-policy-engine/) / [EN: The Life and Times of a Policy Engine](https://qiaopang.com/en/posts/2017-01-05-policy-engine/) (2017-01-05 · 系统与架构): 作为一个 video streaming service,TubiTV 很重要的一项功能是保证影视剧按照合约上的要求在规定的时间(窗口期),规定的平台,以及规定的国家发布。比如 Terminator,合约上规定 7/1 10/30(我瞎编的窗口),在美国可以上线,只允许 appletv,iphone,roku,web 访问,那么,如果我们不能正确处理,让加拿… - [2016 程序人生大串烧](https://qiaopang.com/posts/2016-12-31-2016-articles/) / [EN: The 2016 Programmer's Life Medley](https://qiaopang.com/en/posts/2016-12-31-2016-articles/) (2016-12-31 · 读书与随笔): 12月是 tubitv 最为繁忙的一个月份。在这个月,广告金主们留下了充沛的预算,挥舞着支票冲进节日的市场;可爱的用户们,一年间就寻觅着这么一个机会,半推半就的休上十天半个月的假,吃喝玩乐,不亦乐乎。高富帅白富美自然是在夏威夷,坎昆,阿斯本等地和大自然一起消磨时光,而普通大众,多数在家待着,只好看!电!视!了!要说美国人对电视的热爱,那简直到了令人发指的地步… - [pay as you go:当程序员盯上了车险](https://qiaopang.com/posts/2016-12-04-metromile/) / [EN: Pay As You Go: When Programmers Set Their Sights on Car Insurance](https://qiaopang.com/en/posts/2016-12-04-metromile/) (2016-12-04 · 系统与架构): 车险可能是这个世界最不合理的保险之一。如果你每天坐公交上下班,只是周末偶尔出去玩玩,一周开不了两百公里,一年开不了几十次的话,你还是需要支付和那些天天开车,一年开好几万公里的车主几乎相同的保险费用。这非常的不合理 —— 正常的风险评估下,如果其他因素变化不大(比如说驾驶技术),你是属于风险非常小的客户 —— 开的里程越小,次数越少,出事故的概率就越小。因而,… - [AWS reinvent 2016:Primitives not framework](https://qiaopang.com/posts/2016-12-02-aws-reinvent-2016-2/) / [EN: AWS re:Invent 2016: Primitives, Not Frameworks](https://qiaopang.com/en/posts/2016-12-02-aws-reinvent-2016-2/) (2016-12-02 · 系统与架构): Transformation 是本次 Werner Vogels keynote 的主题。为了契合这个主题,他还穿了印有汽车人标志的T恤上台演讲。这个 keynote 非常值得反复观摩 —— 整个 keynote 的表面上的核心是:我们如何通过 development,data,compute 上的革新来帮助客户成为 internet scale 时代的 t… - [snowmobile 狂想曲](https://qiaopang.com/posts/2016-12-01-snowmobile/) / [EN: Snowmobile Rhapsody](https://qiaopang.com/en/posts/2016-12-01-snowmobile/) (2016-12-01 · 系统与架构): Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway. — Tanenbaum, Andrew S. (1989). Computer Networks. p. 57. 这是 CS 毕业生的老朋友(大家学 OS 的时候都看过他的… - [AWS re:invent 2016 新品与段子齐飞](https://qiaopang.com/posts/2016-11-30-aws-reinvent-2016-1/) / [EN: AWS re:Invent 2016: New Products and Punchlines](https://qiaopang.com/en/posts/2016-11-30-aws-reinvent-2016-1/) (2016-11-30 · 系统与架构): 今年又参加了在赌城举办的 aws re:invent。讲正题之前,先黑黑程序员。 拉斯维加斯是个释放成年人荷尔蒙的地方。各种花式赌法,无数妖艳的老虎机,美女,壮男,从老少咸宜的秀一路到R级的秀,甚至 private show,总有一款能够满足你。然而,程序员在拉斯维加斯的玩法是这个样子的: 晚上8点吃完晚饭特地打 Uber 回会场参加 keynote。。。U… - [rails, django, phoenix,你们错了](https://qiaopang.com/posts/2016-11-20-rails-phoenix/) / [EN: Rails, Django, Phoenix: You're All Wrong](https://qiaopang.com/en/posts/2016-11-20-rails-phoenix/) (2016-11-20 · 编程语言与工程): 写这个题目估计会招人骂。 这三个著名的 MVC(或者 MTV) framework,分别对应 Ruby,Python,Elixir 三种语言。说他们是这几门语言的顶梁柱毫不为过。很多人都是慕着 framework 的名而来,进而学了语言。典型的就是曾经大红大紫(现在也算是一线明星)的 rails:很多 rails 工程师最初只知 rails,写了 rails… - [技术债:the good, the bad, and the tao](https://qiaopang.com/posts/2016-11-14-tech-debt/) / [EN: Technical Debt: The Good, the Bad, and the Tao](https://qiaopang.com/en/posts/2016-11-14-tech-debt/) (2016-11-14 · 编程语言与工程): 什么是技术债?通常意义上的技术债是指我们在开发产品或者功能过程中,快速(往往伴随着混乱和各种限制)地在时间和资源受限的情况下完成正常情况下无法完成的工作时引入的技术问题。这些问题可能会导致将来引入新的功能变得很困难,或者开发出来的功能很快到达容量上的瓶颈。这种由于时间和资源受限的情况下不得不牺牲质量引入的技术债是最主要的一种技术债。 第二种技术债是因为开发团… - [GraphQL 的利与弊](https://qiaopang.com/posts/2016-11-07-graphql/) / [EN: The Pros and Cons of GraphQL](https://qiaopang.com/en/posts/2016-11-07-graphql/) (2016-11-07 · 编程语言与工程): 一个多月前,facebook 将其开源了一年多的 GraphQL 标记为 production ready ( http://graphql.org/blog/production-ready/ ),几乎同一时间,github 开放了其 GraphQL API 的 early access ( https://developer.github.com/ear… - [0MQ 的世界](https://qiaopang.com/posts/2016-10-03-zero-mq/) / [EN: The World of ZeroMQ](https://qiaopang.com/en/posts/2016-10-03-zero-mq/) (2016-10-03 · 系统与架构): 刚刚这个国庆,对程序员来说,最糟心的事情莫过于 ZeroMQ 的作者 Pieter Hintjens 的安乐死。想必你的朋友圈也传过了那篇令人感怀的 A protocal for dying。如果你还没看,翻翻朋友圈,仔细读一读,然后收藏起来,一两年后再看上一看。可敬的 Pieter,临终前的 last words,也不放过自己搞 messaging 的本行… - [代码命名:僧敲月下门](https://qiaopang.com/posts/2016-09-20-hello-name/) / [EN: Naming in Code: A Monk Knocks at the Moonlit Door](https://qiaopang.com/en/posts/2016-09-20-hello-name/) (2016-09-20 · 编程语言与工程): 忽一日於驴上吟得:‘鸟宿池中树,僧敲月下门。’初欲著‘推’字,或欲著‘敲’字,炼之未定,遂于驴上作‘推’字手势,又作‘敲’字手势。 - 《鉴戒录·贾忤旨》 两句三年得,一吟双泪流。知音如不赏,归卧故山丘。 - 贾岛·《题诗后》 起名(或者遣词造句)并非一件容易的事,想想你家宝宝出生,你挠破头皮,绞尽脑汁,翻遍字典,抓破诗词古籍的便秘场景,你就该知道多痛苦了。… - [那堵叹息的墙壁](https://qiaopang.com/posts/2016-09-19-wall/) / [EN: The Wall of Sighs](https://qiaopang.com/en/posts/2016-09-19-wall/) (2016-09-19 · 读书与随笔): (1) pain is inevitable. Suffering is optional. - 无名氏 很久没有认认真真跑步了。从国内回来后,肚腩大了一圈。痛定思痛后,连续两周跑了半马。搁去年,不吃不喝跑 20+ 并非难事,它仅仅是绕着风景优美的 lake Elizabeth(湾区 fremont 的一个小湖)的 2 miles 长的环形跑道没心没肺地跑上… - [InfoQ 大咖说问题回答](https://qiaopang.com/posts/2016-09-17-qa/) / [EN: Answering Questions for InfoQ's "Big Names Say"](https://qiaopang.com/en/posts/2016-09-17-qa/) (2016-09-17 · 工程管理与职场): 非常抱歉这么久才给出答案。 早起应该注重职业生涯的自我定位和习惯的培养。定位是个很困难的事情。不要把自己定位成,比如说:java 程序员。这样的定位太笼统,很容易泯然众人矣。应该对自己又很具体的定位:比如 java 虚拟机性能调优专家。好的定位让你有更明确的方向。至于习惯的培养:写代码的风格,做事的方法,甚至早睡早起,定时定量阅读等等,这些习惯都会在你职业生… - [从 Pipe 到 Flow](https://qiaopang.com/posts/2016-09-06-flow/) / [EN: From Pipe to Flow](https://qiaopang.com/en/posts/2016-09-06-flow/) (2016-09-06 · 编程语言与工程): 之前我们谈论了 pipe 之美:一件复杂的事务性的工作,我们可以将其分解成一个个小的组件(或者处理步骤),用 pipe 将其串联起来。举个实际的栗子:作为一款带广告的视频播放软件,TubiTV 一个主要功能是在广告机会出现时,遍历符合要求的广告 vendor,向其发送广告请求,然后从响应中过滤合适的广告,最终播放给用户。这是每个视频播放软件的基本功能,其需求… - [少年维特之烦恼](https://qiaopang.com/posts/2016-08-13-grow/) / [EN: The Sorrows of Young Werther](https://qiaopang.com/en/posts/2016-08-13-grow/) (2016-08-13 · 工程管理与职场): 在公众号里,被问得最多的问题就是:如何选择一个能够让自己成长的工作?以及,如何在工作中成长?这两个问题的核心词都是成长,而上周末见了一个 amazon 的朋友,聊得最多的也是这个话题。 我们先看第一个问题:如何选择一个能够让自己成长的工作。 这个问题在我 2015 年转的我 2014 年答读者问的文章里已经写过(看,有些问题就是这么任性地反复折磨我们),稍作… - [差一点,就成了骗子的刀下鬼](https://qiaopang.com/posts/2016-08-13-fraud/) / [EN: A Close Call: Almost Fell Prey to a Scammer](https://qiaopang.com/en/posts/2016-08-13-fraud/) (2016-08-13 · 读书与随笔): 又是一个阳光明媚的周六早上,获得了可以工作一天的许可,我在厨房欢快地摊着煎饼。这是次卧突然出来一阵大喊,我连忙关了抽油烟机,才听清楚领导焦急地在召唤我解决她电脑的「严重问题」。她的电脑发出刺耳的滴滴声,屏幕上是一个恐怖的对话框,其措辞的严厉程度和 windows 经典的蓝屏不分上下。我的第一反应是关机重启,但老婆说关不了机,而且对话框上说强行关机会损坏数据。… - [Reactive programming](https://qiaopang.com/posts/2016-06-09-reactive/) / [EN: Reactive Programming](https://qiaopang.com/en/posts/2016-06-09-reactive/) (2016-06-09 · 编程语言与工程): 这周不放文章了,把我今天在 team 的讲座拿出来和大家分享。 今天讲的是 reactive programming —— 更确切地说,是 spreadsheet-like programming。说 reactive 容易和 FRP(functional reactive programming)混淆,而今日的主角 hoplon / meteor / mo… - [后端傻瓜化?](https://qiaopang.com/posts/2016-06-09-horizon/) / [EN: The Foolproofing of the Backend?](https://qiaopang.com/en/posts/2016-06-09-horizon/) (2016-06-09 · 系统与架构): 两周前 rethinkdb 终于正式发布了 horizon,一套基于 rethinkdb 的后台应用:它让你只需要做一些基本的安全配置和 validation,就可以在前端操作 rethinkdb。是不是听起来耳熟?它也、比较像 meteor 使用的 minimongo,只不过实现的方式有些不同:minimongo 是 mongodb API 的一个子集;而… - [漫谈工程师的三观](https://qiaopang.com/posts/2016-06-06-vision/) / [EN: The Engineer's Three Outlooks: Technology, Product, and Data](https://qiaopang.com/en/posts/2016-06-06-vision/) (2016-06-06 · 工程管理与职场): 工程师要有技术观,产品观和数据观。 (1)技术观 什么是正确的技术观? 我觉得首先是对各种技术不排斥,兼容并蓄。初入行的工程师往往会陷入对某种技术的深深的迷恋而不能自拔,以至于一旦有不同的声音出现,就会使出吃奶的智商为自己的真爱辩解。这种单纯和幼稚几乎是每个工程师成长的必经之路,就像情窦初开的少年看上了隔壁班的小芳,就以为世上西子只此一人一样;等到见识到了更… - [再谈 API 的撰写](https://qiaopang.com/posts/2016-05-23-api/) / [EN: On Writing APIs, Revisited](https://qiaopang.com/en/posts/2016-05-23-api/) (2016-05-23 · 系统与架构): 去年我写过一篇文章:撰写合格的 REST API。当时 Juniper 裁掉了我们在德州的一支团队,那支十多人的团队有一半的人手在之前的很长一段时间里,主要的工作就是做一套 REST API。我接手这个工作时发现那些API写的比较业余,没有考虑几个基础的HTTP/1.1 RFC(2616,7232,5988等等)的实现,于是我花了些时间重写,然后写下了那篇文… - [来来来,咱么元编程入个门](https://qiaopang.com/posts/2016-05-17-macro/) / [EN: Metaprogramming 101: A Gentle Introduction](https://qiaopang.com/en/posts/2016-05-17-macro/) (2016-05-17 · 编程语言与工程): 前一篇文章竟然被很多人批「干货太少」 —— 一看你们就没有看过 Rich 他老人家的 Hammock Driven Development(我很久前推荐过滴),这世界不缺代码,缺的是思想。你们要干货。好,咱们来点干货。正好之前有个读者在留言中诉苦,说看了之前的文章 谈谈抽象 不解馋,虽然学了 clojure 却总也厘不清 macro 的使用,跟着书上的例子可… - [打造属于你自己的乐高积木](https://qiaopang.com/posts/2016-05-16-lego/) / [EN: Building Your Own LEGO Bricks](https://qiaopang.com/en/posts/2016-05-16-lego/) (2016-05-16 · 编程语言与工程): 夫鹄不日浴而白,乌不日黔而黑 -- 庄周 上面的这句话某种程度来说是不妥的,人性(这也是全体生物进化出的本能)趋利避害,如果不施加外力,很容易走向消极的一面。就拿读书这事来说,幼时父母的板子和棒棒糖,老师的教鞭和小红花,硬是在威逼利诱间引导我们从「咏鹅」一路背到了「从百草园到三味书屋」(否则可能是从「风魔小次郎」一路到「诛仙」)。如今一天工作完毕,心力交瘁,… - [重构:撰写合格的代码](https://qiaopang.com/posts/2016-05-14-interface/) / [EN: Refactoring: Writing Competent Code](https://qiaopang.com/en/posts/2016-05-14-interface/) (2016-05-14 · 编程语言与工程): 在「代码重构之道」里,我犯了个懒,讨论了什么情况下需要考虑重构,以及工具和方法来促进重构,但对如何重构代码本身,或者说:如何把烂代码转化成好代码,或者至少是合格的代码,没有太多提及。这篇文章谈一谈这个话题。 我们先给「合格的代码」做个定义: 满足项目所定义的 lint 规则 代码清晰简洁,没有反人类的逻辑或者刻意为之的 trick 尽可能控制副作用 代码的注… - [抽象的能力](https://qiaopang.com/posts/2016-05-13-abstraction/) / [EN: The Power of Abstraction](https://qiaopang.com/en/posts/2016-05-13-abstraction/) (2016-05-13 · 编程语言与工程): 人类的智商从低幼逐渐走向成熟的标志之一就是认识和运用数字的能力。当我们三四岁的时候,数数虽然能够熟练地对一百以内的数字随心所欲地倒背如流,但数字对孩童时代的我们仅仅还是数字,即便刚数完了自己桌前有 12 粒葡萄,吃掉了一粒,我们还得费力地再数一遍才能确定是 11 粒(别问我为啥这都门清)。在这个年龄,数字离开了具体的事物,对我们而言便不再具有任何意义。 随着… - [你要避免的软件开发模式](https://qiaopang.com/posts/2016-05-11-code-model/) / [EN: Software Development Patterns You Should Avoid](https://qiaopang.com/en/posts/2016-05-11-code-model/) (2016-05-11 · 编程语言与工程): 做软件开发十数年,见识了形形色色的开发者,和各种各样的奇葩软件开发模式。本文跟你侃侃这些软件开发模式及其特点。 大巧在所不为,大智在所不虑。 -- 荀子 天论 IDD,也就是 IDE 驱动开发,几乎是初学者步入软件开发殿堂的必经之路。IDE 为开发者屏蔽了很多细节,并且几乎不用配置(相对于 vim / emacs / sublime)就可以使用代码自动补全,… - [Apple TV 4:三屏合一的终章?](https://qiaopang.com/posts/2016-05-09-apple-tv/) / [EN: Apple TV 4: The Final Chapter of Three-Screen Convergence?](https://qiaopang.com/en/posts/2016-05-09-apple-tv/) (2016-05-09 · 编程语言与工程): 手机,计算机和电视这三块占据着人们生活的重要屏幕,一直是科技巨头们垂涎已久,妄图一统的战略要地。这个三屏合一,并非整合出一个屏幕来解决所有的生活工作娱乐的需求,而是三块屏幕能够互相配合,在最合适的屏幕上展示最有价值的内容。记得早在『未来之路』出版的年代,三屏合一就是一个热门的词汇,如今十多年过去了,巨头们仍然在这条路上徘徊和挣扎着。 然而,Apple TV … - [如何学习一门新的语言](https://qiaopang.com/posts/2016-05-08-learn-new-lang/) / [EN: How to Learn a New Language — and a Framework for Learning Anything](https://qiaopang.com/en/posts/2016-05-08-learn-new-lang/) (2016-05-08 · 编程语言与工程): 很久没有把我在 adRise 内部的演讲放出来了,一来最近我分享的频率低了(同事们也做了不少分享),二来有些分享是我们内部的系统,不方便放出来,但今天我跟团队分享的内容和内部系统无关,而是一个 framework,一个学习的 framework。 虽然标题是「如何学习一门新的语言」,slides 的所有内容也围绕着学习一门新的语言展开,但正如我最后放出的两个… - [代码重构之道](https://qiaopang.com/posts/2016-05-03-refactor-rework/) / [EN: The Way of Refactoring](https://qiaopang.com/en/posts/2016-05-03-refactor-rework/) (2016-05-03 · 编程语言与工程): 如果我纯粹为今天工作,明天我将完全无法工作。 -- 某子 程序员要面向未来编程。代码重构永远是程序员们无法回避的话题,当你的软件在编写的那一刻起,重构就不可避免。做一个系统,我们为什么要费劲地不断抽象,竭尽全力让自己的代码能够被重用,说白了就是让我们今日所付出的时间,让未来的我们能够更轻松地工作而已。 有位读者让我就 Martin Fowler 的『重构 -… - [程序员和拉条子](https://qiaopang.com/posts/2016-05-02-noodle/) / [EN: Programmers and Hand-Pulled Noodles](https://qiaopang.com/en/posts/2016-05-02-noodle/) (2016-05-02 · 编程语言与工程): 做拉条子是个苦力活,能把拉条子做好的程序员,写程序也不会差到哪里。 在做之前,你要么手边有本菜谱,要么心中有谱。你「看得见」,「闻得着」还未成形的美食:色泽如何,汤汁几成 —— 仿佛她们就在嘴边,向你招手;写程序前,你的谱就是你的设计,你清晰地知道 goals / non-goals,知道完工那一刻程序的模样。读菜谱是个苦力活,你要了解谱者的意图,知道所需的… - [谈谈面向对象编程](https://qiaopang.com/posts/2016-04-25-reuse/) / [EN: On Object-Oriented Programming](https://qiaopang.com/en/posts/2016-04-25-reuse/) (2016-04-25 · 编程语言与工程): 最近写了些和函数式编程的文章,有读者和我讨论函数式编程和面向对象编程的优劣。二者都是很好的编程思想,都在着力解决代码重用的问题,也彼此吸收对方的优点,所以大可不必去分个高下。然而,相对于函数式编程来说,面向对象编程领域涉及的语言太多,受众广泛,因而门槛较低,产出的垃圾书(国内国外都有)也足够多,往往把读者带入错误的方向。 我面试过许多号称精通面向对象编程(比… - [Make Good Arts:把事情做好、守时、让人愉快](https://qiaopang.com/posts/2016-04-18-make-good-arts/) / [EN: Make Good Art: Do Good Work, Be on Time, and Be a Pleasure to Work With](https://qiaopang.com/en/posts/2016-04-18-make-good-arts/) (2016-04-18 · 工程管理与职场): 刚在车上看了段视频,是 Neil Gaiman 在 UArts 的演讲,挺喜欢这段的,奉献给大家。还在上班的筒子们,预祝大家新年快乐!咱们2016再见! Make good art. I'm serious. Husband runs off with a politician? Make good art. Leg crushed and then eat… - [只好讲讲阿尔法狗了](https://qiaopang.com/posts/2016-03-11-alpha-go/) / [EN: Fine, Let's Talk About AlphaGo](https://qiaopang.com/en/posts/2016-03-11-alpha-go/) (2016-03-11 · AI 与智能体): 自从阿尔法狗赢了李世石一句后,朋友圈就开始各种人类药丸的论调。赢下第二局,这种声音空前强大,目测超过60%。 我不懂围棋,也不敢妄称懂人工智能和深度学习,所以无法评论对弈双方下的每一子。阿尔法狗让人大跌眼镜,赢得干脆利落,无可挑剔,着实是一件可喜可贺的事情。不过对手强大了,和人类药丸 上古时代,巨兽横行,人类药丸。有巢氏,燧人氏定之。 帝尧时期,洪水泛滥,人… - [边界(Boundary)](https://qiaopang.com/posts/2016-03-08-boundary/) / [EN: Boundary](https://qiaopang.com/en/posts/2016-03-08-boundary/) (2016-03-08 · 编程语言与工程): 我们做系统,做设计,很多时候其实就是在明确边界。函数和函数要明确边界,模块和模块要明确边界,服务和服务要明确边界,应用和应用要明确边界。明确边界能让我们的代码逻辑严谨,条理清晰。边界之内,对于外部世界,是个黑盒,一切物质的非物质的交换都只能在边界上通过已知的接口(interface)完成;同时来自外部世界的 impure data 在这里被校验(valida… - [脑力游戏:EventEmitter 的异步处理](https://qiaopang.com/posts/2016-03-07-async-event/) / [EN: Mind Games: Asynchronous Handling in EventEmitter](https://qiaopang.com/en/posts/2016-03-07-async-event/) (2016-03-07 · 编程语言与工程): 用过 node.js 的同学都知道,它实现了 Observer 设计模式,做了一套类似于 Python 的 event listener,叫 EventEmitter。你可以创建(或者扩展)一个 EventEmitter,在需要触发事件的时候,emit 你想要的事件,然后在其他的代码中,监听这个事件进行处理。 EventEmitter 在做 library … - [谈谈系统设计的面试](https://qiaopang.com/posts/2016-02-15-system-design-interview/) / [EN: On System Design Interviews](https://qiaopang.com/en/posts/2016-02-15-system-design-interview/) (2016-02-15 · 系统与架构): 请听题:一个使用 rail(或者 django,或者 express,...)和 MySQL 做的 API 系统,最近流量从 6,000 RPM 激增至 20,000 RPM,整个系统的压力骤升,现在需要在应用层设计一套缓存方案来降低整个系统的负荷。要求是:缓存方案不能在 web 层(包括 proxy)做,也不能使用 framework 自带的,或者第三方的… - [派拉蒙,米高梅和狮门](https://qiaopang.com/posts/2016-02-12-tubitv/) / [EN: Paramount, MGM, and Lionsgate](https://qiaopang.com/en/posts/2016-02-12-tubitv/) (2016-02-12 · 工程管理与职场): 这两周忙活着工作交接,文章放下了不少。本来写了一篇『构建experiment-friendly的公司文化』,却怎么都无法令自己满意,一直断断续续地修改。来美国将近一年了,工作并不如意。可能是美国的大公司都比较懒散吧,我竟找不出在 Juniper CNRD 工作的感觉,更别提创业时的热血沸腾了。有力使不出是种可悲的感觉,只好默默修行… - [beats:监控和日志处理](https://qiaopang.com/posts/2016-01-20-packet-beats/) / [EN: Beats: Monitoring and Log Processing](https://qiaopang.com/en/posts/2016-01-20-packet-beats/) (2016-01-20 · 系统与架构): 一晃新的一年就过去了 1/24,程序君发现自己竟然还没有写上哪怕只言片语,未免让「程序人生」的读者感到失望。如果说之前说自己忙都是瞎忙,如今我是体会到了什么叫忙得连去上厕所的路上都要以 6km/h 的速度前进。不过忙归忙,公众号还是要更新的,今天先来一篇短文,答谢大家的苦苦等待。 系统监控和日志处理这块,有很多现成的工具。除了商业上比较成功的 new rel… - [如何使用一门新的语言](https://qiaopang.com/posts/2016-01-11-how-to-learn-a-new-lang/) / [EN: How to Learn a New Language (and Make It Production-Ready)](https://qiaopang.com/en/posts/2016-01-11-how-to-learn-a-new-lang/) (2016-01-11 · 编程语言与工程): 过去三周,我在疯狂地使用 elixir,做了两个系统,一个是我上文提到的 policy engine,另一个是个尽可能通用的 activity stream / notification system。前者我花了一周,殚精竭虑,写下了 1600 行代码,production ready;后者我写了两周,1500行,是个可以进一步优化的 PoC(proof o… - [盘点我的 2015](https://qiaopang.com/posts/2015-12-28-my-2015/) / [EN: Taking Stock of My 2015](https://qiaopang.com/en/posts/2015-12-28-my-2015/) (2015-12-28 · 读书与随笔): 在 2014 年末,我写下来当年的总结,和对 2015 的展望。如今,又到了回顾 2015 和展望 2016 的时候了。 2014我的三大目标完成地很好: 1. relocate到硅谷(即将启程) 2. 写一本书(『途客圈创业记』,约14万字) 3. 跑一次全马(北马4:48完赛) 小目标基本上都打了个酱油。 2015年三个大的目标: 1. 把身份和住所稳定… - [《技术人创业攻略》序:欢迎来到技术人的世界](https://qiaopang.com/posts/2015-12-15-prelogue/) / [EN: Foreword to "The Engineer's Guide to Entrepreneurship": Welcome to the World of Engineers](https://qiaopang.com/en/posts/2015-12-15-prelogue/) (2015-12-15 · 工程管理与职场): 《技术人创业攻略》的大部分章节,我是在 Sunnyvale 往返 San Francisco 的火车上读完的。五十多分钟的车程,无论坐着,还是站着,我都读得很是津津有味,经常在列车员报了自己要下车的站名后才赶忙背起书包,捧着 iPad 匆匆跑出。 这本书记载的不是一个个成功企业家的光鲜故事,而是一个个平凡却又伟大的技术人艰难刺激的技术取经之路。标题虽然有「创… - [创业及管理:构建利于探索的工作环境](https://qiaopang.com/posts/2015-12-07-culture/) / [EN: Startups and Management: Building an Experiment-Friendly Work Environment](https://qiaopang.com/en/posts/2015-12-07-culture/) (2015-12-07 · 工程管理与职场): 敏捷(Agile),如今是个让每个科技公司恨不得天天挂在嘴边的词语。在这个 CMM (Capability Maturity Model) 已褪去光环,敏捷大行其道的时代,如果一家科技公司不搞些敏捷的实践,仿佛就成了旧时代的破落户一般。然而,很多公司搞敏捷,只不过是在流程上引入了一些敏捷的实践,却未曾从工作环境和文化上注入敏捷的原力。我见过有公司从 wate… - [谈谈工程师文化](https://qiaopang.com/posts/2015-10-05-culture/) / [EN: On Engineering Culture: Passion, Inversion of Control, and Open Source](https://qiaopang.com/en/posts/2015-10-05-culture/) (2015-10-05 · 工程管理与职场): Facebook最著名的工程师文化之一是bootcamp。每个新入职的员工,不管是应届生,还是老油条,都需要在bootcamp里接受洗礼: 6周的训练,每个人都会有一个mentor,会被分配很多技术任务,mentor和你每周1:1,他会帮你引荐做一件事所需要打交道的人。每个人的任务和正式员工的一样,只不过略简单,且不紧急。这些任务来自各个组,可以切身和各个组… - [如何愉快地写个解释器](https://qiaopang.com/posts/2015-09-07-parser/) / [EN: How to Happily Write an Interpreter](https://qiaopang.com/en/posts/2015-09-07-parser/) (2015-09-07 · 编程语言与工程): (一) 在前几日的文章『软件随想录』里,我随性写了一句:「现在似乎已经不是lex/yacc 或 bison/flex的时代了。我亲眼看见一个同事在费力地用perl一行行解析某个系统的数据文件,却压根没想到写个BNF。BNF对他来说,不是一种选择。」 很多同学不解,问我:lex/yacc不是写编译器的么?我又不发明新的语言,它们对我有什么用? 从这个问题里,我… - [软件随想录](https://qiaopang.com/posts/2015-08-31-compiler/) / [EN: Musings on Software](https://qiaopang.com/en/posts/2015-08-31-compiler/) (2015-08-31 · 编程语言与工程): (一) 软件领域有个叫格林斯潘的哥们,估计大家都不怎么熟悉,但下面这句话写过代码可能没几个不知道: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of hal… - [软件性能调优:看数据,还是看概念?](https://qiaopang.com/posts/2015-08-10-zero-copy/) / [EN: Software Performance Tuning: Follow the Data, or the Buzzwords?](https://qiaopang.com/en/posts/2015-08-10-zero-copy/) (2015-08-10 · 系统与架构): == 软件性能调优:看数据,还是看概念? 很多人谈到性能,言必及 zero copy。我们看wikipeidia上的定义: "Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory a… - [应用开发中的网络安全](https://qiaopang.com/posts/2015-06-22-app-security/) / [EN: Network Security in Application Development](https://qiaopang.com/en/posts/2015-06-22-app-security/) (2015-06-22 · 系统与架构): 最近有个朋友让我帮忙看看他系统中的一个问题:他给了我一个用户名密码,让我ssh到他的某台服务器上。那是一台redis server,里面存放数据库查询的缓存和其他的一些业务逻辑。问题断断续续花了不少时间才定位出来,期间应我的要求,朋友又给了我其它两台服务器的用户名和密码。在这个过程中,这个朋友在网络安全意识上的淡薄,可能也是很多web/mobile app开… - [拥抱约束](https://qiaopang.com/posts/2015-06-15-constraints/) / [EN: Embracing Constraints](https://qiaopang.com/en/posts/2015-06-15-constraints/) (2015-06-15 · 编程语言与工程): 这段时间因着工作的关系,在代码里使用了 dynamodb。amazon 的 dynamodb 是个 key-value database,07年 amazon 就发布了一篇著名的 论文 讲 dynamodb,催生了开源界的一些产品,比如 cassandra 和 riak。dynamodb 的优点是显而易见的,比如: - scalability:得益于其基于 … - [撰写合格的REST API](https://qiaopang.com/posts/2015-05-25-api/) / [EN: Writing a Proper REST API](https://qiaopang.com/en/posts/2015-05-25-api/) (2015-05-25 · 系统与架构): (最近两周项目忙得紧,一直没空写文章出来,请大家见谅) 两周前因为公司一次裁人,好几个人的活都被按在了我头上,这其中的一大部分是一系列REST API,撰写者号称基本完成,我测试了一下,发现尽管从功能的角度来说,这些API实现了spec的显式要求,但是从实际使用的角度,欠缺的东西太多(各种各样的隐式需求)。REST API是一个系统的backend和fron… - [永恒不变的魅力](https://qiaopang.com/posts/2015-03-16-immutability/) / [EN: The Timeless Allure of Immutability](https://qiaopang.com/en/posts/2015-03-16-immutability/) (2015-03-16 · 编程语言与工程): 一个程序员,无论你人生的第一个hello world是从basic开始,c开始,抑或javascript开始,接下来了解的一个概念一定是「变量」(variable)。变量是可变的(mutable)。数学中永远不可能成立的 x = x + 1 在编程语言中有了新的内涵:赋值。一个变量的生命周期里,只要需要,其值随时改变。这改变可以是因迭代而发生,或者因状态变化… - [程序员效率指南](https://qiaopang.com/posts/2015-03-02-productivity-guide/) / [EN: A Programmer's Guide to Productivity](https://qiaopang.com/en/posts/2015-03-02-productivity-guide/) (2015-03-02 · 工程管理与职场): 除非你只用dotnet开发软件,不然osx/ubuntu会是更好的开发平台。太多太多优秀的工具在osx/ubuntu下可以一键安装,在windows下却不得不花费超过一个甚至几个数量级的时间去安装,更别提有的工具windows压根没有替代品。 如果不认可Rule 1,那么直接可以跳过下面的文字走人。 我在「能花钱的,就不要花时间」文中已经强调,有条件买15"… - [颠覆者的游戏:编程语言](https://qiaopang.com/posts/2015-02-16-disruptive-lang/) / [EN: The Disruptor's Game: Programming Languages](https://qiaopang.com/en/posts/2015-02-16-disruptive-lang/) (2015-02-16 · 编程语言与工程): 编程语言的用户是程序员,她们对语言的要求不外乎是:好用,没bug,能快速开发,容易写出高质量的代码,性能好,可伸缩,容易部署,生态圈完备,blablabla。所以编程语言这块广阔的市场的价值主张也主要围绕着这些需求展开。这个市场和其他赢者通吃的互联网市场来说,不太一样,第一的占有者也就是维持着不到20%的头部,长尾一路延伸到几百名开外。 最初编程语言围绕着性… - [那些年,我追过的绘图工具](https://qiaopang.com/posts/2014-11-17-graphviz/) / [EN: The Diagramming Tools I've Chased Through the Years](https://qiaopang.com/en/posts/2014-11-17-graphviz/) (2014-11-17 · 编程语言与工程): 文档能力是一个工程师必不可少的基础能力,而高质量的文档往往伴随着高质量的图表。"A picture is worth a thousand words",复杂的概念,逻辑,想法往往能够用图表清晰而生动地表达。一张好的图表离不开制作人的大脑对思维的描述,但同样离不开制作人所使用的工具。好的工具,让同样的事情事半功倍。我是一个工具爱好者,即便手头上有一个称心的锤… - [奇博士的管理课](https://qiaopang.com/posts/2014-10-27-doctor-qi/) / [EN: Doctor Qi's Management Lessons](https://qiaopang.com/en/posts/2014-10-27-doctor-qi/) (2014-10-27 · 工程管理与职场): 毛小天最近有点心绪不安。他的直接老板赵博士要离职了,赵博士的老板老冯正在考察合适的人选。干了五年的程序员,虽然毛小天依然觉得自己还是非常热爱工程师的工作,但他仿佛看见一个难得的机会在向他招手。 今年毛小天26岁,刚刚结婚几个月。婚前的风花雪月换成了婚后的柴米油盐,夫妻俩为鸡毛蒜皮的小事没少争执和拌嘴。毛小天的媳妇是做市场的,一天八小时恨不得有七个半小时都在和… - [雾霾中的人生首马](https://qiaopang.com/posts/2014-10-20-marathon/) / [EN: My First Marathon in the Beijing Smog](https://qiaopang.com/en/posts/2014-10-20-marathon/) (2014-10-20 · 读书与随笔): 2014年10月19日,在期待了半年之久,我终于迎来了人生的首马。尽管头天晚上做了一夜的梦都在祈求上苍把风从张家口灌到京城,让蓝天奇迹般出现,可早上醒来一看,天还是令人失望地脏。5点的PM2.5已经达到了两百多,紧接着就迅速攀升到了近四百。 跑还是不跑,到了这一刻,在这个雾蒙蒙的清晨,已经成了个伪命题。半年的准备,就为了这一天,放弃,所需要的毅力要比坚持跑还… - [如何快速掌握一门技术](https://qiaopang.com/posts/2014-09-15-how-to-master-a-tech/) / [EN: How to Master a Technology Quickly](https://qiaopang.com/en/posts/2014-09-15-how-to-master-a-tech/) (2014-09-15 · 编程语言与工程): 在我们自己的现状和想要达成的目标间,总是横亘着一条名为「先决条件」的大河,似乎除了花费巨大的精力游过这条大河外,别无他法。很不幸,大部分人还没能够接近目标,便被湍急的水流冲走了。然而,还是有少部分人似乎坐上了阿拉丁的魔毯,毫无迟滞地直达彼岸,好像学什么技术都不那么费劲。这是怎么回事? 学一门新的语言,或者新的技术,与其说是一种能力,不如说是一种方法。试问什么… - [为什么SOA如此重要](https://qiaopang.com/posts/2014-09-08-soa/) / [EN: Why SOA Matters So Much](https://qiaopang.com/en/posts/2014-09-08-soa/) (2014-09-08 · 系统与架构): SOA是Service Oriented Architecture的缩写,希望你知道其大概意思。在上一篇文章「测量」中,我引用了Bezos的一段将Amazon的软件架构完全转换SOA的备忘录,它是如此关键,某种程度上可能改变了Amazon的命运(想想AWS)。 SOA是一种思想,而不是wikipedia上列举的一些「已经没落的」技术的合集(XML/HTTP/… - [测量](https://qiaopang.com/posts/2014-09-01-measure/) / [EN: Measurement](https://qiaopang.com/en/posts/2014-09-01-measure/) (2014-09-01 · 系统与架构): 在lean startup的框架里,测量(measure)是非常重要的一环,它承接着"build"和"learn",当系统的全部或者部分构建(build)出来后,我们需要找到合适的手段去测量这个系统,用以获取足够的信息,来为进一步的学习/反思(learn)提供数据。无法测量的软件功能,就像医生为普通感冒开出的药方,最终成效如何,天知道。 「天知道」不是一个工… - [就酱紫跑了人生第一个马拉松](https://qiaopang.com/posts/2014-08-18-marathon/) / [EN: Just Like That, I Ran My First Marathon](https://qiaopang.com/en/posts/2014-08-18-marathon/) (2014-08-18 · 读书与随笔): 7月底的时候,我发表了一篇文章「马拉松,突然变成了一件严肃的事情」。当时无论如何是想不到,这「严肃」的事情,一个月以后便成了真。 当时做的计划,每周三次跑步机上10k+ run,周末两次户外15-20k run,一周大概60-70km的强度,执行的还可以(完成度>80%)。记得第一次在奥森10k,肺都要跑炸了,却跑出个八十分钟的成绩,自己都把自己好好鄙视了一… - [马拉松,突然变成一件严肃的事](https://qiaopang.com/posts/2014-07-28-marathon/) / [EN: The Marathon: Suddenly a Serious Business](https://qiaopang.com/en/posts/2014-07-28-marathon/) (2014-07-28 · 读书与随笔): 七月十八日,当北马预报名正式开始,摆在我面前的就是两条路:半马或全马。半马要容易一些,想来报名者会巨多,但名额少得可怜,最后必然形成千军万马过独木桥的局面,像我这样毕生和彩票几乎无缘的人,必定是无法中签的。所以我最终选择了报名全马。 作为一个身体素质非常一般,常年坐在电脑前工作的大龄程序员,参加马拉松是要有一些勇气的,这勇气来源于同事的鼓励,家人的支持,个人… - [招聘与留人](https://qiaopang.com/posts/2014-07-08-hiring-and-retaining/) / [EN: Hiring and Retaining Talent](https://qiaopang.com/en/posts/2014-07-08-hiring-and-retaining/) (2014-07-08 · 工程管理与职场): 先从招人开始讲起吧。如无特指,本文所指人才为各种工程师,如UI/UX/Software engiener,因为创业公司最缺此类...其它职位也许适用也许不适用,请自行甄别。 在互联网一片红火的大背景下,BAT都要动不动搞各种「英才计划」来抢夺精英,所以现在想找到合适的人才越来越困难。对于创业公司来说,去各大招聘网站上花钱招聘,期待「盘亮条顺会来事儿」还要求不… - [程序员与作家](https://qiaopang.com/posts/2014-07-07-coder-and-writer/) / [EN: Programmers and Writers](https://qiaopang.com/en/posts/2014-07-07-coder-and-writer/) (2014-07-07 · 读书与随笔): 虽然以互联网为代表的「新经济」已经发展了十几二十年,但这股浪潮还远未到结束的时候。它广泛地改变着人们生活的方方面面,也许有一天,会从根本上改变我们工作的方式 —— 而这种工作方式的改变,首当其冲的是构筑互联网经济秩序的程序员群体。 我们看近十年来,在互联网行业中涌现出来的程序员的新工作方式: 1) 在家办公。虽然在家办公的初衷是为公司节省运营成本,但在家办公… - [谈谈跑步](https://qiaopang.com/posts/2014-06-30-running/) / [EN: On Running](https://qiaopang.com/en/posts/2014-06-30-running/) (2014-06-30 · 读书与随笔): 世界杯已经进行了一多半,如果每天都熬夜看球,身体机能一定到了一个临界点。熬夜伤身,这是亘古不变的道理,对于那些平时就不注意身体,缺乏运动的三高人群来说,更是如此。所以,在不看比赛的日子里,睡个好觉,多运动运动,健健身,是极好的。 我系统性地健身始于今年二三月,几乎和在公众号上发表文章同步。由于闲暇时间一下子多了一份「工作」,压力陡增,感觉自己的身体似乎要吃不… - [工作的意义](https://qiaopang.com/posts/2014-06-17-meaning-of-work/) / [EN: The Meaning of Work](https://qiaopang.com/en/posts/2014-06-17-meaning-of-work/) (2014-06-17 · 工程管理与职场): 我们已经走得太远,以致于忘了当初为什么而出发。 - 纪伯伦 先放下看似变态的996(四大笑了,俺们007),就说说普通人的工作时间 - 每周40小时(虽然大多数人应该不止这个数),以二十岁出头开启职业生涯,到60岁退休计,我们的职业生涯总共大概有80000小时。这时间如此之长,远远超过你的任何一项人生活动,比如和家人在一起的时间;这时间过得如此之快,当你每天… - [系统开发之设计模式](https://qiaopang.com/posts/2014-06-16-system-development-design-pattern/) / [EN: Design Patterns for System Development](https://qiaopang.com/en/posts/2014-06-16-system-development-design-pattern/) (2014-06-16 · 编程语言与工程): 这两个概念几乎是大学网络课程的入门概念。Juniper上世纪末兴起的重要原因之一就是严格区分界定控制平面和数据平面,然后用ASIC实现数据平面。数据平面是指一个网络设备用于报文转发的模块,它的效率决定整个设备的效率,一般会由硬件完成。控制平面是指一个设备协议相关的部分,可以没有数据转发那么高效。 当你打开浏览器访问google时,互联网上面的网络设备就开始紧… - [世界杯情缘](https://qiaopang.com/posts/2014-06-09-worldcup/) / [EN: A Love Affair with the World Cup](https://qiaopang.com/en/posts/2014-06-09-worldcup/) (2014-06-09 · 读书与随笔): 记不得是91年还是92年,在一个周日的早上,我随父亲看了一场录播的意甲。那场比赛是尤文对国米,2:1,懵懵懂懂中我第一次接受了足球的洗礼。孩童时代的记忆力是惊人的,我记住了比赛的双方,记住了比分,父亲在尤文进球后激动地挥舞双拳大声呼喊的场景的定格成一张tiff图片永远储存在我的大脑里。 我那时就如初恋般恋上了尤文,虽然我还不知道当时尤文的灵魂人物是忧郁王子巴… - [谈谈编程](https://qiaopang.com/posts/2014-06-02-coding/) / [EN: On Programming](https://qiaopang.com/en/posts/2014-06-02-coding/) (2014-06-02 · 编程语言与工程): 未来的世界里,不会编程,虽不会决定你的生存能力,但会影响你的生存能力。 我们仔细想一想编程是什么?编程是通过构建一个系统,将一系列的输入,变成一系列的输出,通俗地说,就是给定一个问题,用计算机高效解决这个问题的能力。放到生活中一些的场景里: 老板给你一堆数据,你要从中筛查,组织出一个报表; 家里的数码资料越来越多,你想找拍摄于某地的一个视频; 工作中对着计算… - [触觉和反馈系统](https://qiaopang.com/posts/2014-05-19-digital-sensory-system/) / [EN: Touch and Feedback Systems](https://qiaopang.com/en/posts/2014-05-19-digital-sensory-system/) (2014-05-19 · 系统与架构): 今天去斯坦福的教室里听了个"EngX: The Digital Sensory System"的讲座,算是了却了自己一直的一个心愿:坐在斯坦福的教室里像模像样地听一堂课。建议大家如果有机会来硅谷出差,可以先看看event.stanford.edu,有没有中意的讲座。 整个讲座共分为三个环节:Seeing (computer vision), Touching… - [和 Siri 创始人 Adam 面对面](https://qiaopang.com/posts/2014-05-13-the-founder-of-siri/) / [EN: Face to Face with Siri's Co-Founder, Adam Cheyer](https://qiaopang.com/en/posts/2014-05-13-the-founder-of-siri/) (2014-05-13 · 编程语言与工程): 一月份来硅谷出差,就想参加一下本地的 meetup。可惜当时出差时间短短一周,要和各路英雄 social,又要没日没夜干活,所以尽管自己对两三场技术活动垂涎三尺,但还是无缘参加。这次出差时间稍长,一落地,我想到的第一件事就是赶紧看看 meetup。然后,就发现了三个比较不错的活动:一个是昨天晚上的 Adam Cheyer 的 tech talk,一个是5/2… - [谈谈管理](https://qiaopang.com/posts/2014-04-28-management/) / [EN: On Management](https://qiaopang.com/en/posts/2014-04-28-management/) (2014-04-28 · 工程管理与职场): 以下我所述并不是一个完整的体系,我努力从脑袋里剥茧抽丝,但有些知识太过于下意识,专门想不一定想得起来。本文面向的对象是一线(技术)管理者 —— 因为目前而言我的所有的管理经验来自于一线。 就像大家看到的这样,我刻意模仿『敏捷宣言』(注意也和『敏捷宣言』一样,尽管右项有其价值, 我们更重视左项的价值)写了几条我自以为是的价值观: 信任 优于权威 观察 优于测量… - [再见西二旗](https://qiaopang.com/posts/2014-04-25-xierqi/) / [EN: Farewell, Xierqi](https://qiaopang.com/en/posts/2014-04-25-xierqi/) (2014-04-25 · 工程管理与职场): 03 年我毕业到神州数码报道的时候,下了西二旗城铁后下巴都快掉地上了 —— 城铁对面的神马大厦/京蒙高科和城铁间夹着条杳无人烟的小马路,一辆装满了农产品的马车(还是牛车,记不得了)在路中间悠闲地走着,仿佛这是条田间小道。我当时很想扇自己一个耳刮子:这么个鸟不拉屎的地方真的是我魂牵梦绕的北京么? 05 年我跳槽离开西二旗到了五道口,舒坦了不少。和西二旗的荒凉相… - [谈谈 Python](https://qiaopang.com/posts/2014-04-24-python/) / [EN: On Python](https://qiaopang.com/en/posts/2014-04-24-python/) (2014-04-24 · 编程语言与工程): 请打开任何一个python解释器,在里面输入:import this。我所了解的任何一门其他语言都没有如此巧妙而又大张旗鼓地将其文化写入了语言本身。 这段文字值得好好消化。你一定会好奇,this究竟是什么?如果你对python的package机制有了解,那么,你就应该知道该从python的安装路径下找这个源码this.py,打开一看,一段格式熟悉,但乱七八糟… - [谈谈编程思想](https://qiaopang.com/posts/2014-04-23-thinking-in-coding/) / [EN: On Programming Philosophy](https://qiaopang.com/en/posts/2014-04-23-thinking-in-coding/) (2014-04-23 · 编程语言与工程): 编程思想是个宏大的主题,我不敢保证我能在短短的一两个小时里讲得全面而深入。推荐给大家一本好书『冒号课堂』,是国内为数不多的讲编程思想的经典之作。无奈这本书已经不再出版,只能在图书馆里一睹芳容(我几年前在国图和它偶遇)。 各种软件思想虽然层出不穷,但其本质是降低系统复杂度,减少重复,减少代码的变更。掌握了这个大方向,理解各种编程思想就容易多了。 下文所涉及的代… - [设定目标](https://qiaopang.com/posts/2014-04-22-goal-setting/) / [EN: Setting Goals](https://qiaopang.com/en/posts/2014-04-22-goal-setting/) (2014-04-22 · 工程管理与职场): 有清晰明确的目标是我们每天生活的动力,(很可能)也是快乐的源泉。之前我年年为了减肥而跑步健身,可每次都是雷声大雨点小,体重还是不由自主地从七十出头滑到了八十。今年在同事的激励下,我设定了一个跑半马的目标,每天跑步的动力十足。原因是「减肥」意义太不明确,我又不是胖到令人发指,减到多少算是个头?所以对我而言这个目标不够好,所以我的动力相对弱一些。可跑半马不一样,… - [技术人的视野](https://qiaopang.com/posts/2014-04-21-insight/) / [EN: The Technologist's Vision](https://qiaopang.com/en/posts/2014-04-21-insight/) (2014-04-21 · 工程管理与职场): 对我而言,周末要比平时忙碌得多。陪孩子上课,读书,玩耍是我的必修课程。这也是周末为何我有时比平时还要早发文章。有朋友曾经提醒我,新闻上说了孩子这么小,上各种早教课没用,只会给孩子带来不必要的压力。我不这么认为。我觉得评判一个课程有用没用,要看孩子是否喜欢,大人说了不算。对我而言,我只能提供各种机会和必要的引导,如果她不喜欢,不强迫就是了。为什么要听信和我毫不… - [谈谈读书](https://qiaopang.com/posts/2014-04-16-how-to-read/) / [EN: On Reading](https://qiaopang.com/en/posts/2014-04-16-how-to-read/) (2014-04-16 · 读书与随笔): 读书本为消遣和获取知识,读得过程中加上了自己的经验、理解和洞察,便成了智慧。「必读」是个很不好的词,「必」有强迫的意味,有太多的功利性。乔布斯以他在里德学院学了「字体排印学」(typography)为佐证说明 "you can't connect the dots looking forward; you can only connect them look… - [黑匣子](https://qiaopang.com/posts/2014-04-15-flight-data-recorder/) / [EN: The Black Box](https://qiaopang.com/en/posts/2014-04-15-flight-data-recorder/) (2014-04-15 · 系统与架构): 很多人看到这个标题的第一印象可能是 —— 这是要讲飞机上的黑匣子么?有点关系,但主要讲软件中的flight data recorder。不过我们先从黑匣子讲起。 Flight Data Recorder(FDR)用于记录飞机行驶过程中的各种关键数据,其规格如下: 电源:115V AC 或 28V DC 电源能力:30天不间断 使用期限:至多6年 包含水下定位… - [谈谈工资奖金期权和股票](https://qiaopang.com/posts/2014-03-27-salary-bonus-option/) / [EN: On Salary, Bonuses, Options, and Stock](https://qiaopang.com/en/posts/2014-03-27-salary-bonus-option/) (2014-03-27 · 工程管理与职场): 大部分坐班的程序员的收入主要来源都是这几样:工资,奖金,期权,股票。今天我们就说说这几部分收入。 这里讲的工资是严格意义上的基本工资,就是没有任何水分,每个月都会固定发到你手上的那笔钱。当你拿到一份录用通知时,一定要弄清楚里面的收入结构,否则有些薪资看上去很美,但如果很大一部分都是可能看得见拿不到的奖金期权,那么需要好好衡量一下。 工资具有滞后性,它是对你过… - [即使别人是码农,你却不该是](https://qiaopang.com/posts/2014-03-26-programmer-not-coder/) / [EN: Even If Others Are Code Monkeys, You Needn't Be](https://qiaopang.com/en/posts/2014-03-26-programmer-not-coder/) (2014-03-26 · 工程管理与职场): 有篇文章《为啥中国的程序员都被称为码农》(以下简称「码农」)看着让人心酸。文章说的虽然有些道理。但程序君认为:别人是不是码农与你无关,你不该成为那篇文章作者眼中的码农。作者说码农一词强调程序员「地位低下、枯燥和劳累」。作为一个程序员,我也来随便说说。 一般而言,程序员的收入水平不低。我没有具体的数据,但在一线城市,程序员的平均收入应该都能达到该市的中上水平 … - [为什么你要懂点信息安全](https://qiaopang.com/posts/2014-03-25-security/) / [EN: Why You Need to Understand Information Security](https://qiaopang.com/en/posts/2014-03-25-security/) (2014-03-25 · 系统与架构): 现在这个社会,数据库脱裤暴库事件,邮件泄露,信用卡信息泄漏,员工目录泄露等事件层出不穷,防不胜防。如果当你我的私人邮件成为监控者茶余饭后津津乐道的谈资,你我的身份信息,密码信息,银行卡成为骇客用来支付他们奢华生活的工具,你还会觉得信息安全还是和自己毫无关系么? 所以,即使一个人不从事安全领域相关的工作,也需要懂点安全知识。 首先,安全涵盖三个基本内容:可用性… - [软件开发升级打怪之路](https://qiaopang.com/posts/2014-03-24-road-to-senior/) / [EN: The Monster-Slaying Road to Leveling Up in Software Development](https://qiaopang.com/en/posts/2014-03-24-road-to-senior/) (2014-03-24 · 工程管理与职场): 很多刚刚入门的同学都有这样的困惑:我刚刚上完了xx语言的课程(或者自学了xx语言),下一步该怎么学习才能达到开发产品的水平? 办法很多,程序君讲讲自己最喜欢的,也是最暴力的 —— 直接动手使用你刚掌握的技能开发产品。 这有两种途径:(1) 加入一个使用该种技能的团队进行产品开发;(2) 自己动手开发。 途径(1)在任何时刻都是最佳选择,一群人在一起探索(尤其… - [公司成长之痛](https://qiaopang.com/posts/2014-03-20-corp-growth/) / [EN: The Growing Pains of a Company](https://qiaopang.com/en/posts/2014-03-20-corp-growth/) (2014-03-20 · 工程管理与职场): 自打踏入了创业者的行列,我就总会不自觉把自己置于某个位置之上,去操心如果是我掌舵,该如何如何。最近,我心头一直萦绕的一个问题是:为什么一家公司,不管曾经多么辉煌,多么具备创新能力,最终都会不可避免地向平庸滑去,甚至走向衰落? 这似乎是『创新者的窘境』中已经讨论过的话题。这本书阐述了破坏性技术是如何取代已有技术,以及管理良好的企业内部所蕴含的强大力量是如何阻碍… - [压力管理续:人比人气死人](https://qiaopang.com/posts/2014-03-19-pressure-management-2/) / [EN: Pressure Management, Continued: Comparison Kills](https://qiaopang.com/en/posts/2014-03-19-pressure-management-2/) (2014-03-19 · 工程管理与职场): 除了生活工作中直接的压力,还有一种间接的与别人比较的压力,程序君是怎么看待这种压力的?比如某个基友都结婚了,自己还单着,某个朋友明明实力不如自己却拿了大offer,自己还得苦苦找工作,某个同学当年敢放弃稳定生活大好钱景去追求理想,现在活得有滋有味,而自己为了钱怂了,结果也没赚到预期中的大钱。虽然知道人比人气死人的道理,但有时候情不自禁地就会去想,很影响心情。… - [为什么我比你有时间](https://qiaopang.com/posts/2014-03-17-spirit-management/) / [EN: Why I Have More Time Than You](https://qiaopang.com/en/posts/2014-03-17-spirit-management/) (2014-03-17 · 工程管理与职场): 时间管理的基石是『四象限』: 我的案例可能不具备普适性:我每天五点四十左右起床,六点十分左右出门,大概六点五十的样子已经坐在工位上开始一天的事情了。所以我可以做事的时间自然比很多人多出来两三个小时。 当然,多出几个小时的时间并不意味着就可以高效地做事。这里我讲『做事』而非『工作』是因为这段时间我基本都不在工作(除了紧急事件或者开会)。这是很重要的,也是我想讲… - [那些年,我追过的语言](https://qiaopang.com/posts/2014-03-12-the-languages-i-used/) / [EN: The Languages I Chased in Those Years](https://qiaopang.com/en/posts/2014-03-12-the-languages-i-used/) (2014-03-12 · 编程语言与工程): 程序君也年轻过,年轻的代价就是盲目追随。 从MS-DOS6.0开始,程序君就是微软的狂热拥趸。 这种狂热自win95走上高潮(有谁还记得win95光盘里带的Good Times的MV,请举手),历经《未来之路》,windows2000,最后在dotnet发布后到达顶峰。 那段时间,只要微软反对的,就是我反对的。 不喜欢Netscape Navigator,只… - [创新不是运动,而是文化](https://qiaopang.com/posts/2014-03-11-creativity-is-a-culture/) / [EN: Innovation Is Not a Campaign, It's a Culture](https://qiaopang.com/en/posts/2014-03-11-creativity-is-a-culture/) (2014-03-11 · 工程管理与职场): 所谓换帅如换刀,新 CEO 的三板斧还未完全打完,公司又开始了轰轰烈烈的创新活动,突然之间,创新变成了挂在老板嘴上的高大上。每个人心里的问号是,这波突如其来的浪潮究竟能持续多久? 我不否认通过公司的执行团队放低姿态广泛纳谏,举办黑客马拉松,定期奖励有创新贡献的员工等等这样的运动来提高整个公司的创新氛围 —— 事实上,这些都是很好的手段,让人们开始关注于创新。… - [如何从零开始学一门程序语言?](https://qiaopang.com/posts/2014-03-10-how-to-learn-a-new-lang/) / [EN: How to Learn a Programming Language from Scratch](https://qiaopang.com/en/posts/2014-03-10-how-to-learn-a-new-lang/) (2014-03-10 · 编程语言与工程): 我的第一门实用型的语言是Visual Basic。看了一段时间的windows编程,在各种句柄,消息循环以及繁复的MFC中迷失后,VB让我见识到了简单,直接了当,以及文档(MSDN)的重要性。学习的门槛是个大问题,有些语言(及其背后的框架)没有一定的基础最好不要碰。 当然,语言总是在发展,现在在dotnet框架下的VB已经失去了那种简单直接的美。 第一门语言… - [浅谈unix之美](https://qiaopang.com/posts/2014-03-05-unix/) / [EN: On the Beauty of Unix](https://qiaopang.com/en/posts/2014-03-05-unix/) (2014-03-05 · 系统与架构): 在『高效能程序员的七个习惯』里,我谈了 unix 的哲学。这里举个例子: 先解释一下,docker ps -a -q 列出了系统中所有container的id,docker rm 根据id删除某个container。但是我要删除所有的container怎么办?难道要我再做一个新的命令 docker rm-all,或者 docker rm --all? 两种方… - [如何发表专利](https://qiaopang.com/posts/2014-03-04-patents/) / [EN: How to Publish a Patent](https://qiaopang.com/en/posts/2014-03-04-patents/) (2014-03-04 · 工程管理与职场): 专利并不神秘,也没什么高大上的,就是个公开的解决某个问题的技术方法而已。我认为真正高大上的专利,应该是对人类文明起到推动作用的(改变或者即将改变你我的生活方式或者习惯),比如说苹果的多点触控,tesla的电池技术,甚至twitter的下拉刷新,才算。 按专利发表的目的来说,大体有两种: 产品中使用的『杀手级』技术的自我保护。如多点触控。 为完善自身的专利组合… - [高效能程序员的七个习惯](https://qiaopang.com/posts/2014-03-03-7-habits/) / [EN: The Seven Habits of Highly Effective Programmers](https://qiaopang.com/en/posts/2014-03-03-7-habits/) (2014-03-03 · 工程管理与职场): 每个程序员入门的第一堂和第二堂课应该是和unix哲学相关的内容,简言之就是:做一件事,做好它。具体点: 小即是美。 让程序只做好一件事。 尽可能早地创建原型。 可移植性比效率更重要。 数据应该保存为文本文件。 尽可能地榨取软件的全部价值。 使用shell脚本来提高效率和可移植性。 避免使用可定制性低下的用户界面。 所有程序都是数据的过滤器。 再具体一些(TL… - [能花钱的,就不要花时间](https://qiaopang.com/posts/2014-02-25-money/) / [EN: If You Can Spend Money, Don't Spend Time](https://qiaopang.com/en/posts/2014-02-25-money/) (2014-02-25 · 工程管理与职场): 如果要寻找这个星球上最抠门的群体,那么一定非程序员们莫属了。有个笑话是找对象要找程序员:『挣得多,花的少;常加班,死的早』。 在创业之前,我也是个抠门的主。公司给配笔记本,就绝不自己买。一个 N73 用三年如果不是丢了就不会买新的。东西永远是够用就好,而不管是否在技术上已经落伍;为了找一款软件的注册码,我可以花上一个小时,不厌其烦地注册有注册码的论坛,攒积分… - [谈敏捷](https://qiaopang.com/posts/2014-02-18-agile/) / [EN: On Agile](https://qiaopang.com/en/posts/2014-02-18-agile/) (2014-02-18 · 编程语言与工程): 敏捷(agile)作为软件开发的一种模式,已经热了有好几年的时间。可很多人连敏捷宣言都不知道或者不理解,就开口闭口谈敏捷,何其谬哉! 敏捷宣言: 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 高于 合同谈判 响应变化 高于 遵循计划 也就是说,尽管右项有其价值, 我们更重视左项的价值。 不知道或者不理解这一宣言而去实施敏捷,就好像打仗… - [闲话说抽象](https://qiaopang.com/posts/2014-02-17-indirection/) / [EN: Musings on Indirection](https://qiaopang.com/en/posts/2014-02-17-indirection/) (2014-02-17 · 编程语言与工程): 在计算机领域,我最推崇的一句名言是:「软件开发中遇到的所有问题,都可以通过增加一层抽象而得以解决」(All problems in computer science can be solved by another level of indirection)。 这话不难理解。我举几个例子: 操作系统是裸机和应用程序之间的抽象。想想没有操作系统的时代,应用程序…