不少资深人士写代码的时候还是各种 for 循环。
Lambda 也不用,还用各种匿名内部类。
还有 JDK8 的时期时间库,很多人还是在用 Date ,Calender 。现在的 LocalDate, LocalDateTime, YearMonth, ZonedDateTime 做时间计算真的特别直观简单,但是他们就喜欢用 Date ,简单的计算就用毫秒加减,复杂点的计算就先换成 Calender ,完事后再转换回 Date 。
甚至 JDK7 的 try-with-resources 语法我都感觉不少人都不知道。
所以,现在“JDK8 是主流”这句话是不对的,而是“JVM8 是主流”才是对的。语法的主流应该是 J2SE 1.5 。
101
binge921 2022-07-12 10:21:03 +08:00
有没有一种可能 你定义的”很多人不会“ 只是来源于你自己的感受 如果这话换我来讲 我想说 我身边的都会
|
102
hahastudio 2022-07-12 10:21:06 +08:00
一整页都没看到一个 code block
|
103
kett 2022-07-12 10:24:00 +08:00
一个学不学的问题而已,一些人至于戾气那么大吗?跟吃了枪子似的,不嫌累吗?。
|
104
zw1one 2022-07-12 10:43:26 +08:00
如果用旧的写法符合代码规范、按时按量完成工作、应用质量也没有问题,那为啥要换。学习成本和收益的问题罢了
|
105
abcd106 2022-07-12 11:00:10 +08:00
|
106
windyboy 2022-07-12 11:15:08 +08:00
@coetzee 电车要取代油车还有很长的路。油车已经经过百年的发展
现在的国产电车绝大多数都没有经过换代的考研。 应用程序用更新的 SDK 不带表程序就多好。 SDK 再牛也得运行在操作系统上。 所以从整个程序构成的体系上,跟我讲 JDK 先进代表水平高? Rust 也才刚进入 Linux 内核,Java ? JDK ?路还很长 |
107
coetzee 2022-07-12 11:17:53 +08:00
上帝视角开了以后,啥都不行。先进性是用每一代产物来表现得,你非得拿着历史说事儿,我只能说,大清国无敌!
|
108
fredli 2022-07-12 11:19:04 +08:00
放弃学习了,也没什么
|
109
coetzee 2022-07-12 11:20:43 +08:00
还有用成熟说事儿的人,任何东西都在进化,不能适应环境进化了,就是衰退的表现。我能看到楼上老哥就是老开发,巧了,我也是老开发,老开发就爱稳定!就爱跟你讲 Linux 这么稳定,结果大多数还不是专业内核开发,连 CPU 架构都能革新,为什么他们纠结稳定呢?他们的“稳定”对谁有利?稳定谁不知道是好的,但是他们讲的“稳定”对谁有利呢?
|
110
coetzee 2022-07-12 11:22:51 +08:00
老开发,懂行。老开发见识多,经验丰富,真牛,JCP 整体团队的人都没你们牛逼。
用你们的话术,限定上下文的讨论,你们管这些叫不稳定,下结论:JCP 垃圾,JCP 你们要走的路很长呢! |
111
windyboy 2022-07-12 11:25:45 +08:00
@coetzee 好吧,你伟大的 JDK 程序不需要操作系统
看不上 linux 没问题,随便挑一个操作系统,有 JDK17 开发的? |
114
coetzee 2022-07-12 11:27:32 +08:00
这曲解和戴帽子的聊天方式,真的让人难受。用大多数的人说法就是,想学就学,不想学就算,给别人不停的灌输在自己的语境之中讨论,有意思吗?
|
115
keymao 2022-07-12 11:29:01 +08:00
笑了。 我就不明白了,编程语言不是用来做事的么。 大型软件很多都不会用一个语言或工具来完成的。 用 WPF 做外壳,用 c++做算法,用 java 做后端,用 python 去粘合各模块都是很正常的事情。
就为了个新特性都能说两页,是不是工作不够充实? 想用新特性 新 jdk 可以啊, 当老板自己说了算了,每年都可以换新版本,自己说了不算就歇歇把 好吧? 何苦给自己找不痛快。 |
116
windyboy 2022-07-12 11:29:15 +08:00
|
117
Gmzx 2022-07-12 11:29:53 +08:00
@coetzee 稳定在大多数企业内高于一切,企业视角和员工视角是 2 个相反的方向。老 Linux 跑得好好的,也稳定运行的,你为什么要去升级一下内核?老的服务器跑得好好的,你非要去断电升级 CPU 吗?老的东西如果正常在运行,那就一直放在那运行,谁也别去乱动,新的东西,如果有额外的人力和精力,也不是不能用新技术,但是如果出了问题,不稳定最后还是技术 leader 背锅。
|
118
coetzee 2022-07-12 11:31:18 +08:00
不在一个语境下,没法聊天。先理解下什么是先进性,不然最后拿数学和物理跟我说,为啥数学定理不用新的,非要用老的
|
119
windyboy 2022-07-12 11:31:22 +08:00
|
120
coetzee 2022-07-12 11:32:15 +08:00
鸡同鸭讲,还有人在用老板心态讨论,你不想看别看,你自己忙就忙代码,上论坛干嘛,上论坛不就是吹水讨论吗?
用你爱用的老板的话讲:写完代码了吗?在这上论坛! |
122
aheadlead 2022-07-12 11:33:33 +08:00
有没有一种可能,那些老旧的 API 并不是制约你手上项目发展的瓶颈?
|
123
coetzee 2022-07-12 11:33:52 +08:00
大家在聊语言特性,你跟我说操作系统,Java 写操作系统,另外,底层也是有定义的,如何定义底层。语言和底层混到一起来说?
|
124
UIXX 2022-07-12 11:35:21 +08:00 22
我用 Java 少,用 C/C++比较多,不过胜在时间长,也算是个资深 C 工。
实话就是 C++14 往后的高级特性真的没怎么专门学习过,个人对此是有过总结的: 1. 年龄大了。这是最根本的原因,年龄大了意味着 - 精力不再旺盛,续航能力变短。 - 注意力容易被家庭、人际关系分散。 - 记忆力变差。 2. 对待工程的观念在转变。 - 意识到编码在整个项目,甚至在具体的软件工程中都是很小的一环,程序员能做的事很渺小。 - 新的特性并不能给项目带来实质提升,反而会带来额外的学习成本。而这个学习成本性价比很低。 - 经验的积累使得一眼看去就知道哪些是语法糖,哪些是实验特性,大多数都是“纯记忆项”,确实要用到的时候翻工具书就好了。 3. 对人的看法在转变。 身边的人都在卷,不卷意味着落后; 什么听起来新什么听起来好一股脑全学了; 写代码力求最短最简洁; 做注释 /文档 /PPT 怎么高大上怎么来。 刚工作的时候我就是典型的“IT 愤青”,A 写的代码指针没释放,B 的模板写得不好,我都会“拉到”贴吧 CSDN 看雪引嘲以博得一波优越感。 经过了几年的共事,我发现自己才是纯纯的小丑。有些不写注释的年轻仔正暗暗复习考研、还在用老掉牙技术的磨洋工跟我们分享他女儿的录取通知书、常常被我们嘲讽混吃等死的经理辞职回去经营自家餐厅。你说他们编码技术吧,也就那样,别指望能跟上现代 IT 发展的节奏。但同时他们好像一样过得很好。他们同时务正业,同时又不务正业,问题出在哪里? 我想,是我的世界太小,价值观太单一。 某人虽然在编程上面不学习,但他在你看不见的地方学习并获得提升。 我在学习编程,他在钻研科学; 我在学习编程,他在经营家庭; 我在学习编程,他在创业管理; 一叶障目,不见泰山。 所以我对“持续在编程道路上不懈”者表示赞赏,同时因为人的复杂性,也不会轻易地对“不会使用高级语法特性”者下判断。因为那是另一种的“何不食肉糜”。 |
125
windyboy 2022-07-12 11:37:54 +08:00
@coetzee 我还以为你用 jdk17 开发了什么 NB 的操作系统,秒天秒地秒世界
原来知道 java 再 NB 也不过老老实实做个顶层应用罢了 看清楚自己的地位,学个 jdk 新特性就觉得高人一等了?学个新技能就可以淘汰老的了? 我只是告诉你,新特性要运行,都在大量依赖老技术。学了新语法就开不起老语法了?适可而止 |
127
ccppgo 2022-07-12 11:39:48 +08:00 1
2021 年开始写 java 的表示。。 没有 steam , 没有 lambda , 没有 java.time 包, 可以说是差不多不会写代码了,
|
128
coetzee 2022-07-12 11:41:27 +08:00 4
@windyboy 老哥,从来没有人觉得会新特性就高人一等,你想学就学,不想学就算了,但是也别教别人别学就行,你别回复我了,咱俩聊不到一起去。
另外,您千万别敏感到别人一个特性就是新技术的境地,另外也别敏感到会了新技术就动了您什么蛋糕的境地,大家各学各的,想学就学,不想学就算,何必呢上纲上线说别人高人一等呢?更来一句淘汰别人,没人想要淘汰谁,也没有人要伤害您,别那么敏感,搞技术时间长了,多看看股票,多看看房子,生活中还有很多别的事儿,从来没有人想跟您卷,大家都是做技术的,开放包容一点,不好吗? 另外,别回复我了,真不想跟您聊了 |
129
yava555 2022-07-12 11:43:13 +08:00
假如十年后 JDK27 出来了,不知道楼主还能不能追得动。 想当年我也追过 JDK Release Notes, Java 白皮书之类的。
1. 花拳绣腿会了更好,不会也无妨,JDK 只是个工具,熟悉 JDK8 就足够让你写出性能卓越、可读性良好、设计优雅的作品了。 2. 编码多年视野变得更广,时间更宝贵,研究新特性反而不那么划算了。 有这时间,宁愿去学点更基础的底层技术。 3. 至于楼主说的开发效率,相信老程序员有一堆的经验和技巧去解决这个事情。 另外我也不觉得用 for 循环有什么不妥的,我写代码会花很长的时间构思结构、可读性和命名。代码敲得慢一点,好让大脑追的上 : ) |
130
coetzee 2022-07-12 11:44:28 +08:00
一个 lambda ,这么多人这么敏感,回复这么多,有点没意思了,想学就学,不想学就算了,多看看国外的知识,多看一下更先进的理念和技术总归是好的,我多加一句(如果你不想看,也不用敏感,人家看过的也不会如何您,大家都是过自己的生活,学自己的技术,不用动不动去《比》,比真的害死人了,你爽,你分享,你不爽你分享,何必非要在你会我不会,我会你不会这事儿《比》一下呢),如果非要比,比比谁更高效率,比比谁加班更少,比比谁更幸福,比这个,可以吗?
|
131
liyhu 2022-07-12 11:44:34 +08:00
不好阅读,不喜欢
|
132
goalidea 2022-07-12 11:47:56 +08:00
活到老,并不能学到老
|
133
Leviathann 2022-07-12 11:52:12 +08:00
lambda 是一个很本质的东西,也是应对并发的利器,连这个都无法理解的,很难说能设计出什么值得一提的架构
况且八股文里喜欢扯的 concurrent hash map 大量 api 都是基于 lambda 的 |
134
liprais 2022-07-12 11:53:10 +08:00
stream 跑的更快么?
|
135
Suddoo 2022-07-12 12:00:09 +08:00 via iPhone 2
|
136
felixcode 2022-07-12 12:16:27 +08:00 4
1.任何在我出生时已经有的科技都是稀松平常的世界未来秩序的一部分
2.任何在我 15-35 岁之间诞生的科技都是将会改变世界的革命性产物 3.任何在我 35 岁之后诞生的科技都是违反自然规律要遭天谴的! |
137
Suddoo 2022-07-12 12:17:26 +08:00 via iPhone 1
本来就是新技能淘汰老技能
但是有些“资深”程序员,占着位置,故弄玄虚,顽固不化、言必称“底层”、结果你看看这帮人除了会调几十年前的 API ,有做出东西来吗? 这么喜欢底层,干嘛用编程语言呢、打纸带编程多好啊,掌握核心科技、永远不会过时 低调点也就不说啥了,结果还整天在哪儿叫,资本家输送这帮人的时候、叫得比谁都厉害 |
138
windyboy 2022-07-12 12:20:59 +08:00
我反反复复强调,程序的品质有个主要因素。
如果引入新 jdk ,新特性对品质有提升,当然要用,但不是说用了新特性,品质就一定能提高 我要求的品质,反而成了拒绝学习新技术新知识的代表,只能一脸尴尬。 站在 JDK 的角度,引入新特性希望 Java 程序品质提高,但也有带来新 bug 的风险。 站在应用程序的角度,新特性就一定品质好?旧程序就一定品质差?未必 |
139
n18255447846 2022-07-12 12:25:29 +08:00
有算法思维的程序员一般都喜欢用 for 循环
|
140
aguesuka 2022-07-12 12:31:17 +08:00 1
@n18255447846 有那种 ADT 都不懂的人谈算法的画面感了.
|
142
WIN2333 2022-07-12 12:40:10 +08:00
@coetzee 麻烦熟读请尽量让自己的回复对人家有帮助,你在这愤青扯一堆是为了找认同感吗?不想写 Java 觉得垃圾就不写啊,喷个什么劲呢,阿里虽然是很傻逼,但你的回复明显是非常莫名其妙,前后有关联吗?请问下我可以建议你把《语文》学一下吗?
|
143
coetzee 2022-07-12 12:43:13 +08:00
@WIN2333 阿里傻逼吗?至少我没表达阿里傻逼。你要硬这么表达,那是你的事儿,别扯我。
愤青的是你吧,Java 垃圾么?我从来没觉得,包括 PHP 和 JavaScript ,我觉得都挺好,你的语文才有问题吧?这聊不开了,开始搞人身攻击了吗? |
145
Mirage09 2022-07-12 12:47:09 +08:00
哈欠 吵了一天还没吵完 真是闲
不过我猜回复里有大型项目一年以上工作经验的不超过 10 个 你站平均水平 |
146
Suddoo 2022-07-12 13:08:28 +08:00 via iPhone
作为一个“资深”程序员、还写 Java ?那都是花拳绣腿、语法糖,哪有写汇编厉害,写汇编才是底层、永远不会过时、而且效率更高,对于 xxxx 优化得更好、在 xxxx 上比那堆语法糖效率高 1 千倍、在 xxx 场景下,Java 直接嗝屁了,还得靠我们
我们“资深”程序员写了几十年汇编了,积累了无数的经验,现在这帮后生搞出一个 Java ,一下子把我们几十年的经验干掉了,那我们岂不是要失业? 怎么办?就说他们是花拳绣腿、再吹一吹自己过时的经验,反正他们也没用过,有些没见过世面的肯定能唬住 |
147
bk201 2022-07-12 13:13:02 +08:00
最终编译优化后的代码一样吗?一样,那就没啥意义,怎么爽怎么来。
|
148
TWorldIsNButThis 2022-07-12 13:26:14 +08:00 via iPhone
@bk201 这还真不一样不一样 lambda 编译后是 invokedynamic ,可以说是 jvm 的秘密武器
后面几个版本甚至把字符串拼接都迁移到了这上面 另外看编译产物也有点莫名其妙,Java 泛型最著名的就是它类型擦除的实现,那你是不是所有 list map 都用 raw 类型? |
150
xsen 2022-07-12 14:14:56 +08:00
路过。就干看热闹,大家努力
|
151
Joker123456789 2022-07-12 15:03:23 +08:00 1
Lambda 的问题,道理很简单,因为差别真的不大,多了几个字符而已,而且如果是复杂逻辑,我相信你也不敢用 Lambda ,肯定是老老实实去建一个新的实现类了。
stream 的问题,谁会在内存里 操作大量的数据? 我敢说大部分人 连在内存里操作集合 都不一定需要。但是话又说回来了,需要做这些事的人,眼睛也不瞎吧? 他们能看出来 stream 的方便。 time 包的问题,跟 stream 一样,有需要的时候自然就用了,没人会舍近取远。 你是不是看了太多老项目的代码,质疑他们为什么不知道改一下? 如果是这样的,你应该去问你团队里的人,而不是来这吐槽广大开发者。 如果你只是来秀的,那你成功了。 |
152
zek 2022-07-12 15:51:57 +08:00
Lambda 可读性太差
|
153
xsqfjys 2022-07-12 16:01:04 +08:00
能保持持续学习新东西的人才是少数捏
|
154
jinweijie 2022-07-12 16:04:18 +08:00
来写 C#,这些都是玩剩下的
|
155
Coelacanthus 2022-07-12 16:16:34 +08:00 via Android
Java 还是好的,你要不要看看隔壁 C++
|
156
z1113456051 2022-07-12 17:09:36 +08:00
就时间相关的代码,项目里有的话,最好跟着写。
|
157
lakehylia 2022-07-12 18:00:46 +08:00
说到底,领工资的,都是面向 KPI 编程。一般 jdk 版本在项目开始的时候就已经确定了。。。升级版本只有确实性能提升能给老板带来收益才回去做
|
158
liprais 2022-07-12 18:04:31 +08:00
楼主是觉得这个快
public boolean test1(Params p) { return p.a.stream().anyMatch(i -> Objects.equals(i,p.check)); } 还是这个快 public boolean test2(Params p) { boolean b = false; for ( Integer i:p.a) { if (Objects.equals(i, p.check)) { return true; } } return b; } |
161
ffkjjj 2022-07-12 19:19:37 +08:00 via iPhone
楼上还有人 steam 的😂. 我会用 stream, 但感觉 stream 写起来辣眼睛.
|
162
zhazi 2022-07-12 19:40:27 +08:00
倒立搬砖很叼吗
|
163
voidmnwzp 2022-07-12 20:12:27 +08:00 via iPhone
还不是因为 jdk 1.8 之前堆了这么多狗屎时间类,要真狠点干脆直接移除所有乱七八糟的时间类库 重新统一设计下
|
165
auh 2022-07-12 20:46:53 +08:00
趁年轻,多折腾点技术。后面有两条路。一条是,你会和他们一样,一条是你真的超神了。
你自己选。别再这里浪费时间。 |
166
FrankAdler 2022-07-12 20:56:23 +08:00 via iPhone
一帮人天天吵着不好用嫌麻烦,有人做了新功能,一帮人用上了,一帮人觉得语法陌生不想学批判看不懂会了又怎样
|
167
godfray 2022-07-12 22:19:43 +08:00
stream 和 lambda 用起来还是很爽的,可是公司数据库是 DB2 ,并不支持 LocalDateTime 的样子,碰到要做时区转换,用 Calendar 是真的会谢
|
168
Asimov01 2022-07-12 23:48:33 +08:00
我单方面宣布,#124 楼的大哥终结此话题。
你们不要再打了.gif |
169
Bingchunmoli 2022-07-13 00:14:39 +08:00
1. date 类比较方便,熟悉,time 包下的需要面向百度
2. dateUtil 有现成的类库 3. 支持 time 需要一些变动以类库支持, 例如 ObjectMapper om.registerModule(new Jdk8Module()) .registerModule(new JavaTimeModule()) .registerModule(new ParameterNamesModule()); 详见 https://github.com/BingChunMoLi/quick/blob/master/moli-quick-redis-spring-boot-starter/src/main/java/com/bingchunmoli/autoconfigure/redis/config/RedisSerializerAutoConfiguration.java 4. 大多数业务无跨时区需求,然而 time 包下的需要传入系统时区,对于不熟悉的来说增加了不确定性(某运维未设置时区导致问题,谁的责任) 5. stream 我不反对 我觉得挺好,除了 debug 要麻烦点,写好之后以及熟练后的可读性较好(leader 说我可读性差,我只是个菜鸡,用了最多的 list 对象用 id 做 map key 转换) |
170
somersames 2022-07-13 00:25:44 +08:00
我周围确实也有不少 80 后程序员不懂 Stream 、不懂函数式编程、不懂响应式,但是这并不妨碍他们的生活。
他们那一拨人或多或少,在大城市都有了自己的归属,每天上下班开车,偶尔讨论下股票和基金,周末带娃到处逛逛。年纪大了也不和我们卷了。 现在自己也工作几年了,技术更新迭代的速度太快了,也认清自己不是一直搞技术的料,说不定我现在的代码以后也会被后浪喷,所以也慢慢佛系了。 如果自己喜欢技术,就多找同类人沟通就行了,对待他们没必要一直吐槽,毕竟他们大多数有房有车有生活,也挺让我羡慕的。 |
172
sjzjams 2022-07-13 08:59:56 +08:00
资深程序员 不是会与不会,而是用和不用
|
173
NeoZephyr 2022-07-13 10:46:21 +08:00
虽然我觉得 scala 里面的各种 map filter 很好用,但是很讨厌 java 里面的 stream
|
175
twofox 2022-07-13 12:03:34 +08:00
@nothingistrue Stream API 可读性不是更差么?
|
176
zr8657 2022-07-13 13:48:14 +08:00
我认为对普通程序员来说学习的内容是有价值阶梯的。
年轻时学代码可以加工资,中年时有了一定的财产和人脉,这时候学代码的提升对个人和家庭来说不划算。 |
177
qwerthhusn OP @twofox allMatch anyMatch filter dropWhile takeWhile findFirst findAny
|
178
qwerthhusn OP @zr8657 你认为可读性更差说明你不熟悉这玩意,当你熟悉之后你会发现比那种层层嵌套的 for 循环要更易懂
|
179
qluuu 2022-07-13 15:58:35 +08:00
时间类倒是早就替换了。属实好用但是推行到团队下去是真的困难
|
180
Stendan 2022-07-13 16:07:34 +08:00
我现在也用 forr 啊?有时候 forr 速度不比所谓的 stream 差,遇到有的爱用 stream().parallel()跟我说为啥变得更慢了,我寻思你真的了解了 parallel 还是纯粹瞎用-,-
|
181
aguesuka 2022-07-13 16:08:55 +08:00
日子人收收味, 学习降低心智负担的特性是节约生命, 和你最喜欢的岁月静好不冲突.
事实上如果像我这样有一份闲地发慌的工作, 你会发现把代码写好, 或者说创建一个美丽的事物其实是人类的第一性需求. |
182
ygcaohan0 2022-07-13 17:55:27 +08:00
代码过于简介,可读性会变差吧
|
184
zhuangzhuang1988 2022-07-13 21:44:27 +08:00 via Android
@Stendan
@WIN2333 @qwerthhusn 并行讨论 effective java 有谨慎使用 关于可读性的 effective java 也有 有时候 stream 真不如 for 不能无脑 stream 更不要说 java 的 stream 比 c# scala 设计得要差点意思(也可能是为了兼容) |
185
twofox 2022-07-14 10:54:32 +08:00
@qwerthhusn 不敢苟同,里面还会放着各种 lambda ,双冒号双括号,filter ,Collectors 等
|