昨晚写标识符到半夜,一只扎到床边,绝情睡去。
隔天睁开眼睛镜,我辨认出他们竟然趴在两个红酒店里,旁的门上贴有新一代的英语画册《乱世佳人》、《启示录的重生》
这都是1994年的经典作品,我意识到,他们穿越到了1994年的英国!
旁Tiruvanamalai两个美女,默默地听歌,默默地在时不时地惊叹。
我探赤膊上阵去,辨认出他已经开始看那个小东西:
我说:“哥们,这并非哈里斯合作开发的Mosaic应用程序吗?那么丑,你是并非不必Netscape?”
“Netscape?那是甚么小东西?但是兄妹不简单啊,我在红酒店喝了那么天的红酒,你是第二个特多的,还晓得哈里斯,的确也是个合作开发人员吧,要不一同干吧!”
“干嘛啊?”
“应用程序当然是网络的今后,那时许多子公司都在疯狂地亲吻它, 他们就使用 Microsoft Word写文档,然后将文档保存为 HTML,通过 FTP 将它们放到网上,这里边有商业机会啊。”
“写个HTML会有甚么商业机会?”
“静态的中文网站是和枯燥的,这些子公司很快就会辨认出,可以和用户交互的、动态的中文网站才有商业价值。我准备专门提供这样的咨询服务,为他们合作开发各种动态的Web应用程序。对了,忘了自我介绍了,我叫Rasmus Lerdorf。”
那个人名是并非那么熟悉?
我想既然横越而来,那就看看1994年的动态中文网站是是并非合作开发的吧。
我说:“我叫张大胖,主要用Java编程。”
“Java?那是甚么语言?” 他两眼立刻放光了!
我意识到说漏嘴了,Java这时候还没诞生呢!
“其实叫C++–,两个小众语言。”
“和C语言相关,那就好,我们得用C语言写CGI脚本。”
我和他合伙开了个咨询子公司,专门接合作开发动态中文网站的活儿。
但是合作开发一开始,我就崩溃了:没有前后端分离,没有Java,没有JSP,ASP, 真的全靠在C语言!
给大家看看:
void main(int argc, char *argv[]) { char *params, *data, *dest, *s, *tmp; char*name, *age;puts(“Content-type: text/html\r\n”); puts(“<HTML><HEAD><TITLE>Form Example</TITLE></HEAD>”); puts(“<BODY><H1>My Example Form</H1>”); puts(“<FORM action=\”form.cgi\” method=\”GET\”>”); puts(“Name: <INPUT type=\”text\” name=\”name\”>”); puts(“Age: <INPUT type=\”text\” name=\”age\”>”); puts(“<BR><INPUT type=\”submit\”>”); puts(“</FORM>”); data = getenv(“QUERY_STRING”); if(data && *data) { params = data; dest = data;while(*data) { if(*data==+) *dest=; else if(*data == % && ishex(*(data+1))&&ishex(*(data+2))) { *dest = (char) htoi(data + 1); data+=2; } else*dest = *data; data++; dest++; } *dest =\0; s = strtok(params,“&”); do { tmp = strchr(s,=); if(tmp) { *tmp =\0; if(!strcmp(s,“name”)) name = tmp+1; else if(!strcmp(s,“age”)) age = tmp+1; } } while(s=strtok(NULL,“&”)); printf(“Hi %s, you are %s years old\n”,name,age); } puts(“</BODY></HTML>”); }用一句话来说那就是:在C语言当中输出HTML标识符。
这是人干的活吗?我都快写吐了!
Rasmus:“没办法啊,C语言编写CGI脚本,实现动态网页,可不就得这样嘛?对了,你会用Perl吗?”
“就是那个写出来以后标识符谁都不认识的语言?我不想用!”
时间长了,Rasmus 也受不了了:“这些CGI 脚本无外乎就是处理表单, Post数据,过滤等,重复标识符太多了,是并非样才能提高效率呢?”
他有空就琢磨这件事情,有一天,他想到了一招,把这些常用的功能都包装到两个C语言库中,它“植入”NCSA Web 服务器中(这是Apache之前最流行的服务器),然后在上面添加了两个模板系统,可以轻松地调用他们。
于是标识符就是变成那个样子:
<html><head><title>Form Example</title></head> <body><h1>My Example Form</h1> <form action=“form.phtml” method=“POST”> Name: <input type=“text” name=“name”> Age: <input type=“text” name=“age”> <br><input type=“submit”> </form> <?if($name):?> Hi <?echo $name?>, you are <?echo $age?> years old <?endif?> </body></html>换句话说:就是在HTML中“混入”标识符。
和CGI对比,这种方式对合作开发人员来说非常友好,我们的工作效率一下子提高了许多。
说实话,我早就晓得这种方式,就是ASP,JSP嘛,但是他们没那技术实力,实现不了啊!
Rasmus 很快就找到了两个新客户,用新工具为他们合作开发Web程序,连接到数据库,满足他们各种各样的需求。
随着客户的增多, 客户的需求也略有不同,于是,Rasmus 就不断地扩展它的工具箱, 从简单的解析器慢慢发展为包含条件标签,然后是循环标签、函数等各种复杂的小东西,这已经是一门语言了。
Rasmus 把它们称为Personal Home Page,简称PHP。
我这才意识到,原来遇到了PHP之父!
很快就有其他合作开发人员找上门来, 问我们:Rasmus, 你们是并非合作开发得那么快!
Rasmus说:我有个人工具箱啊!
“那我能不能用?”
Rasmus说:“可以啊,工具只是我的锤子,每个人都可以用我的锤子。”
我赶忙阻止他:“Rasmus, 你把锤子给别人, 那咱们靠甚么赚钱?”
“我不靠锤子赚钱,我卖的是解决问题的服务。”
我心想他真是傻瓜,为甚么不靠卖他的工具来赚钱呢?学学Bill Gates,过几年上市!
让我没想到的是,神奇的事情发生了。
使用PHP的人开始给Rasmus发送补丁了 ——他们辨认出了Rasmus都没有辨认出的Bug!
于是Rasmus到客户那里说:我又升级了两个新版本,改了那个,改了那个。
客户非常满意,他们认为我们的工作效率非常高,不但能快速完成功能,还能快速修复Bug。
我突然意识到:这不就是开源吗?
当然,这是1994、1995年,开源那个词还没有出现,当时只有RMS提倡的自由软件。
随着越来越多的人提交补丁,PHP逐渐完善,1995年,Rasmus看到时机成熟,正式宣布了 PHP 1.0的诞生。
原来PHP就是那么起步的啊!
Rasmus展示出了两个领袖的大度和风范,他放弃了对PHP的独家控制权。
通过把项目的所有权分给其他人,这样大家都可以投入,PHP成了大家的项目,而并非Rasmus两个人的项目。
当时,PHP源码放在CVS中,我想让Rasmus把PHP源码放到GitHub, 可是那个时候连Git都没有,哪而来的Hub?
在这里没有管理,大家是自我组织的小群体,可以围绕他们感兴趣的小东西,自我组织。
任人唯贤, 标识符说话。
这真正地改变了PHP的本质。
有两个周末,我又和Rasmus来红酒店喝红酒,我说:“我觉得你得给PHP添加一些高级的特性了!”
“比如泛型,注解,面向函数编程,Lambda之类。”
“不不,我希望 把进入PHP的门槛控制在很低的水平,无论是使用它还是向他做贡献。任何想解决Web问题的人通常会通过PHP找到非常直接的解决方案,许多声称可以解决 Web 问题的替代方案太复杂了,想想看,你需要在周五之前完成工作,但是得翻阅800页的手册,这让人崩溃。”
“你有没有想过,将来PHP会统治Web?”
“哈哈, 有这种可能吗?”
当年的Rasmus并不晓得,PHP将在网络大潮中野蛮生长,和Linux, MySQL , Apache联姻, 不断攻城略地。
W3Tech的统计显示,PHP统治了Web, 接近80%的中文网站在使用PHP!
“如果让你总结一下,如何才能创建两个成功的开源项目,你会是并非说?”
聊到那个话题,Rasmus突然就滔滔不绝起来,因为他从0到1发展起两个项目,简直太有发言权了!
“如果你只有两个很酷的想法, 没有人会加入你的项目,每个人都有很酷的想法。
如果你创建的小东西是半生不熟的,那么人们可能对你做的事情不屑一顾,他们会用他们的方式来解决问题。
只有你构建了足够有用的小东西,大家才会来到你的身边,他们会更容易接受你的标识符,然后稍微扩展来解决他们他们的问题,这样雪球才能滚动起来。
所以,要开始两个开源项目,你必须解决两个困扰你一段时间的问题,这可能会花费数月的时间才能找到真正的问题并解决掉,然后你必须接受早期采用这的建议,尽最大努力让工具对更广泛的受众有用。
最后可以考虑放弃控制权,让其他人和你一同努力,当人们用你的标识符做他们任何想做的事情的时候,你的开源项目就成功了!”
“太棒了,我希望我的读者们都能看到这段话。”
“你的读者?”
“是的,码农翻身头条号,我不能说太多了,天机不可泄露,我得走了。”
说完,我就消失了。