回帖整理: Java社区有什么可学的?


"困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如 数据库访问到底用什么方式orm,还是dataset等等在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员 要学的更多一些,基础的成果在java社区那边,.net 程序员有点吃亏"

我看有些还是算了吧. 不了解.NET, 也听不懂Java阵营那边声音下面的实质是什么, 就能随便下结论?

一 个像点样的.NET程序员完全知道什么时候应该对GridView直接拿来, 什么时候应该花费多大成本去做一个适合自己的实现. 如果Java世界还羡慕什么GridView, 这只能说明一个问题, Java世界里菜鸟那是相当的多, 一个控件在一些场景下能节约多少负担或者增大多少工作量, 这个体会不出来还叫什么程序员? 在值得的情况下, 实现这么一个控件(或者任何语言/工具阵营里的其它叫法)都不愿意, 还叫什么程序员?

无论是表格之于Java, 还是ORM之于.NET, 谁要还把这种问题当成什么高级议题去考量, 嗯, 有点那个... 不就是类似于"吃饱了不饿", "吃大饼还是吃窝头/喝白水还是喝糖水(针对不同的需求)"的事情吗?

什么叫做Java世界是基础成果, .NET阵营就得如何如何学习? 谁来定义"基础成果"是什么? 那么我完全可以说: 恰恰相反, Java世界的东西往往是, 说好听点, 高屋建瓴, 说难听点, 全TM都是虚的.

说 实话, 这世界大多数程序员都是混饭吃, 如果大家都肯认真钻研, 就Java领域那点小破框架, 几万到几十万行代码, 十来个人合作, 踏踏实实做个1年半载, 加上讨论, 琢磨, 和重构, 是个程序员团队都搞得出来. 高层如何组织只是观念和意识的问题, 学习俩字都算不上. 比如何组织更基本的是根据需求定出如何组织的原则, Java阵营里无畏的依赖各种框架, 而不知自己思考的也是一大片一大片, 具备良好意识的程序员, Java阵营里又比.NET多几个?

可惜的是, .NET阵营里愿意学习更基础的思维方式的人也没有几个, 如果有了自己的思维方式, 并能够不断调整和成长, 一个.NET程序员完全不必从Java阵营里获取任何营养, 因为那里除了多余的东西已经没有任何营养了! 就如人体合成氨基酸一般, 一些氨基酸属于人体自身能够合成的, 不需从外界获取, Java阵营里的一切都属于这种. 对这些高层组织经验及其模式化的框架和产品无谓崇拜, 说白了就和一个身体不好的人(比如我), 不知锻炼身体, 固本培元, 却去吃什么脑白金/黄金搭档一样!

在软件构件领域, 什么相当于人体自身不能合成的氨基酸, 每个人都应该好好琢磨一下. 说实在的, 一些Java阵营的兄弟, 没事就跑过来来句不疼不痒的, 我不知道你什么水平. 如果就你们隐隐约约表露的, 有若干年工作经验, 接过多大多大的项目, 是的, 你可能在很多方面比一些.NET方向的初学者(比如我), 强, 但是, 居然有如此经验的人, 认知还存在着这样的盲区, 那么我觉得恰恰说明, 对于一般的思考不能上升到一定高度的程序员, 无论是Java还是.NET的从业者, 对Java领域内那些高级营养品, 还是敬而远之的好.

无 论是普通人, 专家, 还是大师, 说白了都要熬年头, 最终比拼的也不过沉淀而已, 沉淀下来的太多, 又需要一次, 两次的过滤. 到头来, 无论你干得是Java, .NET, 还是C++, 或者是Linus嘴里鄙视一切面向对象语言所固有的心智包袱的C, 我们到底剩下了什么?

谁愿意代Java的三个表, 谁自己带去, 等到退潮的时候, 裸泳的不知道是哪个呢.

P.S. 最后说一句, 不是说.NET社区不欢迎Java社区的讨论, 也不是说虚的东西就完全没有讨论的必要, 只是讨论事情要落在问题上, 成天不阴不阳, 这算干嘛呢?

更新:
@jt
唉, 等你再深挖掘一下就知道了. C#/Java, 完全建立在面向对象语言的改进的基础上, 但是谁说万般皆下品, 唯有对象高了? 外面的世界广阔的紧, 现在我看闭门造车的不是别人, 正是Java, Java的圈子太小了. 比如Java有1亿个程序员, 50个专家, 10W个精尖, 够多的了吧? 再假设世界上总共只有1000个专家, 20W个精尖, 1.5亿个程序员(这个比例够失调了吧), 那么想学的更多, 甚至想在Java/C#上理解比别人更深的道路应该怎么走? 这个答案你可以自己衡量.

对于这个假设, 你也看出了区别, 其关键点在于专家的数量. 哪怕再假设世界上有1001个所谓的"阵营", 也就是说, 每个阵营只有一个专家, 而Java一个阵营就有50个, 那么答案会变化吗? 再说了, 真实世界里, 真正的编程领域相关的专家, 而不是软件工程的专家, Java就一定比Lisp这种偏门语言多吗?

谁谁谁参与制定EJB就说明Java社区怎么样, 这个就更站不住脚了. 这就好比好几个公司是微软推荐的控件集开发者一样. EJB又是多了不起的东西了? Linux就是一小撮人写出来的, LAMP是少数轻量级软件逐渐发展并通过Web这个机遇凑到一起的, 谁更有生命力些? 更何况一些厂商为了间接实现自己利益推的东西, 又有什么说明价值? 我们并没有讨论哪些厂商推哪些东西推成什么样了, 怎么推怎么发展的, 我们不是在讨论如何评判一个社区的价值, 而去讨论是不是存在着这么一个社区, 别的社区非向它学习不可吗?

说点具体的, 比如Java的基石, 面向对象, 是一个工具, 也是一个束缚, 建筑于这个基础上, 就像控件限制了一些程序员的思维, 面向对象及其衍生出来的各种手法, 其实也限制了所有的面向对象程序员的思维; 直到思维和用来实践这些思维的工具通过逐渐增多的需求, 遇到了强烈的不得不可服的缺陷, 这时候什么AOP啊之类, 居然也成了经典, 其出现过程是: 面向对象先选择了某些封装的方式, 突然又发现这些方式忽略了其它的需要, 于是另辟通道. 这本来无可厚非, 哪种选择也不可能一下子把所有问题考虑到. 不过这里有一些反映社区深浅的有趣现象发生了: 多少人为这样一个选择了其它编程方式现在就不需要的具体解决方案去鼓掌(社区知识的广度)? 多少人把一个为了克服由上次选择而引发的障碍, 从而提出的具体解决手法, 上升到思想的高度(看待问题的深度)? 不是说AOP的实践上没有学问, 就像给衣服打补丁照样有很大学问一样, 但是为这个欢呼雀跃的社区, 其认识水平能比另外一个相似的社区高多少?

你现在的情况是, 某人居然这么说Java, 于是对我做了一个假定, 包括我情绪和立场上的, 包括我对Java语言所限定那些小小的, 但很多人却误认为是很广阔的领域上的理解. 当然, 我要是Linus, 一句话振动整个技术社区, 你就是心存疑惑也不敢跟他辩论; 但是我之所以叫做"怪怪", 在于, 即使明天Gosling站在我面前, 我相信, 我心中对Java和Java like语言及围绕这种表达方式建立起来的种种模型的疑惑, 照样能把他问住, 因为有些问题是本质性的. 你看不到, 或许是因为你没有出这扇门, 总觉得这儿有个大宝藏, 同时没有发现, 脚手架背后, 就是绑住你手脚的铁链. 要知道, 有能力影响并伤害你所以你必须去质疑的, 恰恰不是一个普通网友, 而是那些大师, 那些书本, 和你信仰的社区及文化.

C++就不要提了. C++太过繁琐. 但是仍然有一点需要注意的, Java并非是单纯的C++的改进(在对繁琐细节上的消除这方面上是), 而是同时包含着对C++的削弱, 我指的削弱并非指不能操作内存了, 而是语言所能表达的丰富性上的削弱.

说这么多话其实毫无意义, 只是我要告诉你, Java世界里根本就没有什么全世界的科学家, 只有一些工程学家还算有些贡献而已. 你在一个.NET社区里说这些, 不会显得你有多么开阔的视野, 或者说多么能够包容, 只能说明你见过的太少: 在我眼里, .NET社区和Java社区完全是一个社区, 每个人都在说共同的语言: 职责, 多态, 模式, 等等等等. 别的不说, 就说数据和操作共同封装在一个对象上这个方式, 它的正确性真的得到了严格的证明吗?

给你这段话一个明确的回答吧, 按照我过去没注册博客的风格:

"java社区现在的做法的思想来之已久,java社区整个的知识和学术底蕴恐怕比你想象的深厚得多,让你说的那样,大家不是都成了傻瓜?"

除了剩下的为数不多的真正的认识层次上的专家(对于这样的人, 拿什么搞也无所谓), 一半是傻瓜, 一半是实用主义者.

Java照样是商业公司推举的东西(你真正了解其他领域的话, 对比一下C++或者Lisp方言就知道了), 对于实用主义者来说不可能避开, 不去学习Java领域做事的方式. 当然我也不至于偏颇的认为大公司推的东西再烂也有人用, 而是对于大多数情况, Java或者C#, 够用了, 既然够用, 为什么还要掌握更多的东西, 接受不必要的思维训练或者复杂度呢? 另外一个就是文化的不同, 让不同的阵营对不同性格的人吸引力不同. 还有更复杂的原因, 那就不是我能解释清楚的了. 只是, 实用/够用/文化/商业运作, 这些条件已经足够充分了.

至于前一半人为什么是傻瓜呢? 因为你说的太对了, Java的很多东西由来已久, 80年代就有了, 那会儿根本没有Java, 只通过Java或者.NET去学些什么思想, 就好比隔着一层纱去看心爱的女人, 永远也看不清楚.

傻瓜傻在哪里? 傻就傻在认为很多东西是面向对象, 是Java, 所独有的, 假设一个人捡到一颗珍珠, 就认为全世界只有这一颗,  全然不知这只是一种自然现象的产物, 全世界有的事, 这个人傻不傻?

正是被忽悠的和实用主义者, 前者在技术思考上的稚嫩和后者在技术钻研上的浅薄, 导致了Java社区从根本上不可能真正高大起来. 是的, Java社区在不断的辐射能量(而这种能量到底是在加强还是在减弱, 还真不好说), 去影响那些打算以各种方式接触这个领域的个人和组织; 但是即使在成长, 就像别人攻击.NET一样, Java社区在真正的编程思想领域也一样, 只能不断新瓶装旧酒. 这些旧酒, 我在哪儿不能喝到, 还非得Java社区不可了? 相反, 在C++和FP(虽然截然不同)中, 甚至在现实生活中干其他事情时, 有的是我可以学习借鉴的东西, 让Java阵营里宣传的那些东西可以被浓缩成不到1/10之一的核心思想.

傻子不可怕, 就怕傻子会说话. 我不是指普通的Java使用者或者模式学习者等等, 而是指那些在自言自语中把简单的道理弄高深, 又给IBM/SUN当免费宣传员还自认为支持了开源的家伙; 先不说国内外社区里那些所谓的"牛人"似是而非的文章, 毕竟就算简单的东西, 被说复杂就有了迷惑性不好判断; 看看IBM文档网站上那些IBM采用的"砖家"的菜鸟文章吧.... 你的敌人不是我, 而是他们, 因为我不会对你有这么大影响力决定你的技术成长道路; 如果有机会, 你应该好好跟他们辩论辩论, 如果你已经能够提出正确的问题的话.

你知道, 我讨论的时候, 只是在说我的见解, 哪怕我这次比较出格的论断了Java社区, 我也是以已经存在的事实支撑: 比如Java社区玩的概念早在Java以前就广泛存在, 甚至在一些语言里是天然支持的; 比如AOP对OOP仅仅是一种不得已的补充, 却被热炒成这样; 比如ORM仅仅是一种非常具体的手法(并不是说其实践没有学问), 而且是计算机领域里最没深层次内涵的一个课题, 却是某些社区的重大课题.

而有些人呢?

"那你看这个问题可能还没有看到他们后面的学术流的支持,我在查阅文献的时候"

你怎么知道我没有成天泡在Java社区, 比你耗的时间还长? 你怎么知道只有你查阅文献, 而我就不是有大量广泛阅读并思考的基础? 是的, 我的观点也许真是偏颇的, 论断我, 就必须有事实依据, 你没和我一起生活工作, 这个显然不可能; 那么你最好只集中在话题上. 关于话题呢, 你也不能只是说那些被重复了一万遍的东西, 而是要拿出证据: 比如面向对象为什么是好的? 如果你还停留在, "我靠, 这还用说, 明摆着..."或者重复书本上的常识的阶段, 那么请你不要把你在这个阶段的理解传播给其他人了, 而且也不要假设你的讨论对象也一定对这个问题没有思考.

过去在Java社区和模式社区里炙手可热的大嘴Fowler, 掀起了一股又一股对某些概念追风的热潮, 不最后又投奔到XP那儿去了吗? 是的, 他说了很多打马虎眼的话, 去维护他自己作为一个技术宣传人员的声誉, 比如模式与XP不冲突啦之类, 其中的味儿你自己咂吧吧. 92年的时候还在写简单的维护脚本, 这样的人能被当作一个技术明星冉冉升起的社区, 哈~

再比如说, GoF的<<设计模式>>的作者, 几年前接受采访时就说, 他10年前很多看法是有问题的, 并且提出了一些原则比如: 尽量不要提供框架, 而是提供工具箱. 对这些话题, 你有没有了解和思考? 如果你还停留在学习设计模式, 觉得Java那些小框架很深奥的阶段, 那么你没有办法去象我证明什么, 即使我的了解程度比你还差. 如果你有, 那么你可以拿些具体的话题来讲解, 支撑你的观点.

我其实在社区里, 最反感的一件事, 就是讨论问题的风气和习惯, 这些习惯导致很多讨论最终变成无意义的噪声. 其中最大的噪声, 就是接近于口号的那种.

最后说一句, 我这些帖子其实是指桑骂槐, 借题发挥, 并没有针对你这个人的意思, 而且可以说, 其实根本不包括你(如果我也象你一样做个假设的话, 看你的留言, 基本属于在技术上不是我合适的讨论对象那种, 我只是顺手抓个机会看这里热闹, 替那些不擅言辞老实巴交又老被"高明人士"挤兑的.NET从业者出点气罢了).  某些人, 不得不小人之心的去揣测, 一天到晚的瞎蹦达, 是不是属于对某种"优越感"和"自我证明"幼稚的心理需要了. 另外, 如果某一种言辞不是成为了一种想当然的习惯性说法, 只有你一个人说些没头没尾的言论, 又有什么了不起呢?
原文地址:https://www.cnblogs.com/guaiguai/p/1010798.html