(点击上方公众号,可快速关注)
工欲善其事,必先利其器。总结一下这些年用得一些比较顺手的工具,纯主关看法,希望对大家有所帮助。
编程语言
因为工作和兴趣爱好,用过很多编程语言,包括C/C++、Java、C#、Python、JavaScript、汇编、SQL、Go、Rust、Lua、Lisp、Prolog、Haskell、Idris、Scheme、Bash、HTML等,每种语言都有其特点,这里简单介绍它们给我的主要印象。
C语言
现代计算机软件系统的基石,所有操作系统及其他系统软件基本上都是用C语言编写的。它的特点是抽象层次比较低,与汇编语言的映射关系比较直接,编译器生成的汇编语言和源代码很好对应,带来的优点就是性能高;使用广泛且ABI稳定,让其他语言FFI调用C语言成为了可能,基本上所有的编程语言都可以调用C,如Java JNI。
C语言是现代汇编语言,如果要深入学习计算机体系,甚至其他编程语言,学习C语言是必不可少的。
C++语言
我的工作语言。C++基本完全兼容C语言,同时支持多范式编程,导致语言本身庞杂,要用好它很难。
兼容C语言,早期利于C++的推广,但也背上了甩不掉的包袱,导致后续语言的演进步履维艰。比如,同类语言特性在其他语言规则简单,但在C++中会很复杂,而且往往有例外情况,心智成本极高。
C++的多范式仁者见仁,出发点是好的,让程序员选择合适的工具构建自己的程序,但另一方面就是太灵活,约束少。在我的工作环境里没有强有力的规范约束,导致出现了至少3种风格:
过程式:一个函数上千行,完全过程描述
面向对象:继承+多态,基本就是Java代码的风格
模板:大量使用模板
即使每种风格每个人理解的也不一样,代码得有多难维护吧。
Java、C#
接触Java比较早,当年是被Applet吸引过来的,语言本身中规中矩,完全面向对象。经过这些年发展最厉害的地方是生态强大,基本上你需要的库、框架等都能从开源项目里找到。C#语言跟Java很像,但具有后发优势,在语言设计上和性能上都比Java好点,但生态一直不如Java,这门语言发展还不错,已开源,现在也已经跨平台了。
Go
公司主要用在一些对性能要求不高的http服务上。有一些槽点,空指针、错误处理、泛型等设计上很难让人认为这是一门21世纪的语言,当然,协程的内置支持是其一大亮点。与一些优秀的语言相比,这门语言设计得一般,但可能语法简单,在国内比较火。
Rust
2018年的时候,曾深入学习了差不多半年时间,吸引我的点是内存安全。做个对比,近10年时间,我在工作中解决了C/C++项目差不多500个bug,大部分都跟内存有关,如果使用Rust语言,最少400个bug都能避免,能节省大量的排查时间。
Rust语言无GC性能很高,跟C/C++一个量级;入门难度高,当时卡我的一个点是生命周期,概念原理虽然简单,但具体实施起来很复杂,复杂点的代码需要上下文推理。除此之外都是很顺畅的,因为大部分语言特性都是C++的优化,所以有C++基础的入门会快点。
这些年Rust发展还不错,已经有越来越多的公司开始使用这门语言。所以我强烈推荐一些新的应用可以使用这门语言。
Lisp、Scheme
Lisp语言是第一门函数式编程语言,函数是第一类对象。严格点说,Lisp是一类语言,Emacs使用的elisp、标准的common lisp,以及提到的Scheme都属于Lisp语言。
它的特点是代码大量使用括号,在编程过程中实际上是手工制作AST的过程,这样代码跟数据没有本质差别;同时它们提供的安全宏完全秒杀C语言的宏。Scheme即使放在Lisp家族也是语法特别简单的,几小时内就可以掌握这门语言的语法。
如果想深入学习函数式编程,又不想把过多精力放在语言的细枝末节上,可以考虑下Scheme。
Haskell、Idris
Scheme是动态语言,如果想学习静态的函数式语言,我推荐Haskell。Haskell是纯函数式的编程语言,不允许副作用,提供了很多抽象来简化编程,而且生态也不弱,Hackage上有大量的第三方包。Haskell一直是编程思想的实验场,如果想实践新的编程思想,可以了解下这门语言。
Haskell是上世纪90年发明的,年头也比较长了,免不了也背了沉重的包袱。Idris就是其后继者,目前Idris2还在发展中,生态还不健全,要用在工业上尚需时日。
IDE
选IDE的基本原则是适合自己应用场景。这里仅列出我用过且不错的IDE:
Visual Studio
宇宙最强IDE,C/C++、C#开发神器,社区版可以免费使用。推荐。
IntelliJ
这家公司的产品很强大,Java、C#、Go、Kotlin、C/C++、Python等都有相应的产品支持,尤其对Java的支持无出其右,推荐。
Eclispe
开源。早期学习Java用的,现在已经支持很多语言和应用了。早期很火的MyEclipse就是基于Eclipse,直到IntelliJ IDEA 出现。
NetBeans
开源。通过插件能支持很多语言和应用,这是我一直在用的Java IDE,从启动和响应上,感觉是IntelliJ IDEA和Eclipse要快,界面也比较简洁。插件很少,个人用绰绰有余,工作用略显不足。现在已经交给Apache维护,好多插件,如C/C++插件功能还比较弱。
VSCode
严格意义上,VSCode不是IDE,只是一个文本编辑器。由于其优秀的插件机制,可通过安装不同的插件实现IDE的效果,能支持很多语言的开发,推荐。
插件质量高,公司和组织都提供官方的插件,这是我推荐的主要原因;同时,插件的配置也比较简单,安装后基本开箱可用,与之相比,Emacs、VIM等编辑器配置要复杂得多。
除了以上,还使用KDevelop、Builder、Qt Creator、Code::Blocks等,使用时间都不长久。