[知乎专栏–思考IT]在GitHub,他们是怎么玩的?

Github.com,现在是全世界程序员,尤其是开源爱好者的乐园。在这个乐园里,大家玩得不亦乐乎,那么他们在玩些什么?又是怎么玩的呢?

开源项目

当然,Github首先是一个开源项目的免费托管平台,在Github上已经聚集了超过1000万个代码仓库;超过300万的注册会员(基本上都是热爱开源的程序员),而达到这一里程碑只用了不到4年的时间,这足以让人感受到开源的趋势以及GitHub的受欢迎程度。

一大批知名的开源已经迁入Github或者在Github上设立镜像仓库(例如:大量的Ruby、Rails相关项目,大量的JavaScript、NodeJS相关项目等等),较为著名的项目有:

1. bootstrap,一个twitter开源的CSS框架

2. jquery,最为著名的JavaScript框架

3. node.js,新兴的基于Google Chrome V8引擎的JavaScript语言:NodeJS

4. RubyOn Rails,最著名的Web框架之一

5. Font-Awesome,一个神奇的字体项目,以字体的方式,提供几百个实用的小图标

6. angular.js,流行的JavaScript前端MVVM框架

7. free-programming-books,汇集了全球最为流行的各种免费编程图书(后来还发展出了多种不同的语言版本)

8. …

玩玩游戏

不过,这其实并非Github最好玩的开源项目。最近有一个开源游戏,在Github已经火爆得一塌糊涂。最初,是一个叫做《Threes》的收费小游戏,然后是一个叫做《1024》的克隆版本,但是真正让一切开始爆发的,是在Github上开源的《2048》,因为他是一个开源HTML5游戏项目,因为Github上极其方便的Fork机制,派生版本开始如雨后春笋一般涌现了出来:

· 《2048朝代版

· 《2048超进化

· 《2048大型强子对撞机版

· 《2048哲学家版

· 《2048 3D版

· 《斐波那契函数版

其实还有非常多的奇葩版本,这里就不一一介绍了。
更多游戏,请访问: Web games 路 GitHub

写作

在Github上,不仅仅可以协作编程,很多软件开发类的书籍,也可以在Github上协同编写。与编程非常类似,写书的作者也是有一个“主笔”,由他来定下全书的结构与主旨,然后率先写出大纲与核心的部分。

其余的协作者,可以fork出一个自己的版本,然后修改字句、添加段落,然后以Pull Request的方式,看看主笔是否接受。

再外围一些的协作者,可以提交issue,用来做书籍的校对、勘误工作。通过迭代式的进度管理,慢慢的,一本书也就写出来了。

· 一群普林斯頓數學家,用geek最愛的開源碼託管平台GitHub寫成600頁專書! 普林斯顿大学的Andrej Bauer与另外20多位数学家,历时半年时间,完成了一本《同伦型理论:数学的单价基础》(HomotopyType Theory: Univalent Foundations of Mathematics)

· 追蹤法律修訂動向,德國社群網站助資訊公開德国的Stefan Wehrmeyer,将所有的德国联邦政府法律张贴在Github,并追踪其修订历史,甚至可以自行修改文件的内容。

· 起草并修正专利许可 Twitter 的首席律师 Benjamin Lee 通过 GitHub 为工程师们起草了一份新的专利许可协议。而不久之后,GitHub 用户们就为其修正了很多小的语法错误。再后来,Twitter 联合创始人 Evan Williams 的孵化器创业公司商业运营总监 Trishan Arul 又建议加入一些文本,Lee 表示接受。

· 分享和改进各种音乐 来自德州一家圣公会教堂的音乐总监 Adam Wood 正尝试将一份格列高利圣咏的大纲上传至 GitHub。他认为对于唱诗班总监而言,那是最好的用来分享和改进各种音乐的服务平台。

用Github Pages写博客

当然,借助Github Pages,更多的程序员开始长期“泡”在Github。他们把自己的Blog,用Jekyll、octopress或者hexo架设在Github上。

那么,为什么要在Github上写博客呢?首先当然是因为免费,我们可以申请一个包含自己用户的首页,类似于:name.github.io这样。感觉很有高端大气上档次的感觉。

其次是因为技术含量看起来很高,其实又并不是很难。借助一些开源的blog静态化工具,我们可以轻松上手,在30分钟内搞定自己的Blog site。

· 搭建一个免费的,无限流量的Blog—-githubPages和Jekyll入门

· 教程:一步步在github上建立octopress博客

· hexo你的博客

介绍一个有趣的架设在Github上的技术blog吧,岁月如歌 淘宝著名前端工程师玉伯的blog,人气极旺。

人才库

当Github汇聚了越来越多的程序员,而这些程序员在Github日夜不停的开发着各种不同的开源项目,一个全球最大的编程人才库,就此形成了。简历生成器是一个有趣的小工具,只要输入你在Github上的用户名,就能够生成一份Github版个人简历,你的开源经历,企业可以一目了然。

甚至,现在已经有了第三方网站提供基于GitHub的人才招聘服务,例如:

· GitHire:通过它,可以找出你所在地区的程序员。

· Gitalytics.com:通过它,能评估某位程序员在GitHub、LinkedIn、StackOverflow、hackernews等多个网站的影响力。

延伸阅读

这篇文章,已经附带了太多的Link,但是其实还有很多的好文章,我没有引用,下面给两个链接,推荐浏览:

· 如何高效利用GitHub 与我的这篇文章很类似,但是更加全面

· Github at 伯乐在线 伯乐在线上收集的有关的文章

[知乎专栏–思考IT]聊我所理解的敏捷(Agile)——外一篇

那些众所周知的敏捷宣言,敏捷方法,敏捷教科书,敏捷大神,我就不提了。只是聊聊,我所理解的敏捷的本质。

敏捷的本质,是承认软件开发的复杂性。而且承认,这种复杂性,达到了这样一种程度:“无法通过足够充分的前期准备,而消除后续的风险。甚至于,前期准备得越是充分,后续的风险越大。”

往往有很多人,将建造大楼与软件开发做简单的类比,以说明前期设计的重要性。但事实上,我们无法想象,一幢大楼,在接近完工的时候,有新需求出来,要求整个设计从从一幢四边形的楼,变成一幢六边形的楼。

但是,在软件开发领域,就是会出现这样的需求,而且,这种需求虽然会被所有的开发人员痛骂,但却“实际上具有其合理性”。

如何理解需求的复杂性、易变性?

软件的出现,还不到100年。建筑的历史,则至少有5~6千年了吧。人类对于建筑的需求,已经足够稳定(相对于软件而言)。另一方面,软件的可能性,又实在是太强大了,至少重力因素软件可以毫不考虑。

软件开发这个领域,还太年轻,大家都没有足够的经验。年轻到了,甚至现在去急于总结经验,都是错误的!

来源于Christopher Alexander《A Pattern Language: Towns, Buildings, Construction》曾经给予Gang of Four以巨大的启发,所以他们写出了著名的《Design Patterns: Elements of Reusable Object-Oriented Software》。

但是,现在看来,设计模式的流毒真的不少…

所谓敏捷方法,不过是一种需求发现与谈判策略

过去的思路,认为需要尽可能发现所有的需求,并且做好设计,然后再开始开发。现在大家已经意识到,一边做,一边确认,一边发现,一边纠正。从总体成本上衡量,反而会更加低。

但是,在实际施行敏捷的过程中,“一边做,一边确认,一边发现,一边纠正”,也同样可能存在巨大的浪费。而且,因为披上了敏捷的外衣,反而变得无可指责了。

本质上,这是一种对于开发方,而非需求方,更加有利的谈判策略。

总结陈词

我们现在还缺少一系列量化的手段,去衡量需求的复杂度,开发的效率以及各种流程方法的优劣。(不要跟我提Function Point Estimation,那种教授坐在书桌边发明的方法~~)

因为缺乏这种量化,所以大师满天飞,却让人无所适从。

外一篇:“设计模式的荼毒”体现在何处?

可以从两个角度来谈这个问题:

1. 建筑里的结构工程师,如何设计结构?

我们都知道,建筑设计中的结构工程师,非常重要,而且,他们必须非常深入的了解数学这门学问。

在结构设计出来之后,他们还需要做一些模拟与演算,以确保他们设计的结构,能够承载整个建筑。

再进一步,一个敢于设计结构的结构工程师,有很长的一个学习阶段,以了解前辈大师的经典结构与数学模型。

可以说,建筑结构学,是一门科学,是一门以数学模型和科学实验为基础的严谨的科学。

2. 中医如何看病

中医,也有一套理论:阴阳呀、五行呀、相生相克呀,等等等等。在这套理论的基础上,也有上千年的经验积累,什么药吃了能治什么病,大概是什么计量。

但是,说到底,这是一门「经验科学」,或者直白一点说:「这不是一门科学」。

声明一下:我不是中医黑,虽然我也不是中医粉,至少中医的确有大师,他们真的治好了很多病人,这个我绝不会否认。

毕竟:疗效的好坏,还是很难伪造的。

3. 软件架构师,如何设计架构?

架构师,看起来很像结构工程师,但是:他们没有科学基础,只有一些「设计模式」和「架构模式」。

那些「模式」的有效性与适用范围,并无严谨的证明,只有一些模模糊糊的「实践案例」。

「听说设计模式是好东西」,就像「听说人参大补元气」一样。真正的中医,尚且不敢给病人乱开人参,但是架构师,他们真敢把所有的「设计模式」都用上。

中医再怎么不靠谱,真是把病人给治死了,医生也会吃不了兜着走。但是,我们什么时候听说过一个项目的失败,是因为架构师不合格呢?

还有个更大的罪魁祸首「需求变动」顶在前面呢。

4. 总结陈词

一种「理论」却没有严谨的理论支撑,一门「手艺」却难以客观的评价手艺高低,随便看两本模式的书,就敢开整。没有流毒,就怪了。

[知乎专栏–思考IT]架构的力量

最近看了两本书,这两本书当然大有不同,一本书专注于分析软件设计,尤其是架构设计的书;而另一本则是在分析互联网领域的法律与创新的关系问题。

两本都是好书,都值得分别为他们写一篇读书心得,只是这里想谈谈的是两本书中,相通的部分——「架构的力量」。

  • 端对端原则

在《思想的未来》中,作者回顾了互联网的架构设计思想:
「这一原则是由网络设计者Jerome Saltzer、David Clark、David P.Reed在1981年首次提出的,被称为端对端(end-to-end argument, e2e),用以指导网络设计者们开发网络协议及应用程序。」
「端对端原则认为,网络的智能不应当放在网络内,而应当位于网络的端点,即网络内的计算机只是履行应用程序所需的基本功能,而一些特殊功能应由网络边缘的计算机来实现。」
「据RFC 1958所述,虽然因特网社区中许多成员会认为因特网不存在架构,但是,社区成员普遍相信,因特网的目标是连通性,工具是因特网协议,智能位于端对端而不是隐藏与网络之中。网络的任务是尽可能灵活有效地传输数据包,而其他的一切都应该靠边站。」

由这样的架构原则,作者总结出了三个要点:「应用程序在网络边缘的计算机上执行,任何种类的应用都可以立即被运行;网络没有为任何特定应用程序做优化设计,对于任何创新都是开放的;由于网络平台的中立性,网络无法做到歧视某种特定的新设计。」

在我看来:互联网最初的设计者,因为足够谦逊,所以对于「平台将会如何被使用」未做任何假设,他们的架构仅仅专注于最为简单的目标,而这也是互联网取得如今这样巨大成就的根本原因。

  • 不要尝试预测未来

在《简约之美》中,作者极力向读者阐述:架构设计简洁的价值,因为随着时间的不断增长,软件的研发成本的绝大部分,会产生于后期维护的阶段。越是简洁的架构,就越是能够为今后的维护,节约大笔费用。

另外一个值得注意的事实是:「程序员犯的最常见也是最严重的错误,就是在其实不知道未来的时候,去预测未来。」

而作者给出的策略是:「最安全的情况是,完全不尝试预测未来,所有的设计决策都应当根据当前确切知道的信息来做。」

在我看来,当年的互联网设计者,就是那种最伟大的程序员/设计师,他们未做任何假设,仅仅专注于解决信息传输的需求。

  • 一个可能的误区

不去尝试预测未来,根据当前确切知道的信息来做。这样的逻辑,可能会让人偷懒。
1. 「啊,我们这就开始干吧!」
2. 「我们不要做太多的假设!(不必想那些设计的事情)」

架构是存在的,设计是需要的,需求要尽可能的去搜集与分析。在做到这三个要点之后,才能谈及「不要假设」,「不要过度设计」。在此之前,还是不要放松为好。

架构是有力量的,简洁的架构,往往会产生的惊人的力量。当然,「无架构设计」不在其列。

[知乎专栏–思考IT]社区运营三大忌——以知乎为例

在「私吐槽」专栏,我针对这次的419事件,只写了一句话:「我一直觉得,知乎没搞好,与张亮这样的投资人,有很大关系。」

在「思考IT」这个专栏,我打算写一些更加有营养价值的内容。

前天与一个朋友聊天,我还发表过一个观点:「知乎是国内运营得最好的几个社区之一」,但是,我那天没有提到的「但是」,我想写在下面:

一忌:渐渐被遗忘的初心

周源曾经回答过这个问题:知乎团队的初心是什么?

基于这个想法,我们的初心是:

  • 每个人都是某个领域的专家,知乎能帮助每个人去展现自己亮闪闪的一面
  • 知乎将成为一个由人们的知识、经验和见解组成的 P2P 网络
  • 知乎帮助拉近人与人之间的距离
  • 知乎将持续产生高质量、可沉淀的信息,并让有价值的信息和人都关联起来

而我在另一个问题里,提到过自己的担忧:可能导致知乎走向失败的最大风险是什么?

我想,如果知乎有可能失败,最大的原因,是:“对于何为优质回答的定义发生了变化。”

知乎的运营,一直都在追求优质的回答。这是大家有目共睹的。但是,何为优质呢?
1、大家都赞同?
2、运营的员工有偏爱?
3、名人?
4、能够激发更多的讨论?
5、具备足够的深度和长度?

这些都可能不是优质的判断依据,但是也有可能被用来判断是否优秀。

我担心的最大的问题,就是知乎运营团队,在何为优秀的判断上,默默的,不自觉的,有意无意的,向KPI低头,向热闹低头,向名人和大企业低头

最终,从一个一流的问答社区,变成为一个二流的,却标榜自己是一流的问答社区。

在大约2年以后的今天,我想:「自己的那些担忧,几乎都已经成为了现实」

二忌:以人治代替法制

在一个虚拟社区,谈论法制,是不是有点大题小做呢? 之前我写过一篇给知乎的公开信:《规则与例外——写给知乎的一封信》后来,这封信还在知乎引发了一些讨论:你对《规则与例外——写给知乎的一封信》一文有什么看法呢?

但是,我在文中提到的所有问题,知乎团队一!个!都!没!有!解!决!

依然是区别对待,依然是顾此失彼,依然是各种潜规则。

这次的张公子退出,终于引起了知乎团队的重视,但是:他们的反应只会让其他知乎用户心凉!

@葛巾 算得上是知乎大神了吧?结果,照样会有没有受到重视的感觉,悠悠的叹了一句:「原来要张公子怒了,你们才会担心啊……」

而我之前的愤怒呢?我很愤怒! – 禾厶口土木曹 – 知乎专栏

我在文章里喊到:@黄继新@周源 @顾惜朝 请回答我的问题!

他们没有一个理我。我还给他们都发了私信呢!

今天,周源说:对不起,来晚了

我自然要小声的问一句:「您的私信是开放的!您的私信阅读与回复率是多少?」

你们忙,大家都理解,但是你们如果不能一视同仁,就不会得到任何理解。被你重视的,会感到失望。被你们忽视的,会更加失望!

@路小佳 明确指出:“知乎并非因为张佳玮的不满才站出来,事实上,我们在乎每一个人”,这句话,看了很不舒服,此地无银。我想,这就是大家的心声了。

三忌:指手画脚的投资人

其实,前两忌,还算是「可治之症」,这第三忌,才是「不治之症」!

大约是两年前,我曾经一口气喷了一篇文章:《要创业,就别听VC的!

其中有一句话是这么说的:「创业团队不要为了VC的建议而动摇,VC只是出钱的人,甚至不能算是业内人士,他们的建议,未必是为了你事业的长远发展,也许也许只是为了他能够更快脱手。」

但是,在知乎我们经常会看到@张亮 的身影。他的身份是创新工场的投资总监,但是却常常以知乎负责人的身份出来发表各种言论。这次张公子发怒,他居然来了一篇:知乎的耻辱 – 逆旅 – 知乎专栏

在文中,以一种居高临下的口吻说到:「刚才我已经跟周源通电话了,也跟相关产品经理沟通了,没废话,知乎会尽快改进审核相关的产品体验。别的话不说了,开始改,必须改好。」

还说:「如果你对知乎的某个用户体验不满,请留言或给我私信,谢谢!我会督促他们,没有任何借口。」

这就是一个典型的不守本分的投资人的形象!

你只是投资人,不是客服,不是公关,不是CEO,不是产品经理,不是知乎团队里的任何一员!

你只是一个投资人!但是你的手伸得太长了!不但给周源打电话,而且直接跟相关的产品经理沟通。 不但在私下插手此事,而且在知乎团队给出官方回应之前,就写什么《知乎的耻辱》!

你管得太宽了!

你管得太细了!

你管得太多了!

言尽于此吧,张亮以前的那些指手画脚的事情,我也懒得再一一去翻了,反正他没少干!

以上就是我的最后一次劝告,下不为例!

[知乎专栏–思考IT]从软件工程到研发管理(五)

五、本末之辨在我所了解的中国哲学中,有一个非常重要的命题「本末」,何者为「本」,何者为「末」,如果搞不清楚,就会舍本逐末。类似的命题还有「因果」,如果迷失于现象之中,就会「倒果为因」。

在上一篇文章里,有两张图,提及了三组关系:

研发效率→速度提升与流程优化;

研发能力→特性丰富与质量提升;

研发活力→成果重用与研发创新;

这三组关系,左边是本,右边是末;也可以说左边是因,右边是果。好的企业,会追求左边,进而得到右边的那些好处。糟糕的企业,却会盲目追求右边的那些成效,结果导致一些悲伤的结果。

这种事情,一般来说在企业里,不太会发生(不过的确是有这种企业,尤其是某些特别有「追求」的企业)。

这种情况,其实也比较罕见,我能够想到的例子,是某些声称要生产银弹的企业。

这倒是绝大多数研发企业的通病,速度快了,质量就下降。勉强把质量搞上去吧,就必须要缩减功能了。

据说,那些能够过CMM5的企业,都是具有高额利润的企业,否则根本承受不了那种流程浪费啊。

很多时候,我们都了解码农的苦,因为产品经理为了拉订单,答应了太多的功能特性。

听说,伟大的游戏总是会延期……

总之,舍本逐末的害处,实在是太多了。如何才能正确的追求研发实力的提升呢?

<未完待续>

[知乎专栏–思考IT]从软件工程到研发管理(四)

四、从项目管理铁三角到研发管理金三角

1. 眼花缭乱的铁三角

在维基百科英文版 Project management triangle 我们可以找到很多不同版本的项目管理铁三角:这些图,要细细讲解起来,每一个都可以大说一番道理。但是,若是想要究其本质,其实无非是一句话:「老板,您不能什么都想要啊!」

那么,有一个挥之不去的问题,就出现了:如果多种要素,无法全面追求,那么优秀的研发团队与低劣的研发团队,区别何在呢?项目一旦失败,因为有铁三角护身,我们就总能够抱怨:老板什么都想要,所以bla…bla…

有没有可能,通过一系列的手段与努力,提升研发团队的实力呢?有没有可能存在一个优秀的研发团队,能够在多种不同的追求方向上,都获得令人满意的结果呢?

2. 概念梳理后的金三角

为何要将这样一个图,称之为金三角呢?有几层含义:

Schedule(调度):通过提高单项工作的速度,可以提升效率,通过流程优化,进度合理安排,可以提升整体效率,因此将效率目标分解为:速度与控制力。

Requirement(需求):用户的需求有非常多,主要可以划分为特性需求与质量需求。

Profit(利润):在IT企业中,研发团队通常不是利润来源,而是成本中心,但是研发创新与研发成果重用,同样可以降低成本,甚至给企业带来利润增长。

仅仅将以上的概念归并,还不足以称之为「金三角」,再看下面这张图:

efficiency(效率):要做到足够好的调度Schedule,我们需要追求更好的「研发效率」;

ability(能力) :要满足用户的需求Requirement,我们需要追求更强的「研发能力」;

energy(活力):要追求更高的利润Profit,我们需要激发足够的「研发活力」;

而能力提升促进效率改善;效率提升增加空余时间,使得研发活力有可能增加;研发活力的提升,则能够增进研发能力;以上三种要素之间的互相促进,构成了一个「使能环」,而这样一个使能环,就是研发管理金三角的真意!

<未完待续>

[知乎专栏–思考IT]Thinking About The Internet

最近一直在思考「互联网」,比如:「互联网模式」、「互联网思维」、「互联网经济」、「互联网革命」……

一个比喻

在我看来,互联网作为一个新生事物,既不是完全的混沌,也不是完全的有序,而是某种「复杂系统」,可以打一个比方,来描述这种状况:起初是两个人玩一个游戏,道具是一个骰子。各掷骰子一次,比大小。但是,点数大的人,可以新增或者修改游戏规则。

于是,第一次的赢家,将骰子数加到了两个; 第二次的赢家,约定单数赢,双数输;第三次的赢家,邀请了一位新的比赛选手;第四次的赢家,新增的平局的规则是加划一次剪刀石头布;第五次,三个骰子;第六次,每人掷三次,取平均值;以此类推…

而对于互联网来说:

  • 最初,是将一切网络都链接起来
  • 然后,是确保在网络上能够传输各种信息
  • 然后,是将一切行业都信息化
  • 然后,是将一切行业进入互联网的门槛都越降越低
  • 然后,是将创业者通过互联网进入任何行业的门槛都越降越低

当玩家越来越多,当加入互联网领域的行业越来越多,规则就开始发生变化,然后是很多定义也开始发生变化,然后是原本天经地义的认识(三观)都开始发生变化,最后是整个生态都变得面目全非。

一条线索

值得梳理的线索有很多,在这篇文章里,就先提出一条线索,供大家参考:

首先是门槛降低,导致各种小型团队,开始创业(甚至一个人,就敢开始创业了)!随之而来的,并非全然的好消息,毕竟人力物力严重不足。于是,这个新兴的企业,只能提供非常初级、甚至劣质的产品。或者,为了保证质量,只能服务非常非常狭窄的一个细分市场。

在这种情况下,按照传统产业的规律,这种小型企业将会迅速消亡。但是在互联网时代,企业开始想出种种办法,让用户可以不太计较产品的质量;还出现了「长尾理论」。在长尾理论的指导下,即使狭窄的用户群,也能通过互联网被发现与联系上。

先不谈长尾理论所描述的另一大类现象,单单讨论一下:质量下降后的互联网产品形态。

用户当然会不满,创新的企业想出了各种办法,来降低用户对于产品质量的期待。或者称之为管理用户的预期。

  • 快速迭代,每周发布一个新版本,可以让用户觉得产品一直在进步(哪怕其实没啥进步,也能够给用户一些信心);
  • 免费, 让那些用户不好意思来骂我们;
  • 推出小范围试用版,让最早发现bug的用户,感到某种「自豪感」;
  • 排队限购,引发稀缺意识与珍惜的心态;
  • 邀请制,朋友介绍我来的,我也不太好意思骂的太狠;

在通过种种办法,降低了用户的期待之后,创新企业又进一步的切实提升了版本迭代的频率与发布版本的质量,这些快速开发的实践,又进一步引发的软件研发管理的诸多变革。一些好的敏捷实践,甚至进入了非互联网研发领域。

一种反省

最近在看朋友推荐的一本书《思想的未来 (豆瓣)》,这本书是一个美国教授写的,关于互联网创新与专利法保护的诸多思考。引用一段简介如下:

劳伦斯·莱斯格对因特网革命中为何会出现一种反革命的破坏性力量及后果做出了解释。创作之所以繁荣,是因为因特网保护了创新的公共资源。是因为因特网保护 了创新的公共资源。因特网的独特设计营造出一个中立的平台。最广大范围的作者们可在此平台上进行试验。围绕此平台的法律架构对这一自由空间给予了保护,以 使文化和信息——我们这个时代的思想能够自由流动,从而激发出了空前广泛的思想成果。但是,这种架构设计正在改变——无论是法律层面,还是技术层面。

这种改变将导致早期困持网所提供的创作及创新机遇的丧失。诸多强权力量正迅捷地以法律和技术来“驯服”因特网,使之从一个思想的开放园地沦落为一个无异于高速有线电视的东西。创新将再次受到由上而下的束缚,逐渐为网络所有者、专利大户以及版权囤积才所控制。

技术使非凡的未来成为可能,与此同时,思想的未来这门却在关闭。我们需要在进步与新黑暗时代之间做出选择。

是的,未来并非一片光明,我们也不是一直在高歌猛进,规则的不断改变,也并非越来越好,总之:未来将会如何,我们难以预料。

保存评论:

这是一个倒果为因的文章。
互联网的创新,从来都不是为了降低质量,也从来都不是为了让别人不好意思说,才去做免费的。每一个做互联网创业的人,首先想的是如何做出做好的东西来。当然也有一些人想要糊弄一下的,不过这些人已经都倒下了。各行各业可以进入互联网,可以使用互联网带来的各种各样的便利条件。但是这些行业并不能够以互联网的思维来思考问题,来判定是非。

所谓互联网思维,是互联网企业或创业者在尝试使用互联网逆袭传统行业的过程中,逐渐形成的。
传统企业占据了市场,不会主动退出来。互联网企业也不可能创建那么多的新领域,于是就会利用互联网来尝试颠覆传统行业。这是被逼无奈的。
在这个过程中,互联网思维在生根、发芽、发展壮大。

另 外一个促成互联网思维的东西,是大数据验证下的,很多传统理论的崩溃。传统科学是通过猜想和有限证明的方式来不断发展的,当数据的规模扩大之后,很多以前 证明是有效的理论,被推翻了。在这个过程中很多社会学、人文、人类行为、传播学相关的东西,都被彻底打翻了。旧的理论倒下,新的理论站起来,这些新的理 论,为互联网思维提供了理论基础。

至于粉丝文化和长尾理论,这些其实并不是互联网时代才有的,互联网只是一种工具,可以让这两种东西可以在更大范围内被验证,并最终证明,当用户、流量达到一定程度的时候,这两种东西已经发生了一些质变,变得和传统意义上不同了。

[知乎专栏–思考IT]如何定量的评价一个技术社区的优劣?

这回又是朋友约稿,出了个天大的题目,我当时脑子一热,也就答应下来了。现在想想,谈何容易啊?

这是我设想的,一个社区的良性循环模型:一个氛围良好的社区,能够不断创造优质的内容;而优质的内容通过各种渠道,吸引新人加入;而一个能够不断接纳新人,并且将其融入的社区,则能够始终保持高质量的成长。

这个循环,对于各类社区(并非局限于技术社区),应该都是适用的。

从这三个维度,我们可以找到三组指标来进行衡量:

  • 社区氛围:
    • 社区黏性指标:会员每周平均在线时间,平均每次在线停留时间,可以作为两个比较重要的指标。
    • 社 区互动性指标:首先需要定义何为互动,我发表内容,你评论,则你与我互动。我回复评论,则我与你也互动起来了。就好比一块石头投入池塘,会引发多少涟漪, 这是一个社区活力的体现。转换成定量的指标,我们可以设置两个:人均每日互动次数;一周内单篇内容引发互动总数;来作衡量。
  • 创造内容:
    • 引用性指标:一个网站的内容,被多少站外地址引用,这本来就是一个常用的质量指标,Google的Page Rank,也是这样的指标。
    • 传播性指标:在SNS网络兴起以后,一篇内容被分享出去多少次,变得非常重要。我们可以简单的用站外流量,进行衡量。
  • 招揽新人:
    • 转换率指标:一个从站外点击过来的用户,会有多少转换为社区的注册用户,这就是转化率。
    • 留存率指标:对于社区而言,新人注册之后,七日留存率;30日留存率;都是重要的参考指标。

以上讨论的三组指标,都可以是适用于任何内容型社区,而对于技术社区而言,应该需要更多的专项指标:

  • 技术日新月异,新的名词层出不穷,一个技术社区的开放程度与丰富程度,可以从社区内讨论的技术新旧程度,以及讨论技术的广度、深度来判断。(深度的确太难量化了) Webopedia: Online Computer Dictionary for Computer and Internet Terms and Definitions 这是一个很有意思的网站,他会不断的收集最新出现的计算机与网络新词汇。也许我们可以做一个词汇扫描,看看这里新出现的词汇,在多久以后,会出现在技术社区的讨论区里。
  • 技 术牛人,是一个技术社区的宝贵财富。但是这又是最难被量化的部分。如果某个技术社区,每个会员都被要求填写自己的Github帐号(甚至只能用 Github帐号登录),那么,我们可以用这个技术社区的全体会员的所有Github Repos,所获得的Stars数量与Forks数量,来做一个粗略的估计。
  • 当然,特定的技术社区,还可以有更加准确的统计:例如一个Linux内核社区,可以直接统计他们对于Linux内核每年贡献的补丁数量,诸如此类。

以上就是我的一点抛砖引玉。

[知乎专栏–思考IT]原来,我注定就是个搞 IT 的

这 不是一本小说,但是我几乎就是一口气把它给读完的。书中的每一个章节,都非常非常的吸引我,由信息的历史,贯穿起来的语言学、符号学、逻辑学、词典编纂 学、数学、软件编程、无线电、电报、通信与信息论、密码学、控制论、热力学、物理学、基因理论、乃至最新出现的信息技术、互联网以及 Web2.0 …

这些都是我最感兴趣的内容,原来, 我注定就是个搞 IT 的。

这是一本非常宏大的书,同时又是一本非常有趣的书,宏大的历史场景与有趣的历史细节,被巧妙的交织在一起,读来颇令人感到兴趣盎然。

举个例子:

非洲的鼓语,是什么原理?外国人很难明白,因为他们的语言没有平上去入的声调变化,但是中国人应该一听就能明白了。我们小时候常常玩的一个游戏:发出一连串「一姨以易」的四声,让别人去猜我说的内容。而聪明的非洲人,将声调用鼓声来表达,同样也可以让人猜出鼓声背后的语言。更进一步的道理是:越是冗长的一串声调,越是不容易被人误解。

而这样一个现象背后,蕴含着一个重要的信息学公式:H=n log s,H表示讯息的信息量,n 表示讯息中的符号数,s 表示语言中可用符号的总数。这表示着:可用的符号越少,为表示出给定信息量所需传递的符号数就得越多。

这是本书常见的表达手法:讲一个有趣的故事,引申出一个简单的道理,然后再推广出一个影响深远的理论。典型的「深入浅出」!

再举另一个例子:

电报发明之后,由于费用高昂,人们通过缩减字数,以减少费用。进而出现了「电报体」这样的新文风。安德鲁·温特写道:

电报体让任何形式的礼貌说法都无容身之地。『May I ask you to do me the favour』(劳驾)这么一句话,传输五十英里的距离就要六便士。这个可怜的人要把类似温文尔雅的形容词砍掉多少,才能将他的信函开支降到一个合理的水平呢?

于是,各种缩略语、密码本开始大型其道,1885年,W.H.比尔公司出版了一本畅销的《电报编码口袋书》,定价一便士,其中包含了「三百多条只需一个单词的电报」。

随着讲解的深入,密码学、布尔代数、逻辑学,被一一介绍给了读者。这就是深入浅出的魅力所在。

当然,这本书最吸引我的是《第4章:将思想的力量注入齿轮机械》 ,因为在这一章里,介绍了世界上第一个程序员,而且还是第一位女程序员:爱达·拜伦(Ada Byron)

很小的时候,我就读到了一本介绍巴贝奇的书,但是那本书里,竟然几乎完全没有提到 Ada 的存在。而在信息简史一书中,我发现 Ada 是一个比巴贝奇更加惊人的天才!引用几段 Ada 的文字吧:

我的头脑不是凡间之物,这一点时间将会证明(只要我的呼吸以及某些其他部位没有太快地奔向死亡)。

没人知道在我那瘦小的系统中潜藏着多少尚未被开发但几乎让人惊叹的能量和力量。我说它让人惊叹,是因为你可以想见在某种情况下它可能爆发出怎样的力量。

爱 达对于未来也有一个最后的梦想:「我以我自己的方式迟早会成为一名独裁者。」在她面前将集结起一个个军团,对此即便是地上的铁腕统治者们也只能乖乖让路。 那么她那些军团由什么材料构成呢?「我现在可不会说。但我希望,它们将是纪律严明、异常和谐的军队——由大量的数构成,伴着军乐以势不可挡的力量行进。这 听来岂不是十分神秘?显然我的军队必须由数构成,否则他们也就根本不可能存在……但如果进一步问,这又是些什么数?这则是一个迷——」

最后,我想说:如果你拿起这本书,翻开任何一个章节,都能够津津有味的读下去,那么你也注定是个搞 IT 的!

[知乎专栏–思考IT]从软件工程到研发管理(二)

二、模型、隐喻与定论在软件工程领域,有许多的「过程模型」与「最佳实践」,却很少有什么定论,这使得我们目前面临着一个「群雄并起」的时代。不过,这种所谓的群雄并起,并不是什么好事,往往徒增开发人员的烦恼而已。

1. 从《失灵》说起

前段时间,我正好读了一本奇书《失灵 (豆瓣)》, 作者是一位出生在南非的犹太移民,后来到美国读物理学博士,然后又转行华尔街,作为宽客,创作了业界广为采用的某某局部波动率模型。这本书谈到了南非种族 隔离、犹太复国运动、物理学发展史、还包括叔本华和斯宾诺莎的哲学与伦理学。其主旨却是为了探讨:为何看来可靠的模型最终都会失效?

作者在这本书里,谈论了非常非常多的东西,但是其核心思想,是站在一个物理学家的立场,吐槽所谓的“模型”,特别是“经济学模型”。

作者在谈论模型时,这么说到:“模型是隐喻,并不是真实物体本身……模型就像一幅漫画,突出某些特点,而忽视了其他特点……模型减少了世界的维度,将多维世界缩小为更易理解的空间。”

与此相对的,则是理论。作者将其与模型做了对比:“模型是类比,借助别的事物来描述目标物体,因此模型需要解释。相反,理论不需要借助别的事物,只需要证实而不需要解释。理论阐释的是事物的本质,理论如果成立,就是事实。”

“如果理论成立,则能非常精确的描述其对象。”与此相对的:“模型经不起推敲”

接下来,不再引用书中的内容,说说我的理解:理论,尤其是物理学的理论,是非常“坚硬”的,与现实一对照,要么几乎一模一样,要么撞的粉碎。而物理之外的那些所谓的模型,看起来也是些数学公式、图表,像模像样。但却是柔软的,易变的,可以不断通过修正来修补和再解释的。
在软件工程领域,却正好充斥了种种隐喻构成的所谓模型。

2. 从隐喻到定论

在9年前的2005年,我曾经在 JavaEye 现在的 ITEye 连载过一篇文章,名叫《定论——软件开发的方法论探讨》。在那篇文章里,我提出了与《失灵》相当类似的看法,先摘录几段在下面:

事实上,所有的隐喻都不够好,都会扭曲软件开发过程的真相,都会使我们对软件开发的过程产生误解。

为 什么会这样呢?为什么一个挺像软件开发的隐喻会最终误导我们呢?原因在于一个隐喻是一个完整的场景,这个场景中有很多相互交织的“概念要素”。当这些要素 有很多在软件开发中出现时,我们就会认为这个隐喻很贴切,而当一个隐喻越是贴切时,这个隐喻中的其他一些在软件开发中不存在的要素,或者与软件开发相矛盾 的要素,就会打扰我们的分析,干扰我们的判断。使得我们不再思考软件开发本身,而是将思考建立在某个隐喻的场景中。这样思考得到的结果,肯定存在着误导的 可能。再由于不同的隐喻互不相容——你无法想象一群工匠去建设现代化的高楼大厦,他们最多只能造些平房——因此,建立在各种隐喻基础上的软件开发,至今没 有找到适合自己的方法论,倒是不同的隐喻之间互相打得火热。

软件开发有那么多方法,有那么多过程,那么多“最佳实践”,但是却从来没有定论,为什么没有定论呢?因为软件开发的“方法学”还处于蒙昧的“隐喻时代”,各家各派,都从自己的隐喻出发来看问题,所谓“鸡同鸭讲”,指的就是这种情况。

我们的目标,不应该去寻找各种隐喻,而应该须寻求定论!所谓的定论,应该建立在坚实的理论基础之上,而不是靠各种猜想与比喻来搞那些「高科技迷信」。

但是,当年我写的那篇文章,事实上却草草收场,并没有写完,因为见识不足,思考无法深入下去了。在当年那篇文章的结尾,我写了三个观点:

1、现有的软件开发方法,都不是定论,不过是你说你的好,我说我的好罢了。要能够得到定论,必须要有一种能够判断方法好坏的方法。也就是说,能够判断一个方法,用或不用,有多少好处。几个方法比较,哪个能够胜出的“检验标准”。

2、要能够检验软件开发方法的优劣,必须基于对于软件开发本质的正确认识,这样才能量化两个因素:软件需求的复杂程度以及软件开发的实际工作量。而现在的软件复杂度的度量,并未区分“需求”与“实际”的不同,或者“代码行数”,或者“功能点”,都是如此。

3、在能够正确度量需求复杂度与实际工作量之后,我们会发现,过去那么多号称是为了保证软件顺利开发的手段,往往只会坏事,耽误事。但是,完全不提前设计的方法,也并不可取。

3. 真实的研发究竟是怎么样的?

现在看来,当年我写的这三条结论,既有正确的成分,也有不足之处。

  • 真实的研发过程,不仅仅是一个团队,在一个特定的时间段里,满足一组特定的需求。
  • 真实的研发行为,不仅仅是通过量化需求的复杂度与实际开发工作量,来做出描述。
  • 真实的研发行为,不能仅仅考虑这些,他们必须关注更多……

<未完待续>

ps: 附上当初《定论》的几个 link

定论——软件开发的方法论探讨(1)

定论——软件开发的方法论探讨(2)

定论——软件开发的方法论探讨(3)

定论——软件开发的方法论探讨(4)

定论——软件开发的方法论探讨(5)

定论——软件开发的方法论探讨(6)

定论——软件开发的方法论探讨(7)

定论——软件开发的方法论探讨(完)