当 Tubi 遇到 Ruby
有人说 Tubi 作为 RubyConf China 金牌赞助商,明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup,“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中,却依然让人想在 Tubi 展台前多停留一会儿。
为什么工程师、校友甚至 Ruby 社区颇具影响力的人物都愿意来为 Tubi 站台?为什么选择小众技术语言 Elixir 构建后端服务,并长期支持 Elixir 中国社区的建设?这是一个什么样的职场环境,让 RubyConf 现场观众惊叹每年有两次 Outing,还有着“有灵魂”的工作文化?
本文将从两个方面与你分享,Tubi 与 Ruby 的故事:
- Rubyist 眼中的 Tubi
- 加入 Tubi 的 Rubyist 后来怎么样了
- Tubi 与 Ruby 的故事。
Rubyist 眼中的 Tubi
初印象:是一个专业稳定的科技公司
“我是在 RubyConf 2023 第一次知道 Tubi 这家公司的,Tubi 给我的整体印象是一个专业稳定的科技公司。最让我印象深刻的是 Tubi 展台上的小电视,相比其他参展商更吸引眼球,也和流媒体公司的定位十分契合。Tubi 还介绍了 Elixir 在产品上的应用,细节处透露着技术范儿和开源精神。”
—— Rubyist 张一
技术选型很有魄力
“疫情期间,没有几家公司会为了员工健康而支持完全远程办公的,Tubi 这样做了,我也是那个时候知道 Tubi 的。
后来进一步了解到 Tubi 的技术栈基于 Elixir 和 Scala,在 Java、Python、Go 流行的大环境下选择这么小众甚至名字都没有听说过的语言是真的很有魄力,之后我也会经常在 Ruby、Elixir 技术活动上看到 Tubi 的身影,不遗余力地推广函数式编程语言。
这次在 RubyConf 上还收到了 Tubi 版红宝书 - Tubi 的技术博客合集,很技术范儿,这也真正体现了 Tubi 工程师团队‘对运用先进技术改变人们生活这一美好愿望充满无限激情’吧。希望 Tubi 赞助的 Elixir Meetup 以后能来上海,自己可以作为志愿者出一份力。”
—— Rubyist 小白
Tubi 让我看到了自由
“在与 Tubi 团队成员交流中,我深深感受到了 Tubi 独特的工程师文化,那就是自由!自由!还是自由!
‘自由’在 Tubi 不仅仅是一个词,更是一种工作的哲学。这里的工程师不会仅仅为了实现某个功能而妥协,他们对整个产品都负有责任。在 Tubi,开发者不仅是编写代码的人,他们也是产品的参与者和建议者,每个人都有权利为产品提出更好的建议。这真的让人太激动了。
读了 Tubi 在 RubyConf China 上分享的 Tubi 团队文化和技术博客,我还惊喜地发现:
第一,Tubi 特别强调一个核心价值观 —— 信任。在许多公司担心员工在家工作可能会‘偷懒’的时代下,Tubi 对其团队成员有着这样的信任,支持远程和在家工作,也相信他们会尽职尽责。这种‘信任’文化在当前竞争激烈、内卷严重的环境中显得尤为宝贵。
第二,Tubi 不是通过倒排期或强制性的目标来推动团队,而是通过建立合理的工作流程,来确保产品的正常交付和优质的用户体验。这种工作方式背后的核心理念是一种契约精神,团队成员之间互相信任,共同为一个目标努力,这样不仅高效,还非常人性化。”
—— Rubyist 韩先生
加入 Tubi 的 Rubyist 后来怎么样了
据说,Tubi Elixir 工程师团队中有一半曾是 Rubyist,他们转变为 Elixir 炼金术士的过程是什么样的?在 Tubi 做 Elixir 工程师,是一种什么体验?一起听听他们的心声吧。
Rubyist 迁移到 Elixir 可能更有优势
“在最初接触 Elixir 时,我注意到 Elixir 有很多地方是受到了 Ruby 的启发,因为 Elixir 之父 José Valim 之前是 Ruby on Rails 的作者之一,这在一定程度上降低了我学习 Elixir 需要做的心理建设和学习成本。
Ruby 和 Rails 最让我欣赏的部分就是对开发者体验和开发效率的关注,而 Elixir 在这两个方面的表现也是相当出色的。Elixir 最让我欣喜的还是项目在实际应用中所表现出的卓越性能和稳定性。在我看来,这可能使最终让我的团队从 Ruby 切换至 Elixir 为主开发语言的最关键的因素。
Ruby on Rails 在‘用很少的代码实现很多的功能’这件事上树立了行业标杆,一直被业界认为是快速启动一个 Web 项目的最佳技术选择。Elixir 的 Phoenix 框架在很大程度上受到了 Rails 的启发,近几年也开拓了一些新的领域,例如一出现就广受关注的 Phoenix LiveView,以及随后出现的其它语言框架。相比 Rails,Phoenix 的确让人感到有一点上手难度,但在我看来,这一点难度的增加所带来的效率提升,绝对值得!
对于已经熟练 Ruby on Rails 的开发者来说,适应 Elixir 和 Phoenix 的过程是非常顺畅的,这比起从其他语言迁移到 Elixir 来说可能有更显著的优势。”
—— Tubi Elixir 高级工程师 Horvo
“刚开始使用 Elixir 时,我感觉两种技术语言的语法比较像,写起来都很舒服,只不过 Elixir 是函数式语言,刚开始写需要有一点风格的转换,但是不会有太大的不适应。当我逐步了解到 Elixir / Erlang 背后强大的 OTP 生态,不禁赞叹 Elixir 真的别有洞天啊!”
—— Tubi Elixir 工程师,Tristen
Elixir 和 Tubi 带给我属于工程师的双倍快乐
“我在读书期间,业余时间开始学习 Ruby 和 Elixir;毕业第一份工作就选择了 Tubi,也直接投身到了 Elixir 的开发上,这份确信至今未变。事实证明,很多之前没有接触过 Elixir 的同事们都能快速适应新的开发生态,而且在 Tubi 可以遇到一群和 Elixir 一样优雅的小伙伴啊。”
—— Tubi Elixir 工程师,Tristen
“在 Tubi 写任何语言都会是非常开心的,Elixir 本身又带给我很多属于工程师的快乐,这两者叠加在一起就是双倍的喜悦。对于喜欢一门语言的开发者来说,最幸运的就是刚好有一家很棒的公司正在用这门语言(并且你还有机会在那里工作)。我很庆幸能有在 Tubi 写 Elixir 的机会。
Tubi 有很多需要解决高并发、高复杂度的业务场景,这些比较有挑战性的项目让我在技术上收获了很多宝贵经验。另外,在应对这些复杂、高并发、实时性强的需求时,Elixir 总会给我更多的信心,我因此可以分出更多精力到架构设计和代码质量上。”
—— Tubi Elixir 高级工程师 Horvo
Tubi 与 Ruby 的故事
2019 年中旬,Tubi 正在紧锣密鼓地筹备第一场 Elixir Meetup,为了让更多中国开发者有机会了解 Elixir 这门小众但表现惊艳的技术语言,我们在 Tubi 工程师的帮助下,与 Ruby China 建立了联系。
当时负责 Tubi 中国团队招聘的 Doris 分享道:“Ruby 社群非常开放和包容。虽然我们招聘的是 Elixir 后端工程师,但我还是受邀加入了 Ruby China 的几个群组,有机会去介绍 Tubi 及工作机会,并分享与 Elixir Meetup 相关的活动信息。这次参加 RubyConf China,我见到了许多一直以来帮助 Tubi 的网友,激动万分。”
在本次 RubyConf China 中,Tubi 第一位 Ruby 开发者也亲临现场。虽然他已经离开 Tubi,但仍然全力以赴地为我们提供支持。
人们常说 Rubyist 是一群为爱发电的人,这一点不假。或许正因为 Tubi 同事们和 Rubyist 有着共同的技术热情,才让我们有幸相遇并携手共进。
关注 Tubi,创造更多可能性
Tubi 中国团队热招岗位持续更新中,欢迎点击查看。让我们在 Tubi,一起为了“让人人都能免费享受高品质的视频内容”而高效工作,也有品质的生活!
相关文章:
当 Tubi 遇到 Ruby
有人说 Tubi 作为 RubyConf China 金牌赞助商,明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup,“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中,却依然让人想在 Tubi 展台前多停留一会儿。 为什么工程师、校友甚至 …...
【C++从0到王者】第二十四站:多态的底层原理
文章目录 前言一、虚函数表二、一道经典的例题三、深度剖析多态的条件之一:为什么必须是父类的指针或引用四、深度剖析多态的条件之二:为什么是虚函数的重写/覆盖?五、虚函数表的一些总结六、关于Func3的验证七、动态绑定与静态绑定八、总结 …...
Java从入门到精通24==》数据库、SQL基本语句、DDL语句
Java从入门到精通24》数据库、SQL基本语句、DDL语句 2023.8.27 文章目录 <center>Java从入门到精通24》数据库、SQL基本语句、DDL语句一、什么是数据库二、数据库的优缺点1、使用数据库的优点:2、使用数据库的缺点: 三、MySQL基本语句四、DDL语句 …...
学习ts(十)装饰器
定义 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,访问符,属性或参数上,是一种在不改变原类和使用继承的情况下,动态的扩展对象功能。 装饰器使用expression形式,其中expression必须…...
如何在 Opera 中启用DNS over HTTPS
DNS over HTTPS(基于HTTPS的DNS)是一种更安全的浏览方式,但大多数 Web 浏览器默认情况下不启用它。了解如何在 Opera 浏览器中启用该功能。 您可能不知道这一点,但您的网络浏览器并不像您希望的那样私密或安全。您会看到ÿ…...
STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块
今日学习一下这款AHT10 温湿度传感器模块,给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器: 特性: 连接方式: 适用场所范围: 程序设计: 设…...
QT基础使用:组件和代码关联(信号和槽)
自动关联 ui文件在设计环境下,能看到的组件可以使用鼠标右键选择“转到槽”就是开始组件和动作关联。 在自动关联这个过程中软件自动动作的部分 需要对前面头文件进行保存,才能使得声明的函数能够使用。为了方便,自动关联时先对所有文件…...
TCP最大连接数问题总结
最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源,如图所示: 1、可用端口号限制 Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改&#x…...
【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 云原生利用Docker确保环境安全、部署的…...
explain各个字段代表的意思
id:联表查询是每个表的读取顺序,数字越大越先被读取。相同就需要通过table字段判断select_type:查询类型或者是其他操作类型(PRIMARY、UNION、UNION RESULT等)table:正在访问哪个表partitions:匹…...
【已解决】Windows10 pip安装报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98
环境:win10, Python3.9 在Pycharm安装YoloV5的依赖包时出现报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x98 出现 ‘gbk’ codec can’t decode… 的报错一般是因为读取文件出现编码问题导致没法读取文件,因此可以在报错…...
goland 中的调试器 -- Evaluate
今天一个好朋友 找到我,问我关于goland中Evaluate 小计算器的使用方式,说实话,我在此之前也没用过这个东西,然后我就找一些相关文档,但是这类文档少的可怜,所以我就稍微研究一下,找找材料&#…...
你知道公司内部维基到底有哪些功能吗
维基指的是一种协作工作的平台,也就是开源的编辑系统。员工可以在企业维基里面进行存储、共享和协作之类的操作,将企业内部员工的知识共享聚集在一起。今天looklook将会详细讲讲公司内部维基具体到底有哪些功能,供大家参考。 公司内部维基的功…...
netdata监控服务器主机(包括Docker容器)
效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…...
Mybatis学习|第一个Mybatis程序
1.创建一个数据库以及一个用户表,并插入三条数据用来测试 2.创建一个空的maven项目 在pom.xml中导入本次测试用到的三个依赖,mysql驱动、mybatis依赖、以及单元测试junit依赖 将这个 空的maven项目当成一个父项目,再创建一个空的maven子项目用…...
计算机网络MTU和MSS的区别
在计算机网络中,MTU代表最大传输单元(Maximum Transmission Unit),而MSS代表最大分节大小(Maximum Segment Size)。 1.MTU(最大传输单元): MTU是指在网络通信中&#x…...
redis学习笔记 - 进阶部分
文章目录 redis单线程如何处理并发的客户端,以及为何单线程快?redis的发展历程:redis单线程和多线程的体现:redis3.x单线程时代但性能很快的主要原因:redis4.x开始引入多线程:redis6/redis7引入多线程IO&am…...
SE5 - BM1684 人工智能边缘开发板入门指南 -- 模型转换、交叉编译、yolov5、目标追踪
介绍 我们属于SoC模式,即我们在x86主机上基于tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译,部署时将编译好的程序拷贝至SoC平台(1684开发板/SE微服务器/SM模组)中执行。 注:以下都是在Ubuntu20.04系统上操…...
基于Java+SpringBoot+vue前后端分离英语知识应用网站设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
vue使用vue-router报错
报错1. app.js:172 Uncaught TypeError: vue_router__WEBPACK_IMPORTED_MODULE_0__.default is not a constructor at eval (index.js:4:1) at ./src/router/index.js (app.js:108:1) at webpack_require (app.js:169:33) at fn (app.js:442:21) at eval (main.js:7:71) at ./…...
植物大战僵尸修改工具实战指南:从入门到精通
植物大战僵尸修改工具实战指南:从入门到精通 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 认知阶段:工具核心价值与基础架构 工具定位与适用场景 植物大战僵尸修改工具是…...
用Logisim搞定六进制计数器:从真值表到同步置数/异步清零的保姆级布线教程
用Logisim搞定六进制计数器:从真值表到同步置数/异步清零的保姆级布线教程 第一次在Logisim里搭建计数器电路时,看着那些密密麻麻的逻辑门和跳线,我盯着屏幕发呆了半小时——明明按照课本上的真值表连接,仿真时却总是卡在某个状态…...
【FastAPI 2.0流式AI响应核心机密】:3大异步协程调度陷阱、2处EventSource底层劫持点、1个未公开的StreamingResponse状态机设计缺陷
第一章:FastAPI 2.0流式AI响应的架构演进与设计哲学FastAPI 2.0 将流式响应能力从实验性支持提升为核心原语,其底层重构了 Starlette 的响应生命周期与事件循环集成机制,使 Server-Sent Events(SSE)、text/event-strea…...
[2026 职场洗牌系列 01] 程序员正在“杀死”自己的工作?科技行业高危预警
长久以来,学计算机(CS)在很多年轻人眼里就等同于拿到了通往高薪和阶层跃升的金钥匙。大家都觉得,只要把代码敲得溜,这辈子在职场上基本就稳了。可惜,到了2026年的今天,生成式AI正在毫不留情地把…...
线程池核心参数与拒绝策略深度解析
前言 线程池是Java并发编程中最常用的工具之一,但很多开发者只停留在“会用”层面。面试中,面试官往往通过线程池考察你对并发编程的理解深度——参数如何设置?为什么这样设置?拒绝策略如何选择? 本文将深入剖析线程池…...
教你 .NET Core API 怎么和数据库表一一对应
不用复杂理论,直接照做就能成功! 一、核心规则(记住这 4 句) 类 = 表 类名 = 表名 属性 = 字段 属性名 = 字段名 二、一步一步教你对应(超级简单) 1)数据库有一张表 → 你就写一个类 例如你数据库里有表: sql Users (Id int primary key identity,Name nvarchar(5…...
基于2026校招数据分析:拥有这几张AI证书的学生,起薪普遍高30%
2026年校招季已近尾声,随着DeepSeek等大模型技术的持续突破与“人工智能”向千行百业的深度渗透,AI人才市场的竞争呈现白热化态势。前程无忧51job发布的《2026届校招市场AI人才需求报告》显示,AI相关岗位校招薪酬中位数已突破2万元/月&#x…...
FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码
FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码当车间调度遇上非洲大草原的蛇鹄,会碰撞出什么样的火花?今天咱们用MATLAB实现一种新颖的群智能算法——蛇鹄…...
C语言回调函数在TCP客户端中的实现与应用
C语言回调函数在TCP客户端中的实现与应用1. 回调函数基础概念回调函数是一种通过函数指针实现的编程机制,允许将一个函数作为参数传递给另一个函数。在C语言中,回调函数的实现完全依赖于函数指针,这与C、Python等现代语言中可能使用仿函数或匿…...
HelloWorld.h:嵌入式LED硬件抽象库设计与实战
1. 项目概述led是一个极简但高度工程化的嵌入式LED控制抽象库,其核心载体为单头文件HelloWorld.h。尽管项目名称朴素、文档极度精简(Readme为空),但该命名本身即构成一种嵌入式开发领域的隐喻性宣言——它并非教学示例的代名词&am…...
