thinking in asp 之appendix A - 吐槽JAVA:SIN OF OOP

这里我要放弃专用吐槽格子,而用一个段落来吐槽JAVA——准确的说,以JAVA为代表的面向对象思想。

 

专用吐槽格,可以跳过,不影响阅读。

为免激起众怒,我先搬运一段别人文章里面的话:

 

从面向过程到面向对象的转移带来的后果是你从关注问题和解决方法转移到关注架构。——《不要用面向对象来迷惑程序员新手》

 

以上的话换成我的描述方式就是:关注对象和结构很容易把你带沟里去,让你忘了寻找直截了当的解决问题的方式,而为了所谓的灵活性、扩展性等浮云开始扯淡。

嘛,也就是顾客本来想吃一份“虾仁鸡蛋饼”,


而厨子却拿出来这么个东西——也就是”虾扯蛋“:

 

虽然这篇文章是说的python开发,但是,我很愿意把他用到java身上。

文中提到:“把Python当作入门语言,有一点需要注意:避免使用面向对象特征。当然,你需要学习一下Python的面向对象的知识,但尽可能的避免使用它们吧。”

我承认,我爱死这篇文章了。作者(好吧,我并不知道作者的名字)简直是神吐槽啊啊啊。

同样的,在我的个人观点里,php语法设计最大的失误就是试图变成java,而它在“通过各种软件模式和架构把事情搞复杂”这一点上永远无法超过java,同时还失去了简洁性和直截了当的解决问题的能力。

当然ruby是个比较让人迷惑的例子,它有很多的语法糖(syntactic sugar),也有很多的面向对象的结构和框架,不过,它真正迷人的地方不是这些,而是它的Rails哲学:不要灵活性,按照规定的来——或者说,够用就好,不要过于灵活。

当你使用某个故弄玄虚的系统的无穷无尽的xml去配置组合以完成一个任务并且感到绝望的时候——比如EJB——也许你会对天呐喊:E你个JB啊,我们需要的只是刚刚好的灵活性和扩展性~啊喂~~~

 

专用吐槽格,可以跳过,不影响阅读。

把上面这句话一口气看完并不容易,貌似我也受到了我所引用的那段文字的英式中文的影响:)

 

还有新版本的spring,怎么说呢,它把java的annotation机制玩儿到了“奇技淫巧”的程度。

事实上,我乐于使用java,虽然我时刻警惕但是偶尔还是会被它带沟里去——也就是过度设计,但是,对java的熟练使用可以使我避免很多的在代码实现层面上的思考,而更关注于解决问题的思路和算法——这就跟吃饭的时候只考虑吃哪一道菜而不会被“筷子怎么使用”所干扰一样。

关键在于方法。绕弯子到现在,我才暴露我是“极限编程”(XP ExtremeProgramming)的拥趸和“测试驱动开发”(Test-Driven)的粉丝。

让我再重复一遍java(所有的面向对象语言里,它最有代表性)的原罪:从面向过程到面向对象的转移带来的后果是你从关注问题和解决方法转移到关注架构——而这个基于上帝视角的架构随时可能被现实的车轮重复碾压直到崩溃。

关注问题和解决方法——这才是最重要的。

 

PS

之所以选择java开炮,还有一个原因是,我最熟悉最常用的开发语言就是java。你让我去吐槽R或者prolog,我也没这个底气。。。

有个哲人说:当你只知道一种宗教的时候,你还不懂宗教。

——在这句话的语境里,他的真实意图是说,没有比较和鉴别,你无权去评价其他宗教。——好在在开发中用过不少语言(虽然说不上很熟练),所以我还不能算是胡说八道 :)

当然,一方面,我仅仅是吐槽,而不是一个很客观客观的评价;另一方面,java应用最广泛的领域:web开发,其本质上是一个过程式的,这个是http协议所决定的:)

也许我在否定面向对象的时候,其实隐藏着更深的拥护——我想要的是纯血的OOP。

五六年前曾经买过一本图灵出版的书(书名忘了),作者是个纯血(pure blood 作者的说法)OOP的鼓吹者,那本书相当个性——在别人看来也许是狂妄,作者用了200多页的篇幅,演示了两个例子:“生命游戏”和“城市交通模拟”,来说明什么是纯血。好吧,我被他说服了。

PPS : 当然,“生命游戏”和“城市交通模拟”本身就是元胞自动机 等离散模型的最好范例,纯血OOP的典范——这个跟基于http协议的应用开发所使用的半吊子(这个词不是我说的,是该书作者说的,我可不想拉仇恨)OOP是有本质区别的。

PPPS : 在erlang的光环下,java逐渐暗淡,甚至有人提erlang是下一代的java,而java推出concurrent 包的原因(貌似?大致印象)也是被erlang刺激的。总之,在大规模集群和并行计算上,erlang远比java合适。所以每次涉及到并发编程的需求,我都克制不住使用erlang的冲动。

PPPPS :说起java,最近看了下微软azure云的一些开发文档,发现居然还有 visual J 或 J#(记不清楚了——我一直错误的以为这些microsoft style的伪java已经死球了)的调用示例,虽然我一直很讨厌微软,但是,我承认:在看到的那一刻,我似乎有一点点喜欢它了。

微软所表现出来的这种二愣子的性格真是——怎么说呢——  微软 很萌的哦,乃们不要黑它~~~~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Appendix在LaTeX中可以通过`\appendix`命令启动,之后的section将自动编号成字母(A,B,C...),而不是数字(1,2,3...)。 下面是一个简单的例子: ```latex \documentclass{article} \begin{document} \section{Introduction} This is the main text. \appendix \section{Appendix} This is the appendix. \end{document} ``` 在上面的例子中,`\appendix`命令将主文档中的section编号转换为字母,并且添加了一个新的section,这个section的编号是A。 如果需要在appendix中添加子节(subsection)、子子节(subsubsection)等,可以使用正常的sectioning命令,只不过它们的编号将是字母。例如: ```latex \documentclass{article} \begin{document} \section{Introduction} This is the main text. \appendix \section{Appendix} This is the appendix. \subsection{Appendix subsection} This is a subsection in the appendix. \end{document} ``` 在上面的例子中,我们在appendix中添加了一个subsection,它的编号是A.1。同样,如果需要添加更深层次的子节,可以使用subsubsection等命令。 另外,如果需要在appendix中引用主文档中的某个section,可以使用`\ref`命令。例如: ```latex \documentclass{article} \begin{document} \section{Introduction} This is the main text. \appendix \section{Appendix} This is the appendix. Please refer to section \ref{sec:intro} in the main text. \subsection{Appendix subsection} This is a subsection in the appendix. \end{document} ``` 在上面的例子中,我们在appendix中引用了主文档中的section,它的编号是1。注意,我们使用了`\label{sec:intro}`命令为主文档中的section添加了一个标签,这样才能在appendix中使用`\ref{sec:intro}`命令引用它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值