京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作为一个专业的数据科学程序员需要具备些什么
我作为一个数据科学家的经历跟我在书本和博客上所读到的根本不一样。我曾读到过为数字超级新星公司工作的数据科学家,他们听上去像是英雄,可以写出自动化(近乎有感知能力的)算法并不断地大量获取认知结果。我也读到过像百战天龙那样的数据科学家黑客,他们可以通过将他们周围有的任意原始材料拼凑出数据产品来拯救世界。
我的团队创建的数据产品并没有重要到可以评价大型的企业级基础设施。只是我觉得,投资超高效的自动化以及产品控制是不值得的。另一方面,我们的数据产品影响了企业中的重要决策,并且我们的努力是可测量,这一点十分重要。我们负担不起总是将所有的事情人为来做,但我们也需要高效的方法来为成千上万的人们共享结果。
现实中大部分还是 “常规”的数据科学家。我们比黑客们更有组织但是并不需要一个超级英雄般的数据科学老巢。我们一组人聚在一起进行思维碰撞,我们在此对于写出稳定的代码的最佳实践进行头脑风暴。这篇文章是对这次对话的一个总结,并且试图将我们的知识收集起来,取其精华至于一处。
如何变得专业化
数据科学家需要具备一些软件工程的技能,只不过并不是一个专业的软件工程师所需要的所有技能。我将具备必要的数据产品工程技能的数据科学家称为专业的数据科学程序员。专业并不是指类似一个证书或者多少小时的经验,我所指的是方法上的专业性。专业的数据科学程序员在他们建立数据产品的过程中是可以自我改正的。他们有着常见的策略来识别工作中的问题并纠正错误。
专业的数据科学程序员不得不将一个假说用一个可以测试的程序来表达出来。数据科学编程在软件工程中是独特的,这是因为数据科学家所处理的那些问题类型。巨大的挑战在于数据科学本质就是实验性的。这些挑战经常是困难的,数据是混乱的。对于很多这类问题,并没有已知的解决方案和策略,通往解决方案的路是前所未有的,可能的解决方案都是步步为营取最优来得出的。在下面的内容中,我会介绍一个规范的、有生产力的试错的常见策略:将问题分成多个小步骤,分别尝试解决方案,在过程中一直做出纠正和改进。
像专业人士一样思考
为了成为一个专业的数据科学程序员,你必须了解比系统是如何构造的更多。你必须知道如何设计一个解决方案,在你有一个解决方案时你必须能够识别出来,你也必须在你没有完全理解你的方案时有所察觉。最后一点是你必须能够自我纠错。当你识别出你方法中的概念差异的时候,你能够自己将其完善。为了以一个你可以自我纠错的方式来设计数据科学解决方案,我发现依照以下基本步骤是很有用的:观察、理解、想象以及展示。
第一步:观察。从扫描环境开始。做背景研究并对所有可能与你试图解决的问题有关的细枝末节有所了解。以尽量宽广的视野来看待你的问题。尽量多的发现场景并且收集各类不同的信息。
第二步:理解。将你发现的各种信息碎片抽象成符合黑板模式的元素。在这个阶段,你正在将问题中的元素转化为有意义的技术性的概念。理解问题是为可行的设计奠定基础的关键步骤。
第三步:想象。根据你理解的技术概念,想象一些可以使你往目标更近一步的实现。如果你不能想象出一个实现,那么你可能在你观察问题的时候错过了什么。
第四步:展示。首先将你的解决方案解释给自己听,然后是你的伙伴,然后是你的老板,最后是你的目标客户。每一次解释只需要以传达到你的观点的正式程度即可:一次饮水机旁的短暂谈话,一封电子邮件、一次15分钟的散步。这是在成为一个自我纠错的专业数据程序员的过程中最重要的常规实践。如果你的方案有任何漏洞,那么他们将会在你尝试解释的时候发现它。花点时间来填充这些沟通代沟,并且确保你可以恰当地解释问题和针对它的解决方案。
像专业人士一样设计
创建和发布一个数据产品的活动是多样且复杂的,但是,一般来说,你将要做的会在阿利斯泰尔克罗尔(Alistair Croll )描述的大数据供应链中所包含。
由于数据产品依照一个范式(实时、批量或者两者的混合)来执行,你很有可能发现你自己正在一个数据供应链活动和一个数据范式的整合之中:注入和清理批量更新的数据,建立一个算法来分析实时数据,将批处理的结果进行共享等。幸运的是,黑板架构模式给予了我们一个基础的蓝图来应用良好的软件工程应对这些场景。
黑板模式

黑板模式告诉我们通过将整个任务进行划分来找到一系列更小的自包含 的子任务的方式来解决问题。每一个子任务将你的假说转化为一个更容易解决或是解法已知的假说。每一个任务逐渐改进解决方案,并且理想的情况下通向一个可行的解决方案。
数据科学被工具所淹没,每一个都有其独特的优点。生产力是很重要的,我喜欢让我的团队选择任何他们最熟悉的工具。使用黑板模式使得从一系列不同的技术来构建数据产品变得可行。算法之间的协作通过共享数据仓库来发生。每一个算法可以获取数据,将它们作为输入并且将结果返回给数据仓库为其他的算法作为输入。
最后,所有的算法都通过使用单个代表用来解决问题的启发者的控制组件来互相协作。控制器是你已经选择的解决问题的策略的实现。这是最高层面的对问题的抽象和理解,这是由可以交互的并且决定所有算法顺序的技术所实现的。控制器可以是像一个cron的定时任务或者脚本一样的自动化组件。或者可以是人工的,按照顺序执行不同步骤。但总体来说,这是解决问题的根本策略。这是一个你可以从头到尾了解问题解决方案的地方。
图片由Jerry Overton提供
这一基本的方法已被证明在构建必须通过不完全数据解决不确定的、假设的问题的软件系统时是有用的。最棒的一部分是它使得我们通过确定的部分在不确定的问题上获得进展。不幸的是,我们并不保证你的努力真的一定会解决问题。你最好尽早知道如果你走的路是不起作用的。你需要 通过你实现系统的顺序来完成。

像专业人士一样构建
你不一定非要以固定的顺序来构筑数据产品的元素(例如,先建立数据仓库,然后是算法,然后是控制器)。专业的方法是按照最高的技术风险来构建。从最高风险的元素先开始。一个元素会因为很多原因成为技术风险。最有风险的部分可能是那个有着最高工作负载的或者是你最不了解的部分。
你可以通过专注于单个元素然后解决其他的方式以任意顺序构建组件。例如,如果你决定从构建算法开始,无视数据输入并且定义一个临时点来写入算法输出。
图片由Jerry Overton提供
然后,以技术风险高低的顺序实现数据产品:风险最高的元素最先开始。专注于一个特定的元素,无视其他的,稍后再替换它们。
这里的关键是以小块的方式构建并执行:以你理解的小步骤来写算法,一个数据源一次的方式构建数据仓库,以及一个算法执行步骤一次的方式构建你的控制器。目标是总是有一个可以工作的数据产品,只不过它只有到最后才是功能完备的。
专业人士的工具
每一个专业人员需要有质量的工具。有太多的选择可以使用。下面列出了一些公认最常用的工具,我附上了链接使得你们可以了解更多信息:
D3.js: D3.js (或者D3, 数据驱动文档) 是一个JavaScript 库,旨在在浏览器中建立动态的可交互的数据可视化。它利用了广泛被实现的SVG, HTML5以及 CSS 标准。
版本控制:
GitHub: GitHub 是一个基于网络的Git仓库服务,它提供了所有的Git的分布式修订控制和源代码管理功能,也添加了它自己的功能特性。GitHub提供了一个基于网络的图形化界面和移动端的桌面应用。
编程语言:
R: R 是一个针对统计计算和图形化的编程语言及软件环境。R语言在统计学家和开发统计软件和数据分析的数据挖掘者中被广泛使用。
Python: Python 是一种被广泛使用的通用的高层次的编程语言。它的设计理念强调代码的可读性,它的语法允许编程人员用比C 和Java更少的代码来表达概念。
Scala: Scala 是一种针对通用软件应用的对象函数式编程语言。Scala有着对函数式编程的全面支持,以及一个非常健壮的静态类型系统。这使得用Scala写的程序非常简洁因而比其他通用编程语言尺寸更小。
Java: Java 是一种通用的计算机编程语言,它是并发的、基于类的、面向对象的、特别为了减少实现依赖而设计的。它旨在让应用“一次编写,随处执行”
Hadoop生态系统:
Hadoop: Hadoop 是一个用Java开发的开源的软件框架,为了在基于商业硬件的计算机集群上进行分布式存储和分布式处理海量数据集。
Pig: Pig 是一个为了创建Hadoop之上MapReduce程序的高层平台
Hive: Hive 是一个在Hadoop之上构建的数据仓库基础结构,旨在提供数据汇总、查询和分析。
Spark: Spark的内存原语操作为某些应用提供了高达100倍的性能提升
结束语:本文来自哪里
这篇文章起始于一次偶然的关于我的团队中正面临的生产力问题的讨论。我们最终将问题追溯到技术平台和我们的软件工程知识。我们需要在我们的软件工程实践中补上漏洞,但是每次的经验都太抽象或是太细节(对于专业的软件开发者来说)。我是一个由外至内数据科学方法的拥护者,我决定主办一个开放的群聊来讨论这些事。
我们获得了相当大的参与度:30分钟之内有179条发布;600个观点,以及28000多个访问。我主持了讨论并基于最有影响力的答案总结了我们的发现,然后我将那个总结作为本文的基础。我想要感谢所有那些参加了这一过程的人们,并花一些时间来认可他们的贡献。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 1. VLOOKUP:按行跨区域找数据(最常用) 作用:在指定的表格或数据区域的第一列里找目标值, ...
2026-10-23数据敏感度不是天赋,也不是“看一眼数字就能发现问题”的直觉。对市场专员来说,它更接近一套可练习的工作习惯:看到投放ROI、 ...
2026-10-23市场营销专员转数据分析,不是从零重来。你已有的渠道投放、活动执行、线索跟进经验,本身就是分析工作的原料——缺的不是业务理 ...
2026-10-23先说结论:市场岗位并非必须考数据分析证书。招聘方更常看的是你能否把渠道效果、活动ROI、线索转化这些业务问题讲清楚,证书只 ...
2026-10-23市场分析师的职场知识提升,最怕两件事:一是把“学工具”当成学习本身,Excel、SQL、Python轮着学一遍,回到工作里还是不知道怎 ...
2026-10-23市场分析师的通用技能可以归为五块:业务与市场理解、调研与竞品分析、用户与渠道数据分析、指标与分析表达、工具操作。它们不是 ...
2026-10-23市场分析师的核心技能,可以先用一个框架回答:懂业务与市场、能取数与处理数据、会指标与分析方法、能把洞察讲清楚。这四块是共 ...
2026-10-23市场策划不是“会写文案、能办活动”这么简单。它本质上是一个用创意和资源撬动业务结果的岗位:先理解市场和人群,再形成方案, ...
2026-10-23社群运营不是“拉群、发通知、维护气氛”这么简单。它真正要对的结果是:用户进得来、留得住、愿意互动、最终产生转化或复购。因 ...
2026-10-23营销人的能力提升计划,最容易做成一张课程清单:报名几门课、读完几本书、考一个证,年底回头看,工作方式却没变。问题不在努力 ...
2026-10-23人力资源专员的职场价值,不由“做了多少事”决定,而由“解决什么问题、留下什么成果”决定。同样做招聘、算考勤、办入离职,有 ...
2026-10-23产品经理的职场价值,不主要由会画原型、会写文档决定,而由能否用业务结果证明自己的判断与推动决定。同一岗位的人价值差距大, ...
2026-10-23运营专员的能力提升,最容易走偏成两件事:一是把市面上所有工具都学一遍,二是把沟通、协作这类通用能力当成唯一答案。更有效的 ...
2026-10-23市场总监的沟通与管理,难点通常不在话术,而在三件事能否同时成立:向上用结论和数据对齐目标,平级用共同指标换取协同,向下用 ...
2026-10-23市场分析师的沟通失分,往往不是“嘴笨”,而是三件事没做好:结论没提炼出来、指标口径没对齐、建议没有落到决策上。所以提升沟 ...
2026-10-23社群运营做久了,很容易陷入一种忙碌:每天在群里发内容、回消息、做活动,热闹的时候很热闹,可一到月底复盘,说不清哪些动作带 ...
2026-10-23品牌运营的技能提升,最容易走偏的一步是先报课、先学工具。更有效的顺序是:先沿“品牌定位与策略—内容与传播—渠道与活动执行 ...
2026-10-23营销人员想赢得客户信任,单靠话术和关系维护越来越不够。客户在签约前会追问:你懂我的业务吗?方案里的数字怎么来的?承诺的效 ...
2026-10-23APP运营专员的能力提升,容易陷入两种误区:一是把“会用工具”当成能力全部,学了一堆Excel函数和SQL语法,回到岗位仍说不清一 ...
2026-10-23社群运营的沟通难点,不在于“会不会说话”,而在于同一件事要对三类人说清楚:对用户要安抚情绪、给出确定答复;对产品、活动、 ...
2026-10-23