V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
popil1987
V2EX  ›  编程

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

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

    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
    啥都能干的语言不一定是好事.

    语法糖多一般来讲都是坏事.
    janus77
        19
    janus77  
       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 都会有(抄)
    fzdwx
        23
    fzdwx  
       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   ·   我们的愿景   ·   实用小工具   ·   5295 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:31 · PVG 17:31 · LAX 02:31 · JFK 05:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.