本地化项目经理,无论是在甲方还是在乙方,都会需要对接多个合作方才能很好地完成本地化任务的处理和交付。在所有这些合作方中,也许很多人会在和产品经理或者程序员沟通时遇到挑战,因为很多本地化项目经理(如果不是全部)都是文科专业出身,过去要么是译者,要么是做其他项目管理工作转行来做本地化的项目管理,极少有人有产品管理或者编程的经验。

在我接触到的甲方乙方的本地化项目经理中,很多人对编程这件事有一种天然的畏惧甚至是抵触情绪,原因大概有以下几点:

专业背景差异:大多数本地化项目经理来自语言学、翻译或国际商务背景,而非计算机科学或工程背景。这种专业背景的差异可能导致他们对编程感到陌生和不安。

固有的技术恐惧:有些人可能天然地认为编程是一项复杂、难以掌握的技能,只有「特别聪明的人」才能学会,或者需要大量时间和精力投入才能掌握。

对现有工作流程的依赖:一些项目经理可能已经习惯了现有的工作方式,认为「交给公司的工程师就行了」「团队里有人懂技术就行了」。

没有意识到编程在本地化流程中的作用:可能有人会认为编程只是开发人员的工作,并没有意识到它在本地化工作中的实际价值。

缺乏合适的学习资源:虽然现在有很多编程学习资源,但专门针对本地化专业人士、解决本地化专业问题的资源可能相对较少。

那我就来说说为什么本地化项目经理一定要学习编程,而且我会以我自己这个新闻专业出身、从做译者入行的人为例,跟大家分享一些我掌握基本编程知识的路径。

本地化经理学编程的必要性

在这里我要重申北京语言大学韩林涛老师的一个重要观点:「编程不是终点,而是一种手段」:

我觉得部分翻译专业的学生应该学一下编程、产品设计、需求分析、用户调研、数据库设计等看起来跟翻译没有关系的知识,一旦学习之后就会对真实世界的类似问题有与纯文科生不一样的思考角度,能够知道如何提出准确的需求,甚至能直接提出解决方案。

我觉得我们现在培养的大语言模型时代的学生不能囿于人为设置的学科范围,而是要将解决问题作为出发点,凡是能够帮助自己解决问题的知识和工具都可以拿来用。
https://mp.weixin.qq.com/s/8UBI7WLPWmwqrTvsAHrjiw

本地化项目经理学习编程至少有以下几个好处:

提高工作效率:在本地化工作中,我们经常需要处理大量的文本文件、不同的文件格式,使用各种平台。通过编写简单的脚本,可以自动化许多重复性的任务。例如,你可以编写一个 Python 脚本来批量重命名文件,或者使用正则表达式来快速查找和替换特定的文本。这不仅可以节省大量时间,还能减少人为错误。

更好地理解技术限制:理解了基本的编程概念,我们就能更好地(在产品或者程序员的帮助下)理解产品的技术实现方式和可能的技术限制,这对于制定合理的本地化策略至关重要。例如,你可能会更好地理解为什么某些字符串不能超过特定长度,或者为什么某些格式标记必须保留在翻译中。

改善与产品经理和开发人员的沟通:当我们能够用恰当地技术术语和逻辑准确地描述技术问题或需求时,就能更快地得到合作方的信任、促进解决方案的落地,从而营造出良好的合作氛围。

拓展职业发展机会:掌握了两到三个领域知识或技能的复合型人才,肯定可以获得更好的职业发展机会,人工智能和机器学习在本地化领域的应用越来越广泛,可能需要本地化项目经理参与到更多技术导向的项目中,甚至转向更具技术性的角色。

本地化经理如何学编程

现在,让我们更详细地探讨一下如何开始你的编程学习之旅:

带着问题出发

本地化项目经理学习编程并不意味着你需要从零开始,你也不需要真的学成一个能从零搞开发的程序员——这也是韩老师一直强调的。带着实际问题去寻找解决方案,是学习所有东西最好的方法,这样学下来,你记得会更牢,而且边学边用、最后还成功解决了问题,会给你带来十分充沛的满足感,也会极大地增强你继续学习的信心。所以不妨思考一下你在日常工作中遇到的挑战:是不是经常需要手动复制粘贴大量文本?或者需要频繁地在多个文件中搜索特定内容?这些都是可以通过简单的脚本来解决的问题。

另外也可以找一些本地化工作之外的问题/需求,比如你是不是一直想建个自己的个人网站,或者想给自己找一个趁手的大模型工具,又或者想本地跑跑小模型,又或者解决一下视频转多语言字幕的需求?虽然有些需求已经有了成型的工具,但如果你想把数据保存在本地,或者希望能省钱办事(讯飞语音转文字说实话还是挺贵的),完全可以 DIY 一下,顺便练习练习自己编程部署应用。

学一些基本的编程知识

其实现在已经有了很多优秀的在线编程学习平台,比如 Codecademy、Coursera、各个机构(尤其是国外顶级大学、微软、Google)发布的免费公开课等等,上面都有各种免费或低价的编程课程。这些课程通常包含视频教程和互动练习,可以帮助你快速入门——说到视频教程,YouTube 上优秀的编程课程也是一堆一堆的,如果你不方便上 YouTube,B 站上也有好心的 up 主搬运一些课程(而且可能还加上了中文字幕)。

再次强调:通过这些入门编程课程的学习,咱学的不是从零开始开发一个完整产品的技能,而是要掌握一些基本的编程知识。

为自己的电脑设置一个开发环境:程序员们中间流行着一句话:软件开发第一步、也是最重要的一步,就是设置环境。一个用着舒服、稳定的开发环境,可以让你的编程之旅顺畅无比。这通常包括:

  • 选择并安装一个适合的代码编辑器或IDE,如Visual Studio Code、PyCharm等
  • 安装你选择的编程语言的运行时环境
  • 配置必要的开发工具,如包管理器(npm, pip 等)

理解基础编程概念:这些概念是编程的基石,无论你选择学习哪种编程语言,下面这些概念都是通用的:

  • 变量和数据类型:理解如何存储和操作不同类型的数据。
  • 运算符和表达式:运算符用于执行特定的运算操作,包括算术运算、赋值运算、比较运算、逻辑运算等。表达式是由运算符和操作数组成的式子,通过计算得出结果。
  • 条件语句:学会使用 if-else 等语句来控制程序的流程。
  • 循环:掌握 for 和 while 循环,用于重复执行某些操作。
  • 函数:了解如何定义和调用函数,这是代码复用的关键。
  • 输入和输出:输入和输出是程序与用户或外部环境之间进行交互的方式。输入可以是来自键盘、文件、网络等不同的源,输出可以是显示在屏幕上、写入文件、发送到网络等不同的目标。

学会基本的命令行操作:在编程世界中,命令行是一个强大的工具。虽然现代的集成开发环境(IDE,如 VS Code)提供了图形界面,但了解基本的命令行操作仍然很重要,它能让你更快速地执行许多任务——尤其是在处理服务器上的文件或者需要频繁操作文件时。命令行在 macOS 下可以直接打开「终端」应用,在 Windows 下可以按「Win 键+R」,然后输入「cmd」再回车打开命令行界面。一些常见的命令行有:

  • 在文件系统中跳转:使用 cd 命令切换目录,ls(在 Windows 中是 dir)查看目录内容。
  • 创建和删除文件/文件夹:使用 mkdir 创建文件夹,touch(在 Windows 中是 echo.>)创建文件,rm 删除文件。
  • 运行程序:直接在命令行中运行你的脚本或程序。
  • 安装程序:在命令行界最牛的程序包管理工具,macOS 以及 Linux 下首推 Homebrew,Windows 下首推 Chocolatey。

理解 URL 里的参数:在前端开发和使用 API 的过程中,理解 URL 结构和参数都是非常重要的,iOS 和 Android 客户端应用里也会有各种参数通过 deeplink 传递。URL 参数通常出现在 URL 的末尾,以问号开始,多个参数之间用 & 符号分隔。例如:

https://api.example.com/translate?text=Hello&source=en&target=fr

在以上这个示意完成文本翻译的 URL 中,text、source 和 target 都是这个 URL 的参数,用来指定「翻译文本」这个操作需要输入的必要参数。理解类似这样的结构,可以帮助你更好地使用各种前端服务和 API。

Git 版本控制:Git 是一个强大的版本控制系统,被广泛用于管理代码和协作开发,目前很多优秀的开源程序都可以在 Github 等平台上找到。你需要一些了解的基本 Git 操作包括:

  • git clone:从远程仓库克隆项目到本地
  • git add:将修改添加到暂存区
  • git commit:提交修改
  • git push:将本地的修改推送到远程仓库
  • git pull:从远程仓库拉取最新的修改

现在有很多开源工具都提供了详细的部署和使用教程,像 Postman 这样的工具也可以让你轻松地测试和使用各种API,一般照着操作下来都能轻松搞定。另外,很多开发工具也都有免费额度(最近几年最火的是大发善心的 Cloudflare),个人使用往往都足够了。当你遇到问题时,程序员社区、GitHub 的 Issues 页面,甚至是大语言模型都可以成为你的得力助手,帮你解答疑惑。

养成查找和阅读开发文档的习惯

现在很多产品和工具都配备了非常详细的开发文档,养成阅读开发文档的习惯能够帮助本地化经理全面而准确地理解产品功能,同时培养自主解决问题的能力。

开发文档通常是产品功能最直接、最权威的说明,它详细描述了产品的各项功能、使用方法和技术细节。通过深入阅读这些文档,我们能够准确把握产品的每一个细节,准确理解每个函数的作用、参数含义以及可能的返回值。当遇到技术相关的难题时,你就能够凭借对文档的熟悉,自主查找和实施解决方案,而不必每次都依赖程序员的支持。

通过持续阅读和理解开发文档,你会逐渐积累起对产品技术架构的整体认知。这种认知能力使你在面对新的挑战时,能够更快速地定位问题所在,并提出有针对性的解决方案。你可能会发现自己越来越少地需要寻求技术支持,而是能够独立处理越来越多的技术相关问题,甚至可能会发现一些创新的本地化方案。这不仅能提高工作效率,还能增强你在团队中的专业形象和不可替代性。随着时间的推移,你会发现这种能力的提升不仅有利于当前的工作,还能为你的长期职业发展铺平道路,使你在快速变化的技术环境中保持竞争力。

我的编程实践

接下来我来分享四个我自己学习和使用编程工具、完成不同类型任务的例子,而且这四个例子涵盖了目前常见的四种工具使用方式,希望能对各位产品本地化同仁有所启发和帮助。

使用 Postman 调用 DeepL 的翻译 API

掌握的知识和工具:API 及其调用,Postman 的使用

几年前,还没有大模型翻译这个东东,当时各家机翻还是靠的神经网络翻译引擎,其中质量相对比较好的就是 DeepL。那时候我还在自己做译者,所以就很想用机翻校对的流程来提升效率,但对于文稿来说,把它上传到 TMS 然后机翻再下载又显得繁琐了,而且还有费用。正好我又想办法注册到了 DeepL 免费的开发者 Pro API,所以我就想能不能直接用 DeepL 的 API 来生成机翻文档。

但是自己在终端应用里通过命令行拼命令太过痛苦,而且涉及到文件操作就更是如此,所以我就想找个有界面的在线工具来试试。一搜「API 调用工具」,Postman 就出现在了前几位,一研究,发现正好符合我的需求,于是迅速行动,照着 DeepL 的开发文档,配好了两个 request,一个负责把文档上传进行翻译,一个把翻译好的文档取回来。

用第一个「doc translation」翻译完之后,API 会返回一个 document_key,然后我再在「get doc translation」那儿把这个 document_key 配置好,运行一次就可以得到翻译好的结果。虽然 DeepL 的文档说 API 会按输入文档的格式返回输出文档,但我在 Postman 里第一次获取翻译文档的时候却遇到了一个问题:我上传的是 .docx 文件,但 API 返回的内容是放在网页上的纯文本,不知道该怎么样得到翻译好的 .docx 文件。

经过一番探索,我才在界面上的 response 区域右边找到了「Save Response」的按钮,成功地下载到了翻译好的文档。

在 Git Pages 上部署运动记录网站

掌握的知识和工具:GitHub 基本操作,运用 GitHub Pages 部署静态网站,三方网站应用创建和 Token 配置,iOS 快捷指令

今年年初,偶然发现了 @yihong0618 做的一个记录跑步运动的工作项目「running page」,回想到自己过去一年骑车通勤也有累计 1400 公里,于是萌生了利用这个项目记录一下自己骑行运动的念头。

原本的 running page 支持了十几种应用数据的同步和展示,我用的 Strava 就在其中,但可惜这个项目只支持跑步这一种运动。但好在开源社区牛人很多,有一位老兄 fork 了 yihong 的项目,添加了多种运动支持。于是我就 fork 了这位老兄的项目,然后照着 yihong 大大细致的部署指南,最后顺利在 GitHub Pages 上搭起了自己的运动记录站,而且也照猫画虎设置好了快捷指令,从此运动一结束、数据同步到 Strava,当我从 Strava 切到别的应用时,就会自动触发快捷指令,向我 fork 的项目提交最新的运动数据,并更新网站。

当然,后来我还发挥了一把,把原本网站代码里的各种中英文文本都进行了定制和修正,还定制了网站的头像、标题等等。现在在我的运动记录站上就可以看到超级酷炫的运动汇总信息了。

在 Vercel 上部署大模型聊天和助手工具

掌握的知识和工具:运用 Vercel 部署前端网站,Vercel 数据库以及应用环境参数设置,Cloudflare R2 配置

从有大语言模型开始,我就一直在用 OpenCat 和大模型聊天互动,但后来有天在 X 上看到了一款开源的聊天工具叫 LobeChat,界面设计很友好,可以通过 PWA 实现类似原生应用的使用体验,最关键的是它还有插件市场,使用插件可以实现网站内容爬取、实时 Google 搜索等等功能。

我就跑到它的开发文档里学习了一番,然后人生第一次在 Vercel 上部署了自己的一个网页应用(真的是点几下就部署完成了,而且还可以通过 GitHub Actions 实现和源 repo 的实时同步更新)。当时的美中不足就是,我每在一个新的设备上打开一次自己配置的 LobeChat,就需要把应用的配置文件导入一次,设备之间数据无法顺畅地同步。

幸运的是,LobeChat 的开发者 @arvinxx 和其他几位贡献者都十分勤奋,很快就实现了服务端数据库部署,也就是说,我只要配置好一次,就可以在所有设备上实时同步我配置好的所有大模型,而且我和助手的聊天记录也可以实时同步。

所以我很兴奋地在 GitHub、Vercel、Clerk、Cloudflare 之间一顿操作,最后成功实现了服务端配置。LobeChat 近期也上线了知识库 RAG 和文件聊天功能,越来越好用了。在过去的几个月里,我也给 LobeChat 提了不少 Issues,通过反馈帮助它变得更好。

用 Docker 在服务器上部署 GPT-4o 到小爱音箱

掌握的知识和工具:VPS 服务器操作,通过 Docker 部署和管理应用,提 GitHub pull request

17251838134290

家里有个小爱音箱,最便宜的那款 mini,一直我们都用它来给孩子放音乐、通过语音控制米家网关开关灯什么的。也是有一天,我发现有位叫 @idootop 的开发者做了一个叫「mi-gpt」的项目,可以通过在服务器(或者本地)部署 Docker 包、运行 Docker 服务,给小爱音箱接入大模型(前面说的 yihong 此前其实也做过一个类似的项目,mi-gpt 还受到过他的启发)。于是我的心又痒了起来——因为我正好也有一台(一年要 600 多块却没怎么用起来的)VPS 啊!

于是我又动了起来,第一次在 VPS 上装上了 Docker,然后照着 mi-gpt 的部署说明照猫画虎鼓捣一番——结果小爱音箱并没有按预期用大模型回答我的问题,还是那个呆呆的小爱同学……

于是又仔细一看开发文档,原来当时 mi-gpt 只支持 OpenAI 原生 API,而我的是 Azure OpenAI 的 API,所以我「抱着试试看的态度」,在 mi-gpt 项目里提了个 Issue。没想到 @idootop 响应超级快,说愿意加上对 Azure OpenAI 的支持,但他没有 Azure OpenAI,需要我提供一个 API 一起调试一下。

那肯定没问题啊,所以我新开了一个资源,然后共享了密钥和地址。又经过一番更新和尝试,最后终于找到了正确的环境变量配置。随后,我把 mi-gpt 的源 repo fork 到了我自己账户下,在环境变量设置示例文件里添加了 Azure OpenAI 的配置信息,并向源 repo 提交了一个 pull request (PR)。很快,我的 PR 就被通过了,因此我也光荣地成为了 mi-gpt 这个项目的贡献者(尽管贡献微不足道吧)!

migpt

结语

通过自己的实践,我意识到原来编程这事儿,或者说利用编程能力帮助自己解决问题,现在已经没那么难了。不过我也总结了三个对学习编程大有帮助的习惯/做法:

提升搜索技巧和提问能力

在编程学习过程中,你不可避免地会遇到各种问题。知道如何有效地搜索解决方案和提出好的问题是非常重要的技能(韩林涛老师也一直强调培养「搜商」)。一些建议:

  • 使用精确的关键词:例如,不要只搜索「Python错误」,而是搜索具体的错误信息。
  • 利用高级搜索功能:如使用引号来搜索精确短语,使用site:来限制搜索特定网站。
  • 学会阅读错误信息:错误信息通常包含解决问题的关键线索。
  • 学会如何在 Stack Overflow 等平台上提出好问题也很重要。一个好的问题应该包含问题的具体描述、你尝试过的解决方法、以及相关的代码片段。

提升 Prompt Engineering 技巧

随着大语言模型的普及,学会如何编写有效的 prompt 变得越来越重要。主要的一些技巧包括:

  • 明确指出你的角色和需求
  • 提供具体的上下文信息
  • 分步骤提问,而不是一次性问复杂的问题
  • 要求模型解释其回答,或者提供示例

租一台自己可以支配的 VPS(虚拟私有服务器)(可选)

虽然这条不是绝对必要,但租一台自己的 VPS,可以大大增强你的学习和实践能力。有了VPS,你可以:

  • 部署和托管你的网页应用
  • 实践服务器管理和配置
  • 运行需要持续在线的程序或服务
  • 进行各种实验而不影响你的本地环境

总之,对产品本地化经理来说,运用编程解决问题的能力是一个重要的加分项。通过学习和实践,你不仅能提升自己的职业竞争力,也能更好地服务你的团队和产品。无论你是刚刚入门,还是希望深化自己的技能,都请记住:带着问题去学习,利用好现有资源,编程的世界就会为你打开新的大门。

题图:markusspiske via Pixabay


产品本地化蓝皮书」(productloc)公众号是宣讲互联网产品全球化/本地化实践的平台,欢迎大家踊跃评论。
如果你也有兴趣和我、和大家分享自己对产品本地化的见解,请在公众号消息框发私信给我,或者和我在 LinkedIn 上建立联系。