如何提升团队编程能力 (探索性编程)

数据探索与软件开发截然不同。为何数据团队应当拥抱专为探索性编程而设计的工具?

   件开发团队非常熟悉软件工程,比如经典瀑布方法、敏捷方法,技术团队在不同软件工程方法有着丰富的实践经验、成熟流程和管理方法。

  但是数据团队就不同了,在工具和工程方*论法**上都面临巨大的挑战,软件开发的工具和工程方法并不是适合于探索数据和获得、分享见解。

  接下来探讨下:为什么探索式编程是专为数据团队量身打造的?什么样的工具能够助力释放数据价值?

什么是探索性编程

  在计算机科学领域存在两种范式:一种用于构建,一种用于探索。探索性编程(Exploratory Programming)是一种在问题解决过程中对未知结果的生成与改进的编程范式。其与对应的构建性编程(Building Programming)是指系统和结构化地构建功能以实现特定目标的编程范式。

  探索性编程主要关注于生成未知和不确定结果的过程,将解决问题的过程看作是一种认知和探索的过程。在探索性编程中,开发者通过对数据进行多种尝试和试验,找到最有效、最简单和最可靠的解决方案。

如何提升团队编程能力,探索性编程

构建性编程就好比攀登熟知的名山,而探索性编程则类似探险未知的山脉

在20世纪50年代的第一次人工智能浪潮中,人们已经开始意识到用于软件开发的工具不太适合本质上具有高度探索性的工作。

  在1980年代,施乐的一位AI工程师名叫Shiel,他在工作中遇到了问题:他所使用的工具和方法依赖于线性的流程图,每一步都朝着预期的结果前进。然而,当涉及AI探索时,Shiel 并不知道结果会是什么样的,也不确定具体的步骤应该是什么。就像当前的数据团队或AI团队一样,他们的工作更像是在探索,而不是在构建。在1983年,他写了一篇名为《程序员的强大工具/Power Tools for Programmers》的论文,并以一种新的方式描述了他的工作:探索性编程。

  2017年卡内基梅隆大学人机交互研究所的Mary Beth Kery和Brad A. Myers 发表的论文《探索性编程探究/Exploring Exploratory Programming》中,提出探索性编程的两个基本特征:

  • 编写代码进行原型设计或实验。
  • 允许最终目标在整个过程中不断演变。

  当数据团队接到数据需求时,并不知道现有数据能找到什么见解(Insight),或者如何找到它。

  《探索性编程探究/Exploring Exploratory Programming》提出探索式编程的5个最佳实践,以下是5个最佳时间在数据工作上的解读:

  • 探索的需求:

  大部分数据探索和人工智能类项目都需要进行探索。这些项目的实施,涉及到未知领域的探索,随着深入研究和不断迭代,目标也会不断地改变。

  • 代码质量权衡:

  数据探索的目标并非优化代码质量,而是优化洞察时间。您可能会事后返回并完善工作,但您的首要目标是迅速提取知识和见解。

  • 探索的易用性或困难性:

  现有的语言、库和工具将决定您需要花费多少时间和精力。当您进行数据探索时,选择合适的工具将帮助您减少不必要的冗长步骤,从而加快工作速度。

  • 探索过程:

  数据探索并不是一条直线——通常需要回溯来调整当前进行的工作。您会不断更新变量和参数,运行不同版本的代码,并参考代码历史记录来指导后续的步骤。

  • 团队或个人探索:

  数据项目是一项团队合作的活动。您可能会独自开始,但最终需要与其他人协调实验和发现。在这个过程中,很可能会遇到一些障碍。数据探索是一个复杂的过程,很难作为一个团队来跟踪整个探索的进展。

如何提升团队编程能力,探索性编程

探索性编程/数据探索的五个特征

如果您是数据工作者,大概率您已经意识到这些特征,甚至在您日常工作中经常面对的情况。但是要真正付诸实施实现这些目标是相当困难的(说起来容易做起来难)。

探索性编程需要正确的工具

  《探索性编程探究/Exploring Exploratory Programming》论文中指出了成功探索性编程的障碍:尽管探索性编程在当今许多应用中普遍存在,但目前仍缺乏对实验的工具支持,包括记录和理解探索历史的支持,以及支持团队进行探索的工具。

数据团队没有适合数据探索工作的工具

  软件工程师的最佳实践比如:敏捷开发、冲刺、持续集成、持续部署等,非常适合构建软件,不适合数据探索。软件工程师致力于交付软件产品;数据团队致力于发现见解。或者说软件工程师是建设者,数据工作者是探险者。

如何提升团队编程能力,探索性编程

构建性编程与探索性编程的流程

2019 年的论文《支持数据工作者执行探索性编程/Supporting Data Workers To Perform Exploratory Programming》表明:

许多数据团队使用的工具(IDE)确实存在问题。由于这些工具主要是为软件开发而设计,对于数据团队来说并不完全适用,导致数据团队在使用这些工具时容易囤积和克隆代码,并在频繁的上下文切换中遇到困难。这样的情况导致数据团队进展缓慢,洞察力受限,同时也难以与队友高效协作。

Notebook是为数据探索而生

  数据探索/数据分析都是反复尝试,一个又一个SQL语句、可视化,数据工作无法直线寻找见解、方法或方案,或者说数据工作者也不知道见解在哪里?

  Notebook是一种为探索性编程的工具,是最佳的数据探索、数据分析/数据科学的工具,正是数据探索的最佳的探索性编程的工具。与传统的代码编辑器不同,Notebook允许用户在一个地方运行查询、编写代码、可视化数据集以及将思维过程记录为数据故事/数据分析报告。

  Notebook 是进行数据分析/数据科学的编的工具,适合探索性编程、数据分析和数据科学。它具有以下优点:

  1. 代码与文档一体化 :Notebook 可以将代码、数据和文档(如表格和图形)整合在一起,使得数据分析过程更加直观和易于理解。
  2. 交互式体验 :Notebook 支持实时交互式编程,可以让开发者在编写代码的过程中实时查看结果,从而更好地进行探索和调整。
  3. 易于分享和协作 :Notebook 可以将代码、数据和文档导出为多种格式(如 PDF、HTML 等),方便与他人分享和协作。
  4. 丰富的工具包/生态 :Notebook 具有丰富的工具包/生态,可以与多种库和工具(如 Pandas、Numpy、Echarts、Scikit-learn、TensorFlow 等)无缝集成,提高数据分析和探索的效率。

如果数据专业人员是探险家,Notebook就是他们的指南针、望远镜和日记。

  总之,探索性编程是一种重要的编程范式,对于开发者来说,掌握探索性编程的方法和技巧,以及 Notebook 等工具的使用,将有助于提高问题解决和创新能力,适应不断变化的技术环境。

如何提升团队编程能力,探索性编程

SmartNotebook是新一代的Notebook数据探索平台

曾经Notebook是孤立的、独立的工具,未来Notebook是协作的、云化、用户友好的数据工作空间,数据团队的最佳伴侣。SmartNotebook是完美支持探索性数据分析、团队合作的工具、是新一代的Notebook。

关于SmartNotebook

  SmartNoteBook(简称:SNB)是一款现代化的Notebook工具,它是一个开箱即用、云原生、协作式的在线数据科学与分析平台。SNB具有以下特点:

  1. 数据连接 :SNB可以连接到各种数据形式,包括数据文件、数据库/仓库、数据湖、图数据库、数据开放平台API等。您可以轻松地获取所需的数据,无论数据存储在哪里。
  2. 数据分析与探索 :通过SNB可以进行探索性数据分析,内置探索性数据分析的组件、SQL原生支持,支持数据清洗、转换、聚合等操作,深入了解数据的特征和模式。同时也可以使用Python 生态体系内各种强大的工具和库。
  3. 建立预测模型与服务API :SNB提供了机器学习和预测建模的功能。支持Scikit-learn、TensorFlow等库,建立预测模型,并将其创建为服务API,供其他应用程序调用和使用。
  4. 支持知识图谱挖掘 :SNB支持连接图数据库进行关系数据的分析、计算和挖掘,将数据之间的关系和连接进行可视化,有助于发现数据之间的隐藏模式和洞察。
  5. 数据可视化与报告生成 :SNB提供了丰富的数据可视化功能,敏捷可视化分析和输出,用于展示和传达数据的见解和故事。
  6. 仪表盘与报告共享 :通过SNB创建交互式的数据仪表盘和报告。可以将数据的洞察和分析结果以直观和易于理解的方式与团队或其他利益相关者共享。
  7. 数据智灵(人工智能AI伴侣) :用户可以通过自然语言描述数据分析需求生成、编辑、bug修复和文档注释Python或SQL 代码,这种方式可以帮助用户更加轻松地处理和分析数据,尤其是对于那些不熟悉编程的人员来说,使用自然语言描述数据分析需求会更加直观和方便。

  SmartNoteBook致力于实现从数据接入到数据价值的全流程,使数据处理和分析变得更加简单、高效和可协作。通过SNB,您可以轻松地进行数据处理、分析和可视化,并通过共享报告和仪表盘将数据的洞察传达给相关人员。

SmartNotebook助力您轻松探索数据、协作和共享见解。