关于编程语言的一些看法

我希望通过描述我自己对各种编程语言的看法,能帮助到对编程有兴趣的或者是刚工作不久的同学选择适合自己的编程语言。

我对各种编程语言的看法

很多语言都是在特定时期,在特定领域,为了解决特定问题而出现的。所以如果我们能了解各种编程语言的特性和出现的原因,选择语言就没有那么困难。先看一个Tiobe编程语言的流行趋势(2018年11月)

20181108-11394.png

我简单列举一下我熟悉的上面出现的几个语言的优缺点

  • c/c++

优点 –> 性能强,资源占用低,足够底层,满足你对代码的精确控制能力

缺点 –> 开发效率太低了,像c语言本身标准库带有的函数太少,c++的stl倒是工具比较多,但是包管理工具什么的还是没有比较标准的。其实很多时候项目中工程构建方面的成本往往要超过语言本身带来的成本。

建议 –> 嵌入式,操作系统,数据库等领域的开发者,普通开发者拿来做算法研究还是比较合适的,不建议个人用此类语言来做私人项目。不过还是建议个人能拥有该语言的代码阅读能力, 便于精研技术。

  • Rust

优点 –> rust某种程度上正好补足了c/c++的部分不足,比如标准库比较丰富,内存安全,性能没有太多损失,包管理和工具链还比较现代化。

缺点 –> 上手门槛高,语言限制太多,应用还不是很广泛

建议 –> 部分原来的c++的领域很适合用rust重构,包括数据库和存储系统,消息中间件,操作系统等。而且对底层原理有兴趣的其他开发者也可以借助完善的工具链来构建个人项目,如果你想做一个偏低层的项目的话。

  • Java

优点 –> 工程化好,生态强大。适合企业

缺点 –> 太中庸了,啥都能干,干啥都不够有优势

建议 –> 企业项目,个人做算法研究。

  • Go

优点 –> 并发处理简单,工程化方便

缺点 –> 简约到有点简陋, 语言本身缺少太多东西

建议 –> 原PHP/Java开发者, 企业项目。同样适合个人做项目使用。

  • Python

优点 –> 简单,开发效率高。

缺点 –> 不适合企业拿来做生产项目

建议 –> 适合编程初学者。快速搭建项目demo。

  • Scala

优点 –> 表达能力强,函数式 + 面向对象

缺点 –> 受JVM限制做了很多妥协,想深入太过复杂,成也JVM,败也JVM

建议 –> 数据分析和处理工作者。也适合作为伪代码想别人描述算法思路

  • scheme

建议 –> 对函数式编程和编程语言设计有兴趣的人,适合用来学习

  • PHP

建议 –> 适合用来做与用户交互的web页面工作

  • javascript

建议 –> 非前端工作者也建议学习一下, 语法简单,用途广泛

编程语言的江湖和流派

c/c++/Java这种就是传统的武林豪门少林/武当这种,或许这些门派不是最强的,但一定是不会太差,处于平均水准以上。

虽然《九阴真经》,《北冥神功》这种级别的绝世武功也大多不是出于少林武当,但是,这种绝世武功不是适合所有人的,高收益往往伴随着高风险。所以还是建议大家多看,多学,增广见闻,见的多了,看得多了,了解的多了,最后根据自己的需要去选择,不要一开始就去选择拒绝

当你拒绝一个事物,你就失去了向他学习的机会

一些建议

首先建议大家初期尽量不要选择小众的冷门的编程语言。等以后有比较丰富的经验和认知以后在根据自己的需求去选择小众的语言。

同时我自己是建议编程初学者最好学习两个语言, 一个编译型 + 一个脚本型。这样子可以兼具功能性和便捷性。

初学者建议 go / java(编译型) + python / js(脚本型) 这样的搭配

我个人大概是这样的学习路线:

学校时期: C++, Java , PHP, JS, 都是学校时期学的, 当时就懂了个基本概念, 啥都没学会 。

刚工作时: 深入学习了C, js, PHP 早期工作需要 。

工作2年以后: 因为工作关系接触到了Python, Go,Java,Scala。再后来自己希望对编程语言有更深入的认识,于是学习了Scheme和Rust。未来的我可能会花更多时间在Rust和Scala上面