NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
人工智能 (AI) 时代已经到来,许多软件开发人员担心自己无法保持与时俱进。
我们很容易将他们对职业未来的担忧视为卢德谬论的又一个例子,即简单地认为新技术不会摧毁就业,因为它只会改变经济中的就业结构,但有许多指标将软件开发人员的未来描绘得更加暗淡。
1、担忧加剧
据美国能源部橡树岭国家实验室的一组研究人员称,人工智能很有可能在 2040 年取代软件开发人员。
“编程趋势表明,软件开发将在未来发生根本性变化:机器学习、人工智能、自然语言处理和代码生成技术的结合将得到改进,到 2040 年,机器将代替人类编写大部分自己的代码,”研究人员表示。
软件开发人员的担忧是可以理解的。事实上,在专门从事软件开发的加州市场研究公司 Evans Data Corporation 调查的 550 名软件开发人员中,近 30% 的人认为,在可预见的未来,他们的开发工作将被人工智能取代。
据 Evans Data 首席执行官 Janel Garvin 称,对人工智能淘汰的担忧“也比没有退休金的老年人、因管理不善而无法工作或看到自己的技能和工具变得无关紧要更可怕。”
2、AI 如何改变软件开发世界
近年来,AI 对软件开发领域产生了重大影响,带来了一些显著的变化和进步。以下是 AI 影响软件开发的一些方式:
- 自动化和生产力
AI 实现了各种软件开发任务的自动化,提高了生产力和效率。例如,基于 AI 的工具可以自动生成代码片段、执行代码重构并协助检测和修复错误。这种自动化可以帮助开发人员节省时间,并专注于软件开发中更复杂和更关键的方面。
- 测试和质量保证
AI 改进了测试和质量保证流程。基于 AI 的测试工具可以分析代码、识别潜在漏洞并自动生成测试用例。机器学习技术用于从过去的测试结果中学习并预测更可能包含错误的代码区域。这有助于开发人员在开发周期的早期识别和修复问题,从而提高软件质量。
- 自然语言处理 (NLP)
NLP 是人工智能的一个子领域,在理解和处理人类语言方面取得了重大进展。NLP 技术通过聊天机器人、虚拟助手和语音激活界面的开发影响了软件开发。这些应用程序允许用户使用自然语言与软件系统交互,增强用户体验并为软件开发开辟了新途径。
- 智能推荐和个性化
AI 算法可以分析大量数据以做出智能推荐并个性化软件体验。例如,人工智能驱动的推荐系统用于电子商务应用程序,根据用户偏好和浏览历史记录推荐产品。同样,AI 可以根据个人用户行为和模式个性化用户界面、内容和功能。
- 数据驱动的决策
随着数据可用性的不断提高,机器学习等人工智能技术使开发人员能够在软件开发中做出数据驱动的决策。机器学习算法可以分析大型数据集、提取模式并进行预测。这可以帮助开发人员在各个领域,例如预测用户行为、优化性能和提高安全性。
- 代码生成和优化
AI 可以根据现有模式和示例生成代码。这包括集成开发环境 (IDE) 中的自动完成建议和 AI 为特定任务生成的代码片段。AI 还可以通过识别冗余或低效部分并提出改进建议来优化代码。
- DevOps 和持续集成
AI 促进了 DevOps 实践和持续集成/持续交付 (CI/CD) 管道的发展。AI 技术可以分析代码更改、测试结果和生产指标,以提供有关性能、质量和潜在问题的见解。这有助于简化软件开发生命周期、改进部署流程并提高整体软件质量。
值得注意的是,虽然 AI 为软件开发带来了进步和自动化,但它并不能取代对熟练的人类软件工程师的需求。人类专业知识对于设计强大的系统、确保道德考虑以及理解软件开发项目的更广泛背景仍然至关重要。
3、替代软件开发人员的工具?
有几种 AI 工具和框架常用于软件开发,以促进工作并实现 AI 驱动应用程序的开发。以下是一些最受欢迎的工具和框架:
- TensorFlow:TensorFlow 是 Google 开发的开源库,广泛用于构建和训练深度学习模型。它为开发各种 AI 应用程序提供了灵活而全面的生态系统,并支持各种平台和设备。
- PyTorch:PyTorch 是另一个流行的开源深度学习框架,以其动态计算图而闻名,这使得调试和试验模型变得更加容易。它因其简单性而广受欢迎,常用于研究和快速制作 AI 模型的原型。
- scikit-learn:scikit-learn 是一个 Python 机器学习库,它为分类、回归、聚类和降维等任务提供了一系列算法和工具。它提供了一个简单而一致的 API,广泛用于传统的机器学习任务。
- Keras:Keras 是一个在 TensorFlow 或其他后端引擎上运行的高级神经网络 API。它提供了一个用户友好的界面来构建和训练神经网络,因此在初学者和研究人员中很受欢迎。Keras 提供了一个抽象层,简化了创建和试验神经网络的过程。
- OpenAI Gym:OpenAI Gym 是一个流行的工具包,用于开发和比较强化学习算法。它提供了一组用于训练和评估强化学习代理的环境和工具。OpenAI Gym 广泛用于强化学习领域的研究和实验。
- Jupyter Notebooks:Jupyter Notebooks 是基于 Web 的交互式环境,允许开发人员创建和共享包含实时代码、可视化和解释性文本的文档。它们在 AI 社区中被广泛用于数据探索、原型设计和共享研究成果。
- 自然语言工具包 (NLTK):NLTK 是一个 Python 库,提供用于处理人类语言数据的工具和资源。它为标记化、词干提取、词性标记和情感分析等任务提供了各种功能。NLTK 通常用于与 NLP 相关的项目。
- Apache Spark:Apache Spark 是一个分布式计算框架,为大数据处理提供统一的分析引擎。它提供高效的数据处理功能,并支持机器学习和图形处理算法。Spark 通常用于需要处理海量数据集的大规模数据分析和 AI 应用程序。
- GitHub Copilot:GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的 AI 驱动的代码完成工具。它使用在大量开源存储库代码上训练的机器学习模型,在开发人员编写时建议代码片段和完成。Copilot 旨在通过直接在开发人员的编码环境中提供上下文感知建议,帮助开发人员更快、更高效地编写代码。
- Microsoft Azure 认知服务:Microsoft Azure 提供了一套称为认知服务的 AI 服务。这些服务提供预先训练的 AI 模型和 API,开发人员可以使用它们将各种 AI 功能添加到他们的应用程序中。一些示例包括计算机视觉、自然语言处理、语音识别和情感分析。Azure 认知服务简化了 AI 功能与软件开发项目的集成。
- IBM Watson:IBM Watson 是一个全面的 AI 平台,提供一系列用于构建 AI 驱动应用程序的服务和工具。它提供自然语言理解、视觉识别、语音转文本、文本转语音等功能。IBM Watson 提供预先训练的模型和 API,使开发人员无需从头开始构建模型即可利用 AI 功能。
- Amazon SageMaker:Amazon SageMaker 是 Amazon Web Services (AWS) 提供的一项完全托管的服务,旨在简化机器学习模型的开发和部署。它提供了一整套用于大规模构建、训练和部署模型的工具。SageMaker 提供广泛的算法,支持 TensorFlow 和 PyTorch 等流行框架,并包括数据预处理、模型优化和模型托管功能。
- Google Cloud AI Platform:Google Cloud AI Platform 是 Google Cloud 提供的一套基于云的工具和服务,用于开发、训练和部署机器学习模型。它提供基础设施、库和框架来简化开发过程。 Google Cloud AI Platform 支持 TensorFlow、PyTorch 和其他流行框架,并提供分布式训练、超参数调整和模型服务功能。
4、缩小技能差距
为了成功缩小软件开发行业中存在的技能差距,软件开发人员自己必须意识到他们的技能组合必须改变。
根据求职网站 Indeed 的一份报告,市场上最受欢迎的三个人工智能职位是数据科学家、软件工程师和机器学习工程师。在过去三年中,对这些职位和其他人工智能相关职位的需求增加了一倍多,预计还会继续以类似的速度增长。
软件开发人员需要精通人工智能项目的技能包括数学、代数、微积分、统计学、大数据、数据挖掘、数据科学、机器学习、MLOps、认知计算、文本分析、自然语言处理、R、Hadoop、Spark 等。
5、AI时代软件开发人员的关键技能
在人工智能时代,开发人员可以提高自己的技能以保持相关性并利用人工智能带来的机遇。以下是人工智能时代开发人员的一些关键技能:
- 机器学习 (ML) 和数据科学
了解机器学习的原理和技术至关重要。开发人员应该了解不同的 ML 算法、数据预处理、特征工程、模型评估和部署。此外,获得数据科学方面的知识,包括数据可视化、探索性数据分析和统计分析,可以为使用人工智能系统奠定坚实的基础。
- 神经网络和深度学习
深度学习彻底改变了人工智能,并广泛应用于各种应用。开发人员应该熟悉神经网络,包括用于图像处理的卷积神经网络 (CNN) 和用于序列数据的循环神经网络 (RNN)。TensorFlow 和 PyTorch 等学习框架对于构建和训练深度学习模型非常有用。
- 自然语言处理 (NLP)
NLP 专注于理解和处理人类语言。开发人员可以学习文本预处理、情感分析、命名实体识别和语言生成等技术。了解 NLTK、spaCy 和 transformers 等库对处理 NLP 任务大有裨益。
- 数据工程和数据管理
使用 AI 通常涉及处理大型数据集。开发人员应该学习数据工程技术、数据预处理和数据清理,以确保数据质量。此外,了解数据库、分布式计算框架(如 Apache Hadoop 和 Apache Spark)以及基于云的数据服务对于管理和处理 AI 应用程序的数据非常有价值。
- 软件开发实践和工具
虽然 AI 技能至关重要,但开发人员不应忽视核心软件开发实践。强大的编程技能、软件设计原则以及对 Python、Java 或 C++ 等流行编程语言的了解仍然必不可少。此外,熟悉版本控制系统(例如 Git)、协作开发工具和软件测试方法也很重要。
- 合乎道德和负责任的 AI
随着 AI 越来越多地融入社会,道德考量至关重要。开发人员应该了解 AI 的道德影响,例如公平、透明、隐私和偏见。他们应该努力开发遵守道德准则并降低潜在风险的 AI 系统。
- 领域知识和解决问题
AI 应用于医疗保健、金融、机器人和自主系统等各个领域。开发人员应掌握特定领域的知识,以了解特定行业的挑战、要求和限制。强大的问题解决能力、批判性思维以及将复杂问题分解为可管理组件的能力对于设计有效的 AI 解决方案至关重要。
- 技术债务管理
开发人员需要知道如何应对各种类型的不断增长的技术债务。管理技术债务对于确保软件能够在不进行大量返工的情况下发展和发展至关重要。软件工程师必须在快速修复的直接好处与对生产力的长期影响之间取得平衡。
所需的技能包括技术债务优先级、技术债务指标、考虑业务目标应对技术债务等。
- 终身学习和适应性
AI 领域正在迅速发展,因此开发人员必须接受终身学习。他们应该随时了解 AI 的最新研究、技术和进步。跟上在线课程、参加会议、参与 AI 社区和探索开源项目可以帮助开发人员在这个充满活力的领域保持领先地位。
通过掌握这些技能,开发人员可以利用人工智能的力量,有效地为各个行业的人工智能驱动解决方案的开发做出贡献。
显然,对于大多数软件开发人员来说,掌握每一项与人工智能相关的技能几乎是不可能的,尤其是考虑到人工智能领域发展速度之快。这就是为什么想要在人工智能时代保持相关性的软件开发人员应该将自己视为专家型通才,并将学习新技能视为一个持续的过程。
拥有广泛的知识可以让你更容易根据当前的市场需求在某一特定领域获得深厚的专业知识。“那些最了解其领域基本复杂性的开发人员将会取得成功:哪些数据很重要,以及不确定性对决策的影响等,”颠覆性技术咨询公司 MOKA 的工程主管 Todd Schiller 说。
软件开发人员不需要了解最新机器学习算法的复杂细节,也不需要掌握最流行的编程语言来从事人工智能项目,但不能驾驭人工智能领域并以业务发展的速度学习新技能,这也同样不是一种选择。
6、未来是否仍需要软件工程师?
虽然人工智能 (AI) 有可能自动化某些任务并影响各个行业,但在可预见的未来,软件工程师不太可能完全被人工智能取代。原因如下:
- 解决复杂问题
软件工程涉及解决复杂问题、设计算法和开发复杂的软件系统。虽然人工智能可以帮助自动化某些重复性任务并优化流程,但它仍然需要人类专业知识来概念化、架构和设计满足特定要求的复杂软件解决方案。
- 创造力和创新
软件工程通常涉及创造力和创新,例如设计用户界面、创造独特的用户体验和开发新颖的算法。虽然人工智能可以根据现有模式和数据生成解决方案,但它目前缺乏与人类创造力和直觉相匹配的能力。
- 道德考虑
软件工程师有责任确保他们开发的软件符合道德标准、尊重隐私并减轻偏见。这些道德考量需要人类的判断和决策,因为人工智能系统可能会无意中延续偏见或以不符合人类价值观的方式行事。软件工程师在确保整个软件开发过程中遵守道德规范方面发挥着至关重要的作用。
- 适应性和情境理解
软件工程师具有情境理解和适应不断变化的需求的能力。他们与利益相关者密切合作,收集需求、了解业务需求并创建符合特定情境的软件解决方案。虽然人工智能可以协助数据分析和模式识别,但人类软件工程师更有能力理解复杂的情境、做出明智的决策并相应地调整软件系统。
- 协作和沟通
软件工程通常涉及与跨职能团队、客户和最终用户的协作。有效的沟通、团队合作和了解各种利益相关者的需求对于成功的软件开发至关重要。人类软件工程师拥有对这些协作工作至关重要的人际交往技能和领域专业知识。
虽然人工智能将继续影响软件工程领域,但它更有可能增强软件工程师的工作,而不是完全取代他们。人工智能可以帮助自动执行重复性任务、优化代码并协助软件开发的特定方面。然而,软件工程师的技能和专业知识对于设计复杂系统、确保质量、解决道德问题和推动该领域的创新仍然至关重要。
7、结束语
虽然一些软件开发人员已经认命了,但大多数人都想知道人工智能究竟会如何改变软件开发,以便他们能够尽快开始获得相关的新技能。
“未来很大一部分程序员不会维护复杂的软件存储库、编写复杂的程序或分析其运行时间,”OpenAI 前研究科学家、现任特斯拉人工智能总监的 Andrej Karpathy 认为。“他们收集、清理、操作、标记、分析和可视化输入神经网络的数据。”
Karpathy 提出了一种人工智能时代的新软件开发流程,称为软件 2.0,其关键组件包括问题和目标定义、数据收集、数据准备、模型学习、模型部署和集成以及模型管理。未来的软件开发人员将获取和编写大型数据集来训练应用程序变得智能,而不是硬编码所需的功能。
由微软和剑桥大学学者共同开发的 DeepCoder 等解决方案已经让我们看到了软件开发的未来。 DeepCoder 可以通过预测应用程序必须具备哪些属性才能从输入中生成所需的输出来创建新的应用程序。
虽然微软的解决方案还处于高度实验阶段,但育碧与康考迪亚大学研究人员合作开发的 Commit Assistant AI 已经用于育碧的两大系列游戏《彩虹六号》和《刺客信条》。Commit Assistant AI 会在程序员编写代码时自动识别代码缺陷,为开发人员节省约 20% 的时间。
“它涉及所有软件开发人员。我相信,未来我们将部署越来越多的人工智能技术,以减轻软件行业的维护负担,”康考迪亚大学研究员 Wahab Hamou-Lhadj 表示。
人工智能将彻底重塑软件开发,迫使软件开发人员掌握新技能,以保持相关性。那些最成功地适应即将到来的时代的人将获得大量的工作机会,但这个过程需要一种与当今许多软件开发人员不同的思维方式。
y原文链接:Is There a Future for Software Engineers? The Impact of AI [2024]
BimAnt翻译整理,转载请标明出处