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

pythonruby_为什么以及如何从Ruby切换到Python

pythonruby本文是Sqreen的第一位工程师Benoit(他在Ruby代理和Python后端上工作)分享的个人经验。早在2008年,

python ruby

本文是 Sqreen的第一位工程师 Benoit (他在Ruby代理和Python后端上工作) 分享的个人经验

早在2008年,当我还在工科学校时,我的两个朋友就决定成立一家名为Feedbooks的公司。 他们的目标是使人们更容易找到,下载和共享高质量的电子书。 一个数字图书馆,它将公共领域的杰作,自我出版的作品和商业发行的作品归纳在一起。

允许他们实现此目标的网站必须快速,高效且易于维护。 当时,刚看完现在著名的“ 如何在15分钟内创建博客 ” Ruby on Rails演示视频,创始人决定放弃尝试并开始编写代码。 几周后,为了尽快开发产品,他们需要其他帮助,并问我。

像我这一代的许多工程师一样,我以前涉猎过PHP和Mysql网站很多,甚至为小型开源CMS系统做出了贡献。 我熟悉与Web相关的所有内容,但从未听说过Ruby。 因此,我观看了视频,也迷上了Ruby on Rails的魔咒。 在接下来的十年中,我一直迷上Ruby,而且还在继续。 我们一群志同道合的朋友伸出援手访问了图书馆网站,并使用该技术开发了许多其他网络应用程序。

但是为什么是Ruby,这有什么好处呢?

Ruby是一种非常有表现力的语言。 语言的主要设计师Matz在创建Ruby时有一个非常简单的目标:为程序员带来快乐。 对我来说,这显然已经实现。 Ruby是一种面向对象的脚本语言。 Ruby中的每件事都是一个“对象”。 Ruby虚拟机负责将看起来很自然的语法转换为实际指令。 该VM不断改进,并且每个新版本的生成代码都变得更快。 Ruby中的对象通过向自身发送包含方法名称和参数列表的消息来进行协作。 Ruby的自省性也很容易,更改这些消息或创建临时接口很容易。

这些使之成为编写域特定语言(DSL)的一种非常好的语言。 这正是David Heinemeier Hansson(又名DHH)在创建Rails时所做的。 Ruby on Rails的核心是DSL的集合以及可轻松生成模型驱动的Web应用程序的框架。 时至今日,它特别适应并擅长创建应用程序,而业务逻辑和建模将在其中发挥重要作用。

因此,六年后,当我加入Sqreen成为第一位工程师时,合理的选择是使用Ruby。 但是,当我们启动Sqreen后端时,我们没有使用Ruby,而是使用了Python。

您是说您喜欢Ruby,但选择了Python作为后端?

这是为什么?

首先,Sqreen后端实际上是向世界公开(或不公开)的多种服务。 新客户看到的第一部分是我们的公司网站,它实际上是一个静态网站(尽管我们确实使用基于Ruby的网站生成器Jekyll生成了网站)。 然后是我们的仪表板,相反,它是一个非常动态的应用程序,构建为单页应用程序,是在首次涉足Meteor(这是另一天的博客文章!)作为React应用程序后编写的。 仪表板与专用API进行通信,我们称之为“后端的前端”。 这不是我们唯一的API,我们还有其他一些API,但到目前为止,最重要的是我们专用的“代理后端”。

我们很早就决定,我们不想使用多种语言编写API,以便我们可以轻松地在不同的API之间重用业务逻辑代码和模型。 我们还很早就预见到,至少代理的后端应该能够很容易地扩展到大量并发客户,因为我们的代理经常会向后ping后端。

不幸的是,Rails的运行速度并不是我们真正的首选。 显然,Rails并不是将Ruby用于应用程序和API的唯一方法,Ruby中提供了许多微框架,其中最著名的是Sinatra。 Sinatra很棒,它有一个非常小巧且易于使用的API,我们本来可以做到的。

我们选择Python的原因有两个。 首先,两位联合创始人JB&Pierre对Python更加熟悉,在他们以前在Apple的生活中曾将Python用于一些内部工具。 其次,我们始终认为数据分析对于Sqreen至关重要。 不幸的是,Ruby对此并没有太大帮助,而Python科学生态系统只是一流的。 选择很容易,让我们使用Python及其众所周知的微框架解决方案。 烧瓶。

从Python开始

那时,我只涉足Python编写小型脚本,以转换和重塑某些数据或执行计算。 我必须加快使用它来创建API的速度。 幸运的是,如果您更改编程语言,则Web及其基本组件不会更改。 HTTP / HTML / JSON仍然是基于文本的协议/语言; REST仍然相同。 我在职业生涯中所学到的一切仍然有效,只是输出方式有些不同。 在Ruby中,使用称为Rack的通用规范来使应用程序与Web进行较低级别的通信。 这是一个非常简单的规范,主要规定应使用“ Array”表示HTTP请求和响应。 事实证明,Ruby的Rack实际上是从Python早期的一项名为WSGI的计划中获得启发的。 很好,一个巨大的潜在障碍已消除。

但是语言呢? 如前所述,Ruby是一种面向对象的脚本语言,而python也是一种面向对象的脚本语言。 但是,Python在实现该概念上的方法不够纯净。 它不是作为一种面向对象的语言创建的,它还支持其他范例(主要是功能)。 但是,它们仍然是不同的语言,因此语法是完全不同的。 让我们举几个。 Ruby使用关键字(开始/定义结束)描述块。Python使用空格。 这确实需要一些习惯(而且我个人仍然更喜欢Ruby的方式)。 您可以使用try / except在Python中使用begin / rescue / end捕获Ruby中的异常。 但是对我来说,最大的变化是无法以Ruby允许您传递给许多方法的方式来进行任何内联阻止(例如,使用`find`,`map`,`inject` ...)。 在现代Python中,人们可以使用内联理解来经常执行等效操作,但是语法会变得非常混乱。 这实际上迫使开发人员更多地考虑正在使用的循环数,并最终导致更高效的代码。 我还发现了一些新的,非常周到的概念。 示例:Python中的上下文管理器使您可以将清理行为应用于资源,而实际的语法又促使人们编写更有效的代码。

那么我个人如何快速掌握Python语法? 首先通过练习使用非常好的Python Koans 。 这个开源项目使人们能够通过修复一组越来越困难的单元测试来学习Python。 他们浏览了该语言的不同功能,并提供了一个实际的,非常深入的教程。 然后,我阅读Python文档。 Ruby文档可能很简短,有时甚至缺少,而Python文档却非常完整。 该语言分为多个模块,每个模块都有详细的解释,通常会详细说明模块存在的基本原理,要解决的问题,如何解决的问题以及何时不使用它! 是的,显然,它还包括示例。 对于任何想使用Python的人来说,这都是必读的。 等待所有这一切是否意味着Sqreen不使用Ruby,并且我不再使用它了? 很高兴您提出要求,实际上没有! 我喜欢Ruby,实际上我们在Sqreen做了很多工作。

首先,我们有一个Ruby代理 ,可帮助保护Ruby应用程序。 在过去的3年中,我不断地进行开发和维护代理,实际上它比以前复杂得多(阅读,有趣!)。 我们每个代理商都进行动态检测。 换句话说,我们正在编写代码,该代码将基于通过有线发送的描述(经过加密签名)来更改正在运行的软件的控制流。 我们首先在Ruby中进行了实验,但是现在我们正在使用五种技术(很快就会有六种!)进行此操作。 这并非易事,与一群才华横溢且富有激情的人们一起就此主题开展工作是一种荣幸。

其次,当我们创建代理时,在将其发送给第一批测试人员(现在是客户)之前,我们希望在现实生活中对其进行全面测试。 我们需要一个外观逼真的应用程序,我们还可以在该应用程序上评估代理的行为。 秉承我们的工程文化,我们决定自食其力,并创建了一个小巧但非常有用的Rails管理界面。 内部每天都在使用它来监视我们代理商的行为并为我们的客户提供帮助。

来过那里的人的一些建议

您是Ruby开发人员正在考虑从Python开始吗? 你应该做! 它与Ruby足够相似,您很快就会感到有生产力。 但是,它也足够不同,您将学到一些新技巧,这些新技巧可以为您打开新的大门。 无论如何,成为一个小技巧的小马绝不是一个好主意! 一个好的交互式教程和文档是一个很好的起点。 但您也应该尝试在真实的应用程序上工作。 仅执行教程时,就不会出现生态系统的许多特质(例如,包管理,测试,配置文件…)。 想与已经做出转换的人一起尝试吗? 加入Sqreen ,很明显,我们正在招聘😉

最初于 2019 年1月30日 发布在 blog.sqreen.com 上。

翻译自: https://hackernoon.com/how-i-switched-from-ruby-to-python-ac7038015888

python ruby



推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
author-avatar
纤沙湖之歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有