What Is Driving The Development?

June 30, 2016

What makes software development so hard1? Is it the new framework we used, the manager who often judge his guys, or the bad weather in these years? More generally, what is the invisible force driving development process? This question pop up in my mind now and then as I've seen quite a few lousy projects all the way of my professional life.

谁在驱动开发进程——一个变化了的新视角

May 26, 2016

我做过很多烂项目。烂项目有益个人成长,但早期它挺困扰我。因为它让我怀疑自己就是那个败事鬼:为啥我参与的项目都如此不堪?这种自责随着职位的升高有所缓解。但原因绝不是可以训斥我的人在减少。这有点象透过一个镜头观察世界。多年来这个镜头逐渐拉远,视野扩大,我得以看到越来越多的东西。伴随这个过程的,是思维的伸展:什么力量在驱动软件开发进程?软件开发困境1是如何形成的?是我们用的不成熟的框架?那位喜欢指责下属的经理?还是今年糟糕的天气?

敏捷成熟度(AML)

Nov. 30, 2015

敏捷成熟度(Agile Maturity Level, AML)是一套用来衡量软件开发团队敏捷程度的 KPI 指标。 它涉及团队大小、测试自动化、信息共享、过程组织等几个方面。每个指标有一个分值,合计100分。 通过对团队某一段时间里的表现应用这些指标,我们能得出 0~100 间的一个分数,此即该团队的AML得分。它能直观地回答“我这个团队是否是个敏捷团队?”,以及“他们有多敏捷?” 之类的问题。

OOP vs FP(2)

Nov. 17, 2015

第一篇中我们通过OOP向FP的重构改变了代码的本质。 我们同时提到原OOP版代码还有不少其他问题。本文中我们对此做下解释并使代码进一步函数化。

OOP vs FP(1)

Nov. 12, 2015

早年从 PowerBuilder 转向 Java 时,我对 面向对象(Object Oriented,OO) 这种能直观映射现实世界的 范式 非常着迷。但从用 Python 开始,我看到了 面向函数(Function Oriented,FO) 范式向我敞开的新世界。我逐渐有了这样的观点:简单地应用 “程序对象—现实世界对象” 的映射并不总能开发出好的软件,转用 FO 或二者结合可能更好。 本文通过实际代码从编程角度给二者做下对比。偏见和错误难免,欢迎指正。

乱码 £¡

Nov. 9, 2015

相信很多程序员都遇到过乱码问题。这是一个简单问题引发的普遍困扰。说其简单是因为造成乱码的原因很简单:编码(Encoding)不一致。比如某文本的实际编码是 windows-1252,而当前的程序(如 记事本 )却按 utf-8编码来解读这个文本。这样,用前者编码的文本 “我爱sublime!” ,被用后者打开显示时,就成了 “ÎÒ°®sublime£¡” 。

用 MaraDNS 搭建 DNS 服务器

July 9, 2013

本文记录了我用 MaraDNS 搭建一个域名服务器(Domain Naming System, DNS)的简要过程,备以后参考。 注意这是一篇快餐式的操作指导,不会涉及dns原理、dns服务实现的方式等深入话题。要了解这些东西,请参考相关资源或google搜索。

Clojure 线性(箭头)操作符

May 7, 2013

学习Clojure过程中发现,那两个减号和大于号构成的箭头运算符(->->>)太好用了,大爱。

KnockoutJS 应用结构与开发模式解析(二)

April 29, 2013

上一篇中我们介绍了 Knockout (KO 的应用结构。 本篇则着眼于基于这种结构的 开发模式 。 本文主要面向有经验的 KO 应用设计或开发管理人员。如果你刚开始接触 KO ,我建议你先看一下官网上那个简单而精彩的向导做入门。

KnockoutJS 应用结构与开发模式解析(一)

April 26, 2013

最近碰到一个JavaScript(JS)框架——KnockoutKO)。试用后感觉不错。 所谓的“模型-视图-视图模型”(Model-View-View Model,MVVM))以及其对应的开发模式很合我的胃口。本文打算从软件工程和管理的角度, 对 MVVM 模型及其对应的开发模式做个解析和探讨, 备以后参考。

Clojure 的编译和执行

April 9, 2013

本文是我自己学习Clojure过程中为加强理解而作的一次梳理。 其目的是建立起对Clojure程序的感性和宏观的认识。 如果你是刚开始接触Clojure,本篇可以作为学习Clojure语言的一个入门参考。 本文不会关注Clojure语法和核心库1; 我也会刻意回避那些自动化构建工具(如 leiningen 或 counterclockwise 插件)。 我觉得在试图理解原理的时候, 这类工具只会让你更迷惑。

Clojure 的洞穴

Jan. 15, 2013

这是 Steve Losh的Clojure教程系列“The Caves of Clojure”的中译文。经 Steve 本人同意翻译并分享给中文读者。感谢Steve。本系列文章通过用Clojure 语言开发一个探险游戏来帮助读者学习Clojure程序设计。本教程不适合Clojure初学者。作者并没有太多介绍Clojure语言本身,而是展示了程序设计、函数化编程以及相关工具等方面的内容。

Clojure 的洞穴:第3.2部分

Jan. 15, 2013

Clojure的洞穴翻译系列第3.2部分。可参考英文原文)。 本篇是一个教程系列的一部分。 如果还没看过,你最好从头开始。

Clojure 的洞穴:第3.1部分

Jan. 13, 2013

Clojure的洞穴翻译系列第3.1部分。可参考英文原文)。 本篇是一个教程系列的一部分。 如果还没看过,你最好从头开始。

Clojure 的洞穴:第二部分

Jan. 12, 2013

Clojure的洞穴翻译系列第二篇。可参考英文原文)。 本篇是一个教程系列的一部分。 如果还没看过,你最好从头开始。

Clojure 的洞穴:第一部分

Jan. 8, 2013

(这是“Clojure的洞穴”翻译系列的第一篇。英文不错的建议阅读原文。 ——全全注)。 最近我又有了玩几个新游戏的冲动,比如NethackDwarf Fortress(后者是因这本书而起的)。除了因为它们难以置信的有趣,还因为它们令我有了开发一个自己的rogue风格游戏玩玩的想法。

失败的反思:时间的碎片化

Oct. 5, 2012

本文是“失败的反思”系列文章之一。时间的碎片化是软件开发过程的危害之一。本文分析了时间碎片化的原因和结果,并试图给出修正此管理缺陷的方式方法。