热门标签 | 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



推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 开发笔记:python协程的理解
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了python协程的理解相关的知识,希望对你有一定的参考价值。一、介绍什么是并发?并发的本质就是 ... [详细]
  • 开发笔记:超全的《 Django 入门教程 》上线了,居然还免费!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了超全的《Django入门教程》上线了,居然还免费!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
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社区 版权所有