昨天晚上写代码到深夜,一头扎到床上,沉沉睡去。
第二天睁开眼镜,我发现自己居然坐在一个咖啡馆里,旁边的墙上贴着最新的英文电影海报《阿甘正传》、《肖申克的救赎》
这都是1994年的经典电影,我意识到,自己穿越到了1994年的美国!
对面坐着一个帅哥,一边操作电脑,一边在不停地赞叹。
我探过头去,发现他正在看这个东西:
我说:“哥们儿,这不是安德森开发的Mosaic浏览器吗?这么丑,你怎么不用网景?”
“网景?那是什么东西?不过兄弟不简单啊,我在咖啡馆喝了这么多天的咖啡,你是第一个识货的,还知道安德森,肯定也是个程序员吧,要不一起干吧!”
“干什么啊?”
“浏览器绝对是互联网的未来,现在很多公司都在狂热地拥抱它, 他们就使用 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
。
我这才意识到,原来遇到了<strong>PHP之父</strong>
!
很快就有其他程序员找上门来, 问我们:Rasmus, 你们怎么开发得这么快!
Rasmus说:我有个人工具箱啊!
“那我能不能用?”
Rasmus说:“可以啊,工具只是我的锤子,每个人都可以用我的锤子。”
我赶忙阻止他:“Rasmus, 你把锤子给别人, 那咱们靠什么赚钱?”
“我不靠锤子赚钱,我卖的是解决问题的服务。”
我心想他真是傻瓜,为什么不靠卖他的工具来赚钱呢?学学Bill Gates,过几年上市!
让我没想到的是,神奇的事情发生了。
PHP を使用する人々は、Rasmus にパッチを送信し始めました。彼らは、Rasmus が見つけさえしなかったバグを発見しました。
そこで、ラスムスは顧客のところへ行き、「新しいバージョンにアップグレードし、これを変更し、あれも変更しました」と言いました。
顧客は非常に満足しており、機能を迅速に完了できるだけでなく、バグ修正も迅速に行えるため、作業効率が非常に高いと評価しています。
私は突然気づきました: これはオープンソースではないのですか?
もちろん、これは 1994 年か 1995 年のことであり、オープンソースという言葉はまだ登場しておらず、当時は RMS が提唱するフリー ソフトウェアしかありませんでした。
パッチを提出する人が増えるにつれて、PHP は徐々に改善され、1995 年にラスムスは機が熟したと判断し、PHP 1.0 の誕生を正式に発表しました。
これが PHP の始まりです。
ラスムスは、PHP の独占的管理を放棄したときに、リーダーとしての寛大さとスタイルを示しました。
プロジェクトの所有権を他の人に与え、誰もが貢献できるようにすることで、PHP は Rasmus だけのものではなく、みんなのプロジェクトになります。
当時、PHP のソース コードは CVS に置かれていました。Rasmus に PHP のソース コードを GitHub に置いてもらいたかったのですが、当時は Git すらありませんでした。Hub はどこから来たのですか?
ここには管理者はいません。全員が小さな自己組織化されたグループです。彼らは興味のあることに基づいて自己組織化できます。
人材を能力に基づいて任命し、コードそのものに語らせます。
これは PHP の性質を大きく変えます。
ある週末、ラスムスと私は再びカフェにコーヒーを飲みに来て、こう言いました。「PHP にいくつかの高度な機能を追加する必要があると思います!」
「たとえば、ジェネリックス、アノテーション、関数指向プログラミング、Lambda など。"
"いいえ、いいえ、PHP を使用するか貢献するかにかかわらず、非常に低いレベルで PHP に入るしきい値を制御できることを願っています. Web の問題を解決したい人は、通常、PHP を通じて非常に簡単な解決策を見つけるでしょう。Web の問題を解決すると主張する代替手段の多くは、複雑すぎます。よく考えてください。仕事を終わらせるには金曜日までの時間がありますが、 800 ページもめくらなければなりません。マニュアル、これはイライラします。"
"PHP が将来 Web を支配すると考えたことはありますか?""ははは、これはそうですか"可能ですか?" 当時、ラスムスは、PHP がインターネットの潮流の中で急速に成長し、Linux、MySQL、Apache と融合し、都市や地域を絶えず征服することになるとはほとんど知りませんでした。 W3Tech の統計によると、Web では PHP が優勢であり、Web サイトのほぼ 80% で PHP が使用されています。 「成功するオープンソース プロジェクトを作成する方法を要約するように求められたら、何と答えますか?」 このトピックについて話すとき、Rasmus 氏は次のように述べています。突然、彼はノンストップで話し始めました。彼はプロジェクトを0から1まで開発したため、非常に多くの発言権を持っていました。 「素晴らしいアイデアが 1 つしかない場合、誰もあなたのプロジェクトに参加しません。誰もが素晴らしいアイデアを持っています。
中途半端なものを作成した場合
あなたが十分に役に立つものを構築した場合に限り、人々はあなたのやっていることを鼻で見張り、独自の方法で問題を解決しようとするでしょう。彼らはあなたのところに来て、あなたのコードをより受け入れやすくなり、それから自分たちの問題を解決するためにコードを少し拡張すると、雪だるまが転がり始めるでしょう。オープンソース プロジェクトを開始するには、しばらく悩まされている問題を解決する必要があります。本当の問題を見つけて解決するには、何か月もかかる場合があります。その後、早期採用者のアドバイスを受け入れ、最善を尽くさなければなりません。ツールを将来的にさらに便利なものにします。幅広いユーザーが役に立ちます。
最後に、制御を放棄して他の人に協力してもらうことを検討してください。人々があなたのコードでやりたいことを何でもするとき、あなたのオープンソース プロジェクトは成功しました!"
「素晴らしいですね。すべての読者がこの段落をご覧いただけることを願っています。」「読者ですか?」
"はい、コーダーは見出しをひっくり返しました、あまり多くは言えません、秘密は漏らしてはいけません、私は去らなければなりません。」そう言って私は消えました。