成为数据科学家的路线图,第二部分:软件工程

张开发
2026/4/15 3:06:12 15 分钟阅读

分享文章

成为数据科学家的路线图,第二部分:软件工程
原文towardsdatascience.com/roadmap-to-becoming-a-data-scientist-part-2-software-engineering-e2fee3fe4d71引言数据科学无疑是当今最迷人的领域之一。在大约十年前机器学习取得重大突破之后数据科学在技术社区中的受欢迎程度急剧上升。每年我们都见证了曾经看似不可思议的强大工具。诸如Transformer 架构、ChatGPT、检索增强生成RAG框架以及最先进的计算机视觉模型——包括GANs——对我们世界产生了深远的影响。然而随着工具的丰富和围绕 AI 的持续炒作确定在追求数据科学职业生涯时应该优先考虑哪些技能可能会让人感到不知所措——尤其是对于初学者来说。此外这个领域要求极高需要大量的投入和毅力。正如我们从第一部分中了解到的数据科学的主要领域可以分为三大类数学、软件工程和机器学习。在本文中我们将关注学习者需要掌握的软件工程技能以成为数据科学家。成为数据科学家的路线图第一部分数学本文将专注于开启数据科学职业生涯所需的软件技能。关于根据你的背景和其他因素选择这条道路是否值得讨论将在另一篇文章中展开。软件工程 – 关键领域软件工程是一个广泛的领域专注于数字应用的各个发展阶段。以下图表总结了其中最重要的部分。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fc619e68c4bc7832bddbd94bebfb5a4c.png不同软件工程领域之间的关系。这是我个人对软件工程领域主要关系的看法所以如果你有不同的观点那是完全合理的。为了构建一个最终产品通常是一个预测模型机器学习工程师需要后端开发技能来创建一个能够使用他们的模型的服务或者与其他后端工程师高效协作。此外熟练的后端工程师拥有必要的专业知识使他们能够使他们的应用程序与数据库交互并利用 DevOps 管道实现自动部署。当然可以依赖团队中的其他工程师来委派任务但通过发展跨职能专长来实现独立会更好。即使团队中有专门的工程师对其他领域的基本了解对于更有效地与他们沟通也是必不可少的。在现实中许多公司今天尤其是初创公司期望数据科学家在应用程序生命周期的不同阶段做出贡献。这甚至可以扩展到数据科学家从事后端和 DevOps 任务或者在需要快速创建一个界面来测试开发模型时进行前端开发。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c896d2fa6db46e11c0f4679f9591309b.png发展跨职能专长的优势考虑到所有这些方面我们现在将探讨数据科学家在现代时代应该具备的理想的基本能力和技能。01. Python为什么选择 Python有许多编程语言没有哪一种可以被看作是最好的因为每种语言都有其独特的用途可以从几个不同的角度进行评估。然而当涉及到数据科学时Python显然是一个明显的赢家。Python 提供了丰富的数据分析工具和用户友好的机器学习库使得数据科学项目的开发更加高效。虽然其他流行的语言如 JavaScript 或 Java 提供了一些开箱即用的功能但 Python 提供了更丰富的框架选择。此外Python 的简单语法使得与其他语言相比创建复杂模型和管道更加容易和快速。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e266c4d8dc63d55f4d1727e74a6fd15a.pngPython 路线图Python 的路线图对初学者来说并没有什么特别之处除了某些 Python 特定的概念外它与其他任何编程语言的路线图非常相似。02. 算法和数据结构数据就像燃料它是驱动数据科学本质的东西。鉴于这一点有无数种处理和操作数据的方法。但我们为什么要关心它们呢处理数据效率低下就像给汽车使用错误类型的燃料。虽然最终目标仍然可以通过不适当的工具实现但这可能带来巨大的成本例如高计算开销或过度使用内存。因此整个系统可能无法有效扩展。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2a532f76ea6a8beb4437675d38df1a15.png算法和数据结构路线图算法和数据结构主要涉及在不同情况下使用正确的工具。更具体地说数据结构定义了存储数据的方式以及对其执行标准操作的方法而算法则更多地关注解决具体问题时处理数据的不同方式。在这个领域有几个重要的主题需要研究。首先是大 O 符号它被广泛用于估计算法的整体复杂性。使用时间作为衡量算法性能的指标并不理想因为相同的算法在不同的环境中可能会有不同的表现。例如它可能在功能强大的计算机上运行得很快但在 CPU 核心较少的计算机上运行得较慢。此外执行时间还取决于输入数据参数。因此开发了大 O 符号。它将算法复杂性作为输入参数的函数来衡量考虑在理论极限下的性能。这种方法的优点是每个算法都有一个单一的复杂度级别无论它在执行时处于何种外部条件。其次还有排序算法它们在实践中的应用非常基础经常作为许多其他算法的构建块。我建议了解五种最流行的排序算法是一个很好的起点。我个人强烈建议学习**归并排序因为它引入了重要的“分而治之”范式这在许多其他算法中得到了广泛应用。此外快速排序**也值得研究因为它被认为是实际应用中最有效的排序算法之一。下一步是学习经典的数据结构。这样做将使选择最有效的数据结构来解决日常问题或根据你获得的有价值知识设计自己的数据结构变得更加容易。根据我的经验深入理解数据结构的最佳方式是手动实现它们而不依赖任何外部工具或库。动态规划是一种强大的技术它通过递归地将问题分解成更小的子问题来解决。通过存储这些已解决的子问题的结果算法可以重用它们通过子问题之间的递归关系来找到原始问题的解决方案。在我看来动态规划是算法中最具挑战性的主题之一但它也为那些需要迭代所有可能解决方案的问题提供了极其高效的解决方案通常会导致指数级甚至阶乘级的复杂性。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d466ef9547abf987077e907d0cfc99af.png动态规划示例算法的目标是找到 C3 单元格的值。单元格之间的已知关系由递归方程组成其中每个单元格是其左侧或底部某些单元格的总和。算法从 C3 递归地下降到左侧和底部的边缘单元格。通过知道它们的值然后从左到右和从下到上迭代地使用递归公式计算答案直到算法达到初始单元格 C3并返回最终答案。我推荐初学者重点关注的算法部分的最后一章是图论。在我讨论离散数学的第一部分1中我已经强调了图的重要性。然而当涉及到算法时我想从实现的角度强调它们的重要性。虽然理解图的基本概念是离散数学的一个关键方面但在实际应用中有效地应用它们是完全不同的挑战它带来了自己的一套复杂性和陷阱。03. 面向对象编程编写代码有多种范式。目前最常用的两种范式是过程式和面向对象编程。简单来说过程式范式涉及使用函数作为主要的构建块来组织代码。虽然这种方法在过去非常流行但随着更多方便和灵活的范式出现它已经变得不那么普遍了。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ef4f5cf784e345bc700d7e4b4686f23f.png面向对象编程路线图相比之下面向对象范式更进一步。它涉及将代码实体表示为可以相互交互或具有各种关系的对象。这些对象通过类定义作为通用模板可能包含基本字段和/或其他对象的组合。此外对象可以通过在类中实现的方法或函数表现出行为。**面向对象编程OOP**的一个优点是其代码中的对象与人类在现实生活中感知到的对象之间的自然对应。此外重用类和对象很容易这使得代码更易于维护。面向对象编程OOP建立在三个关键支柱之上继承、多态和封装。虽然我们在这里不会深入探讨这些术语但可以概括为在确保其安全一致使用的同时为类内现有代码的进一步重用提供额外功能。04. 数据库为了有效使用大数据存储在数据库中。数据库本身自动提供几个功能层这可能包括安全配置、事务管理、读写优化、管理设置以及许多其他功能。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1f2008eb179d114b10719997af17ffe2.png数据库路线图对于数据科学家来说最常见的用例包括数据库创建、从它们中读取数据以及向它们写入数据。在探索特定技术之前区分两种类型的数据库非常重要关系型SQL和非关系型NoSQL。简而言之关系型数据库以表格形式严格组织数据类似于人类在现实世界中通常组织信息的方式。另一方面非关系型数据库不那么严格对数据组织施加的约束较少。一般来说SQL 和 NoSQL 格式都有各自的优缺点。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3db370fbc8e9809fdc618e172a0c14af.png展示 SQL 和非关系型数据库之间差异的示例对于初学者来说我认为专注于 SQL 语言至关重要。SQL 是用于管理几乎所有关系型数据库的标准语言。具体来说数据科学家应了解如何执行CRUD操作在表中创建、读取、更新和删除数据。虽然 CREATE、UPDATE 和 DELETE 命令在 SQL 中的使用相对简单但 SELECT 命令可能扮演着更加关键的角色。SELECT 在实践中被广泛使用并提供了多种有效检索所需数据的方法。对于学习者来说他们使用哪种关系型数据库来掌握 SQL 并不重要因为它们有很多共同之处。然而最受欢迎的选择是 MySQL、PostgreSQL 和 Microsoft SQL Server。当涉及到非关系型数据库时我建议初学者尝试其中一两个例如MongoDB、Neo4j、Redis 等以了解它们与关系型数据库相比的基本差异。05. 网络开发网络开发与数据科学没有直接关系但它仍然是一项非常有用的技能。虽然能够构建一个智能的预测模型很有价值但通过一个视觉上吸引人的界面来展示它则是一个很大的加分项。这在初创公司中尤为重要因为可能期望单个机器学习工程师处理跨平台任务并在其生命周期的不同阶段开发模型。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/238239c0e7eb7455c364c705cdc1d530.png网络开发路线图此外通过了解 HTML 页面的结构和网络的一般工作方式你可以通过自动创建解析网页信息的脚本来进行网络抓取。这些信息可以用于训练模型例如。最后扎实的网络知识使你能够对外部API 调用进行操作。在拥有像 ChatGPT、Mistral 或 Llama 这样强大的 LLM 的现代时代这一点尤为重要。通常获得对网络开发的基本理解是一个相对容易实现的目标。要开始学习你应该了解HTML用于构建网页的主要结构。CSS用于使界面更加时尚和响应。JavaScript用于添加动态交互和动画化网站。HTTP 协议以及如何使用 JavaScript 进行 API 请求。一些经典的前端框架React、Vue 或 Angular以加速开发过程。拥有这些知识数据科学家应该在工作中有信心执行基本的与网络相关任务。06. DevOpsDevOps是软件工程的另一个分支专注于开发优化。通常DevOps 工程师创建工具、管道和环境目的是为软件工程师自动化常规任务。这使得开发者能够更多地专注于创建必要的产品功能而不是部署。尽管如此还有一些重要的 DevOps 工具数据科学家应该了解以下将进行讨论。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/72787ed89e3d904deeb340c3b8296242.pngDevOps 路线图在绝大多数企业中Linux被用作应用开发和部署的主要操作系统。因此开发者在日常工作中使用 Linux 命令行是很常见的。这类任务包括在目录结构中导航、更改文件权限、管理进程、执行脚本以及从远程服务器发送或接收数据。所有这些任务都是使用Bash来完成的。Bash 是一种在 Linux 中使用的脚本语言。与其他编程语言如 Python相比它具有更低级的语法可能不太方便使用但它仍然为管理操作系统任务和状态提供了许多有用的功能。在大多数情况下对于数据科学家来说了解基本的 Bash 命令就足以执行上一段中列出的任务。顺便说一句Git是一个必须掌握的重要工具。它允许对整个代码库进行版本控制。通过使用提交如果当前版本出现问题开发者可以轻松地回滚到之前的代码版本。此外Git 是一个协作工具它允许开发者使用分支同时处理项目的多个功能并最终合并所有更改。在学习 Git 时获得云版本控制系统VCS的实际操作经验也有益。最受欢迎的包括 GitHub、Bitbucket 和 GitLab。我个人推荐使用 GitHub因为它是最广泛使用的。使用云 VCS开发者可以将代码发布到中央仓库使协作更加容易。他们还可以创建问题、使用看板、写评论和组织拉取请求以合并更改。为了更有效地协作了解使用 Git 时最常用的工作流程也很重要。最受欢迎的工作流程之一是GitFlow它定义了多种分支类型及其管理规则。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c0c31ca39b38de9c15f2647d011d88ae.pngGitFlow 图表最后另一个重要的工具是Docker它用于应用程序容器化。每个应用程序在部署时都需要一组独特的依赖项这些依赖项可能需要操作系统特定的版本或属性。为了避免兼容性问题Docker 应运而生。通过与各种操作系统兼容Docker 在一个独立的环境中隔离应用程序并作为系统和应用程序之间的适配器允许下载所有必要的依赖项。因此同一应用程序可以在不同的操作系统上运行。额外。数据格式虽然许多其他路线图可能不会提及数据格式但我认为对于初学者来说了解数据或其他配置文件的不同表示方式很重要。以下列出了最常见的格式https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5ed4b4f3495c59e49a30487748c387d7.png需要了解的最重要数据格式结论在本文中我们确定了有志于成为数据科学家的人需要首先掌握的关键工程技能。一般来说数据科学是一个非常广泛的领域需要工程师具备多样化的技能集。通过在工程领域打下坚实的基础机器学习开发变得更加容易。在我的经验中学习者不仅应该专注于理解理论编程概念还应该获得实际操作经验。磨练编程技能的最好方法之一是完成结合最近所学技能的宠物项目。在下一篇文章中我们将讨论数据科学家所需的必要机器学习知识而这反过来又需要他们在数学和开发方面有扎实的知识基础。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/df68972a3ae00b43cbc03155313f541b.png在下一篇文章中我们将深入探讨必要的机器学习技能除非另有说明所有图片均为作者所有。

更多文章