版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/54136743

最近被朋友们拉入了几个技术社群,有微信群,也有QQ群,尤其对一些年轻的朋友,大家乐此不疲的问题居然是 PHP 是最好的语言么?

我们推崇“敢于质疑且独立思考的自由精神“,所以对“PHP 是最好的语言么?“这一问题,也是从疑问开始的。

什么是最好?

《现代汉语词典(第5版)》第1823页对“最好“一词给出的解释如下:

最:(1)程度副词,表示某种属性超过所有同类的人或事物 (2)指(在同类事物中)居首位的,没有能比得上的。
最好:最为适当。

与时俱进一下,再看看百度百科的解释:

最好,拼音zuì hǎo,意思是.表示最理想的选择;最大的希望。

最好是否具有相对性呢?
有这样一句名言:

怯懦是你最大的敌人,勇敢则是你最好的朋友。——弗兰克

最好是指语言的自身么?是指图灵完备性么?是语言自省等特性么?

最好相对于的主体是你自己,还是某个群体,抑或全部人群?

当我们讨论“PHP 是最好的语言“时候,我们是否明确了“最好“的适用范围,争议往往就是从边界的不明确处产生的。默认的,很多朋友可能是基于“PHP对所有程序员,是最好的语言“这一观点的。

科学在于证伪,如果PHP是最好的语言,那么会引出什么样的结论呢?

如果…… 那么…..

反证法经常会在论述中使用,这里也可以粗浅的尝试一下:

如果 PHP 最好的话, 能不能 用 PHP 写个 操作系统呢?
遗憾,原谅我的孤陋寡闻,操作系统一般都是C写的,甚至连C++都没有使用。那么 C 是最好的么?

如果C 是最好的语言,那么用C写一个类似Hadoop 的分布式计算环境如何呢?可能会吐血, hadoop 是用 java 写的。那么Java 是最好的语言么?

如果Java 是最好的语言,那么写个网页爬虫会是怎样的情形呢?
一个页面请求和解析至少要 50行以上的代码么, python 可能不超过10行代码? 那么 Python 是最好的语言么?
……
node.js 可以支持最小的全栈, 为什么不是最好的?
Spark 是用 scala 写的呀?
文本解析和正则表达式谁能比得过 Perl呢?
shell 编程 直接系统调用 性能很高呀?
不用Objective-C 又如何在 iOS上写出高性能的程序呢?
……

各种吐槽

喜欢C的人必须期待内存泄露这种事就不会找上门,最糟糕的地方在它的内存管理地狱。C 语言程序就像一群拿着刀的人在刚刚打过蜡的地板上快速的跳舞。 两位大神是这样描述C和C++的。

C 很容易让你朝自己的脚开枪。在 C++ 中,这么做变的困难了,但是你要不注意就会崩掉自己的整条腿。

– Bjarne Stroustrup,C++ 发明者

C++ 是一门恐怖的语言。即使选择 C 没有任何优势,只是为了逃避 C++,那这个理由也足够了。

– Linus Torvalds,Linux 发明者

再看看其他神人的各种吐槽,喜欢Java的人肯定上过指法课,不断地重复又重复敲打键盘。内部类和匿名类导致令人困惑的代码。如果 Java 真的有垃圾收集的话,大部分程序在刚开始执行的时候就会把他们自己删了。

Perl 是唯一一门在 RSA 加密前后看起来一样的语言, 呵呵…..

PHP 是由不称职的业余选手发明和操纵的,而 Perl 是伟大而阴险的,由一帮高水平的变态专业人士操纵, 也是没色(sei)了。

Python不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢吧!

JavaScript没有连接器,所有的代码都共享一个命名空间,那么多个不同的库能够在一起运行,真是一件万幸的事!

Erlang是一门美丽的函数式语言,可以写出很精致程序,以一种精确的方式进行通信,为什么开发一个简单的WEB服务需要费这么大的工夫?

Scala 那么的优秀,但如果让一个新人来熟悉写好的老代码,是不是会有懵圈的感觉呢?

……

最好的语言在哪里?为什么缺陷会被如此的放大呢?

广泛使用

作为最好的编程语言,是否应该是被大众广泛接受并使用的呢?可以求助一下编程语言的使用排行榜。

这是TIOBE 在2016年12月的排行榜。Top 10 编程语言 TIOBE 指数走势(2002-2016)如下:

对,最好的语言也许是少数人喜欢的语言,也许像 Bjarne Stroustrup 所说的那样:

世界上只有两种编程语言:整天被人喷的语言,没有人用的语言。

编程语言的钱途

编程语言也是程序猿/媛吃饭的家伙,最好的语言是否是最能挣钱的语言呢?
2016年 Packet 网站对使用不同编程语言的程序猿/媛薪资状况的调查结果如下:

有点奇怪的是,Bash和Perl 高居榜首。这是国外的调查结果,可能和国内差距较大,有什么参考意义呢?那么看一下,该网站的2016年各大主流编程语言平均薪资排行榜:
1:C语言 平均薪资 15000+ 岗位需求1% 系统、底层、嵌入式、驱动级开发。
2:C++ 平均薪资13000+ 岗位需求10% 大型软件、游戏、服务器级开发。
3:OC+swift 平均薪资12000+ 岗位需求15% IOS、Mac OS平台开发。备注:从业人员较多,竞争力较大
4:javaME 平均薪资10000+ 岗位需求20% android 、移动设备嵌入式开发。
5:javaEE 平均薪资9000+ 岗位需求50% web、软件、企业级开发。备注:长期霸占编程语言第一名,岗位需求比所有语言岗位加起来都多。
6:C# 平均薪资8000+ 岗位需求10% windows平台、游戏、软件开发。备注:人才最少,竞争力最小。
7:python 平均薪资7000+ 岗位需求5% web、软件、后台开发。备注:国外已成热门、国内尚欠火候,人才急缺。
8:PHP 平均薪6000+ 岗位需求20% web、后台级开发。

最好的语言能否带来最好的钱途呢?

不是小结的小结

如上所述和所问, 最好的编程语言可能是个伪命题。 老曹觉得,没有最好的编程语言, 只有最适合某一场景的编程语言,只有相对适合自己的编程语言。或许,自己最适合且真正热爱的语言才是最好的语言。

如何心中存在着对编程语言的鄙视链, 说明还不了解对方,或者说明我们遇到的坑还是太少了,遇到的事和问题同样太少了。

参考资料:
1. Packt公布2016年编程语言收入统计排名http://news.yesky.com/469/105843969.shtml
2. TIOBE 12月编程语言排行榜 http://www.eepw.com.cn/article/201612/341302.htm
3. 看看牛人们是怎么评价编程语言的 http://developer.51cto.com/art/201205/337746.htm

PHP是最好的语言吗? 1相关推荐

  1. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  2. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  3. gcc 自动识别的文件扩展名,gcc/g++ -x 选项指定语言,不同 gcc 版本 -std 编译选项支持列表

    对于执行 C 或者 C++ 程序,需要借助 gcc(g++)指令来调用 GCC 编译器. 对于以 .c 为扩展名的文件,GCC 会自动将其视为 C 源代码文件 对于以 .cpp 为扩展名的文件,GCC ...

  4. OpenCV 笔记(07)— Mat 对象输出格式设置(Python 格式、CSV 格式、NumPy 格式、C 语言格式)

    首先是下面代码中将要使用的 r 矩阵的定义.需要注意,我们可以通过用 randu 函数产生的随机值来填充矩阵, 需要给定一个上限和下限来确保随机值在期望的范围内. Mat r = Mat(2, 3, ...

  5. 利用牛顿法求平方根-Go语言实现

    牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...

  6. 翻转二叉树 c语言实现 递归 栈 队列

    前言 题目比较好理解,就是翻转二叉树 代码 c语言实现 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  7. 字符串全排列的问题 python和c语言实现

    前言 这是一个的经典的问题 设计一个算法,输出一个字符串字符的全排列. 比如,String = "abc" 输出是"abc","bac",& ...

  8. 快速排序的递归和非递归实现 c语言版本

    代码 挖坑法 解释 选取一个关键字(key)作为枢轴,一般取整组记录的第一个数/最后一个,这里采用选取序列第一个数为枢轴,也是初始的坑位. 设置两个变量i = l;j = r;其中l = 0, r = ...

  9. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  10. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

最新文章

  1. 怎么判断是不是欧拉回路_儿科医生分享:宝宝好动调皮?怎么判断孩子是不是多动症...
  2. oracle product文件,快速修复Oracle参数文件的另类方法
  3. java中集合的排序
  4. linux+虚拟机上的wdcp,linux虚拟主机服务器wdcp系统教程
  5. No module named ‘pyqt5‘解决办法
  6. hplus java_Java HijrahDate plus(long, TemporalUnit)用法及代码示例
  7. android 数独实训报告,数独实验报告范文
  8. anaconda安装opencv
  9. numpy抽样函数 np.random.choice用法详解
  10. C C++实现网络验证和本地验证
  11. 刷机大师独家支持android,刷机大师v3.4.5发布 独家支持荣耀6一键刷机
  12. 从小米5看雷军式“互联网思维”的黄昏
  13. 利用python查询电脑配置_干货|利用Python将地址转换为经纬度坐标
  14. 日本口音英语发音规则
  15. 产品有复杂的卡扣倒扣,我们如何设计模具结构?
  16. CSS Sprites(精灵图)
  17. 笔记2:VC++ socket通信实例
  18. led灯亮度渐变实现
  19. BNET通信区块链项目CEO刘建军受邀参加2018“区块链共识大会”
  20. 嵌入式操作系统风云录:历史演进与物联网未来Chapter1 第1章

热门文章

  1. Dubbo 和 Spring Cloud 微服务架构区别(比较笼统 看看就行)
  2. 赛尔号什么时候支持html5,赛尔号:最初的5只年费精灵,总被云玩家吊打,其实他们很强...
  3. Allegro如何输出STP文件操作指导
  4. 磁带机的几种状态??
  5. 护理方面关于人工智能的构想_谷歌秘密的atap实验室正在构想智能设备的未来...
  6. 关于C#托管代码与非托管代码的简述
  7. j1_09_02。冒泡排序法。实现冒泡游戏功能关键算法。要求:综合使用分支、循环结构语句实现,直接输出结果不计分。
  8. 黑马程序员SSM_MybatisPlus笔记(自用)
  9. 产品界最好的产品都是程序猿出身?-技术人产品思维修炼(12)
  10. 七月生活20031102