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



推荐阅读
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
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社区 版权所有