在看到 Lazycat 的 Twitter 评价编程语言之后,也有了评价 (roast) 编程语言的念头。正好 22 级有挺多编程语言相关问题,随手吐槽一下
Disclaimer: 本人只是练习编程时长一年半的大二学生,hot takes only。同时也不是每个语言都深入写过,就当每个语言只写过 hello world 的程度吧。 全是个人偏见,欢迎各位大佬补充。
想到啥写啥
-
C
接触的第一门语言,作为入门语言教会了我指针,函数,变量,循环这些基础内容,印象最深的是:一开始写的代码过几个月看好丑:D
到了现在,感觉 C 本身其实是非常简单的语言,甚至可以说是最简单的那一批,它的 simplicity 我觉得真的是无可替代的。
除此之外,学 C 也是学 x86 assembly 的非常好的一个垫脚石,而且现有的 C Codebase 也非常重要 (kernel, libc etc.) 可以说是 “计算机科学” 必备的一门语言,可以说不是程序员选择写 C,而是 C 选择了程序员。
hot take: simple and unsafe
学习途径:ThinkC + CS50 -
C++
学校教学语言,谭浩强的书:)。接触的第二门语言
C++ 也是工业中不可或缺的一部份了,也是无可取代。挺多特点挺牛的,无缝extern "C"
,move semantics, std library,string_view
etc.
但是坦白说,不喜欢,非常非常的复杂,只有 C 的语法,但是和 C 完全是两个相反的东西,一个非常简单一个非常复杂,特别是 Modern C++ (主要是 17, 20) 的一些std::
真的挺雷人。
但是写 Modern C++ (主要是 11 14) 又挺有意思的,写起来体验偶尔还行。
hot take: complex and unsafe (by design!!!)
学习途径:网络自学 + 吃 C 老本 -
Rust
Learn Rust in 3 Minutes
为了 memory safety 牺牲了很多随性,但是写起来手感意外的不错,但是复杂复杂复杂好复杂。
非常喜欢它的 error handling 和 fearless concurrency,和一些 api 的设计。
Compiler 做的真不错,很多时候看 error message 就能改出来,但是写起来心智负担挺重的,心理地位中上
除此之外占用储存挺多的,也是槽点,dependencies 和 cache 和 binary 都好大。。
好多 rust tools, 比如说 fd 和 rg 真好用!!
hot take: safe by design, complex and safe
学习途径:Rusting + Rust Book + Rust By Example -
Python
我听说的第一门语言,写起来手感非常顺,但是感觉坑会比较多,特别是年少不知 pip dependencies 和 system dependencies 撞之后的后果,花了很多时间解决这些琐事。
科学计算和数据处理已经离不开了,相关领域必备技能
整体非常简单
个人感觉难点是 generator,asyncio,scheduler,GIL 还有各种 library 这方面
主要槽点是性能不太行,还有try
之后不是catch
是except
:(
学习途径:Python 官方 Tutorial -
Java
OOP by design,工业届宠儿,说实话用来写工业代码真的很不错。
槽点是写起来没啥激情,感觉就像在拧螺丝一样,毕竟每个人都是希望自己特殊一点的。
但是如果我要选技术可能我也是选 java
很喜欢它的 explicit exception in function signature
还有一个槽点是万年 jdk8
学习途径:吃 C 老本 + Oracle Tutorial + 写项目(CS186 DB Project) -
Scheme/Lisp/Elisp
学 SICP Review 时候的语言,括号看的难受,但是真写起来这些 functional 的东西真的挺带感的,写起来骂娘,但不写一段时间又会想起来。。。
没学很深,但是真挺带感的
学习途径:折腾 Emacs (已转 Neovim)+ SICP -
Ocaml
写过一些,槽点主要是 explicitrec
,但没写很深,总体感觉挺有意思的
还有编译之后是 shebang#!/usr/bin/env ocamlscript
+ compiled bytecode 作为纯文本存,真的难顶,笑死我了。
学习途径:官方教程 + CS3110 -
Lua
为了 Neovim 学的语言,整体非常简单,可能是最简单的语言,但是坑也挺多,主要是 type 和 index starts at 1
感觉大型项目写不起来,整体比较散
同样,没学很深(但是感觉基本学完了,内容真的很少)
学习途径:官方文档 + Learn X in Y minitues + nvim -
Golang
手感和 Python 类似,simple by design!写起来很顺。
第一印象不行(在第一次学 Go Tour 的时候,感觉好丑,现在看起来感觉还行吧)
error handling 有点丑,但是我觉得是好事,explict error handling is a virtue
整个工具链非常成熟,一个go
把所有管完
挺喜欢channel
和waitGroup
的设计的
还是感觉挺丑的。。。
学习途径:Go Tour + 官方 doc + Go by example + The Go PL -
JavaScript
写起来很爽,真的很爽,错起来非常容易,null + undefined + NaN,直接变身 NaNi / BaNaNa
可以说是这个世界不可替代的一部份了,NodeJS + npm = All in one
闭括号要闭一堆括号真的晃眼
整体来说不喜欢
感觉已经和英语一样变成程序员的“世界语”了,不会就无法交流
还有一个槽点是它(前端)的 build tools 太多了好复杂 (webpack, parcel, rollup, vite, turbo, esbuild just to name a few),还有一万个 config file 真的难顶
还有就是 node 好重,感觉 deno 挺小清新的但是没有非常方便的支持 npm 就是不爽 (yes i know it supports npm now but not as native as node)
学习途径:modern js tutorial + 各种乱七八糟想逃都逃不掉的地方,到处都有 js 真无语。。 -
TypeScript
既然 JS 横行已经是定局,打不过就加入,加入就加 TS 准没错,explicit typing 我最喜欢了,终于没 baNaNa 了 (anyscript warning)
除了不喜欢 Nodejs 和前端那一套和又多加了一个tsconfig
之外,我非常喜欢这门语言,几乎没有槽点
学习途径:官方 handbook + 逃不过就加入的各种 JS/TS 项目
- CSS 我是又爱又恨,恨是因为 CSS 真不好写,感觉很吃经验和积累,爱是因为好用也真好用,而且 Tailwind CSS 真不错。
- HTML,正经人谁还写 HTML,不都 JSX 一把梭了。
- JSX,想出这玩意的真是个人才,加上 ReactJS/Vuejs 手感意外非常不错
前端的槽点,基本就是 js 的槽点吧
希望这辈子能给 V8/NodeJS 贡献些代码减少碳排放(晕)
学习途径:野路子 + 读写项目
-
Haskell + Perl
这两个只接触过一些,没写过,但是感觉也挺丑的
学习途径:Haskell MOOC -
Shell Script
用来解决燃眉之急很不错,一次性语言,到处拉屎(晕)
坑非常非常非常多,语法非常诡异,每次都是查语法,写起来云里雾里。
如果加上 ShellCheck 限制就非常多,不加写起来非常容易出错
学习途径:天下 Shell Script 一大抄(笑 -
CMake + Makefile
严格来说是 Domain Specific Language 吧,不算编程语言,放进来凑个 15
写起来好难受,可能是写起来不太习惯,但是写好了放那不管也挺方便的。
学习途径:CMake 是官方教程,Makefile 是上网冲浪