热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【PHP学科技术课堂】再谈PHP、Python与Ruby

编程语言非常重要,不要认为他们都图灵等价,用起来都一样。实际上,好的语言,带给你的东西是超乎想像的。
全系列PHP视频教程:细说PHP - http://www.xishuophp.com/

一句话总结

简单地总结:

  • 假如你想帮他尽快找个活儿,赚到钱,推荐PHP。

  • 假如你想让他成为一个高效工程师,推荐 Python。

  • 假如你想让他爱上他的工作,推荐 Ruby。


语言的选择

编程语言非常重要,不要认为他们都图灵等价,用起来都一样。实际上,好的语言,带给你的东 西是超乎想像的。

下面是一些看法:

  1. 程序员的时间远比机器的时间宝贵:选择开发效率最高的语言吧,不要过于在 乎运行性能,如果你开发不出东西,那么跑得多快也没用。

  2. 优雅的抽象胜于简单的堆砌: 这意味着你的代码是最简洁而又充满设计感的, 面向对象,容易的闭包,一切都是表达式等等,而最好的抽象是语言本身能够分层,既能够书写语言的语 言,比如 DSL 能力强弱是个指标。

  3. 才华横溢的社区胜过有难度的招聘:这种语言一定要拥有一个活跃且才华横溢 的社区,只要使用她的人,就有一种自豪感和精英意识,在社区里的每个人都 自认为比别人强。即使,你 不那么容易招聘到程序员,但我们不都知道,一个有才华的程序员胜过100个平庸之辈嘛?选用这种语言, 能保证团队里一起编码的每 一个人,都是高手。

  4. 也是最重要的,乐趣胜过一切: 灵活,好玩,永远有新发现的魔术般的语言, 只有你想不到的,没有你做不到的,对一个真正的hacker来说,这是选择语言唯一的理由,这也是 Perl 为什么能够长期存活的原因,因为她是 hacker 为 hacker 创作的。

如果能看完这些观点,相信你能猜出我的选择了 是的,Ruby是主流语言中我认为最出色的,最高的开发效率,最优雅简洁的抽象能力,最有才的社区 (GitHub为中心),和最大的乐趣。

做为一个程序员,是应该去选取不同思路的语言去学习的,而且当然要选择最有代表性的语言, 在编程的世界里,主流的思路其实就两种,一是结构化编程,一是函数化编程,面向对象只是结构化编程 进化的一个阶段而已,其他各种各样的思路大多数是这两个的分支。


社区的创造力

选择一门语言要看这个语言社区的气质,以及你想用他做什么东西。

Mac 上可以运行那么多种语言,有很多人用 git。但却只有 Ruby 的用户开发出了 homebrew 这 样牛逼的包管理系统,善用了 github 的诸多特性,真正的把每一个用户都变成了潜在的 repo 贡献者。 我相信这绝对不是巧合。如果同样的条件摆在面前,你做出了一个全新的东西而别人没有,说明了你的创 造力比别人要高。

作为 Python 的使用者,我觉得 Ruby 语法的优劣不太重要。但是从外部看 Ruby 社区近些年持 续的向外输出一些从技术到开发上的理念,不断的有大大小小的很酷的项目从 Ruby 社区中诞生的出来。 使得我觉得 Ruby 社区是一个很有创新气质的社区。因此如果你学编程是想做出一个很酷的东西,那么我 强烈建议你直接学习 Ruby。


从 Web 开发去比较

对于 Web 开发,这三种语言都能胜任,但是还是有不少区别:

  • Ruby 的 rails 框架确实是称得上是快速开发的典范,但是 Ruby 的语法过于 灵活,有些时候对同一个处理会有很多种不同的写法。

  • PHP 是老牌的网页脚本语言,相对其他两门而言比较成熟。PHP 虽然快速成型 ,但容易失控,尤其项目稍大的时候。

  • 对于 Python 来说,由于自身的简约设计,可能应用的方面的更多,几乎是可 以涉及到IT的各个方面,Web 只是它其中一个方面,而且有比较成功的杀手级应用,Youtube 就是用 Python 开发的,服务器的各种原来用 shell 或者 perl 的脚本,科学计算,游戏的脚本,甚至在桌面客 户端上也能看到 Python 的佳作,如 UliPad,对于初学者来说 Python 是个不错的选择,在这三者中它的 语法是最简洁和清晰的,适合初学者学习。

入门语言还是应该选择一个比较严谨的,像Java,Python那样的语言比较合适,从 PHP 语言不太 容易学到 OO 的思想和设计模式之类的东西,而这些对于一个优秀的 PHP 程序员来说也是很必要的。这里 不是黑 PHP,每个语言都有自己的优点,比如 PHP 入门快,可以增加编程的信心,明白编程那点事后,可 以触类旁通的接触其他语言。很多编程者就是从 PHP 入门的。

在编程学习里有这么一个现象:直接推荐 Python 的人,基本都没深入学习过 Ruby。学过 Python 和 Ruby 的人,基本都喜欢 Ruby。

具体使用什么语言,不是唯一的。根据场景是要分的。一个人至少是需要学习3种语言的:

  • 一种是工作语言,比如C++,Java,PHP,这三种语言,是互联网的万能药,只 要会了,工作是永远都不愁的,大型公司一般都会使用,用来开发一些大型项目。

  • 一种是自己使用的语言,比如 Python,Ruby,当然,我也推荐 Ruby。我也用 过 python ,后来因为工作需要,忍痛放弃了 Python,最后,竟然深深喜欢上 Ruby 了。然后就不再回头 了,对于个人使用来说,是要非常注重开发效能的,一门语言,至少能用10年,如果自己选择的语言,可 以在开发效能上超越其他语言十分之 一,那么在十年内这种收益是非常大的。

  • 还有一门是新语言使用,不必深入,但是一定要了解,这有助于比较不同语言 的不足,才不至于成为井底之蛙。比如 Nodejs, Scala等。


关于 Ruby

我觉得直接学 Ruby 也是不错的选择。

  1. 本来 rails 框架就自带了 server,WEBrick。看着 Log 做开发效率非常高。

  2. 如果要部署的话,用 passenger 也是绝对方便。

  3. Views 层的模板系统,ERB 应该比 Python 的各种要来得美,而且更加简单。 之前用过 Django,觉得太重了。

  4. Rails 可以让你不断的惊讶程序可以这样写的啊,我第一次看到有 7.days.ago 的时候惊掉了。

  5. Rails强调一种DSL,一来符合人们的语言习惯、二来我觉得是一种编程语言的 颠覆,我们并不是在用某个特定的语言(比如Ruby)来实现一个 功能(就如同是用C还是用Java来写一个 编译器),而是我可以在这些语言的基础上定义一种新的语言(类似于lex,yacc这样的词法语法生成器) 。看 看routes.rb的设置吧,能有多么惊讶,这是程序么,简直就是诗。美不只是在于内容,同样在于形 式。

Ruby 或者说 Rails 的缺点或许就是学习的曲线太陡,我之前有过 MVC 的经验,上手RoR 还是花 了三周的时间,或许也是自己接受能力不强吧,但更确切的问题应该在于 Rails 的惯用法太多:当然,我 在用 ActiveRecord 拿数据的时候,可以写 find_by_sql(“blablabla”),但是细查 Rails 的文档,他 是提供类似于 Joins.Group.Select 等等的方法的,姑且不论效率是不是真的会快点,少写一点 sql 在 .rb 的文件里面不是会更美一些么。再到后来,偶然又发现有 metawhere 这种东西,是不是又要忍痛抛弃 既往学到的那一堆 works but not elegant 的东西,义无反顾的投身到 metawhere 的学习中。

当然,如果不追求完美,上手也没有这么恐怖。


关于 Python

python的优势很多,比如:

  1. 语法简洁,无需编译。Python 语法简洁高效,一句话“人生苦短,我用 Python”啥都说明了,高效是 Python 的特点。

  2. 强大的数据结构。默认安装的Python开发环境已经附带了很多高级数据类型, 如列表、元组、字典、集合、队列等,无需进一步编程就可以使用这些数据类型的操作。使用这些数据类 型使得实现抽象的数学概念非常简单。

  3. 强制缩进,让代码自然显得有条理。

  4. 插件齐全,可以完成绝大部分的程序设计任务。


小结

  • 没有最好的语言,只有最合适的语言。

  • 没有糟糕的语言,只有糟糕的程序员。

  • 没有一种语言是万能的,只会一种语言是万万不能的。

用什么语言不重要,最重要的是效率:开发效率和执行效率。PHP 语法很傻,一点都不炫,但凡 是学过C、JS、AS等等语言的,很容易上手,因为语法上有很多重合的地方。很多人看不起 PHP,说 PHP 太简单的人,往往是因为对 PHP 本身不够深入了解,其实 PHP 里面的东西一般人用到的很少,5.3 以上 的特性也慢慢让这种语言生动起来,你越是深入,就越能发现它的强大和优势。

这里仅仅列出 PHP,Python 与 Ruby 的一些情况,让读者更好地挑选学习的语言。

语言没优劣之分,Just follow your passion.


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
author-avatar
哈哈1991188
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有