和王宝强零距离接触
06-29
“路径依赖”理论启发商人们想出了一个经营策略:虽然软件公司都抱怨盗版,但他们早就意识到让别人违法地仿造其产品并不是坏事。人人都上钩之后,就可以开始卖升级产品,或者提供服务,附加别的花哨的东西。这是开放源代码的好处。照此说来,苏联的AK-47是世界上最流行的开放源代码冲锋枪。
20世纪40年代中期,人类发明了有史以来最具破坏性的武器。原子弹让人们夜不成眠,但真正造成巨大破坏的却是AK-47。这种有显眼黄色弹匣的冲锋枪造成的死亡和毁灭多过任何其他现代化武器。到今年它已经问世60年了,但还没有一点退休的迹象。
它的发明者、俄罗斯的卡拉什尼科夫现在已经近90岁了,住在莫斯科以东1130公里处乌拉尔地区的伊热夫斯克市。他对自己的这项发明内心很矛盾。他仍为向苏联普通士兵提供了这样一种强大的武器而感到自豪,但又因为自己的名字跟死亡和恐怖联系在一起而感到懊悔。“一旦有人发明出一种更好的冲锋枪,我就会跟他握手。但目前这件事情还没有发生。”
牛津大学教授菲利普·基利科特(Phillip Killicoat)在提交给世界银行的论文《武器经济学:冲锋枪的全球市场》中分析了AK-47为什么在世界各地有不同的售价。比如AK-47在非洲通常要比在其他地方便宜200多美元。基利科特说:“非洲各国的边境管理比其他地方要宽松很多,冲锋枪在非洲的交易不太受管制,当需要购买这种武器时几乎不存在贸易壁垒。一个时期非洲只有几个国家因为发生冲突而需要武器,宽松的边境管理使得非洲的武器供应可以满足这些国家的需要。”
基利科特还解释了为什么世界各地的交战双方都选用这种武器。通常做法是像迈克·霍奇一样,把这归因于AK-47功能上的特点:容易操作,造价低廉,坚实耐用,故障率低。而它不够精准、对使用者来说不够安全、瞄准范围相对较小的缺点都被忽略掉了。这种解释有一个说不通的地方,即其他操作同样简便的冲锋枪就没有像卡拉什尼科夫设计的这种枪这样被广泛采用。
基利科特提出,AK-47的流行可以用路径依赖理论(path dependence)来解释。1936年,美国发明家德沃夏克(Dvorak)博士历经十余年的研究发明了ASK键盘(American Simplified Keyboard,即美式简化键盘),他声称这种键盘比打字机发明者、美国人肖尔斯1870年设计的、现在通用的QWERTY键盘效率更高。据说当初肖尔斯在研制打字机时,为了解决打字员打字速度过快造成挤塞的问题,故意打乱了字母排列顺序,形成了直到今天通用的QWERTY顺序排列。不过,德沃夏克先进的ASK键盘没能占领市场,反而逐渐地销声匿迹了,QWERTY一直独霸着键盘市场。
美国斯坦福大学经济学教授保罗·戴维认为,QWERTY键盘之所以能在市场上占统治地位,不是因为它的效率高,而是因为它出现得早,普及之后,对它进行更新换代的成本太高。像这样,一个有缺陷的产品由于它早期一个小的优势而被广泛采用之后就独霸了市场的情形被称作“路径依赖”。具体到AK-47来说,它早期的优点或许是它是苏联人的发明,不受知识产权的限制,可以随意仿造。
“路径依赖”理论启发商人们想出了一个经营策略:虽然软件公司都抱怨盗版,但他们早就意识到让别人违法地仿造其产品并不是坏事。人人都上钩之后,就可以开始卖升级产品,或者提供服务,附加别的花哨的东西。这是开放源代码的好处。照此说来,苏联的AK-47是世界上最流行的开放源代码冲锋枪。
http://www.bj.wicity.cn/1/cn/index.php 官方网站
在中关村、望京、三环等地,用户通过连接无线信号cect-chinacomm即可上网。
中电华通通信有限公司成立于2003年1月,经营范围包括因特网接入服务;无线接入服务;经营与通讯及信息业务相关的系统集成、技术开发、技术服务、信息咨询、设备生产、销售;全国连锁网吧。
这些日子一直在分析刚完工的项目,总得来说,能交付测试。但离产品阶段,还是差很差一截。
产品化,即一个项目可以轻松复制,交付给不同用户。
产品化的软件一个关键是不是可以轻松迁移,而轻松迁移就取决于迁移需要修改的参数接口是不是更加灵活。这在于我们在设计产品之前有没有合理开发一些关键参数,进行迁移。
在这个层面上说的分层,可理解为软件主题跟用户接口的分层。我们把软件-接口=开发者-用户这样的结构理解为两层。
程序层面上的分层,看此篇 PHP工厂方式的三层结构
另一个产品化的标识,就是方便修改,主要是风格方面。因此,在程序前端部分,需要合理设计我们的VIEW层代码。
VIEW层分层,主要是分成HTML(DIV)+CSS,CSS决定页面的风格,这样,只要重新CSS就能快速修改页面风格。
JS分层。如果是试用标准的xhtml标准或者DOM格式的代码,那可以方便得把事件和函数写在附加的js文件中。
对于大公司(千人~万人的开发团队),一般写代码的人最少,前边搞需求分析和系统规划,后边搞测试,两头人多。而小公司结构一般就比较随意,根据项目情况,去合理安排结构。而开发一些很小的项目,比如几个人的团队,成本核算就不那么容易了。
人多,不等于效率高。在开发这个领域 1×5 != 5×1 。说通俗点,一个老程序员10天一个人能开发完的,并不等于10个同等水平的人一天能干完。
这个事情其实还是好解决的,我们可以把项目分解出来,模拟一个模块开发流程的时间表。这时,我们就能知道,为什么10个人不能一天完成,模块是有先后关联的。
再说人力消耗,如果多人协作,人力成本会更加微妙,这多少跟程序员的心态有关。老程序员能解决大部分难题,并且有能力完成整个项目,但有些模块也是不愿意去做的,因为他会考虑一个性价比的问题。而新手程序员,未必不能解决一些基本的模块,他们更加关心这个过程中知识方面的提升。
因此,把项目分拆,设计好开发流程,合理分配不同的内容给不同的人,是这件事情的核心。
至于程序员的薪酬,不加考虑。其实如果考虑薪酬,考虑开发进度,就可以用最优的价格,最短的开发周期去完成一个项目。
国外开发者博客中有一篇有趣的文章,将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级,中级,高级程序员,直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点,可将WEB开发者大致分为以下几个版本:
Alpha:阅读过一些专业书籍,大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前,你大概不会雇佣他们成为职业的WEB制作人员。
Beta:已经比较擅长整合站点页面了,在HTML技巧方面也有一定造诣,但还是用Tables来制作页面,不了解CSS,在面对动态页面或数据库连接时还是底气不足。
Pre Version 1 (0.1):比Beta版的开发者水平要高。熟悉HTML,开始了解CSS是如何运作的,懂一点JavaScript,但还是基于业余水准,逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。
1.0: 能够基本把控整个站点开发,针对每个问题尽可能的找到最直接的解决办法。但对可测性,可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础,需要有进一步的帮助和指导。
2.0:懂面向对象的编程语言,理解分层开发的必要性,关注代码分离,对问题寻找更完美的解决方法,偶然也会考虑设计模式的问题,但对此仍然概念不清。属于优秀的初级开发者,能完成较松散的代码开发(相对大型严谨的站点开发而言),在面对较复杂问题寻找解决办法时需要周边人的帮助。
3.0:开始较为深入的理解面向对象编程和设计模式,了解他们的用途,当看到好的设计模式时能看透其本质,逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者,雇主也确信他们最终能找到问题的解决办法,这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰,值得一提的是,只要给予一些指导,他们能很快理解并熟记做出的决定,以及选定方案的优势所在。
4.0:理解模式,重视用户的反馈。着手研究方法论,架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言,技术架构的整体方案,可根据需求解构程序。能从理论的角度,不同模式如何融合成最佳形态,将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手,理解不同系统和方法论的细微差别,属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员,将他们推向更高的级别。
5.0:从系统的角度考虑问题。对各种系统结构有深入研究,能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉,让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说,他们总是对新的技术和信息保持饥渴状态,试图用最简便的方案解决开发任务。在整个IT团队中获得信任,属于高级程序员和架构师。
那么,您属于哪个版本的程序员呢?