有关计算机语言
七月
在当今计算机领域里,主要流行着两类语言:一种称为Object-oriented,翻译成中文好像是:面向对象;另一种称为Procedure,翻译成中文应该是:顺序。
目前流行的程序语言里:JAVA和C++是为Object-oriented 设计的,其特点是:程序的物化和模式化。这是指一种程序设计范型,同时也是是一种程序开发的方法论。面向对象程序设计的雏形早在1960年的Simula语言中即可发现。什麽是物化哪?物化就是把计算机抽象的理念具体到现实的客体上,比如说:用JAVA和C++写一段程序来表达一个人, 这个人拥有每一个人所有的属性:名字,性别,年龄以及人的基本作为。模式化就是把一个大系统分割成许多小碎块,每一个碎块就是一个模式,具有自己的功能,不同的模式组合成系统。Object-oriented 语言有三大特点:第一是隔离隐蔽性,也就是说你可以知道这段程序的功能和用法,却不用知道它的编排细节;第二是重复使用性,模式化和隐蔽性使之成为可能,比如,有一个模式的功能是计算人的年龄,那末,任何系统需要这个功能的,都可以直接把这块模式拿来用,而不用再去写一段新的程序;第三是随机执行性,也就是在执行程序的时候,赋予其意义。举个例子:一个人的模式,是抽象的,拥有性别和年龄,我们可以在执行这个模式的时候,把人具体到男人,女人和不同的年龄,而这是靠输入的参数临时决定的。
Procedure语言是老式的计算机思维方式。像Fortran, BASIC, COBOL 就属于这类语言。它是线性的,按顺序而来,机械地,亦步亦趋地模仿系统的功能。程序往往是冗长的,一体的,无法分割和重复使用的。第一代的Fortran诞生于1954年,COBOL则在上个世纪60年代成为大型商业和工业的主要机器语言,它和IBM的文件储存系统接口,一直存活到今天。许多大型的保险公司,金融公司,至今还有很多系统要靠此运行。
70年代初,在美国的Palo Alto Research Center, 几个程序员发明了一种计算机语言叫做“SmallTalk”,几经演变, 它被很多领域广泛接受,也被认为是第一代的Object-oriented语言。它的中心概念是“Object”,也就是具体化的物体和对象:人,树,公司。。。为了达到可重复使用和模块化的目的,使用了一个继承性的概念,也就是说:在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化,例如,“人”这个类可能会有它的子类“男人”和“女人”, 而男人和女人可以共同使用它们作为“人”的模块,再加上自己特有的属性。SmallTalk语言在Object-oriented方面堪称经典——以至于30年后的今天,JAVA和C++依然建立在此基础上。
当然,和世上一切事物一样,计算机语言也是不停地发展着,人们要求有一种更加简便,更具功能的语言。这几年,有一种称为“Aspect-oriented ”的语言渐渐地露出了水面。 它在Object-oriented的基础上,将其的随机执行性的概念更加扩展和完美,使程序语法更加简练和灵活。我们可以写一个叫做人的模块,在Object-oriented的语言里,我们还要再写男人和女人的模块,而在Aspect-oriented的语言里,男人和女人只要在随机执行时把自己的属性文件输入,而无需写新的模块。我确信,今后的几年里,Aspect-oriented 就会取代Object-oriented。
那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。他的第二个问题是在计算机领域里,需不需要完美无缺的数学语言?我对这个问题胸有成竹,因为这位老先生搞得就是如何将数学语言应用到软件的开发过程中。
的确,还有一枝独秀的一种计算机语言,是完美无缺的数学语言,它就是当今IT行业里人人要用的数据库管理系统的SQL语言,中文称为结构化查询语言 。其实,这是一种建立在集合论上的程序语言。数据库管理系统和计算机几乎是同时并存的。一个数据库管理系统最关键的性能就是要有一种方便的语言去索取数据。早期的数据库不具备这种语言,如果要寻找所需的数据,需要运用复杂的算法写繁琐的程序。
1970年,一个在IBM工作,名叫Edgar Codd的英国博士发明了一种存放数据的办法,被称为relational模型。他把数据存放在一个表格里,每一组关联的数据有一个独特的代码。这种存放数据的方式其实就是数学上的坐标系,Y轴上的点就是那组数据的代码,而X轴上的点就是那组数据里的一个单项。从数学的角度看,一组数据就是一个项集(record set)。IBM因此发明了SQL语言,利用集合论的逻辑和算法去操作数据。它允许用户在高层数据结构上工作,而不需要用户了解其具体的存放方式。所有 SQL 语句接受项集作为输入,回送出的项集作为输出,从而解决了数据查询的问题。Codd博士也因他对数据库基础理论的巨大贡献,获得了1981年的Turing奖,Turing奖被认为是计算机领域里的诺贝尔奖。
今天的时代是计算机的时代,计算机已成为我们生活中不可缺少的基本需要。计算机语言也因此越来越接近人的思维,愈发富有智慧和人性。
- Re: 有关计算机语言posted on 03/26/2007
这篇是和慧元聊天的结果。咖啡里有许多数学家,IT专家。。。大家砸砖阿, 我不过是玩啊:) - Re: 有关计算机语言posted on 03/26/2007
object-oriented (program language)是发散性思维的,而procedural则是循规蹈矩,按部就班的,aspect-oriented就没有切身体验了,终于落伍了。网络时代的IT三月抵以往一年,我这该是一落千丈了:-) - Re: 有关计算机语言posted on 03/26/2007
July 就不是残废. 向July学习。 :) - Re: 有关计算机语言posted on 03/26/2007
也不知为什麽,我总是站在IT行业的风口浪尖上 :) 当年做论文时,object-oriented 刚刚时髦, 老板非要这个课题; 现在在搞Aspect-oriented. 刚工作的那年,正是Y2K如火如荼,写了两年的COBOL 和VSAM, 倒是把目前IT的主要技术都知道些毛皮,对现在的InterfaceDesign,很有帮助。
- posted on 03/26/2007
恩,要我说计算机语言的发展趋势,那就是越来越接近人脑思维的方式。日常生活里我们很少用Procedure程序的思维方式想事情,而Object就近得多。所以学编程的过程上学Procedure语言花的时间一般要比学Object-Oriented(OO)时间长,虽然OO语言更繁琐。特别是没有过Procedure训练的,接受OO更容易。但从另一个角度讲,Procedure离数学公式更近一些,所以也得看程序是干什么的。
我觉着是Procedure还是OO主要是思维方式,程序语言只是辅助或是enforce。比如我们可以用Fortran写出OO的程序,也可以用C++写出基于Procedure的程序(这个用Java或SmallTalk也许难些,但那属于语法)。
我自己最喜欢的语言是Pascal(July都没有提:),这个虽和怀旧有关,但Pascal确实清晰严谨。
- posted on 03/26/2007
从语言上说,Object Oriented 提出了Procedure 所没有的概念, Class,Interface(Abstraction), Inheritance, Polymorphism.
很久以前写过Fortran, 不知Fortran也把这些新概念加进来了。
浮生 wrote:
恩,要我说计算机语言的发展趋势,那就是越来越接近人脑思维的方式。日常生活里我们很少用Procedure程序的思维方式想事情,而Object就近得多。所以学编程的过程上学Procedure语言花的时间一般要比学Object-Oriented(OO)时间长,虽然OO语言更繁琐。特别是没有过Procedure训练的,接受OO更容易。但从另一个角度讲,Procedure离数学公式更近一些,所以也得看程序是干什么的。
我觉着是Procedure还是OO主要是思维方式,程序语言只是辅助或是enforce。比如我们可以用Fortran写出OO的程序,也可以用C++写出基于Procedure的程序(这个用Java或SmallTalk也许难些,但那属于语法)。
我自己最喜欢的语言是Pascal(July都没有提:),这个虽和怀旧有关,但Pascal确实清晰严谨。
- Re: 有关计算机语言posted on 03/26/2007
还有一种计算机语言类型, 也蛮流行的, taged language, such as HTML, XML, etc. - Re: 有关计算机语言posted on 03/26/2007
- posted on 03/26/2007
多年前曾经用过 Fortran,后来改用 unix/C/C++,与 Fortran 相比,C/C++ 的最大的便利之一就是 recursion,一种最高档次的 loop,用它可以把程序写的非常简洁优雅。recursion 更有着逻辑和哲学上的深刻。
现在更喜欢用 Mac OS X, 用 Matlab。它比 C、java 等语言更接近人的思维,有利于在算法的更高级别上思考,而不用操心执行上的细节问题,让人感觉到一种解放。
编程序需要数学,也是一种艺术。怎样用最短的时间,最小的空间来实现一个算法是对智慧的一种挑战,而一段简洁优雅的程序是一件让作者自豪的艺术品,实现了一个优美的算法,就象是写出一篇美文。 - Re: 有关计算机语言posted on 03/26/2007
Now I know you are a bunch of kuckleheads. :)
Object-oriented 没有像样的中文翻译。Aspect-oriented 如何翻?这是有意思的话题,要请马慧元出山。 - Re: 有关计算机语言posted on 03/26/2007
很久以前就不知哪位高手 把Object-oriented 称之为‘面向对象的‘, 让我当时学着糊度 , 国内已把Aspect-oriented 称为 ‘面向方面的‘。
我已不用再糊度着学了。 :)
devil wrote:
Now I know you are a bunch of kuckleheads. :)
Object-oriented 没有像样的中文翻译。Aspect-oriented 如何翻?这是有意思的话题,要请马慧元出山。 - Re: 有关计算机语言posted on 03/26/2007
Just curious about a question to ask (since you sometimes work on cutting edge technologies). The question is also for anybody else on this board.
Java and C++ are not pure Object-oriented lanagauges. In term of purity, which programming language is the purest object-oriented? Thanks.
July wrote:
有关计算机语言
七月
目前流行的程序语言里:JAVA和C++是为Object-oriented 设计的, - posted on 03/26/2007
我跟管仲兄经历相似,也是先FORTRAN,然后C/C++。至于Aspect-oriented则根本没听说过。七月的文章等于给我等扫盲了。现在JAVA似乎成了standard bearer,有人认为不懂JAVA就不算懂编程,这似乎有点当年不懂拓扑就不算懂数学的意思。
关键是看干什么。我所了解的有些大型的科学计算程序和金融分析程序还是用FORTRAN或者C写的。华尔街有些PhD turned quants, 现在还在用C++写。所以他们戏称C++是华尔街的通用语言。
guanzhong wrote:
多年前曾经用过 Fortran,后来改用 unix/C/C++,与 Fortran 相比,C/C++ 的最大的便利之一就是 recursion,一种最高档次的 loop,用它可以把程序写的非常简洁优雅。recursion 更有着逻辑和哲学上的深刻。
现在更喜欢用 Mac OS X, 用 Matlab。它比 C、java 等语言更接近人的思维,有利于在算法的更高级别上思考,而不用操心执行上的细节问题,让人感觉到一种解放。
编程序需要数学,也是一种艺术。怎样用最短的时间,最小的空间来实现一个算法是对智慧的一种挑战,而一段简洁优雅的程序是一件让作者自豪的艺术品,实现了一个优美的算法,就象是写出一篇美文。 - posted on 03/26/2007
据我了解,没有一个大家都认可 definition for Object-oriented lanagauge.
in my humble opinion, smalltalk is PURER than java and c++.
得,又在July门前弄斧了。
st dude wrote:
Just curious about a question to ask (since you sometimes work on cutting edge technologies). The question is also for anybody else on this board.
Java and C++ are not pure Object-oriented lanagauges. In term of purity, which programming language is the purest object-oriented? Thanks.
July wrote:
有关计算机语言
七月
目前流行的程序语言里:JAVA和C++是为Object-oriented 设计的, - posted on 03/26/2007
C++ and Java, 在programmer 的市场上因该是平分秋色。
如果写新的软件, 因该没有什么理由要用Fortran。
wukong wrote:
我跟管仲兄经历相似,也是先FORTRAN,然后C/C++。至于Aspect-oriented则根本没听说过。七月的文章等于给我等扫盲了。现在JAVA似乎成了standard bearer,有人认为不懂JAVA就不算懂编程,这似乎有点当年不懂拓扑就不算懂数学的意思。
关键是看干什么。我所了解的有些大型的科学计算程序和金融分析程序还是用FORTRAN或者C写的。华尔街有些PhD turned quants, 现在还在用C++写。所以他们戏称C++是华尔街的通用语言。
guanzhong wrote:
多年前曾经用过 Fortran,后来改用 unix/C/C++,与 Fortran 相比,C/C++ 的最大的便利之一就是 recursion,一种最高档次的 loop,用它可以把程序写的非常简洁优雅。recursion 更有着逻辑和哲学上的深刻。
现在更喜欢用 Mac OS X, 用 Matlab。它比 C、java 等语言更接近人的思维,有利于在算法的更高级别上思考,而不用操心执行上的细节问题,让人感觉到一种解放。
编程序需要数学,也是一种艺术。怎样用最短的时间,最小的空间来实现一个算法是对智慧的一种挑战,而一段简洁优雅的程序是一件让作者自豪的艺术品,实现了一个优美的算法,就象是写出一篇美文。 - Re: 有关计算机语言posted on 03/26/2007
st dude wrote:
Just curious about a question to ask (since you sometimes work on cutting edge technologies). The question is also for anybody else on this board.
Java and C++ are not pure Object-oriented lanagauges. In term of purity, which programming language is the purest object-oriented? Thanks.
Not that I know but from the books I hit, Small Talk is purer. There are others maybe but I forgot. - posted on 03/26/2007
Thanks, LM.
Yes, ISO classifies all of them as object-oriented lanagauges even they are not pure.
But, if let's forget about ISO and just stay within academic and be stubborn, can we define the 100% pure object-oriented lanagauge as the smallest type (basic type) of the lanagauge is object, no primitive types such as integer, character....? Java's purity problem is that it is mixed. For example, it has primitive type integer (1,2,3..), it also has object type: class Integer. Is this kind defenition of OO too simple?
I dont work on programming lanagauges, but heard that they made some changes in new Java (java 5.0?).
LM wrote:
据我了解,没有一个大家都认可 definition for Object-oriented lanagauge.
in my humble opinion, smalltalk is PURER than java and c++.
得,又在July门前弄斧了。
- Re: 有关计算机语言posted on 03/26/2007
七月,忽然觉得你很象我认识一个人,她的生日在七月,也住在芝加哥,也有一个 CS 硕士学位。你本科是北大地质系吗?如果是,我大概知道你是谁!:-) - Re: 有关计算机语言posted on 03/26/2007
I am not the person you know :)
guanzhong wrote:
七月,忽然觉得你很象我认识一个人,她的生日在七月,也住在芝加哥,也有一个 CS 硕士学位。你本科是北大地质系吗?如果是,我大概知道你是谁!:-) - posted on 03/26/2007
没想到这里忽拉拉一大片Developer同志们。大家好象快找到共同语言了。:)
程序开发在工业界已经很难成为有档次的技巧和工种了。如果一项技术不需要专业教育就人人可为,它的价值就朝不保昔了。如果每一个普通印度人都能或多或少、或好或快地把这个工作干下来,那在线各位就要反思一下了。:)
Fortran 能写OOD,这是酒后胡言哄我们开心吧?怎么写?:)
Financial C++用得多,历史造成的。算法库仍然多是C++包装的C算法。Embedded软件,还得用C写,除非规模比较大,performance overhead和footprint得不尝失。
真正企业级的系统和Service, Non Functional 方面的考量至关重要,是Java的天下。不是说Java编程有什么特殊之处,只是因为J2EE作为一种标准协议制定得很好,比较适合SOA。各家Vendor的Application Server出来都不错。不过微软现在已经赶上来,.Net作为一种Application Server基本可以平分秋色了,可惜他不是开放式的工业协议,只有它一家自己做。
在工业界,具体程序怎么编,怎么写,并不重要。Component借口定义,有一组Architect定义好就行了。Developer即使不会用loop, 一句一句死编下来,照样能用。Test, Deployment, Infrastructure, Integration, Architecture and System Engineering, Env Mnagament, 哪一个部门都比development消费高 (没办法,印度人多,成本自然下来了)。
小程序,小business,design和coding大概很有意思。大规模的outsourcing项目,说实话,Interface和Integration最有意思,技术上讲。Design和Coding最简单 (主要是因为工业界各类Design Patterns都比较成熟了。巨型项目不允许你乱发挥),具体实施最难, deployment and environment team全是consultant contractor, 工资远高于Architects。没办法。 - posted on 03/26/2007
同意。
我们做code review, 不太看是否efficient, 而是readability.
在工业界,具体程序怎么编,怎么写,并不重要。Component借口定义,有一组Architect定义好就行了。Developer即使不会用loop, 一句一句死编下来,照样能用。Test, Deployment, Infrastructure, Integration, Architecture and System Engineering, Env Mnagament, 哪一个部门都比development消费高 (没办法,印度人多,成本自然下来了)。
我们公司的Architects(solution Architect) 工资最高( 在technical staff 里面)
deployment and environment team全是consultant contractor, 工资远高于Architects。没办法。 - Re: 有关计算机语言posted on 03/26/2007
there is an object-oriented extension to Fortran 90/95.
令胡冲 wrote:
Fortran 能写OOD,这是酒后胡言哄我们开心吧?怎么写?:) - Re: 有关计算机语言posted on 03/26/2007
now I know July 不是谁。 :)
July wrote:
I am not the person you know :)
guanzhong wrote:
七月,忽然觉得你很象我认识一个人,她的生日在七月,也住在芝加哥,也有一个 CS 硕士学位。你本科是北大地质系吗?如果是,我大概知道你是谁!:-) - posted on 03/26/2007
哈,没有做IT两年多,一下看到这么过IT名词,居然感觉很亲切!怎么没有人提起Lisp和谈到DBMS。做IT的最后十年都在投资银行(Investment Banks),我以为C++在Financial并没有让人感觉的(由薪金带来的假象)的地位那么大,它的应用不是Back Office系统程序,就是一些很孤立的和Adhoc的trading (pricing) module。IT在金融公司的挑战性在于IT技术应用,而不是IT技术创新(Renovation)。真正高级、有挑战性的IT工作还是在IT公司,而不是在金融公司。
现在再读这些风头浪尖上的Developer的故事,十多年了,却有些仿如隔世的感觉了。这些弄潮儿在千禧年前后掀开的网络时代,给多少人,特别是西海岸的IT们带来了震心憾肺的高潮和低潮。
- posted on 03/26/2007
〉这种存放数据的方式其实就是数学上的坐标系,Y轴上的点就是那组数据的代码,而X轴上的点就是那组数据里的一个单项。
俺做过几年DBA,那时经常为上边这句话跟developer们打架。跟俺工作过的每一个developer,没有例外,都这么理解关系数据库。
把数据库的表比作坐标系有一个大问题,坐标是有序的,但关系数据库的数据行是无序的。没有“上一条纪录”或“下一条记录”这回事儿。这是关系数据库的一个核心概念,数据表是一个集合,不是列表。顺序只存在于你的 result set 里,数据库里的数据没有顺序。
俺认很多坏程序都是个误解搞出来的。这些程序依赖“上一条纪录”或“下一条记录”。常常数据改了,程序就出问题了。
对不起,虽然不做DBA好多年了,看见这个,还是忍不住。
- Re: 有关计算机语言posted on 03/26/2007
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :) - Re: 有关计算机语言posted on 03/26/2007
so you actually eliminated designing objects?
I thought Subject is just another word for Component in computing world.
devil wrote:
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :) - Re: 有关计算机语言posted on 03/26/2007
行人 wrote:同意也理解你的说法,看来你工作过的地方不需要一种不做DBA的back-end developer。对于front-end developer,特别是喜欢object-oriented programming的,DBMS的module只是一个object,才不管你里面是怎么捣鼓的呢。
〉这种存放数据的方式其实就是数学上的坐标系,Y轴上的点就是那组数据的代码,而X轴上的点就是那组数据里的一个单项。
俺做过几年DBA,那时经常为上边这句话跟developer们打架。跟俺工作过的每一个developer,没有例外,都这么理解关系数据库。 - posted on 03/27/2007
一个好的developer知道如何用metadata找 x和y’s position. 几年前,我用JAVA写过一个通用的API。
行人 wrote:
〉这种存放数据的方式其实就是数学上的坐标系,Y轴上的点就是那组数据的代码,而X轴上的点就是那组数据里的一个单项。
俺做过几年DBA,那时经常为上边这句话跟developer们打架。跟俺工作过的每一个developer,没有例外,都这么理解关系数据库。
把数据库的表比作坐标系有一个大问题,坐标是有序的,但关系数据库的数据行是无序的。没有“上一条纪录”或“下一条记录”这回事儿。这是关系数据库的一个核心概念,数据表是一个集合,不是列表。顺序只存在于你的 result set 里,数据库里的数据没有顺序。
俺认很多坏程序都是个误解搞出来的。这些程序依赖“上一条纪录”或“下一条记录”。常常数据改了,程序就出问题了。
对不起,虽然不做DBA好多年了,看见这个,还是忍不住。
- Re: 有关计算机语言posted on 03/27/2007
Pascal确实清晰严谨,所以不是典型的Procedure语言。对不起了,浮生:)
浮生 wrote:
我自己最喜欢的语言是Pascal(July都没有提:),这个虽和怀旧有关,但Pascal确实清晰严谨。 - Re: 有关计算机语言posted on 03/27/2007
我也不喜欢Object-oriented, 它的最大问题是无法简便地索取数据库,object-oriented 数据库已经研究了多年,就是因为这一点到死胡同里去了。J2EE的EJB是一场灾难。
devil wrote:
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :) - posted on 03/27/2007
JAVA和C++最大的不同不是语言本身,而是C++不是平台独立的, C++的应用有限,而JAVA因为平台独立,所以已发展成为一整套Enterprise Solution, 包括各个方面的APIs, 界面可以用JSP, 数据库由JDBC,EJB, 网络由JNDI, 服务有JMS, 更为重要的是Application Server 可以做很多management的工作,比如,transaction。。。而这些,C++ 都没有。金融公司用C++是因为历史原因,他们的infrastructure 是Unix/Cobra/C++, 而重建一套系统是用钱的。所以,不可能一下子换到JAVA。
wukong wrote:
我跟管仲兄经历相似,也是先FORTRAN,然后C/C++。至于Aspect-oriented则根本没听说过。七月的文章等于给我等扫盲了。现在JAVA似乎成了standard bearer,有人认为不懂JAVA就不算懂编程,这似乎有点当年不懂拓扑就不算懂数学的意思。
关键是看干什么。我所了解的有些大型的科学计算程序和金融分析程序还是用FORTRAN或者C写的。华尔街有些PhD turned quants, 现在还在用C++写。所以他们戏称C++是华尔街的通用语言。
guanzhong wrote:
多年前曾经用过 Fortran,后来改用 unix/C/C++,与 Fortran 相比,C/C++ 的最大的便利之一就是 recursion,一种最高档次的 loop,用它可以把程序写的非常简洁优雅。recursion 更有着逻辑和哲学上的深刻。
现在更喜欢用 Mac OS X, 用 Matlab。它比 C、java 等语言更接近人的思维,有利于在算法的更高级别上思考,而不用操心执行上的细节问题,让人感觉到一种解放。
编程序需要数学,也是一种艺术。怎样用最短的时间,最小的空间来实现一个算法是对智慧的一种挑战,而一段简洁优雅的程序是一件让作者自豪的艺术品,实现了一个优美的算法,就象是写出一篇美文。 - Re: 有关计算机语言posted on 03/27/2007
那我就不写程序了,在咖啡写诗就好了:)
令胡冲 wrote:
程序开发在工业界已经很难成为有档次的技巧和工种了。如果一项技术不需要专业教育就人人可为,它的价值就朝不保昔了。如果每一个普通印度人都能或多或少、或好或快地把这个工作干下来,那在线各位就要反思一下了。:)
- posted on 03/27/2007
我的Lisp差点不及格:)我还做过一个修车的专家系统:)
rzp wrote:
哈,没有做IT两年多,一下看到这么过IT名词,居然感觉很亲切!怎么没有人提起Lisp和谈到DBMS。做IT的最后十年都在投资银行(Investment Banks),我以为C++在Financial并没有让人感觉的(由薪金带来的假象)的地位那么大,它的应用不是Back Office系统程序,就是一些很孤立的和Adhoc的trading (pricing) module。IT在金融公司的挑战性在于IT技术应用,而不是IT技术创新(Renovation)。真正高级、有挑战性的IT工作还是在IT公司,而不是在金融公司。
http://ec1.images-amazon.com/images/G/01/ciu/a6/c6/bcf34310fca0fd046c9e8010._AA240_.L.jpg"/> 现在再读这些风头浪尖上的Developer的故事,十多年了,却有些仿如隔世的感觉了。这些弄潮儿在千禧年前后掀开的网络时代,给多少人,特别是西海岸的IT们带来了震心憾肺的高潮和低潮。
- Re: 有关计算机语言posted on 03/27/2007
devil wrote:
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :)
嘻嘻,July,我觉着devil好像在这里起哄那呀:)I guess this is only fitting for his name:)Devil 的话少有PC的,概因从主观出发? - posted on 03/27/2007
Maybe Subject-oriented will be the next generation after Aspect-oriented, who knows?
:)
浮生 wrote:
devil wrote:嘻嘻,July,我觉着devil好像在这里起哄那呀:)I guess this is only fitting for his name:)Devil 的话少有PC的,概因从主观出发?
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :) - Re: 有关计算机语言posted on 03/27/2007
Algorithm development is much more interesting than code development, in my humble opinion, so let's use Matlab! :-)
July wrote:
那我就不写程序了,在咖啡写诗就好了:)
令胡冲 wrote:
程序开发在工业界已经很难成为有档次的技巧和工种了。如果一项技术不需要专业教育就人人可为,它的价值就朝不保昔了。如果每一个普通印度人都能或多或少、或好或快地把这个工作干下来,那在线各位就要反思一下了。:)
- posted on 03/27/2007
July wrote:
一个好的developer知道如何用metadata找 x和y’s position. 几年前,我用JAVA写过一个通用的API。
你可以用 metadata 找 x's position, 这一点你是对的。但 y 方向稍微有一点不同,这里没有 metadata,这里有的是关系数据库的灵魂--关系。你当然可以把关系简化为一个一维列表,然后用一个变量 Y 去搜索,就像你也可以让巴赫去当中学音乐老师一样。这样用关系数据库,让人心疼。
跟人讨论这个问题的时候,按喜欢用这样一个例子:用关系来表示一棵树。这样你至少要用两个指针,一个 left child, 一个 right child 来遍历这棵树,而不是一个 y。然后,你可一试着用关系来表示一个图。再然后,你就会发现,这些数据结构都不过是关系的简单特例。Joe Celko 有几本几本书专门讲这个问题。
就像一个最好的古典钢琴家不一定能演奏爵士乐一样,很多非常好的 developer 不了解关系数据库的一些基本常识。俺以为,EJB 的失败,与此有关。
对不起了,素不相识,一上来就挑刺。俺一看见这个问题,就忍不住。。。 - Re: 有关计算机语言posted on 03/27/2007
rzp wrote:
同意也理解你的说法,看来你工作过的地方不需要一种不做DBA的back-end developer。对于front-end developer,特别是喜欢object-oriented programming的,DBMS的module只是一个object,才不管你里面是怎么捣鼓的呢。
也有 back-end developer, 不知为什么 somehow, they just don't get it。用我们都熟知的例子,俺以为只有少数人,比如做 apache iBatis 和 Microsoft ODBC 的真正懂这个问题,而更多的,比如 EJB, Hibernate, Toplink... 都不懂。 - posted on 03/27/2007
You are right at the point, but IBM never really follows the Dr Codd's suggestion to implement SQL and he left IBM later.
Also, EJB is the same story.
从商业的角度, IBM开发新产品 是要考虑如何保护原有的市场和产品,和如何占领市场。IBM很多产品是很糟糕的。很多时候是将错就错。我以前做IBM,现在做IBM的竞争者。 我们的产品前年赢了IBM,其中包括一种新的Repository语言---RQL. 因为这篇文章是写给大家看的,只是给一个概述罢了。
行人 wrote:
July wrote:你可以用 metadata 找 x's position, 这一点你是对的。但 y 方向稍微有一点不同,这里没有 metadata,这里有的是关系数据库的灵魂--关系。你当然可以把关系简化为一个一维列表,然后用一个变量 Y 去搜索,就像你也可以让巴赫去当中学音乐老师一样。这样用关系数据库,让人心疼。
一个好的developer知道如何用metadata找 x和y’s position. 几年前,我用JAVA写过一个通用的API。
跟人讨论这个问题的时候,按喜欢用这样一个例子:用关系来表示一棵树。这样你至少要用两个指针,一个 left child, 一个 right child 来遍历这棵树,而不是一个 y。然后,你可一试着用关系来表示一个图。再然后,你就会发现,这些数据结构都不过是关系的简单特例。Joe Celko 有几本几本书专门讲这个问题。
就像一个最好的古典钢琴家不一定能演奏爵士乐一样,很多非常好的 developer 不了解关系数据库的一些基本常识。俺以为,EJB 的失败,与此有关。
对不起了,素不相识,一上来就挑刺。俺一看见这个问题,就忍不住。。。 - Re: 有关计算机语言posted on 03/27/2007
浮生 wrote:
devil wrote:嘻嘻,July,我觉着devil好像在这里起哄那呀:)I guess this is only fitting for his name:)Devil 的话少有PC的,概因从主观出发?
Actually I hated Object-oriented approach so I developed a Subject-oriented approach. Ever since things have become so easy, sometimes way too easy. July you wanna give it a try? :)
什么是PC?谁能帮我破解? - Re: 有关计算机语言posted on 03/27/2007
guanzhong wrote:
Algorithm development is much more interesting than code development, in my humble opinion, so let's use Matlab! :-)
搞算法可以看作基础编程吧。 - Re: 有关计算机语言posted on 03/27/2007
Faint...How can I know this?
I'm just reading and learning from you guys...
Object-oriented 没有像样的中文翻译。Aspect-oriented 如何翻?这是有意思的话题,要请马慧元出山。 - posted on 03/28/2007
在当今计算机领域里,主要流行着两类语言:一种称为Object-oriented,翻译成中文好像是:面向对象;另一种称为Procedure,翻译成中文应该是:顺序。
(1)正确的说法应该是“procedural”程序设计语言。而正确的翻译应该是“过程式”语言。
(2)本质上说,所有的“OO”语言都是过程式的。也就是说,通过“过程”告诉计算机如何工作。任何一个算法,都包括三方面的东西:逻辑、控制、数据。传统的“PP”把控制和数据分开,而“OOP”把控制和数据粘合到一起。OOP是早年ADT(抽象数据结构)的延伸。
(3)目前,计算机语言可以被分为三大类:scripting languages, declarative languages 以及imperative languages。
(4)scripting (脚本语言), 如HTML,JavaScript, ASP, Tcl/Tk, CGI等功能较弱,或者用于文本描述,或者进行简单控制,不能算作通用程序设计语言,一般由解释程序执行,用来实现客户、浏览器和服务器之间的交互。
(5)declarative (陈述性语言),如Prolog, Lisp等,该类程序在理论上取消了“控制”,即通过逻辑定义或者规则对算法进行陈述性描述,而该类语言的执行机制自动进行控制。也就是说,我们只要告知计算机“what”,而不必指定“how”。
(6)imperative (命令式)语言,如C/C++, Java, 等等我们熟知的语言,这类语言通过命令(指令)告诉计算机“how”解决一个问题。而体现“how”的,就是“procedure”,“function”,或者“method”。
(7)为什么用OOP取代PP?试想一下,当我们定义一个“int i”的时候,我们知道,i是一个整型变量,我们可以对其施加的操作有“加、减、乘、除、取模”等等。也就是说,传统语言中的基本类型都把“操作”和“数据”粘在一起。可惜,对用户自定义的类型,却无法做到这一点。于是,人们开始研究ADT, 再后来,人们引入了“OO”。
(8)真正的"pure" OO只有SamllTalk。Java和C++依然使用“基本类型”,这样就无法与Object这个概念相适应。其原因很简单,内存/执行的效率问题。为了弥补这个漏洞,Java也允许用户使用Integer Class进行基本类型与Object之间的转换,但是,如果把所有的基本类型变量都定义为Object, 无疑是个灾难。
(9)语言只是一个工具。当我面试学生时,从来不问他们会使用什么语言,只问他们编过多少行程序。我认为,一个成熟的程序设计者,最多两个星期就可以掌握一门语言。而设计出好的算法,却不是件容易的事情。
(10)程序设计究竟是科学还是艺术?众说纷纭。我认为,兼而有之。会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。 - Re: 有关计算机语言posted on 03/28/2007
〉〉〉会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。
既会讲英语的、又会讲中文的、还懂计算机的人也不少,可只有一个独善斋主(男)和一个马慧元(女)。:):):)
老兄弟,您悠着点儿,我不久就会去找您啦! - Re: 有关计算机语言posted on 03/28/2007
尚爷,就等着您哪。 - posted on 03/28/2007
独善斋主 wrote:
(3)目前,计算机语言可以被分为三大类:scripting languages, declarative languages 以及imperative languages。
Hmm, interesting. Scripting languages cannot object oriented?
(7)为什么用OOP取代PP?试想一下,当我们定义一个“int i”的时候,我们知道,i是一个整型变量,我们可以对其施加的操作有“加、减、乘、除、取模”等等。也就是说,传统语言中的基本类型都把“操作”和“数据”粘在一起。可惜,对用户自定义的类型,却无法做到这一点。于是,人们开始研究ADT, 再后来,人们引入了“OO”。
There cannot be polymorphism in non-OO programming langauges?
(8)真正的"pure" OO只有SamllTalk。Java和C++依然使用“基本类型”,这样就无法与Object这个概念相适应。其原因很简单,内存/执行的效率问题。为了弥补这个漏洞,Java也允许用户使用Integer Class进行基本类型与Object之间的转换,但是,如果把所有的基本类型变量都定义为Object, 无疑是个灾难。
How about some other OO langauges, say Ruby?
(9)语言只是一个工具。当我面试学生时,从来不问他们会使用什么语言,只问他们编过多少行程序。我认为,一个成熟的程序设计者,最多两个星期就可以掌握一门语言。而设计出好的算法,却不是件容易的事情。
Is programming the same as algorithm design?
(10)程序设计究竟是科学还是艺术?众说纷纭。我认为,兼而有之。会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。
How many actually read Shakespear? How many appreciate and actually use elegant langauges? If you want to be read, should you write like Shakespear? if you want to push a language, should you make it elegant?
- posted on 03/28/2007
我写这篇文章的目的只是把我这几年工作的一点感想记下来,而绝不是一篇严谨的学术文章,只是希望任何有兴趣的人能读懂,而不是要和搞专业朋友争论。 大家畅所欲言,但也不要戴着有色眼镜。我用的是通俗的分类法而不是学院派的定义。这个世界那末大,何必只有莎士比亚和曹雪芹哪?没有他们,世界一样在发展。SamllTalk再pure,也不如JAVA有能力。OOP根本也不是治世良药。 任何事情都是不断发展的。
一个人可以有自己欣赏的人和事情,但是用不着贬低其他的人。
尚能饭 wrote:
〉〉〉会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。
既会讲英语的、又会讲中文的、还懂计算机的人也不少,可只有一个独善斋主(男)和一个马慧元(女)。:):):)
老兄弟,您悠着点儿,我不久就会去找您啦! - posted on 03/28/2007
对不起,July, 您别误会了。我几乎是电脑盲,只是看到我久违的两位老朋友在这条线上冒泡,跟他们打个招呼,请个安,没有贬低任何人的意思。你们的帖子,我都没细看,也看不懂。
July wrote:
我写这篇文章的目的只是把我这几年工作的一点感想记下来,而绝不是一篇严谨的学术文章,只是希望任何有兴趣的人能读懂,而不是要和搞专业朋友争论。 大家畅所欲言,但也不要戴着有色眼镜。我用的是通俗的分类法而不是学院派的定义。这个世界那末大,何必只有莎士比亚和曹雪芹哪?没有他们,世界一样在发展。SamllTalk再pure,也不如JAVA有能力。OOP根本也不是治世良药。 任何事情都是不断发展的。
一个人可以有自己欣赏的人和事情,但是用不着贬低其他的人。
尚能饭 wrote:
〉〉〉会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。
既会讲英语的、又会讲中文的、还懂计算机的人也不少,可只有一个独善斋主(男)和一个马慧元(女)。:):):)
老兄弟,您悠着点儿,我不久就会去找您啦! - Re: 有关计算机语言posted on 03/28/2007
我不生气,我只是觉得这样说不妥。想必慧元也不会高兴。你也不要介意。
尚能饭 wrote:
对不起,July, 您别误会了。我几乎是电脑盲,只是看到我久违的两位老朋友在这条线上冒泡,跟他们打个招呼,请个安,没有贬低任何人的意思。你们的帖子,我都没细看,也看不懂。
- posted on 03/28/2007
我不会介意。您不了解我,我爱搞笑,连令胡都不跟我一般见识.:)
慧元是我的小妹妹,她不会生我的气,否则我也不会如此冒昧的。
晚安!
July wrote:
我不生气,我只是觉得这样说不妥。想必慧元也不会高兴。你也不要介意。
尚能饭 wrote:
对不起,July, 您别误会了。我几乎是电脑盲,只是看到我久违的两位老朋友在这条线上冒泡,跟他们打个招呼,请个安,没有贬低任何人的意思。你们的帖子,我都没细看,也看不懂。
- posted on 03/28/2007
Is programming the same as algorithm design?
programming is only needed when implementing algorithms, but it not necessary during the design process, which relies on math and the demain knowledge.
搞算法可以看作基础编程吧。
此话怎讲?
一个成熟的程序设计者,最多两个星期就可以掌握一门语言。而设计出好的算法,却不是件容易的事情。
所见略同! :-)
斋主好自在,还有一年,我的都快完了!:-( - posted on 03/28/2007
那我也不和尚GG一般见识.:)
大家接着砸:)
尚能饭 wrote:
我不会介意。您不了解我,我爱搞笑,连令胡都不跟我一般见识.:)
慧元是我的小妹妹,她不会生我的气,否则我也不会如此冒昧的。
晚安!
July wrote:
我不生气,我只是觉得这样说不妥。想必慧元也不会高兴。你也不要介意。
尚能饭 wrote:
对不起,July, 您别误会了。我几乎是电脑盲,只是看到我久违的两位老朋友在这条线上冒泡,跟他们打个招呼,请个安,没有贬低任何人的意思。你们的帖子,我都没细看,也看不懂。
- posted on 03/28/2007
〉Hmm, interesting. Scripting languages cannot object oriented?
你从哪里得到的这种结论?
〉There cannot be polymorphism in non-OO programming langauges?
谁说的?多态实际上就是泛型(generic)。 所谓泛型就是指我们不为特定的类型进行专门编码,而采用对不同类型进行通用编码的方式,无论是数据结果还是算法。我可以用C编写出Generic函数。当然,不如Java/C++方便。
〉How about some other OO langauges, say Ruby?
Ruby介于Scripting和通用语言之间,但大多数研究人员还将其视为Scripting语言。它是pure OO,相仿于Smalltalk。目前,Ruby被炒得很热,但是,它是一种解释执行的语言。按照Matz的说法,他注重的是开发效率,而不是运行效率。
〉Is programming the same as algorithm design?
关中已经做出了回答。谢谢。
〉How many actually read Shakespear? How many appreciate and actually use elegant langauges? If you want to be read, should you write like Shakespear? if you want to push a language, should you make it elegant?
对不起,我看不懂。 - Re: 有关计算机语言posted on 03/28/2007
guanzhong wrote:
搞算法可以看作基础编程吧。此话怎讲?
我把算法和程序全看成完成特定任务的步骤,这样就秦始皇啦。:) - posted on 03/28/2007
独善斋主 wrote:
(9)语言只是一个工具。当我面试学生时,从来不问他们会使用什么语言,只问他们编过多少行程序。我认为,一个成熟的程序设计者,最多两个星期就可以掌握一门语言。而设计出好的算法,却不是件容易的事情。
(10)程序设计究竟是科学还是艺术?众说纷纭。我认为,兼而有之。会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。
Not entirely true. Languages are not just about grammar and syntax, it takes years to build up your vocabulary. I would not expect Shakespeare to be able to speak fluent Chinese in a few weeks. I've seen brilliant C++ programmers wrote lousy Java code. Not because they do not know the syntax, but because they were reinventing the wheel. They spent days to put together a solution only failed to realize there were already a system library that could help them to finish their work in two lines of code. Java SE has a few thousand library classes. It takes a few years to master all of them. - Re: 有关计算机语言posted on 03/28/2007
七月不要跟老尚这样的小朋友生气,天塌下来由我顶着呢。
像我这样写程序比莎士比亚好,写中文比比尔盖茨好,写英文比曹雪芹好,胡说八道比谁都好的鬼都没生气,你急什么?:) - posted on 03/28/2007
I guess you two have different definition for "掌握一门语言". :)
行人 wrote:
独善斋主 wrote:Not entirely true. Languages are not just about grammar and syntax, it takes years to build up your vocabulary. I would not expect Shakespeare to be able to speak fluent Chinese in a few weeks. I've seen brilliant C++ programmers wrote lousy Java code. Not because they do not know the syntax, but because they were reinventing the wheel. They spent days to put together a solution only failed to realize there were already a system library that could help them to finish their work in two lines of code. Java SE has a few thousand library classes. It takes a few years to master all of them.
(9)语言只是一个工具。当我面试学生时,从来不问他们会使用什么语言,只问他们编过多少行程序。我认为,一个成熟的程序设计者,最多两个星期就可以掌握一门语言。而设计出好的算法,却不是件容易的事情。
(10)程序设计究竟是科学还是艺术?众说纷纭。我认为,兼而有之。会讲英语的人很多,可只有一个莎士比亚。会讲中文的人很多,可只有一个曹雪芹。 - posted on 03/28/2007
July wrote:
You are right at the point, but IBM never really follows the Dr Codd's suggestion to implement SQL and he left IBM later.
I'd say Dr. Codd himself should partially take some blames for the problem. His theory is more or less counter intuitive and he is head and shoulder smarter than the average programming community. But he is impatient to educate the developers trying to implement his theory. I remember in one of his public interviews, he used very insulting words to describe the founder of a database company. I trust this kind of behavior is not helpful to promote his theory.
Sorry again for my nitpicking. It just one of those sensitive spots... - Re: 有关计算机语言posted on 03/28/2007
Haaa, 高兴ing !
devil wrote:
七月不要跟老尚这样的小朋友生气,天塌下来由我顶着呢。
像我这样写程序比莎士比亚好,写中文比比尔盖茨好,写英文比曹雪芹好,胡说八道比谁都好的鬼都没生气,你急什么?:) - Re: 有关计算机语言posted on 03/28/2007
独善斋主 wrote:
(7)为什么用OOP取代PP?试想一下,当我们定义一个“int i”的时候,我们知道,i是一个整型变量,我们可以对其施加的操作有“加、减、乘、除、取模”等等。也就是说,传统语言中的基本类型都把“操作”和“数据”粘在一起。可惜,对用户自定义的类型,却无法做到这一点。于是,人们开始研究ADT, 再后来,人们引入了“OO”。
斋好象还是没有回答自己的问题。那么,为什么要把data和operation粘在一起呢?这就是OO吗?:)) - Re: 有关计算机语言posted on 03/28/2007
尚能饭 wrote:我不会介意。您不了解我,我爱搞笑,连令胡都不跟我一般见识.:)
咱两个老夥计,你也没有得罪过我,从何谈起,从何谈起。倒是我老踩你老尚,过意不去。
慧元是我的小妹妹,她不会生我的气,否则我也不会如此冒昧的。
唉,上网这句话兄弟还是看不下去。怎么比陈村都肉麻。:))
- Re: 有关计算机语言posted on 03/28/2007
Devil is so good at flirting. July 不要上当!:)
devil wrote:
七月不要跟老尚这样的小朋友生气,天塌下来由我顶着呢。
像我这样写程序比莎士比亚好,写中文比比尔盖茨好,写英文比曹雪芹好,胡说八道比谁都好的鬼都没生气,你急什么?:) - Re: 有关计算机语言posted on 03/28/2007
有一个问题至今不明白,千年虫当年在全球没有一处造成大的麻烦,是除虫工作做得好呢?还是电脑行业之前过于危言耸听,将y2k可能引发的问题夸大? - posted on 03/28/2007
独善斋主 wrote:
〉Hmm, interesting. Scripting languages cannot object oriented?
你从哪里得到的这种结论?
Ok, if there are three types of langauges, as you said: scripting, declarative, and imperativ, then they must be mutually exclusive, right? You have also said: "本质上说,所有的“OO”语言都是过程式的", which is one of the three types, therefore, it follows that scripting language cannot object oriented (OO).
So again, can a script langauge be OO, then?
〉There cannot be polymorphism in non-OO programming langauges?
谁说的?多态实际上就是泛型(generic)。 所谓泛型就是指我们不为特定的类型进行专门编码,而采用对不同类型进行通用编码的方式,无论是数据结果还是算法。我可以用C编写出Generic函数。当然,不如Java/C++方便。
I thought that you argued the reason why people swich to OO from other languages was its polymorhism. If it can be supported by langauges based on other paradigms, don't we lose the reason for switching to OO?
〉How about some other OO langauges, say Ruby?
Ruby介于Scripting和通用语言之间,但大多数研究人员还将其视为Scripting语言。它是pure OO,相仿于Smalltalk。目前,Ruby被炒得很热,但是,它是一种解释执行的语言。按照Matz的说法,他注重的是开发效率,而不是运行效率。
This answer brings up a question about your taxonomy of programming langauges again. So a scripting langauge can be OO, and therefore imperative. Should we revise the classifications of three types of languages as scripting, imperative, and declarative?
Also, Ruby is simlilar with Smalltalk in that they are both pure OO. Are they different in any some other ways.
〉How many actually read Shakespear? How many appreciate and actually use elegant langauges? If you want to be read, should you write like Shakespear? if you want to push a language, should you make it elegant?
对不起,我看不懂。
ok. there is a saying: when the tune is high, few would follow. I guess conversely, when many are following, the tune must be low.
Given the large following of OO languages such as C++, Java, and C#, can they be really good then?
If not, what are those good langauges, and paradigms, that few are using? Where can we read Shakespear in this field, and learn to speak like him?
- Re: 有关计算机语言posted on 03/28/2007
上上当也没关系:)连浮式德博士都把灵魂抵押给魔鬼了:)
lost wrote:
Devil is so good at flirting. July 不要上当!:)
devil wrote:
七月不要跟老尚这样的小朋友生气,天塌下来由我顶着呢。
像我这样写程序比莎士比亚好,写中文比比尔盖茨好,写英文比曹雪芹好,胡说八道比谁都好的鬼都没生气,你急什么?:) - Re: 有关计算机语言posted on 03/29/2007
请问, UNIX 的内核是用什么语言写的? LINUX 呢? 还有WINDOW XP 的内核又是用什么写的? 那些DEVCE DRIVERS 又是用什么写的?最后,FIRMWARE、BIOS又如何? - posted on 03/29/2007
The first version of UNIX was written in assembly language.
The most of the code (71%) of Linux was written in the C programming language, but many other languages were used, including C++, Lisp, assembly language, Perl, Fortran, Python and various shell scripting languages.
一般说来,可以用任何语言写操作系统。 C大概是用的最广泛的。
请问, UNIX 的内核是用什么语言写的? LINUX 呢? 还有>WINDOW XP 的内核又是用什么写的? 那些DEVCE >DRIVERS 又是用什么写的?最后,FIRMWARE、BIOS又如何? - posted on 03/29/2007
一般说来,可以用任何语言写操作系统。
这个说法不全面。
你可以用任何语言来模拟操作系统,但不能用任何语言来写操作系统。尤其是系统内核,必须用“系统程序设计语言”,如C,或者汇编来编写。
举一个例子,Java的Bytecode必须运行在JVM之上,而JVM是操作系统中的一个进程。如果用Java写操作系统,则这个“操作系统”是运行在另一个操作系统之上的操作系统。
更一般化,凡是用解释程序执行的语言(scripting language),如Ruby,凡是由虚机器执行的语言,如Java,都不能书写操作系统。
确切地说,imperative和declarative有比较明确的定义,而Scripting的定义比较模糊。早期,专指web设计中的一些脚本语言,功能较弱。而随着语言的进化,其功能却来越强,如Ruby,Python等。而且,有些语言采用Hybrid方案,将imperative和declarative揉合到一起,在一个过程式语言中加入陈述性子集。
计算机语言的问题,可以写一本书,不是三言两语就能说清楚的。
- posted on 03/29/2007
〉〉斋好象还是没有回答自己的问题。那么,为什么要把data和operation粘在一起呢?这就是OO吗?:))
为什么?易读,易懂,易防止出错,方便程序设计。这是OO最关键的一点,虽然不止这一点。
令胡冲 = new person(...)
于是,你就成了一个Object,我可以invoke粘在你身上的操作:
令胡冲.age(), 令胡冲.address(), 令胡冲.married(),...
我还可以,
任盈盈= new person(...)
if (!令胡冲.married())
X = new married_couple(令胡冲,任盈盈)
else
???
- posted on 03/29/2007
这段程序还挺不简单的呢,中文变量,对编译器还真是个不小的挑战呢。Unicode OO compiler? 这就是为什么编译原理要当专业基础课来开呢。
Object的根本跟声明与操作没有太大关系。“粘”在一起从coding的角度讲,好象也没有带来太大好处。C++仍然可以轻易地把objects弄成一堆你中有我、我中有你的乱麻。
OO在工业界的好处好象还是design方面的,而不是coding。Problem Domain 的东西可以靠抽象的概念类表达(世间概念用OO的抽象和建模),Solution Domain可以用建立在成形design patterns上的软件类表达(软件概念重新表达的抽象和建模)。两个Domain,两个世界,之间的mapping思维方式和表达水平,是architect成败的关键。工业实践中,感觉适度的OO还是满不错的。过度的继承、多态性,试图使自己的世纪re-usable, extensible, expandable, future-proof, 只能适得其反。
具体项目实践中,感觉OOD最多只能用到Module或sub-system的程度。过度使用,维护升级的费用就成指数增长,项目没钱可赚了。所以工业界的好设计师,是能帮人把项目life cycle大致花费各阶段都基本能算清的人。很少有这样的人。一般lead solution architect,实践中只能大致算一下设计与开发阶段的成本,还只是两个elaboration之内的。软件工程应该跟经济和会计学结合起来。不知道这方面有哪位有跟好的信息,best practice? - Re: 有关计算机语言posted on 03/29/2007
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
- Re: 有关计算机语言posted on 03/29/2007
哎,这老尚现在说话、做事还没有长进,我爱莫能助啊!:))
devil wrote:
七月不要跟老尚这样的小朋友生气,天塌下来由我顶着呢。
像我这样写程序比莎士比亚好,写中文比比尔盖茨好,写英文比曹雪芹好,胡说八道比谁都好的鬼都没生气,你急什么?:) - Re: 有关计算机语言posted on 03/29/2007
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
- Re: 有关计算机语言posted on 03/29/2007
哈,这个问题解决了,我们就可以用OOP写金庸了:)
令胡冲 wrote:
这段程序还挺不简单的呢,中文变量,对编译器还真是个不小的挑战呢。Unicode OO compiler? 这就是为什么编译原理要当专业基础课来开呢。
- posted on 03/29/2007
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
:) guess it's the common "loose coupled" concept, one basic attr of SOA. Has little to do with OO.
I wish here we could get some academic people giving us some fancy new ideas and inspirations..
As for the technology and daily practice in software engineering, the industry leads the academic world just too much. That's is special for IT. - Re: 有关计算机语言posted on 03/29/2007
loosely coupled - posted on 03/29/2007
July wrote:
哈,这个问题解决了,我们就可以用OOP写金庸了:)
好主意!
public class 张无忌 extends 殷素素 implements 张翠山,谢逊 {
private 九阳神功 _jiuYang;
private final static 张无忌 _self = new 张无忌();
private 张无忌() {
_forceJiuYang = new 九阳神功();
};
public static 张无忌 出场() { return _self; };
public void 疗伤( 人物 person ) {
if ( isFriend( person ) {
_jiuYang.cure( person );
}
else if( isEnemy( person ) ) {
strike( person );
}
else {
// TODO: enhance in next release;
log.info( "Asked to cure unknown person: " + person.name() );
}
}
} - Re: 有关计算机语言posted on 03/29/2007
Doesn't throw exceptions, nor catch exceptions? quite a singular one. :) - Re: 有关计算机语言posted on 03/29/2007
There is no exception in a perfect world, like our communist tomorrow :)
BTW, I believe the idea of OO originated from Descartes' pholosophy. Which OO is the way we perceive the world. - posted on 03/29/2007
Perhaps 插上一句 tried to imply that C as well as C++ have accomplished more than any languages else have, therefore C/C++ is superior to other lanagauges.
I know most posters here including the creator of this thread July are talking about programming languages from a software engineer's perspective. From practical application perspective it is very hard to say which language is better because there are many reasons, some of them even beyond of language itself (business).
But, from programming language principles I think it is much easier to say which language is superior, which is not. A well-designed programming language should strictly base on sound syntax and semantics principles. Under those principles, it is easy to see Java is much better and more elegant than C++. (Also from these principles, we can clearly see Java is still not a true OO language.)
For example, the semantics principles tell us a good programming language should have type system to make the language safe. C is a typed language, but not very safe. C++ is strong typed language, safer than C, but its rules on data type are still loose. Java is a stronger typed language, much safer than C++.
Another example, a well designed program language should stand firm on this principle: L-value should strictly be reference of location and R value should be the value in that location. C, because of its pointer, obviously violates the principle. Its result, as we know, flexible (even powerful sometimes), but messy, error prone and not elegant.
C++ still have “pass by reference” which really comes from lousy semantic principles.
Java is neater and more elegant than C/C++.
Just my 2 cent. I have no practical experiences in those languages. I just feel if we really want to compare languages, we have to go back to fundamental, back to textbook. Otherwise, every language is a good language because each language community always thinks their language better than others.
July wrote:
The first version of UNIX was written in assembly language.
The most of the code (71%) of Linux was written in the C programming language, but many other languages were used, including C++, Lisp, assembly language, Perl, Fortran, Python and various shell scripting languages.
一般说来,可以用任何语言写操作系统。 C大概是用的最广泛的。
请问, UNIX 的内核是用什么语言写的? LINUX 呢? 还有>WINDOW XP 的内核又是用什么写的? 那些DEVCE >DRIVERS 又是用什么写的?最后,FIRMWARE、BIOS又如何? - posted on 03/29/2007
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
在OO中, 被定义的 each Object 是一个实体, 它包含了 The Object 所有相关的信息. 在网络世界里, 不同的人运用不同的机器和不同的软件都可以获取 The Object 来做自己相关的事
例如在DNA领域, 用OO定义一个 Jenome Object, 那么, 在网络世界里, 不同的人运用不同的机器和不同的软件都可以索取 The Object 来做自己相关的事
- posted on 03/29/2007
j. wrote:
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
在OO中, 被定义的 each Object 是一个实体, 它包含了 The Object 所有相关的信息. 在网络世界里, 不同的人运用不同的机器和不同的软件都可以获取 The Object 来做自己相关的事
例如在DNA领域, 用OO定义一个 Jenome Object, 那么, 在网络世界里, 不同的人运用不同的机器和不同的软件都可以索取 The Object 来做自己相关的事, 同时也可把自己的对这一 Jenome Object 的新加内容, 例如新的研究成果, 放入这一 Jenome Object, 然后传送进网络世界
- Re: 有关计算机语言posted on 03/29/2007
哈哈,我也曾经用OO写过金庸的电脑游戏呢。当年最流行的中文网络游戏(MUD)侠客行好象就是用OO写的。我对计算机一知半解,跟着学用OO,编了好多金庸故事出来,好玩极了。
- posted on 03/29/2007
你说的跟OO没有关系, 在网络世界里, 不同的机器和不同的软件获取 The Object(or services) 来做自己相关的事, 更重要的是 Objects 之间协议, 有很多的标准out there.
j. wrote:
j. wrote:在OO中, 被定义的 each Object 是一个实体, 它包含了 The Object 所有相关的信息. 在网络世界里, 不同的人运用不同的机器和不同的软件都可以获取 The Object 来做自己相关的事
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
例如在DNA领域, 用OO定义一个 Jenome Object, 那么, 在网络世界里, 不同的人运用不同的机器和不同的软件都可以索取 The Object 来做自己相关的事, 同时也可把自己的对这一 Jenome Object 的新加内容, 例如新的研究成果, 放入这一 Jenome Object, 然后传送进网络世界
- Re: 有关计算机语言posted on 03/29/2007
行人 wrote:
BTW, I believe the idea of OO originated from Descartes' pholosophy. Which OO is the way we perceive the world.
这个可不可以帮忙再稀释一下? - posted on 03/30/2007
俺谈地不是程序员运用 OO 程序设计的 level, 而是计算机进入网络时代后, 计算机软件创造出 OO 适应网络发展这一 level.
LM wrote:
你说的跟OO没有关系, 在网络世界里, 不同的机器和不同的软件获取 The Object(or services) 来做自己相关的事, 更重要的是 Objects 之间协议, 有很多的标准out there.
j. wrote:
j. wrote:在OO中, 被定义的 each Object 是一个实体, 它包含了 The Object 所有相关的信息. 在网络世界里, 不同的人运用不同的机器和不同的软件都可以获取 The Object 来做自己相关的事
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
例如在DNA领域, 用OO定义一个 Jenome Object, 那么, 在网络世界里, 不同的人运用不同的机器和不同的软件都可以索取 The Object 来做自己相关的事, 同时也可把自己的对这一 Jenome Object 的新加内容, 例如新的研究成果, 放入这一 Jenome Object, 然后传送进网络世界
- posted on 03/30/2007
OOD, OOP are not for internet, or network, for the sake of objects 相互传递信息, it is not called OO any more, we call it Service Oriented, the most popular tech today, we call it SOA(SOAP, XML, WSDL, .....).
j. wrote:
俺谈地不是程序员运用 OO 程序设计的 level, 而是计算机进入网络时代后, 计算机软件创造出 OO 适应网络发展这一 level.
LM wrote:
你说的跟OO没有关系, 在网络世界里, 不同的机器和不同的软件获取 The Object(or services) 来做自己相关的事, 更重要的是 Objects 之间协议, 有很多的标准out there.
j. wrote:
j. wrote:在OO中, 被定义的 each Object 是一个实体, 它包含了 The Object 所有相关的信息. 在网络世界里, 不同的人运用不同的机器和不同的软件都可以获取 The Object 来做自己相关的事
LM wrote:
?
j. wrote:
设计OO的主要目的是为了便利于网络的不同机器, 机型, 不同软件, 不同的程序... 相互信息的传递
例如在DNA领域, 用OO定义一个 Jenome Object, 那么, 在网络世界里, 不同的人运用不同的机器和不同的软件都可以索取 The Object 来做自己相关的事, 同时也可把自己的对这一 Jenome Object 的新加内容, 例如新的研究成果, 放入这一 Jenome Object, 然后传送进网络世界
- posted on 03/30/2007
那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。 - posted on 03/30/2007
I am so happy you were not my 教授 :) Otherwise, I won't have my degree :)
Maybe he didn't think that way, just needed an answer to let me pass :)
Yes, it is a very hard question, indeed, but I think loop is a very powerful concept in general. This is why I put my answer here and want to know other people's idea.
But now you can be mayacafe's 程序语言教授. Thanks so much for such wonderful input.
独善斋主 wrote:
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。 - Re: 有关计算机语言posted on 03/30/2007
I am so happy you were not my 教授 :) Otherwise, I won't have my degree :)
Even if I were your prof, I would let you pass. I am a nice guy. - Re: 有关计算机语言posted on 03/30/2007
你是教算法语言的吗?我念书时选了一些Formal Language 的课,比如,Z语言。。。我很想知道你对这方面的看法。
独善斋主 wrote:
Even if I were your prof, I would let you pass. I am a nice guy.I am so happy you were not my 教授 :) Otherwise, I won't have my degree :) - posted on 03/30/2007
这个问题要教授回答,我答不了:)
st dude wrote:
Perhaps 插上一句 tried to imply that C as well as C++ have accomplished more than any languages else have, therefore C/C++ is superior to other lanagauges.
I know most posters here including the creator of this thread July are talking about programming languages from a software engineer's perspective. From practical application perspective it is very hard to say which language is better because there are many reasons, some of them even beyond of language itself (business).
But, from programming language principles I think it is much easier to say which language is superior, which is not. A well-designed programming language should strictly base on sound syntax and semantics principles. Under those principles, it is easy to see Java is much better and more elegant than C++. (Also from these principles, we can clearly see Java is still not a true OO language.)
For example, the semantics principles tell us a good programming language should have type system to make the language safe. C is a typed language, but not very safe. C++ is strong typed language, safer than C, but its rules on data type are still loose. Java is a stronger typed language, much safer than C++.
Another example, a well designed program language should stand firm on this principle: L-value should strictly be reference of location and R value should be the value in that location. C, because of its pointer, obviously violates the principle. Its result, as we know, flexible (even powerful sometimes), but messy, error prone and not elegant.
C++ still have “pass by reference” which really comes from lousy semantic principles.
Java is neater and more elegant than C/C++.
Just my 2 cent. I have no practical experiences in those languages. I just feel if we really want to compare languages, we have to go back to fundamental, back to textbook. Otherwise, every language is a good language because each language community always thinks their language better than others.
July wrote:
The first version of UNIX was written in assembly language.
The most of the code (71%) of Linux was written in the C programming language, but many other languages were used, including C++, Lisp, assembly language, Perl, Fortran, Python and various shell scripting languages.
一般说来,可以用任何语言写操作系统。 C大概是用的最广泛的。
请问, UNIX 的内核是用什么语言写的? LINUX 呢? 还有>WINDOW XP 的内核又是用什么写的? 那些DEVCE >DRIVERS 又是用什么写的?最后,FIRMWARE、BIOS又如何? - Re: 有关计算机语言posted on 03/30/2007
独善斋主 wrote:......把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。
正是这话,我前面也提到过。“递归”(recursion) 才是王冠上的明珠啊!:-) - Re: 有关计算机语言posted on 03/30/2007
管仲好。你小子的好日子快完了吧?我还没开始呢。目前的度假,算是开小差。这学期没课,就开溜了。
你说得没错,递归具备数学的美感。
July,我教过各种算法语言,Fortran、Java、C、C++、Prolog、Lisp...,教过编译系统,教过OO方法学。自己曾写过操作系统、C++的编译,研究过JVM。目前正在实现移动软件代理(Mobile Agent)的服务器,已经完成Prolog的虚机器,下一个候选语言是Ruby或C#。 - Re: 有关计算机语言posted on 03/30/2007
还差好几个月呢,就已经开始觉得 monday blue 了!你就别馋我了吧!
在南京吗?您慢慢玩着!:-)
独善斋主 wrote:
管仲好。你小子的好日子快完了吧?我还没开始呢。目前的度假,算是开小差。这学期没课,就开溜了。
你说得没错,递归具备数学的美感。
- posted on 03/30/2007
让我来试着回答一下。
〉〉But, from programming language principles I think it is much easier to say which language is superior, which is not. A well-designed programming language should strictly base on sound syntax and semantics principles. Under those principles, it is easy to see Java is much better and more elegant than C++. (Also from these principles, we can clearly see Java is still not a true OO language.)
superior这个词含义模糊。首先要搞清楚,如果我们谈的是“Computation Power”,这些语言属于同一类。如果我们说的是方便设计,则不同的程序设计者可能有不同的偏爱,很难说哪个语言更好。例如,喜欢JAVA的说JAVA好,但Java的执行效率比C++慢上十倍都不止。
For example, the semantics principles tell us a good programming language should have type system to make the language safe. C is a typed language, but not very safe. C++ is strong typed language, safer than C, but its rules on data type are still loose. Java is a stronger typed language, much safer than C++.
这段话也有点毛病。当你谈到Safer, 并不是和Type有关。而是和内存管理相关。C/C++允许程序员自行管理HEAP,把Pointer交到程序员手里,玩得好,没毛病,玩得不好,Segmentation Error。JAVA的Type和C++几乎一样,既有基本类型,如Int, Float, 也有用户定义的类型,如各种Class。然而,JAVA不允许用户管理HEAP,所花的代价就是系统需要进行垃圾收集。目前还没有一个理想的垃圾收集算法。有一个科研项目,设计JAVA服务器,在一次Benchmark试验时,服务器停顿了半个小时,人们以为发生了问题,经过检测,才发现它在作垃圾收集。
真正OO采用Dynamic Type,(而不像C/C++/Java那样采用静态类型)。简言之,在C/C++/Java中,所有变量都具备类型,可以在编译时检查出类型错误;而在PureOO中,如Smalltalk/Ruby, 变量自身只是无类型的Reference, 有关类型的信息与数据放在一起,只有在执行的时候才对类型进行鉴别和检查。目前,实现Pure OO的主要问题是执行效率和内存管理。
C++ still have “pass by reference” which really comes from lousy semantic principles.
Java is neater and more elegant than C/C++.
怎么说?C++ still have “pass by reference”?如果你的这个still 指的是它像C一样,就完全错了。In C, and consequentially in C++, all parameters, are by default, passed by value!
- Re: 有关计算机语言posted on 03/30/2007
阿姗 wrote:
哈哈,我也曾经用OO写过金庸的电脑游戏呢。当年最流行的中文网络游戏(MUD)侠客行好象就是用OO写的。我对计算机一知半解,跟着学用OO,编了好多金庸故事出来,好玩极了。
呵呵,你在侠客行里是不是叫小珊?我也上去过,但时间很短,估计你不认识我。我申请做过巫师,有一阵,所有巫师都联到我办公室的机器上作开发。后来发现看了源程序再回过头来玩,一点意思都没有了,就退出了。 - posted on 03/30/2007
devil wrote:
行人 wrote:这个可不可以帮忙再稀释一下?
BTW, I believe the idea of OO originated from Descartes' pholosophy. Which OO is the way we perceive the world.
这个题目太大了,应该请教授来讲。就我能记得的,大概说一下,不对的欢迎砸砖头。
从思想源流来看,最先受笛卡尔影响是那帮搞 cognitive science 的。他们研究的问题(mind-body problem)以及解决问题的思路主要是继承了笛卡尔。早期做 OO 的那些人,多对 cognitive science 很熟,比如 Grandy Booch。他们的文章和书里引用很多 cognitive science 的论文。
从内容上来看,很多 OO 的核心内容,比如 abstraction, attribute, 都可以溯源到笛卡尔。
- posted on 03/30/2007
Could you give some examples of programming languages based on logic, and some based on algebra?
Does this also mean any programming languages with the notion of loop is not based on logic, or algebra?
Also, what is the relationship between loop and recursion? Are they two totally different things, or the same thing in different forms?
独善斋主 wrote:
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。 - posted on 03/30/2007
Good post, 独善斋主.
Can smalltalk/ruby “pass by object”? I am assuming smalltalk and ruby allow parameter passing when I ask this question.
superior这个词含义模糊。首先要搞清楚,如果我们谈的是“Computation Power”,这些语言属于同一类。如果我们说的是方便设计,则不同的程序设计者可能有不同的偏爱,很难说哪个语言更好。
Here I tended to treat programming language as Linguistics when I atempted to compaire programming languages, just as if I were comapring English with Chinese, French with Spanish. “superior”, “elegant”, “neat”… these terms come from this aspect. I also pretend to be unaware of some important practical issues such as execution/running efficency and hardware environment…. they make comparison too diffcult to make.
Our disscussion here brought another issue on the subject of programming language comaprison: I think high level language is beter than low level language, and the higher, the better. “Hight” of level can be measured by those criterion, for example, how easy, neat and clear abstract layers are constructed within this programming lanagauge capability.
这段话也有点毛病。当你谈到Safer, 并不是和Type有关。而是和内存管理相关。C/C++允许程序员自行管理HEAP,把Pointer交到程序员手里,玩得好,没毛病,玩得不好,Segmentation Error。
What you said here is also right, I didn’t make it very clear, but what I tried to say is safe in C/C++ has something to do with human being, C/C++ programmers need extra effort to make its program safe, but in Java, compiler doesnt allow you make error on this issue, therefore your program is always right at type casting.
Let’s suppose there are 2 really good programers, they are good but they are too bookworm-like to have any common sense. One is C/C++ programmer and another is Java. C/C++ programmer can make such kind program “ a tiger is a dog”, but java program will never make such a program.
怎么说?C++ still have “pass by reference”?如果你的这个still 指的是它像C一样,就完全错了。In C, and consequentially in C++, all parameters, are by default, passed by value!
"pass by reference" is always not a pretty thing even it is in C++. Also, you can avoid pass by reference in C++, but again you have to make extra effort do that, I guess.
The bottom line is, a really good C/C++ programmer must be a good java programmer, a really good java programmer may not be a really good C/C++ programmer. The level of java is higher than C/C++. I heard that most C/C++ programmers actually just use part or subset of C/C++. But I dont deny the fact that there are some masters of C/C++.
How do you like my radical analogy, 独善斋主?
C/C++ is like chinese, rich in library and legacy, deep, complicated and unpredicble; Java is like English. easy, disciplined and neat.
独善斋主 wrote:
让我来试着回答一下。 - Re: 有关计算机语言posted on 03/31/2007
遗憾的是我。。。。。因为我是脑盲。。。。。 - Re: 有关计算机语言posted on 03/31/2007
st dude wrote:Not sure wheather language professionals, if any here, actually agree on this for Chinese vs. English.
chinese, rich in library and legacy, deep, complicated and unpredicble; English is easy, disciplined and neat.
Supposedly one who acquired ~3000 Chinese words will be able to read Chinese literature, while ~10 times of vocabulary size is needed for one to read even magazines & newspapers like TIMES, Washington Posts, etc. - posted on 03/31/2007
我觉得中文的三千字不能全面准确地说明问题. 第一,中文的一个字不起太大作用. 重要的是词. 当你阅读中文时, 有意义的是词. 所以3千中文字只是第一步, 你还要掌握这三千字的组合才能阅读. 而这个组合的数量太大了. 你单独知道一个人字, 一个名字, 一个民字, 一个才字, 一个工字, 一个道字还远远不够, 你还要学会他们的组合才有意义: 人名(name), 人民(people), 人才(talent), 人工(artifical), 人道(humanity). 再加上中文的单独的词性不明确(同一词可作动词, 名词,形容次...), 你必须要在整个句子中掌握它. 所以, 当你掌握了这些三千字的组合后,你可以阅读了. 你回过头来说,你只需要学三千中文字就可以阅读, 其实你掩盖了你的整个学习组合(词)的过程和组合(词)的数量.
从实际的观察和体验, 我发现普通的老美,小学三年纪就可以阅读报纸, 但是我知道很多国人包括我本人三年级时肯定不能阅读报纸.
rzp wrote:
st dude wrote:Not sure wheather language professionals, if any here, actually agree on this for Chinese vs. English.
chinese, rich in library and legacy, deep, complicated and unpredicble; English is easy, disciplined and neat.
Supposedly one who acquired ~3000 Chinese words will be able to read Chinese literature, while ~10 times of vocabulary size is needed for one to read even magazines & newspapers like TIMES, Washington Posts, etc. - posted on 04/01/2007
好像以前这有篇有关的文章:
汉语的用字非常俭省。联合国用五种文字印制文件,中文本一定是其中最薄的。中国扫盲标准是认一千五百个字。一个中学生掌握两千多字,读四大古典文学名著不成问题。一个人若是不记住三万英语单词,《时代》周刊就读不顺,更不要说去读文学作品了。
汉语的长处是可以以字组词,创造一个新概念,一般不用创造新字。“激光”,台湾译成“镭射”,就是旧字组新词。“基因”,“基”本的“因”,也是旧字组新词,对于英文gene来说,既是音译又是意译,译得非常好,小学生也可猜个大意。英语当然也能以旧组新,high-tech ,high-way,就是这样的。但是比较而言,汉语以旧字组新词的能力非常强,为很多其它语种所不及,构成了一种独特优势。
西语基本上都是表音文字。但汉语至今是表意文字。这种表意文字的好处,是人们不一定一见就能开口,但一见就能明白。所谓“望文生义”。在美国,你要一般老百姓说出“四环素”、“变阻器”、“碳酸钙”、“肾结石”、“七边形”,是强人所难,很多词语只是专家才能说的出来的专家词语。
http://www.mayacafe.com/forum/topic1.php3?tkey=1116433662
- posted on 10/02/2007
我今天在搞JAVA的Recursion, 还是要用loop 来实现Recursion。
独善斋主 wrote:
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。 - posted on 10/02/2007
Recursion is also closely related to the Chaos Theory. If you compute the values of the following two simple equations recursively and plot them out. You will be pleasantly surprised.
A) Y = x^2 -1
B) Y = x^2 - 0.1
July wrote:
我今天在搞JAVA的Recursion, 还是要用loop 来实现Recursion。
独善斋主 wrote:
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。 - posted on 10/02/2007
......
Fengzi wrote:
Recursion is also closely related to the Chaos Theory. If you compute the values of the following two simple equations recursively and plot them out. You will be pleasantly surprised.
A) Y = x^2 -1
B) Y = x^2 - 0.1
July wrote:
我今天在搞JAVA的Recursion, 还是要用loop 来实现Recursion。
独善斋主 wrote:
我和系里的几个教授也讨论了这个问题,觉得你那位教授的问题很难回答,把“循环”作为程序语言中最有能力的元素,肯定是一个难以服人的答案,因为在许多基于逻辑、基于代数的程序设计语言中,根本没有“循环”这个概念,只有“递归”。那一年,在我的硕士论文答辩会上,最后,一个一直不作声的教授说:“我只有两个问题,答对了,我让你过,不对,你就不配得这个学位”。我当时吓得脸都黄了。他的第一个问题是:程序语言里最有能力的元素是什麽?(In general, what is the most powerful element in programming languages?) 我想了想,说:“Loop”(循环), 他点点头,说这就是为什麽要有计算机,因为可以为人类做重复而精确的劳动。
Please paste HTML code and press Enter.
- July
- #1 July
- #2 rzp
- #3 LM
- #4 July
- #5 浮生
- #6 LM
- #7 LM
- #8 guanzhong
- #9 guanzhong
- #10 devil
- #11 LM
- #12 st dude
- #13 wukong
- #14 LM
- #15 LM
- #16 devil
- #17 st dude
- #18 guanzhong
- #19 July
- #20 令胡冲
- #21 LM
- #22 LM
- #23 LM
- #24 rzp
- #25 行人
- #26 devil
- #27 LM
- #28 rzp
- #29 July
- #30 July
- #31 July
- #32 July
- #33 July
- #34 July
- #35 浮生
- #36 July
- #37 guanzhong
- #38 行人
- #39 行人
- #40 July
- #41 devil
- #42 devil
- #43 马慧元
- #44 独善斋主
- #45 尚能饭
- #46 独善斋主
- #47 ym
- #48 July
- #49 尚能饭
- #50 July
- #51 尚能饭
- #52 guanzhong
- #53 July
- #54 独善斋主
- #55 devil
- #56 行人
- #57 devil
- #58 LM
- #59 行人
- #60 July
- #61 令胡冲
- #62 令胡冲
- #63 lost
- #64 feiming
- #65 ym
- #66 July
- #67 插上一句
- #68 July
- #69 独善斋主
- #70 独善斋主
- #71 令胡冲
- #72 j.
- #73 为力
- #74 LM
- #75 July
- #76 令胡冲
- #77 令胡冲
- #78 行人
- #79 令胡冲
- #80 行人
- #81 st dude
- #82 j.
- #83 j.
- #84 阿姗
- #85 LM
- #86 devil
- #87 j.
- #88 LM
- #89 独善斋主
- #90 July
- #91 独善斋主
- #92 July
- #93 July
- #94 guanzhong
- #95 独善斋主
- #96 guanzhong
- #97 独善斋主
- #98 行人
- #99 行人
- #100 Wu Wei
- #101 st dude
- #102 qq2912
- #103 rzp
- #104 st dude
- #105 rzp
- #106 July
- #107 Fengzi
- #108 rzp
(c) 2010 Maya Chilam Foundation