现在极其厌恶弱类型语言,弱类型就不适合中国的职场环境

68 天前
 willx12123

别的团队交接过来一个十几万行的 Python 项目,要重构成 Java ,我真的吐了,一点文档也没有。

Python 里面大量的访问各种 RPC 接口,关键是特别喜欢自己转换 rpc 返回的结构,还非要用字典去自定义结构!

现在好了,到处都是字典 + 字符串取值,这个字符串 key 还是尼玛自己定义的,和 idl 都对不上,得自己去代码里面到处翻找,看看到底是哪个接口返回的。

最离谱的是命名还会骗人,弱类型就算了,好歹命名漂亮点吧。"xxx_list" 是个字符串我真的服了,甚至就连 "user" 也能是个字符串……


现在国内的现状就是领导疯狂催,程序员疲于奔命,谁天天给你写文档,代码迭代几次连自己都不认得了,还搞弱类型,万一熟悉项目的人走了后面的人根本没办法看,都都读不懂。再加上英语水平有限,命名真的是一塌糊涂,更加重了理解问题。

12611 次点击
所在节点    程序员
119 条回复
bronyakaka
68 天前
Python 是强类型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DOLLOR
68 天前
@CodeCodeStudy
你说说哪些编程语言是能够通过 type 来区分 NaN 的?
反正 java 和 python 都不行,都需要专门的 isNaN 来判断。

// java
double x = Double.NaN;
System.out.println(x == Double.NaN); // false
System.out.println(Double.isNaN(x)); // true

# python
import math
x: float = float('nan')
y: float = float('nan')
print(x == y) # False
print(math.isnan(x)) # True

你也认为这是 java 和 python 的“坑”吗?
CLMan
68 天前
@CodeCodeStudy NaN 是计算机为了满足数学需求搞出来的,在浮点数的标准 IEEE754 里面有规定,现代编程语言差不多都支持这个概念(因为都依赖于底层实现),这怎么能怪到 JS 去。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_date

Invalid Date 有点类似 null ,算个小坑,要在源头( new Date())进行检测(这意味着与其它编程语言并没有太大区别),后续代码并不需要防御性编程。

个人认为比较坑的,是 Array.isArray()这种需要额外记忆成本(因为浏览器跨框架的原因)的东西。
matrix1010
68 天前
跟风 diss 一下 Python: "First Python version I used was 2.2. I am using Python since 2003. I cannot figure out my wife’s Python packaging issues. Skill issue." - Armin Ronacher (Creator of the Flask framework. Engineering at @getsentry)
shijingshijing
68 天前
跟语言种类没啥关系,主要还是文档和流程的问题,你还没有碰到复杂逻辑的代码。
RoninLee
68 天前
昨天还是组内建议了不要用 var ,又不写注释,很难读。
然后下周即将迎来一场 battle ,为啥不用 var 。
--来自 Java 码农
FYFX
68 天前
jianchang512
68 天前
100 个项目里需要重构的能超过 5 个吗,小概率事件谁在乎,快速齐活就完事了
james122333
68 天前
相信我 就算用的是静态语言 迭代几次也差不多认不得 因为习惯太差 习惯太差或者纯搞事的你是拦不住的 现在最讨厌的就是静态语言 开发太慢了 字典倒是无所谓 反正 vim 类似编辑器可以补全字串
CodeCodeStudy
68 天前
@DOLLOR #42 然而实践当中,java 很少遇到 double 是 NaN 的情况,如果需要表示没有值的话,用 Double x = null; 来表示即可。
只有 Math 跟数学计算有关的,才会得到 NaN 吧,如果是其他的,如果是参数不正确,通常会抛出异常,而不是返回 NaN 。
laduary
68 天前
CodeCodeStudy
68 天前
@CLMan #43 Invalid Date 算是一个设计失误了,如果 new Date()的参数不正确,应该是抛出异常或者返回 null 的,而不是一个 Date 对象,调用方还要判断 Date 对象的有效性。
james122333
68 天前
动态语言深入的是语言细节 然而整齐方便程度还得看封装
LuckyLauncher
68 天前
“现在国内的现状就是领导疯狂催,程序员疲于奔命,谁天天给你定义类型,认真命名”
你用 java 通篇给你 abcd 命名你就好维护了
DOLLOR
68 天前
@CodeCodeStudy
Double x = null 恰好体现了 java 一个天坑,没有 null safety 。

null 居然可以赋值给任意类型,方法的参数总要不厌其烦地判断 if (obj != null)。
特别的是那个 Boolean 类型,相当于有了 null/true/false 三个值,也得先判断是否为 null 才能在判断 true/false 值。这在别的编程语言看来,都是很荒唐的现象。
whileFalse
68 天前
什么适合职场环境,是发钱的人说了算的,不爽可以辞职
shmilypeter
68 天前
现在还给你写文档?能跑起来就不错了。以前虽然也流动性强但还是以年为单位的流动,现在以月为单位流动,迭代几次真的是连自己都不认得了。
mekingname
68 天前
先搞清楚什么是强类型语言什么是弱类型语言再来吐槽吧。Python 是强类型语言,JavaScript 这种才是弱类型语言。区分强弱类型,就看 1 + '1' 的结果。报错就是强类型,等于'11'就是弱类型。

你吐槽的其实是动态语言和静态语言的区别。
tsohgdivil
68 天前
Python 是强类型,动态类型
pengdachxx
68 天前
@davehandong 你是没有用现代的 ide

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

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

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

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

© 2021 V2EX