zoukankan      html  css  js  c++  java
  • 也说编程语言[转]

    为什么想说这个呢?有几个原因:

    1. 前几天在知乎上面看到一个提问说自己要工作了,想学习一门编程语言,是学习Java好还是Python好呢?
    2. 经常看到各种机构统计的yyyy年mm月的编程语言变化榜单,我也老想点进去看看自己喜欢的语言排名如何?
    3. 编程语言对于我们技术人是基本功。不过话说现在编程已经全民化了,小学生已经开始学了,或许以后就不光是我们技术人的基本技能了。
    4. 当然最后一个就是想表述一下我自己对编程语言的看法。

    先立个flag:之前几篇文章比较长,今天这篇必须简短。

    我认为必须掌握的语言

    前端工程师必须擅长JavaScript、CSS、HTML(5)。我不是前端,JS、CSS、HTML都懂点皮毛,能照猫画虎,但没有系统学习过,不班门弄斧了,但我知道这三者是前端的基石,不论是哪种前端框架,底层核心也就是这些东西。

    嵌入式工程师必须擅长C。嵌入式属于比较偏底层的技术了,而且因为嵌入式设备资源有限(其实严格说手机也算嵌入式设备,但现在高端手机比中低端笔记本配置都高...),所以非常适合C这种性能高,依赖少的语言。没做过底层的朋友可能还不知道C程序其实是可以不依赖操作系统直接在硬件上面运行的(当然前提是你没有使用特定OS的一些系统调用),系统启动时BootLoader直接加载运行即可。比如我之前做嵌入式时使用的一个网络协议栈LWIP就是可以直接在硬件上面使用的。这是很多其它语言做不到的(不要提汇编...)。

    大数据工程师必须擅长Java。这个就不多解释了,看看Apache下面的大数据软件,以及一些闭源的大数据软件,绝大多数都是Java写的。当然很多对Scala支持的也比较好,但还是Java更通用些。

    (容器)云计算工程师必须擅长Go。这个当然有些武断,其实云计算更多的属于IaaS、PaaS,比较偏底层,都是和操作系统、网络等打交道的,所以一些早期偏底层云计算产品其实使用的是C、C++之类的(其实还有一些比较偏的语言,比如Erlang)语言写的,OpenStack算是比较知名的IaaS层软件了,虽然其主要语言是Python,但涉及底层的都是用C写的,然后Python直接调用C库(可自行Google)。所以这里说的云计算要学Go主要是针对这几年异军突起的CaaS、FaaS、BaaS、Serverless等,一方面是这些XaaS都是容器生态的,而容器是Go写的;另一方面Go不论是从性能还是易用性等方面都比较适合这些技术平台的开发。

    AI工程师必须擅长Python/R。这个对机器学习、深度学习、NLP等AI领域知识有了解的应该都知道,Python应该是目前支持最好的语言了。我刚开始学习ML的时候还尝试用Go,结果当然是行不通,后来才又学习了Python,配套生态是真的好,Numpy、Pandas、Scipy、Matlotlib、scikit-learn、Keras、TensorFlow等等,而且很多还可以和Spark(pyspark)的MLlib配合使用,不论是构建模型,还是可视化,真的是非常方便。

    区块链工程师必须擅长Go。前面的几个后端方向都是工作中真正用过,但区块链这个的确是没有实战过,只是个人兴趣了解过一些开源的平台,比如以太坊之类的。而且也看过、面过一些招聘区块链工程师的公司,语言方面的要求基本都是Go。区块链和云计算类似,都算是技术平台,所以理所当然Go也非常合适。

    另外,所有后端工程师都应该会熟练的写Shell,不解释。

    怎么学

    上面说了这么多,好多语言都没列(比如我不会的宇宙最**的语言PHP...),因为编程语言太多了,根本是列不完的。而且对于编程语言我的观点和之前对于英语的观点一样,都属于工具,不用单纯去学习工具。需要什么学什么,什么时候需要什么时候学。但为了能让你在需要的时候学习快一点,我个人觉得一个合格的程序员(不论前端后端)应该至少熟练掌握三类语言:

    • 1门偏底层的语言,最佳人选就是C语言,
    • 1门高级点的面向对象的语言,Java/C++(更推荐Java)就是一个不错的选择。
    • 1门脚本语言,简单点的就是Shell,复杂点的就是Python或其它的。

    学习底层语言说白了其实是为了学习内存管理、信号处理、网络协议、网络通信、各种锁、线程/进程间通信、进程调度、中断等操作系统的知识,这些是最最经典的东西,任何语言底层其实都是这些,但这些东西往往只有在底层语言里面你才可以看得比较清楚,学的比较透彻。这里又要忍不住推荐《UNIX环境高级编程》这本书了,基本上这些东西在这本书里面都有。

    学习一门面向对象的语言其实是为了更容易的找对象。不不不,说错了,是为了学习面向对象的思考方式、编程模式。其实最核心的就是学习封装、继承、多态、接口、泛型编程这些东西。

    学习一门脚本语言我觉得主要是可以提高平时的工作效率,比如后端编程经常需要登录、管理多个服务器,除了借助Xshell(Windows)、Termius(Mac)这些工具外,直接写个shell脚本通过不同参数控制也是非常方便的。而且其实像Shell、Python这些脚本语言在生产中用的也是挺多的。

    所以,虽然语言学不完,但其背后的东西很多都是相似的,只要一门语言学好了,学到精髓了,同类型的语言就是手到擒来,所以我建议上面的三类语言中每类都至少深入学习一门。另外,还要提一门语言,那就是SQL,说实话虽然我做过两年的数据库内核开发,但SQL掌握的还真不是很好,我觉得勉强算个中级水平吧。但我越来越发现这个语言的性价比极高,传统的数据分析其实觉大多数都是SQL做的,而现在的大数据处理、分析软件(比如Spark SQL、Hive SQL、Impala、Kylin、Phoenix等)很多也都支持SQL(虽然不完全兼容标准SQL,但也支持的非常好了),即使你不会写MapReduce、不会写Spark程序,不会写Flink程序,那会写SQL在一些情况下也是OK的。所以建议大家(我自己...)也可以好好学习下这门语言,绝对物超所值。

    接下来几篇文章我准备发一下我之前写的几篇Go语言的教程,主要我觉得这门语言真的非常棒,既有C语言般的性能,又比较简单,特别是开发Web后端程序、多并发程序。即使不专门学习,也可以当小说一样简单了解下一些概念,说不定以后就会用到了。毕竟这东西现在很火,我们技术人要对新技术敏感,不然一不小心就被淘汰了。

    OK,这篇文章就到这里,没有很长...吧(啪..啪..啪)。

    本文链接:https://time-track.cn/programming-language.html,如未注明,都属原创文章,转载请联系作者获得许可。

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/clemente/p/10687931.html
Copyright © 2011-2022 走看看