我从来没见过比面向对象更糟糕的编程范式和语言

2023-02-14 12:31:17 +08:00
 soclearn

来看 java 的 hello world

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

好一个蠢字了得。为了输出二个字,要写这么多样板和层次

不能像 shell 一样平坦化吗

而且以后,你还要学”继承,保护,ducking type ,mixed in, 参数类,原型链,面向 interface ,设计模式,并发加锁,信号量“ 而且到最后,你会被告知”py,cpp 的 oo 都是山寨,只有 smalltalk,ruby 那种 oo 才是纯的“

并且最最后,你会发现先它们一步的函数式语言无须厚重的数据抽象,也能获得更好的代码结构和范式,并且天然并发,自带 dsl

11403 次点击
所在节点    编程
135 条回复
balsam
2023-02-14 20:04:10 +08:00
不想写可以不写,写美国人的 c++去。
GeruzoniAnsasu
2023-02-14 20:10:31 +08:00
喷得好,但是内容和标题有一丢丢偏差,我来帮 OP 重新拟个符合他想表达的内容的标题:


> 我从来没见过比 [JAVA 这种只能面向对象还要试图解决一切问题的东西] 更糟糕的编程范式和语言



深表赞同啊,滑稽
netabare
2023-02-14 20:16:47 +08:00
没有 interface 还有 trait ,还有 typeclass ,当然这两个和 interface 经常混在一起。只讨论使用的话,作用也很相似,提取出公共接口提供代码复用而已。

表达子类型关系,除了继承完全也可以用别的方式来做,比如说组合或者混入,比如说把方法的实现写进 interface 让具体类型提供最小的需要实现的条件,比起直球继承,这种写法最大的好处大概就是松耦合和类型安全了。

把函数编程理解为一堆函数然后封装起来,感觉是既不懂 FP 大概也不懂 OOP 的发言。
xtinput
2023-02-14 20:19:46 +08:00
所以你去设计一种新语言吧
WispZhan
2023-02-14 20:24:40 +08:00
@deorth kernel 里难道不是没有 oo ,却是满地 oo ?
ksc010
2023-02-14 20:37:07 +08:00
这个标题让我想到了王垠
xtinput
2023-02-14 20:39:37 +08:00
shell 输出 hello world 很简单,那么你用 shell 写一个接口给客户端调用试试?用 shell 写一个界面试试
snw
2023-02-14 21:15:19 +08:00
视要解决的问题不同,需要不同的工具而已。
小需求用脚本容易解决,复杂不统一的需求还是老老实实面向对象比较好。
dingwen07
2023-02-14 22:09:51 +08:00
你可以继续在函数式编程里递归,然后栈溢出

仔细看了一下你的回复,OP 你是不是对 fp 有什么误解?什么时候 Ruby 成了 fp 了?
546L5LiK6ZOt
2023-02-14 22:14:46 +08:00
不知道楼主有没有了解过 oop 的历史。oop 的概念被提出来,最初的本意不是面向对象,而是面向消息,名字起得不好,容易造成误会。加上后来 gui 编程开始流行,大家发现界面上的的组件可以用 oop 的对象表示,组件之间也存在继承关系。当时流行的 c++ 和 java 都支持 gui 编程,自然也就慢慢引领 oop 往继承方向发展了。每个语言都有一定的技术债,了解下历史,自然也就明白为啥现在会是这样子,没有完美的。可以看下 [维基百科]( https://en.wikipedia.org/wiki/Object-oriented_programming) 和 [The Forgotten History of OOP]( https://medium.com/javascript-scene/the-forgotten-history-of-oop-88d71b9b2d9f)。

话说天然支持并发的应该都是纯函数式编程语言吧。纯函数式编程语言有个问题,就是有状态的数据结构没办法用语言本身来实现,例如哈希表( haskell 貌似是底层虚拟机提供实现的)。这意味着不少依赖状态的数据结构和算法都得改,用函数式的思维模式重新思考。

而且貌似在软件工程领域,很少有用函数式思维来建模的方法论。例如用 oop 建模,有 uml ,通过画类图、时序图等等来分析复杂业务逻辑,这些图都是可以方便映射到代码实现当中的。但是在函数式编程领域,面对复杂的业务逻辑时应该怎么建模呢(怎么通过图形化方式表示高阶函数、functor 、monoid 、monad 等概念)?
aliveyang
2023-02-14 22:20:31 +08:00
什么好用就用什么呗,我没有信仰
skies457
2023-02-14 22:25:51 +08:00
oo 方便堆屎山
meteor957
2023-02-14 22:27:31 +08:00
@chenzhao0121 不是 v2 ,java 程序员是中国程序员里面占比最多的,曾经 java 近似于程序员的代名词。
noparking188
2023-02-14 22:32:35 +08:00
我用库多的,都可以
boqiqita
2023-02-14 22:40:51 +08:00
2023 年了,还用中文,跟我一样蠢。
amlee
2023-02-14 22:45:40 +08:00
@546L5LiK6ZOt 并不需要用图形化的方式表示你说的那些概念。

换句话说,你当初学习数学的时候,用图形去理解交换律或者结合律了吗?

我的理解是,对于函数式范式,写代码的时候就同时在建模。因为往深了走,抽象程度就越来越高,函数式就越来越声明式,直到最后函数式变成声明式的子集。
lixintcwdsg
2023-02-14 22:46:37 +08:00
作为有代码洁癖的中老年开发工程师真心有点儿看不下去。
这种天天讨论语言的行为和玩儿摄影天天研究这个头更锐那个头控制畸变更好有什么区别,拍出来的照片一般都是入门级别。
螺丝刀木头柄的还是塑料柄的影响你拧螺丝吗?
有这精力把各种系统设计了解齐全一点儿,aws 阿里云上那么多公共服务,你翻翻文档能都熟悉了都比纠结这个事情强。
lixintcwdsg
2023-02-14 22:49:16 +08:00
真的对工程化有兴趣,如何接近最佳实践去控制工程质量,语法不能说没用,但是最重要最难的是如何让研发组织使用相同的习惯来开发。
都用一坨屎标记,也比你用香奈儿五号我用六神花露水他用风油精强。
kaiki
2023-02-14 22:51:24 +08:00
来写 PHP 吧,PHP 是世上最好的语言,退一步来讲 JS 好像也可以
webcape233
2023-02-14 23:03:00 +08:00
你说的好,但是我不敢这样发言,怕被喷,默默点赞

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX