文/黄小天、李亚洲 (选自Hackernoon 机器之心编译)

2017 年可谓是网页应用与 API
之年,开发者不用每次重新发明轮子,而是利用脚手架和第三方库就能确保项目在几天内实时部署。

尽管 RESTful API
和跨平台库已经使网页开发容易起来,但依然没有解决阻碍并隔分开发者、管理者和消费者的由来已久的问题:PHP vs.
Python,到底该选哪种语言?

PHP vs. Python ?

出于研发和项目预算的考虑,这一问题仍然是一个重要的讨论点。然而,这个问题对于想要在网页开发中做大的初学者来说也尤其重要。PHP
和 Python 是当今最为流行的网页开发语言,编写了互联网之中绝大多数网站。

相比于经验丰富的开发人员,初学者的需求相当不同。老练的开发人员学起新语言来几乎毫不费力。与之相反,初学者则需要渡过两个难关:他们不得不理解编程结构并学习实现它们;也不得不掌握对初学者毫无意义的句法。

一个相关的问题是开发老手的偏见。与 PHP 开发人员交谈,他们会说没有比 PHP 更好的语言。与 Python
开发人员交谈,情况也是一样。通常来讲,很少有开发人员会夸赞其不用的语言。

因此,本文不会提及 PHP 和 Python 各自的优缺点,而是探讨初学者首次选择语言时所要考虑的三个问题。余文将围绕着 PHP
和 Python 集中探讨这 3 个问题。

流行热度

毫无疑问 PHP 和 Python 都很流行。即使 PHP 和 Python
并不支持某个项目,某些项目经理和客户依然优先考虑使用它们。PHP 更是以压倒性的优势主导互联网市场 80% 的份额。

一些著名网站比如维基百科、Flickr、Tumblr、雅虎都由 Python 编写而成。而此后,社交巨头 Facebook
开始转向 PHP 框架,它可以并入 Facebook 平台和 APP 开发所需的一切功能。

当谷歌使用 Python 编写其一些知名项目之后,Python 奠定了其流行地位。随之 Python
逐渐流行起来,现在很多巨头公司诸如 YouTube、Reddit、Pinterest、Instagram 和 Spotify
都(部分或完全地)用其编写产品平台。

因此,在流行热度方面,PHP 与 Python 之间难分伯仲。每一天这两种语言都在编写着大量新项目。

可用框架和 CMS

一个框架是由社区贡献和维护的代码编写,它允许开发者快速上手应用而无须从头开始。典型框架包含数百个功能,开发者可以调用它们从而为应用添加具体功能而无须重新发明轮子。

PHP 提供了大量框架,开发者可以用它们创建通用和行业具体应用。PHP 框架比如 Laravel 和 Symfony
编写了数百万人使用的流行应用。PHP 开发者拥有由热情的社区人员维护的成熟框架的优势。

Python 确实提供了像 PHP 框架那样的选择。虽然用途广泛且强大,但 Python 框架的选项相比于 PHP
还是有限。Django 和 Flask 就是用户构建网页应用时的两个特殊选择。Python
框架数量有所增长,这是因为它逐渐成为主流项目的语言选择。

CMS 的内容管理系统是一个软件平台,为项目提供了极为灵活的基础。无论是简单的博客、电子商务店还是公司门户,CMS
能提供综合的解决方案,保证开发者和终端用户能够专注于商业案例,而非从头开始建立平台。

世界上最流行的 CMS、WordPress 都是 PHP 建立的。同样,世界上两大开源电子商务平台 Magento 和
WooCommerce 都是用 PHP 建立的。另外,Python 构建了有限的几个 Django 支持的 CMS。

在特殊情况下,PHP 有明显的优势,因为它拥有每个人所需要的一些东西。在许多情况下,PHP 在框架和 CMS
上提供更多、更通用的选择以匹配项目要求。

学习曲线

这是此篇文章的首要前提。学习曲线定义了掌握特定语言的难易程度。在编程语言中,学习曲线几乎趋于流畅,然后使用工具将设计转变为功能性代码。

在此,Python 相比 PHP 稍有优势。对新手而言,Python 代码更易读,也因此易于理解。PHP
一直都比较难,不受新手喜欢。但也因为规则困难,也很少有错。

在格式上 Python 容错度很高,代码不会因为一些小错误而崩溃。因此对初学者来说很有激励性。这也是为什么许多学校优先选择
Python 作为编程入门语言。

PHP 社区也在尽量使得该语言变得对初学者友好。通过课程与教程,PHP 专家正在让它变得和 Python 一样易于理解。

结语

选择首门编程语言是最困难的决定之一,PHP 和 Python
都值得我们关注。两种语言都提供了许多学习机会,包括用户友好的语法检查工具,使学习过程变得容易并获得扎实的语言基础。

我建议初学者两个语言都尝试下,然后根据个人目标、所在产业选择一个。虽然 Python 最易掌握,但 PHP
有更好的工作前景和技术资源。

PHP和Python如何选择?或许可以考虑这三个问题的更多相关文章

  1. python小练习:使用循环和函数实现一个摇骰子小游戏。游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“大”,3<=总值<=10为“小”。然后告诉玩家猜对或者是猜错的结果。

    python小练习:使用循环和函数实现一个摇骰子小游戏.游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“ ...

  2. 史上最详细的C语言和Python的选择排序算法

    未经同意,请勿转载!如有收货,请留一赞,不胜感激! 同时欢迎加入我们的qq交流群:326079727 话不多说上代码: C语言: //选择排序走起 //原理:吃透原理再去实现,选择排序也是类似于冒泡排 ...

  3. python近期遇到的一些面试问题(三)

    python近期遇到的一些面试问题(三) 整理一下最近被问到的一些高频率的面试问题.总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们. 前两期点这↓ python近期遇到的一些面试问题(一) p ...

  4. Python,while循环小例子--猜拳游戏(三局二胜)

    Python,while循环小例子--猜拳游戏(三局二胜) import random all_choice = ['石头', '剪刀', '布'] prompt = '''(0)石头 (1)剪刀 ( ...

  5. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  6. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  7. python并发编程之asyncio协程(三)

    协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈:协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快.开销更小.效率更高,在有多IO操作 ...

  8. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  9. Python操作redis字符串(String)详解 (三)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...

随机推荐

  1. shell脚本异步日志分析-接口耗时、可用率

    背景:现有日志接入日志报表大盘,为了避免作业高峰期间(双十一),系统也要观测系统整体情况,因此提出了观测近五分钟,接口成功率以及耗时等工具(默认统计最近五分钟,并进行结果汇总统计) 使用说明 前提:p ...

  2. 用Python玩转微信(一)

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 今天偶然看见 ...

  3. K:正则表达式之进阶

    子表达式: 前面所介绍的关于重复匹配的知识,其重复匹配的字符只作用于紧挨着的前一个字符而言,而有时候要将一个集体(姑且用该概念进行称呼)进行重复多遍的进行匹配,则使用前面所介绍的知识,其是无法做到的. ...

  4. AJAX结合PHP整理复习

    Ajax主要的功能是实现了浏览器端 异步 访问服务器:通过浏览器的XMLHttpRequest对象发出小部分数据,与服务端进行交互,服务端返回小部分数据,然后更新客户端的部分页面. 下图是一次请求成功 ...

  5. Linux中ls对文件进行按大小排序和按时间排序,设置ls时间格式

    1 按文件大小排序 使用 ll -S | grep '^[^d]' // 格式化文件大小形式 ll -Sh | grep '^[^d]' 2 按文件修改时间排序显示 使用 ll -rt 3 设置ls ...

  6. Vuex- Action的 { commit }

    Vuex 中 使用 Action 处理异步请求时,常规写法如下: getMenuAction:(context) =>{ context.commit('SET_MENU_LIST',['承保2 ...

  7. 02-JAVA基础及面向对象(补充)

    引用数据类型 java中的数据类型可以分为 基本数据类型 和 引用数据类型 两大类 int float char boolean等都是基本数据类型 类类型都是引用数据类型 引用数据类型类似C语言中的指 ...

  8. Linux : screen 工具详解

    转自:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html [ Screen 官方站点 ] 背景 系统管理员经常需要SSH 或者t ...

  9. php 常量const

    常量使用关键词const修饰,一经定义,不能改变 常量的使用规则 定义后,应该马上赋初始值 不能用public.private.protected修饰 在本类,可用self::name  类名::na ...

  10. Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】

    集群的结构,大家可以查看我的另一遍文章,Mongodb的三种集群  在最后一种集群中,介绍到. 目前使用的数据就是最后一个测试集群,留下的数据. 简单介绍一下,四个分片的配置 192.168.99.6 ...