• 请不要在回答技术问题时复制粘贴 AI 生成的内容
714105382
V2EX  ›  程序员

想深入钻研一门语言 请大家出出主意

  •  
  •   714105382 · Dec 22, 2021 via iPad · 15267 views
    This topic created in 1630 days ago, the information mentioned may be changed or developed.

    需要满足以下五条要求 1 支持多范式编程,表达能力强大 2 充分隐藏计算机体系结构的细节,特别是内存管理等等的细节 3 生态丰富,有大量的工具和库 4 语法设计现代,代码较为简洁,开发效率高 5 具有先进的 完善的工具链支持 比如 编译器 IDE 调试工具 运行监测工具之类

    目前备选 python java C# js php groovy ruby swift perl kotlin scala

    请大家帮我做做排除法 或者分析一下 n 这些语言不符合上面哪些要 如果没十全十美的 或许可以矬子里拔将军 最后我能选出一个

    135 replies    2021-12-24 11:31:42 +08:00
    1  2  
    vhysug01
        101
    vhysug01  
       Dec 22, 2021
    lisp+python 完成新版 SICP 作业
    CommandZi
        102
    CommandZi  
       Dec 22, 2021
    Swift
    hikarugo
        103
    hikarugo  
       Dec 22, 2021
    没必要专门研究锤子,更多的时间拿来用锤子实践做不同的事才是更好的选择
    KrisChan
        104
    KrisChan  
       Dec 22, 2021
    钓鱼么?
    为什么要带有立场的学习呢?
    不同语言都有不同的适用场景,你提到的这些要求,多数你去调研一下社区,看看官方的 tutorial ,不就可以得到一些初步的结论了么?
    你的所谓“钻研”是指什么呢,是对语言本身的研究,最终在编程语言的顶级会议上发 paper 么?还是用这门语言做一些工业级的项目呢?可能不同的目标会影响你的行为吧。
    L4Linux
        105
    L4Linux  
       Dec 22, 2021
    Common Lisp/Emacs Lisp
    Ayanokouji
        106
    Ayanokouji  
       Dec 22, 2021
    Swift 的语法很棒,但是在服务器端的进展太慢,kotlin 的语法大量借鉴 swift ,可以使用 java 全部生态,编译速度也还可以,另外还支持 js 、native (虽然还不咋滴),最近还更新了 Compose Multiplatform 支持桌面和 web ,而且 kt 有 java 基础学习也挺快的
    EscYezi
        107
    EscYezi  
       Dec 22, 2021 via iPhone
    首先排除繁琐的 java 和简陋的 golang ,kotlin 全部都符合
    ecnelises
        108
    ecnelises  
       Dec 22, 2021   ❤️ 16
    这么多楼好像都只说了一种语言,有些语言甚至都没提到。聊点个人看法。

    Python
    ======
    算是很多非职业程序员会学习的编程语言,在脚本语言这行里发迹比较早,所以很多 Linux 发行版都会有它。语法中规中矩,除了缩进表示代码层级这点有争议,语言上其他没有让人很恶心的地方,也没有什么难以割舍。Python 比较常用的领域有 C++项目的构建系统、人工智能、若干系统维护的工作,还有一些 Web 项目会用 Python 做。比较大的优点是容易找到有 Python 的环境以及至少会点 Python 的人。

    Java
    ======
    用「永远的神」来形容 Java 是没什么问题的。几十年的生态积累非常庞大,如果用它做项目也几乎不用担心招不到人这个问题。Spring 等框架过于复杂,还有 Java 做的桌面程序性能不佳等毛病,让大家对 Java 印象不太好。不过连 Golang 都可以有泛型,那 Java 自然也是可以现代化的。也算是和 Python 挺像,在各自的领域里中规中矩,如果真的不知道选什么,那选它不会有啥大错。多年来许多人觉得 Java 和 C++是竞争对手,至少在今天事实并非如此,它们的优点几乎不重合。

    C♯
    ======
    最早是以 Better Java 的形象出道的,时至今日似乎已经走出一条自己的路。曾经有个笑话,说 C♯为什么没有 Spring 这种框架,答案是因为微软没有春天。还有个笑话是说 Java 程序员都戴眼睛,因为他们 can’t see sharp 。这俩笑话其实反映出 C♯的特点,就是语言特性远比 Java 丰富,写起来更爽,但生态不够好,招人更难。如果单纯为学习目的,C♯很值得了解,毕竟其父是 Anders Hejlsberg ,编译器领域上古大佬。

    JavaScript
    ======
    一说是披着 Java 语法皮的 Lisp ,几乎绕不开的语言。早年乏善可陈,除了原型继承和对象模型和其他语言差异较大值得了解。因为赶上好时代,一方面性能在各家军备竞赛下彻底高出其他脚本语言一个档次,另一方面各种语言变种层出不穷试图弥补其语言缺陷。到今天算是强大的现代语言,还自带可能是地球上最丰富的库和工具生态( Java 人家至少没什么人天天想着拿 AST 搞事)。不是你想不想学的问题,时至今日做开发没法绕过它,而且在几乎所有主流平台上都能找到自带的 JavaScript 运行时。这个圈子的程序员一个比一个能整活,人称码农娱乐圈。

    PHP
    ======
    「最好的语言」,最早就是一个能编程的模版引擎,Web 领域干简单的活没人比它更快,LAMP 这个缩写简直是一个时代的回忆。后来 PHP 也加了很多东西,包括模仿 Rails 的 Laravel 以及 Swoole ,不过不妨碍大家还是按照它曾经的定位玩。语言方面可以玩的不算多。

    Ruby
    ======
    这个在国内算是大冷门吧,不过是我最喜欢的语言之一。Ruby 和 JavaScript 有点像同父异母从小分家的两兄弟,都被人说是批皮的 Lisp 。Ruby 有 Perl 风格的简洁操作、完整的面向对象和函数式能力。高度的动态性使得它表达能力非常强,参考 Sinatra 这样的微型 Web 框架。到 2021 年,Ruby on Rails 依然是 Web 开发领域的最强生产力,这么多年在这块也积累下了不少生态。此前被诟病的几个缺点(没有 JIT 、没有静态类型检查工具、缺少完善方便的异步 I/O )从 3.0 开始也在被一个个解决。问题是会的人不多,但非常值得个人学习 /写个人项目。

    Perl
    ======
    当年骆驼书没看多少页就弃坑了。在类 UNIX 系统上 Perl 可能比 Python 更常见,处理字符串和正则的语法非常简洁强大,以至于有人说这个语言是 Write-only 的,就是写一次以后自己就看不懂了。如今应该只有一些历史悠久的系统里能看到 Perl 的大量使用(新项目里取而代之的往往是 Python )。Perl 6 做了很多年,除了那个极其鬼畜的 Logo 外,好像很少听说新消息。如果能接受 Perl 的奇葩语法,学一学也是挺有意思的。

    Scala
    ======
    对 Scala 了解不多,不多扯淡了。主要印象就是把函数式编程和面向对象缝得比较好,类型系统比主流这些语言强。还有就是因为跑在 JVM 上,所以也能受益于 Java 生态。作者 Martin Odersky 也是编程语言和编译器大佬。没接触过这类语言的话,学学 Scala 应该能开眼界。

    Swift
    ======
    大家都知道 Swift 背后是宇宙市值最高公司苹果。但 Swift 算是成也苹果败也苹果。2014 年 Swift 发布,2015 年开源,基本和 Rust 1.0 同一个时间,也都基于 LLVM ,如今两者在 GitHub 的 star 数也差不多。但就业界前景而言,Swift 和 Rust 看起来越差越远。Swift 的核心团队和 LLVM/Clang 相当重合,所以无论是编译器实现还是语言设计,Swift 都有不少出彩之处(更何况极不尊重兼容性的苹果在 Swift 早期,每年都要对语言进行大量破坏性修改,被人调侃一年一个新语言,直到 Swift 4 语言核心才基本稳定,好处就是很多坑被扔掉了),比如多范式的异常处理,算是众多语言里比较之下相当舒适的。如果说 Golang 是所谓的大道至简;那么 Swift 奉行的就是兼容并包,拥有主流编程语言里最多的关键字,最新版加入了 async/await/actor ,接下来的 6.0 还会加入所有权机制,更远还有和 C++的无缝互操作。Swift 社区一直有更远大的理想,比如进军服务端。但终究还是要为苹果的生态服务。Swift 就像班级里那个门门功课考 80 ,每周还有半天缺课(指兼容 Objective-C )的学生,自然不如那些一些科目满分,另一些不及格的学生引老师注意。BTW ,Swift 的编译器是 C++写的,在这些编译型语言里,算是少数没有自举的。

    Kotlin 和 Groovy 了解不多。从 Compose 这个项目就能看出,Kotlin 也充满野心,除了 JVM ,也能编译到 Native 和 JavaScript. Kotlin 、C♯和 Swift 像是奇特的结拜三兄弟,不怕 Feature 多,就怕糖不够甜,各自肩负着父辈平台的野心。

    还有一个楼主没有提到的就是 Rust ,工具链完善,性能足够好,生态也在越来越丰富,很对一部分函数式爱好者的胃口。但没有 C++经历恐怕不好理解复杂的语言规则是要解决什么问题,而且乱七八糟的符号有点多,代码看着快跟 Logo 一样丑…
    littlewing
        109
    littlewing  
       Dec 22, 2021
    不管啥语言,想要做到极致,你必须了解体系结构内存管理的知识
    waruqi
        110
    waruqi  
       Dec 22, 2021 via Android
    c
    GoLand
        111
    GoLand  
       Dec 23, 2021 via iPhone
    Python 符合你说的所有点。
    SIGEV13
        112
    SIGEV13  
       Dec 23, 2021
    "特别是内存管理等等的细节" 全员退群。
    xnotepad
        113
    xnotepad  
       Dec 23, 2021
    从工程的角度来说 go 不错,但是还是推荐 rust 吧。
    mingl0280
        114
    mingl0280  
       Dec 23, 2021 via Android
    如果有 1 基本上不可能规避 2 ,你在想桃子吃。
    charlie21
        115
    charlie21  
       Dec 23, 2021
    这是错误的问题,给你一个完美语言你也不会满意的
    yulon
        116
    yulon  
       Dec 23, 2021
    十全九美 C++ 啊,C++ 写好了比写脚本都爽,列表排第一的居然是 Python ,算了算了
    GiantHard
        117
    GiantHard  
       Dec 23, 2021 via Android   ❤️ 1
    我推荐 F#

    1. 类似 ocaml 的函数式编程语言,自带不可变数据结构
    兼容 .Net 生态,支持完整的面向对象编程范式

    2. 大多数 F# 程序运行在 .Net Runtime 之上,开发者不用关心 GC

    3. 如果你要让 F# 运行在 .Net 平台上,有 Nuget 包管理可以用,生态非常丰富,从机器学习到移动端应用开发,都有支持
    如果你要让 F# 运行在浏览器平台上,那么整个 npm 的资源也可以为你所用

    4. 语法上每年都有更新,[同样的程序,写起来比 C# 要简洁] ( https://fsharpforfunandprofit.com/why-use-fsharp/)


    5. 可以跟 C# 用同一套 IDE 、性能诊断工具,除了 MS Visual Studio 之外,还可以使用 VS Code 、JetBrains Rider 来开发

    BTW ,楼主好像对 haskell 这种偏学院派的函数式语言不太感冒,这跟 F# 的设计初衷也有点类似。因为 F# 开发者认为 Monad 在绝大多数程序员实际业务开发中用的很少,且为了跟 .Net 生态兼容, 所以 F# 没有提供高阶类型的特性。不在意这一点的话,F# 确实是不错的 side project 语言。
    apateman
        118
    apateman  
       Dec 23, 2021   ❤️ 1
    C#
    darknoll
        119
    darknoll  
       Dec 23, 2021
    没啥可研究的,能把活干好就行,用什么语言也不是你自己能决定的
    auto8888
        120
    auto8888  
       Dec 23, 2021
    C++ 永远的神
    就是学习曲线太 JB 陡峭了。。。
    LinShiG0ng
        121
    LinShiG0ng  
       Dec 23, 2021
    我只熟悉 java ,但是你要求语法简洁,那就把 java 排除掉吧
    1002xin
        122
    1002xin  
       Dec 23, 2021
    那就 Rust 或 C#
    Cloutain
        123
    Cloutain  
       Dec 23, 2021   ❤️ 1
    C# 还用说吗?
    Itoktsnhc
        124
    Itoktsnhc  
       Dec 23, 2021
    C# 好多票
    libook
        125
    libook  
       Dec 23, 2021
    1. 应该大多主流语言都可以。
    2. 需要管理内存的基本就得忽略了吧;虽然 Rust 在这方面要好很多,但要说完全不用关心底层细节还是没法做到的。
    3. 新出的语言基本就不用考虑了,以及有重大版本更新产生兼容问题的语言也不用考虑了,JS 和 Python 基本上是万金油; JS 还多一个 Web 前端壁垒,还有 RN 可以玩玩移动 APP 开发,不过好不好用就是另一件事了;不过 Python 在 AI 方面生态比较有优势。
    4. 个人感受里,Python 的设计比较前卫,JS 是哪家特性好就直接拿过来(包括 Python 的一些特性),所以这两个都可以考虑。
    5. IDE 和监测工具现在都挺完善的了;有包管理器,并且支持依赖版本控制的,会比较方便可靠。

    综上所述,你可以试试 JS 和 Python ,不深入了解平时也能用得上。

    没有完美的语言,每种语言都有擅长的领域和不擅长的领域,最好针对不同领域学习不同的语言。

    我个人的想法是同类语言没必要学太多,一类学一种就够了,比如学一个脚本语言+一个系统开发语言。

    注:对于 TS ,我个人觉得 ES6 之前是神,ES6 之后比较鸡肋,缺点主要是没法直接用必须编译,而类型检查用 JSDoc 、ESDoc+相应 IDE 插件可以达到一样的效果,建议在已经掌握 JS 的前提下再根据需求学,虽然也没多少要学的。
    libook
        126
    libook  
       Dec 23, 2021
    不管愿不愿意承认,Go 不满足第 4 条是事实,第 3 条也不大满足,第 5 条是十分有争议的; Go 是个专门为解决企业生产上的各种问题而设计的“产品”,不适合满足个人技术上的“追求”。
    popil1987
        127
    popil1987  
       Dec 23, 2021
    成年人都选
    C:看《深入理解计算机系统》,学习 Linux 内核,开发 stm32
    Rust:开发高性能应用,SWC 给前端同学省多少时间
    Golang:以太坊这类分布式加密区块链很适合
    Elixir:Phoenix 框架非常适合 Web 开发,各种 Web 应用范式都有,干就完了
    Haskell:开发复杂的业务应用,因为它可太可重用了,不用写大量测试,满足你高生产率的需求
    Python:数据分析,写用完就仍的小工具
    Javascript:Web 前端和小程序垄断地位,不学行吗
    dart:Flutter ,Android 和 iOS 跨端必须要学,为什么不用理 React Native ?其它条件都一样,有静态类型谁还用动态类型啊,让 IDE 帮忙干点活不好吗
    SQL:也是编程语言,不要让 ORM 迷惑了双眼,皈依函数式编程就不需要 ORM 了,SQL 才是真理
    Java 和 C++能看懂源码就好,深入的话太费头发了,你看看两种语言创始人的发量
    Lisp 、R 、Fortran 、Assembly 、Prolog 、APL ,可以都了解下增加下见识
    mauve
        128
    mauve  
    PRO
       Dec 23, 2021
    C#
    oksbsb
        129
    oksbsb  
       Dec 23, 2021
    “钻研” 就 rust
    zuosiruan
        130
    zuosiruan  
       Dec 23, 2021
    @coderfuns 真牛逼 一个星期 😂
    levelworm
        131
    levelworm  
       Dec 23, 2021 via Android
    java c#都没问题。前者是大数据的基础语言,能把 hadoop 等源码都看透了就牛逼了。
    mosom
        132
    mosom  
       Dec 23, 2021
    因为项目需求刚开始学 Java ,真的好长好长好长……

    接触过 C/C++/C#、PHP 、Python 、Golang 但就是对 Java 爱不起来(救命)
    meiyoumingzi6
        133
    meiyoumingzi6  
       Dec 24, 2021 via iPhone
    不是很建议 python ,尤其是 cpython ,封装太厉害,底层太多实现是 c 写的,有点黑盒的感觉,另外就是,python 太容易写出花来,各种骚操作
    sinnosong1
        134
    sinnosong1  
       Dec 24, 2021
    C#,C#会写,java 一点问题都没有。会了 C#约等于你 java 也会了。
    byzf
        135
    byzf  
       Dec 24, 2021
    备选方案里有 Java 还有啥好选的。开个团吧。

    比较好的选择:
    Java:找工作最方便。
    python ,C#:非常优秀,各方面和 java 相比见仁见智。
    js:如果能忍受国内有些人比较浮夸的作风外,各方面都不弱于 Java 。
    cpp:除了国内公司更喜欢用 Java 外,什么都好。

    中规中矩的选择:
    golang:除了比不过 Java 以外什么都好。
    php: 生态很好,但应用面相对 Java 没那么广。
    ruby:国外和 Java 五五开,国内和 Java 二八开。

    比较差的选择:
    rust: 很好,但只有区块链招你。
    kotlin: 完全没机会超过 Java ,虽然很好。
    swift:和上面那些语言比起来 swift 真不算啥。
    groovy 、perl ,scala: 不是大众向的东西了,喜欢科研还不如去玩 rust 。
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   912 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 96ms · UTC 21:03 · PVG 05:03 · LAX 14:03 · JFK 17:03
    ♥ Do have faith in what you're doing.