DHH 移除 TypeScript 后的反静态类型主义营销号刷屏有点让人绷不住

2023-10-15 06:40:12 +08:00
 netabare

尤其是过了这么久还能看到这些营销号,然后评论区大家都在集火喷 TypeScript 。

实在是不懂为啥静态类型会惹来这么多人厌恶,更不用提这个 PR 还有个更严重的问题 - 在多人协作的项目里直接 force push 了。

本来还想写点啥吐槽一下,然后感觉累觉不爱,只能说这位社区领袖直接把 Ruby 这个语言对我的吸引力拉到近乎于 0 的状态。

顺便引用一下一个算得上是爆典的修改:

68    | async function gotoPageWithFormMode(page: Page, formMode: "on" | "off" | "optin") {
   68 | async function gotoPageWithFormMode(page, formMode) {

用户获得了在formMode里传入 null 、undefined 、114 、5.14 、"1919"和new Date()的自由。

5521 次点击
所在节点    程序员
64 条回复
AV1
2023-10-15 20:29:46 +08:00
@FightPig 关 ruby 社区的事
BeautifulSoap
2023-10-15 22:23:59 +08:00
看完这个帖子,我对一些用 js 的人真的大开眼界
Mark24
2023-10-15 22:41:57 +08:00
@netabare 灵活不是缺点,瓶颈的问题在于人,以及人的设计。

想通过类型想要消灭 BUG 是不可能的,也是徒劳。动态语言一开始便不提供这种幻想。

现在之所以回到静态型

无非就是业务开始固定,人力便宜,机器昂贵。这是老板降本增效的方向,并不是程序应该发展的方向。
Mark24
2023-10-15 22:46:03 +08:00
@DOLLOR 你好像搞错了

Sass 是 Ruby 社区发明创造的。

Node-sass 是 Node 社区重新造轮子。Node 轮子造的不好,不能怪 Ruby 社区。

Ruby 带来的先进理念,现在还被其他语言学习和模仿。
Mark24
2023-10-15 22:50:39 +08:00
@Pencillll

如果拿汽车发动机比喻,动态性是自动挡,静态型是手动挡。

你的比喻弄反了。

动态语言抽象等级更高。程序的发展方向是抽象化。
darklinden
2023-10-15 23:50:11 +08:00
虽然写纯 js 的大神很多,但是身边统计学,嘴上排斥静态类型,手上整活儿出不可维护代码的,大部分是为了坑人稳定自己地位的...
AV1
2023-10-16 00:28:58 +08:00
@Mark24
node-sass 是 sass 官方 libSass 的封装,libSass 是用 C++写的。

如果 node 社区真要重复造轮子,肯定会选择用 js/ts 来重新实现。
比如 less 、stylus ,这两家都是 js/node 背景,安装体验也比 sass 好。

后来 sass 官方自己倒是重新实现了 sass 编译器,但居然是用 dart 来重做。
所以,联想这个社区还曾经鼓捣过 coffeeScript ,我无端猜测,这个社区别说是对 TS 了,对 JS 都鄙夷。

那些只写 JS 的开发者最好别跟风起哄,说不定他下次要移除的就是 JS 。
Bluecoda
2023-10-16 01:01:16 +08:00
@Al0rid4l 是的,也就这而已,一个用 ruby 发家致富,然后把开发拿到的钱拿去开赛车比赛的男人,不会开赛车的男人不是好程序员
cailinunix
2023-10-16 01:07:31 +08:00
@Mark24 3202 年还有人认为静态类型描述的是底层实现?看你头像应该是个学过函数式编程的人,为什么会发表这样的爆论
AV1
2023-10-16 01:11:47 +08:00
@jry

let name:string = ''这种写法是很少有的,统计过我的代码,20 个变量声明里,只有一个用写类型,其他都是自动推断。唯一需要写类型的原因,还是是 File[]这种复合类型。
string name = ''这种写法,就不适合自动推断了。

你可能会说 auto name = ''也可以自动推断。但是,跟 const 连用就成了 const auto name ,中间这个 auto 要不要留就又是一个争论。
humbass
2023-10-16 01:50:21 +08:00
我做外包,坚持使用 JS ,而不是 TS ,显然用人成本低很多,,周边做外包用 Java 、TS 的团队基本都死光了。
netabare
2023-10-16 01:53:43 +08:00
@DOLLOR 有时候显式类型标注可以起到文档和契约的作用,当然一般来说不是 string 这种简单类型而是复杂的 model 或者联合类型。

静态类型的意义是这种写法是完全可选的,哪怕没有注解,也可以根据上下文尽可能推断出变量的类型( File[]算是少数反例了,但至少静态类型能推出个 any[]来)。

动态类型里面完全没有这种契约关系,所以真的要把类型约束推出来的时候,还得四处添加 userland 的 type hint ,而这就是 Turbo 的用户将要面对的情况(或者完全不考虑这些写面条代码)
mxT52CRuqR6o5
2023-10-16 03:22:06 +08:00
https://www.zhihu.com/question/623259697/answer/3223957909
本来就不是给正经 web 前端用的框架,所以也不应该因这些项目的技术路线去评价 web 技术栈
AV1
2023-10-16 08:04:22 +08:00
@mxT52CRuqR6o5
所以那些只写 JS 的程序员借这个话题抨击 TS ,还以为找到大神为自己站队似的,很可笑。
loolac
2023-10-16 08:55:48 +08:00
用的太久了,有一种类似“审美疲劳”的错觉吧。就像陈坤那些“音乐人”一样,在巅峰太久了,反而感觉大众化的内容太“俗”,“土里土气”反而是一种异样的美,就像现在的 “低代码平台” 比 visual basic 6.0 一样。
Mark24
2023-10-16 09:01:23 +08:00
@cailinunix

我的理解

如果 type 在一些语言里是和底层硬件绑定的硬件细节。
我觉得我们不需要关心。底层应该被抽象层屏蔽。

如果 type 是抽象层的接口描述,那么其实没必要大动干戈,以前有注释工具还能生成文档。现在用一个语言来分裂整个生态,是很差的选择。一些语言提供辅助的类型注解。

如果你觉得 type 可以消除 bug ,你会失望,这只是一个幻想。动态语言一开始就不提供这样的幻想。

无论哪个层次,type 都没那么重要。
horizon
2023-10-16 09:07:45 +08:00
不加类型,重构的时候咋办?
当然如果都是用完即弃的代码,当我没说。
encro
2023-10-16 10:02:44 +08:00
vscode 不支持 3.7 了,
公众号大多都报道未不支持 3.x 了。
因此,
我取消了几个公众号的关注。

我现在将我的方法推荐给你。
Cheez
2023-10-16 10:43:15 +08:00
@jry

TypeScript 是 JavaScript 的超集,首先就要保证 JS 能在 TS 的系统里面跑起来。另外 String name = '' 也不一定就是最好的设计,都已经给出初始值了,let name = '',TS 也能推断出类型了
charlie21
2023-10-16 12:02:57 +08:00
1 Turbo 作为 DHH 公司一个产品,DHH 公司尤其是 Turbo 开发团队是否有人因此辞职了?
2 TypeScript 作为微软公司的一个产品,微软是否可以禁止 DHH 公司的所有项目不得使用 TypeScript ?

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

https://ex.noerr.eu.org/t/982063

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

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

© 2021 V2EX