返回信息流☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sat May 3 10:50:26 2008) 提到:
看了几遍TIJ,突然觉得,java有时候过于细分类。
随便举个例子,就像IO那一块,各种类,如果想要指定的一个数据流,可能需要用到太多的类组合包装。
这个直接就把人给搞晕了。
人的认知本性是有一个比较小的认知集,然后在已知的基础上不断外延。java有一些实现,从一开始就需要大量的细节了解,才能较好地运用一个功能,这种特性导致学习曲线变陡。
编写代码的交流关键是,所有参与的人,包括使用者、编写者、阅读者对交互的接口规定有清楚的了解。java将所有的需求包装成不同的类,其实是在语言层面给出了一些应用领域的接口规定,而不需要我们自己再去制定规则。这样当然有好处,但是也就将java语言本身复杂化了。
也许java的初衷就不仅仅是一个语言吧……
☆─────────────────────────────────────☆
zooloo (zj) 于 (Sat May 3 12:11:01 2008) 提到:
如果要面向对象,就必须付出这种代价
☆─────────────────────────────────────☆
SturdyEagle (计忆邮心|眉鹰LoveIBM) 于 (Sat May 3 12:18:22 2008) 提到:
所以学Java也是一个学面向对象的过程
慢慢地 不由自主的就有了那样的思维
写C++和Java时考虑问题的角度都会不一样
☆─────────────────────────────────────☆
hokkien (我脱,我脱,我脱脱脱!) 于 (Sat May 3 15:07:51 2008) 提到:
说实话,其实我不太喜欢JAVA,但因为就业好象还比较喜欢,所以就学了
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sat May 3 17:43:43 2008) 提到:
【 在 SturdyEagle 的大作中提到: 】
: 所以学Java也是一个学面向对象的过程
: 慢慢地 不由自主的就有了那样的思维
: 写C++和Java时考虑问题的角度都会不一样
嗯嗯,其实学Java也是一个学习设计模式的过程,比如lz提到的IO stream那块,我没记错的话,它用的就是装饰模式。
C++更多的是在考虑运行效率,而Java则强调开发效率。极端的说,Java可以做的C++都可以做,而且C++具有极其良好的拓展性和弹性,但是这个也意味着如果你要用C++做一个和用Java开发的一样功能的框架,有太多太多的东西你都得DIY。反过来说,设计Java的初衷快速开发则是C++所无法比拟的,Java毕竟为用户定制和封装了太多的东西,构造起一个近乎纯粹的OO世界。
为什么Java会演变到今天这种“重量级”的状况,因为它想要把天上飞的,地上跑的,水里游的都一网打尽,一个个都给捏成OO的形状,用户能想到的它都有,想不到的它也有。而像现在一些很流行的动态语言,脚本语言比起Java则轻便多了,在Java里面可能需要几十行代码才能解决的问题,用它们只需要几行就完了。因为它们一开始就是针对某些方面来设计的,而且类型系统通常也比C类语言要简单得多,所以它们的开发比java通常又要更为敏捷。这也是现在的企业级应用,分布式应用通常是几门语言一块上的主要原因。
其实我觉得Java已经把OO的能力发挥到了一个极限,而且生产力的提高也是有目共睹的,但是在OO之后呢,我们又将走向何方?当然世界绝对不是OO的,量子力学告诉我们,世界是波粒二象性的。。。。。
☆─────────────────────────────────────☆
NWN2 (Neverwinter Nights 2) 于 (Sat May 3 18:28:23 2008) 提到:
使用泛型吧
当然不是java和c#的template
【 在 UnitTest (TDD) 的大作中提到: 】
: 嗯嗯,其实学Java也是一个学习设计模式的过程,比如lz提到的IO stream那块,我没记错的话,它用的就是装饰模式。
: C++更多的是在考虑运行效率,而Java则强调开发效率。极端的说,Java可以做的C++都可以做,而且C++具有极其良好的拓展性和弹性,但是这个也意味着如果你要用C++做一个和用Java开发的一样功能的框架,有太多太多的东西你都得DIY。反过来说,设计Java的初衷快速开发则�
: 为什么Java会演变到今天这种“重量级”的状况,因为它想要把天上飞的,地上跑的,水里游的都一网打尽,一个个都给捏成OO的形状,用户能想到的它都有,想不到的它也有。而像现在一些很流行的动态语言,脚本语言比起Java则轻便多了,在Java里面可能需要几十行代码才�
: ...................
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sat May 3 18:47:34 2008) 提到:
世界是波粒二象性的,这个牛B……
我对什么什么是纯粹的这样的东西,一直觉得是有些不妥的。
没有一样东西是纯粹的,包括OO,它应该是一种数据封装的特性,但不应该是数据封装的全部。
没有一种解决方案是适用于所有的问题域的,更何况java本身就存在基本类型,虽然有基本类型的包装器,但是仍然不能说是纯粹的OO。
不过从解决问题的实践来说,java确实是希望把OO最大化。
现在有些不解,从一个语言的角度来说,这样的代价会不会太大。
☆─────────────────────────────────────☆
SturdyEagle (计忆邮心|眉鹰LoveIBM) 于 (Sat May 3 18:50:44 2008) 提到:
还好吧
反正它也有了很多很好的应用了
这个语言学习起来也不是那么困难,当然有个很重要的原因是Eclipse这个美轮美奂的工具。
而其他的脚本语言甚至C++都没有一个太好的IDE
【 在 ericyosho 的大作中提到: 】
: 世界是波粒二象性的,这个牛B……
: 我对什么什么是纯粹的这样的东西,一直觉得是有些不妥的。
: 没有一样东西是纯粹的,包括OO,它应该是一种数据封装的特性,但不应该是数据封装的全部。
: ...................
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sat May 3 19:08:26 2008) 提到:
“……已经有了很多很好的应用……”
觉得这个分析还是蛮对的,有了那么多资源,你是舍不得扔掉的。
其实许多老的语言,像fortran,一直在一些专业的领域比较有活力,也是因为,已经有了许多比较好用的函数库和使用基础。
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sat May 3 19:38:12 2008) 提到:
【 在 NWN2 的大作中提到: 】
: 使用泛型吧
: 当然不是java和c#的template
对C++的template最不感冒了,语法太不优雅了,要写出可读性很好的泛型代码需要比较高的水准。
java和C#里面的不能算是template,它们无论是编译时还是运行时都没有生成代码,他们就一份代码。
☆─────────────────────────────────────☆
NWN2 (Neverwinter Nights 2) 于 (Sat May 3 22:54:41 2008) 提到:
是吗?我觉得template的语法挺好的
元编程简直可以算是魔道的东西 XDD
【 在 UnitTest (TDD) 的大作中提到: 】
: 对C++的template最不感冒了,语法太不优雅了,要写出可读性很好的泛型代码需要比较高的水准。
: java和C#里面的不能算是template,它们无论是编译时还是运行时都没有生成代码,他们就一份代码。
☆─────────────────────────────────────☆
yueyingcs (Loli村元老村长) 于 (Sat May 3 23:08:38 2008) 提到:
java最大的好处就是上手快,那些特别灵活而又复杂的C特性都被它给摒弃了,虽然会带来一些效率问题,但是很大一部分事情它都能解决
☆─────────────────────────────────────☆
warmtea (温一壶茶(虎虎)) 于 (Sat May 3 23:30:03 2008) 提到:
同意,eclipse的确是美轮美奂XD
【 在 SturdyEagle 的大作中提到: 】
: 还好吧
: 反正它也有了很多很好的应用了
: 这个语言学习起来也不是那么困难,当然有个很重要的原因是Eclipse这个美轮美奂的工具。
: ...................
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 00:38:26 2008) 提到:
【 在 NWN2 的大作中提到: 】
: 是吗?我觉得template的语法挺好的
: 元编程简直可以算是魔道的东西 XDD
引用SturdyEagle的话:
" 语言都是和具体应用以及IT行情相关的
超脱地寻找语言的美感不如去学数学算了
To be a practical programmer "
首先一个问题就是,一个语言特性能被广泛应用于工程,那必定是被广大程序员所理解和接受的东西,不然它就只是一个看上去很美的玩具,因为软件工程通常不是一个人的事。作为软院的学生,你肯定比我清楚这点。其次啊,元编程强调它是图灵完备的,我要强调的是它仅仅就只是图灵完备而已,它的能力就仅此而已。至于template的语法到底好不好,完全就是一个屁股决定脑袋的事情。最后,我记得你曾经是“技术无用论的坚定支持者”,XDD。嗯嗯哪。晚上扯淡灌水的感觉真好,恩
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 00:47:04 2008) 提到:
【 在 SturdyEagle 的大作中提到: 】
: 还好吧
: 反正它也有了很多很好的应用了
: 这个语言学习起来也不是那么困难,当然有个很重要的原因是Eclipse这个美轮美奂的工具。
: ...................
用惯VS之后,有一段时间改用Eclipse感觉完全没有VS那种流畅感,用的很别扭,是因为我没习惯还是VS做得比较好呢?
J#啊,可惜了
☆─────────────────────────────────────☆
yueyingcs (Loli村元老村长) 于 (Sun May 4 02:45:59 2008) 提到:
【 在 UnitTest 的大作中提到: 】
: 用惯VS之后,有一段时间改用Eclipse感觉完全没有VS那种流畅感,用的很别扭,是因为我没习惯还是VS做得比较好呢?
: J#啊,可惜了
.....这跟我用完eclipse然后去用vs的感觉是一样的
☆─────────────────────────────────────☆
qiongren (要走人了,什么都不说了) 于 (Sun May 4 09:31:19 2008) 提到:
楼主庚本没有理解java的io,那里如果不是那样的话会导致类得膨胀,多读读设计模式再说是不是重量级,都没有搞明白为什么那么写就说重量级。。。。
☆─────────────────────────────────────☆
Quake (Fumika|文伽) 于 (Sun May 4 11:19:38 2008) 提到:
【 在 UnitTest 的大作中提到: 】
: 首先一个问题就是,一个语言特性能被广泛应用于工程,那必定是被广大程序员所理解和接受的东西,不然它就只是一个看上去很美的玩具,因为软件工程通常不是一个人的事。作为软院的学生,你肯定比我清楚这点。其次啊,元编程强调它是图灵完备的,我要强调的是它仅仅就只是图灵完备而已,它的能力就仅此而已。至于template的语法到底好不好,完全就是一个屁股决定脑袋的事情。最后,我记得你曾经是“技术无用论的坚定支持者”,XDD。嗯嗯哪。晚上扯淡灌水的感觉真好,恩
元编程现在还是相当学院派的东西,这点我不否认
template的语法上还有需要简化的地方,这点我也不否认
就等那些大师级的人去研究这些,发展好了template,甚至弄一个新的语言再去推广吧
XDD
PS:我什么时候是“技术无用论的坚定支持者”?
PS2:mj被识破了?
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sun May 4 13:07:40 2008) 提到:
我想是你没有理解我的意思,呵呵:)
你的讨论,说会有类的膨胀,仍然是建立在你必须要使用OO的基础上的。
如果在做IO的时候使用OO的做法需要那么麻烦的话,我们为什么不换一种思路,因为OO也只是我们选择中的一种。我们完全可以选择不OO。
所以才有最后的不解,说java把OO最大化,是不是不值。
另,对于上面牛们说的那个元编程,不是很了解。是不是就是泛型编程,然后怎么又template去了,被搞晕了,呵呵……
【 在 qiongren 的大作中提到: 】
: 楼主庚本没有理解java的io,那里如果不是那样的话会导致类得膨胀,多读读设计模式再说是不是重量级,都没有搞明白为什么那么写就说重量级。。。。
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 13:31:00 2008) 提到:
【 在 Quake 的大作中提到: 】
: 元编程现在还是相当学院派的东西,这点我不否认
: template的语法上还有需要简化的地方,这点我也不否认
: 就等那些大师级的人去研究这些,发展好了template,甚至弄一个新的语言再去推广吧
: ...................
瓦擦,这个也是冬冬的mj ????太假了吧。。。。。
我觉得语言发展到今天,它的本质发展方向就是不断提升它的表达能力,让语法更接近我们的实际问题域,降低从实际需求到软件实现之间的映射复杂度。Java里面提供了如此丰富的类库本质上也是为了这个目的。但是我们绝不能指望语言真的可以简单到对于任何一个复杂的问题都可以只用聊聊几行代码就解决了,要真的到了这一步,那肯定是真正意义的AI了。上面的话SurdyEagle是从实际工程的需要来说的,而我提到图灵完备则是从理论角度来说的,不突破这个理论极限,语言再发展下去也不能有太大作为。换句话说,一堆自然数自己加加减减始终还是自然数,加减上一万年来也得不出其它的实数来。好吧,既然冬冬提到了“学院派”,那我就自称“理论派”吧。虽然SturdyEagle不客气地提到“不如去学数学好了”,但我也不得不承认,真要解决这个问题,最终还是得依靠 数学 和 物理 。所谓的"To be a pratical programmer",其实也只是对计算机的无能的一种无奈之词。我曾经一直以为计算机很强大,最后我发现真正强大的其实是程序员。
早起水水更健康,恩
☆─────────────────────────────────────☆
Quake (Fumika|文伽) 于 (Sun May 4 13:32:17 2008) 提到:
【 在 ericyosho 的大作中提到: 】
: 我想是你没有理解我的意思,呵呵:)
: 你的讨论,说会有类的膨胀,仍然是建立在你必须要使用OO的基础上的。
: 如果在做IO的时候使用OO的做法需要那么麻烦的话,我们为什么不换一种思路,因为OO也只是我们选择中的一种。我们完全可以选择不OO。
也许把泛型和OO结合起来,可以解决这个问题,具体可以参考《Modern C++ Design》
这本书,4年前我看了第一章,4年后还是只看过第一章 =v=
: 所以才有最后的不解,说java把OO最大化,是不是不值。
OO不是万能,不过java的最开始的目标就是纯OO,这就无所谓值不值
: 另,对于上面牛们说的那个元编程,不是很了解。是不是就是泛型编程,然后怎么又template去了,被搞晕了,呵呵……
泛型编程,即使用模板(template)去编程
元编程是模板编程里面的一种,主要是了依靠C++实现模板的方式--代码展开。具体为在写程序时,代码只写了一半,在编译展开代码时,编译器根据代码的描述,生成剩余的代码并编译为二进制码。
元编程很强大,不过代价是更长的编译时间和更让很多人看不懂的代码
还有一点就是模板目前是静态实现,这限制了它的应用
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sun May 4 13:46:05 2008) 提到:
稍微有点感觉了。
元编程,再动态起来,有点sciencefiction的意思,呵呵
不过很多fiction都已经实现了。
【 在 Quake 的大作中提到: 】
: 也许把泛型和OO结合起来,可以解决这个问题,具体可以参考《Modern C++ Design》
: 这本书,4年前我看了第一章,4年后还是只看过第一章 =v=
: OO不是万能,不过java的最开始的目标就是纯OO,这就无所谓值不值
: ...................
☆─────────────────────────────────────☆
qiongren (要走人了,什么都不说了) 于 (Sun May 4 14:17:19 2008) 提到:
不oo的话怎么叫java,不想oo可以不使用java。。。。。
【 在 ericyosho 的大作中提到: 】
: 我想是你没有理解我的意思,呵呵:)
: 你的讨论,说会有类的膨胀,仍然是建立在你必须要使用OO的基础上的。
: 如果在做IO的时候使用OO的做法需要那么麻烦的话,我们为什么不换一种思路,因为OO也只是我们选择中的一种。我们完全可以选择不OO。
: ...................
☆─────────────────────────────────────☆
coolfantasy (Cool) 于 (Sun May 4 14:54:16 2008) 提到:
[upload=1][/upload]
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sun May 4 16:26:59 2008) 提到:
难道java就永远只能是OO么,囧……
唉,
看来是有点触了java的价值观底线了,
只是觉得java很强大,希望可以吸收更多的语言特性,能在尽可能多的问题域中用合适的模式去解决。
不过这个肯定说服不了sun那帮人。
【 在 qiongren 的大作中提到: 】
: 不oo的话怎么叫java,不想oo可以不使用java。。。。。
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 16:28:23 2008) 提到:
【 在 Quake 的大作中提到: 】
: cool COOL!!
cool把终极杀手锏都祭出来了,让我忍不住又再扯淡几句~~
为什么现在都流行“代码民工”一词呢。恩,首先声明一下我和cool不是一个流派的,我是“理论派”的,cool是“富婆派”的。从“富婆派”的角度来看,程序员显然就是彻头彻尾的民工.....咳咳,所以我就从“理论派”的角度上来说一下我的看法吧。有了一段编码时间的人,到最后通常都会有一种干体力活的感觉,有时候就是无聊的重复。为什么?因为我们在一个小地方原地打转,不断地重复着if else for等这些东东,那OO呢,真的让我们摆脱了这种无聊的重复了吗?其实也没有,只是升级版的if else for。准确地说,是在不断地递归,在不断地自映射。以前看一篇关于元模板编程的文章的时候,作者说“它强大得可以计算一切事物”,唬得我一愣一愣的。现在我真想揪住作者,质问他“那你让元模板给计算一下cool什么时候会傍上富婆啊"。咳咳,偏题了,其实也刚好说到点上,要是元模板或者说OO真的那么niubility了,这不都成了黑客帝国了。再回来一步,软件开发其实还是一件很有技术含量的事情,那它的技术含量到底在哪儿?那显然不是在编码上,而是在如何用有限的计算能力去模拟和逼近无限复杂的现实需求上面去。说简单点,假设我们的计算机就只会数自然数,那它是可以数出整数,有理数来的。但是无理数就够呛了。但是也并非完全没有办法,什么办法?有一个办法叫级数展开,比如说pi,e这种无理数都是可以通过级数来无限逼近的,所以它们是可以计算的。但是实数实在是太多了,光用自然数是没有办法一个个去逼近的。这和我们的软件开发有什么关系呢?有着莫大的联系,我们去分解一个现实需求,其实是试图通过一个类似”级数展开“的思想来逼近一个复杂的现实世界,最有技术含量的就在于如何去找到这个”级数“!那编码是什么,级数有了,那你把那些自然数换个进制,把十进制的换成二进制的不就完了。我发现我越来越能扯了。。。。。
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Sun May 4 16:41:03 2008) 提到:
基本上理解UnitTest说的意思,
用超级白话来说,最有技术含量的是发现和创造编程范式。
一般公司里面所谓的开发,都是在使用已有的工具和语言,都是体力劳动者。
真正的牛人,发现二进制本身可用在计算机上,做出论断以后,就换领域了,而不会使用这个想出来的二进制计算方法去做具体的事。
咔咔^^
☆─────────────────────────────────────☆
qiongren (要走人了,什么都不说了) 于 (Sun May 4 16:51:04 2008) 提到:
也没有这么夸张吧,这里面也有分,呵呵,不过以后的发展肯定是越来越简单,哈哈
【 在 ericyosho 的大作中提到: 】
: 基本上理解UnitTest说的意思,
: 用超级白话来说,最有技术含量的是发现和创造编程范式。
: 一般公司里面所谓的开发,都是在使用已有的工具和语言,都是体力劳动者。
: ...................
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 16:55:02 2008) 提到:
【 在 ericyosho 的大作中提到: 】
: 嘿嘿~~,我开始偷偷乐了。
”听说你是程序员,
哼,5555555555,
干嘛去做程序员,5....
那不如分手算了!"
其实你真的理解偏了,我去做功课了,啦啦啦~~~
☆─────────────────────────────────────☆
Quake (Fumika|文伽) 于 (Sun May 4 17:19:17 2008) 提到:
【 在 UnitTest 的大作中提到: 】
: cool把终极杀手锏都祭出来了,让我忍不住又再扯淡几句~~
: 为什么现在都流行“代码民工”一词呢。恩,首先声明一下我和cool不是一个流派的,我是“理论派”的,cool是“富婆派”的。从“富婆派”的角度来看,程序员显然就是彻头彻尾的民工.....咳咳,所以我就从“理论派”的角度上来说一下我的看法吧。有了一段编码时间的人,到最后通常都会有一种干体力活的感觉,有时候就是无聊的重复。为什么?因为我们在一个小地方原地打转,不断地重复着if else for等这些东东,那OO呢,真的让我们摆脱了这种无聊的重复了吗?其实也没有,只是升级版的if else for。准确地说,是在不断地递归,在不断地? 杂成洹R郧翱匆黄�关于元模板编程的文章的时候,作者说“它强大得可以计算一切事物”,唬得我一愣一愣的。现在我真想揪住作者,质问他“那你让元模板给计算一下cool什么时候会傍上富婆啊"。咳咳,偏题了,其实也刚好说到点上,要是元模板或者说OO真的那么niubility了,这不都成了黑客帝国了。再回来一步,软件开发其实还是一件很有技术含量的事情,那它的技术含量到底在哪儿?那显然不是在编码上,而是在如何用有限的计算能力去模拟和逼近无限复杂的现实需求上面去。说简单点,假设我们的计算机就只会数自然数,那它是可以数出整数,有理: ...................
可以去看一下Lisp
嗯
☆─────────────────────────────────────☆
UnitTest (TDD) 于 (Sun May 4 19:05:52 2008) 提到:
【 在 Quake 的大作中提到: 】
: 可以去看一下Lisp
: ...................
为什么推荐我去看Lisp呢?以前我看SICP的时候看过了啊,后来我到处宣扬Lisp的时候,"工程派"的SturdyEagle是这么回复我的:
" 语言都是和具体应用以及IT行情相关的
超脱地寻找语言的美感不如去学数学算了
To be a practical programmer "
后来我意识到其实Lisp也没有突破很多东西,只是我们先入为主接触的是命令式的风格而已,所以会觉得它比较巧妙。Java构造起OO的世界,Lisp构造起FP的世界。但是Lisp里面也有很重的对象的痕迹,Lisp用函数来承载对象,Java用class来承载对象。要真的去理解FP,Haskell,ML,ErLang是更好的选择。从”理论派“的角度来看,其实Lisp也没有突破图灵机的能力,它还是没有办法精确地描述现实世界,所以我们依旧没办法摆脱不断地自我重复。这正如在量子力学的世界中,费尔用”路径积分“来描述,而薛定谔用微分方程来描述它,但是这两种不同的描述方式有导致了量子世界的不同吗?没有,它们是等价的。
所以无论从”工程派“还是”理论派“的角度来说,过分地沉浸在”学院派“的一些奇技淫巧里面未必是一件好事。当然虽然是等价的,但是在描述不同的问题上的方便程度是不一样的,也许FP会在未来的并行世界里面表现得更为抢眼。但是我们始终不要忘了一个很关键的问题,真正强大的不是计算机,也不是某种编程语言,真正强大的是我们自己,我们才是把现实世界映射到计算机上的关键。过分追捧某种编程范式和语言都是完全没有必要的,脚踏实地地去解决一些实际问题,积累经验值,练成必杀技,遇神杀神,才是”工程派“的王道。当然可以走”理论派“的路线,研究出更为强大的计算机,从此解放全天下受压迫的民工们。。。。。
这是一条镜像帖。来源:北邮人论坛 / java / #6081同步于 2008/8/23
Java机器人发帖
[合集] 突然觉得java有时候太重量级
SturdyEagle
2008/8/23镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。