是否同其他语言相比, Java 程序员比起程序员更像是码农

2021-04-01 21:22:46 +08:00
 darksheep9527

先说一下这个题目里程序员和码农的解释(仅限本帖)

程序员:能够通过代码便利自己的生活,小到脚本,大到独立开发者,做出能影响到普通人的产品 码农:公司生产系统中的一块砖,组成部分之一,工业社会的螺丝钉

为什么会有这个想法

感觉像 github 上面受欢迎的国人开源,js,python 这些脚本语言会有更多小脚本,网页工具这些便利或者给现实生活带来些趣味的东西,java 项目则更多是生产系统中的框架脚手架,更底层和硬件结合的 c 和 c++则可以做出一些硬件 diy 的很有趣的东西

这个想法的一些悖论

事实上安卓平台的主要开发语言还是 java 和与 java 千丝万缕联系的 kotlin

或者说,java 是带来趣味更少的一门语言?也是后台的特性

5992 次点击
所在节点    随想
42 条回复
huyujievip
2021-04-02 09:05:13 +08:00
之前写 py,感觉有需求很快就能实现。自从入坑 java,感觉从冲锋枪换成了加特林,不过写起来更加规范成体系了,各种全局配置,开发幸福感增加不少。
love
2021-04-02 09:27:38 +08:00
@huyujievip py 如果没上静态检查还真不如 java,写起来是快但动态语言改东西太费劲,早期少花的时间全找回来了。

当然现在我脱 py 成 typescrip 粉了,集合动静态双方优点,前后端同一语言,语言本身也写起来比 py 舒服
bequt
2021-04-02 09:31:48 +08:00
java 很强呀,头秃。
Cyen
2021-04-02 09:37:33 +08:00
内卷严重
Craig37
2021-04-02 09:38:36 +08:00
做 IoT 的好像都没资格自称码农
grewer
2021-04-02 09:48:16 +08:00
开除码籍
Rwing
2021-04-02 09:48:43 +08:00
一般来说是的,java 实现一个功能通常要比其它语言写更多行的代码……
huyujievip
2021-04-02 09:52:49 +08:00
@love 是的是的,这就是我幸福感的来源之一。用多了 java 后,回到 py,函数多了,调用函数自动补全都不知道函数返回类型是啥,有点难受
bk201
2021-04-02 09:55:24 +08:00
程序员好像不应该有语言之分。
abersheeran
2021-04-02 11:19:54 +08:00
@huyujievip 现在越来越多的库可以自动补全了……比如我的,几乎都可以允许自动补全
Jooooooooo
2021-04-02 11:22:32 +08:00
你说盖大厦用的家伙肯定不是玩具啊
boris93
2021-04-02 12:02:04 +08:00
如果你把自己限定为 Java 程序员,那干啥都是码农
我靠 Java 挣饭钱,也不耽误我用 Go/Swift 写自己的玩具啊
tinyuu
2021-04-02 12:32:29 +08:00
都是进城务工的农民工
zagfai
2021-04-02 13:49:06 +08:00
@msg7086 Python 是很死板的语言??。。你确认有认真用过?


所谓的工程化,大 project,是过去 20 年的事情了。计算机语言和程序组织的发展过程一直在工程化和自由化中摇摆,并在近几年又有自由化的趋势。
no1xsyzy
2021-04-02 14:48:30 +08:00
@msg7086 Python 你可以随便实现 __*__ 魔法替换系统内置函数效果,死板?

Lisp 工程化也很好,就是语言有点多。
Haskell 的工程化是超过 Java 的,就是约束比较大,写法不符合直觉。
msg7086
2021-04-03 16:37:55 +08:00
@zagfai @no1xsyzy
看看会被别的 Python 程序员骂成啥样。

我说的不是语言本身的能力。Java 你也可以从头到尾反射个遍,问题是有人这么用吗。写 Python 的是不是宗旨是每件事都应该用一种最优做法?是不是显式优于隐式?这些信条最终是不是造就了死板的语言?你炫技,别人劈头盖脸来一句,这 pythonic 吗。

我承认我没有认真用过 Python,因为我在其他语言中写 block 的习惯,放到 Python 上根本没法实现,因为我发现 lambda 好像只能写成单行。就算是列表表达也只能表达很简单的句子。我自己的项目是不会用 Python 去写的,只有公司项目要写 Python 了才会照着别人的要求写出一样一板一眼的代码。Java 也是。
zagfai
2021-04-03 18:17:22 +08:00
@msg7086 我是 10 年+的 Pyhton 老鸟。。。不骂你,建议你先多学习学习。。。分析对比下各种语言,你所谓写的 Python 其实是 Javphon,包了 python 外壳的 Java 。我曾经维护过用 Python 写成的像 C++的工程,各种想死。。。很简单的功能复杂地实现了,大概是 1000 行的代码用了 8000 行这样,你说这些代码是 Python 代码吗?说是也算是。
no1xsyzy
2021-04-03 19:55:04 +08:00
@msg7086 库代码魔法多得多了。
pydantic 是 Python 最有名的库之一,目前基本上是序列化反序列化的事实标准,整个库基于 Metaclass 魔法,在 Python 语法解析下实现了一个伪 DSL 。
还有 sympy 和 ORM 这种修改云算符以表达运算关系而不是计算结果的东西。比如 Table.a+Table.b 不是把 a 和 b 加在一起,而是表达 “a 字段与 b 字段之和”,从而 ORM 中可以直接使用 Table.a+Table.b<42 来构造 WHERE 条件)
主要一点,Python 的逻辑并不是 worse is better,将复杂的脏逻辑封装成使用上更简便的库是被 Zen 允许的。可以说你想用 Python 写基本绕不开各种库自定义的伪 DSL 。
你可能写惯了很多 worse is better 的语言,误解了这些价值判断在 Python 语境下的含义。
(话说其实现在官方都在各种地方违背 Zen
msg7086
2021-04-04 06:29:46 +08:00
@no1xsyzy 其实你说的这些才是我觉得 Python 「应该有的样子」。
但是在项目上,工程上,去用这些黑魔法,还是算了吧,我反正不敢。
我自己写项目也会写 DSL,包括像你说的重载运算符实现各种高级语义。
我自己做的 workflow 项目,就是用 +() 和 |() 运算符来实现数据流定义的。

我平时是写 Ruby 的,天天用黑魔法,至少我可以随便放心用,不怕被人打死……
我们习惯于写 2.days.ago 或者 5.minutes.since,而不是 datetime.now() - timedelta(days=2)。
在 Python 里你们会把 Integer 类给打开然后往里塞奇怪的方法吗?应该不会吧。

我说 Python 死板也不是在贬低他。黑魔法越少,代码越容易读懂,这是 Python 被大量公司采用的原因之一,也是 Java 8 被大量公司采用的原因。(我司本来还在用 Java 7,连 lambda 都没有,我随便写一个闭包都要各种 hack……)
实际上,我一个不懂 Python 的人,都可以读写 Python 代码,本身就说明 Python 是一个相对死板的语言,可以让任何写其他语言的人都能快速上手。
同样,我一个不懂 Java 的人,也可以直接上手做 Java 开发,也可以说明 Java 是一个相对死板的语言。

有一点我要承认,我对 Python 的印象基本停留在十几年前,差不多 Python 3 还没出生的年代。如果现在 Python 对那些黑魔法黑科技更宽容了,那倒也是件好事,至少写代码的人会轻松很多。
no1xsyzy
2021-04-04 17:05:04 +08:00
@msg7086 你是从这方面说的话,其实可能死板的原因是 by implementation 而不是 by design 。大部分功能完全依赖纯 C 实现然后提供接口。比如 int 类根本不能塞东西,因为它是个纯 C 的类,最多是继承之后稍作修改,限制也很大,因为没有通用的实现覆盖,最显著的也不过是 T(2).days.ago ,其实那也根本不需要继承,直接写个 T 就成。典型的问题,dict 可以继承后改改,但是 __setitem__ 覆盖了以后并不能影响 update,因为 update 并不调用 __setitem__(反过来也不是)。

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

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

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

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

© 2021 V2EX