用什么样的语言就有什么样的公司【转载】

原文地址

暂且不论编程语言,想想世界上各个民族的语言,比如,中文、日语、韩语、英语等等,语言对一个民族的思维方式有很大影响,东、西方人的思维方式差异很大,如果你看过《丑陋的日本人》《丑陋的韩国人》《丑陋的中国人》,即便是亚洲的中日韩三国,那差异也是非常巨大的,而它们的共同点,都无一例外受中国唐朝的影响。韩国曾经是飞机事故多发的国家,因为韩国的敬语很多(日本更多),等级观念也很重(日本更重),所以一个飞机员对空管员很客气的说:我飞机出问题了,空管员可能完全没意识到问题的严重性,而事实上已经很严重了,后来他们改用英语,情况就有了很大的改善。

编程语言类似,每个编程语言都有自己的设计哲学,要解决的问题,而设计哲学直接决定他更善于解决什么问题,这就好像每个人都有自己的风格和相信的主义,而这些直接就决定着你如何为人处世~

想知道语言的威力有多大,可以看看《通天塔-17》。里面星际战争的一方只需让另一方学习了一门语言,即让对方弃明投暗。编程语言也具有类似的威力,它赋予了软件公司重塑自我的能力,它不仅能改变问题的解决方式们甚至还可以改变提出什么样的问题。这也许是Google、苹果等推出自己语言的原因所在,而初创企业想要成就什么样的愿景,编程语言的选择很关键。

Ruby语言帮助开发出了Twitter、Hulu以及许多的现代Web网站。其发明者是日本人松本行弘。松本行弘发明Ruby则是受到了美国作家Samuel R. Delany发表于1966年的一部科幻小说《通天塔-17》。

这部小说里面有一个核心的思想—语言会改变人的思想、影响人的行动。故事里面讲到,星际战争的一方发明了一种名为Babel-17的语言,敌方的人学了这门语言之后,思想和感觉都会发生改变,从而变成了本方的叛徒。这本书说明了语言的若干特点—即生活条件塑造了语言形式和意义,但是语言本身也会塑造人的行动。

小说主角对通天塔-17的评价是: Babel-17是那么精确的一门分析语言,几乎可以确保你在技术上应对面临的任何情况。

松本行弘也希望实现同样的事情—用一门语言重组并改进程序员的思考方式。实际上开发者这种群体也倾向于认为,编程语言不仅能改变问题的解决方式,甚至也能改变提出什么样的问题。所以这些人衡量公司规模、产品好坏或者同事强弱时往往会问一个问题:

你用什么语言?

这有助于外界理解软件公司为什么会变得如此强大、为什么会那么有价值,有助于了解那些影响我们日常生活的产品和服务。一项看似与我们无关的最内部的决定,比方说新产品的开发究竟是用Ruby、PHP还是C语言,突然之间却会影响到我们所有人。所以,如果你想知道Facebook为什么会是这个样子,为什么这么运作,接下来又会干什么,那就得了解一下PHP—扎克伯格开发Facebook用的语言。

PHP也许是所有编程语言当中最不受程序员待见的语言了。编程问答网站Stack Overflow的联合创始人Jeff Atwood用了非常恶毒的语言点评PHP,称PHP设计糟糕、东拼西凑,是 “步履蹒跚的怪物”、“瘟疫”、鬼屋,说在里面住的人都是喜欢鬼的人,称用PHP的都是业余爱好者。“有人误以为进入Facebook的都是才华横溢的工程师,但其实他们是一群用Windows XP写PHP的人。说他们是黑客几乎跟骂人差不多。”

大多数成功的编程语言都有整体哲学或者一套用于组织词汇语法的原则指南,但是PHP没有—PHP的创始人Rasmus Lerdorf早在2003年就承认,自己不知道如何写编程语言,只是走一步看一步,想到什么加什么。

比方说防止恶意数据攻击的PHP函数“mysql_escape_string”被发现存在漏洞之后,其补救措施不是对这个函数打补丁,而是重新开发了一个名为“mysql_real_escape_string”的函数,这就好比是在飞机驾驶舱安装了两个类似的按钮,按下其中一个可以让飞机放下起落架,而按下另一个则会让飞机掉下。

虽然很多人都说PHP很烂,但是却不能阻止它的火。据估计全球有39%的网站用PHP编写,其中就包括了Facebook、Wikipedia、WordPress著名网站等。原因在于PHP尽管有缺陷,但是做动态内容上手简单,不需要专业人士也能弄。

PHP的持续发展对于Wikimedia(维基百科)的成功非常关键。由于严重依赖PHP,维基百科遭遇了大规模的设计缺陷,并且直到2008年才推出了能适应移动设备的版本,到2013年才做出对用户友好的编辑界面。但是PHP让那些不是软件工程师的人也能贡献新功能,维基百科之所以能展示古埃及的象形文字、处理散页乐谱正是因为此。

但是Google不能用PHP来开发,因为Google要求搜索要快要精确,其实现需要更加精细和强大的语言,比方说Java或者C++。Facebook与之对比就相当于是小型试验的集市,加几个按钮、feeds或者小玩意来吸引你的注意力。PHP是为了迅速炮制出新功能而生的。

你几乎可以想象得出在决定命运的那一天里,扎克伯格在哈佛大学宿舍里是如何琢磨着以最快的速度和最小的代价让Facebook上线的。Web的节奏太快,用户又太善变了,要想捕捉到这一刻唯有成为第一个。程序写得再怎么烂都不要紧,最关键是把事情干完,让别人用上。那一刻他满脑子想的不是如何把代码写漂亮,而是让他的朋友登录上“Thefacebook”对认识的姑娘评头论足一番。

现在的Facebook市值已超过2000亿美元,办公室的墙上贴的都是这样的东西:“完成好过完美”,“快速行动、打破陈规。”扎克伯格希望用这些话让员工与Facebook的“黑客”文化保持一致。但其实这些恰恰是PHP的价值观。快速行动打破陈规实际上正是PHO的真髓,只要是“讲”这门语言的人都不可避免要按照这种方式思考。可以说是这门语言本身造就和维系了 Facebook 的文化

秘密武器

如果要找跟PHP这种自然实验语言完全相反的例子,没有地方比下曼哈顿区的金融交易机构Jane Street Capital更合适。这家400人的公司每天处理着美国大约2%的股权交易。

他们用的编程语言是OCaml,10年前,公司的技术负责人Yaron Minsky说服了老板用这门晦涩的语言重写了公司的整个交易系统。这语言原本由法国的一家研究机构的学者开发,目的是想改进某个用来自动证明数学定理的计算机系统,此前几乎没人用这门语言进行过实际工作。但是Minsky在读研时接触到OCaml之后,认为这门语言可以替代Jane Street 交易系统的那些Excel表。

OCaml的一大卖点是它的“类型系统”,类型系统跟Word的语法检查器有点类似,不同的是语法检查器只是用绿色波浪线标出有问题的文字,而类型系统检查出错误后会阻止系统运行。写有类型系统的程序的可靠性往往要比没有的高很多—这一点对于一个日交易量高达300亿美元的系统来说是非常有用的。

OCaml的类型系统帮忙拦截了bug,Jane Street的程序员就可以专注于更加高级的问题。有人甚至猜测随着时间转移这些人是不是已经内化了系统的不断纠缠,OCaml变成了某种新语(Newspeak),没人敢打任何坏主意。

其要点在于,要想充分获得类型检查器的好处,程序员必须给自己的代码增加复杂的注解。就好像Word的语法检查器需要你对所有的句子进行解释一样。写代码还要进行类型约束是令人讨厌甚至泄气的事情。更糟的是,OCaml比大部分的编程语言要求都要高,需要对数学抽象有很深的理解,这已经超出了大部分开发者的能力范畴。但是这种语言的严格对于某些人来说却相当于猫薄荷,这反而让Jane Street在紧张的招聘市场里有了一项与众不同的优势。OCaml就像猫薄荷一样替Jane Street源源不断地吸引了一批批的高素质人才候选人。那些人被吸引的不仅是因为这门语言,更是因为使用这门语言的人。人以群分,这里的人平时玩的都是四人国际象棋。看起来竞争情报的文化与一门奇特语言的使用密切相关。

类似地,Google似乎也打算通过Go语言的推广使用来达到类似目的。Go是Google开发的一种高性能编程语言,目的是要让Web的处理工作更加优雅和高效。开发此类高风险软件是有好处的,因为大型Web服务背后的那一大群服务器的运行需要这样的语言。对于喜欢新奇和挑战的开发者来说Go尤其具有吸引力。

成长的烦恼

2010年末,Facebook遭遇了一次危机。PHP本身并不是针对性能优化而开发的,而Facebook网站又发展得太快,若不进行相当彻底的改造网站看起来快要瘫掉了。

换语言根本不在考虑的范围之内。Facebook网站上有着数千专家工程师撰写的上百万行PHP代码,还有超过5亿用户在使用它。因此Facebook派遣了一支由资深工程师组成的特种部队,让这批人去攻关一个特殊项目,找出让Facebook不放弃它那带黑客口音(hacky)母语的情况下维持运转的办法。

解决方案其中的一部分是开发出一种编译器软件,将Facebook的PHP代码编译为更快的C++代码。而项目的另外一项工作则成为了计算机语言工程的一大壮举,它使得Facebook的程序员在保持PHP血统文化的同时还可以编写出更加可靠的代码。

这支救援分队发明了一门PHP方言,名字叫做Hack。Hack是带可选类型传系统的PHP,也就是说,你可以还继续写原来随性写意的PHP,也可以选择增加注解让类型系统检查代码的正确性。跟Jane Street一样,这种类型检查器完全是用OCaml编写的,这绝非巧合。Facebook希望自己的码农用感到舒服的母语继续快速行动(move fast),但是同时不希望他们在这么做时不得不打破一些东西(break things)。(去年扎克伯格宣布了新的口号:“稳定结构、快速行动”)

与此同时,Twitter也经历了类似的变革。Twitter原先是用流行的Web框架Ruby on Rails开发的,而后者则是在Ruby基础上受PHP启发做出来的。然后Twitter的用户开始暴涨。一旦大V发布了新的推特,数十万粉丝的tinemline也必须马上更新。此轮情况往往会令系统不堪重负,Twitter工程师不得不把网站暂时关闭才能应付。由于经常干这种事情,维护页面的那头失败的鲸鱼形象都变得臭名卓著了。后来Twitter用Scala语言替代了公司很大一部分的服务实现。不出意料,跟OCaml一样,Scala也是由学者开发,一样拥有强大的类型系统,都是以程序员的自由和开发的惬意为代价来确保准确和性能。

跟初创企业最终找到收入来源而走向“成熟”类似,他们同样也可以借助编程语言的力量来操控组织心理。在Google干过7年、现在Dropbox工作的编程语言设计师Guido van Rossum说,软件公司到达一定规模之后要想避免陷入混乱,唯一的办法是借助预先需要程序员做更多事情的编程语言。“就是那种让你放慢下来的感觉,因为所有事情你都需要说上三遍。”这就是为什么许多初创企业尽可能拖延切换语言的原因所在。换上更严谨的语言有可能会让你失去一些NB的创业元老黑客,迸发出新功能的可能性也会降低。但是这能帮助整个公司更好地理解别人的代码,保证产品日常运营必要的稳定性。

软件初创企业能够进行这样的机动甚至可能还解释了他们为什么会如此强大。部分原因是由于计算机规模的扩大。但是这些公司也有着独特的重塑自我的能力。随着公司的改变与发展,这些公司能做的不仅仅只有重写画画组织结构图而已。因为他们是用代码书写成的,所以可以做一些更加激进的事情—他们可以重新组织自己、再造企业文化,改变思考方式。

时间: 2024-10-14 01:35:11

用什么样的语言就有什么样的公司【转载】的相关文章

C语言函数sscanf()的用法 (转载

在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)

C语言文件怎么写?(转载)

---恢复内容开始--- c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码,还在等什么快来看看吧! 大致格式: #ifndef __ABC_H__ #define __ABC_H__ //以上是为了防止头文件被多次包含,可以省略,最好有,名字任意,保证唯一即可 //以下是宏定义,可有可无 #define MAX 100 #define MIN 0 //以下是结构声明,可有可无

iOS-多语言版本的开发(一)(转载)

引言 ?多语言 & 本地化,随你怎么叫,道理差不多:一个App 要想走出国门,只支持一种语言是不能够的,也是不可能的,多元化世界已经融入我们的生活,对于一些应用,开发多语言版本,已经是不可避免的,特别是旅游等方面的应用:国内也有很多App 已经接入多语言,例如:支付宝.微信.收留我(嘻嘻,做下广告)等: 开发多语言,一般有两种情况 1.App还没有开始写,这个时候创建一个多语言版本,很是容易,然后再写代码的时候稍微留意下哪里需要保持多语言就行了:2.App已经上线了,而且之前没有任何的为开发多语

ios-多语言版本开发(三)(转载)

写在前面 ?iOS 多语言版本的开发(二)中我们实现了如何让用户自己去切换系统语言的功能,我们还写了Demo 以供辅助学习:但是,继以上两篇文章都是建立在项目刚刚启动或启动不久,项目中存在的中文字符串还不是很多,手动改起来也还可以接受; 那么问题来了,如果项目已经竣工或者已经迭代几个版本了,那该如何实现了?手动改起来也不太现实,耗时耗力不讨好的手动,在这里就不用考虑了. 不让考虑,是因为我有更简单快捷高效的方法,让我慢慢与您道来: 如何辨别项目中的中文字符串? ?既然要替换项目中使用到的中文字符

iOS-多语言版本开发(二)(转载)

题记 ??iOS 多语言版本的开发(一) 中我们完成了让应用跟随系统语言进行切换,而用户自己却不能切换的功能,也基本上算是实现了多语言版本:可是,对于某些应用来说,实现跟随系统语言切换的同时, 也想要实现让用户自己选择应用语言版本的功能:针对这种情况,利用这篇文章来写写如何让用户自己切换应用语言版本: 语言文件存在的形式 想要实现用户自己手动切换语言版本,就先要了解语言文件在资源文件中存在的形式; 如图中,不管是英语(en.lproj).简体(zh-Hans.lproj).还是繁体(zh-Han

快速掌握一个语言最常用的50% (转载)

转载自孟岩的blog. 现在的开发工作要求我们能够快速掌握一门语言.一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习:其 二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作.然而这两种方法都有弊病.第二种方法的问题当然很明显,不仅浪费了时间, 偏离了目标,而且学习效率不高.因为没有实际问题驱动的语言学习通常是不牢固不深入的.有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的. 第一种路子也有问题,在对于这种语言的脾气秉性

Mysql C语言API编程入门讲解【转载】

软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.鞍山皮肤病专科医院www.0412pfk.net API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能. Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作. Mysql的安装 要进行M

Go语言库之strconv包(转载自--http://blog.csdn.net/alvine008/article/details/51283189)

golang strconv.ParseInt 是将字符串转换为数字的函数 func ParseInt(s string, base int, bitSize int) (i int64, err error) 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制 参数3 返回结果的bit大小 也就是int8 int16 int32 int64 代码: package main import "fmt" import "strconv&qu

iOS学习之VFL语言简介

http://www.cnblogs.com/chars/p/5146607.html 什么是VFL语言 VFL(Visual Format Language),"可视化格式语言". VFL是苹果公司为了简化autolayout的编码而推出的抽象语言. 语法说明 H:[cancelButton(72)]-12-[acceptButton(50)] cancelButton宽72,acceptButton宽50,它们之间间距12 H:[wideView(>[email protec