以后我们都会是 Java /kotlin 程序员吗?学了下 kotlin,感觉 kotlin 啥都能干 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
popil1987
V2EX    编程

以后我们都会是 Java /kotlin 程序员吗?学了下 kotlin,感觉 kotlin 啥都能干

  •  1
     
  •   popil1987 2022-09-10 09:22:36 +08:00 6047 次点击
    这是一个创建于 1127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Android 原生开发:不用说了,标配,特别是 jetpack compose 推出后

    Android 和 iOS 开发:kotlin multiplatform mobile.看了下原理是界面和硬件交互还是原生开发,公共的库可以用 kotlin 开发,什么 api 请求啊,ai 算法啊都可以只实现一套,swift 可以直接引入,不需要写 wrapper

    桌面开发:jetpack compose for desktop ,是 java 的 swing 做底层,这可移植性不用说,其他库有 kotlin multiplatform

    web 开发:kotlin/js,转译到 js 。另一点是和 js 的 interop 也很好,可以很简单的引入 js 生态。我看到官方支持很多 react 生态的 lib,加上 jetpack compose for web 或 jb 自家的 ring ui

    服务端:这生态现在和 java 一样好,还有个 ktor 和 web 端,移动端都能 full stack 公用代码

    数据科学:jupyter notebook 加上 kotlin kernel,有能替换 python pandas numpy 的库,而且很好,大数据方面 java 肯定完爆 python,python 很喜欢,但 kotlin 是真香

    担心:没有深入进去,不知道有啥坑,java 生态倒是杠杠的。被 JetBrains 的 IDE 支配( vim, emacs 确实打不过 idea )

    fleet 出来以后对我们这种纯 linux 下工作的人来说是真香,不好忍住

    个人有时间还是要学习下小众技术,不为别的,小众技术啥生态没有,有利于学习底层知识

    33 条回复    2022-09-13 15:15:11 +08:00
    popil1987
        1
    popil1987  
    OP
       2022-09-10 09:27:18 +08:00
    还想到一点不足就是正确性还不能和 haskell rust 相提并论,如果不论学习曲线的话。在我看来,正确性意味着少测试,少 debug ,生产效率
    内存问题不怎么算问题
    Leviathann
        2
    Leviathann  
       2022-09-10 09:40:47 +08:00 via iPhone
    目前用来写后端
    没什么问题
    MakHoCheung
        3
    MakHoCheung  
       2022-09-10 09:49:56 +08:00   4
    确实 Kotlin 涉及到了很多的方面,但是除了安卓开发,其他都是非常一般甚至多此一举。
    我只说跟 Java 比,如果是 Java 8 的话 Kotlin 绝对非常香,但是跟现在 Java 19 比就没啥用。除了扩展函数和尾随闭包,Kotlin 有的,比如数据类、协程啊,Java 都有,甚至模式匹配还不如 Java 的。
    fox0001
        4
    fox0001  
       2022-09-10 10:03:19 +08:00 via Android
    按目前的发展来看,Kotlin 只是 Java 的“跟屁虫”。没贬义的意思,只是想说,Kotlin 要平替 Java ,只能跟随 Java 发展。
    agagega
        5
    agagega  
       2022-09-10 10:20:05 +08:00 via iPhone
    当年大家也是这么想 Swift 的
    dcsuibian
        6
    dcsuibian  
       2022-09-10 10:54:24 +08:00
    问下隔壁什么都能写的 js 吧
    shot
        7
    shot  
       2022-09-10 10:57:38 +08:00   1
    感觉 Kotlin 是我用过的最舒服的语言。最喜欢的几点:
    1. 语法糖: null-safety, lambda, `val`, standard library
    2. coroutines
    3. 设计好 DSL ,写代码犹如写文章
    4. 全端开发

    我最近一次写 kotlin 代码大概是两年前,印象中有这么一些劣势/限制:
    1. 语法过于灵活很容易放飞自我, 普通开发者难以消化大量的 let/apply/run/also 和 filter/flatMap/associate/groupBy
    2. 除 Android 和 backend 外,其它端的工具/生态/社区还是不够完善,能用但不够好用
    3. 编译速度慢

    基于以上因素,我建议只在独行侠项目中使用 Kotlin 。
    如果能在团队中成功应用,也许需要是业界 top 10% 精英组成的超级团队。
    hankli
        8
    hankli  
       2022-09-10 10:58:37 +08:00
    3 楼+1
    搞不明白宁愿学 kt ,也不愿意升级 jdk 版本,是因为什么
    hsfzxjy
        9
    hsfzxjy  
       2022-09-10 11:40:50 +08:00 via Android
    kt 想撼动 python 在机器学习的地位没这么简单,主要是生态基本是围绕 python 开发的,而且学术界的人根本不想换
    iseki
        10
    iseki  
       2022-09-10 11:46:26 +08:00 via Android
    @hankli 即使是最新的 Java ,特性和 Kotlin 比也有很大差距。更别说很多项目不让你动 JDK
    zmxnv123
        11
    zmxnv123  
       2022-09-10 12:04:38 +08:00 via iPhone
    公司用的话没啥问题
    就是写自己的项目不想带个虚拟机,kotlin native 连个反射没有。
    HugoChao
        12
    HugoChao  
       2022-09-10 12:15:38 +08:00
    js 好像也啥都能干,前后端,多平台应用,还能 tensorflow 呢
    popil1987
        13
    popil1987  
    OP
       2022-09-10 12:22:53 +08:00
    安特的各位,不是杠大家,就是讨论,本人是个 java hater 但是通过最近对 kotlin 的了解,并且在各端都实验了下,确实震撼比较大。
    @MakHoCheung 对大公司,大家分工,各自做好自己的事就好。对于独行侠或者小公司可就太有意义了。而和 java 相比的话,web 、桌面、数据科学,双端开发 java 可就比不了了,java 行的 kotlin 也行,kotlin 行的 java 不一定
    @fox0001 你行的就 call 你,你不行的你想想办法吧----kotlin 对 java 说
    @agagega kotlin 是真做出来这些东西了,并且受到 google 支持
    @dcsuibian 隔壁 js 是真真的不行你就看 typescript, rescript, purescript, elm, ghcjs, clojurejs.......都想革 js 的命。RN 个人感觉比不了 flutter ,flutter 能直接 call c 接口,意味着能很好的跟 rust 配合,RN 移动端和桌面端只能各个平台的语言配合,数据科学也不行,当然了,小程序们是必须 js 的
    @shot 我就是独行侠,学了好多编程语言,多学一门编程语言新的概念并没有多多少,主要作为 java hater ,之前不太了解 java 一些著名的库,底层知识不够,先来发帖看大家意见
    @hankli 生态的问题,不是 java 语言本身的问题
    @hsfzxjy 市场问题,tensorflow 和 torch 只是被 python warpper 了,kotlin 也能 wrapper,向量的计算至少 kotlin 不太担心自己循环
    Jirajine
        14
    Jirajine  
       2022-09-10 12:23:00 +08:00   1
    swing 支持 wayland 遥遥无期,我桌面上 jb 系 ide 是唯一需要跑 xorg 的程序了。
    humpy
        15
    humpy  
       2022-09-10 12:27:58 +08:00 via iPhone
    这东西就是看起来很美好,实际还不成熟,你实际用 kmm 写个复杂点的库就知道了…尤其是在 ios 里用协程,老的内存模型恶心人,新内存模型 gc 又卡得爆炸
    s524256521
        16
    s524256521  
       2022-09-10 12:28:36 +08:00 via Android
    我现在就是左手 Kotlin ,右手 Swift ,中间 Python ,八端覆盖,那感觉呢,就是拥有了全世界。
    s524256521
        17
    s524256521  
       2022-09-10 12:30:19 +08:00 via Android
    @s524256521 拳打小程序,脚踢 Flutter
    Jooooooooo
        18
    Jooooooooo  
       2022-09-10 13:07:00 +08:00
    啥都能干的语言不一定是好事.

    语法糖多一般来讲都是坏事.
    rb6221
        19
    rb6221  
       2022-09-10 13:56:55 +08:00
    关于 jdk 不能升级的问题,我可以分三大类(姑且把比例定位 60% 30%和 10%吧,只是为了做成金字塔模型,数字并不准确)
    60%是政治因素,比如所谓的“屎山别动”、“动了出问题你负责”、“能跑就行”、“老大说别动,他只看得懂老风格的代码”。这些可以无脑升级,所以也可以无脑换 kt
    30%是技术因素,比如“框架只支持 jdk7”、“库只支持 jdk7”、“迁移成本高”等。这些花一点工夫也可以升级,但是不一定能无脑换 kt ,看框架有没有平替
    10%是架构因素,比如某些大厂有定制的 jdk ,自己魔改了源码,或者自研的框架(注意是自研,一般这类框架没有平替)依赖老版本 jdk 。这些就没法升了。这类应该暂时换不了 kt
    这样看来似乎有一多半是可以换 kt ,但是别忘了成本和收益比。换了有什么好处?这才是支持你换的动力。
    在我上面说的 60%部分,可以说换了并没有什么好处,因为他本来就是屎山,屎山是不会在乎以后维护有多方便、开发有多爽的,更不用说那些来自老旧势力的阻力了,这也可以视为负收益的一部分。
    israinbow
        20
    israinbow  
       2022-09-10 14:04:44 +08:00
    > fleet
    我收到了 fleet 的内测邀请, 下载了 Linux 版本的, 但是程序根本无法运行启动, 还是别报太大希望了.
    duke807
        21
    duke807  
       2022-09-10 14:10:57 +08:00 via Android
    我随便说一个,你看看能不能干
    python 的 cocotb ,fpga 和芯片仿真
    dqzcwxb
        22
    dqzcwxb  
       2022-09-10 14:12:12 +08:00
    @MakHoCheung #3 其他语言有的,java 都会有(抄)
    lllllliiii
        23
    lllllliiii  
       2022-09-10 15:28:42 +08:00
    @Jirajine #14

    我是说我 idea 怎么切输入法都没用,原来是不支持 wayland 。。
    Jirajine
        24
    Jirajine  
       2022-09-10 15:32:54 +08:00
    @fzdwx 输入法应该可以通过 XIM ,当然 jb/swing 自己在输入法方面也有坑。不支持 wayland 最大的问题是性能低、hidpi 模糊、输入有延迟。
    akira
        25
    akira  
       2022-09-11 00:39:28 +08:00
    从来就没有一种语言打天下的事情。 不要拿个锤子 就看啥都是钉子
    pengtdyd
        26
    pengtdyd  
       2022-09-11 01:24:57 +08:00
    啥都能干 ??? 除了 C/C++敢这么说,我还没见过第二个这么狂的语言。
    rbq123456
        27
    rbq123456  
       2022-09-11 02:25:32 +08:00
    别的不知道,只说 web 开发这一块,都是扯淡
    musi
        28
    musi  
       2022-09-11 08:48:50 +08:00
    js 之前也是这么说的
    musi
        29
    musi  
       2022-09-11 08:50:45 +08:00
    @popil1987 #13 这么多都想革 js 的命,你看看哪个成功了,最后不还是要编译成 js 跑在浏览器里。
    要真正革 js 的命,一定要从浏览器下手
    popil1987
        30
    popil1987  
    OP
       2022-09-11 10:26:04 +08:00
    @musi typescript 算成功吧
    musi
        31
    musi  
       2022-09-11 17:20:33 +08:00
    @popil1987 严格意义上来说并没有,因为 ts 是兼容 js 的
    popil1987
        32
    popil1987  
    OP
       2022-09-12 09:17:38 +08:00
    @musi 这么说也对,毕竟 TS 无痛使用 js ,其它多多少少得做点引入的工作。其它语言使用的场景可能是特性足以有动力做点 js 引入的工作或者不需要 js 生态。如你只需要 react 全家桶,又不想用 TS 就可以用 kotlin 开发
    mysunshinedreams
        33
    mysunshinedreams  
       2022-09-13 15:15:11 +08:00
    实际生产环境中使用过,感觉别的东西都挺好,唯一的缺点就是 Kotlin 的插件有点卡,有的时候代码提示不跟手,编译时间变长。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     956 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 22:54 PVG 06:54 LAX 15:54 JFK 18:54
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86