×

Loading...

学名fluent api/流式调用. 调试方法见link. 这些都是为parallel 服务的.stream 自带多线程,这才是stream的亮点.

In our project we are migrating to java 8 and we are testing the new features of it. On my project I'm using Guava predicates and functions to filter and transform some collections using Collectio...
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术 / 我对 nodejs express, nestjs, java spring boot 之类的了解不是很多,但感觉这两年 .net core 发展得远远比那些都好使(open source, linux support, docker/container/cloud friendly, features, performance, tooling etc),但市场占有率还是不是很好,不知为什么。
    • 那些是好东东,市场也大。现在很多年轻人都在用。认识一位大学读了一年就去做的合同工。
    • 前面两个是前端技术,跟.net能比吗?.net有两个缺陷:(1)不太支持unix,(2)出来晚了,java把市场抢了很多
      • express, nestjs 都是 server side fw;.net core fully support linux;.net 2002 年就出了,没比 java 晚几天。
        • 以这两个例子,展开讨论一下我说的生态圈。.net主要做网服后端,但是node还可以做前端,Java可以做android。企业的系统集成,对Java的支持就比.net多太多了。企业的数据平台又大多是基于Java。
        • .net core 2015还是2016才出来,而且刚出来的时候并不好用。
        • 一个本来的前端技术硬要去折腾后端,就像当年Java也要征服前端,搞了applet和GWT,结果都会一样,会碰得头破血流
        • Dot net对Linux的支持就是个笑话:不能说做出hello world就算支持!
        • .net core NOT fully support linux. Only limited linux version supported.
          • lol Linux distros 太多也是 linux 的主要问题之一。
    • 你觉得好使的东西,都是那些stack从开始就有的
      • 但你要是把他们对比一下,会发现 .net core 胜出很多。
        • 如果你对它们都不了解,怎么比较出哪个更好的?主要是你的bias。还有一个软件生态的问题,只有core好没有生态也没有用
          • 不是完全没有了解,但一直只了解皮毛,但最近仔细看了一下,发现很多东西比我想象的还要接近 --- 但感觉 .net core + c# 的实现更优雅便捷,才有此问 --- 我承认我确实有 bias -- 所以才希望听听其他对这几个 fw 都有很深的了解的人的看法。
            • 之所以优雅便捷,是因为.net是后来者,避免了先行者的缺点。但是这点优势远不足以挽回后发劣势。比如一个公司从架构到人员都不是.net体系的,转型意味着巨大的投入。还有就是.net的生态圈太小,一方面.net做不全,另一方面有vendor lock-in的风险
            • 优雅便捷在哪里,举个例子。java的framework很多,这对学的人是不好,但优胜劣汰,java spring现在就很突出。反过来微软就一个公司,程序员没积极性搞很创新的东西。有些东西就是吵,但失掉了先机。
              • 微软的问题在于,硬核程序员写个东西都不会把dot net当成第一平台。一直在微软上做的思维又很容易被套住,从开发环境到操作系统都是微软的,思维放不开
              • generic / await 之类的貌似 java 也都支持了,但 LINQ 还有 bool? 之类的东西貌似还有很多细节 c# 要比 java 方便(作为语言)。作为 fw,用 nodejs/express做项目简直就是 pkg 的灾难。
                • 不过算了,看了看这个帖子的跟帖,看上去还是 religion 之争,细节上没什么意义。
                • 我个人是更喜欢C#,但有时候不是语言之争,而是开发环境和framework之争。
                  • 要说 fw - 用 nodejs + express 基本就是裸奔,实现功能需要疯狂加 packages... nestjs倒是提供了基本功能,但基本上就是asp.net core功能了 --走到这一步干脆用 type safe的.net core 算了,重构无须提心吊胆... 槽点太多...
                    • 差不多嘛,dotnet不过是不管你用不用,预先都加上了。反正我觉得没有啥本质上的不同,实际应用就因为各种原因选择不同罢了。
                • nodejs,python,ruby都是要加pkg的,因为这些语言没有大公司支撑。选择pkg有时候会很麻烦,但这中解释型的语言优势也是很明显的。性能扩展通过C++。C#现在搞到8。0,一家公司说了算,抄了很多别人的东西,程序风格变化很大
                  • 那 java 倒也抄抄啊,连 js 都支持 await async 关键字了... 作为编程语言,java 比 c# 不思进取太多了 --- 问题是这两个都是做企业开发的,又不像 c...
                    • 一件事情有好几种写法,个人认为不是什么好事情。语言应该stable,能不加的东西就不应该加
                      • lol getter / setter / bool? 也就算了,await async 对 code 的简化是现象级的,"能不加就不加" --- 一路 callback? lol
                        • JavaScript这个语言的基础没有打好,据说是一个牛人七天创建的(上帝创世纪?)后来的人拼命打补丁,搞得这个简单的语言越来越复杂,一件简单的事情在语言级别有好几种做法,乘以framework,就搞出了十几种
                          • 这就是所谓的摸着石头过河,在开始的时候还好,后来麻烦越来越多
                          • 改的LISP. 本来就是个很先进的语言.
                            • 如果是个很先进的语言,需要在语言本身上打这么多补丁吗?Java语言诞生到现在语言本身只打了很少的补丁!
                              • Java 在向 Js学习. Java 8 以后的东西,好多都是学Js的.C#也在学js. 比如async/await
                                • java8之前诞生了无数的重量级framework,那些新东西只是是锦上添花,不是必须的,倒是造成了很多混淆。违背了unix的精髓:简洁重用等
                                  • 部分同意. 的确有些不是必须的,但是对开发效率确实有提升.另外 OO跟FP思路本质上就不一样,肯定有互相不顺眼的地方.
                                    • 按照java的unix设计思想,开发效率是IDE的事情,即每个东西只做该它做的事情,并且把它做好,你认为少敲了几个字符就是开发效率高了?哪IDE干什么?还有那些所谓的stream写法,看上去少写了几个字符,但一旦出错,要调试的时候你就知道头疼了!
                                      • 多线程调起来都头大,但是还是要用的.stream parallel 肯定比自己去处理错误要少吧. trade off吧.
                                        • 你理解错了stream style,它像这样:a().b().c(d()),想象一下如何调试吧!
                                          • 学名fluent api/流式调用. 调试方法见link. 这些都是为parallel 服务的.stream 自带多线程,这才是stream的亮点.
                                            In our project we are migrating to java 8 and we are testing the new features of it. On my project I'm using Guava predicates and functions to filter and transform some collections using Collectio...
                                            • 大部分应用都是框架或容器帮你管理多线程,你自己基本不用管,比如spring的transaction缺省情况下只能运行在单线程下。为了一个基本不用管的东西把自己弄得烦死!
                                              • 大数据处理就是必须的,这是Java的另一个主战场,可能比spring战场还大.
                                                • 不见得,比如aws的lambda,aws自动帮你管理几千个进程,你自己只要做好单线程的功能就可以了
                                                  • lambda单线程,node 比java 强.
                                      • FP 天然配合多线程,这是FP的优势.
                    • await/async 的本质还是block的。java里面有compeletablefuture,可以同时支持non-block或者block,看你怎么用。JS是单线程,所以需要await/async来模拟多线程。Java/c#本身就是多线程的。
                      • await/async 的 point 是让 asynchronous code (flow) 象 synchronous code 一样简单 -- 不是说有多线程就不需要 await/async 了。
                        • await/async 的本质还是block的,理解这点再讨论其他。”象 synchronous code 一样简单“只是模拟了多线程,但是并没有解决blocking的问题。
                          • 这里有一篇讲 await 和 blocking 的,你可以看看和你理解的一样不一样。
                            https://app.pluralsight.com/guides/understand-control-flow-async-await
                            • 我上面是指的js里的 await/async。
                            • c#引入await/async 确实是方便了UI类的应用,但是对后台任务同样需要借助Task才能真正efficient,用法上其实和Java completablefuture 几乎一样。可以参考ms async文档,Await tasks efficiently这段。
                              An overview of the C# language support for asynchronous programming using async, await, Task, and Task
    • 因为它只能在windows上跑,虽然这几年微软加大力度想让dot net跨平台,但服务器端基本上还是Linux的天下,而用Linux的人对微软有一种天然的敌意/鄙视
      • .net core 支持 linux 很久了 / win10 里都有 linux 很久了...
        • 但对于Linux原教旨主义者,这是披着Linux马甲的windows。这才是根源
          • lol 一边打一边骂:“让你不支持 linux! 让你不支持 linux!” (一会儿)“让你假装 linux! 让你假装 linux!” ---- 是这个意思吧? 🤣🤣🤣
            • 所以说“原教旨主义”。现在的学生已经好多了,10几20年前招来的学生,提起windows就是dark side。已经融入血液里去了。大陆来的码农因为盗版有理的关系,对微软无感,甚至有一点亲切😂
              • 呵呵,也不一定,俺们自从告别DOS进入Windows时代,就一直认为Windows就是个大黑箱,相比之下,DOS算是几乎透明的OS,用debug就能掌控于手,换到Windows后随着版本的不断更新庞大,黑箱里也愈加漆黑....
    • 说.net好的人都是一直在微软平台上而对open source技术接触很少的人。微软的东西被人看不起是很正常的。比如.net的web forms搞了很多年,最后还得抄MVC。那个sharepoint的思路更是一塌糊涂 +1
      • 从 2017 年起,ms 就已经是最大的 open source contributor了
        • 这个只是market宣传。微软现在做的一切都是为了不让程序员完全倒向Linux。 +1
        • 最大? 微软贡献了什么有价值的open source项目?
          • .net core, TypeScript, rxjs, visual studio code... windows 平台上的就不说了...
            • TypeScript是ECMAScript 2015的实现,vscode是based on atom. rxjs 就更离谱了
            • How We Use RxJS at Netflix 22nd September 2016 in London
              London JavaScript Community community cast. Ben Lesh:
            • .net core,除了微软产品集,有人用么?
              • 他提出一个问题,大家给他回答,但他其实要的不是回答,而是称颂。net。这说明题主并不想去学习别的生态系统。这种想法也很正常。 +1
                • 我本来的问题就是为什么 .net core 吸收了别的生态系统的优点,并改进了很多痛点,为什么还没得到应得的使用率。总的来说,大部分人对微软的偏见应该算是比我对 java / nodejs 的偏见要深一些的。另外,我一直在学习其他生态系统的。
                  • 微软2000年如日中天,那个时候就写程序的多半是从微软平台过来的,并不是什么偏见。微软对VB6和Foxpro,说放弃就放弃,多少公司的赚钱程序就是用它们写的。dot net也一样,现在对Basic的已经停了,哪天微软开始全面推另一种东西也是完全可能的
                    • 如果一个公司plan一个产品,它就得考虑这种生态系统的问题,一个产品代码至少几十万行,公司得考虑代码的稳定性,20年后程序员仍然能维护现在的代码
                  • 还是那句话,.net core才出来多久?按照微软的惯例,版本3之前根本没法用。
                  • 另外,我也和其他同时多个生态系统的人聊过 -- 所以我也能理解有时 pros/cons 是相对的,有时看使用场景/项目大小,还有时候 dev 觉得某个生态系统有 flexibility,但 ta 的 lead 或 arch 觉得那些 flexibility 会带来额外的工作。
                  • 不是偏见. 已经1202年了,linux 实用性已经不需要证明. windows都在上原生的wsl.
                    • 这个没否认啊 --- 我们公司 .net core 生产环境都是在 linux 上跑的 --- 我本来的问题就是微软都这么有诚意了,大家怎么还不用 lol...
                      • 因为可以直接用linux + open source啊. 完全不需要微软.
                        • 微软太贪多贪全,所以搞了很多垃圾出来,然后它就把它们全扔掉,伤了很多人
                          • 微软产品本身还是不错的.主要是贵+封闭.
                      • 如果以前一直没有用dotnet,为啥要换?
                        • 你要是以前用别的生态系统,那确实没必要换。但对 startup 公司来说 -- .net core 也开源,vscode 也可以在 windows / macos / linux 上跑...
                          • startup更是自由选择了呀,选啥的都有,为啥一定要选微软的东东?“也”而已,不是“只有”。
                          • startup第一条就是成本,更不可能用MS. MS也就是银行之类的传统大企业,有钱又不愿意自研的适合.
                            • lol 银行差不多都是 java -- 不过那个我完全能理解(历史由来)...
                              • 大家一阵围攻微软,但其实微软的市场也很大:很多小企业没有能力搞自己的软件,所以买一套office套件,用里面的excel和access做业务,这个市场原来很大,但最近被云端应用挤压
                                • office 365, ms team都是好产品.MS OA还是不错的,但是开发stack是另一回事.
                          • 现在的程序都跑在服务器上,一定要用Windows的原因只有一个,就是一个关键的东西只能在Windows上能用,比如买的一个DLL
                            • 不是一直在说 .net core + linux + docker 么,怎么又绕回 windows 了?如果 ms 还是只支持 windows server 我压根儿不会问这个问题。
                              • 你能确定各种功能Linux也能找的到?如果不能到时候写了一半还得转回windows
                                • Liux上net core写个简单的web server是行的,但如果要调用数据库,图形库要求第三方功能的就不行了
                              • 问题就是,一直对Linux环境有需求的,根本不在乎微软的东东,微软这个.net core在我看来是被逼急了,小手不停的挥,客官别走,他有的咱现在也有了,别走呀…… +1
                                • LOL
      • 跟着吐槽一下那个Sharepoint,估计是哪个三哥的showoff之作
        • 但那个和 .net core 没什么关系啊
          • 我没说和.net core有关系啊,顺着楼上吐槽一下啊
    • 因为.net core的基本就是把open source的产品抄一遍,集成度会更高,但是也更封闭。问题是大家已经用上open source的了,干嘛还掉头去用封闭的产品?
      • 因为 open source package 的自由度太大,有时对商业产品开发是灾难。
        • 从前是这样。MS的产品封装一直优秀,毕竟要收钱。 docker之前MS产品易用性吊打open source.但是docker/k8s以后,open source封装已经反过来吊打MS了。
          • nodejs 随便做个项目需要加近百个 package,安全性和版本兼容性的挑战不是用了 docker 就能解决的 -- 是两个层面的问题。
            • 没有node,有typescript 啥事?node 这么烂,微软为啥还要搞 typescript ?
              • 不是说 nodejs 不好,nodejs 还是有很多应用场景的。另外,就算没有 nodejs 也还有前端的 angular 和 react 可以用到 ts。
                • 没有node 就没有 angular/react了.
                  • node也就帮忙搞一些编译,部署等杂事,没有它也可以做,只是变成了技术碎片:开发一种语言,编译部署另外一种语言
                    • "编译,部署等杂事"......
                      • java有段时间在把其他语言比如jython,groovy,jRuby和scala编译成java字节码,这里编程语言不是java,编译语言是java,你怎么解释?
                        • Java并不需要 jython和scala. 他们选择编译成java 字节码是为了执行方便.
                          • 所以我可以用java语言把typescript编程成java字节码,技术上完全可行,然后用java部署生成的代码,也没有任何技术问题,也可以编译成javascript文件,直接运行在浏览器里面
                            • java 编译成 javacript文件? 搞清除什么叫"编译"再说吧.
                              • 我是简略写法,如果你不懂,我就写全吧:用java语言做一个typescript编译器,用java语言做一个typescript项目管理器和部署器
                            • 可以用跟真正用是两回事. java 再牛,遇到GUI就抓瞎.
                              • 好用和能不能是两回事,我在讨论你的能不能问题:你说没有node就没有angular!其实angular跟node没有任何直接关系!
                                • java 能不能GUI ? 肯定能. 但是Java GUI已经死了,不好用最后就只能被淘汰.
                        • 忘了说还有最近很火的kotlin,也是编译成java字节码
                          • 说明java 势不可挡,周边都这么火. :-)